diff --git a/src/main/java/dk/camelot64/kickc/CompileLog.java b/src/main/java/dk/camelot64/kickc/CompileLog.java index ea9f0a2b2..a02c9b8c4 100644 --- a/src/main/java/dk/camelot64/kickc/CompileLog.java +++ b/src/main/java/dk/camelot64/kickc/CompileLog.java @@ -67,6 +67,11 @@ public class CompileLog { */ private boolean verboseCreateSsa = false; + /** + * Output information about struct unwinding + */ + private boolean verboseStructUnwind = false; + /** Should comments be output as part of the intermediate SSA prints. */ private boolean verboseComments = false; @@ -144,6 +149,19 @@ public class CompileLog { return this; } + public boolean isVerboseStructUnwind() { + return verboseStructUnwind; + } + + public void setVerboseStructUnwind(boolean verboseStructUnwind) { + this.verboseStructUnwind = verboseStructUnwind; + } + + public CompileLog verboseStructUnwind() { + setVerboseStructUnwind(true); + return this; + } + public void setVerboseComments(boolean verboseComments) { this.verboseComments = verboseComments; } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructValues.java b/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructValues.java index 96479e0f9..8c041a363 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructValues.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructValues.java @@ -74,7 +74,8 @@ public class Pass1UnwindStructValues extends Pass1Base { if(structValueSource != null) { final ValueSource memberUnwinding = structValueSource.getMemberUnwinding(structMemberRef.getMemberName(), getProgram(), getScope(), currentStmt, stmtIt, currentBlock); RValue memberSimpleValue = memberUnwinding.getSimpleValue(getScope()); - getLog().append("Replacing struct member reference " + structMemberRef.toString(getProgram()) + " with member unwinding reference " + memberSimpleValue.toString(getProgram())); + if(getLog().isVerboseStructUnwind()) + getLog().append("Replacing struct member reference " + structMemberRef.toString(getProgram()) + " with member unwinding reference " + memberSimpleValue.toString(getProgram())); programValue.set(memberSimpleValue); modified.set(true); } @@ -95,7 +96,8 @@ public class Pass1UnwindStructValues extends Pass1Base { RValue unwoundLValue = unwindValue(valueSource, call, stmtIt, currentBlock); if(unwoundLValue != null && !call.getlValue().equals(unwoundLValue)) { call.setlValue((LValue) unwoundLValue); - getLog().append("Converted procedure call LValue to member unwinding " + call.toString(getProgram(), false)); + if(getLog().isVerboseStructUnwind()) + getLog().append("Converted procedure call LValue to member unwinding " + call.toString(getProgram(), false)); lvalUnwound = true; } @@ -122,13 +124,15 @@ public class Pass1UnwindStructValues extends Pass1Base { if(anyParameterUnwound) { call.setParameters(unwoundParameters); - getLog().append("Converted call struct value parameter to member unwinding " + call.toString(getProgram(), false)); + if(getLog().isVerboseStructUnwind()) + getLog().append("Converted call struct value parameter to member unwinding " + call.toString(getProgram(), false)); } return (anyParameterUnwound || lvalUnwound); } /** * Unwind an LVa.lue to a ValueList if it is unwindable. + * * @param value The value to unwind * @param statement The current statement * @param stmtIt Statement iterator @@ -136,7 +140,7 @@ public class Pass1UnwindStructValues extends Pass1Base { * @return The unwound ValueList. null if the value is not unwindable. */ private RValue unwindValue(ValueSource lValueSource, Statement statement, ListIterator stmtIt, ControlFlowBlock currentBlock) { - if(lValueSource==null) { + if(lValueSource == null) { return null; } else if(lValueSource.isSimple()) { return lValueSource.getSimpleValue(getScope()); @@ -164,7 +168,8 @@ public class Pass1UnwindStructValues extends Pass1Base { RValue unwoundValue = unwindValue(valueSource, statementReturn, stmtIt, currentBlock); if(unwoundValue != null && !statementReturn.getValue().equals(unwoundValue)) { statementReturn.setValue(unwoundValue); - getLog().append("Converted procedure struct return value to member unwinding " + statementReturn.toString(getProgram(), false)); + if(getLog().isVerboseStructUnwind()) + getLog().append("Converted procedure struct return value to member unwinding " + statementReturn.toString(getProgram(), false)); unwound = true; } return unwound; @@ -194,7 +199,8 @@ public class Pass1UnwindStructValues extends Pass1Base { } if(procedureUnwound) { procedure.setParameterNames(unwoundParameterNames); - getLog().append("Converted procedure struct value parameter to member unwinding " + procedure.toString(getProgram())); + if(getLog().isVerboseStructUnwind()) + getLog().append("Converted procedure struct value parameter to member unwinding " + procedure.toString(getProgram())); modified = true; } } @@ -252,7 +258,8 @@ public class Pass1UnwindStructValues extends Pass1Base { Statement copyStmt = new StatementAssignment(lValueRef, rValueRef, initialAssignment, currentStmt.getSource(), Comment.NO_COMMENTS); stmtIt.add(copyStmt); stmtIt.next(); - getLog().append("Adding value simple copy " + copyStmt.toString(getProgram(), false)); + if(getLog().isVerboseStructUnwind()) + getLog().append("Adding value simple copy " + copyStmt.toString(getProgram(), false)); return true; } else if(lValueSource.isBulkCopyable() && rValueSource.isBulkCopyable()) { // Use bulk unwinding for a struct member that is an array @@ -267,10 +274,12 @@ public class Pass1UnwindStructValues extends Pass1Base { Statement copyStmt = new StatementAssignment(lValueMemberVarRef, rValueBulkUnwinding, initialAssignment, currentStmt.getSource(), Comment.NO_COMMENTS); stmtIt.add(copyStmt); stmtIt.next(); - getLog().append("Adding value bulk copy " + copyStmt.toString(getProgram(), false)); + if(getLog().isVerboseStructUnwind()) + getLog().append("Adding value bulk copy " + copyStmt.toString(getProgram(), false)); return true; } else if(lValueSource.isUnwindable() && rValueSource.isUnwindable()) { - getLog().append("Unwinding value copy " + currentStmt.toString(getProgram(), false)); + if(getLog().isVerboseStructUnwind()) + getLog().append("Unwinding value copy " + currentStmt.toString(getProgram(), false)); for(String memberName : lValueSource.getMemberNames(getScope())) { ValueSource lValueSubSource = lValueSource.getMemberUnwinding(memberName, getProgram(), getScope(), currentStmt, stmtIt, currentBlock); ValueSource rValueSubSource = rValueSource.getMemberUnwinding(memberName, getProgram(), getScope(), currentStmt, stmtIt, currentBlock); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructVariables.java b/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructVariables.java index 7ee68f6a6..e5e5c97d7 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructVariables.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructVariables.java @@ -8,9 +8,10 @@ import dk.camelot64.kickc.model.symbols.StructDefinition; import dk.camelot64.kickc.model.symbols.Variable; import dk.camelot64.kickc.model.types.SymbolTypeStruct; -/** Create unwindings for all unwinding struct variables. The unwinding is a conversion to one variable per member. +/** + * Create unwindings for all unwinding struct variables. The unwinding is a conversion to one variable per member. * The unwindings are stored in {@link Program#getStructVariableMemberUnwinding()} - * */ + */ public class Pass1UnwindStructVariables extends Pass1Base { public Pass1UnwindStructVariables(Program program) { @@ -49,9 +50,11 @@ public class Pass1UnwindStructVariables extends Pass1Base { Variable memberVariable = Variable.createStructMemberUnwound(variable, member, isParameter); scope.add(memberVariable); variableUnwinding.setMemberUnwinding(member.getLocalName(), memberVariable.getRef()); - getLog().append("Created struct value member variable " + memberVariable.toString(getProgram())); + if(getLog().isVerboseStructUnwind()) + getLog().append("Created struct value member variable " + memberVariable.toString(getProgram())); } - getLog().append("Converted struct value to member variables " + variable.toString(getProgram())); + if(getLog().isVerboseStructUnwind()) + getLog().append("Converted struct value to member variables " + variable.toString(getProgram())); modified = true; } } diff --git a/src/main/kc/include/c64.h b/src/main/kc/include/c64.h index 7342d5568..c18689236 100644 --- a/src/main/kc/include/c64.h +++ b/src/main/kc/include/c64.h @@ -1,4 +1,6 @@ // Commodore 64 Registers and Constants +#include +#include // Processor port data direction register char* const PROCPORT_DDR = $00; @@ -81,87 +83,19 @@ const char IRQ_LIGHTPEN = %00001000; // Color Ram char* const COLS = $d800; -// The MOS 6526 Complex Interface Adapter (CIA) -// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf -struct MOS6526_CIA { - // Port A - char PORT_A; - // Port B - char PORT_B; - // Port A data direction register. - char PORT_A_DDR; - // Port B data direction register. - char PORT_B_DDR; - // Timer A Value - unsigned int TIMER_A; - // Timer B Value - unsigned int TIMER_B; - // Time-of-day real-time-clock tenth seconds (BCD) - char TOD_10THS; - // Time-of-day real-time-clock seconds (BCD) - char TOD_SEC; - // Time-of-day real-time-clock minutes (BCD) - char TOD_MIN; - // Time-of-day real-time-clock hours (BCD) - char TOD_HOURS; - // Serial Shift Register - char SERIAL_DATA; - // Interrupt Status & Control Register - char INTERRUPT; - // Timer A Control Register - char TIMER_A_CONTROL; - // Timer B Control Register - char TIMER_B_CONTROL; -}; - // The CIA#1: keyboard matrix, joystick #1/#2 struct MOS6526_CIA * const CIA1 = 0xdc00; - // The CIA#2: Serial bus, RS-232, VIC memory bank struct MOS6526_CIA * const CIA2 = 0xdd00; - // CIA#1 Interrupt for reading in ASM char * const CIA1_INTERRUPT = 0xdc0d; -// CIA#2 Interrupt for reading in ASM -char * const CIA2_INTERRUPT = 0xdd0d; // CIA#2 timer A&B as one single 32-bit value unsigned long* const CIA2_TIMER_AB = 0xdd04; +// CIA#2 Interrupt for reading in ASM +char * const CIA2_INTERRUPT = 0xdd0d; -// Value that disables all CIA interrupts when stored to the CIA Interrupt registers -const char CIA_INTERRUPT_CLEAR = $7f; - -// Timer Control - Start/stop timer (0:stop, 1: start) -const char CIA_TIMER_CONTROL_STOP = 0b00000000; -// Timer Control - Start/stop timer (0:stop, 1: start) -const char CIA_TIMER_CONTROL_START = 0b00000001; -// Timer Control - Time CONTINUOUS/ONE-SHOT (0:CONTINUOUS, 1: ONE-SHOT) -const char CIA_TIMER_CONTROL_CONTINUOUS = 0b00000000; -// Timer Control - Time CONTINUOUS/ONE-SHOT (0:CONTINUOUS, 1: ONE-SHOT) -const char CIA_TIMER_CONTROL_ONESHOT = 0b00001000; -// Timer A Control - Timer counts (0:system cycles, 1: CNT pulses) -const char CIA_TIMER_CONTROL_A_COUNT_CYCLES = 0b00000000; -// Timer A Control - Timer counts (0:system cycles, 1: CNT pulses) -const char CIA_TIMER_CONTROL_A_COUNT_CNT = 0b00100000; -// Timer A Control - Serial Port Mode (0: Serial Port Input, 1: Serial Port Output) -const char CIA_TIMER_CONTROL_A_SERIAL_IN = 0b00000000; -// Timer A Control - Serial Port Mode (0: Serial Port Input, 1: Serial Port Output) -const char CIA_TIMER_CONTROL_A_SERIAL_OUT = 0b01000000; -// Timer A Control - time-of-day clock Mode (0: 60Hz, 1: 50Hz) -const char CIA_TIMER_CONTROL_A_TOD_60HZ = 0b00000000; -// Timer A Control - time-of-day clock Mode (0: 60Hz, 1: 50Hz) -const char CIA_TIMER_CONTROL_A_TOD_50HZ = 0b10000000; -// Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) -const char CIA_TIMER_CONTROL_B_COUNT_CYCLES = 0b00000000; -// Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) -const char CIA_TIMER_CONTROL_B_COUNT_CNT = 0b00100000; -// Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) -const char CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = 0b01000000; -// Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) -const char CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A_CNT = 0b01100000; -// Timer B Control - time-of-day write mode (0: TOD clock, 1: TOD alarm) -const char CIA_TIMER_CONTROL_B_TOD_CLOCK_SET = 0b00000000; -// Timer B Control - time-of-day write mode (0: TOD clock, 1: TOD alarm) -const char CIA_TIMER_CONTROL_B_TOD_ALARM_SET = 0b10000000; +// The SID MOD 6581/8580 +struct MOS6581_SID * const SID = 0xd400; // The vector used when the KERNAL serves IRQ interrupts void()** const KERNEL_IRQ = $0314; @@ -171,10 +105,6 @@ void()** const KERNEL_NMI = $0318; // The vector used when the HARDWARE serves IRQ interrupts void()** const HARDWARE_IRQ = $fffe; -// The SID volume -char* const SID_VOLUME = $d418; - - // The colors of the C64 const char BLACK = $0; const char WHITE = $1; @@ -195,16 +125,26 @@ const char LIGHT_GREY = $f; // Get the value to store into D018 to display a specific screen and charset/bitmap // Optimized for ASM from (char)((((unsigned int)screen&0x3fff)/$40)|(((unsigned int)charset&$3fff)/$400)); -inline char toD018(char* screen, char* gfx); +char toD018(char* screen, char* gfx); // Get the value to store into DD00 (CIA 2 port A) to choose a specific VIC bank // Optimized for ASM from %00000011 ^ (char)((unsigned int)gfx/$4000) -inline char toDd00(char* gfx); +char toDd00(char* gfx); // Get the sprite pointer for a sprite. // The sprite pointer is the index of the sprite within the graphics bank and equal to the sprite (char)(sprite_addr/64) // The sprite pointers are stored SCREEN+$3f8+sprite_id to set the pointer of each sprite -inline char toSpritePtr(char* sprite); +char toSpritePtr(char* sprite); // Select a specific VIC graphics bank by setting the CIA 2 port A ($dd00) as needed -inline void vicSelectGfxBank(char* gfx); +void vicSelectGfxBank(char* gfx); + +// Initialize SID voice 3 for random number generation +void sid_rnd_init(); + +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +char sid_rnd(); + + + diff --git a/src/main/kc/include/mos6526.h b/src/main/kc/include/mos6526.h new file mode 100644 index 000000000..b784986b9 --- /dev/null +++ b/src/main/kc/include/mos6526.h @@ -0,0 +1,68 @@ +// The MOS 6526 Complex Interface Adapter (CIA) +// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf +struct MOS6526_CIA { + // Port A + char PORT_A; + // Port B + char PORT_B; + // Port A data direction register. + char PORT_A_DDR; + // Port B data direction register. + char PORT_B_DDR; + // Timer A Value + unsigned int TIMER_A; + // Timer B Value + unsigned int TIMER_B; + // Time-of-day real-time-clock tenth seconds (BCD) + char TOD_10THS; + // Time-of-day real-time-clock seconds (BCD) + char TOD_SEC; + // Time-of-day real-time-clock minutes (BCD) + char TOD_MIN; + // Time-of-day real-time-clock hours (BCD) + char TOD_HOURS; + // Serial Shift Register + char SERIAL_DATA; + // Interrupt Status & Control Register + char INTERRUPT; + // Timer A Control Register + char TIMER_A_CONTROL; + // Timer B Control Register + char TIMER_B_CONTROL; +}; + +// Value that disables all CIA interrupts when stored to the CIA Interrupt registers +const char CIA_INTERRUPT_CLEAR = $7f; + +// Timer Control - Start/stop timer (0:stop, 1: start) +const char CIA_TIMER_CONTROL_STOP = 0b00000000; +// Timer Control - Start/stop timer (0:stop, 1: start) +const char CIA_TIMER_CONTROL_START = 0b00000001; +// Timer Control - Time CONTINUOUS/ONE-SHOT (0:CONTINUOUS, 1: ONE-SHOT) +const char CIA_TIMER_CONTROL_CONTINUOUS = 0b00000000; +// Timer Control - Time CONTINUOUS/ONE-SHOT (0:CONTINUOUS, 1: ONE-SHOT) +const char CIA_TIMER_CONTROL_ONESHOT = 0b00001000; +// Timer A Control - Timer counts (0:system cycles, 1: CNT pulses) +const char CIA_TIMER_CONTROL_A_COUNT_CYCLES = 0b00000000; +// Timer A Control - Timer counts (0:system cycles, 1: CNT pulses) +const char CIA_TIMER_CONTROL_A_COUNT_CNT = 0b00100000; +// Timer A Control - Serial Port Mode (0: Serial Port Input, 1: Serial Port Output) +const char CIA_TIMER_CONTROL_A_SERIAL_IN = 0b00000000; +// Timer A Control - Serial Port Mode (0: Serial Port Input, 1: Serial Port Output) +const char CIA_TIMER_CONTROL_A_SERIAL_OUT = 0b01000000; +// Timer A Control - time-of-day clock Mode (0: 60Hz, 1: 50Hz) +const char CIA_TIMER_CONTROL_A_TOD_60HZ = 0b00000000; +// Timer A Control - time-of-day clock Mode (0: 60Hz, 1: 50Hz) +const char CIA_TIMER_CONTROL_A_TOD_50HZ = 0b10000000; +// Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) +const char CIA_TIMER_CONTROL_B_COUNT_CYCLES = 0b00000000; +// Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) +const char CIA_TIMER_CONTROL_B_COUNT_CNT = 0b00100000; +// Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) +const char CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = 0b01000000; +// Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) +const char CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A_CNT = 0b01100000; +// Timer B Control - time-of-day write mode (0: TOD clock, 1: TOD alarm) +const char CIA_TIMER_CONTROL_B_TOD_CLOCK_SET = 0b00000000; +// Timer B Control - time-of-day write mode (0: TOD clock, 1: TOD alarm) +const char CIA_TIMER_CONTROL_B_TOD_ALARM_SET = 0b10000000; \ No newline at end of file diff --git a/src/main/kc/include/mos6581.h b/src/main/kc/include/mos6581.h new file mode 100644 index 000000000..877ea19ea --- /dev/null +++ b/src/main/kc/include/mos6581.h @@ -0,0 +1,68 @@ +// The MOS 6581/8580 SID (Sound Interface Device) +// http://archive.6502.org/datasheets/mos_6581_sid.pdf +struct MOS6581_SID { + // Channel 1 Frequency + unsigned int CH1_FREQ; + // Channel 1 Pulse Width (0-4095) + unsigned int CH1_PULSE_WIDTH; + // Channel 1 Control + char CH1_CONTROL; + // Channel 1 Attack/decay + char CH1_ATTACK_DECAY; + // Channel 1 Sustain/Release + char CH1_SUSTAIN_RELEASE; + // Channel 2 Frequency + unsigned int CH2_FREQ; + // Channel 2 Pulse Width (0-4095) + unsigned int CH2_PULSE_WIDTH; + // Channel 2 Control + char CH2_CONTROL; + // Channel 2 Attack/decay + char CH2_ATTACK_DECAY; + // Channel 2 Sustain/Release + char CH2_SUSTAIN_RELEASE; + // Channel 3 Frequency + unsigned int CH3_FREQ; + // Channel 3 Pulse Width (0-4095) + unsigned int CH3_PULSE_WIDTH; + // Channel 3 Control + char CH3_CONTROL; + // Channel 3 Attack/decay + char CH3_ATTACK_DECAY; + // Channel 3 Sustain/Release + char CH3_SUSTAIN_RELEASE; + // Filter Cutoff Low + char FILTER_CUTOFF_LOW; + // Filter Cutoff High + char FILTER_CUTOFF_HIGH; + // Resonance and Filter Setup + char FILTER_SETUP; + // Resonance and Filter Setup + char VOLUME_FILTER_MODE; + // Potentiometer X + char POT_X; + // Potentiometer Y + char POT_Y; + // Channel 3 Oscillator Value + char CH3_OSC; + // Channel 3 Envelope Value + char CH3_ENV; +}; + +// SID Channel Control Register Noise Waveform +const char SID_CONTROL_NOISE = 0x80; +// SID Channel Control Register Pulse Waveform / Square Wave +const char SID_CONTROL_PULSE = 0x40; +// SID Channel Control Register Sawtooth Waveform +const char SID_CONTROL_SAWTOOTH = 0x20; +// SID Channel Control Register Triangle Waveform +const char SID_CONTROL_TRIANGLE = 0x10; +// SID Channel Control Register Test bit +const char SID_CONTROL_TEST = 0x08; +// SID Channel Control Register Ring Modulation +const char SID_CONTROL_RING = 0x04; +// SID Channel Control Register Synchronization +const char SID_CONTROL_SYNC = 0x02; +// SID Channel Control Register Gate +const char SID_CONTROL_GATE = 0x01; + diff --git a/src/main/kc/lib/c64.c b/src/main/kc/lib/c64.c index 2db84cf35..cf8a9b953 100644 --- a/src/main/kc/lib/c64.c +++ b/src/main/kc/lib/c64.c @@ -25,3 +25,16 @@ inline void vicSelectGfxBank(char* gfx) { CIA2->PORT_A_DDR = %00000011; CIA2->PORT_A = toDd00(gfx); } + +// Initialize SID voice 3 for random number generation +inline void sid_rnd_init() { + SID->CH3_FREQ = 0xffff; + SID->CH3_CONTROL = SID_CONTROL_NOISE; +} + +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +inline char sid_rnd() { + return SID->CH3_OSC; +} + diff --git a/src/test/kc/complex/tetris/sid.c b/src/test/kc/complex/tetris/sid.c deleted file mode 100644 index e89fc783c..000000000 --- a/src/test/kc/complex/tetris/sid.c +++ /dev/null @@ -1,27 +0,0 @@ -// SID registers for random number generation -unsigned int* const SID_VOICE3_FREQ = 0xd40e; -char* const SID_VOICE3_FREQ_LOW = 0xd40e; -char* const SID_VOICE3_FREQ_HIGH = 0xd40f; -char* const SID_VOICE3_CONTROL = 0xd412; -const char SID_CONTROL_NOISE = 0x80; -const char SID_CONTROL_PULSE = 0x40; -const char SID_CONTROL_SAWTOOTH = 0x20; -const char SID_CONTROL_TRIANGLE = 0x10; -const char SID_CONTROL_TEST = 0x08; -const char SID_CONTROL_RING = 0x04; -const char SID_CONTROL_SYNC = 0x02; -const char SID_CONTROL_GATE = 0x01; -char* const SID_VOICE3_OSC = 0xd41b; - -// Initialize SID voice 3 for random number generation -void sid_rnd_init() { - *SID_VOICE3_FREQ = 0xffff; - *SID_VOICE3_CONTROL = SID_CONTROL_NOISE; -} - -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -inline char sid_rnd() { - return *SID_VOICE3_OSC; -} - diff --git a/src/test/kc/complex/tetris/tetris.c b/src/test/kc/complex/tetris/tetris.c index 394b5883f..0ca63d28f 100644 --- a/src/test/kc/complex/tetris/tetris.c +++ b/src/test/kc/complex/tetris/tetris.c @@ -4,7 +4,6 @@ #include #include -#include "sid.c" #include "tetris-data.c" #include "tetris-render.c" #include "tetris-sprites.c" diff --git a/src/test/kc/examples/fire/fire.c b/src/test/kc/examples/fire/fire.c index 90720fb62..85f764e17 100644 --- a/src/test/kc/examples/fire/fire.c +++ b/src/test/kc/examples/fire/fire.c @@ -5,7 +5,6 @@ // Original source https://github.com/cc65/cc65/blob/master/samples/fire.c #include -#include "sid.c" unsigned char* SCREEN1 = 0x3800; unsigned char* SCREEN2 = 0x3c00; diff --git a/src/test/kc/examples/fire/sid.c b/src/test/kc/examples/fire/sid.c deleted file mode 100644 index 8b28b5986..000000000 --- a/src/test/kc/examples/fire/sid.c +++ /dev/null @@ -1,27 +0,0 @@ -// SID registers for random number generation -unsigned int* const SID_VOICE3_FREQ = $d40e; -char* const SID_VOICE3_FREQ_LOW = $d40e; -char* const SID_VOICE3_FREQ_HIGH = $d40f; -char* const SID_VOICE3_CONTROL = $d412; -const char SID_CONTROL_NOISE = $80; -const char SID_CONTROL_PULSE = $40; -const char SID_CONTROL_SAWTOOTH = $20; -const char SID_CONTROL_TRIANGLE = $10; -const char SID_CONTROL_TEST = $08; -const char SID_CONTROL_RING = $04; -const char SID_CONTROL_SYNC = $02; -const char SID_CONTROL_GATE = $01; -char* const SID_VOICE3_OSC = $d41b; - -// Initialize SID voice 3 for random number generation -void sid_rnd_init() { - *SID_VOICE3_FREQ = $ffff; - *SID_VOICE3_CONTROL = SID_CONTROL_NOISE; -} - -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -char sid_rnd() { - return *SID_VOICE3_OSC; -} - diff --git a/src/test/kc/examples/nmisamples/nmisamples.c b/src/test/kc/examples/nmisamples/nmisamples.c index ca48990ee..3669992ad 100644 --- a/src/test/kc/examples/nmisamples/nmisamples.c +++ b/src/test/kc/examples/nmisamples/nmisamples.c @@ -35,7 +35,7 @@ void main() { interrupt(hardware_all) void nmi() { (*BORDERCOL)++; asm { lda CIA2_INTERRUPT } - *SID_VOLUME = *sample & $0f; + SID->VOLUME_FILTER_MODE = *sample & $0f; *KERNEL_NMI = &nmi2; (*BORDERCOL)--; } @@ -43,7 +43,7 @@ interrupt(hardware_all) void nmi() { interrupt(hardware_all) void nmi2() { (*BORDERCOL)++; asm { lda CIA2_INTERRUPT } - *SID_VOLUME = *sample >> 4; + SID->VOLUME_FILTER_MODE = *sample >> 4; sample++; if (>sample == >(SAMPLE+$6100)) { sample = SAMPLE; diff --git a/src/test/kc/examples/plasma/plasma-unroll.c b/src/test/kc/examples/plasma/plasma-unroll.c index bb338d9e9..9dca3ebcb 100644 --- a/src/test/kc/examples/plasma/plasma-unroll.c +++ b/src/test/kc/examples/plasma/plasma-unroll.c @@ -8,7 +8,6 @@ #include #include -#include "sid.c" unsigned char* const SCREEN1 = $2800; unsigned char* const CHARSET = $2000; diff --git a/src/test/kc/examples/plasma/plasma.c b/src/test/kc/examples/plasma/plasma.c index cfd76dacb..f16657444 100644 --- a/src/test/kc/examples/plasma/plasma.c +++ b/src/test/kc/examples/plasma/plasma.c @@ -6,7 +6,6 @@ #include #include -#include "sid.c" char* const SCREEN1 = 0x2800; char* const SCREEN2 = 0x2c00; diff --git a/src/test/kc/examples/plasma/sid.c b/src/test/kc/examples/plasma/sid.c deleted file mode 100644 index a1b173f56..000000000 --- a/src/test/kc/examples/plasma/sid.c +++ /dev/null @@ -1,27 +0,0 @@ -// SID registers for random number generation -unsigned int* const SID_VOICE3_FREQ = $d40e; -char* const SID_VOICE3_FREQ_LOW = $d40e; -char* const SID_VOICE3_FREQ_HIGH = $d40f; -char* const SID_VOICE3_CONTROL = $d412; -const char SID_CONTROL_NOISE = $80; -const char SID_CONTROL_PULSE = $40; -const char SID_CONTROL_SAWTOOTH = $20; -const char SID_CONTROL_TRIANGLE = $10; -const char SID_CONTROL_TEST = $08; -const char SID_CONTROL_RING = $04; -const char SID_CONTROL_SYNC = $02; -const char SID_CONTROL_GATE = $01; -char* const SID_VOICE3_OSC = $d41b; - -// Initialize SID voice 3 for random number generation -void sid_rnd_init() { - *SID_VOICE3_FREQ = $ffff; - *SID_VOICE3_CONTROL = SID_CONTROL_NOISE; -} - -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -char sid_rnd() { - return *SID_VOICE3_OSC; -} - diff --git a/src/test/kc/plasma-center.c b/src/test/kc/plasma-center.c index 531613e7f..5a53d1bcc 100644 --- a/src/test/kc/plasma-center.c +++ b/src/test/kc/plasma-center.c @@ -6,8 +6,6 @@ #include #include #include -#include "sid.c" - const char align(0x100) SINTABLE[0x200] = kickasm {{ .for(var i=0;i<$200;i++) diff --git a/src/test/kc/sid.c b/src/test/kc/sid.c deleted file mode 100644 index 96f176bf5..000000000 --- a/src/test/kc/sid.c +++ /dev/null @@ -1,27 +0,0 @@ -// SID registers for random number generation -word* const SID_VOICE3_FREQ = $d40e; -byte* const SID_VOICE3_FREQ_LOW = $d40e; -byte* const SID_VOICE3_FREQ_HIGH = $d40f; -byte* const SID_VOICE3_CONTROL = $d412; -const byte SID_CONTROL_NOISE = $80; -const byte SID_CONTROL_PULSE = $40; -const byte SID_CONTROL_SAWTOOTH = $20; -const byte SID_CONTROL_TRIANGLE = $10; -const byte SID_CONTROL_TEST = $08; -const byte SID_CONTROL_RING = $04; -const byte SID_CONTROL_SYNC = $02; -const byte SID_CONTROL_GATE = $01; -byte* const SID_VOICE3_OSC = $d41b; - -// Initialize SID voice 3 for random number generation -void sid_rnd_init() { - *SID_VOICE3_FREQ = $ffff; - *SID_VOICE3_CONTROL = SID_CONTROL_NOISE; -} - -// Get a random number from the SID voice 3, -// Must be initialized with sid_rnd_init() -byte sid_rnd() { - return *SID_VOICE3_OSC; -} - diff --git a/src/test/ref/atoi-1.log b/src/test/ref/atoi-1.log index 97431bfef..da5e0ab04 100644 --- a/src/test/ref/atoi-1.log +++ b/src/test/ref/atoi-1.log @@ -4,125 +4,6 @@ Fixing struct type SIZE_OF struct printf_buffer_number to 12 Fixing struct type SIZE_OF struct printf_buffer_number to 12 Added struct type cast to parameter value list call printf_sint (signed word~) main::$1 (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } Added struct type cast to parameter value list call printf_sint (signed word~) main::$3 (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } -Created struct value member variable (byte) printf_slong::format_min_length -Created struct value member variable (byte) printf_slong::format_justify_left -Created struct value member variable (byte) printf_slong::format_sign_always -Created struct value member variable (byte) printf_slong::format_zero_padding -Created struct value member variable (byte) printf_slong::format_upper_case -Created struct value member variable (byte) printf_slong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_slong::format -Created struct value member variable (byte) printf_ulong::format_min_length -Created struct value member variable (byte) printf_ulong::format_justify_left -Created struct value member variable (byte) printf_ulong::format_sign_always -Created struct value member variable (byte) printf_ulong::format_zero_padding -Created struct value member variable (byte) printf_ulong::format_upper_case -Created struct value member variable (byte) printf_ulong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_ulong::format -Created struct value member variable (byte) printf_sint::format_min_length -Created struct value member variable (byte) printf_sint::format_justify_left -Created struct value member variable (byte) printf_sint::format_sign_always -Created struct value member variable (byte) printf_sint::format_zero_padding -Created struct value member variable (byte) printf_sint::format_upper_case -Created struct value member variable (byte) printf_sint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_sint::format -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Created struct value member variable (byte) printf_schar::format_min_length -Created struct value member variable (byte) printf_schar::format_justify_left -Created struct value member variable (byte) printf_schar::format_sign_always -Created struct value member variable (byte) printf_schar::format_zero_padding -Created struct value member variable (byte) printf_schar::format_upper_case -Created struct value member variable (byte) printf_schar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_schar::format -Created struct value member variable (byte) printf_uchar::format_min_length -Created struct value member variable (byte) printf_uchar::format_justify_left -Created struct value member variable (byte) printf_uchar::format_sign_always -Created struct value member variable (byte) printf_uchar::format_zero_padding -Created struct value member variable (byte) printf_uchar::format_upper_case -Created struct value member variable (byte) printf_uchar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uchar::format -Created struct value member variable (byte) printf_number_buffer::buffer_sign -Created struct value member variable (byte*) printf_number_buffer::buffer_digits -Converted struct value to member variables (struct printf_buffer_number) printf_number_buffer::buffer -Created struct value member variable (byte) printf_number_buffer::format_min_length -Created struct value member variable (byte) printf_number_buffer::format_justify_left -Created struct value member variable (byte) printf_number_buffer::format_sign_always -Created struct value member variable (byte) printf_number_buffer::format_zero_padding -Created struct value member variable (byte) printf_number_buffer::format_upper_case -Created struct value member variable (byte) printf_number_buffer::format_radix -Converted struct value to member variables (struct printf_format_number) printf_number_buffer::format -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_schar((signed byte) printf_schar::value , (byte) printf_schar::format_min_length , (byte) printf_schar::format_justify_left , (byte) printf_schar::format_sign_always , (byte) printf_schar::format_zero_padding , (byte) printf_schar::format_upper_case , (byte) printf_schar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix -Converted call struct value parameter to member unwinding call printf_sint (signed word~) main::$1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (signed word~) main::$3 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_slong::format.sign_always with member unwinding reference (byte) printf_slong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_slong::format.radix with member unwinding reference (byte) printf_slong::format_radix -Replacing struct member reference (struct printf_format_number) printf_ulong::format.sign_always with member unwinding reference (byte) printf_ulong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_ulong::format.radix with member unwinding reference (byte) printf_ulong::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_sint::format.sign_always with member unwinding reference (byte) printf_sint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_sint::format.radix with member unwinding reference (byte) printf_sint::format_radix -Replacing struct member reference (struct printf_format_number) printf_uint::format.sign_always with member unwinding reference (byte) printf_uint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uint::format.radix with member unwinding reference (byte) printf_uint::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_schar::format.sign_always with member unwinding reference (byte) printf_schar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_schar::format.radix with member unwinding reference (byte) printf_schar::format_radix -Replacing struct member reference (struct printf_format_number) printf_uchar::format.sign_always with member unwinding reference (byte) printf_uchar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uchar::format.radix with member unwinding reference (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.upper_case with member unwinding reference (byte) printf_number_buffer::format_upper_case -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left Eliminating unused variable with no statement (void~) main::$2 Eliminating unused variable with no statement (void~) main::$4 diff --git a/src/test/ref/bitmap-circle-2.log b/src/test/ref/bitmap-circle-2.log index 3ff96c4f7..0f882fa9f 100644 --- a/src/test/ref/bitmap-circle-2.log +++ b/src/test/ref/bitmap-circle-2.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -300,6 +298,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 @@ -993,6 +1014,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r) (signed word~) circle::$0 2002.0 (signed word~) circle::$10 200002.0 @@ -2000,6 +2044,7 @@ Uplift Scope [circle] 470,831.01: zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 Uplift Scope [fill] 3,471.33: zp[2]:17 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 220.4: zp[2]:51 [ fill::end#0 ] 166.83: zp[1]:16 [ fill::val#4 ] 101: zp[2]:14 [ fill::size#2 ] Uplift Scope [main] 303: zp[2]:2 [ main::i#2 main::i#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [plot] best 53688 combination zp[2]:12 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] zp[2]:31 [ plot::$8 ] reg byte a [ plot::$9 ] reg byte a [ plot::$10 ] zp[2]:41 [ plot::$15 ] zp[2]:43 [ plot::$16 ] zp[2]:45 [ plot::$12 ] reg byte a [ plot::$13 ] reg byte a [ plot::$14 ] zp[2]:39 [ plot::$11 ] zp[2]:10 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] zp[2]:47 [ plot::location#3 ] zp[2]:33 [ plot::location#1 ] zp[2]:37 [ plot::location#2 ] @@ -2008,6 +2053,7 @@ Uplifting [circle] best 53688 combination zp[2]:8 [ circle::p#3 circle::p#0 circ Uplifting [fill] best 53672 combination zp[2]:17 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:51 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:14 [ fill::size#2 ] Uplifting [main] best 53672 combination zp[2]:2 [ main::i#2 main::i#1 ] Uplifting [MOS6526_CIA] best 53672 combination +Uplifting [MOS6581_SID] best 53672 combination Uplifting [] best 53672 combination Coalescing zero page register [ zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:25 [ circle::$7 ] ] - score: 2 Coalescing zero page register [ zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 ] ] with [ zp[2]:29 [ circle::$10 ] ] - score: 2 @@ -2820,6 +2866,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-circle-2.sym b/src/test/ref/bitmap-circle-2.sym index 8fbccf3da..64b4a9f44 100644 --- a/src/test/ref/bitmap-circle-2.sym +++ b/src/test/ref/bitmap-circle-2.sym @@ -19,6 +19,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-circle.log b/src/test/ref/bitmap-circle.log index e9b815f55..639e06c19 100644 --- a/src/test/ref/bitmap-circle.log +++ b/src/test/ref/bitmap-circle.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -276,6 +274,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 @@ -899,6 +920,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r) (signed word~) circle::$10 2002.0 (signed word~) circle::$5 2002.0 @@ -1791,6 +1835,7 @@ Uplift Scope [plot] 20,684.33: zp[2]:10 [ plot::y#8 plot::y#5 plot::y#6 plot::y# Uplift Scope [circle] 4,691.5: zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] 2,363.47: zp[2]:2 [ circle::x1#10 circle::x1#1 ] 2,002: zp[2]:17 [ circle::$5 ] 2,002: zp[2]:19 [ circle::$6 ] 2,002: zp[2]:21 [ circle::$7 ] 2,002: zp[2]:23 [ circle::$9 ] 2,002: zp[2]:25 [ circle::$10 ] 1,691.43: zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 ] Uplift Scope [fill] 3,471.33: zp[2]:15 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 220.4: zp[2]:47 [ fill::end#0 ] 166.83: zp[1]:14 [ fill::val#4 ] 101: zp[2]:12 [ fill::size#2 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [] @@ -1799,6 +1844,7 @@ Limited combination testing to 100 combinations of 256 possible. Uplifting [circle] best 6419 combination zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] zp[2]:2 [ circle::x1#10 circle::x1#1 ] zp[2]:17 [ circle::$5 ] zp[2]:19 [ circle::$6 ] zp[2]:21 [ circle::$7 ] zp[2]:23 [ circle::$9 ] zp[2]:25 [ circle::$10 ] zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 ] Uplifting [fill] best 6403 combination zp[2]:15 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:47 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:12 [ fill::size#2 ] Uplifting [MOS6526_CIA] best 6403 combination +Uplifting [MOS6581_SID] best 6403 combination Uplifting [main] best 6403 combination Uplifting [] best 6403 combination Coalescing zero page register [ zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:21 [ circle::$7 ] ] - score: 2 @@ -2514,6 +2560,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-circle.sym b/src/test/ref/bitmap-circle.sym index 0ecbbe583..ee220967b 100644 --- a/src/test/ref/bitmap-circle.sym +++ b/src/test/ref/bitmap-circle.sym @@ -19,6 +19,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-line-anim-1.log b/src/test/ref/bitmap-line-anim-1.log index 263549ae5..4750fb356 100644 --- a/src/test/ref/bitmap-line-anim-1.log +++ b/src/test/ref/bitmap-line-anim-1.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -659,6 +657,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 @@ -2149,6 +2170,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) bitmap_clear() (byte*) bitmap_clear::bitmap (word) bitmap_clear::bitmap#0 101.0 @@ -3462,6 +3506,7 @@ Uplift Scope [bitmap_line] 1,334.67: zp[1]:29 [ bitmap_line::xd#2 ] 1,334.67: zp Uplift Scope [init_screen] 3,336.67: zp[2]:17 [ init_screen::c#2 init_screen::c#1 ] Uplift Scope [] 303: zp[1]:2 [ next#4 next#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplifting [bitmap_plot] best 40165 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] zp[2]:39 [ bitmap_plot::plotter_y#0 ] reg byte a [ bitmap_plot::$1 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp[2]:37 [ bitmap_plot::plotter_x#0 ] zp[2]:41 [ bitmap_plot::plotter#0 ] @@ -3476,6 +3521,7 @@ Uplifting [bitmap_line] best 38089 combination reg byte x [ bitmap_line::xd#2 ] Uplifting [init_screen] best 38089 combination zp[2]:17 [ init_screen::c#2 init_screen::c#1 ] Uplifting [] best 38089 combination zp[1]:2 [ next#4 next#1 ] Uplifting [MOS6526_CIA] best 38089 combination +Uplifting [MOS6581_SID] best 38089 combination Uplifting [main] best 38089 combination Attempting to uplift remaining variables inzp[1]:10 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] Uplifting [bitmap_line_ydxi] best 38089 combination zp[1]:10 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] @@ -4499,6 +4545,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-line-anim-1.sym b/src/test/ref/bitmap-line-anim-1.sym index 085ec46fb..a0527917e 100644 --- a/src/test/ref/bitmap-line-anim-1.sym +++ b/src/test/ref/bitmap-line-anim-1.sym @@ -19,6 +19,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/bitmap-line-anim-2.log b/src/test/ref/bitmap-line-anim-2.log index 0c1e83c6c..e593328c3 100644 --- a/src/test/ref/bitmap-line-anim-2.log +++ b/src/test/ref/bitmap-line-anim-2.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -576,6 +574,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) PURPLE = (byte) 4 (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_BMM = (byte) $20 @@ -1894,6 +1915,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 20002.0 (byte~) abs_u16::$1 20002.0 @@ -3201,6 +3245,7 @@ Uplift Scope [memset] 35,672.33: zp[2]:26 [ memset::dst#2 memset::dst#4 memset:: Uplift Scope [bitmap_init] 3,628.62: zp[2]:31 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 3,169.83: zp[1]:28 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 2,002: zp[1]:29 [ bitmap_init::x#2 bitmap_init::x#1 ] 2,002: zp[1]:30 [ bitmap_init::y#2 bitmap_init::y#1 ] 2,002: zp[1]:65 [ bitmap_init::$4 ] 2,002: zp[1]:66 [ bitmap_init::$5 ] 2,002: zp[1]:67 [ bitmap_init::$6 ] 500.5: zp[1]:64 [ bitmap_init::$7 ] Uplift Scope [] 404: zp[2]:2 [ next#5 next#3 next#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [bitmap_clear] Uplift Scope [main] @@ -3213,6 +3258,7 @@ Uplifting [bitmap_init] best 36538 combination zp[2]:31 [ bitmap_init::yoffs#2 b Limited combination testing to 100 combinations of 15360 possible. Uplifting [] best 36538 combination zp[2]:2 [ next#5 next#3 next#1 ] Uplifting [MOS6526_CIA] best 36538 combination +Uplifting [MOS6581_SID] best 36538 combination Uplifting [bitmap_clear] best 36538 combination Uplifting [main] best 36538 combination Attempting to uplift remaining variables inzp[1]:66 [ bitmap_init::$5 ] @@ -4249,6 +4295,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) PURPLE = (byte) 4 (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 diff --git a/src/test/ref/bitmap-line-anim-2.sym b/src/test/ref/bitmap-line-anim-2.sym index 28e4aaf9c..1708166b6 100644 --- a/src/test/ref/bitmap-line-anim-2.sym +++ b/src/test/ref/bitmap-line-anim-2.sym @@ -19,6 +19,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) PURPLE = (byte) 4 (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 diff --git a/src/test/ref/bitmap-plot-0.asm b/src/test/ref/bitmap-plot-0.asm index 43d0d05c4..1b1e49282 100644 --- a/src/test/ref/bitmap-plot-0.asm +++ b/src/test/ref/bitmap-plot-0.asm @@ -3,6 +3,8 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -27,8 +29,6 @@ .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 diff --git a/src/test/ref/bitmap-plot-0.log b/src/test/ref/bitmap-plot-0.log index 79d749503..1ebce78e2 100644 --- a/src/test/ref/bitmap-plot-0.log +++ b/src/test/ref/bitmap-plot-0.log @@ -2,9 +2,6 @@ Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$2 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -418,6 +415,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte*) PROCPORT_DDR = (byte*)(number) 0 @@ -1391,6 +1411,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (byte) bitmap_clear::bgcol (byte) bitmap_clear::col @@ -1549,6 +1592,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -1573,8 +1618,6 @@ Target platform is c64basic / MOS6502X .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -2265,6 +2308,7 @@ Uplift Scope [bitmap_plot] 2,103: zp[1]:23 [ bitmap_plot::y#0 ] 2,002: zp[2]:26 Uplift Scope [main] 387.17: zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] 303: zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ] 112.48: zp[2]:2 [ main::x#2 main::x#1 ] 101: zp[1]:4 [ main::y#2 main::y#1 ] Uplift Scope [] 7.78: zp[1]:20 [ frame_cnt ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] @@ -2276,6 +2320,7 @@ Uplifting [bitmap_plot] best 4316 combination reg byte x [ bitmap_plot::y#0 ] zp Uplifting [main] best 4316 combination zp[1]:7 [ main::vy#2 main::vy#8 main::vy#1 ] zp[2]:5 [ main::vx#2 main::vx#6 main::vx#1 ] zp[2]:2 [ main::x#2 main::x#1 ] zp[1]:4 [ main::y#2 main::y#1 ] Uplifting [] best 4316 combination zp[1]:20 [ frame_cnt ] Uplifting [MOS6526_CIA] best 4316 combination +Uplifting [MOS6581_SID] best 4316 combination Uplifting [bitmap_clear] best 4316 combination Uplifting [init_irq] best 4316 combination Uplifting [irq] best 4316 combination @@ -2319,6 +2364,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -2343,8 +2390,6 @@ ASSEMBLER BEFORE OPTIMIZATION .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -3012,6 +3057,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 @@ -3164,6 +3232,8 @@ Score: 3175 :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -3188,8 +3258,6 @@ Score: 3175 .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 diff --git a/src/test/ref/bitmap-plot-0.sym b/src/test/ref/bitmap-plot-0.sym index 121066d93..2cf77bea2 100644 --- a/src/test/ref/bitmap-plot-0.sym +++ b/src/test/ref/bitmap-plot-0.sym @@ -27,6 +27,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/bitmap-plot-1.asm b/src/test/ref/bitmap-plot-1.asm index 6e6f3044e..650ef1360 100644 --- a/src/test/ref/bitmap-plot-1.asm +++ b/src/test/ref/bitmap-plot-1.asm @@ -3,6 +3,8 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -27,8 +29,6 @@ .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 diff --git a/src/test/ref/bitmap-plot-1.log b/src/test/ref/bitmap-plot-1.log index 66f926f9b..172b62aee 100644 --- a/src/test/ref/bitmap-plot-1.log +++ b/src/test/ref/bitmap-plot-1.log @@ -2,9 +2,6 @@ Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$3 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -942,6 +939,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 @@ -3125,6 +3145,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (byte) bitmap_clear::bgcol (byte) bitmap_clear::col @@ -3683,6 +3726,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -3707,8 +3752,6 @@ Target platform is c64basic / MOS6502X .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -5915,6 +5958,7 @@ Uplift Scope [div32u16u] 2,002: zp[2]:215 [ div32u16u::quotient_lo#0 ] 400.4: zp Uplift Scope [main] 212.82: zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 202: zp[2]:66 [ main::$19 ] 202: zp[2]:68 [ main::$21 ] 202: zp[2]:70 [ main::cos_x#0 ] 202: zp[4]:76 [ main::xpos#0 ] 202: zp[4]:80 [ main::$6 ] 202: zp[2]:84 [ main::$7 ] 202: zp[2]:88 [ main::$20 ] 202: zp[2]:90 [ main::$22 ] 202: zp[2]:92 [ main::sin_y#0 ] 202: zp[4]:98 [ main::ypos#0 ] 202: zp[4]:102 [ main::$10 ] 202: zp[2]:106 [ main::$11 ] 147.29: zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] 50.5: zp[2]:108 [ main::y#0 ] 18.36: zp[2]:86 [ main::x#0 ] Uplift Scope [] 2,200.4: zp[2]:223 [ rem16u#1 ] 4.47: zp[1]:65 [ frame_cnt ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] @@ -5933,6 +5977,7 @@ Uplifting [div32u16u] best 26843 combination zp[2]:215 [ div32u16u::quotient_lo# Uplifting [main] best 26603 combination zp[2]:4 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp[2]:66 [ main::$19 ] zp[2]:68 [ main::$21 ] zp[2]:70 [ main::cos_x#0 ] zp[4]:76 [ main::xpos#0 ] zp[4]:80 [ main::$6 ] reg byte alu [ main::$7 ] zp[2]:88 [ main::$20 ] zp[2]:90 [ main::$22 ] zp[2]:92 [ main::sin_y#0 ] zp[4]:98 [ main::ypos#0 ] zp[4]:102 [ main::$10 ] reg byte alu [ main::$11 ] zp[2]:2 [ main::idx_x#3 main::idx_x#10 main::idx_x#1 ] zp[2]:108 [ main::y#0 ] zp[2]:86 [ main::x#0 ] Uplifting [] best 26603 combination zp[2]:223 [ rem16u#1 ] zp[1]:65 [ frame_cnt ] Uplifting [MOS6526_CIA] best 26603 combination +Uplifting [MOS6581_SID] best 26603 combination Uplifting [bitmap_clear] best 26603 combination Uplifting [init_irq] best 26603 combination Uplifting [irq] best 26603 combination @@ -6040,6 +6085,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -6064,8 +6111,6 @@ ASSEMBLER BEFORE OPTIMIZATION .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -7875,6 +7920,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 @@ -8275,6 +8343,8 @@ Score: 20648 :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -8299,8 +8369,6 @@ Score: 20648 .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 diff --git a/src/test/ref/bitmap-plot-1.sym b/src/test/ref/bitmap-plot-1.sym index 1f7efb64f..23252ad80 100644 --- a/src/test/ref/bitmap-plot-1.sym +++ b/src/test/ref/bitmap-plot-1.sym @@ -27,6 +27,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 diff --git a/src/test/ref/bitmap-plot-2.asm b/src/test/ref/bitmap-plot-2.asm index 33ee65dd3..bd88341d0 100644 --- a/src/test/ref/bitmap-plot-2.asm +++ b/src/test/ref/bitmap-plot-2.asm @@ -3,6 +3,8 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -28,8 +30,6 @@ .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 diff --git a/src/test/ref/bitmap-plot-2.log b/src/test/ref/bitmap-plot-2.log index ffd7dde14..64efd0a16 100644 --- a/src/test/ref/bitmap-plot-2.log +++ b/src/test/ref/bitmap-plot-2.log @@ -2,9 +2,6 @@ Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference frame_cnt to (volatile byte) frame_cnt Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$3 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -1005,6 +1002,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 @@ -3316,6 +3336,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (byte) bitmap_clear::bgcol (byte) bitmap_clear::col @@ -3889,6 +3932,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -3914,8 +3959,6 @@ Target platform is c64basic / MOS6502X .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -6192,6 +6235,7 @@ Uplift Scope [div32u16u] 2,002: zp[2]:214 [ div32u16u::quotient_lo#0 ] 400.4: zp Uplift Scope [main] 372.11: zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] 202: zp[2]:69 [ main::$26 ] 202: zp[2]:71 [ main::$30 ] 202: zp[4]:79 [ main::xpos#0 ] 202: zp[2]:85 [ main::$7 ] 202: zp[2]:89 [ main::$27 ] 202: zp[2]:91 [ main::$31 ] 202: zp[4]:99 [ main::ypos#0 ] 202: zp[2]:105 [ main::$11 ] 139.77: zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] 139.63: zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] 101: zp[2]:73 [ main::cos_x#0 ] 101: zp[2]:83 [ main::$28 ] 101: zp[2]:93 [ main::sin_y#0 ] 101: zp[2]:103 [ main::$29 ] 62.04: zp[2]:4 [ main::r#10 main::r#1 ] 50.5: zp[2]:107 [ main::y#0 ] 8.42: zp[2]:87 [ main::x#0 ] Uplift Scope [] 2,200.4: zp[2]:222 [ rem16u#1 ] 3.82: zp[1]:68 [ frame_cnt ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [bitmap_clear] Uplift Scope [init_irq] Uplift Scope [irq] @@ -6210,6 +6254,7 @@ Uplifting [div32u16u] best 26768 combination zp[2]:214 [ div32u16u::quotient_lo# Uplifting [main] best 26768 combination zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ] zp[2]:69 [ main::$26 ] zp[2]:71 [ main::$30 ] zp[4]:79 [ main::xpos#0 ] zp[2]:85 [ main::$7 ] zp[2]:89 [ main::$27 ] zp[2]:91 [ main::$31 ] zp[4]:99 [ main::ypos#0 ] zp[2]:105 [ main::$11 ] zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ] zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ] zp[2]:73 [ main::cos_x#0 ] zp[2]:83 [ main::$28 ] zp[2]:93 [ main::sin_y#0 ] zp[2]:103 [ main::$29 ] zp[2]:4 [ main::r#10 main::r#1 ] zp[2]:107 [ main::y#0 ] zp[2]:87 [ main::x#0 ] Uplifting [] best 26768 combination zp[2]:222 [ rem16u#1 ] zp[1]:68 [ frame_cnt ] Uplifting [MOS6526_CIA] best 26768 combination +Uplifting [MOS6581_SID] best 26768 combination Uplifting [bitmap_clear] best 26768 combination Uplifting [init_irq] best 26768 combination Uplifting [irq] best 26768 combination @@ -6321,6 +6366,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -6346,8 +6393,6 @@ ASSEMBLER BEFORE OPTIMIZATION .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -8235,6 +8280,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 @@ -8647,6 +8715,8 @@ Score: 20833 :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -8672,8 +8742,6 @@ Score: 20833 .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 diff --git a/src/test/ref/bitmap-plot-2.sym b/src/test/ref/bitmap-plot-2.sym index 52e38d7e3..bdec56fc7 100644 --- a/src/test/ref/bitmap-plot-2.sym +++ b/src/test/ref/bitmap-plot-2.sym @@ -28,6 +28,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 diff --git a/src/test/ref/bitmap-plot-3.log b/src/test/ref/bitmap-plot-3.log index 745092333..d55a4c18a 100644 --- a/src/test/ref/bitmap-plot-3.log +++ b/src/test/ref/bitmap-plot-3.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$2 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -607,6 +605,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -2018,6 +2039,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (word()) abs_u16((word) abs_u16::w) (byte~) abs_u16::$0 20002.0 (byte~) abs_u16::$1 20002.0 @@ -3456,6 +3500,7 @@ Uplift Scope [memset] 35,672.33: zp[2]:26 [ memset::dst#2 memset::dst#4 memset:: Uplift Scope [bitmap_init] 3,628.62: zp[2]:31 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 3,169.83: zp[1]:28 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 2,002: zp[1]:29 [ bitmap_init::x#2 bitmap_init::x#1 ] 2,002: zp[1]:30 [ bitmap_init::y#2 bitmap_init::y#1 ] 2,002: zp[1]:71 [ bitmap_init::$4 ] 2,002: zp[1]:72 [ bitmap_init::$5 ] 2,002: zp[1]:73 [ bitmap_init::$6 ] 500.5: zp[1]:70 [ bitmap_init::$7 ] Uplift Scope [main] 232.3: zp[1]:2 [ main::i#2 main::i#1 ] 202: zp[2]:33 [ main::$13 ] 202: zp[2]:35 [ main::$14 ] 123.44: zp[1]:3 [ main::a#2 main::a#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [bitmap_clear] Uplift Scope [RADIX] Uplift Scope [] @@ -3469,6 +3514,7 @@ Uplifting [bitmap_init] best 32518 combination zp[2]:31 [ bitmap_init::yoffs#2 b Limited combination testing to 100 combinations of 15360 possible. Uplifting [main] best 32518 combination zp[1]:2 [ main::i#2 main::i#1 ] zp[2]:33 [ main::$13 ] zp[2]:35 [ main::$14 ] zp[1]:3 [ main::a#2 main::a#1 ] Uplifting [MOS6526_CIA] best 32518 combination +Uplifting [MOS6581_SID] best 32518 combination Uplifting [bitmap_clear] best 32518 combination Uplifting [RADIX] best 32518 combination Uplifting [] best 32518 combination @@ -4523,6 +4569,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/bitmap-plot-3.sym b/src/test/ref/bitmap-plot-3.sym index 004167796..b749c8840 100644 --- a/src/test/ref/bitmap-plot-3.sym +++ b/src/test/ref/bitmap-plot-3.sym @@ -19,6 +19,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 79a361564..ab5955e62 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -1,7 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -287,6 +283,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*)(number) 1 @@ -1027,6 +1046,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx) (byte) dtvSetCpuBankSegment1::cpuBankIdx (byte) dtvSetCpuBankSegment1::cpuBankIdx#2 10001.0 @@ -1908,6 +1950,7 @@ Uplift Scope [gfx_init_screen0] 200,002: zp[1]:23 [ gfx_init_screen0::$0 ] 200,0 Uplift Scope [dtvSetCpuBankSegment1] 10,001: zp[1]:13 [ dtvSetCpuBankSegment1::cpuBankIdx#2 ] Uplift Scope [main] 2,002: zp[1]:19 [ main::$3 ] 2,002: zp[1]:20 [ main::$4 ] 2,002: zp[1]:21 [ main::$5 ] 572: zp[1]:18 [ main::rst#1 ] 353.5: zp[1]:2 [ main::j#2 main::j#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [gfx_init] Uplift Scope [] @@ -1919,6 +1962,7 @@ Uplifting [dtvSetCpuBankSegment1] best 95585 combination reg byte a [ dtvSetCpuB Uplifting [main] best 92985 combination reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$5 ] reg byte x [ main::rst#1 ] zp[1]:2 [ main::j#2 main::j#1 ] Limited combination testing to 100 combinations of 768 possible. Uplifting [MOS6526_CIA] best 92985 combination +Uplifting [MOS6581_SID] best 92985 combination Uplifting [gfx_init] best 92985 combination Uplifting [] best 92985 combination Attempting to uplift remaining variables inzp[1]:7 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] @@ -2671,6 +2715,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/c64dtv-8bppcharstretch.sym b/src/test/ref/c64dtv-8bppcharstretch.sym index 8495acc41..345b5c5c3 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.sym +++ b/src/test/ref/c64dtv-8bppcharstretch.sym @@ -39,6 +39,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index 69aad00db..74f85f34b 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -1,7 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -195,6 +191,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*)(number) 1 @@ -680,6 +699,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx) (byte) dtvSetCpuBankSegment1::cpuBankIdx (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 20002.0 @@ -1295,6 +1337,7 @@ Uplift Scope [dtvSetCpuBankSegment1] 130,004: zp[1]:9 [ dtvSetCpuBankSegment1::c Uplift Scope [gfx_init_chunky] 35,700.14: zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] 29,205.35: zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] 20,002: zp[1]:16 [ gfx_init_chunky::c#0 ] 18,001.8: zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] 10,001: zp[2]:14 [ gfx_init_chunky::$5 ] 2,424.81: zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] Uplift Scope [main] 2,002: zp[1]:11 [ main::$3 ] 2,002: zp[1]:12 [ main::$4 ] 2,002: zp[1]:13 [ main::$5 ] 572: zp[1]:10 [ main::rst#1 ] 353.5: zp[1]:2 [ main::j#2 main::j#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [dtvSetCpuBankSegment1] best 26171 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] @@ -1302,6 +1345,7 @@ Uplifting [gfx_init_chunky] best 25141 combination reg byte x [ gfx_init_chunky: Uplifting [main] best 22541 combination reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$5 ] reg byte x [ main::rst#1 ] zp[1]:2 [ main::j#2 main::j#1 ] Limited combination testing to 100 combinations of 768 possible. Uplifting [MOS6526_CIA] best 22541 combination +Uplifting [MOS6581_SID] best 22541 combination Uplifting [] best 22541 combination Attempting to uplift remaining variables inzp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] Uplifting [gfx_init_chunky] best 22541 combination zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] @@ -1850,6 +1894,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/c64dtv-8bppchunkystretch.sym b/src/test/ref/c64dtv-8bppchunkystretch.sym index b5f73da99..8138d4c11 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.sym +++ b/src/test/ref/c64dtv-8bppchunkystretch.sym @@ -33,6 +33,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/c64dtv-blitter-box.log b/src/test/ref/c64dtv-blitter-box.log index 8a3f01dbe..b5597bebd 100644 --- a/src/test/ref/c64dtv-blitter-box.log +++ b/src/test/ref/c64dtv-blitter-box.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -116,6 +114,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*)(number) $400 (const to_nomodify byte*) SRCA[] = (byte*) "camelot rules!" (const to_nomodify byte*) SRCB[] = { (byte) $80 } @@ -320,6 +341,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte~) main::$0 202.0 @@ -588,10 +632,12 @@ Potential registers zp[1]:2 [ main::$0 ] : zp[1]:2 , reg byte a , reg byte x , r REGISTER UPLIFT SCOPES Uplift Scope [main] 202: zp[1]:2 [ main::$0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [main] best 348 combination reg byte a [ main::$0 ] Uplifting [MOS6526_CIA] best 348 combination +Uplifting [MOS6581_SID] best 348 combination Uplifting [] best 348 combination ASSEMBLER BEFORE OPTIMIZATION @@ -895,6 +941,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SRCA[] = (byte*) "camelot rules!" (const to_nomodify byte*) SRCB[] = { (byte) $80 } diff --git a/src/test/ref/c64dtv-blitter-box.sym b/src/test/ref/c64dtv-blitter-box.sym index 10824d7c8..dcb6cf0a4 100644 --- a/src/test/ref/c64dtv-blitter-box.sym +++ b/src/test/ref/c64dtv-blitter-box.sym @@ -56,6 +56,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SRCA[] = (byte*) "camelot rules!" (const to_nomodify byte*) SRCB[] = { (byte) $80 } diff --git a/src/test/ref/c64dtv-blittermin.log b/src/test/ref/c64dtv-blittermin.log index 96b31f80d..b90ed9d8c 100644 --- a/src/test/ref/c64dtv-blittermin.log +++ b/src/test/ref/c64dtv-blittermin.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -125,6 +123,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*)(number) $400 (const to_nomodify byte*) SRCA[] = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' } (const nomodify byte) SRCA_LEN = (byte) 9 @@ -352,6 +373,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte~) main::$0 2002.0 (byte) main::r @@ -686,10 +730,12 @@ Potential registers zp[1]:3 [ main::$0 ] : zp[1]:3 , reg byte a , reg byte x , r REGISTER UPLIFT SCOPES Uplift Scope [main] 2,002: zp[1]:3 [ main::$0 ] 702.5: zp[1]:2 [ main::r#2 main::r#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [main] best 2515 combination reg byte a [ main::$0 ] reg byte x [ main::r#2 main::r#1 ] Uplifting [MOS6526_CIA] best 2515 combination +Uplifting [MOS6581_SID] best 2515 combination Uplifting [] best 2515 combination ASSEMBLER BEFORE OPTIMIZATION @@ -1026,6 +1072,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SRCA[] = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' } (const nomodify byte) SRCA_LEN = (byte) 9 diff --git a/src/test/ref/c64dtv-blittermin.sym b/src/test/ref/c64dtv-blittermin.sym index 80c04d539..f58166be6 100644 --- a/src/test/ref/c64dtv-blittermin.sym +++ b/src/test/ref/c64dtv-blittermin.sym @@ -56,6 +56,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SRCA[] = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' } (const nomodify byte) SRCA_LEN = (byte) 9 diff --git a/src/test/ref/c64dtv-color.log b/src/test/ref/c64dtv-color.log index 46da47f3c..a5eacdc2c 100644 --- a/src/test/ref/c64dtv-color.log +++ b/src/test/ref/c64dtv-color.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -79,6 +77,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*)(number) $d012 (void()) main() (bool~) main::$0 @@ -228,6 +249,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte) main::c (byte) main::c#1 1501.5 @@ -401,10 +445,12 @@ Potential registers zp[1]:3 [ main::c#2 main::c#1 ] : zp[1]:3 , reg byte x , reg REGISTER UPLIFT SCOPES Uplift Scope [main] 3,503.5: zp[1]:3 [ main::c#2 main::c#1 ] 2,168.83: zp[1]:2 [ main::r#2 main::r#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [main] best 11689 combination reg byte x [ main::c#2 main::c#1 ] reg byte x [ main::r#2 main::r#1 ] Uplifting [MOS6526_CIA] best 11689 combination +Uplifting [MOS6581_SID] best 11689 combination Uplifting [] best 11689 combination ASSEMBLER BEFORE OPTIMIZATION @@ -592,6 +638,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() (label) main::@1 diff --git a/src/test/ref/c64dtv-color.sym b/src/test/ref/c64dtv-color.sym index d8669cefa..f9bcddbd3 100644 --- a/src/test/ref/c64dtv-color.sym +++ b/src/test/ref/c64dtv-color.sym @@ -23,6 +23,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() (label) main::@1 diff --git a/src/test/ref/c64dtv-gfxexplorer.log b/src/test/ref/c64dtv-gfxexplorer.log index 443409e66..3c1bfb1ee 100644 --- a/src/test/ref/c64dtv-gfxexplorer.log +++ b/src/test/ref/c64dtv-gfxexplorer.log @@ -1,15 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -3402,6 +3390,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 @@ -11370,6 +11381,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) apply_preset((byte) apply_preset::idx) (byte) apply_preset::i (byte) apply_preset::i#1 2.000000002E9 @@ -19714,6 +19748,7 @@ Uplift Scope [get_vic_screen] 14,405.4: zp[1]:20 [ get_vic_screen::idx#2 get_vic Uplift Scope [get_plane] 14,148: zp[1]:25 [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] 2,002: zp[4]:160 [ get_plane::return#16 ] 2,002: zp[4]:185 [ get_plane::return#17 ] 500.5: zp[4]:26 [ get_plane::return#14 ] Uplift Scope [get_vic_charset] 10,501.5: zp[1]:216 [ get_vic_charset::idx#0 ] 2,002: zp[2]:217 [ get_vic_charset::return#4 ] 333.67: zp[2]:23 [ get_vic_charset::return#2 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -19793,6 +19828,7 @@ Uplifting [get_vic_screen] best 15320846 combination reg byte a [ get_vic_screen Uplifting [get_plane] best 15320798 combination reg byte a [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] zp[4]:160 [ get_plane::return#16 ] zp[4]:185 [ get_plane::return#17 ] zp[4]:26 [ get_plane::return#14 ] Uplifting [get_vic_charset] best 15320789 combination reg byte a [ get_vic_charset::idx#0 ] zp[2]:217 [ get_vic_charset::return#4 ] zp[2]:23 [ get_vic_charset::return#2 ] Uplifting [MOS6526_CIA] best 15320789 combination +Uplifting [MOS6581_SID] best 15320789 combination Uplifting [RADIX] best 15320789 combination Uplifting [print_ln] best 15320789 combination Uplifting [print_cls] best 15320789 combination @@ -26661,6 +26697,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 diff --git a/src/test/ref/c64dtv-gfxexplorer.sym b/src/test/ref/c64dtv-gfxexplorer.sym index 5fa224982..7d925dee4 100644 --- a/src/test/ref/c64dtv-gfxexplorer.sym +++ b/src/test/ref/c64dtv-gfxexplorer.sym @@ -69,6 +69,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 diff --git a/src/test/ref/c64dtv-gfxmodes.log b/src/test/ref/c64dtv-gfxmodes.log index bb2008b4b..4d8136cb1 100644 --- a/src/test/ref/c64dtv-gfxmodes.log +++ b/src/test/ref/c64dtv-gfxmodes.log @@ -1,27 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -3018,6 +2994,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 @@ -10413,6 +10412,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) bitmap_clear() (byte*) bitmap_clear::bitmap (word) bitmap_clear::bitmap#0 100001.0 @@ -18337,6 +18359,7 @@ Uplift Scope [memset] 33,333,336.67: zp[2]:159 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_str_lines] 19,333,337.17: zp[2]:153 [ print_str_lines::str#3 print_str_lines::str#2 print_str_lines::str#0 ] 6,666,667.33: zp[1]:294 [ print_str_lines::ch#0 ] Uplift Scope [menu] 350,003.5: zp[1]:2 [ menu::i#2 menu::i#1 ] 333,336.67: zp[2]:3 [ menu::c#2 menu::c#1 ] 200,002: zp[1]:162 [ menu::$5 ] 200,002: zp[1]:164 [ menu::$9 ] 200,002: zp[1]:166 [ menu::$13 ] 200,002: zp[1]:168 [ menu::$17 ] 200,002: zp[1]:170 [ menu::$21 ] 200,002: zp[1]:172 [ menu::$25 ] 200,002: zp[1]:174 [ menu::$29 ] 200,002: zp[1]:176 [ menu::$33 ] 200,002: zp[1]:178 [ menu::$37 ] 200,002: zp[1]:180 [ menu::$41 ] 200,002: zp[1]:182 [ menu::$45 ] 200,002: zp[1]:184 [ menu::$49 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -18394,6 +18417,7 @@ Uplifting [print_str_lines] best 3382247 combination zp[2]:153 [ print_str_lines Uplifting [menu] best 3380447 combination reg byte x [ menu::i#2 menu::i#1 ] zp[2]:3 [ menu::c#2 menu::c#1 ] reg byte a [ menu::$5 ] zp[1]:164 [ menu::$9 ] zp[1]:166 [ menu::$13 ] zp[1]:168 [ menu::$17 ] zp[1]:170 [ menu::$21 ] zp[1]:172 [ menu::$25 ] zp[1]:174 [ menu::$29 ] zp[1]:176 [ menu::$33 ] zp[1]:178 [ menu::$37 ] zp[1]:180 [ menu::$41 ] zp[1]:182 [ menu::$45 ] zp[1]:184 [ menu::$49 ] Limited combination testing to 10 combinations of 50331648 possible. Uplifting [MOS6526_CIA] best 3380447 combination +Uplifting [MOS6581_SID] best 3380447 combination Uplifting [RADIX] best 3380447 combination Uplifting [print_ln] best 3380447 combination Uplifting [print_cls] best 3380447 combination @@ -24647,6 +24671,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*) 1 diff --git a/src/test/ref/c64dtv-gfxmodes.sym b/src/test/ref/c64dtv-gfxmodes.sym index 281b526c8..d50f29d32 100644 --- a/src/test/ref/c64dtv-gfxmodes.sym +++ b/src/test/ref/c64dtv-gfxmodes.sym @@ -74,6 +74,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*) 1 diff --git a/src/test/ref/cia-timer-cyclecount.asm b/src/test/ref/cia-timer-cyclecount.asm index e7435c665..c2030e345 100644 --- a/src/test/ref/cia-timer-cyclecount.asm +++ b/src/test/ref/cia-timer-cyclecount.asm @@ -2,14 +2,14 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - // The CIA#2: Serial bus, RS-232, VIC memory bank - .label CIA2 = $dd00 - // CIA#2 timer A&B as one single 32-bit value - .label CIA2_TIMER_AB = $dd04 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 diff --git a/src/test/ref/cia-timer-cyclecount.log b/src/test/ref/cia-timer-cyclecount.log index 947375904..42e3b97c6 100644 --- a/src/test/ref/cia-timer-cyclecount.log +++ b/src/test/ref/cia-timer-cyclecount.log @@ -1,9 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -177,6 +171,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 @@ -522,6 +539,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (dword()) clock() (dword) clock::return (dword) clock::return#0 367.33333333333337 @@ -614,14 +654,14 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // The CIA#2: Serial bus, RS-232, VIC memory bank - .label CIA2 = $dd00 - // CIA#2 timer A&B as one single 32-bit value - .label CIA2_TIMER_AB = $dd04 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 @@ -1007,6 +1047,7 @@ Uplift Scope [print_ulong_at] 701: zp[4]:24 [ print_ulong_at::dw#0 ] Uplift Scope [clock] 367.33: zp[4]:30 [ clock::return#0 ] 202: zp[4]:12 [ clock::return#2 ] Uplift Scope [main] 202: zp[4]:16 [ main::$1 ] 202: zp[4]:20 [ main::cyclecount#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [clock_start] Uplift Scope [RADIX] Uplift Scope [] @@ -1018,6 +1059,7 @@ Uplifting [print_ulong_at] best 1731 combination zp[4]:24 [ print_ulong_at::dw#0 Uplifting [clock] best 1731 combination zp[4]:30 [ clock::return#0 ] zp[4]:12 [ clock::return#2 ] Uplifting [main] best 1731 combination zp[4]:16 [ main::$1 ] zp[4]:20 [ main::cyclecount#0 ] Uplifting [MOS6526_CIA] best 1731 combination +Uplifting [MOS6581_SID] best 1731 combination Uplifting [clock_start] best 1731 combination Uplifting [RADIX] best 1731 combination Uplifting [] best 1731 combination @@ -1039,14 +1081,14 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // The CIA#2: Serial bus, RS-232, VIC memory bank - .label CIA2 = $dd00 - // CIA#2 timer A&B as one single 32-bit value - .label CIA2_TIMER_AB = $dd04 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 @@ -1403,6 +1445,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 @@ -1484,14 +1549,14 @@ Score: 869 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels - // The CIA#2: Serial bus, RS-232, VIC memory bank - .label CIA2 = $dd00 - // CIA#2 timer A&B as one single 32-bit value - .label CIA2_TIMER_AB = $dd04 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 diff --git a/src/test/ref/cia-timer-cyclecount.sym b/src/test/ref/cia-timer-cyclecount.sym index 17b3d6677..e4f1b828a 100644 --- a/src/test/ref/cia-timer-cyclecount.sym +++ b/src/test/ref/cia-timer-cyclecount.sym @@ -20,6 +20,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 diff --git a/src/test/ref/cia-timer-simple.asm b/src/test/ref/cia-timer-simple.asm index 208ea3418..89a74bcbb 100644 --- a/src/test/ref/cia-timer-simple.asm +++ b/src/test/ref/cia-timer-simple.asm @@ -2,14 +2,14 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" - // The CIA#2: Serial bus, RS-232, VIC memory bank - .label CIA2 = $dd00 - // CIA#2 timer A&B as one single 32-bit value - .label CIA2_TIMER_AB = $dd04 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f diff --git a/src/test/ref/cia-timer-simple.log b/src/test/ref/cia-timer-simple.log index 51410b34d..11d188909 100644 --- a/src/test/ref/cia-timer-simple.log +++ b/src/test/ref/cia-timer-simple.log @@ -1,9 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -173,6 +167,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 @@ -511,6 +528,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (dword()) clock() (dword) clock::return (dword) clock::return#0 367.33333333333337 @@ -594,14 +634,14 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // The CIA#2: Serial bus, RS-232, VIC memory bank - .label CIA2 = $dd00 - // CIA#2 timer A&B as one single 32-bit value - .label CIA2_TIMER_AB = $dd04 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f @@ -946,6 +986,7 @@ Uplift Scope [print_uint_at] 9,505: zp[2]:2 [ print_uint_at::w#2 print_uint_at:: Uplift Scope [print_ulong_at] 701: zp[4]:16 [ print_ulong_at::dw#0 ] Uplift Scope [clock] 367.33: zp[4]:22 [ clock::return#0 ] 202: zp[4]:12 [ clock::return#2 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [clock_start] Uplift Scope [RADIX] Uplift Scope [main] @@ -957,6 +998,7 @@ Uplifting [print_uint_at] best 1047 combination zp[2]:2 [ print_uint_at::w#2 pri Uplifting [print_ulong_at] best 1047 combination zp[4]:16 [ print_ulong_at::dw#0 ] Uplifting [clock] best 1047 combination zp[4]:22 [ clock::return#0 ] zp[4]:12 [ clock::return#2 ] Uplifting [MOS6526_CIA] best 1047 combination +Uplifting [MOS6581_SID] best 1047 combination Uplifting [clock_start] best 1047 combination Uplifting [RADIX] best 1047 combination Uplifting [main] best 1047 combination @@ -977,14 +1019,14 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels - // The CIA#2: Serial bus, RS-232, VIC memory bank - .label CIA2 = $dd00 - // CIA#2 timer A&B as one single 32-bit value - .label CIA2_TIMER_AB = $dd04 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f @@ -1312,6 +1354,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 @@ -1389,14 +1454,14 @@ Score: 455 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels - // The CIA#2: Serial bus, RS-232, VIC memory bank - .label CIA2 = $dd00 - // CIA#2 timer A&B as one single 32-bit value - .label CIA2_TIMER_AB = $dd04 // Timer Control - Start/stop timer (0:stop, 1: start) .const CIA_TIMER_CONTROL_START = 1 // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 + // The CIA#2: Serial bus, RS-232, VIC memory bank + .label CIA2 = $dd00 + // CIA#2 timer A&B as one single 32-bit value + .label CIA2_TIMER_AB = $dd04 .label SCREEN = $400 .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e .const OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = $f diff --git a/src/test/ref/cia-timer-simple.sym b/src/test/ref/cia-timer-simple.sym index 1cffe7f10..84bd47431 100644 --- a/src/test/ref/cia-timer-simple.sym +++ b/src/test/ref/cia-timer-simple.sym @@ -19,6 +19,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 diff --git a/src/test/ref/complex/clearscreen/clearscreen.asm b/src/test/ref/complex/clearscreen/clearscreen.asm index ca76385c2..7b7c94321 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.asm +++ b/src/test/ref/complex/clearscreen/clearscreen.asm @@ -4,6 +4,8 @@ .pc = $80d "Program" // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -43,8 +45,6 @@ .label COLS = $d800 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe .const LIGHT_BLUE = $e diff --git a/src/test/ref/complex/clearscreen/clearscreen.log b/src/test/ref/complex/clearscreen/clearscreen.log index 8df1b5d92..ca18e2ae3 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.log +++ b/src/test/ref/complex/clearscreen/clearscreen.log @@ -5,100 +5,6 @@ Resolved forward reference irqBottom to interrupt(HARDWARE_ALL)(void()) irqBotto Constantified RValue *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← { x: (word) 0, y: (word) 0, vx: (word) 0, vy: (word) 0, id: (byte) 0, ptr: (byte) 0, col: (byte) 0, status: (const byte) STATUS_FREE, screenPtr: (byte*)(number) 0 } Constantified RValue (struct ProcessingChar) getCharToProcess::closest ← (struct ProcessingChar){ (byte) getCharToProcess::x, (byte) getCharToProcess::y, (byte) getCharToProcess::dist } Constantified RValue *((const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$22) ← (struct ProcessingSprite){ (word) startProcessing::spriteX, (word) startProcessing::spriteY, (word)(number~) startProcessing::$15, (word) $3c, (byte) startProcessing::spriteIdx, (byte) startProcessing::spritePtr, (byte) startProcessing::spriteCol, (const byte) STATUS_NEW, (byte*) startProcessing::screenPtr } -Created struct value member variable (byte) main::center_x -Created struct value member variable (byte) main::center_y -Created struct value member variable (byte) main::center_dist -Converted struct value to member variables (struct ProcessingChar) main::center -Created struct value member variable (byte~) main::$5_x -Created struct value member variable (byte~) main::$5_y -Created struct value member variable (byte~) main::$5_dist -Converted struct value to member variables (struct ProcessingChar~) main::$5 -Created struct value member variable (byte) getCharToProcess::return_x -Created struct value member variable (byte) getCharToProcess::return_y -Created struct value member variable (byte) getCharToProcess::return_dist -Converted struct value to member variables (struct ProcessingChar) getCharToProcess::return -Created struct value member variable (byte) getCharToProcess::closest_x -Created struct value member variable (byte) getCharToProcess::closest_y -Created struct value member variable (byte) getCharToProcess::closest_dist -Converted struct value to member variables (struct ProcessingChar) getCharToProcess::closest -Created struct value member variable (byte) startProcessing::center_x -Created struct value member variable (byte) startProcessing::center_y -Created struct value member variable (byte) startProcessing::center_dist -Converted struct value to member variables (struct ProcessingChar) startProcessing::center -Converted procedure struct value parameter to member unwinding (void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (byte) startProcessing::center_dist) -Adding value bulk copy *((const struct ProcessingSprite*) PROCESSING + (byte~) main::$10) ← memcpy(*(&(const struct ProcessingSprite) $2), struct ProcessingSprite, (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE) -Converted procedure call LValue to member unwinding { (byte~) main::$5_x, (byte~) main::$5_y, (byte~) main::$5_dist } ← call getCharToProcess -Unwinding value copy (struct ProcessingChar) main::center ← (struct ProcessingChar~) main::$5 -Adding value simple copy (byte) main::center_x ← (byte~) main::$5_x -Adding value simple copy (byte) main::center_y ← (byte~) main::$5_y -Adding value simple copy (byte) main::center_dist ← (byte~) main::$5_dist -Converted call struct value parameter to member unwinding (void~) main::$8 ← call startProcessing (byte) main::center_x (byte) main::center_y (byte) main::center_dist -Unwinding value copy (struct ProcessingChar) getCharToProcess::closest ← { x: (byte) 0, y: (byte) 0, dist: (const nomodify byte) NOT_FOUND } -Adding value simple copy (byte) getCharToProcess::closest_x ← (byte) 0 -Adding value simple copy (byte) getCharToProcess::closest_y ← (byte) 0 -Adding value simple copy (byte) getCharToProcess::closest_dist ← (const nomodify byte) NOT_FOUND -Unwinding value copy (struct ProcessingChar) getCharToProcess::closest ← (struct ProcessingChar){ (byte) getCharToProcess::x, (byte) getCharToProcess::y, (byte) getCharToProcess::dist } -Adding value simple copy (byte) getCharToProcess::closest_x ← (byte) getCharToProcess::x -Adding value simple copy (byte) getCharToProcess::closest_y ← (byte) getCharToProcess::y -Adding value simple copy (byte) getCharToProcess::closest_dist ← (byte) getCharToProcess::dist -Unwinding value copy (struct ProcessingChar) getCharToProcess::return ← (struct ProcessingChar) getCharToProcess::closest -Adding value simple copy (byte) getCharToProcess::return_x ← (byte) getCharToProcess::closest_x -Adding value simple copy (byte) getCharToProcess::return_y ← (byte) getCharToProcess::closest_y -Adding value simple copy (byte) getCharToProcess::return_dist ← (byte) getCharToProcess::closest_dist -Unwinding value copy (struct ProcessingChar) getCharToProcess::return ← (struct ProcessingChar) getCharToProcess::return -Adding value simple copy (byte) getCharToProcess::return_x ← (byte) getCharToProcess::return_x -Adding value simple copy (byte) getCharToProcess::return_y ← (byte) getCharToProcess::return_y -Adding value simple copy (byte) getCharToProcess::return_dist ← (byte) getCharToProcess::return_dist -Converted procedure struct return value to member unwinding return { (byte) getCharToProcess::return_x, (byte) getCharToProcess::return_y, (byte) getCharToProcess::return_dist } -Unwinding value copy *((const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$22) ← (struct ProcessingSprite){ (word) startProcessing::spriteX, (word) startProcessing::spriteY, (word)(number~) startProcessing::$15, (word) $3c, (byte) startProcessing::spriteIdx, (byte) startProcessing::spritePtr, (byte) startProcessing::spriteCol, (const byte) STATUS_NEW, (byte*) startProcessing::screenPtr } -Adding value simple copy *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X + (byte~) startProcessing::$22) ← (word) startProcessing::spriteX -Adding value simple copy *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$22) ← (word) startProcessing::spriteY -Adding value simple copy *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$22) ← (word)(number~) startProcessing::$15 -Adding value simple copy *((word*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$22) ← (word) $3c -Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$22) ← (byte) startProcessing::spriteIdx -Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$22) ← (byte) startProcessing::spritePtr -Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$22) ← (byte) startProcessing::spriteCol -Adding value simple copy *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$22) ← (const byte) STATUS_NEW -Adding value simple copy *((byte**)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$22) ← (byte*) startProcessing::screenPtr -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference (struct ProcessingChar) main::center.dist with member unwinding reference (byte) main::center_dist -Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.dist with member unwinding reference (byte) getCharToProcess::closest_dist -Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.dist with member unwinding reference (byte) getCharToProcess::closest_dist -Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.y with member unwinding reference (byte) getCharToProcess::closest_y -Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.x with member unwinding reference (byte) getCharToProcess::closest_x -Replacing struct member reference *((const struct ProcessingSprite*) PROCESSING + (byte~) startProcessing::$21).status with member unwinding reference *((byte*)(const struct ProcessingSprite*) PROCESSING+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$21) -Replacing struct member reference (struct ProcessingChar) startProcessing::center.y with member unwinding reference (byte) startProcessing::center_y -Replacing struct member reference (struct ProcessingChar) startProcessing::center.x with member unwinding reference (byte) startProcessing::center_x -Replacing struct member reference (struct ProcessingChar) startProcessing::center.x with member unwinding reference (byte) startProcessing::center_x -Replacing struct member reference (struct ProcessingChar) startProcessing::center.y with member unwinding reference (byte) startProcessing::center_y -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).id with member unwinding reference *((byte*~) processChars::$31) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).status with member unwinding reference *((byte*~) processChars::$32) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).status with member unwinding reference *((byte*~) processChars::$33) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).x with member unwinding reference *((word*~) processChars::$34) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).screenPtr with member unwinding reference *((byte**~) processChars::$35) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).col with member unwinding reference *((byte*~) processChars::$36) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).id with member unwinding reference *((byte*~) processChars::$37) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).id with member unwinding reference *((byte*~) processChars::$38) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).ptr with member unwinding reference *((byte*~) processChars::$39) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).status with member unwinding reference *((byte*~) processChars::$40) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$41) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).x with member unwinding reference *((word*~) processChars::$42) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).x with member unwinding reference *((word*~) processChars::$43) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$44) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$45) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).status with member unwinding reference *((byte*~) processChars::$46) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vx with member unwinding reference *((word*~) processChars::$47) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vx with member unwinding reference *((word*~) processChars::$48) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).x with member unwinding reference *((word*~) processChars::$49) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vx with member unwinding reference *((word*~) processChars::$50) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).x with member unwinding reference *((word*~) processChars::$51) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vy with member unwinding reference *((word*~) processChars::$52) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vy with member unwinding reference *((word*~) processChars::$53) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$54) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).vy with member unwinding reference *((word*~) processChars::$55) -Replacing struct member reference *((struct ProcessingSprite*) processChars::processing).y with member unwinding reference *((word*~) processChars::$56) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Eliminating unused variable with no statement (struct ProcessingChar~) main::$5 Unwinding list assignment { (byte~) main::$5_x, (byte~) main::$5_y, (byte~) main::$5_dist } ← { (byte) getCharToProcess::return_x, (byte) getCharToProcess::return_y, (byte) getCharToProcess::return_dist } @@ -1195,6 +1101,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NOT_FOUND = (byte) $ff (const nomodify byte) NUM_PROCESSING = (byte) 8 (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d @@ -3839,6 +3768,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) ProcessingChar::dist (byte) ProcessingChar::x (byte) ProcessingChar::y @@ -4533,6 +4485,8 @@ Target platform is c64basic / MOS6502X // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -4572,8 +4526,6 @@ Target platform is c64basic / MOS6502X .label COLS = $d800 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe .const LIGHT_BLUE = $e @@ -7298,6 +7250,7 @@ Uplift Scope [] 16.25: zp[2]:48 [ heap_head#5 heap_head#1 ] 0.03: zp[2]:54 [ SCR Uplift Scope [malloc] 4.4: zp[2]:156 [ malloc::mem#0 ] Uplift Scope [RADIX] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [ProcessingChar] Uplift Scope [ProcessingSprite] Uplift Scope [ProcessingSprite::$0] @@ -7320,6 +7273,7 @@ Uplifting [] best 1263507 combination zp[2]:48 [ heap_head#5 heap_head#1 ] zp[2] Uplifting [malloc] best 1263507 combination zp[2]:156 [ malloc::mem#0 ] Uplifting [RADIX] best 1263507 combination Uplifting [MOS6526_CIA] best 1263507 combination +Uplifting [MOS6581_SID] best 1263507 combination Uplifting [ProcessingChar] best 1263507 combination Uplifting [ProcessingSprite] best 1263507 combination Uplifting [ProcessingSprite::$0] best 1263507 combination @@ -7519,6 +7473,8 @@ ASSEMBLER BEFORE OPTIMIZATION // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -7558,8 +7514,6 @@ ASSEMBLER BEFORE OPTIMIZATION .label COLS = $d800 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe .const LIGHT_BLUE = $e @@ -9803,6 +9757,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NOT_FOUND = (byte) $ff (const nomodify byte) NUM_PROCESSING = (byte) 8 (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d @@ -10341,6 +10318,8 @@ Score: 1113354 // Global Constants & labels // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -10380,8 +10359,6 @@ Score: 1113354 .label COLS = $d800 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe .const LIGHT_BLUE = $e diff --git a/src/test/ref/complex/clearscreen/clearscreen.sym b/src/test/ref/complex/clearscreen/clearscreen.sym index 0e006eb7d..083bd4931 100644 --- a/src/test/ref/complex/clearscreen/clearscreen.sym +++ b/src/test/ref/complex/clearscreen/clearscreen.sym @@ -37,6 +37,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NOT_FOUND = (byte) $ff (const nomodify byte) NUM_PROCESSING = (byte) 8 (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d diff --git a/src/test/ref/complex/medusa/medusa.log b/src/test/ref/complex/medusa/medusa.log index f60cb82a4..bb2c827b2 100644 --- a/src/test/ref/complex/medusa/medusa.log +++ b/src/test/ref/complex/medusa/medusa.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -107,6 +105,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte*) SCREEN = (byte*)(number) $400 (void()) main() (byte*~) main::$2 @@ -320,6 +341,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (void*()) memcpy((void*) memcpy::destination , (void*) memcpy::source , (word) memcpy::num) (void*) memcpy::destination @@ -528,11 +572,13 @@ Potential registers zp[2]:10 [ memcpy::src_end#0 ] : zp[2]:10 , REGISTER UPLIFT SCOPES Uplift Scope [memcpy] 3,129.25: zp[2]:6 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] 2,237.67: zp[2]:8 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] 137.75: zp[2]:10 [ memcpy::src_end#0 ] 0: zp[2]:2 [ memcpy::source#2 ] 0: zp[2]:4 [ memcpy::destination#2 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [] Uplifting [memcpy] best 919 combination zp[2]:6 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] zp[2]:8 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] zp[2]:10 [ memcpy::src_end#0 ] zp[2]:2 [ memcpy::source#2 ] zp[2]:4 [ memcpy::destination#2 ] Uplifting [MOS6526_CIA] best 919 combination +Uplifting [MOS6581_SID] best 919 combination Uplifting [main] best 919 combination Uplifting [] best 919 combination Coalescing zero page register [ zp[2]:2 [ memcpy::source#2 ] ] with [ zp[2]:6 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] - score: 1 @@ -741,6 +787,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte*) SCREEN = (byte*) 1024 (void()) main() (label) main::@1 diff --git a/src/test/ref/complex/medusa/medusa.sym b/src/test/ref/complex/medusa/medusa.sym index d26d392e2..eba0e0006 100644 --- a/src/test/ref/complex/medusa/medusa.sym +++ b/src/test/ref/complex/medusa/medusa.sym @@ -24,6 +24,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte*) SCREEN = (byte*) 1024 (void()) main() (label) main::@1 diff --git a/src/test/ref/complex/prebob/grid-bobs.log b/src/test/ref/complex/prebob/grid-bobs.log index cce70ac77..a47c7fa42 100644 --- a/src/test/ref/complex/prebob/grid-bobs.log +++ b/src/test/ref/complex/prebob/grid-bobs.log @@ -1,16 +1,4 @@ Resolved forward reference bob_charset_next_id to (byte) bob_charset_next_id -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call mulf8s_prepare (signed byte) mulf8s::a Inlined call call vicSelectGfxBank (const nomodify byte*) BOB_SCREEN @@ -1185,6 +1173,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $19 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 @@ -3975,6 +3986,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) bob_charset_next_id (byte) bob_charset_next_id#14 1051.5 (byte) bob_charset_next_id#16 9.091909185454545E8 @@ -6442,6 +6476,7 @@ Uplift Scope [keyboard_matrix_read] 3,667.33: zp[1]:71 [ keyboard_matrix_read::r Uplift Scope [memset] 3,336.67: zp[2]:19 [ memset::dst#2 memset::dst#1 ] Uplift Scope [keyboard_key_pressed] 2,002: zp[1]:69 [ keyboard_key_pressed::$2 ] 300.75: zp[1]:70 [ keyboard_key_pressed::return#0 ] 202: zp[1]:64 [ keyboard_key_pressed::return#2 ] 202: zp[1]:66 [ keyboard_key_pressed::return#3 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplift Scope [progress_init] Uplift Scope [progress_inc] @@ -6466,6 +6501,7 @@ Uplifting [memset] best 4043196 combination zp[2]:19 [ memset::dst#2 memset::dst Uplifting [keyboard_key_pressed] best 4043007 combination reg byte a [ keyboard_key_pressed::$2 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#3 ] Limited combination testing to 100 combinations of 256 possible. Uplifting [MOS6526_CIA] best 4043007 combination +Uplifting [MOS6581_SID] best 4043007 combination Uplifting [RADIX] best 4043007 combination Uplifting [progress_init] best 4043007 combination Uplifting [progress_inc] best 4043007 combination @@ -8386,6 +8422,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $19 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 diff --git a/src/test/ref/complex/prebob/grid-bobs.sym b/src/test/ref/complex/prebob/grid-bobs.sym index 856be2b68..666cd8ede 100644 --- a/src/test/ref/complex/prebob/grid-bobs.sym +++ b/src/test/ref/complex/prebob/grid-bobs.sym @@ -28,6 +28,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $19 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 diff --git a/src/test/ref/complex/prebob/vogel-bobs.log b/src/test/ref/complex/prebob/vogel-bobs.log index 962ffe093..5773c032e 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.log +++ b/src/test/ref/complex/prebob/vogel-bobs.log @@ -1,16 +1,4 @@ Resolved forward reference bob_charset_next_id to (byte) bob_charset_next_id -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call mulf8s_prepare (signed byte) mulf8s::a Inlined call call vicSelectGfxBank (const nomodify byte*) BOB_SCREEN @@ -1279,6 +1267,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $14 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 @@ -4251,6 +4262,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte()) bobCharsetFindOrAddGlyph((byte*) bobCharsetFindOrAddGlyph::bob_glyph) (byte*) bobCharsetFindOrAddGlyph::bob_glyph (byte*) bobCharsetFindOrAddGlyph::bob_glyph#1 200002.0 @@ -7148,6 +7182,7 @@ Uplift Scope [keyboard_matrix_read] 3,667.33: zp[1]:79 [ keyboard_matrix_read::r Uplift Scope [memset] 3,336.67: zp[2]:13 [ memset::dst#2 memset::dst#1 ] Uplift Scope [keyboard_key_pressed] 2,002: zp[1]:77 [ keyboard_key_pressed::$2 ] 300.75: zp[1]:78 [ keyboard_key_pressed::return#0 ] 202: zp[1]:72 [ keyboard_key_pressed::return#2 ] 202: zp[1]:74 [ keyboard_key_pressed::return#3 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplift Scope [progress_init] Uplift Scope [progress_inc] @@ -7177,6 +7212,7 @@ Uplifting [memset] best 3965606 combination zp[2]:13 [ memset::dst#2 memset::dst Uplifting [keyboard_key_pressed] best 3965417 combination reg byte a [ keyboard_key_pressed::$2 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::return#2 ] reg byte a [ keyboard_key_pressed::return#3 ] Limited combination testing to 100 combinations of 256 possible. Uplifting [MOS6526_CIA] best 3965417 combination +Uplifting [MOS6581_SID] best 3965417 combination Uplifting [RADIX] best 3965417 combination Uplifting [progress_init] best 3965417 combination Uplifting [progress_inc] best 3965417 combination @@ -9260,6 +9296,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $14 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 diff --git a/src/test/ref/complex/prebob/vogel-bobs.sym b/src/test/ref/complex/prebob/vogel-bobs.sym index 39c3660bb..7ed0db368 100644 --- a/src/test/ref/complex/prebob/vogel-bobs.sym +++ b/src/test/ref/complex/prebob/vogel-bobs.sym @@ -28,6 +28,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const word*) MUL40[(number) $20] = { fill( $20, 0) } (const nomodify byte) NUM_BOBS = (byte) $14 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 diff --git a/src/test/ref/complex/prebob/vogel-sprites.log b/src/test/ref/complex/prebob/vogel-sprites.log index b8a20a057..c641ecedb 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.log +++ b/src/test/ref/complex/prebob/vogel-sprites.log @@ -1,11 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call plexSetScreen (byte*) plexInit::screen Inlined call call plexFreePrepare @@ -777,6 +769,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NUM_BOBS = (byte) $10 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 @@ -2637,6 +2652,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte*) PLEX_SCREEN_PTR (void()) exit() (byte~) exit::$0 2002.0 @@ -4915,6 +4953,7 @@ Uplift Scope [keyboard_key_pressed] 20,002: zp[1]:40 [ keyboard_key_pressed::$2 Uplift Scope [init] 3,003: zp[1]:15 [ init::i1#2 init::i1#1 ] 2,302.3: zp[1]:14 [ init::i#2 init::i#1 ] 2,002: zp[1]:94 [ init::$10 ] 2,002: zp[1]:95 [ init::$3 ] 2,002: zp[1]:97 [ init::$9 ] 2,002: zp[1]:98 [ init::$5 ] 2,002: zp[1]:99 [ init::$6 ] 1,001: zp[1]:96 [ init::$4 ] Uplift Scope [exit] 2,002: zp[1]:38 [ exit::$0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplifting [plexSort] best 105185 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] reg byte x [ plexSort::s#2 ] zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] zp[1]:79 [ plexSort::nxt_y#0 ] zp[1]:78 [ plexSort::nxt_idx#0 ] @@ -4940,6 +4979,7 @@ Uplifting [init] best 101332 combination reg byte x [ init::i1#2 init::i1#1 ] zp Limited combination testing to 100 combinations of 27648 possible. Uplifting [exit] best 101272 combination reg byte a [ exit::$0 ] Uplifting [MOS6526_CIA] best 101272 combination +Uplifting [MOS6581_SID] best 101272 combination Uplifting [main] best 101272 combination Attempting to uplift remaining variables inzp[1]:7 [ plexSort::m#2 plexSort::m#1 ] Uplifting [plexSort] best 101272 combination zp[1]:7 [ plexSort::m#2 plexSort::m#1 ] @@ -6564,6 +6604,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NUM_BOBS = (byte) $10 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) PLEX_COUNT = (byte) $20 diff --git a/src/test/ref/complex/prebob/vogel-sprites.sym b/src/test/ref/complex/prebob/vogel-sprites.sym index c0810435d..6e1fb996c 100644 --- a/src/test/ref/complex/prebob/vogel-sprites.sym +++ b/src/test/ref/complex/prebob/vogel-sprites.sym @@ -24,6 +24,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NUM_BOBS = (byte) $10 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) PLEX_COUNT = (byte) $20 diff --git a/src/test/ref/complex/splines/truetype-splines.log b/src/test/ref/complex/splines/truetype-splines.log index 1333079a0..55eccec02 100644 --- a/src/test/ref/complex/splines/truetype-splines.log +++ b/src/test/ref/complex/splines/truetype-splines.log @@ -14,383 +14,6 @@ Constantified RValue (struct SplineVector16) show_letter::to ← (struct SplineV Constantified RValue (struct SplineVector16) show_letter::to ← (struct SplineVector16){ (signed word)(number~) show_letter::$3, (signed word)(number~) show_letter::$4 } Constantified RValue (struct SplineVector16) show_letter::via ← (struct SplineVector16){ (signed word)(number~) show_letter::$5, (signed word)(number~) show_letter::$6 } Constantified RValue (struct SplineVector16) show_letter::via ← (struct SplineVector16){ (signed word)(number~) show_letter::$8, (signed word)(number~) show_letter::$9 } -Created struct value member variable (signed word) spline_16seg::p0_x -Created struct value member variable (signed word) spline_16seg::p0_y -Converted struct value to member variables (struct SplineVector16) spline_16seg::p0 -Created struct value member variable (signed word) spline_16seg::p1_x -Created struct value member variable (signed word) spline_16seg::p1_y -Converted struct value to member variables (struct SplineVector16) spline_16seg::p1 -Created struct value member variable (signed word) spline_16seg::p2_x -Created struct value member variable (signed word) spline_16seg::p2_y -Converted struct value to member variables (struct SplineVector16) spline_16seg::p2 -Created struct value member variable (signed word) spline_16seg::a_x -Created struct value member variable (signed word) spline_16seg::a_y -Converted struct value to member variables (struct SplineVector16) spline_16seg::a -Created struct value member variable (signed word) spline_16seg::b_x -Created struct value member variable (signed word) spline_16seg::b_y -Converted struct value to member variables (struct SplineVector16) spline_16seg::b -Created struct value member variable (signed dword) spline_16seg::i_x -Created struct value member variable (signed dword) spline_16seg::i_y -Converted struct value to member variables (struct SplineVector32) spline_16seg::i -Created struct value member variable (signed dword) spline_16seg::j_x -Created struct value member variable (signed dword) spline_16seg::j_y -Converted struct value to member variables (struct SplineVector32) spline_16seg::j -Created struct value member variable (signed dword) spline_16seg::p_x -Created struct value member variable (signed dword) spline_16seg::p_y -Converted struct value to member variables (struct SplineVector32) spline_16seg::p -Created struct value member variable (signed word) spline_8seg::p0_x -Created struct value member variable (signed word) spline_8seg::p0_y -Converted struct value to member variables (struct SplineVector16) spline_8seg::p0 -Created struct value member variable (signed word) spline_8seg::p1_x -Created struct value member variable (signed word) spline_8seg::p1_y -Converted struct value to member variables (struct SplineVector16) spline_8seg::p1 -Created struct value member variable (signed word) spline_8seg::p2_x -Created struct value member variable (signed word) spline_8seg::p2_y -Converted struct value to member variables (struct SplineVector16) spline_8seg::p2 -Created struct value member variable (signed word) spline_8seg::a_x -Created struct value member variable (signed word) spline_8seg::a_y -Converted struct value to member variables (struct SplineVector16) spline_8seg::a -Created struct value member variable (signed word) spline_8seg::b_x -Created struct value member variable (signed word) spline_8seg::b_y -Converted struct value to member variables (struct SplineVector16) spline_8seg::b -Created struct value member variable (signed dword) spline_8seg::i_x -Created struct value member variable (signed dword) spline_8seg::i_y -Converted struct value to member variables (struct SplineVector32) spline_8seg::i -Created struct value member variable (signed dword) spline_8seg::j_x -Created struct value member variable (signed dword) spline_8seg::j_y -Converted struct value to member variables (struct SplineVector32) spline_8seg::j -Created struct value member variable (signed dword) spline_8seg::p_x -Created struct value member variable (signed dword) spline_8seg::p_y -Converted struct value to member variables (struct SplineVector32) spline_8seg::p -Created struct value member variable (signed word) spline_8segB::p0_x -Created struct value member variable (signed word) spline_8segB::p0_y -Converted struct value to member variables (struct SplineVector16) spline_8segB::p0 -Created struct value member variable (signed word) spline_8segB::p1_x -Created struct value member variable (signed word) spline_8segB::p1_y -Converted struct value to member variables (struct SplineVector16) spline_8segB::p1 -Created struct value member variable (signed word) spline_8segB::p2_x -Created struct value member variable (signed word) spline_8segB::p2_y -Converted struct value to member variables (struct SplineVector16) spline_8segB::p2 -Created struct value member variable (signed word) spline_8segB::a_x -Created struct value member variable (signed word) spline_8segB::a_y -Converted struct value to member variables (struct SplineVector16) spline_8segB::a -Created struct value member variable (signed word) spline_8segB::b_x -Created struct value member variable (signed word) spline_8segB::b_y -Converted struct value to member variables (struct SplineVector16) spline_8segB::b -Created struct value member variable (signed word) spline_8segB::i_x -Created struct value member variable (signed word) spline_8segB::i_y -Converted struct value to member variables (struct SplineVector16) spline_8segB::i -Created struct value member variable (signed word) spline_8segB::j_x -Created struct value member variable (signed word) spline_8segB::j_y -Converted struct value to member variables (struct SplineVector16) spline_8segB::j -Created struct value member variable (signed word) spline_8segB::p_x -Created struct value member variable (signed word) spline_8segB::p_y -Converted struct value to member variables (struct SplineVector16) spline_8segB::p -Created struct value member variable (signed word) show_letter::current_x -Created struct value member variable (signed word) show_letter::current_y -Converted struct value to member variables (struct SplineVector16) show_letter::current -Created struct value member variable (signed word) show_letter::to_x -Created struct value member variable (signed word) show_letter::to_y -Converted struct value to member variables (struct SplineVector16) show_letter::to -Created struct value member variable (signed word~) show_letter::$2_x -Created struct value member variable (signed word~) show_letter::$2_y -Converted struct value to member variables (struct SplineVector16~) show_letter::$2 -Created struct value member variable (signed word) show_letter::via_x -Created struct value member variable (signed word) show_letter::via_y -Converted struct value to member variables (struct SplineVector16) show_letter::via -Created struct value member variable (signed word~) show_letter::$7_x -Created struct value member variable (signed word~) show_letter::$7_y -Converted struct value to member variables (struct SplineVector16~) show_letter::$7 -Created struct value member variable (byte) show_letter::segment_type -Created struct value member variable (struct SplineVector16) show_letter::segment_to -Created struct value member variable (struct SplineVector16) show_letter::segment_via -Converted struct value to member variables (struct Segment) show_letter::segment -Created struct value member variable (signed word) bitmap_plot_spline_8seg::current_x -Created struct value member variable (signed word) bitmap_plot_spline_8seg::current_y -Converted struct value to member variables (struct SplineVector16) bitmap_plot_spline_8seg::current -Created struct value member variable (signed word) rotate::return_x -Created struct value member variable (signed word) rotate::return_y -Converted struct value to member variables (struct SplineVector16) rotate::return -Created struct value member variable (signed word) rotate::vector_x -Created struct value member variable (signed word) rotate::vector_y -Converted struct value to member variables (struct SplineVector16) rotate::vector -Created struct value member variable (signed word) rotate::rotated_x -Created struct value member variable (signed word) rotate::rotated_y -Converted struct value to member variables (struct SplineVector16) rotate::rotated -Created struct value member variable (signed word) show_letter::segment_to_x -Created struct value member variable (signed word) show_letter::segment_to_y -Converted struct value to member variables (struct SplineVector16) show_letter::segment_to -Created struct value member variable (signed word) show_letter::segment_via_x -Created struct value member variable (signed word) show_letter::segment_via_y -Converted struct value to member variables (struct SplineVector16) show_letter::segment_via -Converted procedure struct value parameter to member unwinding (void()) spline_16seg((signed word) spline_16seg::p0_x , (signed word) spline_16seg::p0_y , (signed word) spline_16seg::p1_x , (signed word) spline_16seg::p1_y , (signed word) spline_16seg::p2_x , (signed word) spline_16seg::p2_y) -Converted procedure struct value parameter to member unwinding (void()) spline_8seg((signed word) spline_8seg::p0_x , (signed word) spline_8seg::p0_y , (signed word) spline_8seg::p1_x , (signed word) spline_8seg::p1_y , (signed word) spline_8seg::p2_x , (signed word) spline_8seg::p2_y) -Converted procedure struct value parameter to member unwinding (void()) spline_8segB((signed word) spline_8segB::p0_x , (signed word) spline_8segB::p0_y , (signed word) spline_8segB::p1_x , (signed word) spline_8segB::p1_y , (signed word) spline_8segB::p2_x , (signed word) spline_8segB::p2_y) -Converted procedure struct value parameter to member unwinding (struct SplineVector16()) rotate((signed word) rotate::vector_x , (signed word) rotate::vector_y , (byte) rotate::angle) -Unwinding value copy (struct SplineVector16) spline_16seg::a ← (struct SplineVector16){ (number~) spline_16seg::$2, (number~) spline_16seg::$5 } -Adding value simple copy (signed word) spline_16seg::a_x ← (number~) spline_16seg::$2 -Adding value simple copy (signed word) spline_16seg::a_y ← (number~) spline_16seg::$5 -Unwinding value copy (struct SplineVector16) spline_16seg::b ← (struct SplineVector16){ (number~) spline_16seg::$7, (number~) spline_16seg::$9 } -Adding value simple copy (signed word) spline_16seg::b_x ← (number~) spline_16seg::$7 -Adding value simple copy (signed word) spline_16seg::b_y ← (number~) spline_16seg::$9 -Unwinding value copy (struct SplineVector32) spline_16seg::i ← (struct SplineVector32){ (number~) spline_16seg::$13, (number~) spline_16seg::$17 } -Adding value simple copy (signed dword) spline_16seg::i_x ← (number~) spline_16seg::$13 -Adding value simple copy (signed dword) spline_16seg::i_y ← (number~) spline_16seg::$17 -Unwinding value copy (struct SplineVector32) spline_16seg::j ← (struct SplineVector32){ (number~) spline_16seg::$19, (number~) spline_16seg::$21 } -Adding value simple copy (signed dword) spline_16seg::j_x ← (number~) spline_16seg::$19 -Adding value simple copy (signed dword) spline_16seg::j_y ← (number~) spline_16seg::$21 -Unwinding value copy (struct SplineVector32) spline_16seg::p ← (struct SplineVector32){ (number~) spline_16seg::$22, (number~) spline_16seg::$23 } -Adding value simple copy (signed dword) spline_16seg::p_x ← (number~) spline_16seg::$22 -Adding value simple copy (signed dword) spline_16seg::p_y ← (number~) spline_16seg::$23 -Unwinding value copy *((const struct SplineVector16*) SPLINE_16SEG + (byte~) spline_16seg::$37) ← (struct SplineVector16){ (signed word)(number~) spline_16seg::$29, (signed word)(number~) spline_16seg::$31 } -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_16SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) spline_16seg::$37) ← (signed word)(number~) spline_16seg::$29 -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_16SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) spline_16seg::$37) ← (signed word)(number~) spline_16seg::$31 -Unwinding value copy (struct SplineVector32) spline_16seg::p ← (struct SplineVector32){ (signed dword~) spline_16seg::$32, (signed dword~) spline_16seg::$33 } -Adding value simple copy (signed dword) spline_16seg::p_x ← (signed dword~) spline_16seg::$32 -Adding value simple copy (signed dword) spline_16seg::p_y ← (signed dword~) spline_16seg::$33 -Unwinding value copy (struct SplineVector32) spline_16seg::i ← (struct SplineVector32){ (signed dword~) spline_16seg::$34, (signed dword~) spline_16seg::$35 } -Adding value simple copy (signed dword) spline_16seg::i_x ← (signed dword~) spline_16seg::$34 -Adding value simple copy (signed dword) spline_16seg::i_y ← (signed dword~) spline_16seg::$35 -Unwinding value copy *((const struct SplineVector16*) SPLINE_16SEG + (number~) spline_16seg::$38) ← (struct SplineVector16){ (signed word)(number~) spline_16seg::$25, (signed word)(number~) spline_16seg::$27 } -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_16SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (number~) spline_16seg::$38) ← (signed word)(number~) spline_16seg::$25 -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_16SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (number~) spline_16seg::$38) ← (signed word)(number~) spline_16seg::$27 -Unwinding value copy (struct SplineVector16) spline_8seg::a ← (struct SplineVector16){ (number~) spline_8seg::$2, (number~) spline_8seg::$5 } -Adding value simple copy (signed word) spline_8seg::a_x ← (number~) spline_8seg::$2 -Adding value simple copy (signed word) spline_8seg::a_y ← (number~) spline_8seg::$5 -Unwinding value copy (struct SplineVector16) spline_8seg::b ← (struct SplineVector16){ (number~) spline_8seg::$7, (number~) spline_8seg::$9 } -Adding value simple copy (signed word) spline_8seg::b_x ← (number~) spline_8seg::$7 -Adding value simple copy (signed word) spline_8seg::b_y ← (number~) spline_8seg::$9 -Unwinding value copy (struct SplineVector32) spline_8seg::i ← (struct SplineVector32){ (number~) spline_8seg::$14, (number~) spline_8seg::$19 } -Adding value simple copy (signed dword) spline_8seg::i_x ← (number~) spline_8seg::$14 -Adding value simple copy (signed dword) spline_8seg::i_y ← (number~) spline_8seg::$19 -Unwinding value copy (struct SplineVector32) spline_8seg::j ← (struct SplineVector32){ (number~) spline_8seg::$21, (number~) spline_8seg::$23 } -Adding value simple copy (signed dword) spline_8seg::j_x ← (number~) spline_8seg::$21 -Adding value simple copy (signed dword) spline_8seg::j_y ← (number~) spline_8seg::$23 -Unwinding value copy (struct SplineVector32) spline_8seg::p ← (struct SplineVector32){ (number~) spline_8seg::$24, (number~) spline_8seg::$25 } -Adding value simple copy (signed dword) spline_8seg::p_x ← (number~) spline_8seg::$24 -Adding value simple copy (signed dword) spline_8seg::p_y ← (number~) spline_8seg::$25 -Unwinding value copy *((const struct SplineVector16*) SPLINE_8SEG + (byte~) spline_8seg::$39) ← (struct SplineVector16){ (signed word)(number~) spline_8seg::$31, (signed word)(number~) spline_8seg::$33 } -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) spline_8seg::$39) ← (signed word)(number~) spline_8seg::$31 -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) spline_8seg::$39) ← (signed word)(number~) spline_8seg::$33 -Unwinding value copy (struct SplineVector32) spline_8seg::p ← (struct SplineVector32){ (signed dword~) spline_8seg::$34, (signed dword~) spline_8seg::$35 } -Adding value simple copy (signed dword) spline_8seg::p_x ← (signed dword~) spline_8seg::$34 -Adding value simple copy (signed dword) spline_8seg::p_y ← (signed dword~) spline_8seg::$35 -Unwinding value copy (struct SplineVector32) spline_8seg::i ← (struct SplineVector32){ (signed dword~) spline_8seg::$36, (signed dword~) spline_8seg::$37 } -Adding value simple copy (signed dword) spline_8seg::i_x ← (signed dword~) spline_8seg::$36 -Adding value simple copy (signed dword) spline_8seg::i_y ← (signed dword~) spline_8seg::$37 -Unwinding value copy *((const struct SplineVector16*) SPLINE_8SEG + (number~) spline_8seg::$40) ← (struct SplineVector16){ (signed word)(number~) spline_8seg::$27, (signed word)(number~) spline_8seg::$29 } -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (number~) spline_8seg::$40) ← (signed word)(number~) spline_8seg::$27 -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (number~) spline_8seg::$40) ← (signed word)(number~) spline_8seg::$29 -Unwinding value copy (struct SplineVector16) spline_8segB::a ← (struct SplineVector16){ (number~) spline_8segB::$2, (number~) spline_8segB::$5 } -Adding value simple copy (signed word) spline_8segB::a_x ← (number~) spline_8segB::$2 -Adding value simple copy (signed word) spline_8segB::a_y ← (number~) spline_8segB::$5 -Unwinding value copy (struct SplineVector16) spline_8segB::b ← (struct SplineVector16){ (number~) spline_8segB::$7, (number~) spline_8segB::$9 } -Adding value simple copy (signed word) spline_8segB::b_x ← (number~) spline_8segB::$7 -Adding value simple copy (signed word) spline_8segB::b_y ← (number~) spline_8segB::$9 -Unwinding value copy (struct SplineVector16) spline_8segB::i ← (struct SplineVector16){ (number~) spline_8segB::$11, (number~) spline_8segB::$13 } -Adding value simple copy (signed word) spline_8segB::i_x ← (number~) spline_8segB::$11 -Adding value simple copy (signed word) spline_8segB::i_y ← (number~) spline_8segB::$13 -Unwinding value copy (struct SplineVector16) spline_8segB::j ← (struct SplineVector16){ (number~) spline_8segB::$14, (number~) spline_8segB::$15 } -Adding value simple copy (signed word) spline_8segB::j_x ← (number~) spline_8segB::$14 -Adding value simple copy (signed word) spline_8segB::j_y ← (number~) spline_8segB::$15 -Unwinding value copy (struct SplineVector16) spline_8segB::p ← (struct SplineVector16){ (number~) spline_8segB::$16, (number~) spline_8segB::$17 } -Adding value simple copy (signed word) spline_8segB::p_x ← (number~) spline_8segB::$16 -Adding value simple copy (signed word) spline_8segB::p_y ← (number~) spline_8segB::$17 -Unwinding value copy *((const struct SplineVector16*) SPLINE_8SEG + (byte~) spline_8segB::$31) ← (struct SplineVector16){ (signed word)(number~) spline_8segB::$23, (signed word)(number~) spline_8segB::$25 } -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) spline_8segB::$31) ← (signed word)(number~) spline_8segB::$23 -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) spline_8segB::$31) ← (signed word)(number~) spline_8segB::$25 -Unwinding value copy (struct SplineVector16) spline_8segB::p ← (struct SplineVector16){ (signed word~) spline_8segB::$26, (signed word~) spline_8segB::$27 } -Adding value simple copy (signed word) spline_8segB::p_x ← (signed word~) spline_8segB::$26 -Adding value simple copy (signed word) spline_8segB::p_y ← (signed word~) spline_8segB::$27 -Unwinding value copy (struct SplineVector16) spline_8segB::i ← (struct SplineVector16){ (signed word~) spline_8segB::$28, (signed word~) spline_8segB::$29 } -Adding value simple copy (signed word) spline_8segB::i_x ← (signed word~) spline_8segB::$28 -Adding value simple copy (signed word) spline_8segB::i_y ← (signed word~) spline_8segB::$29 -Unwinding value copy *((const struct SplineVector16*) SPLINE_8SEG + (number~) spline_8segB::$32) ← (struct SplineVector16){ (signed word)(number~) spline_8segB::$19, (signed word)(number~) spline_8segB::$21 } -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (number~) spline_8segB::$32) ← (signed word)(number~) spline_8segB::$19 -Adding value simple copy *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (number~) spline_8segB::$32) ← (signed word)(number~) spline_8segB::$21 -Unwinding value copy (struct SplineVector16) show_letter::current ← { x: (signed word) 0, y: (signed word) 0 } -Adding value simple copy (signed word) show_letter::current_x ← (signed word) 0 -Adding value simple copy (signed word) show_letter::current_y ← (signed word) 0 -Unwinding value copy (struct SplineVector16) show_letter::to ← *((const struct Segment*) letter_c + (byte~) show_letter::$16).to -Adding value simple copy (signed word) show_letter::to_x ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) show_letter::$16) -Adding value simple copy (signed word) show_letter::to_y ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$16) -Unwinding value copy (struct SplineVector16) show_letter::to ← (struct SplineVector16){ (signed word)(number~) show_letter::$0, (signed word)(number~) show_letter::$1 } -Adding value simple copy (signed word) show_letter::to_x ← (signed word)(number~) show_letter::$0 -Adding value simple copy (signed word) show_letter::to_y ← (signed word)(number~) show_letter::$1 -Converted procedure call LValue to member unwinding { (signed word~) show_letter::$2_x, (signed word~) show_letter::$2_y } ← call rotate (struct SplineVector16) show_letter::to (byte) show_letter::angle -Converted call struct value parameter to member unwinding { (signed word~) show_letter::$2_x, (signed word~) show_letter::$2_y } ← call rotate (signed word) show_letter::to_x (signed word) show_letter::to_y (byte) show_letter::angle -Unwinding value copy (struct SplineVector16) show_letter::to ← (struct SplineVector16~) show_letter::$2 -Adding value simple copy (signed word) show_letter::to_x ← (signed word~) show_letter::$2_x -Adding value simple copy (signed word) show_letter::to_y ← (signed word~) show_letter::$2_y -Unwinding value copy (struct SplineVector16) show_letter::to ← (struct SplineVector16){ (signed word)(number~) show_letter::$3, (signed word)(number~) show_letter::$4 } -Adding value simple copy (signed word) show_letter::to_x ← (signed word)(number~) show_letter::$3 -Adding value simple copy (signed word) show_letter::to_y ← (signed word)(number~) show_letter::$4 -Unwinding value copy (struct SplineVector16) show_letter::via ← *((const struct Segment*) letter_c + (byte~) show_letter::$17).via -Adding value simple copy (signed word) show_letter::via_x ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) show_letter::$17) -Adding value simple copy (signed word) show_letter::via_y ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_VIA+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) show_letter::$17) -Unwinding value copy (struct SplineVector16) show_letter::via ← (struct SplineVector16){ (signed word)(number~) show_letter::$5, (signed word)(number~) show_letter::$6 } -Adding value simple copy (signed word) show_letter::via_x ← (signed word)(number~) show_letter::$5 -Adding value simple copy (signed word) show_letter::via_y ← (signed word)(number~) show_letter::$6 -Converted procedure call LValue to member unwinding { (signed word~) show_letter::$7_x, (signed word~) show_letter::$7_y } ← call rotate (struct SplineVector16) show_letter::via (byte) show_letter::angle -Converted call struct value parameter to member unwinding { (signed word~) show_letter::$7_x, (signed word~) show_letter::$7_y } ← call rotate (signed word) show_letter::via_x (signed word) show_letter::via_y (byte) show_letter::angle -Unwinding value copy (struct SplineVector16) show_letter::via ← (struct SplineVector16~) show_letter::$7 -Adding value simple copy (signed word) show_letter::via_x ← (signed word~) show_letter::$7_x -Adding value simple copy (signed word) show_letter::via_y ← (signed word~) show_letter::$7_y -Unwinding value copy (struct SplineVector16) show_letter::via ← (struct SplineVector16){ (signed word)(number~) show_letter::$8, (signed word)(number~) show_letter::$9 } -Adding value simple copy (signed word) show_letter::via_x ← (signed word)(number~) show_letter::$8 -Adding value simple copy (signed word) show_letter::via_y ← (signed word)(number~) show_letter::$9 -Unwinding value copy (struct Segment) show_letter::segment ← (struct Segment){ *((const struct Segment*) letter_c + (byte~) show_letter::$18).type, (struct SplineVector16) show_letter::to, (struct SplineVector16) show_letter::via } -Adding value simple copy (byte) show_letter::segment_type ← *((byte*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TYPE + (byte~) show_letter::$18) -Unwinding value copy (struct Segment) show_letter::segment ← (struct Segment){ *((const struct Segment*) letter_c + (byte~) show_letter::$18).type, (struct SplineVector16) show_letter::to, (struct SplineVector16) show_letter::via } -Adding value simple copy (signed word) show_letter::segment_to_x ← (signed word) show_letter::to_x -Adding value simple copy (signed word) show_letter::segment_to_y ← (signed word) show_letter::to_y -Unwinding value copy (struct Segment) show_letter::segment ← (struct Segment){ *((const struct Segment*) letter_c + (byte~) show_letter::$18).type, (struct SplineVector16) show_letter::to, (struct SplineVector16) show_letter::via } -Adding value simple copy (signed word) show_letter::segment_via_x ← (signed word) show_letter::via_x -Adding value simple copy (signed word) show_letter::segment_via_y ← (signed word) show_letter::via_y -Unwinding value copy (struct SplineVector16) show_letter::current ← (struct Segment) show_letter::segment.to -Adding value simple copy (signed word) show_letter::current_x ← (signed word) show_letter::segment_to_x -Adding value simple copy (signed word) show_letter::current_y ← (signed word) show_letter::segment_to_y -Converted call struct value parameter to member unwinding (void~) show_letter::$13 ← call spline_8segB (signed word) show_letter::current_x (signed word) show_letter::current_y (signed word) show_letter::segment_via_x (signed word) show_letter::segment_via_y (signed word) show_letter::segment_to_x (signed word) show_letter::segment_to_y -Unwinding value copy (struct SplineVector16) show_letter::current ← (struct Segment) show_letter::segment.to -Adding value simple copy (signed word) show_letter::current_x ← (signed word) show_letter::segment_to_x -Adding value simple copy (signed word) show_letter::current_y ← (signed word) show_letter::segment_to_y -Unwinding value copy (struct SplineVector16) show_letter::current ← (struct Segment) show_letter::segment.to -Adding value simple copy (signed word) show_letter::current_x ← (signed word) show_letter::segment_to_x -Adding value simple copy (signed word) show_letter::current_y ← (signed word) show_letter::segment_to_y -Unwinding value copy (struct SplineVector16) bitmap_plot_spline_8seg::current ← *((const struct SplineVector16*) SPLINE_8SEG + (number~) bitmap_plot_spline_8seg::$2) -Adding value simple copy (signed word) bitmap_plot_spline_8seg::current_x ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (number~) bitmap_plot_spline_8seg::$2) -Adding value simple copy (signed word) bitmap_plot_spline_8seg::current_y ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (number~) bitmap_plot_spline_8seg::$2) -Unwinding value copy (struct SplineVector16) bitmap_plot_spline_8seg::current ← *((const struct SplineVector16*) SPLINE_8SEG + (byte~) bitmap_plot_spline_8seg::$4) -Adding value simple copy (signed word) bitmap_plot_spline_8seg::current_x ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) bitmap_plot_spline_8seg::$4) -Adding value simple copy (signed word) bitmap_plot_spline_8seg::current_y ← *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) bitmap_plot_spline_8seg::$4) -Unwinding value copy (struct SplineVector16) rotate::rotated ← (struct SplineVector16){ (signed word)(signed byte)(byte~) rotate::$8, (signed word)(signed byte)(byte~) rotate::$9 } -Adding value simple copy (signed word) rotate::rotated_x ← (signed word)(signed byte)(byte~) rotate::$8 -Adding value simple copy (signed word) rotate::rotated_y ← (signed word)(signed byte)(byte~) rotate::$9 -Unwinding value copy (struct SplineVector16) rotate::return ← (struct SplineVector16) rotate::rotated -Adding value simple copy (signed word) rotate::return_x ← (signed word) rotate::rotated_x -Adding value simple copy (signed word) rotate::return_y ← (signed word) rotate::rotated_y -Unwinding value copy (struct SplineVector16) rotate::return ← (struct SplineVector16) rotate::return -Adding value simple copy (signed word) rotate::return_x ← (signed word) rotate::return_x -Adding value simple copy (signed word) rotate::return_y ← (signed word) rotate::return_y -Converted procedure struct return value to member unwinding return { (signed word) rotate::return_x, (signed word) rotate::return_y } -Replacing struct member reference (struct SplineVector16) spline_16seg::p1.x with member unwinding reference (signed word) spline_16seg::p1_x -Replacing struct member reference (struct SplineVector16) spline_16seg::p2.x with member unwinding reference (signed word) spline_16seg::p2_x -Replacing struct member reference (struct SplineVector16) spline_16seg::p0.x with member unwinding reference (signed word) spline_16seg::p0_x -Replacing struct member reference (struct SplineVector16) spline_16seg::p1.y with member unwinding reference (signed word) spline_16seg::p1_y -Replacing struct member reference (struct SplineVector16) spline_16seg::p2.y with member unwinding reference (signed word) spline_16seg::p2_y -Replacing struct member reference (struct SplineVector16) spline_16seg::p0.y with member unwinding reference (signed word) spline_16seg::p0_y -Replacing struct member reference (struct SplineVector16) spline_16seg::p1.x with member unwinding reference (signed word) spline_16seg::p1_x -Replacing struct member reference (struct SplineVector16) spline_16seg::p0.x with member unwinding reference (signed word) spline_16seg::p0_x -Replacing struct member reference (struct SplineVector16) spline_16seg::p1.y with member unwinding reference (signed word) spline_16seg::p1_y -Replacing struct member reference (struct SplineVector16) spline_16seg::p0.y with member unwinding reference (signed word) spline_16seg::p0_y -Replacing struct member reference (struct SplineVector16) spline_16seg::a.x with member unwinding reference (signed word) spline_16seg::a_x -Replacing struct member reference (struct SplineVector16) spline_16seg::b.x with member unwinding reference (signed word) spline_16seg::b_x -Replacing struct member reference (struct SplineVector16) spline_16seg::a.y with member unwinding reference (signed word) spline_16seg::a_y -Replacing struct member reference (struct SplineVector16) spline_16seg::b.y with member unwinding reference (signed word) spline_16seg::b_y -Replacing struct member reference (struct SplineVector16) spline_16seg::a.x with member unwinding reference (signed word) spline_16seg::a_x -Replacing struct member reference (struct SplineVector16) spline_16seg::a.y with member unwinding reference (signed word) spline_16seg::a_y -Replacing struct member reference (struct SplineVector16) spline_16seg::p0.x with member unwinding reference (signed word) spline_16seg::p0_x -Replacing struct member reference (struct SplineVector16) spline_16seg::p0.y with member unwinding reference (signed word) spline_16seg::p0_y -Replacing struct member reference (struct SplineVector32) spline_16seg::p.x with member unwinding reference (signed dword) spline_16seg::p_x -Replacing struct member reference (struct SplineVector32) spline_16seg::p.y with member unwinding reference (signed dword) spline_16seg::p_y -Replacing struct member reference (struct SplineVector32) spline_16seg::p.x with member unwinding reference (signed dword) spline_16seg::p_x -Replacing struct member reference (struct SplineVector32) spline_16seg::i.x with member unwinding reference (signed dword) spline_16seg::i_x -Replacing struct member reference (struct SplineVector32) spline_16seg::p.y with member unwinding reference (signed dword) spline_16seg::p_y -Replacing struct member reference (struct SplineVector32) spline_16seg::i.y with member unwinding reference (signed dword) spline_16seg::i_y -Replacing struct member reference (struct SplineVector32) spline_16seg::i.x with member unwinding reference (signed dword) spline_16seg::i_x -Replacing struct member reference (struct SplineVector32) spline_16seg::j.x with member unwinding reference (signed dword) spline_16seg::j_x -Replacing struct member reference (struct SplineVector32) spline_16seg::i.y with member unwinding reference (signed dword) spline_16seg::i_y -Replacing struct member reference (struct SplineVector32) spline_16seg::j.y with member unwinding reference (signed dword) spline_16seg::j_y -Replacing struct member reference (struct SplineVector32) spline_16seg::p.x with member unwinding reference (signed dword) spline_16seg::p_x -Replacing struct member reference (struct SplineVector32) spline_16seg::p.y with member unwinding reference (signed dword) spline_16seg::p_y -Replacing struct member reference (struct SplineVector16) spline_8seg::p1.x with member unwinding reference (signed word) spline_8seg::p1_x -Replacing struct member reference (struct SplineVector16) spline_8seg::p2.x with member unwinding reference (signed word) spline_8seg::p2_x -Replacing struct member reference (struct SplineVector16) spline_8seg::p0.x with member unwinding reference (signed word) spline_8seg::p0_x -Replacing struct member reference (struct SplineVector16) spline_8seg::p1.y with member unwinding reference (signed word) spline_8seg::p1_y -Replacing struct member reference (struct SplineVector16) spline_8seg::p2.y with member unwinding reference (signed word) spline_8seg::p2_y -Replacing struct member reference (struct SplineVector16) spline_8seg::p0.y with member unwinding reference (signed word) spline_8seg::p0_y -Replacing struct member reference (struct SplineVector16) spline_8seg::p1.x with member unwinding reference (signed word) spline_8seg::p1_x -Replacing struct member reference (struct SplineVector16) spline_8seg::p0.x with member unwinding reference (signed word) spline_8seg::p0_x -Replacing struct member reference (struct SplineVector16) spline_8seg::p1.y with member unwinding reference (signed word) spline_8seg::p1_y -Replacing struct member reference (struct SplineVector16) spline_8seg::p0.y with member unwinding reference (signed word) spline_8seg::p0_y -Replacing struct member reference (struct SplineVector16) spline_8seg::a.x with member unwinding reference (signed word) spline_8seg::a_x -Replacing struct member reference (struct SplineVector16) spline_8seg::b.x with member unwinding reference (signed word) spline_8seg::b_x -Replacing struct member reference (struct SplineVector16) spline_8seg::a.y with member unwinding reference (signed word) spline_8seg::a_y -Replacing struct member reference (struct SplineVector16) spline_8seg::b.y with member unwinding reference (signed word) spline_8seg::b_y -Replacing struct member reference (struct SplineVector16) spline_8seg::a.x with member unwinding reference (signed word) spline_8seg::a_x -Replacing struct member reference (struct SplineVector16) spline_8seg::a.y with member unwinding reference (signed word) spline_8seg::a_y -Replacing struct member reference (struct SplineVector16) spline_8seg::p0.x with member unwinding reference (signed word) spline_8seg::p0_x -Replacing struct member reference (struct SplineVector16) spline_8seg::p0.y with member unwinding reference (signed word) spline_8seg::p0_y -Replacing struct member reference (struct SplineVector32) spline_8seg::p.x with member unwinding reference (signed dword) spline_8seg::p_x -Replacing struct member reference (struct SplineVector32) spline_8seg::p.y with member unwinding reference (signed dword) spline_8seg::p_y -Replacing struct member reference (struct SplineVector32) spline_8seg::p.x with member unwinding reference (signed dword) spline_8seg::p_x -Replacing struct member reference (struct SplineVector32) spline_8seg::i.x with member unwinding reference (signed dword) spline_8seg::i_x -Replacing struct member reference (struct SplineVector32) spline_8seg::p.y with member unwinding reference (signed dword) spline_8seg::p_y -Replacing struct member reference (struct SplineVector32) spline_8seg::i.y with member unwinding reference (signed dword) spline_8seg::i_y -Replacing struct member reference (struct SplineVector32) spline_8seg::i.x with member unwinding reference (signed dword) spline_8seg::i_x -Replacing struct member reference (struct SplineVector32) spline_8seg::j.x with member unwinding reference (signed dword) spline_8seg::j_x -Replacing struct member reference (struct SplineVector32) spline_8seg::i.y with member unwinding reference (signed dword) spline_8seg::i_y -Replacing struct member reference (struct SplineVector32) spline_8seg::j.y with member unwinding reference (signed dword) spline_8seg::j_y -Replacing struct member reference (struct SplineVector32) spline_8seg::p.x with member unwinding reference (signed dword) spline_8seg::p_x -Replacing struct member reference (struct SplineVector32) spline_8seg::p.y with member unwinding reference (signed dword) spline_8seg::p_y -Replacing struct member reference (struct SplineVector16) spline_8segB::p1.x with member unwinding reference (signed word) spline_8segB::p1_x -Replacing struct member reference (struct SplineVector16) spline_8segB::p2.x with member unwinding reference (signed word) spline_8segB::p2_x -Replacing struct member reference (struct SplineVector16) spline_8segB::p0.x with member unwinding reference (signed word) spline_8segB::p0_x -Replacing struct member reference (struct SplineVector16) spline_8segB::p1.y with member unwinding reference (signed word) spline_8segB::p1_y -Replacing struct member reference (struct SplineVector16) spline_8segB::p2.y with member unwinding reference (signed word) spline_8segB::p2_y -Replacing struct member reference (struct SplineVector16) spline_8segB::p0.y with member unwinding reference (signed word) spline_8segB::p0_y -Replacing struct member reference (struct SplineVector16) spline_8segB::p1.x with member unwinding reference (signed word) spline_8segB::p1_x -Replacing struct member reference (struct SplineVector16) spline_8segB::p0.x with member unwinding reference (signed word) spline_8segB::p0_x -Replacing struct member reference (struct SplineVector16) spline_8segB::p1.y with member unwinding reference (signed word) spline_8segB::p1_y -Replacing struct member reference (struct SplineVector16) spline_8segB::p0.y with member unwinding reference (signed word) spline_8segB::p0_y -Replacing struct member reference (struct SplineVector16) spline_8segB::b.x with member unwinding reference (signed word) spline_8segB::b_x -Replacing struct member reference (struct SplineVector16) spline_8segB::a.x with member unwinding reference (signed word) spline_8segB::a_x -Replacing struct member reference (struct SplineVector16) spline_8segB::b.y with member unwinding reference (signed word) spline_8segB::b_y -Replacing struct member reference (struct SplineVector16) spline_8segB::a.y with member unwinding reference (signed word) spline_8segB::a_y -Replacing struct member reference (struct SplineVector16) spline_8segB::a.x with member unwinding reference (signed word) spline_8segB::a_x -Replacing struct member reference (struct SplineVector16) spline_8segB::a.y with member unwinding reference (signed word) spline_8segB::a_y -Replacing struct member reference (struct SplineVector16) spline_8segB::p0.x with member unwinding reference (signed word) spline_8segB::p0_x -Replacing struct member reference (struct SplineVector16) spline_8segB::p0.y with member unwinding reference (signed word) spline_8segB::p0_y -Replacing struct member reference (struct SplineVector16) spline_8segB::p.x with member unwinding reference (signed word) spline_8segB::p_x -Replacing struct member reference (struct SplineVector16) spline_8segB::p.y with member unwinding reference (signed word) spline_8segB::p_y -Replacing struct member reference (struct SplineVector16) spline_8segB::p.x with member unwinding reference (signed word) spline_8segB::p_x -Replacing struct member reference (struct SplineVector16) spline_8segB::i.x with member unwinding reference (signed word) spline_8segB::i_x -Replacing struct member reference (struct SplineVector16) spline_8segB::p.y with member unwinding reference (signed word) spline_8segB::p_y -Replacing struct member reference (struct SplineVector16) spline_8segB::i.y with member unwinding reference (signed word) spline_8segB::i_y -Replacing struct member reference (struct SplineVector16) spline_8segB::i.x with member unwinding reference (signed word) spline_8segB::i_x -Replacing struct member reference (struct SplineVector16) spline_8segB::j.x with member unwinding reference (signed word) spline_8segB::j_x -Replacing struct member reference (struct SplineVector16) spline_8segB::i.y with member unwinding reference (signed word) spline_8segB::i_y -Replacing struct member reference (struct SplineVector16) spline_8segB::j.y with member unwinding reference (signed word) spline_8segB::j_y -Replacing struct member reference (struct SplineVector16) spline_8segB::p.x with member unwinding reference (signed word) spline_8segB::p_x -Replacing struct member reference (struct SplineVector16) spline_8segB::p.y with member unwinding reference (signed word) spline_8segB::p_y -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference (struct SplineVector16) show_letter::to.x with member unwinding reference (signed word) show_letter::to_x -Replacing struct member reference (struct SplineVector16) show_letter::to.y with member unwinding reference (signed word) show_letter::to_y -Replacing struct member reference (struct SplineVector16) show_letter::to.x with member unwinding reference (signed word) show_letter::to_x -Replacing struct member reference (struct SplineVector16) show_letter::to.y with member unwinding reference (signed word) show_letter::to_y -Replacing struct member reference (struct SplineVector16) show_letter::via.x with member unwinding reference (signed word) show_letter::via_x -Replacing struct member reference (struct SplineVector16) show_letter::via.y with member unwinding reference (signed word) show_letter::via_y -Replacing struct member reference (struct SplineVector16) show_letter::via.x with member unwinding reference (signed word) show_letter::via_x -Replacing struct member reference (struct SplineVector16) show_letter::via.y with member unwinding reference (signed word) show_letter::via_y -Replacing struct member reference (struct Segment) show_letter::segment.type with member unwinding reference (byte) show_letter::segment_type -Replacing struct member reference (struct Segment) show_letter::segment.type with member unwinding reference (byte) show_letter::segment_type -Replacing struct member reference (struct SplineVector16) show_letter::current.x with member unwinding reference (signed word) show_letter::current_x -Replacing struct member reference (struct SplineVector16) show_letter::current.y with member unwinding reference (signed word) show_letter::current_y -Replacing struct member reference (struct Segment) show_letter::segment.to.x with member unwinding reference (signed word) show_letter::segment_to_x -Replacing struct member reference (struct Segment) show_letter::segment.to.y with member unwinding reference (signed word) show_letter::segment_to_y -Replacing struct member reference (struct SplineVector16) bitmap_plot_spline_8seg::current.x with member unwinding reference (signed word) bitmap_plot_spline_8seg::current_x -Replacing struct member reference (struct SplineVector16) bitmap_plot_spline_8seg::current.y with member unwinding reference (signed word) bitmap_plot_spline_8seg::current_y -Replacing struct member reference *((const struct SplineVector16*) SPLINE_8SEG + (byte~) bitmap_plot_spline_8seg::$3).x with member unwinding reference *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) bitmap_plot_spline_8seg::$3) -Replacing struct member reference *((const struct SplineVector16*) SPLINE_8SEG + (byte~) bitmap_plot_spline_8seg::$3).y with member unwinding reference *((signed word*)(const struct SplineVector16*) SPLINE_8SEG+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) bitmap_plot_spline_8seg::$3) -Replacing struct member reference (struct SplineVector16) rotate::vector.x with member unwinding reference (signed word) rotate::vector_x -Replacing struct member reference (struct SplineVector16) rotate::vector.y with member unwinding reference (signed word) rotate::vector_y -Replacing struct member reference (struct SplineVector16) rotate::vector.y with member unwinding reference (signed word) rotate::vector_y -Replacing struct member reference (struct SplineVector16) rotate::vector.x with member unwinding reference (signed word) rotate::vector_x Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call mulf8s_prepare (signed byte) mulf8s::a Inlined call call vicSelectGfxBank (const nomodify byte*) BITMAP_SCREEN @@ -1605,6 +1228,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) MOVE_TO = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 @@ -4568,6 +4214,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (struct SplineVector16) Segment::to (byte) Segment::type (struct SplineVector16) Segment::via @@ -8741,6 +8410,7 @@ Uplift Scope [SplineVector16] Uplift Scope [SplineVector32] Uplift Scope [bitmap_clear] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplift Scope [Segment] Uplift Scope [Segment::SegmentType] @@ -8767,6 +8437,7 @@ Uplifting [SplineVector16] best 804956 combination Uplifting [SplineVector32] best 804956 combination Uplifting [bitmap_clear] best 804956 combination Uplifting [MOS6526_CIA] best 804956 combination +Uplifting [MOS6581_SID] best 804956 combination Uplifting [RADIX] best 804956 combination Uplifting [Segment] best 804956 combination Uplifting [Segment::SegmentType] best 804956 combination @@ -11487,6 +11158,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) MOVE_TO = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_SEGMENT_TO = (byte) 1 diff --git a/src/test/ref/complex/splines/truetype-splines.sym b/src/test/ref/complex/splines/truetype-splines.sym index 50660874a..0af5b3623 100644 --- a/src/test/ref/complex/splines/truetype-splines.sym +++ b/src/test/ref/complex/splines/truetype-splines.sym @@ -22,6 +22,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) MOVE_TO = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_SEGMENT_TO = (byte) 1 diff --git a/src/test/ref/complex/spritescroller/spritescroller.asm b/src/test/ref/complex/spritescroller/spritescroller.asm index 255ae0ef1..a99b73393 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.asm +++ b/src/test/ref/complex/spritescroller/spritescroller.asm @@ -2,6 +2,8 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor Port Register controlling RAM/ROM configuration and the datasette .label PROCPORT = 1 // RAM in $A000, $E000 CHAR ROM in $D000 @@ -26,8 +28,6 @@ .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 diff --git a/src/test/ref/complex/spritescroller/spritescroller.log b/src/test/ref/complex/spritescroller/spritescroller.log index 0c041ba04..8e0759d35 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.log +++ b/src/test/ref/complex/spritescroller/spritescroller.log @@ -1,9 +1,6 @@ Resolved forward reference plex_irq to interrupt(KERNEL_MIN)(void()) plex_irq() Resolved forward reference frame_done to (volatile bool) frame_done Resolved forward reference frame_done to (volatile bool) frame_done -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call plexSetScreen (byte*) plexInit::screen Inlined call call plexFreePrepare @@ -908,6 +905,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } @@ -3037,6 +3057,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte*) PLEX_SCREEN_PTR (byte) SPRITE_0 (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) @@ -3433,6 +3476,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor Port Register controlling RAM/ROM configuration and the datasette .label PROCPORT = 1 // RAM in $A000, $E000 CHAR ROM in $D000 @@ -3457,8 +3502,6 @@ Target platform is c64basic / MOS6502X .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 @@ -5207,6 +5250,7 @@ Uplift Scope [plexShowSprite] 202: zp[1]:76 [ plexShowSprite::plexFreeAdd1_$0 ] Uplift Scope [main] 303: zp[1]:4 [ main::s1#2 main::s1#1 ] 274.14: zp[1]:2 [ main::s#2 main::s#1 ] 202: zp[2]:49 [ main::$13 ] 168.33: zp[1]:3 [ main::x#2 main::x#1 ] 101: zp[1]:48 [ main::$12 ] Uplift Scope [plex_irq] 11: zp[1]:73 [ plex_irq::$4 ] 4.8: zp[1]:72 [ plex_irq::plexFreeNextYpos1_return#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplifting [plexSort] best 251376 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] reg byte x [ plexSort::s#2 ] zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] zp[1]:52 [ plexSort::nxt_y#0 ] zp[1]:51 [ plexSort::nxt_idx#0 ] Limited combination testing to 100 combinations of 972 possible. @@ -5222,6 +5266,7 @@ Limited combination testing to 100 combinations of 1572864 possible. Uplifting [main] best 224276 combination reg byte x [ main::s1#2 main::s1#1 ] zp[1]:2 [ main::s#2 main::s#1 ] zp[2]:49 [ main::$13 ] reg byte x [ main::x#2 main::x#1 ] reg byte y [ main::$12 ] Uplifting [plex_irq] best 224213 combination zp[1]:73 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] Uplifting [MOS6526_CIA] best 224213 combination +Uplifting [MOS6581_SID] best 224213 combination Attempting to uplift remaining variables inzp[1]:5 [ plexSort::m#2 plexSort::m#1 ] Uplifting [plexSort] best 224213 combination zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] Attempting to uplift remaining variables inzp[1]:11 [ plex_move::s#2 plex_move::s#1 ] @@ -5340,6 +5385,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor Port Register controlling RAM/ROM configuration and the datasette .label PROCPORT = 1 // RAM in $A000, $E000 CHAR ROM in $D000 @@ -5364,8 +5411,6 @@ ASSEMBLER BEFORE OPTIMIZATION .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 @@ -6876,6 +6921,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } @@ -7218,6 +7286,8 @@ Score: 159127 :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor Port Register controlling RAM/ROM configuration and the datasette .label PROCPORT = 1 // RAM in $A000, $E000 CHAR ROM in $D000 @@ -7242,8 +7312,6 @@ Score: 159127 .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 diff --git a/src/test/ref/complex/spritescroller/spritescroller.sym b/src/test/ref/complex/spritescroller/spritescroller.sym index bc1b287a1..19ba00816 100644 --- a/src/test/ref/complex/spritescroller/spritescroller.sym +++ b/src/test/ref/complex/spritescroller/spritescroller.sym @@ -28,6 +28,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } diff --git a/src/test/ref/complex/tetris/test-sprites.asm b/src/test/ref/complex/tetris/test-sprites.asm index ac89685b7..7910476f1 100644 --- a/src/test/ref/complex/tetris/test-sprites.asm +++ b/src/test/ref/complex/tetris/test-sprites.asm @@ -1,6 +1,8 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -33,8 +35,6 @@ .label CIA2 = $dd00 // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 diff --git a/src/test/ref/complex/tetris/test-sprites.log b/src/test/ref/complex/tetris/test-sprites.log index e27c3e469..aa4952cae 100644 --- a/src/test/ref/complex/tetris/test-sprites.log +++ b/src/test/ref/complex/tetris/test-sprites.log @@ -1,7 +1,4 @@ Resolved forward reference sprites_irq to interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) $0 ← call toSpritePtr (const nomodify byte*) PLAYFIELD_SPRITES Inlined call (byte~) sprites_irq::$5 ← call toSpritePtr (const nomodify byte*) PLAYFIELD_SPRITES @@ -403,6 +400,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 @@ -1398,6 +1418,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (volatile byte) irq_cnt loadstore 0.48000000000000004 (volatile byte) irq_raster_next loadstore 0.44444444444444453 (volatile byte) irq_sprite_ptr loadstore 0.45161290322580644 @@ -1548,6 +1591,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -1580,8 +1625,6 @@ Target platform is c64basic / MOS6502X .label CIA2 = $dd00 // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -2360,6 +2403,7 @@ Uplift Scope [] 2,335.67: zp[1]:5 [ sin_idx#10 sin_idx#3 ] 0.48: zp[1]:12 [ irq_ Uplift Scope [main] 212.1: zp[1]:2 [ main::s#2 main::s#1 ] 202: zp[1]:16 [ main::$6 ] 151.5: zp[1]:15 [ main::s2#0 ] 101: zp[1]:4 [ main::ypos#2 main::ypos#1 ] 88.38: zp[1]:3 [ main::xpos#2 main::xpos#1 ] Uplift Scope [sprites_irq] 6.5: zp[1]:21 [ sprites_irq::raster_sprite_gfx_modify ] 4: zp[1]:20 [ sprites_irq::$0 ] 4: zp[1]:24 [ sprites_irq::ptr#4 ] 4: zp[1]:26 [ sprites_irq::ptr#2 ] 2.67: zp[1]:23 [ sprites_irq::ptr#3 ] 2.67: zp[1]:25 [ sprites_irq::ptr#1 ] 2.5: zp[1]:19 [ sprites_irq::ypos#0 ] 2.5: zp[1]:22 [ sprites_irq::ptr#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [sprites_irq_init] Uplifting [loop] best 13962 combination zp[1]:6 [ loop::s#2 loop::s#1 ] reg byte a [ loop::$1 ] reg byte x [ loop::idx#2 loop::idx#0 loop::idx#1 ] @@ -2370,6 +2414,7 @@ Limited combination testing to 100 combinations of 324 possible. Uplifting [sprites_irq] best 13488 combination zp[1]:21 [ sprites_irq::raster_sprite_gfx_modify ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp[1]:25 [ sprites_irq::ptr#1 ] zp[1]:19 [ sprites_irq::ypos#0 ] zp[1]:22 [ sprites_irq::ptr#0 ] Limited combination testing to 100 combinations of 12288 possible. Uplifting [MOS6526_CIA] best 13488 combination +Uplifting [MOS6581_SID] best 13488 combination Uplifting [sprites_irq_init] best 13488 combination Attempting to uplift remaining variables inzp[1]:6 [ loop::s#2 loop::s#1 ] Uplifting [loop] best 13488 combination zp[1]:6 [ loop::s#2 loop::s#1 ] @@ -2422,6 +2467,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -2454,8 +2501,6 @@ ASSEMBLER BEFORE OPTIMIZATION .label CIA2 = $dd00 // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -3166,6 +3211,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PLAYFIELD_CHARSET = (byte*) 10240 @@ -3332,6 +3400,8 @@ Score: 11662 :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -3364,8 +3434,6 @@ Score: 11662 .label CIA2 = $dd00 // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 diff --git a/src/test/ref/complex/tetris/test-sprites.sym b/src/test/ref/complex/tetris/test-sprites.sym index bed7af45b..5a031bb31 100644 --- a/src/test/ref/complex/tetris/test-sprites.sym +++ b/src/test/ref/complex/tetris/test-sprites.sym @@ -30,6 +30,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PLAYFIELD_CHARSET = (byte*) 10240 diff --git a/src/test/ref/complex/tetris/tetris.asm b/src/test/ref/complex/tetris/tetris.asm index f6b2883c3..8e1a72d2c 100644 --- a/src/test/ref/complex/tetris/tetris.asm +++ b/src/test/ref/complex/tetris/tetris.asm @@ -4,6 +4,10 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -47,8 +51,8 @@ .label CIA2 = $dd00 // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f + // The SID MOD 6581/8580 + .label SID = $d400 // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -73,11 +77,6 @@ .const KEY_CTRL = $3a .const KEY_SPACE = $3c .const KEY_COMMODORE = $3d - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b // Address of the first screen .label PLAYFIELD_SCREEN_1 = $400 // Address of the second screen @@ -110,6 +109,9 @@ // Right side collision (cell beyond the right side of the playfield) .const COLLISION_RIGHT = 8 .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 @@ -1066,17 +1068,25 @@ play_spawn_current: { // while(piece_idx==7) lda #7 cmp.z piece_idx - beq sid_rnd1 + beq __b3 // } rts - sid_rnd1: - // return *SID_VOICE3_OSC; - lda SID_VOICE3_OSC + __b3: + // sid_rnd() + jsr sid_rnd // piece_idx = sid_rnd()&7 and #7 sta.z piece_idx jmp __b2 } +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + // return SID->CH3_OSC; + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC + // } + rts +} // Update the score based on the number of lines removed // play_update_score(byte register(X) removed) play_update_score: { @@ -1891,14 +1901,14 @@ render_screen_original: { } // Initialize SID voice 3 for random number generation sid_rnd_init: { - // *SID_VOICE3_FREQ = 0xffff + // SID->CH3_FREQ = 0xffff lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // SID->CH3_CONTROL = SID_CONTROL_NOISE lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL // } rts } diff --git a/src/test/ref/complex/tetris/tetris.cfg b/src/test/ref/complex/tetris/tetris.cfg index 5d7d0ee31..07b3b1eb9 100644 --- a/src/test/ref/complex/tetris/tetris.cfg +++ b/src/test/ref/complex/tetris/tetris.cfg @@ -77,10 +77,10 @@ main::@14: scope:[main] from main::@13 [28] call render_playfield to:main::@15 main::@15: scope:[main] from main::@14 - [29] (byte) current_ypos#97 ← (byte) current_ypos#6 - [30] (byte) current_xpos#118 ← (byte) current_xpos#100 - [31] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) - [32] (byte) current_piece_char#99 ← (byte) current_piece_char#5 + [29] (byte) current_ypos#96 ← (byte) current_ypos#6 + [30] (byte) current_xpos#117 ← (byte) current_xpos#100 + [31] (byte*) current_piece_gfx#110 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [32] (byte) current_piece_char#98 ← (byte) current_piece_char#5 [33] call render_moving to:main::@16 main::@16: scope:[main] from main::@15 @@ -88,8 +88,8 @@ main::@16: scope:[main] from main::@15 [35] call render_next to:main::@17 main::@17: scope:[main] from main::@16 - [36] (byte*) current_piece#100 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) - [37] (byte*) current_piece_gfx#122 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [36] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [37] (byte*) current_piece_gfx#121 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) to:main::@1 main::@1: scope:[main] from main::@17 main::@25 main::@6 [38] (byte) level_bcd#11 ← phi( main::@17/(byte) 0 main::@25/(byte) level_bcd#17 main::@6/(byte) level_bcd#17 ) @@ -101,10 +101,10 @@ main::@1: scope:[main] from main::@17 main::@25 main::@6 [38] (byte) game_over#10 ← phi( main::@17/(byte) game_over#52 main::@25/(byte) game_over#15 main::@6/(byte) game_over#15 ) [38] (byte) current_ypos#11 ← phi( main::@17/(byte) current_ypos#6 main::@25/(byte) current_ypos#19 main::@6/(byte) current_ypos#19 ) [38] (byte) current_xpos#14 ← phi( main::@17/(byte) current_xpos#100 main::@25/(byte) current_xpos#19 main::@6/(byte) current_xpos#19 ) - [38] (byte*) current_piece_gfx#13 ← phi( main::@17/(byte*) current_piece_gfx#122 main::@25/(byte*) current_piece_gfx#18 main::@6/(byte*) current_piece_gfx#18 ) + [38] (byte*) current_piece_gfx#13 ← phi( main::@17/(byte*) current_piece_gfx#121 main::@25/(byte*) current_piece_gfx#18 main::@6/(byte*) current_piece_gfx#18 ) [38] (byte) current_orientation#13 ← phi( main::@17/(byte) 0 main::@25/(byte) current_orientation#17 main::@6/(byte) current_orientation#17 ) [38] (byte) current_piece_char#10 ← phi( main::@17/(byte) current_piece_char#5 main::@25/(byte) current_piece_char#16 main::@6/(byte) current_piece_char#16 ) - [38] (byte*) current_piece#10 ← phi( main::@17/(byte*) current_piece#100 main::@25/(byte*) current_piece#15 main::@6/(byte*) current_piece#15 ) + [38] (byte*) current_piece#10 ← phi( main::@17/(byte*) current_piece#99 main::@25/(byte*) current_piece#15 main::@6/(byte*) current_piece#15 ) [38] (byte) current_movedown_slow#14 ← phi( main::@17/(byte) current_movedown_slow#1 main::@25/(byte) current_movedown_slow#21 main::@6/(byte) current_movedown_slow#21 ) [38] (byte) render_screen_render#18 ← phi( main::@17/(byte) $20 main::@25/(byte) render_screen_render#11 main::@6/(byte) render_screen_render#18 ) [38] (byte) render_screen_show#16 ← phi( main::@17/(byte) 0 main::@25/(byte) render_screen_show#13 main::@6/(byte) render_screen_show#16 ) @@ -148,11 +148,11 @@ main::@7: scope:[main] from main::@6 [56] call render_playfield to:main::@22 main::@22: scope:[main] from main::@7 - [57] (byte) current_ypos#98 ← (byte) current_ypos#19 + [57] (byte) current_ypos#97 ← (byte) current_ypos#19 [58] (byte) render_screen_render#64 ← (byte) render_screen_render#18 - [59] (byte) current_xpos#119 ← (byte) current_xpos#19 - [60] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 - [61] (byte) current_piece_char#100 ← (byte) current_piece_char#16 + [59] (byte) current_xpos#118 ← (byte) current_xpos#19 + [60] (byte*) current_piece_gfx#111 ← (byte*) current_piece_gfx#18 + [61] (byte) current_piece_char#99 ← (byte) current_piece_char#16 [62] call render_moving to:main::@23 main::@23: scope:[main] from main::@22 @@ -295,11 +295,11 @@ render_next::@5: scope:[render_next] from render_next::@4 (void()) render_moving() render_moving: scope:[render_moving] from main::@15 main::@22 - [128] (byte) current_piece_char#68 ← phi( main::@15/(byte) current_piece_char#99 main::@22/(byte) current_piece_char#100 ) - [128] (byte*) current_piece_gfx#64 ← phi( main::@15/(byte*) current_piece_gfx#111 main::@22/(byte*) current_piece_gfx#112 ) - [128] (byte) current_xpos#59 ← phi( main::@15/(byte) current_xpos#118 main::@22/(byte) current_xpos#119 ) + [128] (byte) current_piece_char#68 ← phi( main::@15/(byte) current_piece_char#98 main::@22/(byte) current_piece_char#99 ) + [128] (byte*) current_piece_gfx#64 ← phi( main::@15/(byte*) current_piece_gfx#110 main::@22/(byte*) current_piece_gfx#111 ) + [128] (byte) current_xpos#59 ← phi( main::@15/(byte) current_xpos#117 main::@22/(byte) current_xpos#118 ) [128] (byte) render_screen_render#33 ← phi( main::@15/(byte) $20 main::@22/(byte) render_screen_render#64 ) - [128] (byte) current_ypos#13 ← phi( main::@15/(byte) current_ypos#97 main::@22/(byte) current_ypos#98 ) + [128] (byte) current_ypos#13 ← phi( main::@15/(byte) current_ypos#96 main::@22/(byte) current_ypos#97 ) [129] (byte) render_moving::ypos#0 ← (byte) current_ypos#13 to:render_moving::@1 render_moving::@1: scope:[render_moving] from render_moving render_moving::@3 @@ -428,7 +428,7 @@ play_move_rotate::@3: scope:[play_move_rotate] from play_move_rotate::@1 play_m [188] (byte) play_collision::xpos#3 ← (byte) current_xpos#26 [189] (byte) play_collision::ypos#3 ← (byte) current_ypos#19 [190] (byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3 - [191] (byte*) current_piece#98 ← (byte*) current_piece#15 + [191] (byte*) current_piece#97 ← (byte*) current_piece#15 [192] call play_collision [193] (byte) play_collision::return#14 ← (byte) play_collision::return#15 to:play_move_rotate::@6 @@ -450,7 +450,7 @@ play_collision: scope:[play_collision] from play_move_down::@8 play_move_leftri [200] (byte) play_collision::xpos#6 ← phi( play_move_down::@8/(byte) play_collision::xpos#0 play_move_leftright::@1/(byte) play_collision::xpos#1 play_move_leftright::@3/(byte) play_collision::xpos#2 play_move_rotate::@3/(byte) play_collision::xpos#3 play_spawn_current/(byte) play_collision::xpos#4 ) [200] (byte) play_collision::yp#0 ← phi( play_move_down::@8/(byte) play_collision::ypos#0 play_move_leftright::@1/(byte) play_collision::ypos#1 play_move_leftright::@3/(byte) play_collision::ypos#2 play_move_rotate::@3/(byte) play_collision::ypos#3 play_spawn_current/(byte) play_collision::ypos#4 ) [200] (byte) play_collision::orientation#5 ← phi( play_move_down::@8/(byte) play_collision::orientation#0 play_move_leftright::@1/(byte) play_collision::orientation#1 play_move_leftright::@3/(byte) play_collision::orientation#2 play_move_rotate::@3/(byte) play_collision::orientation#3 play_spawn_current/(byte) 0 ) - [200] (byte*) current_piece#17 ← phi( play_move_down::@8/(byte*) current_piece#95 play_move_leftright::@1/(byte*) current_piece#96 play_move_leftright::@3/(byte*) current_piece#97 play_move_rotate::@3/(byte*) current_piece#98 play_spawn_current/(byte*) current_piece#99 ) + [200] (byte*) current_piece#17 ← phi( play_move_down::@8/(byte*) current_piece#94 play_move_leftright::@1/(byte*) current_piece#95 play_move_leftright::@3/(byte*) current_piece#96 play_move_rotate::@3/(byte*) current_piece#97 play_spawn_current/(byte*) current_piece#98 ) [201] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 to:play_collision::@1 play_collision::@1: scope:[play_collision] from play_collision play_collision::@9 @@ -513,7 +513,7 @@ play_move_leftright::@3: scope:[play_move_leftright] from play_move_leftright:: [226] (byte) play_collision::xpos#2 ← (byte) current_xpos#22 + (byte) 1 [227] (byte) play_collision::ypos#2 ← (byte) current_ypos#19 [228] (byte) play_collision::orientation#2 ← (byte) current_orientation#20 - [229] (byte*) current_piece#97 ← (byte*) current_piece#15 + [229] (byte*) current_piece#96 ← (byte*) current_piece#15 [230] call play_collision [231] (byte) play_collision::return#13 ← (byte) play_collision::return#15 to:play_move_leftright::@7 @@ -533,7 +533,7 @@ play_move_leftright::@1: scope:[play_move_leftright] from play_move_leftright [237] (byte) play_collision::xpos#1 ← (byte) current_xpos#22 - (byte) 1 [238] (byte) play_collision::ypos#1 ← (byte) current_ypos#19 [239] (byte) play_collision::orientation#1 ← (byte) current_orientation#20 - [240] (byte*) current_piece#96 ← (byte*) current_piece#15 + [240] (byte*) current_piece#95 ← (byte*) current_piece#15 [241] call play_collision [242] (byte) play_collision::return#1 ← (byte) play_collision::return#15 to:play_move_leftright::@6 @@ -583,7 +583,7 @@ play_move_down::@8: scope:[play_move_down] from play_move_down::@3 [261] (byte) play_collision::ypos#0 ← (byte) current_ypos#11 + (byte) 1 [262] (byte) play_collision::xpos#0 ← (byte) current_xpos#14 [263] (byte) play_collision::orientation#0 ← (byte) current_orientation#13 - [264] (byte*) current_piece#95 ← (byte*) current_piece#10 + [264] (byte*) current_piece#94 ← (byte*) current_piece#10 [265] call play_collision [266] (byte) play_collision::return#0 ← (byte) play_collision::return#15 to:play_move_down::@13 @@ -610,17 +610,17 @@ play_move_down::@16: scope:[play_move_down] from play_move_down::@15 [278] call play_spawn_current to:play_move_down::@17 play_move_down::@17: scope:[play_move_down] from play_move_down::@16 - [279] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) - [280] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [279] (byte*) current_piece#91 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [280] (byte*) current_piece_gfx#115 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) to:play_move_down::@11 play_move_down::@11: scope:[play_move_down] from play_move_down::@10 play_move_down::@17 [281] (byte) next_piece_idx#30 ← phi( play_move_down::@10/(byte) next_piece_idx#10 play_move_down::@17/(byte) play_spawn_current::piece_idx#2 ) [281] (byte) game_over#27 ← phi( play_move_down::@10/(byte) game_over#10 play_move_down::@17/(byte) game_over#52 ) [281] (byte) current_xpos#43 ← phi( play_move_down::@10/(byte) current_xpos#14 play_move_down::@17/(byte) current_xpos#100 ) - [281] (byte*) current_piece_gfx#35 ← phi( play_move_down::@10/(byte*) current_piece_gfx#13 play_move_down::@17/(byte*) current_piece_gfx#116 ) + [281] (byte*) current_piece_gfx#35 ← phi( play_move_down::@10/(byte*) current_piece_gfx#13 play_move_down::@17/(byte*) current_piece_gfx#115 ) [281] (byte) current_orientation#37 ← phi( play_move_down::@10/(byte) current_orientation#13 play_move_down::@17/(byte) 0 ) [281] (byte) current_piece_char#29 ← phi( play_move_down::@10/(byte) current_piece_char#10 play_move_down::@17/(byte) current_piece_char#5 ) - [281] (byte*) current_piece#28 ← phi( play_move_down::@10/(byte*) current_piece#10 play_move_down::@17/(byte*) current_piece#92 ) + [281] (byte*) current_piece#28 ← phi( play_move_down::@10/(byte*) current_piece#10 play_move_down::@17/(byte*) current_piece#91 ) [281] (byte) level_bcd#31 ← phi( play_move_down::@10/(byte) level_bcd#11 play_move_down::@17/(byte) level_bcd#19 ) [281] (byte) current_movedown_slow#37 ← phi( play_move_down::@10/(byte) current_movedown_slow#14 play_move_down::@17/(byte) current_movedown_slow#23 ) [281] (byte) level#33 ← phi( play_move_down::@10/(byte) level#10 play_move_down::@17/(byte) level#19 ) @@ -659,603 +659,614 @@ play_spawn_current: scope:[play_spawn_current] from main::@12 main::@13 play_mo [290] (byte) current_ypos#6 ← *((const byte*) PIECES_START_Y + (byte) play_spawn_current::current_piece_idx#0) [291] (byte) play_collision::xpos#4 ← (byte) current_xpos#100 [292] (byte) play_collision::ypos#4 ← (byte) current_ypos#6 - [293] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [293] (byte*) current_piece#98 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [294] call play_collision [295] (byte) play_collision::return#10 ← (byte) play_collision::return#15 to:play_spawn_current::@4 play_spawn_current::@4: scope:[play_spawn_current] from play_spawn_current [296] (byte~) play_spawn_current::$1 ← (byte) play_collision::return#10 - [297] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@5 + [297] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@6 to:play_spawn_current::@1 -play_spawn_current::@5: scope:[play_spawn_current] from play_spawn_current::@4 +play_spawn_current::@6: scope:[play_spawn_current] from play_spawn_current::@4 [298] phi() to:play_spawn_current::@1 -play_spawn_current::@1: scope:[play_spawn_current] from play_spawn_current::@4 play_spawn_current::@5 - [299] (byte) game_over#52 ← phi( play_spawn_current::@4/(byte) 1 play_spawn_current::@5/(byte) game_over#65 ) +play_spawn_current::@1: scope:[play_spawn_current] from play_spawn_current::@4 play_spawn_current::@6 + [299] (byte) game_over#52 ← phi( play_spawn_current::@4/(byte) 1 play_spawn_current::@6/(byte) game_over#65 ) to:play_spawn_current::@2 -play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@3 - [300] (byte) play_spawn_current::piece_idx#2 ← phi( play_spawn_current::@1/(byte) 7 play_spawn_current::@3/(byte) play_spawn_current::piece_idx#1 ) - [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 +play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@5 + [300] (byte) play_spawn_current::piece_idx#2 ← phi( play_spawn_current::@1/(byte) 7 play_spawn_current::@5/(byte) play_spawn_current::piece_idx#1 ) + [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::@3 to:play_spawn_current::@return play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current::@2 [302] return to:@return -play_spawn_current::sid_rnd1: scope:[play_spawn_current] from play_spawn_current::@2 - [303] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) - to:play_spawn_current::@3 -play_spawn_current::@3: scope:[play_spawn_current] from play_spawn_current::sid_rnd1 - [304] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 +play_spawn_current::@3: scope:[play_spawn_current] from play_spawn_current::@2 + [303] phi() + [304] call sid_rnd + [305] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + to:play_spawn_current::@5 +play_spawn_current::@5: scope:[play_spawn_current] from play_spawn_current::@3 + [306] (byte~) play_spawn_current::$5 ← (byte) sid_rnd::return#2 + [307] (byte) play_spawn_current::piece_idx#1 ← (byte~) play_spawn_current::$5 & (byte) 7 to:play_spawn_current::@2 +(byte()) sid_rnd() +sid_rnd: scope:[sid_rnd] from play_spawn_current::@3 + [308] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) + to:sid_rnd::@return +sid_rnd::@return: scope:[sid_rnd] from sid_rnd + [309] return + to:@return + (void()) play_update_score((byte) play_update_score::removed) play_update_score: scope:[play_update_score] from play_move_down::@15 - [305] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return + [310] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return to:play_update_score::@1 play_update_score::@1: scope:[play_update_score] from play_update_score - [306] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 - [307] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 - [308] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 - [309] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) + [311] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 + [312] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 + [313] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 + [314] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) asm { sed } - [311] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 - [312] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 + [316] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 + [317] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 asm { cld } - [314] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 - [315] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 - [316] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return + [319] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 + [320] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 + [321] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return to:play_update_score::@2 play_update_score::@2: scope:[play_update_score] from play_update_score::@1 - [317] phi() - [318] call play_increase_level + [322] phi() + [323] call play_increase_level to:play_update_score::@return play_update_score::@return: scope:[play_update_score] from play_update_score play_update_score::@1 play_update_score::@2 - [319] (byte) level_bcd#19 ← phi( play_update_score/(byte) level_bcd#11 play_update_score::@1/(byte) level_bcd#11 play_update_score::@2/(byte) level_bcd#62 ) - [319] (byte) current_movedown_slow#23 ← phi( play_update_score/(byte) current_movedown_slow#14 play_update_score::@1/(byte) current_movedown_slow#14 play_update_score::@2/(byte) current_movedown_slow#65 ) - [319] (byte) level#19 ← phi( play_update_score/(byte) level#10 play_update_score::@1/(byte) level#10 play_update_score::@2/(byte) level#21 ) - [319] (word) lines_bcd#17 ← phi( play_update_score/(word) lines_bcd#19 play_update_score::@1/(word) lines_bcd#29 play_update_score::@2/(word) lines_bcd#29 ) - [320] return + [324] (byte) level_bcd#19 ← phi( play_update_score/(byte) level_bcd#11 play_update_score::@1/(byte) level_bcd#11 play_update_score::@2/(byte) level_bcd#62 ) + [324] (byte) current_movedown_slow#23 ← phi( play_update_score/(byte) current_movedown_slow#14 play_update_score::@1/(byte) current_movedown_slow#14 play_update_score::@2/(byte) current_movedown_slow#65 ) + [324] (byte) level#19 ← phi( play_update_score/(byte) level#10 play_update_score::@1/(byte) level#10 play_update_score::@2/(byte) level#21 ) + [324] (word) lines_bcd#17 ← phi( play_update_score/(word) lines_bcd#19 play_update_score::@1/(word) lines_bcd#29 play_update_score::@2/(word) lines_bcd#29 ) + [325] return to:@return (void()) play_increase_level() play_increase_level: scope:[play_increase_level] from play_update_score::@2 - [321] (byte) level#21 ← ++ (byte) level#10 - [322] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 + [326] (byte) level#21 ← ++ (byte) level#10 + [327] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 to:play_increase_level::@3 play_increase_level::@3: scope:[play_increase_level] from play_increase_level - [323] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) + [328] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) to:play_increase_level::@1 play_increase_level::@1: scope:[play_increase_level] from play_increase_level play_increase_level::@3 - [324] (byte) current_movedown_slow#65 ← phi( play_increase_level/(byte) 1 play_increase_level::@3/(byte) current_movedown_slow#10 ) - [325] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 - [326] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f - [327] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 + [329] (byte) current_movedown_slow#65 ← phi( play_increase_level/(byte) 1 play_increase_level::@3/(byte) current_movedown_slow#10 ) + [330] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 + [331] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f + [332] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 to:play_increase_level::@4 play_increase_level::@4: scope:[play_increase_level] from play_increase_level::@1 - [328] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 + [333] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 to:play_increase_level::@2 play_increase_level::@2: scope:[play_increase_level] from play_increase_level::@1 play_increase_level::@4 - [329] (byte) level_bcd#62 ← phi( play_increase_level::@1/(byte) level_bcd#21 play_increase_level::@4/(byte) level_bcd#8 ) + [334] (byte) level_bcd#62 ← phi( play_increase_level::@1/(byte) level_bcd#21 play_increase_level::@4/(byte) level_bcd#8 ) asm { sed } to:play_increase_level::@5 play_increase_level::@5: scope:[play_increase_level] from play_increase_level::@2 play_increase_level::@5 - [331] (byte) play_increase_level::b#2 ← phi( play_increase_level::@2/(byte) 0 play_increase_level::@5/(byte) play_increase_level::b#1 ) - [332] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 - [333] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) - [334] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 - [335] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 + [336] (byte) play_increase_level::b#2 ← phi( play_increase_level::@2/(byte) 0 play_increase_level::@5/(byte) play_increase_level::b#1 ) + [337] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 + [338] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) + [339] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 + [340] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 to:play_increase_level::@6 play_increase_level::@6: scope:[play_increase_level] from play_increase_level::@5 asm { cld } to:play_increase_level::@return play_increase_level::@return: scope:[play_increase_level] from play_increase_level::@6 - [337] return + [342] return to:@return (byte()) play_remove_lines() play_remove_lines: scope:[play_remove_lines] from play_move_down::@14 - [338] phi() + [343] phi() to:play_remove_lines::@1 play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_remove_lines::@6 - [339] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::removed#7 ) - [339] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::y#1 ) - [339] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) - [339] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::r#1 ) + [344] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::removed#7 ) + [344] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::y#1 ) + [344] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) + [344] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::r#1 ) to:play_remove_lines::@2 play_remove_lines::@2: scope:[play_remove_lines] from play_remove_lines::@1 play_remove_lines::@3 - [340] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 ) - [340] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 ) - [340] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 ) - [340] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 ) - [341] (byte) play_remove_lines::c#0 ← *((const byte*) playfield + (byte) play_remove_lines::r#2) - [342] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 - [343] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 + [345] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 ) + [345] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 ) + [345] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 ) + [345] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 ) + [346] (byte) play_remove_lines::c#0 ← *((const byte*) playfield + (byte) play_remove_lines::r#2) + [347] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 + [348] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 to:play_remove_lines::@3 play_remove_lines::@9: scope:[play_remove_lines] from play_remove_lines::@2 - [344] phi() + [349] phi() to:play_remove_lines::@3 play_remove_lines::@3: scope:[play_remove_lines] from play_remove_lines::@2 play_remove_lines::@9 - [345] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@9/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte) 0 ) - [346] *((const byte*) playfield + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 - [347] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 - [348] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 - [349] if((byte) play_remove_lines::x#1!=(const nomodify byte) PLAYFIELD_COLS-(byte) 1+(byte) 1) goto play_remove_lines::@2 + [350] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@9/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte) 0 ) + [351] *((const byte*) playfield + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 + [352] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 + [353] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 + [354] if((byte) play_remove_lines::x#1!=(const nomodify byte) PLAYFIELD_COLS-(byte) 1+(byte) 1) goto play_remove_lines::@2 to:play_remove_lines::@4 play_remove_lines::@4: scope:[play_remove_lines] from play_remove_lines::@3 - [350] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 + [355] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 to:play_remove_lines::@5 play_remove_lines::@5: scope:[play_remove_lines] from play_remove_lines::@4 - [351] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS - [352] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 + [356] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS + [357] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 to:play_remove_lines::@6 play_remove_lines::@6: scope:[play_remove_lines] from play_remove_lines::@4 play_remove_lines::@5 - [353] (byte) play_remove_lines::removed#7 ← phi( play_remove_lines::@4/(byte) play_remove_lines::removed#11 play_remove_lines::@5/(byte) play_remove_lines::removed#1 ) - [353] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#1 play_remove_lines::@5/(byte) play_remove_lines::w#2 ) - [354] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 - [355] if((byte) play_remove_lines::y#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_remove_lines::@1 + [358] (byte) play_remove_lines::removed#7 ← phi( play_remove_lines::@4/(byte) play_remove_lines::removed#11 play_remove_lines::@5/(byte) play_remove_lines::removed#1 ) + [358] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#1 play_remove_lines::@5/(byte) play_remove_lines::w#2 ) + [359] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 + [360] if((byte) play_remove_lines::y#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_remove_lines::@1 to:play_remove_lines::@7 play_remove_lines::@7: scope:[play_remove_lines] from play_remove_lines::@6 play_remove_lines::@8 - [356] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@6/(byte) play_remove_lines::w#11 play_remove_lines::@8/(byte) play_remove_lines::w#3 ) - [357] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 + [361] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@6/(byte) play_remove_lines::w#11 play_remove_lines::@8/(byte) play_remove_lines::w#3 ) + [362] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 to:play_remove_lines::@return play_remove_lines::@return: scope:[play_remove_lines] from play_remove_lines::@7 - [358] return + [363] return to:@return play_remove_lines::@8: scope:[play_remove_lines] from play_remove_lines::@7 - [359] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 - [360] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 + [364] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 + [365] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 to:play_remove_lines::@7 (void()) play_lock_current() play_lock_current: scope:[play_lock_current] from play_move_down::@9 - [361] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 + [366] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 to:play_lock_current::@1 play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lock_current::@6 - [362] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::l#1 ) - [362] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::i#7 ) - [362] (byte) play_lock_current::yp#2 ← phi( play_lock_current/(byte) play_lock_current::yp#0 play_lock_current::@6/(byte) play_lock_current::yp#1 ) - [363] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 - [364] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) - [365] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 + [367] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::l#1 ) + [367] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::i#7 ) + [367] (byte) play_lock_current::yp#2 ← phi( play_lock_current/(byte) play_lock_current::yp#0 play_lock_current::@6/(byte) play_lock_current::yp#1 ) + [368] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 + [369] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) + [370] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 to:play_lock_current::@2 play_lock_current::@2: scope:[play_lock_current] from play_lock_current::@1 play_lock_current::@7 - [366] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte) 0 play_lock_current::@7/(byte) play_lock_current::c#1 ) - [366] (byte) play_lock_current::xp#2 ← phi( play_lock_current::@1/(byte) play_lock_current::xp#0 play_lock_current::@7/(byte) play_lock_current::xp#1 ) - [366] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@7/(byte) play_lock_current::i#9 ) - [367] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 - [368] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 + [371] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte) 0 play_lock_current::@7/(byte) play_lock_current::c#1 ) + [371] (byte) play_lock_current::xp#2 ← phi( play_lock_current::@1/(byte) play_lock_current::xp#0 play_lock_current::@7/(byte) play_lock_current::xp#1 ) + [371] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@7/(byte) play_lock_current::i#9 ) + [372] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 + [373] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 to:play_lock_current::@4 play_lock_current::@4: scope:[play_lock_current] from play_lock_current::@2 - [369] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 + [374] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 to:play_lock_current::@3 play_lock_current::@3: scope:[play_lock_current] from play_lock_current::@2 play_lock_current::@4 - [370] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 - [371] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 - [372] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 + [375] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 + [376] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 + [377] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 to:play_lock_current::@5 play_lock_current::@5: scope:[play_lock_current] from play_lock_current::@3 - [373] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 - [374] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 - [375] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 + [378] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 + [379] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 + [380] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 to:play_lock_current::@return play_lock_current::@return: scope:[play_lock_current] from play_lock_current::@5 - [376] return + [381] return to:@return play_lock_current::@6: scope:[play_lock_current] from play_lock_current::@5 - [377] (byte) play_lock_current::i#7 ← (byte) play_lock_current::i#1 + [382] (byte) play_lock_current::i#7 ← (byte) play_lock_current::i#1 to:play_lock_current::@1 play_lock_current::@7: scope:[play_lock_current] from play_lock_current::@3 - [378] (byte) play_lock_current::i#9 ← (byte) play_lock_current::i#1 + [383] (byte) play_lock_current::i#9 ← (byte) play_lock_current::i#1 to:play_lock_current::@2 (byte()) keyboard_event_pressed((byte) keyboard_event_pressed::keycode) keyboard_event_pressed: scope:[keyboard_event_pressed] from keyboard_event_scan::@1 keyboard_event_scan::@17 keyboard_event_scan::@2 keyboard_event_scan::@3 play_move_down::@1 - [379] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@1/(const nomodify byte) KEY_RSHIFT keyboard_event_scan::@17/(const nomodify byte) KEY_LSHIFT keyboard_event_scan::@2/(const nomodify byte) KEY_CTRL keyboard_event_scan::@3/(const nomodify byte) KEY_COMMODORE play_move_down::@1/(const nomodify byte) KEY_SPACE ) - [380] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 - [381] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0) - [382] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 - [383] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) + [384] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@1/(const nomodify byte) KEY_RSHIFT keyboard_event_scan::@17/(const nomodify byte) KEY_LSHIFT keyboard_event_scan::@2/(const nomodify byte) KEY_CTRL keyboard_event_scan::@3/(const nomodify byte) KEY_COMMODORE play_move_down::@1/(const nomodify byte) KEY_SPACE ) + [385] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 + [386] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0) + [387] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 + [388] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) to:keyboard_event_pressed::@return keyboard_event_pressed::@return: scope:[keyboard_event_pressed] from keyboard_event_pressed - [384] return + [389] return to:@return (byte()) keyboard_event_get() keyboard_event_get: scope:[keyboard_event_get] from main::@19 - [385] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return + [390] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return to:keyboard_event_get::@1 keyboard_event_get::@1: scope:[keyboard_event_get] from keyboard_event_get - [386] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 - [387] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) + [391] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 + [392] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) to:keyboard_event_get::@return keyboard_event_get::@return: scope:[keyboard_event_get] from keyboard_event_get keyboard_event_get::@1 - [388] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@1/(byte) keyboard_events_size#4 ) - [388] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte) $ff keyboard_event_get::@1/(byte) keyboard_event_get::return#1 ) - [389] return + [393] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@1/(byte) keyboard_events_size#4 ) + [393] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte) $ff keyboard_event_get::@1/(byte) keyboard_event_get::return#1 ) + [394] return to:@return (void()) keyboard_event_scan() keyboard_event_scan: scope:[keyboard_event_scan] from main::@18 - [390] phi() + [395] phi() to:keyboard_event_scan::@7 keyboard_event_scan::@7: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@8 - [391] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@8/(byte) keyboard_events_size#13 ) - [391] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::keycode#13 ) - [391] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::row#1 ) - [392] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 - [393] call keyboard_matrix_read - [394] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + [396] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@8/(byte) keyboard_events_size#13 ) + [396] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::keycode#13 ) + [396] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::row#1 ) + [397] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 + [398] call keyboard_matrix_read + [399] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 to:keyboard_event_scan::@19 keyboard_event_scan::@19: scope:[keyboard_event_scan] from keyboard_event_scan::@7 - [395] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 - [396] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 + [400] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 + [401] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 to:keyboard_event_scan::@16 keyboard_event_scan::@16: scope:[keyboard_event_scan] from keyboard_event_scan::@19 - [397] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 + [402] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 to:keyboard_event_scan::@8 keyboard_event_scan::@8: scope:[keyboard_event_scan] from keyboard_event_scan::@15 keyboard_event_scan::@16 - [398] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_events_size#29 keyboard_event_scan::@16/(byte) keyboard_events_size#30 ) - [398] (byte) keyboard_event_scan::keycode#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#1 ) - [399] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 - [400] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 + [403] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_events_size#29 keyboard_event_scan::@16/(byte) keyboard_events_size#30 ) + [403] (byte) keyboard_event_scan::keycode#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#1 ) + [404] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 + [405] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 to:keyboard_event_scan::@17 keyboard_event_scan::@17: scope:[keyboard_event_scan] from keyboard_event_scan::@8 - [401] phi() - [402] call keyboard_event_pressed - [403] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 + [406] phi() + [407] call keyboard_event_pressed + [408] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@20 keyboard_event_scan::@20: scope:[keyboard_event_scan] from keyboard_event_scan::@17 - [404] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 - [405] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 + [409] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 + [410] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 to:keyboard_event_scan::@18 keyboard_event_scan::@18: scope:[keyboard_event_scan] from keyboard_event_scan::@20 - [406] phi() + [411] phi() to:keyboard_event_scan::@1 keyboard_event_scan::@1: scope:[keyboard_event_scan] from keyboard_event_scan::@18 keyboard_event_scan::@20 - [407] phi() - [408] call keyboard_event_pressed - [409] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 + [412] phi() + [413] call keyboard_event_pressed + [414] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@21 keyboard_event_scan::@21: scope:[keyboard_event_scan] from keyboard_event_scan::@1 - [410] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 - [411] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 + [415] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 + [416] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 to:keyboard_event_scan::@4 keyboard_event_scan::@4: scope:[keyboard_event_scan] from keyboard_event_scan::@21 - [412] phi() + [417] phi() to:keyboard_event_scan::@2 keyboard_event_scan::@2: scope:[keyboard_event_scan] from keyboard_event_scan::@21 keyboard_event_scan::@4 - [413] phi() - [414] call keyboard_event_pressed - [415] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 + [418] phi() + [419] call keyboard_event_pressed + [420] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@22 keyboard_event_scan::@22: scope:[keyboard_event_scan] from keyboard_event_scan::@2 - [416] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 - [417] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 + [421] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 + [422] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 to:keyboard_event_scan::@5 keyboard_event_scan::@5: scope:[keyboard_event_scan] from keyboard_event_scan::@22 - [418] phi() + [423] phi() to:keyboard_event_scan::@3 keyboard_event_scan::@3: scope:[keyboard_event_scan] from keyboard_event_scan::@22 keyboard_event_scan::@5 - [419] phi() - [420] call keyboard_event_pressed - [421] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 + [424] phi() + [425] call keyboard_event_pressed + [426] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@23 keyboard_event_scan::@23: scope:[keyboard_event_scan] from keyboard_event_scan::@3 - [422] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 - [423] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return + [427] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 + [428] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return to:keyboard_event_scan::@6 keyboard_event_scan::@6: scope:[keyboard_event_scan] from keyboard_event_scan::@23 - [424] phi() + [429] phi() to:keyboard_event_scan::@return keyboard_event_scan::@return: scope:[keyboard_event_scan] from keyboard_event_scan::@23 keyboard_event_scan::@6 - [425] return + [430] return to:@return keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan::@10 keyboard_event_scan::@19 - [426] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 ) - [426] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#11 ) - [426] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::col#1 keyboard_event_scan::@19/(byte) 0 ) - [427] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) - [428] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) - [429] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 + [431] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 ) + [431] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#11 ) + [431] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::col#1 keyboard_event_scan::@19/(byte) 0 ) + [432] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) + [433] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) + [434] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 to:keyboard_event_scan::@12 keyboard_event_scan::@12: scope:[keyboard_event_scan] from keyboard_event_scan::@9 - [430] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 + [435] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 to:keyboard_event_scan::@13 keyboard_event_scan::@13: scope:[keyboard_event_scan] from keyboard_event_scan::@12 - [431] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) - [432] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 + [436] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) + [437] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 to:keyboard_event_scan::@14 keyboard_event_scan::@14: scope:[keyboard_event_scan] from keyboard_event_scan::@13 - [433] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 - [434] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 + [438] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 + [439] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 to:keyboard_event_scan::@10 keyboard_event_scan::@10: scope:[keyboard_event_scan] from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 - [435] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan::@9/(byte) keyboard_events_size#10 keyboard_event_scan::@11/(byte) keyboard_events_size#1 keyboard_event_scan::@12/(byte) keyboard_events_size#10 keyboard_event_scan::@14/(byte) keyboard_events_size#2 ) - [436] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 - [437] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 - [438] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 + [440] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan::@9/(byte) keyboard_events_size#10 keyboard_event_scan::@11/(byte) keyboard_events_size#1 keyboard_event_scan::@12/(byte) keyboard_events_size#10 keyboard_event_scan::@14/(byte) keyboard_events_size#2 ) + [441] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 + [442] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 + [443] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 to:keyboard_event_scan::@15 keyboard_event_scan::@15: scope:[keyboard_event_scan] from keyboard_event_scan::@10 - [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 + [444] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 to:keyboard_event_scan::@8 keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan::@13 - [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 - [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 - [442] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 + [445] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 + [446] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 + [447] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 to:keyboard_event_scan::@10 (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 - [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) + [448] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [449] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read - [445] return + [450] return to:@return (void()) render_show() render_show: scope:[render_show] from main::@3 - [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 + [451] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 to:render_show::toD0182 render_show::toD0182: scope:[render_show] from render_show - [447] phi() + [452] phi() to:render_show::@1 render_show::@1: scope:[render_show] from render_show::toD0181 render_show::toD0182 - [448] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 ) - [449] *((const nomodify byte*) D018) ← (byte) render_show::d018val#3 - [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) - [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) - [452] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 + [453] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 ) + [454] *((const nomodify byte*) D018) ← (byte) render_show::d018val#3 + [455] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) + [456] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) + [457] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 to:render_show::@return render_show::@return: scope:[render_show] from render_show::@1 - [453] return + [458] return to:@return render_show::toD0181: scope:[render_show] from render_show - [454] phi() + [459] phi() to:render_show::@1 (void()) play_init() play_init: scope:[play_init] from main::@11 - [455] phi() + [460] phi() to:play_init::@1 play_init::@1: scope:[play_init] from play_init play_init::@1 - [456] (byte) play_init::idx#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::idx#1 ) - [456] (byte*) play_init::pli#2 ← phi( play_init/(const byte*) playfield play_init::@1/(byte*) play_init::pli#1 ) - [456] (byte) play_init::j#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::j#1 ) - [457] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 - [458] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 - [459] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 - [460] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS - [461] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS - [462] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 - [463] if((byte) play_init::j#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_init::@1 + [461] (byte) play_init::idx#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::idx#1 ) + [461] (byte*) play_init::pli#2 ← phi( play_init/(const byte*) playfield play_init::@1/(byte*) play_init::pli#1 ) + [461] (byte) play_init::j#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::j#1 ) + [462] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 + [463] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 + [464] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 + [465] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS + [466] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS + [467] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 + [468] if((byte) play_init::j#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_init::@1 to:play_init::@2 play_init::@2: scope:[play_init] from play_init::@1 - [464] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES - [465] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) + [469] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES + [470] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) to:play_init::@3 play_init::@3: scope:[play_init] from play_init::@2 play_init::@3 - [466] (byte) play_init::b#2 ← phi( play_init::@2/(byte) 0 play_init::@3/(byte) play_init::b#1 ) - [467] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 - [468] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) - [469] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 - [470] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 + [471] (byte) play_init::b#2 ← phi( play_init::@2/(byte) 0 play_init::@3/(byte) play_init::b#1 ) + [472] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 + [473] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) + [474] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 + [475] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 to:play_init::@return play_init::@return: scope:[play_init] from play_init::@3 - [471] return + [476] return to:@return (void()) sprites_irq_init() sprites_irq_init: scope:[sprites_irq_init] from main::@10 asm { sei } - [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER + [478] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER asm { ldaCIA1_INTERRUPT } - [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK - [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR - [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f - [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST - [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER - [481] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() + [480] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK + [481] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO + [482] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [483] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f + [484] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST + [485] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER + [486] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() asm { cli } to:sprites_irq_init::@return sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init - [483] return + [488] return to:@return (void()) sprites_init() sprites_init: scope:[sprites_init] from main::@9 - [484] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $f - [485] *((const nomodify byte*) SPRITES_MC) ← (byte) 0 - [486] *((const nomodify byte*) SPRITES_EXPAND_Y) ← *((const nomodify byte*) SPRITES_MC) - [487] *((const nomodify byte*) SPRITES_EXPAND_X) ← *((const nomodify byte*) SPRITES_EXPAND_Y) + [489] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $f + [490] *((const nomodify byte*) SPRITES_MC) ← (byte) 0 + [491] *((const nomodify byte*) SPRITES_EXPAND_Y) ← *((const nomodify byte*) SPRITES_MC) + [492] *((const nomodify byte*) SPRITES_EXPAND_X) ← *((const nomodify byte*) SPRITES_EXPAND_Y) to:sprites_init::@1 sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1 - [488] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte)(number) $18+(number) $f*(number) 8 sprites_init::@1/(byte) sprites_init::xpos#1 ) - [488] (byte) sprites_init::s#2 ← phi( sprites_init/(byte) 0 sprites_init::@1/(byte) sprites_init::s#1 ) - [489] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 - [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 - [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK - [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 - [493] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 - [494] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 + [493] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte)(number) $18+(number) $f*(number) 8 sprites_init::@1/(byte) sprites_init::xpos#1 ) + [493] (byte) sprites_init::s#2 ← phi( sprites_init/(byte) 0 sprites_init::@1/(byte) sprites_init::s#1 ) + [494] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 + [495] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 + [496] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK + [497] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 + [498] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 + [499] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 to:sprites_init::@return sprites_init::@return: scope:[sprites_init] from sprites_init::@1 - [495] return + [500] return to:@return (void()) render_init() render_init: scope:[render_init] from main::@8 - [496] phi() + [501] phi() to:render_init::vicSelectGfxBank1 render_init::vicSelectGfxBank1: scope:[render_init] from render_init - [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [502] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:render_init::vicSelectGfxBank1_toDd001 render_init::vicSelectGfxBank1_toDd001: scope:[render_init] from render_init::vicSelectGfxBank1 - [498] phi() + [503] phi() to:render_init::vicSelectGfxBank1_@1 render_init::vicSelectGfxBank1_@1: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001 - [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 + [504] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 to:render_init::@2 render_init::@2: scope:[render_init] from render_init::vicSelectGfxBank1_@1 - [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 - [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK - [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK - [503] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) - [504] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) - [505] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY - [506] call render_screen_original + [505] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 + [506] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK + [507] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK + [508] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) + [509] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) + [510] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY + [511] call render_screen_original to:render_init::@3 render_init::@3: scope:[render_init] from render_init::@2 - [507] phi() - [508] call render_screen_original + [512] phi() + [513] call render_screen_original to:render_init::@1 render_init::@1: scope:[render_init] from render_init::@1 render_init::@3 - [509] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_2+(byte)(number) 2*(number) $28+(byte) $10 ) - [509] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_1+(byte)(number) 2*(number) $28+(byte) $10 ) - [509] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@3/(byte) 0 ) - [510] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 - [511] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 - [512] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 - [513] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 - [514] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 - [515] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 - [516] if((byte) render_init::i#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto render_init::@1 + [514] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_2+(byte)(number) 2*(number) $28+(byte) $10 ) + [514] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_1+(byte)(number) 2*(number) $28+(byte) $10 ) + [514] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@3/(byte) 0 ) + [515] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 + [516] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 + [517] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 + [518] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 + [519] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 + [520] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 + [521] if((byte) render_init::i#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto render_init::@1 to:render_init::@return render_init::@return: scope:[render_init] from render_init::@1 - [517] return + [522] return to:@return (void()) render_screen_original((byte*) render_screen_original::screen) render_screen_original: scope:[render_screen_original] from render_init::@2 render_init::@3 - [518] (byte*) render_screen_original::screen#9 ← phi( render_init::@2/(const nomodify byte*) PLAYFIELD_SCREEN_1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_2 ) + [523] (byte*) render_screen_original::screen#9 ← phi( render_init::@2/(const nomodify byte*) PLAYFIELD_SCREEN_1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_2 ) to:render_screen_original::@1 render_screen_original::@1: scope:[render_screen_original] from render_screen_original render_screen_original::@5 - [519] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte) 0 render_screen_original::@5/(byte) render_screen_original::y#1 ) - [519] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const to_nomodify byte*) PLAYFIELD_COLORS_ORIGINAL+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::ocols#1 ) - [519] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const to_nomodify byte*) PLAYFIELD_SCREEN_ORIGINAL+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::oscr#1 ) - [519] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const nomodify byte*) COLS render_screen_original::@5/(byte*) render_screen_original::cols#3 ) - [519] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@5/(byte*) render_screen_original::screen#10 ) + [524] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte) 0 render_screen_original::@5/(byte) render_screen_original::y#1 ) + [524] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const to_nomodify byte*) PLAYFIELD_COLORS_ORIGINAL+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::ocols#1 ) + [524] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const to_nomodify byte*) PLAYFIELD_SCREEN_ORIGINAL+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::oscr#1 ) + [524] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const nomodify byte*) COLS render_screen_original::@5/(byte*) render_screen_original::cols#3 ) + [524] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@5/(byte*) render_screen_original::screen#10 ) to:render_screen_original::@2 render_screen_original::@2: scope:[render_screen_original] from render_screen_original::@1 render_screen_original::@2 - [520] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte) 0 render_screen_original::@2/(byte) render_screen_original::x#1 ) - [520] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 ) - [520] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 ) - [521] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE - [522] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 - [523] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK - [524] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 - [525] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 - [526] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 + [525] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte) 0 render_screen_original::@2/(byte) render_screen_original::x#1 ) + [525] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 ) + [525] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 ) + [526] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE + [527] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 + [528] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK + [529] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 + [530] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 + [531] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 to:render_screen_original::@3 render_screen_original::@3: scope:[render_screen_original] from render_screen_original::@2 render_screen_original::@3 - [527] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 ) - [527] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 ) - [527] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 ) - [527] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 ) - [527] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 ) - [528] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) - [529] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 - [530] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 - [531] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) - [532] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 - [533] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 - [534] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 - [535] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 + [532] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 ) + [532] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 ) + [532] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 ) + [532] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 ) + [532] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 ) + [533] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) + [534] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 + [535] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 + [536] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) + [537] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 + [538] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 + [539] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 + [540] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 to:render_screen_original::@4 render_screen_original::@4: scope:[render_screen_original] from render_screen_original::@3 render_screen_original::@4 - [536] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 ) - [536] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 ) - [536] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 ) - [537] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE - [538] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 - [539] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK - [540] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 - [541] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 - [542] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 + [541] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 ) + [541] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 ) + [541] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 ) + [542] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE + [543] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 + [544] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK + [545] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 + [546] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 + [547] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 to:render_screen_original::@5 render_screen_original::@5: scope:[render_screen_original] from render_screen_original::@4 - [543] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 - [544] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 + [548] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 + [549] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 to:render_screen_original::@return render_screen_original::@return: scope:[render_screen_original] from render_screen_original::@5 - [545] return + [550] return to:@return (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from main - [546] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff - [547] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + [551] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff + [552] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - [548] return + [553] return to:@return interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() sprites_irq: scope:[sprites_irq] from asm { cld } - [550] (byte) sprites_irq::ypos#0 ← (volatile byte) irq_sprite_ypos - [551] *((const nomodify byte*) SPRITES_YPOS) ← (byte) sprites_irq::ypos#0 - [552] *((const nomodify byte*) SPRITES_YPOS+(byte) 2) ← (byte) sprites_irq::ypos#0 - [553] *((const nomodify byte*) SPRITES_YPOS+(byte) 4) ← (byte) sprites_irq::ypos#0 - [554] *((const nomodify byte*) SPRITES_YPOS+(byte) 6) ← (byte) sprites_irq::ypos#0 - [555] (byte~) sprites_irq::$0 ← (volatile byte) irq_raster_next + (byte) 1 - [556] (volatile byte) sprites_irq::raster_sprite_gfx_modify ← (byte~) sprites_irq::$0 + [555] (byte) sprites_irq::ypos#0 ← (volatile byte) irq_sprite_ypos + [556] *((const nomodify byte*) SPRITES_YPOS) ← (byte) sprites_irq::ypos#0 + [557] *((const nomodify byte*) SPRITES_YPOS+(byte) 2) ← (byte) sprites_irq::ypos#0 + [558] *((const nomodify byte*) SPRITES_YPOS+(byte) 4) ← (byte) sprites_irq::ypos#0 + [559] *((const nomodify byte*) SPRITES_YPOS+(byte) 6) ← (byte) sprites_irq::ypos#0 + [560] (byte~) sprites_irq::$0 ← (volatile byte) irq_raster_next + (byte) 1 + [561] (volatile byte) sprites_irq::raster_sprite_gfx_modify ← (byte~) sprites_irq::$0 to:sprites_irq::@8 sprites_irq::@8: scope:[sprites_irq] from sprites_irq sprites_irq::@8 - [557] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 + [562] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 to:sprites_irq::@9 sprites_irq::@9: scope:[sprites_irq] from sprites_irq::@8 - [558] (byte) sprites_irq::ptr#0 ← (volatile byte) irq_sprite_ptr - [559] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 + [563] (byte) sprites_irq::ptr#0 ← (volatile byte) irq_sprite_ptr + [564] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 to:sprites_irq::@10 sprites_irq::@10: scope:[sprites_irq] from sprites_irq::@9 - [560] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2) ← (byte) sprites_irq::ptr#0 - [561] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 - [562] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 1) ← (byte) sprites_irq::ptr#3 - [563] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 2) ← (byte) sprites_irq::ptr#3 - [564] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 - [565] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 3) ← (byte) sprites_irq::ptr#4 + [565] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2) ← (byte) sprites_irq::ptr#0 + [566] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 + [567] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 1) ← (byte) sprites_irq::ptr#3 + [568] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 2) ← (byte) sprites_irq::ptr#3 + [569] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 + [570] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 3) ← (byte) sprites_irq::ptr#4 to:sprites_irq::@2 sprites_irq::@2: scope:[sprites_irq] from sprites_irq::@1 sprites_irq::@10 - [566] (volatile byte) irq_cnt ← ++ (volatile byte) irq_cnt - [567] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 + [571] (volatile byte) irq_cnt ← ++ (volatile byte) irq_cnt + [572] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 to:sprites_irq::@6 sprites_irq::@6: scope:[sprites_irq] from sprites_irq::@2 - [568] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 + [573] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 to:sprites_irq::@7 sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@6 - [569] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 - [570] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 - [571] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 + [574] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 + [575] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 + [576] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 to:sprites_irq::@5 sprites_irq::@5: scope:[sprites_irq] from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 - [572] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next - [573] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER + [577] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next + [578] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER to:sprites_irq::@return sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@5 - [574] return + [579] return to:@return sprites_irq::@4: scope:[sprites_irq] from sprites_irq::@6 - [575] (volatile byte) irq_cnt ← (byte) 0 - [576] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST - [577] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 - [578] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 + [580] (volatile byte) irq_cnt ← (byte) 0 + [581] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST + [582] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 + [583] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 to:sprites_irq::@5 sprites_irq::@3: scope:[sprites_irq] from sprites_irq::@2 - [579] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 - [580] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS + [584] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 + [585] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS to:sprites_irq::toSpritePtr1 sprites_irq::toSpritePtr1: scope:[sprites_irq] from sprites_irq::@3 - [581] phi() + [586] phi() to:sprites_irq::@11 sprites_irq::@11: scope:[sprites_irq] from sprites_irq::toSpritePtr1 - [582] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 + [587] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 to:sprites_irq::@5 sprites_irq::@1: scope:[sprites_irq] from sprites_irq::@9 - [583] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1) ← (byte) sprites_irq::ptr#0 - [584] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 - [585] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 1) ← (byte) sprites_irq::ptr#1 - [586] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 2) ← (byte) sprites_irq::ptr#1 - [587] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 - [588] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 3) ← (byte) sprites_irq::ptr#2 + [588] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1) ← (byte) sprites_irq::ptr#0 + [589] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 + [590] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 1) ← (byte) sprites_irq::ptr#1 + [591] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 2) ← (byte) sprites_irq::ptr#1 + [592] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 + [593] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 3) ← (byte) sprites_irq::ptr#2 to:sprites_irq::@2 diff --git a/src/test/ref/complex/tetris/tetris.log b/src/test/ref/complex/tetris/tetris.log index 13f3e013f..470b8ff09 100644 --- a/src/test/ref/complex/tetris/tetris.log +++ b/src/test/ref/complex/tetris/tetris.log @@ -6,27 +6,36 @@ Resolved forward reference COLLISION_NONE to (const nomodify byte) COLLISION_NON Resolved forward reference COLLISION_NONE to (const nomodify byte) COLLISION_NONE Resolved forward reference COLLISION_NONE to (const nomodify byte) COLLISION_NONE Setting inferred volatile on symbol affected by address-of (byte*) render_score::score_bytes ← (byte*)&(dword) score_bcd -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call vicSelectGfxBank (const nomodify byte*) PLAYFIELD_CHARSET Inlined call (byte~) render_show::$2 ← call toD018 (const nomodify byte*) PLAYFIELD_SCREEN_1 (const nomodify byte*) PLAYFIELD_CHARSET Inlined call (byte~) render_show::$1 ← call toD018 (const nomodify byte*) PLAYFIELD_SCREEN_2 (const nomodify byte*) PLAYFIELD_CHARSET Inlined call (byte~) $0 ← call toSpritePtr (const nomodify byte*) PLAYFIELD_SPRITES Inlined call (byte~) sprites_irq::$5 ← call toSpritePtr (const nomodify byte*) PLAYFIELD_SPRITES -Inlined call (byte~) play_spawn_current::$5 ← call sid_rnd CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@1 +(void()) sid_rnd_init() +sid_rnd_init: scope:[sid_rnd_init] from main + *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (number) $ffff + *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + to:sid_rnd_init::@return +sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init + return + to:@return + +(byte()) sid_rnd() +sid_rnd: scope:[sid_rnd] from play_spawn_current::@4 + (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) + to:sid_rnd::@return +sid_rnd::@return: scope:[sid_rnd] from sid_rnd + (byte) sid_rnd::return#3 ← phi( sid_rnd/(byte) sid_rnd::return#0 ) + (byte) sid_rnd::return#1 ← (byte) sid_rnd::return#3 + return + to:@return + (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 (byte) keyboard_matrix_read::rowid#1 ← phi( keyboard_event_scan::@7/(byte) keyboard_matrix_read::rowid#0 ) @@ -294,15 +303,6 @@ keyboard_event_get::@return: scope:[keyboard_event_get] from keyboard_event_get (byte) keyboard_events_size#5 ← (byte) keyboard_events_size#16 return to:@return - -(void()) sid_rnd_init() -sid_rnd_init: scope:[sid_rnd_init] from main - *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff - *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE - to:sid_rnd_init::@return -sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - return - to:@return @2: scope:[] from @1 (byte) keyboard_modifiers#54 ← phi( @1/(byte) keyboard_modifiers#0 ) (byte) keyboard_events_size#72 ← phi( @1/(byte) keyboard_events_size#0 ) @@ -934,11 +934,11 @@ render_next::@return: scope:[render_next] from render_next::@9 (word) lines_bcd#79 ← phi( @2/(word) lines_bcd#0 ) (byte) keyboard_modifiers#51 ← phi( @2/(byte) keyboard_modifiers#54 ) (byte) keyboard_events_size#68 ← phi( @2/(byte) keyboard_events_size#72 ) - (byte) game_over#83 ← phi( @2/(byte) game_over#0 ) - (byte) current_ypos#96 ← phi( @2/(byte) current_ypos#0 ) - (byte) current_xpos#117 ← phi( @2/(byte) current_xpos#0 ) - (byte*) current_piece_gfx#110 ← phi( @2/(byte*) current_piece_gfx#0 ) - (byte) current_piece_char#98 ← phi( @2/(byte) current_piece_char#0 ) + (byte) game_over#82 ← phi( @2/(byte) game_over#0 ) + (byte) current_ypos#95 ← phi( @2/(byte) current_ypos#0 ) + (byte) current_xpos#116 ← phi( @2/(byte) current_xpos#0 ) + (byte*) current_piece_gfx#109 ← phi( @2/(byte*) current_piece_gfx#0 ) + (byte) current_piece_char#97 ← phi( @2/(byte) current_piece_char#0 ) (byte) render_screen_render#60 ← phi( @2/(byte) render_screen_render#0 ) (byte) render_screen_show#55 ← phi( @2/(byte) render_screen_show#0 ) kickasm(location (const nomodify byte*) PLAYFIELD_SPRITES) {{ .var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000)) @@ -989,11 +989,11 @@ sprites_init::@return: scope:[sprites_init] from sprites_init::@1 (word) lines_bcd#73 ← phi( @3/(word) lines_bcd#79 ) (byte) keyboard_modifiers#48 ← phi( @3/(byte) keyboard_modifiers#51 ) (byte) keyboard_events_size#63 ← phi( @3/(byte) keyboard_events_size#68 ) - (byte) game_over#78 ← phi( @3/(byte) game_over#83 ) - (byte) current_ypos#93 ← phi( @3/(byte) current_ypos#96 ) - (byte) current_xpos#114 ← phi( @3/(byte) current_xpos#117 ) - (byte*) current_piece_gfx#105 ← phi( @3/(byte*) current_piece_gfx#110 ) - (byte) current_piece_char#92 ← phi( @3/(byte) current_piece_char#98 ) + (byte) game_over#77 ← phi( @3/(byte) game_over#82 ) + (byte) current_ypos#92 ← phi( @3/(byte) current_ypos#95 ) + (byte) current_xpos#113 ← phi( @3/(byte) current_xpos#116 ) + (byte*) current_piece_gfx#104 ← phi( @3/(byte*) current_piece_gfx#109 ) + (byte) current_piece_char#91 ← phi( @3/(byte) current_piece_char#97 ) (byte) render_screen_render#57 ← phi( @3/(byte) render_screen_render#60 ) (byte) render_screen_show#52 ← phi( @3/(byte) render_screen_show#55 ) (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST @@ -1006,11 +1006,11 @@ toSpritePtr1: scope:[] from @4 (word) lines_bcd#68 ← phi( @4/(word) lines_bcd#73 ) (byte) keyboard_modifiers#45 ← phi( @4/(byte) keyboard_modifiers#48 ) (byte) keyboard_events_size#57 ← phi( @4/(byte) keyboard_events_size#63 ) - (byte) game_over#72 ← phi( @4/(byte) game_over#78 ) - (byte) current_ypos#86 ← phi( @4/(byte) current_ypos#93 ) - (byte) current_xpos#107 ← phi( @4/(byte) current_xpos#114 ) - (byte*) current_piece_gfx#98 ← phi( @4/(byte*) current_piece_gfx#105 ) - (byte) current_piece_char#86 ← phi( @4/(byte) current_piece_char#92 ) + (byte) game_over#72 ← phi( @4/(byte) game_over#77 ) + (byte) current_ypos#86 ← phi( @4/(byte) current_ypos#92 ) + (byte) current_xpos#107 ← phi( @4/(byte) current_xpos#113 ) + (byte*) current_piece_gfx#98 ← phi( @4/(byte*) current_piece_gfx#104 ) + (byte) current_piece_char#86 ← phi( @4/(byte) current_piece_char#91 ) (byte) render_screen_render#54 ← phi( @4/(byte) render_screen_render#57 ) (byte) render_screen_show#48 ← phi( @4/(byte) render_screen_show#52 ) (byte*) toSpritePtr1_sprite#1 ← phi( @4/(byte*) toSpritePtr1_sprite#0 ) @@ -1394,10 +1394,10 @@ play_movement::@return: scope:[play_movement] from play_movement::@2 play_movem (byte()) play_move_down((byte) play_move_down::key_event) play_move_down: scope:[play_move_down] from play_movement (byte) next_piece_idx#72 ← phi( play_movement/(byte) next_piece_idx#26 ) - (byte) game_over#79 ← phi( play_movement/(byte) game_over#23 ) - (byte*) current_piece_gfx#106 ← phi( play_movement/(byte*) current_piece_gfx#31 ) - (byte) current_piece_char#93 ← phi( play_movement/(byte) current_piece_char#25 ) - (byte*) current_piece#85 ← phi( play_movement/(byte*) current_piece#24 ) + (byte) game_over#78 ← phi( play_movement/(byte) game_over#23 ) + (byte*) current_piece_gfx#105 ← phi( play_movement/(byte*) current_piece_gfx#31 ) + (byte) current_piece_char#92 ← phi( play_movement/(byte) current_piece_char#25 ) + (byte*) current_piece#84 ← phi( play_movement/(byte*) current_piece#24 ) (byte) level_bcd#86 ← phi( play_movement/(byte) level_bcd#27 ) (byte) level#93 ← phi( play_movement/(byte) level#29 ) (word) lines_bcd#74 ← phi( play_movement/(word) lines_bcd#22 ) @@ -1415,10 +1415,10 @@ play_move_down: scope:[play_move_down] from play_movement to:play_move_down::@5 play_move_down::@1: scope:[play_move_down] from play_move_down play_move_down::@5 (byte) next_piece_idx#68 ← phi( play_move_down/(byte) next_piece_idx#72 play_move_down::@5/(byte) next_piece_idx#73 ) - (byte) game_over#73 ← phi( play_move_down/(byte) game_over#79 play_move_down::@5/(byte) game_over#80 ) - (byte*) current_piece_gfx#99 ← phi( play_move_down/(byte*) current_piece_gfx#106 play_move_down::@5/(byte*) current_piece_gfx#107 ) - (byte) current_piece_char#87 ← phi( play_move_down/(byte) current_piece_char#93 play_move_down::@5/(byte) current_piece_char#94 ) - (byte*) current_piece#80 ← phi( play_move_down/(byte*) current_piece#85 play_move_down::@5/(byte*) current_piece#86 ) + (byte) game_over#73 ← phi( play_move_down/(byte) game_over#78 play_move_down::@5/(byte) game_over#79 ) + (byte*) current_piece_gfx#99 ← phi( play_move_down/(byte*) current_piece_gfx#105 play_move_down::@5/(byte*) current_piece_gfx#106 ) + (byte) current_piece_char#87 ← phi( play_move_down/(byte) current_piece_char#92 play_move_down::@5/(byte) current_piece_char#93 ) + (byte*) current_piece#80 ← phi( play_move_down/(byte*) current_piece#84 play_move_down::@5/(byte*) current_piece#85 ) (byte) level_bcd#79 ← phi( play_move_down/(byte) level_bcd#86 play_move_down::@5/(byte) level_bcd#87 ) (byte) level#86 ← phi( play_move_down/(byte) level#93 play_move_down::@5/(byte) level#94 ) (word) lines_bcd#69 ← phi( play_move_down/(word) lines_bcd#74 play_move_down::@5/(word) lines_bcd#75 ) @@ -1455,10 +1455,10 @@ play_move_down::@13: scope:[play_move_down] from play_move_down::@1 to:play_move_down::@6 play_move_down::@5: scope:[play_move_down] from play_move_down (byte) next_piece_idx#73 ← phi( play_move_down/(byte) next_piece_idx#72 ) - (byte) game_over#80 ← phi( play_move_down/(byte) game_over#79 ) - (byte*) current_piece_gfx#107 ← phi( play_move_down/(byte*) current_piece_gfx#106 ) - (byte) current_piece_char#94 ← phi( play_move_down/(byte) current_piece_char#93 ) - (byte*) current_piece#86 ← phi( play_move_down/(byte*) current_piece#85 ) + (byte) game_over#79 ← phi( play_move_down/(byte) game_over#78 ) + (byte*) current_piece_gfx#106 ← phi( play_move_down/(byte*) current_piece_gfx#105 ) + (byte) current_piece_char#93 ← phi( play_move_down/(byte) current_piece_char#92 ) + (byte*) current_piece#85 ← phi( play_move_down/(byte*) current_piece#84 ) (byte) level_bcd#87 ← phi( play_move_down/(byte) level_bcd#86 ) (byte) level#94 ← phi( play_move_down/(byte) level#93 ) (word) lines_bcd#75 ← phi( play_move_down/(word) lines_bcd#74 ) @@ -2213,53 +2213,43 @@ play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@6 (byte*) current_piece#72 ← phi( play_spawn_current::@6/(byte*) current_piece#73 ) (byte) game_over#5 ← (number) 1 to:play_spawn_current::@1 -play_spawn_current::@3: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@5 - (byte) game_over#39 ← phi( play_spawn_current::@1/(byte) game_over#52 play_spawn_current::@5/(byte) game_over#53 ) - (byte) current_ypos#57 ← phi( play_spawn_current::@1/(byte) current_ypos#70 play_spawn_current::@5/(byte) current_ypos#71 ) - (byte) current_xpos#69 ← phi( play_spawn_current::@1/(byte) current_xpos#88 play_spawn_current::@5/(byte) current_xpos#89 ) - (byte*) current_piece_gfx#57 ← phi( play_spawn_current::@1/(byte*) current_piece_gfx#74 play_spawn_current::@5/(byte*) current_piece_gfx#75 ) - (byte) current_orientation#56 ← phi( play_spawn_current::@1/(byte) current_orientation#68 play_spawn_current::@5/(byte) current_orientation#69 ) - (byte) current_piece_char#45 ← phi( play_spawn_current::@1/(byte) current_piece_char#61 play_spawn_current::@5/(byte) current_piece_char#62 ) - (byte*) current_piece#48 ← phi( play_spawn_current::@1/(byte*) current_piece#61 play_spawn_current::@5/(byte*) current_piece#62 ) - (byte) play_spawn_current::piece_idx#2 ← phi( play_spawn_current::@1/(byte) play_spawn_current::piece_idx#0 play_spawn_current::@5/(byte) play_spawn_current::piece_idx#1 ) +play_spawn_current::@3: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@7 + (byte) game_over#39 ← phi( play_spawn_current::@1/(byte) game_over#52 play_spawn_current::@7/(byte) game_over#53 ) + (byte) current_ypos#57 ← phi( play_spawn_current::@1/(byte) current_ypos#70 play_spawn_current::@7/(byte) current_ypos#71 ) + (byte) current_xpos#69 ← phi( play_spawn_current::@1/(byte) current_xpos#88 play_spawn_current::@7/(byte) current_xpos#89 ) + (byte*) current_piece_gfx#57 ← phi( play_spawn_current::@1/(byte*) current_piece_gfx#74 play_spawn_current::@7/(byte*) current_piece_gfx#75 ) + (byte) current_orientation#56 ← phi( play_spawn_current::@1/(byte) current_orientation#68 play_spawn_current::@7/(byte) current_orientation#69 ) + (byte) current_piece_char#45 ← phi( play_spawn_current::@1/(byte) current_piece_char#61 play_spawn_current::@7/(byte) current_piece_char#62 ) + (byte*) current_piece#48 ← phi( play_spawn_current::@1/(byte*) current_piece#61 play_spawn_current::@7/(byte*) current_piece#62 ) + (byte) play_spawn_current::piece_idx#2 ← phi( play_spawn_current::@1/(byte) play_spawn_current::piece_idx#0 play_spawn_current::@7/(byte) play_spawn_current::piece_idx#1 ) (bool~) play_spawn_current::$4 ← (byte) play_spawn_current::piece_idx#2 == (number) 7 - if((bool~) play_spawn_current::$4) goto play_spawn_current::sid_rnd1 - to:play_spawn_current::@4 -play_spawn_current::sid_rnd1: scope:[play_spawn_current] from play_spawn_current::@3 - (byte) game_over#75 ← phi( play_spawn_current::@3/(byte) game_over#39 ) - (byte) current_ypos#89 ← phi( play_spawn_current::@3/(byte) current_ypos#57 ) - (byte) current_xpos#110 ← phi( play_spawn_current::@3/(byte) current_xpos#69 ) - (byte*) current_piece_gfx#100 ← phi( play_spawn_current::@3/(byte*) current_piece_gfx#57 ) - (byte) current_orientation#87 ← phi( play_spawn_current::@3/(byte) current_orientation#56 ) - (byte) current_piece_char#88 ← phi( play_spawn_current::@3/(byte) current_piece_char#45 ) - (byte*) current_piece#81 ← phi( play_spawn_current::@3/(byte*) current_piece#48 ) - (byte) play_spawn_current::sid_rnd1_return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) - to:play_spawn_current::sid_rnd1_@return -play_spawn_current::sid_rnd1_@return: scope:[play_spawn_current] from play_spawn_current::sid_rnd1 - (byte) game_over#66 ← phi( play_spawn_current::sid_rnd1/(byte) game_over#75 ) - (byte) current_ypos#81 ← phi( play_spawn_current::sid_rnd1/(byte) current_ypos#89 ) - (byte) current_xpos#101 ← phi( play_spawn_current::sid_rnd1/(byte) current_xpos#110 ) - (byte*) current_piece_gfx#93 ← phi( play_spawn_current::sid_rnd1/(byte*) current_piece_gfx#100 ) - (byte) current_orientation#79 ← phi( play_spawn_current::sid_rnd1/(byte) current_orientation#87 ) - (byte) current_piece_char#78 ← phi( play_spawn_current::sid_rnd1/(byte) current_piece_char#88 ) - (byte*) current_piece#74 ← phi( play_spawn_current::sid_rnd1/(byte*) current_piece#81 ) - (byte) play_spawn_current::sid_rnd1_return#2 ← phi( play_spawn_current::sid_rnd1/(byte) play_spawn_current::sid_rnd1_return#0 ) - (byte) play_spawn_current::sid_rnd1_return#1 ← (byte) play_spawn_current::sid_rnd1_return#2 + if((bool~) play_spawn_current::$4) goto play_spawn_current::@4 to:play_spawn_current::@5 -play_spawn_current::@5: scope:[play_spawn_current] from play_spawn_current::sid_rnd1_@return - (byte) game_over#53 ← phi( play_spawn_current::sid_rnd1_@return/(byte) game_over#66 ) - (byte) current_ypos#71 ← phi( play_spawn_current::sid_rnd1_@return/(byte) current_ypos#81 ) - (byte) current_xpos#89 ← phi( play_spawn_current::sid_rnd1_@return/(byte) current_xpos#101 ) - (byte*) current_piece_gfx#75 ← phi( play_spawn_current::sid_rnd1_@return/(byte*) current_piece_gfx#93 ) - (byte) current_orientation#69 ← phi( play_spawn_current::sid_rnd1_@return/(byte) current_orientation#79 ) - (byte) current_piece_char#62 ← phi( play_spawn_current::sid_rnd1_@return/(byte) current_piece_char#78 ) - (byte*) current_piece#62 ← phi( play_spawn_current::sid_rnd1_@return/(byte*) current_piece#74 ) - (byte) play_spawn_current::sid_rnd1_return#3 ← phi( play_spawn_current::sid_rnd1_@return/(byte) play_spawn_current::sid_rnd1_return#1 ) - (byte~) play_spawn_current::$5 ← (byte) play_spawn_current::sid_rnd1_return#3 +play_spawn_current::@4: scope:[play_spawn_current] from play_spawn_current::@3 + (byte) game_over#66 ← phi( play_spawn_current::@3/(byte) game_over#39 ) + (byte) current_ypos#81 ← phi( play_spawn_current::@3/(byte) current_ypos#57 ) + (byte) current_xpos#101 ← phi( play_spawn_current::@3/(byte) current_xpos#69 ) + (byte*) current_piece_gfx#93 ← phi( play_spawn_current::@3/(byte*) current_piece_gfx#57 ) + (byte) current_orientation#79 ← phi( play_spawn_current::@3/(byte) current_orientation#56 ) + (byte) current_piece_char#78 ← phi( play_spawn_current::@3/(byte) current_piece_char#45 ) + (byte*) current_piece#74 ← phi( play_spawn_current::@3/(byte*) current_piece#48 ) + call sid_rnd + (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#1 + to:play_spawn_current::@7 +play_spawn_current::@7: scope:[play_spawn_current] from play_spawn_current::@4 + (byte) game_over#53 ← phi( play_spawn_current::@4/(byte) game_over#66 ) + (byte) current_ypos#71 ← phi( play_spawn_current::@4/(byte) current_ypos#81 ) + (byte) current_xpos#89 ← phi( play_spawn_current::@4/(byte) current_xpos#101 ) + (byte*) current_piece_gfx#75 ← phi( play_spawn_current::@4/(byte*) current_piece_gfx#93 ) + (byte) current_orientation#69 ← phi( play_spawn_current::@4/(byte) current_orientation#79 ) + (byte) current_piece_char#62 ← phi( play_spawn_current::@4/(byte) current_piece_char#78 ) + (byte*) current_piece#62 ← phi( play_spawn_current::@4/(byte*) current_piece#74 ) + (byte) sid_rnd::return#4 ← phi( play_spawn_current::@4/(byte) sid_rnd::return#2 ) + (byte~) play_spawn_current::$5 ← (byte) sid_rnd::return#4 (number~) play_spawn_current::$6 ← (byte~) play_spawn_current::$5 & (number) 7 (byte) play_spawn_current::piece_idx#1 ← (number~) play_spawn_current::$6 to:play_spawn_current::@3 -play_spawn_current::@4: scope:[play_spawn_current] from play_spawn_current::@3 +play_spawn_current::@5: scope:[play_spawn_current] from play_spawn_current::@3 (byte) game_over#29 ← phi( play_spawn_current::@3/(byte) game_over#39 ) (byte) current_ypos#45 ← phi( play_spawn_current::@3/(byte) current_ypos#57 ) (byte) current_xpos#54 ← phi( play_spawn_current::@3/(byte) current_xpos#69 ) @@ -2270,15 +2260,15 @@ play_spawn_current::@4: scope:[play_spawn_current] from play_spawn_current::@3 (byte) play_spawn_current::piece_idx#3 ← phi( play_spawn_current::@3/(byte) play_spawn_current::piece_idx#2 ) (byte) next_piece_idx#5 ← (byte) play_spawn_current::piece_idx#3 to:play_spawn_current::@return -play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current::@4 - (byte) next_piece_idx#18 ← phi( play_spawn_current::@4/(byte) next_piece_idx#5 ) - (byte) game_over#16 ← phi( play_spawn_current::@4/(byte) game_over#29 ) - (byte) current_ypos#24 ← phi( play_spawn_current::@4/(byte) current_ypos#45 ) - (byte) current_xpos#30 ← phi( play_spawn_current::@4/(byte) current_xpos#54 ) - (byte*) current_piece_gfx#23 ← phi( play_spawn_current::@4/(byte*) current_piece_gfx#41 ) - (byte) current_orientation#26 ← phi( play_spawn_current::@4/(byte) current_orientation#45 ) - (byte) current_piece_char#18 ← phi( play_spawn_current::@4/(byte) current_piece_char#32 ) - (byte*) current_piece#18 ← phi( play_spawn_current::@4/(byte*) current_piece#35 ) +play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current::@5 + (byte) next_piece_idx#18 ← phi( play_spawn_current::@5/(byte) next_piece_idx#5 ) + (byte) game_over#16 ← phi( play_spawn_current::@5/(byte) game_over#29 ) + (byte) current_ypos#24 ← phi( play_spawn_current::@5/(byte) current_ypos#45 ) + (byte) current_xpos#30 ← phi( play_spawn_current::@5/(byte) current_xpos#54 ) + (byte*) current_piece_gfx#23 ← phi( play_spawn_current::@5/(byte*) current_piece_gfx#41 ) + (byte) current_orientation#26 ← phi( play_spawn_current::@5/(byte) current_orientation#45 ) + (byte) current_piece_char#18 ← phi( play_spawn_current::@5/(byte) current_piece_char#32 ) + (byte*) current_piece#18 ← phi( play_spawn_current::@5/(byte*) current_piece#35 ) (byte*) current_piece#6 ← (byte*) current_piece#18 (byte) current_piece_char#6 ← (byte) current_piece_char#18 (byte) current_orientation#9 ← (byte) current_orientation#26 @@ -2528,13 +2518,13 @@ main: scope:[main] from @6 (byte) keyboard_modifiers#59 ← phi( @6/(byte) keyboard_modifiers#24 ) (byte) keyboard_events_size#77 ← phi( @6/(byte) keyboard_events_size#28 ) (byte) level#100 ← phi( @6/(byte) level#41 ) - (byte) game_over#81 ← phi( @6/(byte) game_over#34 ) - (byte) current_ypos#94 ← phi( @6/(byte) current_ypos#49 ) - (byte) current_xpos#115 ← phi( @6/(byte) current_xpos#58 ) - (byte*) current_piece_gfx#108 ← phi( @6/(byte*) current_piece_gfx#45 ) - (byte) current_orientation#91 ← phi( @6/(byte) current_orientation#49 ) - (byte) current_piece_char#95 ← phi( @6/(byte) current_piece_char#36 ) - (byte*) current_piece#87 ← phi( @6/(byte*) current_piece#39 ) + (byte) game_over#80 ← phi( @6/(byte) game_over#34 ) + (byte) current_ypos#93 ← phi( @6/(byte) current_ypos#49 ) + (byte) current_xpos#114 ← phi( @6/(byte) current_xpos#58 ) + (byte*) current_piece_gfx#107 ← phi( @6/(byte*) current_piece_gfx#45 ) + (byte) current_orientation#90 ← phi( @6/(byte) current_orientation#49 ) + (byte) current_piece_char#94 ← phi( @6/(byte) current_piece_char#36 ) + (byte*) current_piece#86 ← phi( @6/(byte*) current_piece#39 ) (byte) next_piece_idx#74 ← phi( @6/(byte) next_piece_idx#35 ) (byte) current_movedown_slow#79 ← phi( @6/(byte) current_movedown_slow#46 ) (byte) render_screen_render#35 ← phi( @6/(byte) render_screen_render#29 ) @@ -2548,13 +2538,13 @@ main::@9: scope:[main] from main (byte) keyboard_modifiers#58 ← phi( main/(byte) keyboard_modifiers#59 ) (byte) keyboard_events_size#76 ← phi( main/(byte) keyboard_events_size#77 ) (byte) level#95 ← phi( main/(byte) level#100 ) - (byte) game_over#76 ← phi( main/(byte) game_over#81 ) - (byte) current_ypos#90 ← phi( main/(byte) current_ypos#94 ) - (byte) current_xpos#111 ← phi( main/(byte) current_xpos#115 ) - (byte*) current_piece_gfx#101 ← phi( main/(byte*) current_piece_gfx#108 ) - (byte) current_orientation#88 ← phi( main/(byte) current_orientation#91 ) - (byte) current_piece_char#89 ← phi( main/(byte) current_piece_char#95 ) - (byte*) current_piece#82 ← phi( main/(byte*) current_piece#87 ) + (byte) game_over#75 ← phi( main/(byte) game_over#80 ) + (byte) current_ypos#89 ← phi( main/(byte) current_ypos#93 ) + (byte) current_xpos#110 ← phi( main/(byte) current_xpos#114 ) + (byte*) current_piece_gfx#100 ← phi( main/(byte*) current_piece_gfx#107 ) + (byte) current_orientation#87 ← phi( main/(byte) current_orientation#90 ) + (byte) current_piece_char#88 ← phi( main/(byte) current_piece_char#94 ) + (byte*) current_piece#81 ← phi( main/(byte*) current_piece#86 ) (byte) next_piece_idx#69 ← phi( main/(byte) next_piece_idx#74 ) (byte) current_movedown_slow#74 ← phi( main/(byte) current_movedown_slow#79 ) (byte) render_screen_render#27 ← phi( main/(byte) render_screen_render#35 ) @@ -2569,13 +2559,13 @@ main::@10: scope:[main] from main::@9 (byte) keyboard_modifiers#57 ← phi( main::@9/(byte) keyboard_modifiers#58 ) (byte) keyboard_events_size#75 ← phi( main::@9/(byte) keyboard_events_size#76 ) (byte) level#88 ← phi( main::@9/(byte) level#95 ) - (byte) game_over#67 ← phi( main::@9/(byte) game_over#76 ) - (byte) current_ypos#82 ← phi( main::@9/(byte) current_ypos#90 ) - (byte) current_xpos#102 ← phi( main::@9/(byte) current_xpos#111 ) - (byte*) current_piece_gfx#94 ← phi( main::@9/(byte*) current_piece_gfx#101 ) - (byte) current_orientation#80 ← phi( main::@9/(byte) current_orientation#88 ) - (byte) current_piece_char#79 ← phi( main::@9/(byte) current_piece_char#89 ) - (byte*) current_piece#75 ← phi( main::@9/(byte*) current_piece#82 ) + (byte) game_over#67 ← phi( main::@9/(byte) game_over#75 ) + (byte) current_ypos#82 ← phi( main::@9/(byte) current_ypos#89 ) + (byte) current_xpos#102 ← phi( main::@9/(byte) current_xpos#110 ) + (byte*) current_piece_gfx#94 ← phi( main::@9/(byte*) current_piece_gfx#100 ) + (byte) current_orientation#80 ← phi( main::@9/(byte) current_orientation#87 ) + (byte) current_piece_char#79 ← phi( main::@9/(byte) current_piece_char#88 ) + (byte*) current_piece#75 ← phi( main::@9/(byte*) current_piece#81 ) (byte) next_piece_idx#62 ← phi( main::@9/(byte) next_piece_idx#69 ) (byte) current_movedown_slow#66 ← phi( main::@9/(byte) current_movedown_slow#74 ) (byte) render_screen_render#16 ← phi( main::@9/(byte) render_screen_render#2 ) @@ -2783,16 +2773,16 @@ main::@1: scope:[main] from main::@18 main::@27 main::@7 main::@2: scope:[main] from main::@1 main::@2 (byte) render_screen_render#62 ← phi( main::@1/(byte) render_screen_render#28 main::@2/(byte) render_screen_render#62 ) (byte) next_piece_idx#75 ← phi( main::@1/(byte) next_piece_idx#34 main::@2/(byte) next_piece_idx#75 ) - (byte) current_xpos#116 ← phi( main::@1/(byte) current_xpos#57 main::@2/(byte) current_xpos#116 ) - (byte*) current_piece_gfx#109 ← phi( main::@1/(byte*) current_piece_gfx#44 main::@2/(byte*) current_piece_gfx#109 ) - (byte) current_orientation#92 ← phi( main::@1/(byte) current_orientation#48 main::@2/(byte) current_orientation#92 ) - (byte) current_piece_char#96 ← phi( main::@1/(byte) current_piece_char#35 main::@2/(byte) current_piece_char#96 ) - (byte*) current_piece#88 ← phi( main::@1/(byte*) current_piece#38 main::@2/(byte*) current_piece#88 ) + (byte) current_xpos#115 ← phi( main::@1/(byte) current_xpos#57 main::@2/(byte) current_xpos#115 ) + (byte*) current_piece_gfx#108 ← phi( main::@1/(byte*) current_piece_gfx#44 main::@2/(byte*) current_piece_gfx#108 ) + (byte) current_orientation#91 ← phi( main::@1/(byte) current_orientation#48 main::@2/(byte) current_orientation#91 ) + (byte) current_piece_char#95 ← phi( main::@1/(byte) current_piece_char#35 main::@2/(byte) current_piece_char#95 ) + (byte*) current_piece#87 ← phi( main::@1/(byte*) current_piece#38 main::@2/(byte*) current_piece#87 ) (byte) level_bcd#89 ← phi( main::@1/(byte) level_bcd#40 main::@2/(byte) level_bcd#89 ) (byte) current_movedown_slow#84 ← phi( main::@1/(byte) current_movedown_slow#45 main::@2/(byte) current_movedown_slow#84 ) (byte) level#97 ← phi( main::@1/(byte) level#40 main::@2/(byte) level#97 ) (word) lines_bcd#77 ← phi( main::@1/(word) lines_bcd#31 main::@2/(word) lines_bcd#77 ) - (byte) current_ypos#95 ← phi( main::@1/(byte) current_ypos#48 main::@2/(byte) current_ypos#95 ) + (byte) current_ypos#94 ← phi( main::@1/(byte) current_ypos#48 main::@2/(byte) current_ypos#94 ) (byte) current_movedown_counter#49 ← phi( main::@1/(byte) current_movedown_counter#25 main::@2/(byte) current_movedown_counter#49 ) (byte) game_over#69 ← phi( main::@1/(byte) game_over#33 main::@2/(byte) game_over#69 ) (byte) keyboard_modifiers#35 ← phi( main::@1/(byte) keyboard_modifiers#23 main::@2/(byte) keyboard_modifiers#35 ) @@ -2804,16 +2794,16 @@ main::@2: scope:[main] from main::@1 main::@2 main::@3: scope:[main] from main::@2 (byte) render_screen_render#61 ← phi( main::@2/(byte) render_screen_render#62 ) (byte) next_piece_idx#70 ← phi( main::@2/(byte) next_piece_idx#75 ) - (byte) current_xpos#112 ← phi( main::@2/(byte) current_xpos#116 ) - (byte*) current_piece_gfx#102 ← phi( main::@2/(byte*) current_piece_gfx#109 ) - (byte) current_orientation#89 ← phi( main::@2/(byte) current_orientation#92 ) - (byte) current_piece_char#90 ← phi( main::@2/(byte) current_piece_char#96 ) - (byte*) current_piece#83 ← phi( main::@2/(byte*) current_piece#88 ) + (byte) current_xpos#111 ← phi( main::@2/(byte) current_xpos#115 ) + (byte*) current_piece_gfx#101 ← phi( main::@2/(byte*) current_piece_gfx#108 ) + (byte) current_orientation#88 ← phi( main::@2/(byte) current_orientation#91 ) + (byte) current_piece_char#89 ← phi( main::@2/(byte) current_piece_char#95 ) + (byte*) current_piece#82 ← phi( main::@2/(byte*) current_piece#87 ) (byte) level_bcd#81 ← phi( main::@2/(byte) level_bcd#89 ) (byte) current_movedown_slow#81 ← phi( main::@2/(byte) current_movedown_slow#84 ) (byte) level#90 ← phi( main::@2/(byte) level#97 ) (word) lines_bcd#71 ← phi( main::@2/(word) lines_bcd#77 ) - (byte) current_ypos#91 ← phi( main::@2/(byte) current_ypos#95 ) + (byte) current_ypos#90 ← phi( main::@2/(byte) current_ypos#94 ) (byte) current_movedown_counter#46 ← phi( main::@2/(byte) current_movedown_counter#49 ) (byte) game_over#56 ← phi( main::@2/(byte) game_over#69 ) (byte) keyboard_modifiers#31 ← phi( main::@2/(byte) keyboard_modifiers#35 ) @@ -2825,16 +2815,16 @@ main::@19: scope:[main] from main::@3 (byte) render_screen_render#59 ← phi( main::@3/(byte) render_screen_render#61 ) (byte) render_screen_show#54 ← phi( main::@3/(byte) render_screen_show#18 ) (byte) next_piece_idx#64 ← phi( main::@3/(byte) next_piece_idx#70 ) - (byte) current_xpos#103 ← phi( main::@3/(byte) current_xpos#112 ) - (byte*) current_piece_gfx#95 ← phi( main::@3/(byte*) current_piece_gfx#102 ) - (byte) current_orientation#82 ← phi( main::@3/(byte) current_orientation#89 ) - (byte) current_piece_char#81 ← phi( main::@3/(byte) current_piece_char#90 ) - (byte*) current_piece#77 ← phi( main::@3/(byte*) current_piece#83 ) + (byte) current_xpos#103 ← phi( main::@3/(byte) current_xpos#111 ) + (byte*) current_piece_gfx#95 ← phi( main::@3/(byte*) current_piece_gfx#101 ) + (byte) current_orientation#82 ← phi( main::@3/(byte) current_orientation#88 ) + (byte) current_piece_char#81 ← phi( main::@3/(byte) current_piece_char#89 ) + (byte*) current_piece#77 ← phi( main::@3/(byte*) current_piece#82 ) (byte) level_bcd#74 ← phi( main::@3/(byte) level_bcd#81 ) (byte) current_movedown_slow#76 ← phi( main::@3/(byte) current_movedown_slow#81 ) (byte) level#81 ← phi( main::@3/(byte) level#90 ) (word) lines_bcd#64 ← phi( main::@3/(word) lines_bcd#71 ) - (byte) current_ypos#83 ← phi( main::@3/(byte) current_ypos#91 ) + (byte) current_ypos#83 ← phi( main::@3/(byte) current_ypos#90 ) (byte) current_movedown_counter#42 ← phi( main::@3/(byte) current_movedown_counter#46 ) (byte) game_over#44 ← phi( main::@3/(byte) game_over#56 ) (byte) keyboard_modifiers#22 ← phi( main::@3/(byte) keyboard_modifiers#31 ) @@ -3020,14 +3010,14 @@ main::@8: scope:[main] from main::@7 (byte) current_movedown_counter#52 ← phi( main::@7/(byte) current_movedown_counter#32 ) (byte) keyboard_modifiers#53 ← phi( main::@7/(byte) keyboard_modifiers#30 ) (byte) keyboard_events_size#70 ← phi( main::@7/(byte) keyboard_events_size#34 ) - (byte) game_over#84 ← phi( main::@7/(byte) game_over#43 ) - (byte) current_orientation#94 ← phi( main::@7/(byte) current_orientation#60 ) - (byte*) current_piece#90 ← phi( main::@7/(byte*) current_piece#52 ) + (byte) game_over#83 ← phi( main::@7/(byte) game_over#43 ) + (byte) current_orientation#93 ← phi( main::@7/(byte) current_orientation#60 ) + (byte*) current_piece#89 ← phi( main::@7/(byte*) current_piece#52 ) (byte) current_movedown_slow#86 ← phi( main::@7/(byte) current_movedown_slow#57 ) - (byte) current_piece_char#97 ← phi( main::@7/(byte) current_piece_char#49 ) + (byte) current_piece_char#96 ← phi( main::@7/(byte) current_piece_char#49 ) (byte) render_screen_show#51 ← phi( main::@7/(byte) render_screen_show#29 ) (byte) next_piece_idx#71 ← phi( main::@7/(byte) next_piece_idx#44 ) - (byte*) current_piece_gfx#103 ← phi( main::@7/(byte*) current_piece_gfx#61 ) + (byte*) current_piece_gfx#102 ← phi( main::@7/(byte*) current_piece_gfx#61 ) (byte) current_xpos#105 ← phi( main::@7/(byte) current_xpos#73 ) (byte) current_ypos#63 ← phi( main::@7/(byte) current_ypos#61 ) (byte) render_screen_render#31 ← phi( main::@7/(byte) render_screen_render#38 ) @@ -3040,14 +3030,14 @@ main::@23: scope:[main] from main::@8 (byte) current_movedown_counter#50 ← phi( main::@8/(byte) current_movedown_counter#52 ) (byte) keyboard_modifiers#50 ← phi( main::@8/(byte) keyboard_modifiers#53 ) (byte) keyboard_events_size#65 ← phi( main::@8/(byte) keyboard_events_size#70 ) - (byte) game_over#82 ← phi( main::@8/(byte) game_over#84 ) - (byte) current_orientation#93 ← phi( main::@8/(byte) current_orientation#94 ) - (byte*) current_piece#89 ← phi( main::@8/(byte*) current_piece#90 ) + (byte) game_over#81 ← phi( main::@8/(byte) game_over#83 ) + (byte) current_orientation#92 ← phi( main::@8/(byte) current_orientation#93 ) + (byte*) current_piece#88 ← phi( main::@8/(byte*) current_piece#89 ) (byte) current_movedown_slow#85 ← phi( main::@8/(byte) current_movedown_slow#86 ) - (byte) current_piece_char#84 ← phi( main::@8/(byte) current_piece_char#97 ) + (byte) current_piece_char#84 ← phi( main::@8/(byte) current_piece_char#96 ) (byte) render_screen_show#47 ← phi( main::@8/(byte) render_screen_show#51 ) (byte) next_piece_idx#66 ← phi( main::@8/(byte) next_piece_idx#71 ) - (byte*) current_piece_gfx#82 ← phi( main::@8/(byte*) current_piece_gfx#103 ) + (byte*) current_piece_gfx#82 ← phi( main::@8/(byte*) current_piece_gfx#102 ) (byte) current_xpos#77 ← phi( main::@8/(byte) current_xpos#105 ) (byte) render_screen_render#39 ← phi( main::@8/(byte) render_screen_render#31 ) (byte) current_ypos#31 ← phi( main::@8/(byte) current_ypos#63 ) @@ -3060,13 +3050,13 @@ main::@24: scope:[main] from main::@23 (byte) current_movedown_counter#47 ← phi( main::@23/(byte) current_movedown_counter#50 ) (byte) keyboard_modifiers#47 ← phi( main::@23/(byte) keyboard_modifiers#50 ) (byte) keyboard_events_size#59 ← phi( main::@23/(byte) keyboard_events_size#65 ) - (byte) game_over#77 ← phi( main::@23/(byte) game_over#82 ) - (byte) current_ypos#92 ← phi( main::@23/(byte) current_ypos#31 ) - (byte) current_xpos#113 ← phi( main::@23/(byte) current_xpos#77 ) - (byte*) current_piece_gfx#104 ← phi( main::@23/(byte*) current_piece_gfx#82 ) - (byte) current_orientation#90 ← phi( main::@23/(byte) current_orientation#93 ) - (byte) current_piece_char#91 ← phi( main::@23/(byte) current_piece_char#84 ) - (byte*) current_piece#84 ← phi( main::@23/(byte*) current_piece#89 ) + (byte) game_over#76 ← phi( main::@23/(byte) game_over#81 ) + (byte) current_ypos#91 ← phi( main::@23/(byte) current_ypos#31 ) + (byte) current_xpos#112 ← phi( main::@23/(byte) current_xpos#77 ) + (byte*) current_piece_gfx#103 ← phi( main::@23/(byte*) current_piece_gfx#82 ) + (byte) current_orientation#89 ← phi( main::@23/(byte) current_orientation#92 ) + (byte) current_piece_char#90 ← phi( main::@23/(byte) current_piece_char#84 ) + (byte*) current_piece#83 ← phi( main::@23/(byte*) current_piece#88 ) (byte) current_movedown_slow#82 ← phi( main::@23/(byte) current_movedown_slow#85 ) (byte) render_screen_show#39 ← phi( main::@23/(byte) render_screen_show#47 ) (byte) next_piece_idx#47 ← phi( main::@23/(byte) next_piece_idx#66 ) @@ -3081,13 +3071,13 @@ main::@25: scope:[main] from main::@24 (byte) keyboard_modifiers#44 ← phi( main::@24/(byte) keyboard_modifiers#47 ) (byte) keyboard_events_size#52 ← phi( main::@24/(byte) keyboard_events_size#59 ) (byte) next_piece_idx#67 ← phi( main::@24/(byte) next_piece_idx#47 ) - (byte) game_over#71 ← phi( main::@24/(byte) game_over#77 ) - (byte) current_ypos#85 ← phi( main::@24/(byte) current_ypos#92 ) - (byte) current_xpos#106 ← phi( main::@24/(byte) current_xpos#113 ) - (byte*) current_piece_gfx#97 ← phi( main::@24/(byte*) current_piece_gfx#104 ) - (byte) current_orientation#84 ← phi( main::@24/(byte) current_orientation#90 ) - (byte) current_piece_char#83 ← phi( main::@24/(byte) current_piece_char#91 ) - (byte*) current_piece#79 ← phi( main::@24/(byte*) current_piece#84 ) + (byte) game_over#71 ← phi( main::@24/(byte) game_over#76 ) + (byte) current_ypos#85 ← phi( main::@24/(byte) current_ypos#91 ) + (byte) current_xpos#106 ← phi( main::@24/(byte) current_xpos#112 ) + (byte*) current_piece_gfx#97 ← phi( main::@24/(byte*) current_piece_gfx#103 ) + (byte) current_orientation#84 ← phi( main::@24/(byte) current_orientation#89 ) + (byte) current_piece_char#83 ← phi( main::@24/(byte) current_piece_char#90 ) + (byte*) current_piece#79 ← phi( main::@24/(byte*) current_piece#83 ) (byte) current_movedown_slow#78 ← phi( main::@24/(byte) current_movedown_slow#82 ) (byte) render_screen_show#31 ← phi( main::@24/(byte) render_screen_show#39 ) (byte) render_screen_render#21 ← phi( main::@24/(byte) render_screen_render#26 ) @@ -3299,11 +3289,37 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS[] = { (byte) $30, (byte) $2b, (byte) $26, (byte) $21, (byte) $1c, (byte) $17, (byte) $12, (byte) $d, (byte) 8, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 1 } (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const nomodify byte) ORANGE = (byte) 8 (const word*) PIECES[] = { (word)(const byte*) PIECE_T, (word)(const byte*) PIECE_S, (word)(const byte*) PIECE_Z, (word)(const byte*) PIECE_J, (word)(const byte*) PIECE_O, (word)(const byte*) PIECE_I, (word)(const byte*) PIECE_L } (const byte*) PIECES_CHARS[] = { (byte) $65, (byte) $66, (byte) $a6, (byte) $66, (byte) $65, (byte) $65, (byte) $a6 } @@ -3347,10 +3363,8 @@ SYMBOL TABLE SSA (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte) RED = (byte) 2 (const to_nomodify dword*) SCORE_BASE_BCD[] = { (dword) 0, (dword) $40, (dword) $100, (dword) $300, (dword) $1200 } +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*)(number) $d400 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*)(number) $d412 -(const nomodify word*) SID_VOICE3_FREQ = (word*)(number) $d40e -(const nomodify byte*) SID_VOICE3_OSC = (byte*)(number) $d41b (const byte) SIZEOF_DWORD = (byte) 4 (const byte) SIZEOF_POINTER = (byte) 2 (const byte) SIZEOF_WORD = (byte) 2 @@ -3610,7 +3624,6 @@ SYMBOL TABLE SSA (byte) current_orientation#91 (byte) current_orientation#92 (byte) current_orientation#93 -(byte) current_orientation#94 (byte*) current_piece (byte*) current_piece#0 (byte*) current_piece#1 @@ -3702,7 +3715,6 @@ SYMBOL TABLE SSA (byte*) current_piece#88 (byte*) current_piece#89 (byte*) current_piece#9 -(byte*) current_piece#90 (byte) current_piece_char (byte) current_piece_char#0 (byte) current_piece_char#1 @@ -3802,7 +3814,6 @@ SYMBOL TABLE SSA (byte) current_piece_char#95 (byte) current_piece_char#96 (byte) current_piece_char#97 -(byte) current_piece_char#98 (byte*) current_piece_gfx (byte*) current_piece_gfx#0 (byte*) current_piece_gfx#1 @@ -3818,7 +3829,6 @@ SYMBOL TABLE SSA (byte*) current_piece_gfx#108 (byte*) current_piece_gfx#109 (byte*) current_piece_gfx#11 -(byte*) current_piece_gfx#110 (byte*) current_piece_gfx#12 (byte*) current_piece_gfx#13 (byte*) current_piece_gfx#14 @@ -3937,7 +3947,6 @@ SYMBOL TABLE SSA (byte) current_xpos#114 (byte) current_xpos#115 (byte) current_xpos#116 -(byte) current_xpos#117 (byte) current_xpos#12 (byte) current_xpos#13 (byte) current_xpos#14 @@ -4131,7 +4140,6 @@ SYMBOL TABLE SSA (byte) current_ypos#93 (byte) current_ypos#94 (byte) current_ypos#95 -(byte) current_ypos#96 (byte) game_over (byte) game_over#0 (byte) game_over#1 @@ -4216,7 +4224,6 @@ SYMBOL TABLE SSA (byte) game_over#81 (byte) game_over#82 (byte) game_over#83 -(byte) game_over#84 (byte) game_over#9 (volatile byte) irq_cnt loadstore (volatile byte) irq_raster_next loadstore @@ -5456,6 +5463,7 @@ SYMBOL TABLE SSA (label) play_spawn_current::@4 (label) play_spawn_current::@5 (label) play_spawn_current::@6 +(label) play_spawn_current::@7 (label) play_spawn_current::@return (byte) play_spawn_current::current_piece_idx (byte) play_spawn_current::current_piece_idx#0 @@ -5464,13 +5472,6 @@ SYMBOL TABLE SSA (byte) play_spawn_current::piece_idx#1 (byte) play_spawn_current::piece_idx#2 (byte) play_spawn_current::piece_idx#3 -(label) play_spawn_current::sid_rnd1 -(label) play_spawn_current::sid_rnd1_@return -(byte) play_spawn_current::sid_rnd1_return -(byte) play_spawn_current::sid_rnd1_return#0 -(byte) play_spawn_current::sid_rnd1_return#1 -(byte) play_spawn_current::sid_rnd1_return#2 -(byte) play_spawn_current::sid_rnd1_return#3 (void()) play_update_score((byte) play_update_score::removed) (bool~) play_update_score::$0 (bool~) play_update_score::$1 @@ -6038,6 +6039,14 @@ SYMBOL TABLE SSA (volatile dword) score_bcd loadstore (const byte**) screen_lines_1[(const nomodify byte) PLAYFIELD_LINES] = { fill( PLAYFIELD_LINES, 0) } (const byte**) screen_lines_2[(const nomodify byte) PLAYFIELD_LINES] = { fill( PLAYFIELD_LINES, 0) } +(byte()) sid_rnd() +(label) sid_rnd::@return +(byte) sid_rnd::return +(byte) sid_rnd::return#0 +(byte) sid_rnd::return#1 +(byte) sid_rnd::return#2 +(byte) sid_rnd::return#3 +(byte) sid_rnd::return#4 (void()) sid_rnd_init() (label) sid_rnd_init::@return (void()) sprites_init() @@ -6115,6 +6124,7 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() Adding number conversion cast (unumber) $13 in Adding number conversion cast (unumber) 1 in +Adding number conversion cast (unumber) $ffff in *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (number) $ffff Adding number conversion cast (unumber) 8 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (number) 8 Adding number conversion cast (unumber) keyboard_event_scan::$14 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (unumber)(number) 8 Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (number) 0 @@ -6132,7 +6142,6 @@ Adding number conversion cast (unumber) 7 in (number~) keyboard_event_pressed::$ Adding number conversion cast (unumber) keyboard_event_pressed::$1 in (number~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (unumber)(number) 7 Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_get::$0 ← (byte) keyboard_events_size#14 == (number) 0 Adding number conversion cast (unumber) $ff in (byte) keyboard_event_get::return#0 ← (number) $ff -Adding number conversion cast (unumber) $ffff in *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff Adding number conversion cast (unumber) 3 in *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (number) 3 Adding number conversion cast (unumber) $40 in (number~) render_init::vicSelectGfxBank1_toDd001_$1 ← (byte~) render_init::vicSelectGfxBank1_toDd001_$0 / (number) $40 Adding number conversion cast (unumber) render_init::vicSelectGfxBank1_toDd001_$1 in (number~) render_init::vicSelectGfxBank1_toDd001_$1 ← (byte~) render_init::vicSelectGfxBank1_toDd001_$0 / (unumber)(number) $40 @@ -6310,9 +6319,9 @@ Adding number conversion cast (unumber) $ff in (bool~) main::$10 ← *((const no Adding number conversion cast (unumber) 0 in (bool~) main::$14 ← (byte) game_over#19 == (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$17 ← (byte) main::render#2 != (number) 0 Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (unumber)(number) $ffff Inlining cast (byte) keyboard_modifiers#1 ← (unumber)(number) 0 Inlining cast (byte) keyboard_event_get::return#0 ← (unumber)(number) $ff -Inlining cast *((const nomodify word*) SID_VOICE3_FREQ) ← (unumber)(number) $ffff Inlining cast *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (unumber)(number) 3 Inlining cast *((const nomodify byte*) D011) ← (unumber)(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(unumber)(number) 3 Inlining cast (byte) render_screen_show#1 ← (unumber)(number) 0 @@ -6368,16 +6377,15 @@ Simplifying constant pointer cast (byte*) 55296 Simplifying constant pointer cast (struct MOS6526_CIA*) 56320 Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 56333 +Simplifying constant pointer cast (struct MOS6581_SID*) 54272 Simplifying constant pointer cast (void()**) 65534 -Simplifying constant pointer cast (word*) 54286 -Simplifying constant pointer cast (byte*) 54290 -Simplifying constant pointer cast (byte*) 54299 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 11264 Simplifying constant pointer cast (byte*) 12288 Simplifying constant pointer cast (byte*) 10240 Simplifying constant integer cast $13 Simplifying constant integer cast 1 +Simplifying constant integer cast $ffff Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 8 @@ -6392,7 +6400,6 @@ Simplifying constant integer cast 3 Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant integer cast $ff -Simplifying constant integer cast $ffff Simplifying constant integer cast 3 Simplifying constant integer cast $40 Simplifying constant integer cast 3 @@ -6532,6 +6539,7 @@ Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $13 Finalized unsigned number type (byte) 1 +Finalized unsigned number type (word) $ffff Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 @@ -6546,7 +6554,6 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (word) $ffff Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 3 @@ -6722,41 +6729,42 @@ Inferred type updated to byte in (unumber~) play_spawn_current::$6 ← (byte~) p Inferred type updated to byte in (unumber~) play_update_score::$3 ← (byte~) play_update_score::$2 & (byte) $f0 Inferred type updated to byte in (unumber~) play_update_score::$5 ← (byte~) play_update_score::$4 & (byte) $f0 Inferred type updated to byte in (unumber~) play_increase_level::$1 ← (byte) level_bcd#7 & (byte) $f -Inversing boolean not [35] (bool~) keyboard_event_scan::$18 ← (byte~) keyboard_event_scan::$16 == (byte) 0 from [34] (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (byte) 0 -Inversing boolean not [44] (bool~) keyboard_event_scan::$20 ← (byte) keyboard_events_size#10 == (byte) 8 from [43] (bool~) keyboard_event_scan::$19 ← (byte) keyboard_events_size#10 != (byte) 8 -Inversing boolean not [68] (bool~) keyboard_event_scan::$2 ← (byte~) keyboard_event_scan::$0 == (byte) 0 from [67] (bool~) keyboard_event_scan::$1 ← (byte~) keyboard_event_scan::$0 != (byte) 0 -Inversing boolean not [77] (bool~) keyboard_event_scan::$5 ← (byte~) keyboard_event_scan::$3 == (byte) 0 from [76] (bool~) keyboard_event_scan::$4 ← (byte~) keyboard_event_scan::$3 != (byte) 0 -Inversing boolean not [89] (bool~) keyboard_event_scan::$8 ← (byte~) keyboard_event_scan::$6 == (byte) 0 from [88] (bool~) keyboard_event_scan::$7 ← (byte~) keyboard_event_scan::$6 != (byte) 0 -Inversing boolean not [101] (bool~) keyboard_event_scan::$11 ← (byte~) keyboard_event_scan::$9 == (byte) 0 from [100] (bool~) keyboard_event_scan::$10 ← (byte~) keyboard_event_scan::$9 != (byte) 0 -Inversing boolean not [301] (bool~) render_bcd::$2 ← (byte) render_bcd::only_low#6 != (byte) 0 from [300] (bool~) render_bcd::$1 ← (byte) render_bcd::only_low#6 == (byte) 0 -Inversing boolean not [396] (bool~) render_moving::$3 ← (byte) render_moving::current_cell#0 == (byte) 0 from [395] (bool~) render_moving::$2 ← (byte) render_moving::current_cell#0 != (byte) 0 -Inversing boolean not [597] (bool~) play_movement::$2 ← (byte) game_over#1 == (byte) 0 from [596] (bool~) play_movement::$1 ← (byte) game_over#1 != (byte) 0 -Inversing boolean not [638] (bool~) play_move_down::$1 ← (byte) play_move_down::key_event#1 != (const nomodify byte) KEY_SPACE from [637] (bool~) play_move_down::$0 ← (byte) play_move_down::key_event#1 == (const nomodify byte) KEY_SPACE -Inversing boolean not [647] (bool~) play_move_down::$4 ← (byte~) play_move_down::$2 == (byte) 0 from [646] (bool~) play_move_down::$3 ← (byte~) play_move_down::$2 != (byte) 0 -Inversing boolean not [653] (bool~) play_move_down::$6 ← (byte) current_movedown_counter#12 < (byte) current_movedown_slow#19 from [652] (bool~) play_move_down::$5 ← (byte) current_movedown_counter#12 >= (byte) current_movedown_slow#19 -Inversing boolean not [657] (bool~) play_move_down::$10 ← (byte) current_movedown_counter#13 < (const nomodify byte) current_movedown_fast from [656] (bool~) play_move_down::$9 ← (byte) current_movedown_counter#13 >= (const nomodify byte) current_movedown_fast -Inversing boolean not [663] (bool~) play_move_down::$8 ← (byte) play_move_down::movedown#6 == (byte) 0 from [662] (bool~) play_move_down::$7 ← (byte) play_move_down::movedown#6 != (byte) 0 -Inversing boolean not [739] (bool~) play_move_leftright::$10 ← (byte~) play_move_leftright::$8 != (const nomodify byte) COLLISION_NONE from [738] (bool~) play_move_leftright::$9 ← (byte~) play_move_leftright::$8 == (const nomodify byte) COLLISION_NONE -Inversing boolean not [743] (bool~) play_move_leftright::$2 ← (byte) play_move_leftright::key_event#2 != (const nomodify byte) KEY_DOT from [742] (bool~) play_move_leftright::$1 ← (byte) play_move_leftright::key_event#2 == (const nomodify byte) KEY_DOT -Inversing boolean not [755] (bool~) play_move_leftright::$6 ← (byte~) play_move_leftright::$4 != (const nomodify byte) COLLISION_NONE from [754] (bool~) play_move_leftright::$5 ← (byte~) play_move_leftright::$4 == (const nomodify byte) COLLISION_NONE -Inversing boolean not [800] (bool~) play_move_rotate::$4 ← (byte~) play_move_rotate::$2 != (const nomodify byte) COLLISION_NONE from [799] (bool~) play_move_rotate::$3 ← (byte~) play_move_rotate::$2 == (const nomodify byte) COLLISION_NONE -Inversing boolean not [823] (bool~) play_collision::$2 ← *((byte*) play_collision::piece_gfx#1 + (byte) play_collision::i#2) == (byte) 0 from [821] (bool~) play_collision::$1 ← *((byte*) play_collision::piece_gfx#1 + (byte) play_collision::i#2) != (byte) 0 -Inversing boolean not [832] (bool~) play_collision::$4 ← (byte) play_collision::yp#3 < (const nomodify byte) PLAYFIELD_LINES from [831] (bool~) play_collision::$3 ← (byte) play_collision::yp#3 >= (const nomodify byte) PLAYFIELD_LINES -Inversing boolean not [837] (bool~) play_collision::$7 ← (byte~) play_collision::$5 == (byte) 0 from [836] (bool~) play_collision::$6 ← (byte~) play_collision::$5 != (byte) 0 -Inversing boolean not [845] (bool~) play_collision::$9 ← (byte) play_collision::xp#4 < (const nomodify byte) PLAYFIELD_COLS from [844] (bool~) play_collision::$8 ← (byte) play_collision::xp#4 >= (const nomodify byte) PLAYFIELD_COLS -Inversing boolean not [850] (bool~) play_collision::$11 ← *((byte*) play_collision::playfield_line#1 + (byte) play_collision::xp#5) == (byte) 0 from [849] (bool~) play_collision::$10 ← *((byte*) play_collision::playfield_line#1 + (byte) play_collision::xp#5) != (byte) 0 -Inversing boolean not [872] (bool~) play_lock_current::$1 ← *((byte*) current_piece_gfx#22 + (byte) play_lock_current::i#2) == (byte) 0 from [870] (bool~) play_lock_current::$0 ← *((byte*) current_piece_gfx#22 + (byte) play_lock_current::i#2) != (byte) 0 -Inversing boolean not [905] (bool~) play_spawn_current::$3 ← (byte~) play_spawn_current::$1 != (const nomodify byte) COLLISION_PLAYFIELD from [904] (bool~) play_spawn_current::$2 ← (byte~) play_spawn_current::$1 == (const nomodify byte) COLLISION_PLAYFIELD -Inversing boolean not [945] (bool~) play_remove_lines::$1 ← (byte) play_remove_lines::c#0 != (byte) 0 from [944] (bool~) play_remove_lines::$0 ← (byte) play_remove_lines::c#0 == (byte) 0 -Inversing boolean not [957] (bool~) play_remove_lines::$4 ← (byte) play_remove_lines::full#2 != (byte) 1 from [956] (bool~) play_remove_lines::$3 ← (byte) play_remove_lines::full#2 == (byte) 1 -Inversing boolean not [980] (bool~) play_update_score::$1 ← (byte) play_update_score::removed#1 == (byte) 0 from [979] (bool~) play_update_score::$0 ← (byte) play_update_score::removed#1 != (byte) 0 -Inversing boolean not [996] (bool~) play_update_score::$7 ← (byte) play_update_score::lines_before#0 == (byte) play_update_score::lines_after#0 from [995] (bool~) play_update_score::$6 ← (byte) play_update_score::lines_before#0 != (byte) play_update_score::lines_after#0 -Inversing boolean not [1022] (bool~) play_increase_level::$3 ← (byte~) play_increase_level::$1 != (byte) $a from [1021] (bool~) play_increase_level::$2 ← (byte~) play_increase_level::$1 == (byte) $a -Inversing boolean not [1130] (bool~) main::$18 ← (byte) main::render#2 == (byte) 0 from [1129] (bool~) main::$17 ← (byte) main::render#2 != (byte) 0 +Inversing boolean not [42] (bool~) keyboard_event_scan::$18 ← (byte~) keyboard_event_scan::$16 == (byte) 0 from [41] (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (byte) 0 +Inversing boolean not [51] (bool~) keyboard_event_scan::$20 ← (byte) keyboard_events_size#10 == (byte) 8 from [50] (bool~) keyboard_event_scan::$19 ← (byte) keyboard_events_size#10 != (byte) 8 +Inversing boolean not [75] (bool~) keyboard_event_scan::$2 ← (byte~) keyboard_event_scan::$0 == (byte) 0 from [74] (bool~) keyboard_event_scan::$1 ← (byte~) keyboard_event_scan::$0 != (byte) 0 +Inversing boolean not [84] (bool~) keyboard_event_scan::$5 ← (byte~) keyboard_event_scan::$3 == (byte) 0 from [83] (bool~) keyboard_event_scan::$4 ← (byte~) keyboard_event_scan::$3 != (byte) 0 +Inversing boolean not [96] (bool~) keyboard_event_scan::$8 ← (byte~) keyboard_event_scan::$6 == (byte) 0 from [95] (bool~) keyboard_event_scan::$7 ← (byte~) keyboard_event_scan::$6 != (byte) 0 +Inversing boolean not [108] (bool~) keyboard_event_scan::$11 ← (byte~) keyboard_event_scan::$9 == (byte) 0 from [107] (bool~) keyboard_event_scan::$10 ← (byte~) keyboard_event_scan::$9 != (byte) 0 +Inversing boolean not [305] (bool~) render_bcd::$2 ← (byte) render_bcd::only_low#6 != (byte) 0 from [304] (bool~) render_bcd::$1 ← (byte) render_bcd::only_low#6 == (byte) 0 +Inversing boolean not [400] (bool~) render_moving::$3 ← (byte) render_moving::current_cell#0 == (byte) 0 from [399] (bool~) render_moving::$2 ← (byte) render_moving::current_cell#0 != (byte) 0 +Inversing boolean not [601] (bool~) play_movement::$2 ← (byte) game_over#1 == (byte) 0 from [600] (bool~) play_movement::$1 ← (byte) game_over#1 != (byte) 0 +Inversing boolean not [642] (bool~) play_move_down::$1 ← (byte) play_move_down::key_event#1 != (const nomodify byte) KEY_SPACE from [641] (bool~) play_move_down::$0 ← (byte) play_move_down::key_event#1 == (const nomodify byte) KEY_SPACE +Inversing boolean not [651] (bool~) play_move_down::$4 ← (byte~) play_move_down::$2 == (byte) 0 from [650] (bool~) play_move_down::$3 ← (byte~) play_move_down::$2 != (byte) 0 +Inversing boolean not [657] (bool~) play_move_down::$6 ← (byte) current_movedown_counter#12 < (byte) current_movedown_slow#19 from [656] (bool~) play_move_down::$5 ← (byte) current_movedown_counter#12 >= (byte) current_movedown_slow#19 +Inversing boolean not [661] (bool~) play_move_down::$10 ← (byte) current_movedown_counter#13 < (const nomodify byte) current_movedown_fast from [660] (bool~) play_move_down::$9 ← (byte) current_movedown_counter#13 >= (const nomodify byte) current_movedown_fast +Inversing boolean not [667] (bool~) play_move_down::$8 ← (byte) play_move_down::movedown#6 == (byte) 0 from [666] (bool~) play_move_down::$7 ← (byte) play_move_down::movedown#6 != (byte) 0 +Inversing boolean not [743] (bool~) play_move_leftright::$10 ← (byte~) play_move_leftright::$8 != (const nomodify byte) COLLISION_NONE from [742] (bool~) play_move_leftright::$9 ← (byte~) play_move_leftright::$8 == (const nomodify byte) COLLISION_NONE +Inversing boolean not [747] (bool~) play_move_leftright::$2 ← (byte) play_move_leftright::key_event#2 != (const nomodify byte) KEY_DOT from [746] (bool~) play_move_leftright::$1 ← (byte) play_move_leftright::key_event#2 == (const nomodify byte) KEY_DOT +Inversing boolean not [759] (bool~) play_move_leftright::$6 ← (byte~) play_move_leftright::$4 != (const nomodify byte) COLLISION_NONE from [758] (bool~) play_move_leftright::$5 ← (byte~) play_move_leftright::$4 == (const nomodify byte) COLLISION_NONE +Inversing boolean not [804] (bool~) play_move_rotate::$4 ← (byte~) play_move_rotate::$2 != (const nomodify byte) COLLISION_NONE from [803] (bool~) play_move_rotate::$3 ← (byte~) play_move_rotate::$2 == (const nomodify byte) COLLISION_NONE +Inversing boolean not [827] (bool~) play_collision::$2 ← *((byte*) play_collision::piece_gfx#1 + (byte) play_collision::i#2) == (byte) 0 from [825] (bool~) play_collision::$1 ← *((byte*) play_collision::piece_gfx#1 + (byte) play_collision::i#2) != (byte) 0 +Inversing boolean not [836] (bool~) play_collision::$4 ← (byte) play_collision::yp#3 < (const nomodify byte) PLAYFIELD_LINES from [835] (bool~) play_collision::$3 ← (byte) play_collision::yp#3 >= (const nomodify byte) PLAYFIELD_LINES +Inversing boolean not [841] (bool~) play_collision::$7 ← (byte~) play_collision::$5 == (byte) 0 from [840] (bool~) play_collision::$6 ← (byte~) play_collision::$5 != (byte) 0 +Inversing boolean not [849] (bool~) play_collision::$9 ← (byte) play_collision::xp#4 < (const nomodify byte) PLAYFIELD_COLS from [848] (bool~) play_collision::$8 ← (byte) play_collision::xp#4 >= (const nomodify byte) PLAYFIELD_COLS +Inversing boolean not [854] (bool~) play_collision::$11 ← *((byte*) play_collision::playfield_line#1 + (byte) play_collision::xp#5) == (byte) 0 from [853] (bool~) play_collision::$10 ← *((byte*) play_collision::playfield_line#1 + (byte) play_collision::xp#5) != (byte) 0 +Inversing boolean not [876] (bool~) play_lock_current::$1 ← *((byte*) current_piece_gfx#22 + (byte) play_lock_current::i#2) == (byte) 0 from [874] (bool~) play_lock_current::$0 ← *((byte*) current_piece_gfx#22 + (byte) play_lock_current::i#2) != (byte) 0 +Inversing boolean not [909] (bool~) play_spawn_current::$3 ← (byte~) play_spawn_current::$1 != (const nomodify byte) COLLISION_PLAYFIELD from [908] (bool~) play_spawn_current::$2 ← (byte~) play_spawn_current::$1 == (const nomodify byte) COLLISION_PLAYFIELD +Inversing boolean not [948] (bool~) play_remove_lines::$1 ← (byte) play_remove_lines::c#0 != (byte) 0 from [947] (bool~) play_remove_lines::$0 ← (byte) play_remove_lines::c#0 == (byte) 0 +Inversing boolean not [960] (bool~) play_remove_lines::$4 ← (byte) play_remove_lines::full#2 != (byte) 1 from [959] (bool~) play_remove_lines::$3 ← (byte) play_remove_lines::full#2 == (byte) 1 +Inversing boolean not [983] (bool~) play_update_score::$1 ← (byte) play_update_score::removed#1 == (byte) 0 from [982] (bool~) play_update_score::$0 ← (byte) play_update_score::removed#1 != (byte) 0 +Inversing boolean not [999] (bool~) play_update_score::$7 ← (byte) play_update_score::lines_before#0 == (byte) play_update_score::lines_after#0 from [998] (bool~) play_update_score::$6 ← (byte) play_update_score::lines_before#0 != (byte) play_update_score::lines_after#0 +Inversing boolean not [1025] (bool~) play_increase_level::$3 ← (byte~) play_increase_level::$1 != (byte) $a from [1024] (bool~) play_increase_level::$2 ← (byte~) play_increase_level::$1 == (byte) $a +Inversing boolean not [1133] (bool~) main::$18 ← (byte) main::render#2 == (byte) 0 from [1132] (bool~) main::$17 ← (byte) main::render#2 != (byte) 0 Successful SSA optimization Pass2UnaryNotSimplification Alias candidate removed (volatile)render_screen_show#11 = render_screen_showing Alias candidate removed (volatile)sprites_irq::toSpritePtr1_return#0 = irq_sprite_ptr $1 sprites_irq::toSpritePtr1_return#2 sprites_irq::toSpritePtr1_return#1 sprites_irq::toSpritePtr1_return#3 sprites_irq::$5 Alias candidate removed (volatile)sprites_irq::raster_sprite_gfx_modify = sprites_irq::$0 +Alias sid_rnd::return#0 = sid_rnd::return#3 sid_rnd::return#1 Alias keyboard_matrix_read::return#0 = keyboard_matrix_read::row_pressed_bits#0 keyboard_matrix_read::$0 keyboard_matrix_read::return#3 keyboard_matrix_read::return#1 Alias keyboard_matrix_read::return#2 = keyboard_matrix_read::return#4 Alias keyboard_event_scan::row#2 = keyboard_event_scan::row#3 keyboard_event_scan::row#9 keyboard_event_scan::row#7 @@ -6863,11 +6871,11 @@ Alias render_next::next_piece_gfx#4 = render_next::next_piece_gfx#5 Alias render_next::next_piece_char#4 = render_next::next_piece_char#5 Alias render_screen_show#0 = render_screen_show#55 render_screen_show#52 render_screen_show#48 render_screen_show#42 render_screen_show#35 render_screen_show#32 render_screen_show#24 Alias render_screen_render#0 = render_screen_render#60 render_screen_render#57 render_screen_render#54 render_screen_render#49 render_screen_render#43 render_screen_render#40 render_screen_render#29 -Alias current_piece_char#0 = current_piece_char#98 current_piece_char#92 current_piece_char#86 current_piece_char#70 current_piece_char#53 current_piece_char#51 current_piece_char#36 -Alias current_piece_gfx#0 = current_piece_gfx#110 current_piece_gfx#105 current_piece_gfx#98 current_piece_gfx#84 current_piece_gfx#66 current_piece_gfx#63 current_piece_gfx#45 -Alias current_xpos#0 = current_xpos#117 current_xpos#114 current_xpos#107 current_xpos#97 current_xpos#80 current_xpos#75 current_xpos#58 -Alias current_ypos#0 = current_ypos#96 current_ypos#93 current_ypos#86 current_ypos#77 current_ypos#65 current_ypos#64 current_ypos#49 -Alias game_over#0 = game_over#83 game_over#78 game_over#72 game_over#59 game_over#46 game_over#45 game_over#34 +Alias current_piece_char#0 = current_piece_char#97 current_piece_char#91 current_piece_char#86 current_piece_char#70 current_piece_char#53 current_piece_char#51 current_piece_char#36 +Alias current_piece_gfx#0 = current_piece_gfx#109 current_piece_gfx#104 current_piece_gfx#98 current_piece_gfx#84 current_piece_gfx#66 current_piece_gfx#63 current_piece_gfx#45 +Alias current_xpos#0 = current_xpos#116 current_xpos#113 current_xpos#107 current_xpos#97 current_xpos#80 current_xpos#75 current_xpos#58 +Alias current_ypos#0 = current_ypos#95 current_ypos#92 current_ypos#86 current_ypos#77 current_ypos#65 current_ypos#64 current_ypos#49 +Alias game_over#0 = game_over#82 game_over#77 game_over#72 game_over#59 game_over#46 game_over#45 game_over#34 Alias lines_bcd#0 = lines_bcd#79 lines_bcd#73 lines_bcd#68 lines_bcd#58 lines_bcd#46 lines_bcd#44 lines_bcd#32 Alias level#0 = level#99 level#92 level#85 level#72 level#58 level#55 level#41 Alias level_bcd#0 = level_bcd#92 level_bcd#85 level_bcd#78 level_bcd#68 level_bcd#56 level_bcd#54 level_bcd#41 @@ -6941,10 +6949,10 @@ Alias current_orientation#85 = current_orientation#86 Alias lines_bcd#74 = lines_bcd#75 Alias level#93 = level#94 Alias level_bcd#86 = level_bcd#87 -Alias current_piece#85 = current_piece#86 -Alias current_piece_char#93 = current_piece_char#94 -Alias current_piece_gfx#106 = current_piece_gfx#107 -Alias game_over#79 = game_over#80 +Alias current_piece#84 = current_piece#85 +Alias current_piece_char#92 = current_piece_char#93 +Alias current_piece_gfx#105 = current_piece_gfx#106 +Alias game_over#78 = game_over#79 Alias next_piece_idx#72 = next_piece_idx#73 Alias play_move_down::movedown#7 = play_move_down::movedown#9 Alias current_ypos#51 = current_ypos#52 @@ -7071,14 +7079,14 @@ Alias current_orientation#77 = current_orientation#78 current_orientation#8 Alias current_xpos#100 = current_xpos#9 current_xpos#99 Alias current_ypos#6 = current_ypos#80 current_ypos#79 Alias game_over#65 = game_over#74 -Alias current_piece#18 = current_piece#81 current_piece#48 current_piece#74 current_piece#62 current_piece#35 current_piece#6 -Alias current_piece_char#18 = current_piece_char#88 current_piece_char#45 current_piece_char#78 current_piece_char#62 current_piece_char#32 current_piece_char#6 -Alias current_orientation#26 = current_orientation#87 current_orientation#56 current_orientation#79 current_orientation#69 current_orientation#45 current_orientation#9 -Alias current_piece_gfx#100 = current_piece_gfx#57 current_piece_gfx#93 current_piece_gfx#75 current_piece_gfx#41 current_piece_gfx#23 current_piece_gfx#9 -Alias current_xpos#10 = current_xpos#110 current_xpos#69 current_xpos#101 current_xpos#89 current_xpos#54 current_xpos#30 -Alias current_ypos#24 = current_ypos#89 current_ypos#57 current_ypos#81 current_ypos#71 current_ypos#45 current_ypos#7 -Alias game_over#16 = game_over#75 game_over#39 game_over#66 game_over#53 game_over#29 game_over#6 -Alias play_spawn_current::sid_rnd1_return#0 = play_spawn_current::sid_rnd1_return#2 play_spawn_current::sid_rnd1_return#1 play_spawn_current::sid_rnd1_return#3 play_spawn_current::$5 +Alias current_piece#18 = current_piece#74 current_piece#48 current_piece#62 current_piece#35 current_piece#6 +Alias current_piece_char#18 = current_piece_char#78 current_piece_char#45 current_piece_char#62 current_piece_char#32 current_piece_char#6 +Alias current_orientation#26 = current_orientation#79 current_orientation#56 current_orientation#69 current_orientation#45 current_orientation#9 +Alias current_piece_gfx#23 = current_piece_gfx#93 current_piece_gfx#57 current_piece_gfx#75 current_piece_gfx#41 current_piece_gfx#9 +Alias current_xpos#10 = current_xpos#101 current_xpos#69 current_xpos#89 current_xpos#54 current_xpos#30 +Alias current_ypos#24 = current_ypos#81 current_ypos#57 current_ypos#71 current_ypos#45 current_ypos#7 +Alias game_over#16 = game_over#66 game_over#39 game_over#53 game_over#29 game_over#6 +Alias sid_rnd::return#2 = sid_rnd::return#4 Alias play_spawn_current::piece_idx#1 = play_spawn_current::$6 Alias play_spawn_current::piece_idx#2 = play_spawn_current::piece_idx#3 Alias next_piece_idx#18 = next_piece_idx#5 next_piece_idx#6 @@ -7123,13 +7131,13 @@ Alias render_screen_show#22 = render_screen_show#27 Alias render_screen_render#27 = render_screen_render#35 Alias current_movedown_slow#43 = current_movedown_slow#74 current_movedown_slow#79 current_movedown_slow#66 current_movedown_slow#54 Alias next_piece_idx#32 = next_piece_idx#69 next_piece_idx#74 next_piece_idx#62 next_piece_idx#53 next_piece_idx#41 -Alias current_piece#36 = current_piece#82 current_piece#87 current_piece#75 current_piece#63 current_piece#49 -Alias current_piece_char#33 = current_piece_char#89 current_piece_char#95 current_piece_char#79 current_piece_char#63 current_piece_char#46 -Alias current_orientation#46 = current_orientation#88 current_orientation#91 current_orientation#80 current_orientation#70 current_orientation#57 -Alias current_piece_gfx#101 = current_piece_gfx#108 current_piece_gfx#94 current_piece_gfx#76 current_piece_gfx#58 current_piece_gfx#42 -Alias current_xpos#102 = current_xpos#111 current_xpos#115 current_xpos#90 current_xpos#70 current_xpos#55 -Alias current_ypos#46 = current_ypos#90 current_ypos#94 current_ypos#82 current_ypos#72 current_ypos#58 -Alias game_over#30 = game_over#76 game_over#81 game_over#67 game_over#54 game_over#40 +Alias current_piece#36 = current_piece#81 current_piece#86 current_piece#75 current_piece#63 current_piece#49 +Alias current_piece_char#33 = current_piece_char#88 current_piece_char#94 current_piece_char#79 current_piece_char#63 current_piece_char#46 +Alias current_orientation#46 = current_orientation#87 current_orientation#90 current_orientation#80 current_orientation#70 current_orientation#57 +Alias current_piece_gfx#100 = current_piece_gfx#107 current_piece_gfx#94 current_piece_gfx#76 current_piece_gfx#58 current_piece_gfx#42 +Alias current_xpos#102 = current_xpos#110 current_xpos#114 current_xpos#90 current_xpos#70 current_xpos#55 +Alias current_ypos#46 = current_ypos#89 current_ypos#93 current_ypos#82 current_ypos#72 current_ypos#58 +Alias game_over#30 = game_over#75 game_over#80 game_over#67 game_over#54 game_over#40 Alias level#100 = level#95 level#88 level#79 level#59 level#101 level#96 level#89 level#80 level#66 level#51 Alias keyboard_events_size#32 = keyboard_events_size#76 keyboard_events_size#77 keyboard_events_size#75 keyboard_events_size#74 keyboard_events_size#73 keyboard_events_size#69 keyboard_events_size#64 keyboard_events_size#58 keyboard_events_size#49 keyboard_events_size#41 Alias keyboard_modifiers#28 = keyboard_modifiers#58 keyboard_modifiers#59 keyboard_modifiers#57 keyboard_modifiers#56 keyboard_modifiers#55 keyboard_modifiers#52 keyboard_modifiers#49 keyboard_modifiers#46 keyboard_modifiers#40 keyboard_modifiers#34 @@ -7160,16 +7168,16 @@ Alias keyboard_events_size#26 = keyboard_events_size#35 keyboard_events_size#42 Alias keyboard_modifiers#22 = keyboard_modifiers#31 keyboard_modifiers#35 Alias game_over#19 = game_over#56 game_over#69 game_over#44 game_over#31 game_over#32 Alias current_movedown_counter#24 = current_movedown_counter#46 current_movedown_counter#49 current_movedown_counter#42 current_movedown_counter#38 current_movedown_counter#33 -Alias current_ypos#47 = current_ypos#91 current_ypos#95 current_ypos#83 current_ypos#74 current_ypos#62 +Alias current_ypos#47 = current_ypos#90 current_ypos#94 current_ypos#83 current_ypos#74 current_ypos#62 Alias lines_bcd#30 = lines_bcd#71 lines_bcd#77 lines_bcd#64 lines_bcd#53 lines_bcd#43 Alias level#39 = level#90 level#97 level#81 level#67 level#54 Alias current_movedown_slow#44 = current_movedown_slow#81 current_movedown_slow#84 current_movedown_slow#76 current_movedown_slow#68 current_movedown_slow#58 Alias level_bcd#39 = level_bcd#81 level_bcd#89 level_bcd#74 level_bcd#64 level_bcd#53 -Alias current_piece#37 = current_piece#83 current_piece#88 current_piece#77 current_piece#65 current_piece#53 -Alias current_piece_char#34 = current_piece_char#90 current_piece_char#96 current_piece_char#81 current_piece_char#65 current_piece_char#50 -Alias current_orientation#47 = current_orientation#89 current_orientation#92 current_orientation#82 current_orientation#72 current_orientation#61 -Alias current_piece_gfx#102 = current_piece_gfx#109 current_piece_gfx#95 current_piece_gfx#78 current_piece_gfx#62 current_piece_gfx#43 -Alias current_xpos#103 = current_xpos#112 current_xpos#116 current_xpos#92 current_xpos#74 current_xpos#56 +Alias current_piece#37 = current_piece#82 current_piece#87 current_piece#77 current_piece#65 current_piece#53 +Alias current_piece_char#34 = current_piece_char#89 current_piece_char#95 current_piece_char#81 current_piece_char#65 current_piece_char#50 +Alias current_orientation#47 = current_orientation#88 current_orientation#91 current_orientation#82 current_orientation#72 current_orientation#61 +Alias current_piece_gfx#101 = current_piece_gfx#108 current_piece_gfx#95 current_piece_gfx#78 current_piece_gfx#62 current_piece_gfx#43 +Alias current_xpos#103 = current_xpos#111 current_xpos#115 current_xpos#92 current_xpos#74 current_xpos#56 Alias next_piece_idx#33 = next_piece_idx#70 next_piece_idx#75 next_piece_idx#64 next_piece_idx#54 next_piece_idx#45 Alias render_screen_render#45 = render_screen_render#61 render_screen_render#62 render_screen_render#59 render_screen_render#56 render_screen_render#52 render_screen_render#51 Alias keyboard_events_size#17 = keyboard_events_size#6 @@ -7211,16 +7219,16 @@ Alias lines_bcd#54 = lines_bcd#65 Alias level#68 = level#82 Alias level_bcd#65 = level_bcd#75 Alias render_screen_render#20 = render_screen_render#31 render_screen_render#38 render_screen_render#39 render_screen_render#26 render_screen_render#21 -Alias current_ypos#31 = current_ypos#63 current_ypos#61 current_ypos#92 current_ypos#85 current_ypos#76 current_ypos#60 -Alias current_xpos#105 = current_xpos#73 current_xpos#77 current_xpos#113 current_xpos#106 current_xpos#94 current_xpos#72 -Alias current_piece_gfx#103 = current_piece_gfx#61 current_piece_gfx#82 current_piece_gfx#104 current_piece_gfx#97 current_piece_gfx#80 current_piece_gfx#60 +Alias current_ypos#31 = current_ypos#63 current_ypos#61 current_ypos#91 current_ypos#85 current_ypos#76 current_ypos#60 +Alias current_xpos#105 = current_xpos#73 current_xpos#77 current_xpos#112 current_xpos#106 current_xpos#94 current_xpos#72 +Alias current_piece_gfx#102 = current_piece_gfx#61 current_piece_gfx#82 current_piece_gfx#103 current_piece_gfx#97 current_piece_gfx#80 current_piece_gfx#60 Alias next_piece_idx#43 = next_piece_idx#71 next_piece_idx#44 next_piece_idx#66 next_piece_idx#47 next_piece_idx#67 next_piece_idx#56 Alias render_screen_show#21 = render_screen_show#51 render_screen_show#29 render_screen_show#47 render_screen_show#39 render_screen_show#31 -Alias current_piece_char#48 = current_piece_char#97 current_piece_char#49 current_piece_char#84 current_piece_char#91 current_piece_char#83 current_piece_char#67 +Alias current_piece_char#48 = current_piece_char#96 current_piece_char#49 current_piece_char#84 current_piece_char#90 current_piece_char#83 current_piece_char#67 Alias current_movedown_slow#56 = current_movedown_slow#86 current_movedown_slow#57 current_movedown_slow#85 current_movedown_slow#82 current_movedown_slow#78 current_movedown_slow#70 -Alias current_piece#51 = current_piece#90 current_piece#52 current_piece#89 current_piece#84 current_piece#79 current_piece#67 -Alias current_orientation#59 = current_orientation#94 current_orientation#60 current_orientation#93 current_orientation#90 current_orientation#84 current_orientation#74 -Alias game_over#42 = game_over#84 game_over#43 game_over#82 game_over#77 game_over#71 game_over#58 +Alias current_piece#51 = current_piece#89 current_piece#52 current_piece#88 current_piece#83 current_piece#79 current_piece#67 +Alias current_orientation#59 = current_orientation#93 current_orientation#60 current_orientation#92 current_orientation#89 current_orientation#84 current_orientation#74 +Alias game_over#42 = game_over#83 game_over#43 game_over#81 game_over#76 game_over#71 game_over#58 Alias keyboard_events_size#33 = keyboard_events_size#70 keyboard_events_size#34 keyboard_events_size#65 keyboard_events_size#59 keyboard_events_size#52 keyboard_events_size#45 Alias keyboard_modifiers#29 = keyboard_modifiers#53 keyboard_modifiers#30 keyboard_modifiers#50 keyboard_modifiers#47 keyboard_modifiers#44 keyboard_modifiers#38 Alias current_movedown_counter#31 = current_movedown_counter#52 current_movedown_counter#32 current_movedown_counter#50 current_movedown_counter#47 current_movedown_counter#44 current_movedown_counter#40 @@ -7315,10 +7323,10 @@ Alias current_orientation#18 = current_orientation#62 current_orientation#85 cur Alias lines_bcd#25 = lines_bcd#59 lines_bcd#74 lines_bcd#48 Alias level#32 = level#73 level#93 level#61 Alias level_bcd#30 = level_bcd#69 level_bcd#86 level_bcd#58 -Alias current_piece#27 = current_piece#68 current_piece#85 current_piece#55 -Alias current_piece_char#28 = current_piece_char#71 current_piece_char#93 current_piece_char#55 -Alias current_piece_gfx#106 = current_piece_gfx#85 current_piece_gfx#67 current_piece_gfx#34 -Alias game_over#26 = game_over#60 game_over#79 game_over#48 +Alias current_piece#27 = current_piece#68 current_piece#84 current_piece#55 +Alias current_piece_char#28 = current_piece_char#71 current_piece_char#92 current_piece_char#55 +Alias current_piece_gfx#105 = current_piece_gfx#85 current_piece_gfx#67 current_piece_gfx#34 +Alias game_over#26 = game_over#60 game_over#78 game_over#48 Alias next_piece_idx#29 = next_piece_idx#57 next_piece_idx#72 next_piece_idx#49 Alias current_xpos#23 = current_xpos#48 Alias current_xpos#28 = current_xpos#50 @@ -7408,7 +7416,7 @@ Identical Phi Values (byte) level_bcd#27 (byte) level_bcd#39 Identical Phi Values (byte*) current_piece#24 (byte*) current_piece#37 Identical Phi Values (byte) current_piece_char#25 (byte) current_piece_char#34 Identical Phi Values (byte) current_orientation#32 (byte) current_orientation#47 -Identical Phi Values (byte*) current_piece_gfx#31 (byte*) current_piece_gfx#102 +Identical Phi Values (byte*) current_piece_gfx#31 (byte*) current_piece_gfx#101 Identical Phi Values (byte) current_xpos#37 (byte) current_xpos#103 Identical Phi Values (byte) game_over#23 (byte) game_over#19 Identical Phi Values (byte) next_piece_idx#26 (byte) next_piece_idx#33 @@ -7439,7 +7447,7 @@ Identical Phi Values (byte) level#32 (byte) level#29 Identical Phi Values (byte) level_bcd#30 (byte) level_bcd#27 Identical Phi Values (byte*) current_piece#27 (byte*) current_piece#24 Identical Phi Values (byte) current_piece_char#28 (byte) current_piece_char#25 -Identical Phi Values (byte*) current_piece_gfx#106 (byte*) current_piece_gfx#31 +Identical Phi Values (byte*) current_piece_gfx#105 (byte*) current_piece_gfx#31 Identical Phi Values (byte) game_over#26 (byte) game_over#23 Identical Phi Values (byte) next_piece_idx#29 (byte) next_piece_idx#26 Identical Phi Values (word) lines_bcd#14 (word) lines_bcd#17 @@ -7449,7 +7457,7 @@ Identical Phi Values (byte) level_bcd#16 (byte) level_bcd#19 Identical Phi Values (byte*) current_piece#14 (byte*) current_piece#18 Identical Phi Values (byte) current_piece_char#15 (byte) current_piece_char#18 Identical Phi Values (byte) current_orientation#19 (byte) current_orientation#26 -Identical Phi Values (byte*) current_piece_gfx#19 (byte*) current_piece_gfx#100 +Identical Phi Values (byte*) current_piece_gfx#19 (byte*) current_piece_gfx#23 Identical Phi Values (byte) current_xpos#21 (byte) current_xpos#10 Identical Phi Values (byte) current_ypos#18 (byte) current_ypos#24 Identical Phi Values (byte) game_over#14 (byte) game_over#16 @@ -7472,7 +7480,7 @@ Identical Phi Values (byte) play_collision::xpos#10 (byte) play_collision::xp#0 Identical Phi Values (byte*) play_collision::playfield_line#1 (byte*) play_collision::playfield_line#0 Identical Phi Values (byte) current_ypos#23 (byte) current_ypos#16 Identical Phi Values (byte) current_xpos#52 (byte) current_xpos#108 -Identical Phi Values (byte*) current_piece_gfx#54 (byte*) current_piece_gfx#106 +Identical Phi Values (byte*) current_piece_gfx#54 (byte*) current_piece_gfx#105 Identical Phi Values (byte) current_piece_char#59 (byte) current_piece_char#28 Identical Phi Values (byte*) current_piece_gfx#22 (byte*) current_piece_gfx#39 Identical Phi Values (byte) current_piece_char#17 (byte) current_piece_char#43 @@ -7483,7 +7491,7 @@ Identical Phi Values (byte) current_xpos#53 (byte) current_xpos#29 Identical Phi Values (byte*) current_piece#18 (byte*) current_piece#5 Identical Phi Values (byte) current_piece_char#18 (byte) current_piece_char#5 Identical Phi Values (byte) current_orientation#26 (byte) current_orientation#68 -Identical Phi Values (byte*) current_piece_gfx#100 (byte*) current_piece_gfx#74 +Identical Phi Values (byte*) current_piece_gfx#23 (byte*) current_piece_gfx#74 Identical Phi Values (byte) current_xpos#10 (byte) current_xpos#100 Identical Phi Values (byte) current_ypos#24 (byte) current_ypos#6 Identical Phi Values (byte) game_over#16 (byte) game_over#52 @@ -7510,7 +7518,7 @@ Identical Phi Values (byte) next_piece_idx#32 (byte) next_piece_idx#0 Identical Phi Values (byte*) current_piece#36 (byte*) current_piece#0 Identical Phi Values (byte) current_piece_char#33 (byte) current_piece_char#0 Identical Phi Values (byte) current_orientation#46 (byte) current_orientation#0 -Identical Phi Values (byte*) current_piece_gfx#101 (byte*) current_piece_gfx#0 +Identical Phi Values (byte*) current_piece_gfx#100 (byte*) current_piece_gfx#0 Identical Phi Values (byte) current_xpos#102 (byte) current_xpos#0 Identical Phi Values (byte) current_ypos#46 (byte) current_ypos#0 Identical Phi Values (byte) game_over#30 (byte) game_over#0 @@ -7526,7 +7534,7 @@ Identical Phi Values (byte) current_movedown_slow#12 (byte) current_movedown_slo Identical Phi Values (byte*) current_piece#19 (byte*) current_piece#18 Identical Phi Values (byte) current_piece_char#19 (byte) current_piece_char#18 Identical Phi Values (byte) current_orientation#10 (byte) current_orientation#26 -Identical Phi Values (byte*) current_piece_gfx#10 (byte*) current_piece_gfx#100 +Identical Phi Values (byte*) current_piece_gfx#10 (byte*) current_piece_gfx#23 Identical Phi Values (byte) current_xpos#11 (byte) current_xpos#10 Identical Phi Values (byte) current_ypos#25 (byte) current_ypos#24 Identical Phi Values (byte) game_over#17 (byte) game_over#16 @@ -7534,7 +7542,7 @@ Identical Phi Values (byte) next_piece_idx#19 (byte) next_piece_idx#18 Identical Phi Values (byte*) current_piece#20 (byte*) current_piece#18 Identical Phi Values (byte) current_piece_char#20 (byte) current_piece_char#18 Identical Phi Values (byte) current_orientation#11 (byte) current_orientation#26 -Identical Phi Values (byte*) current_piece_gfx#11 (byte*) current_piece_gfx#100 +Identical Phi Values (byte*) current_piece_gfx#11 (byte*) current_piece_gfx#23 Identical Phi Values (byte) current_xpos#12 (byte) current_xpos#10 Identical Phi Values (byte) current_ypos#26 (byte) current_ypos#24 Identical Phi Values (byte) game_over#18 (byte) game_over#16 @@ -7552,7 +7560,7 @@ Identical Phi Values (byte) level_bcd#39 (byte) level_bcd#11 Identical Phi Values (byte*) current_piece#37 (byte*) current_piece#10 Identical Phi Values (byte) current_piece_char#34 (byte) current_piece_char#10 Identical Phi Values (byte) current_orientation#47 (byte) current_orientation#13 -Identical Phi Values (byte*) current_piece_gfx#102 (byte*) current_piece_gfx#13 +Identical Phi Values (byte*) current_piece_gfx#101 (byte*) current_piece_gfx#13 Identical Phi Values (byte) current_xpos#103 (byte) current_xpos#14 Identical Phi Values (byte) next_piece_idx#33 (byte) next_piece_idx#10 Identical Phi Values (byte) render_screen_render#45 (byte) render_screen_render#18 @@ -7579,7 +7587,7 @@ Identical Phi Values (byte) current_movedown_slow#69 (byte) current_movedown_slo Identical Phi Values (byte*) current_piece#66 (byte*) current_piece#37 Identical Phi Values (byte) current_piece_char#66 (byte) current_piece_char#34 Identical Phi Values (byte) current_orientation#73 (byte) current_orientation#47 -Identical Phi Values (byte*) current_piece_gfx#79 (byte*) current_piece_gfx#102 +Identical Phi Values (byte*) current_piece_gfx#79 (byte*) current_piece_gfx#101 Identical Phi Values (byte) current_xpos#104 (byte) current_xpos#103 Identical Phi Values (byte) current_ypos#75 (byte) current_ypos#47 Identical Phi Values (byte) game_over#57 (byte) game_over#19 @@ -7634,89 +7642,89 @@ Identical Phi Values (byte) current_xpos#16 (byte) current_xpos#59 Identical Phi Values (byte*) current_piece_gfx#29 (byte*) current_piece_gfx#64 Identical Phi Values (byte) current_piece_char#37 (byte) current_piece_char#68 Successful SSA optimization Pass2IdenticalPhiElimination -Identified duplicate assignment right side [181] (byte~) render_init::$5 ← (byte) render_init::i#2 * (const byte) SIZEOF_POINTER +Identified duplicate assignment right side [185] (byte~) render_init::$5 ← (byte) render_init::i#2 * (const byte) SIZEOF_POINTER Successful SSA optimization Pass2DuplicateRValueIdentification -Simple Condition (bool~) keyboard_event_scan::$13 [15] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@8 -Simple Condition (bool~) keyboard_event_scan::$25 [21] if((byte) keyboard_event_scan::row#1!=rangelast(0,7)) goto keyboard_event_scan::@7 -Simple Condition (bool~) keyboard_event_scan::$18 [26] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@11 -Simple Condition (bool~) keyboard_event_scan::$24 [31] if((byte) keyboard_event_scan::col#1!=rangelast(0,7)) goto keyboard_event_scan::@10 -Simple Condition (bool~) keyboard_event_scan::$20 [33] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@11 -Simple Condition (bool~) keyboard_event_scan::$22 [36] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@12 -Simple Condition (bool~) keyboard_event_scan::$2 [49] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -Simple Condition (bool~) keyboard_event_scan::$5 [56] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -Simple Condition (bool~) keyboard_event_scan::$8 [64] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -Simple Condition (bool~) keyboard_event_scan::$11 [72] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -Simple Condition (bool~) keyboard_event_get::$0 [85] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@1 -Simple Condition (bool~) render_init::$3 [135] if((byte) render_init::i#1!=rangelast(0,PLAYFIELD_LINES-1)) goto render_init::@1 -Simple Condition (bool~) render_show::$0 [142] if((byte) render_screen_show#16==(byte) 0) goto render_show::@1 -Simple Condition (bool~) render_score::$0 [176] if((byte) render_screen_render#18==(byte) 0) goto render_score::@1 -Simple Condition (bool~) render_bcd::$2 [214] if((byte) render_bcd::only_low#6!=(byte) 0) goto render_bcd::@1 -Simple Condition (bool~) render_screen_original::$0 [239] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -Simple Condition (bool~) render_screen_original::$1 [249] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -Simple Condition (bool~) render_screen_original::$2 [257] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -Simple Condition (bool~) render_screen_original::$3 [260] if((byte) render_screen_original::y#1!=rangelast(0,$18)) goto render_screen_original::@1 -Simple Condition (bool~) render_playfield::$1 [276] if((byte) render_playfield::c#1!=rangelast(0,PLAYFIELD_COLS-1)) goto render_playfield::@2 -Simple Condition (bool~) render_playfield::$2 [279] if((byte) render_playfield::l#1!=rangelast(2,PLAYFIELD_LINES-1)) goto render_playfield::@1 -Simple Condition (bool~) render_moving::$0 [287] if((byte) render_moving::ypos#2>(byte) 1) goto render_moving::@2 -Simple Condition (bool~) render_moving::$5 [298] if((byte) render_moving::l#1!=rangelast(0,3)) goto render_moving::@1 -Simple Condition (bool~) render_moving::$3 [303] if((byte) render_moving::current_cell#0==(byte) 0) goto render_moving::@5 -Simple Condition (bool~) render_moving::$4 [307] if((byte) render_moving::c#1!=rangelast(0,3)) goto render_moving::@4 -Simple Condition (bool~) render_next::$0 [313] if((byte) render_screen_render#15==(byte) 0) goto render_next::@1 -Simple Condition (bool~) render_next::$3 [327] if((byte) render_next::cell#0!=(byte) 0) goto render_next::@6 -Simple Condition (bool~) render_next::$4 [333] if((byte) render_next::c#1!=rangelast(0,3)) goto render_next::@5 -Simple Condition (bool~) render_next::$5 [337] if((byte) render_next::l#1!=rangelast(0,3)) goto render_next::@4 -Simple Condition (bool~) sprites_init::$2 [353] if((byte) sprites_init::s#1!=rangelast(0,3)) goto sprites_init::@1 -Simple Condition (bool~) sprites_irq::$4 [385] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 -Simple Condition (bool~) sprites_irq::$1 [388] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 -Simple Condition (bool~) sprites_irq::$2 [403] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 -Simple Condition (bool~) sprites_irq::$3 [416] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 -Simple Condition (bool~) play_init::$0 [444] if((byte) play_init::j#1!=rangelast(0,PLAYFIELD_LINES-1)) goto play_init::@1 -Simple Condition (bool~) play_init::$1 [453] if((byte) play_init::b#1!=rangelast(0,4)) goto play_init::@3 -Simple Condition (bool~) play_movement::$2 [464] if((byte) game_over#15==(byte) 0) goto play_movement::@1 -Simple Condition (bool~) play_move_down::$1 [483] if((byte) play_move_down::key_event#0!=(const nomodify byte) KEY_SPACE) goto play_move_down::@1 -Simple Condition (bool~) play_move_down::$4 [490] if((byte~) play_move_down::$2==(byte) 0) goto play_move_down::@2 -Simple Condition (bool~) play_move_down::$6 [494] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3 -Simple Condition (bool~) play_move_down::$10 [496] if((byte) current_movedown_counter#12<(const nomodify byte) current_movedown_fast) goto play_move_down::@2 -Simple Condition (bool~) play_move_down::$8 [500] if((byte) play_move_down::movedown#6==(byte) 0) goto play_move_down::@4 -Simple Condition (bool~) play_move_down::$13 [510] if((byte~) play_move_down::$12==(const nomodify byte) COLLISION_NONE) goto play_move_down::@11 -Simple Condition (bool~) play_move_leftright::$0 [528] if((byte) play_move_leftright::key_event#0==(const nomodify byte) KEY_COMMA) goto play_move_leftright::@1 -Simple Condition (bool~) play_move_leftright::$10 [536] if((byte~) play_move_leftright::$8!=(const nomodify byte) COLLISION_NONE) goto play_move_leftright::@2 -Simple Condition (bool~) play_move_leftright::$2 [538] if((byte) play_move_leftright::key_event#0!=(const nomodify byte) KEY_DOT) goto play_move_leftright::@2 -Simple Condition (bool~) play_move_leftright::$6 [546] if((byte~) play_move_leftright::$4!=(const nomodify byte) COLLISION_NONE) goto play_move_leftright::@2 -Simple Condition (bool~) play_move_rotate::$0 [557] if((byte) play_move_rotate::key_event#0==(const nomodify byte) KEY_Z) goto play_move_rotate::@1 -Simple Condition (bool~) play_move_rotate::$1 [561] if((byte) play_move_rotate::key_event#0==(const nomodify byte) KEY_X) goto play_move_rotate::@2 -Simple Condition (bool~) play_move_rotate::$4 [575] if((byte~) play_move_rotate::$2!=(const nomodify byte) COLLISION_NONE) goto play_move_rotate::@4 -Simple Condition (bool~) play_collision::$2 [591] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 -Simple Condition (bool~) play_collision::$12 [595] if((byte) play_collision::c#1!=rangelast(0,3)) goto play_collision::@2 -Simple Condition (bool~) play_collision::$4 [597] if((byte) play_collision::yp#2<(const nomodify byte) PLAYFIELD_LINES) goto play_collision::@4 -Simple Condition (bool~) play_collision::$7 [600] if((byte~) play_collision::$5==(byte) 0) goto play_collision::@5 -Simple Condition (bool~) play_collision::$9 [605] if((byte) play_collision::xp#2<(const nomodify byte) PLAYFIELD_COLS) goto play_collision::@6 -Simple Condition (bool~) play_collision::$11 [608] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 -Simple Condition (bool~) play_collision::$13 [614] if((byte) play_collision::l#1!=rangelast(0,3)) goto play_collision::@1 -Simple Condition (bool~) play_lock_current::$1 [628] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -Simple Condition (bool~) play_lock_current::$2 [632] if((byte) play_lock_current::c#1!=rangelast(0,3)) goto play_lock_current::@2 -Simple Condition (bool~) play_lock_current::$3 [637] if((byte) play_lock_current::l#1!=rangelast(0,3)) goto play_lock_current::@1 -Simple Condition (bool~) play_spawn_current::$3 [655] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@1 -Simple Condition (bool~) play_spawn_current::$4 [661] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 -Simple Condition (bool~) play_remove_lines::$1 [677] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@3 -Simple Condition (bool~) play_remove_lines::$2 [683] if((byte) play_remove_lines::x#1!=rangelast(0,PLAYFIELD_COLS-1)) goto play_remove_lines::@2 -Simple Condition (bool~) play_remove_lines::$4 [686] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@7 -Simple Condition (bool~) play_remove_lines::$6 [690] if((byte) play_remove_lines::y#1!=rangelast(0,PLAYFIELD_LINES-1)) goto play_remove_lines::@1 -Simple Condition (bool~) play_remove_lines::$7 [695] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@9 -Simple Condition (bool~) play_update_score::$1 [701] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -Simple Condition (bool~) play_update_score::$7 [713] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -Simple Condition (bool~) play_increase_level::$0 [721] if((byte) level#21>(byte) $1d) goto play_increase_level::@1 -Simple Condition (bool~) play_increase_level::$3 [728] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@3 -Simple Condition (bool~) play_increase_level::$4 [738] if((byte) play_increase_level::b#1!=rangelast(0,4)) goto play_increase_level::@6 -Simple Condition (bool~) main::$10 [761] if(*((const nomodify byte*) RASTER)!=(byte) $ff) goto main::@2 -Simple Condition (bool~) main::$14 [771] if((byte) game_over#10==(byte) 0) goto main::@4 -Simple Condition (bool~) main::$18 [782] if((byte) main::render#2==(byte) 0) goto main::@1 +Simple Condition (bool~) keyboard_event_scan::$13 [20] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@8 +Simple Condition (bool~) keyboard_event_scan::$25 [26] if((byte) keyboard_event_scan::row#1!=rangelast(0,7)) goto keyboard_event_scan::@7 +Simple Condition (bool~) keyboard_event_scan::$18 [31] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@11 +Simple Condition (bool~) keyboard_event_scan::$24 [36] if((byte) keyboard_event_scan::col#1!=rangelast(0,7)) goto keyboard_event_scan::@10 +Simple Condition (bool~) keyboard_event_scan::$20 [38] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@11 +Simple Condition (bool~) keyboard_event_scan::$22 [41] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@12 +Simple Condition (bool~) keyboard_event_scan::$2 [54] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 +Simple Condition (bool~) keyboard_event_scan::$5 [61] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 +Simple Condition (bool~) keyboard_event_scan::$8 [69] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 +Simple Condition (bool~) keyboard_event_scan::$11 [77] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return +Simple Condition (bool~) keyboard_event_get::$0 [90] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@1 +Simple Condition (bool~) render_init::$3 [137] if((byte) render_init::i#1!=rangelast(0,PLAYFIELD_LINES-1)) goto render_init::@1 +Simple Condition (bool~) render_show::$0 [144] if((byte) render_screen_show#16==(byte) 0) goto render_show::@1 +Simple Condition (bool~) render_score::$0 [178] if((byte) render_screen_render#18==(byte) 0) goto render_score::@1 +Simple Condition (bool~) render_bcd::$2 [216] if((byte) render_bcd::only_low#6!=(byte) 0) goto render_bcd::@1 +Simple Condition (bool~) render_screen_original::$0 [241] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 +Simple Condition (bool~) render_screen_original::$1 [251] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 +Simple Condition (bool~) render_screen_original::$2 [259] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 +Simple Condition (bool~) render_screen_original::$3 [262] if((byte) render_screen_original::y#1!=rangelast(0,$18)) goto render_screen_original::@1 +Simple Condition (bool~) render_playfield::$1 [278] if((byte) render_playfield::c#1!=rangelast(0,PLAYFIELD_COLS-1)) goto render_playfield::@2 +Simple Condition (bool~) render_playfield::$2 [281] if((byte) render_playfield::l#1!=rangelast(2,PLAYFIELD_LINES-1)) goto render_playfield::@1 +Simple Condition (bool~) render_moving::$0 [289] if((byte) render_moving::ypos#2>(byte) 1) goto render_moving::@2 +Simple Condition (bool~) render_moving::$5 [300] if((byte) render_moving::l#1!=rangelast(0,3)) goto render_moving::@1 +Simple Condition (bool~) render_moving::$3 [305] if((byte) render_moving::current_cell#0==(byte) 0) goto render_moving::@5 +Simple Condition (bool~) render_moving::$4 [309] if((byte) render_moving::c#1!=rangelast(0,3)) goto render_moving::@4 +Simple Condition (bool~) render_next::$0 [315] if((byte) render_screen_render#15==(byte) 0) goto render_next::@1 +Simple Condition (bool~) render_next::$3 [329] if((byte) render_next::cell#0!=(byte) 0) goto render_next::@6 +Simple Condition (bool~) render_next::$4 [335] if((byte) render_next::c#1!=rangelast(0,3)) goto render_next::@5 +Simple Condition (bool~) render_next::$5 [339] if((byte) render_next::l#1!=rangelast(0,3)) goto render_next::@4 +Simple Condition (bool~) sprites_init::$2 [355] if((byte) sprites_init::s#1!=rangelast(0,3)) goto sprites_init::@1 +Simple Condition (bool~) sprites_irq::$4 [387] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 +Simple Condition (bool~) sprites_irq::$1 [390] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 +Simple Condition (bool~) sprites_irq::$2 [405] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 +Simple Condition (bool~) sprites_irq::$3 [418] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 +Simple Condition (bool~) play_init::$0 [446] if((byte) play_init::j#1!=rangelast(0,PLAYFIELD_LINES-1)) goto play_init::@1 +Simple Condition (bool~) play_init::$1 [455] if((byte) play_init::b#1!=rangelast(0,4)) goto play_init::@3 +Simple Condition (bool~) play_movement::$2 [466] if((byte) game_over#15==(byte) 0) goto play_movement::@1 +Simple Condition (bool~) play_move_down::$1 [485] if((byte) play_move_down::key_event#0!=(const nomodify byte) KEY_SPACE) goto play_move_down::@1 +Simple Condition (bool~) play_move_down::$4 [492] if((byte~) play_move_down::$2==(byte) 0) goto play_move_down::@2 +Simple Condition (bool~) play_move_down::$6 [496] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3 +Simple Condition (bool~) play_move_down::$10 [498] if((byte) current_movedown_counter#12<(const nomodify byte) current_movedown_fast) goto play_move_down::@2 +Simple Condition (bool~) play_move_down::$8 [502] if((byte) play_move_down::movedown#6==(byte) 0) goto play_move_down::@4 +Simple Condition (bool~) play_move_down::$13 [512] if((byte~) play_move_down::$12==(const nomodify byte) COLLISION_NONE) goto play_move_down::@11 +Simple Condition (bool~) play_move_leftright::$0 [530] if((byte) play_move_leftright::key_event#0==(const nomodify byte) KEY_COMMA) goto play_move_leftright::@1 +Simple Condition (bool~) play_move_leftright::$10 [538] if((byte~) play_move_leftright::$8!=(const nomodify byte) COLLISION_NONE) goto play_move_leftright::@2 +Simple Condition (bool~) play_move_leftright::$2 [540] if((byte) play_move_leftright::key_event#0!=(const nomodify byte) KEY_DOT) goto play_move_leftright::@2 +Simple Condition (bool~) play_move_leftright::$6 [548] if((byte~) play_move_leftright::$4!=(const nomodify byte) COLLISION_NONE) goto play_move_leftright::@2 +Simple Condition (bool~) play_move_rotate::$0 [559] if((byte) play_move_rotate::key_event#0==(const nomodify byte) KEY_Z) goto play_move_rotate::@1 +Simple Condition (bool~) play_move_rotate::$1 [563] if((byte) play_move_rotate::key_event#0==(const nomodify byte) KEY_X) goto play_move_rotate::@2 +Simple Condition (bool~) play_move_rotate::$4 [577] if((byte~) play_move_rotate::$2!=(const nomodify byte) COLLISION_NONE) goto play_move_rotate::@4 +Simple Condition (bool~) play_collision::$2 [593] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 +Simple Condition (bool~) play_collision::$12 [597] if((byte) play_collision::c#1!=rangelast(0,3)) goto play_collision::@2 +Simple Condition (bool~) play_collision::$4 [599] if((byte) play_collision::yp#2<(const nomodify byte) PLAYFIELD_LINES) goto play_collision::@4 +Simple Condition (bool~) play_collision::$7 [602] if((byte~) play_collision::$5==(byte) 0) goto play_collision::@5 +Simple Condition (bool~) play_collision::$9 [607] if((byte) play_collision::xp#2<(const nomodify byte) PLAYFIELD_COLS) goto play_collision::@6 +Simple Condition (bool~) play_collision::$11 [610] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 +Simple Condition (bool~) play_collision::$13 [616] if((byte) play_collision::l#1!=rangelast(0,3)) goto play_collision::@1 +Simple Condition (bool~) play_lock_current::$1 [630] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 +Simple Condition (bool~) play_lock_current::$2 [634] if((byte) play_lock_current::c#1!=rangelast(0,3)) goto play_lock_current::@2 +Simple Condition (bool~) play_lock_current::$3 [639] if((byte) play_lock_current::l#1!=rangelast(0,3)) goto play_lock_current::@1 +Simple Condition (bool~) play_spawn_current::$3 [657] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@1 +Simple Condition (bool~) play_spawn_current::$4 [663] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::@4 +Simple Condition (bool~) play_remove_lines::$1 [681] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@3 +Simple Condition (bool~) play_remove_lines::$2 [687] if((byte) play_remove_lines::x#1!=rangelast(0,PLAYFIELD_COLS-1)) goto play_remove_lines::@2 +Simple Condition (bool~) play_remove_lines::$4 [690] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@7 +Simple Condition (bool~) play_remove_lines::$6 [694] if((byte) play_remove_lines::y#1!=rangelast(0,PLAYFIELD_LINES-1)) goto play_remove_lines::@1 +Simple Condition (bool~) play_remove_lines::$7 [699] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@9 +Simple Condition (bool~) play_update_score::$1 [705] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return +Simple Condition (bool~) play_update_score::$7 [717] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return +Simple Condition (bool~) play_increase_level::$0 [725] if((byte) level#21>(byte) $1d) goto play_increase_level::@1 +Simple Condition (bool~) play_increase_level::$3 [732] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@3 +Simple Condition (bool~) play_increase_level::$4 [742] if((byte) play_increase_level::b#1!=rangelast(0,4)) goto play_increase_level::@6 +Simple Condition (bool~) main::$10 [765] if(*((const nomodify byte*) RASTER)!=(byte) $ff) goto main::@2 +Simple Condition (bool~) main::$14 [775] if((byte) game_over#10==(byte) 0) goto main::@4 +Simple Condition (bool~) main::$18 [786] if((byte) main::render#2==(byte) 0) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification -Constant right-side identified [185] (word) render_bcd::offset#1 ← (const word) render_score::score_offset + (byte) 2 -Constant right-side identified [190] (word) render_bcd::offset#2 ← (const word) render_score::score_offset + (byte) 4 -Constant right-side identified [200] (word) render_bcd::offset#4 ← (const word) render_score::lines_offset + (byte) 1 -Constant right-side identified [314] (byte*) render_next::screen_next_area#1 ← (const nomodify byte*) PLAYFIELD_SCREEN_1 + (const word) render_next::next_area_offset -Constant right-side identified [315] (byte*) render_next::screen_next_area#2 ← (const nomodify byte*) PLAYFIELD_SCREEN_2 + (const word) render_next::next_area_offset +Constant right-side identified [187] (word) render_bcd::offset#1 ← (const word) render_score::score_offset + (byte) 2 +Constant right-side identified [192] (word) render_bcd::offset#2 ← (const word) render_score::score_offset + (byte) 4 +Constant right-side identified [202] (word) render_bcd::offset#4 ← (const word) render_score::lines_offset + (byte) 1 +Constant right-side identified [316] (byte*) render_next::screen_next_area#1 ← (const nomodify byte*) PLAYFIELD_SCREEN_1 + (const word) render_next::next_area_offset +Constant right-side identified [317] (byte*) render_next::screen_next_area#2 ← (const nomodify byte*) PLAYFIELD_SCREEN_2 + (const word) render_next::next_area_offset Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) keyboard_events_size#0 = 0 Constant (const byte) keyboard_modifiers#0 = 0 @@ -7840,11 +7848,11 @@ Constant (const word) toSpritePtr1_$1 = (word)toSpritePtr1_sprite#0 Constant (const word) sprites_irq::toSpritePtr1_$1 = (word)sprites_irq::toSpritePtr1_sprite#0 Constant (const byte) play_collision::orientation#4 = current_orientation#68 Successful SSA optimization Pass2ConstantIdentification -Constant value identified (word)render_init::vicSelectGfxBank1_gfx#0 in [109] (byte~) render_init::vicSelectGfxBank1_toDd001_$0 ← > (word)(const byte*) render_init::vicSelectGfxBank1_gfx#0 -Constant value identified (word)render_show::toD0181_gfx#0 in [149] (byte~) render_show::toD0181_$3 ← > (word)(const byte*) render_show::toD0181_gfx#0 -Constant value identified (word)render_show::toD0182_gfx#0 in [159] (byte~) render_show::toD0182_$3 ← > (word)(const byte*) render_show::toD0182_gfx#0 +Constant value identified (word)render_init::vicSelectGfxBank1_gfx#0 in [111] (byte~) render_init::vicSelectGfxBank1_toDd001_$0 ← > (word)(const byte*) render_init::vicSelectGfxBank1_gfx#0 +Constant value identified (word)render_show::toD0181_gfx#0 in [151] (byte~) render_show::toD0181_$3 ← > (word)(const byte*) render_show::toD0181_gfx#0 +Constant value identified (word)render_show::toD0182_gfx#0 in [161] (byte~) render_show::toD0182_$3 ← > (word)(const byte*) render_show::toD0182_gfx#0 Successful SSA optimization Pass2ConstantValues -if() condition always true - replacing block destination [758] if(true) goto main::@2 +if() condition always true - replacing block destination [762] if(true) goto main::@2 Removing PHI-reference to removed block (main::@5) in block main::@7 Removing PHI-reference to removed block (main::@5) in block main::@7 Removing PHI-reference to removed block (main::@5) in block main::@7 @@ -7859,64 +7867,64 @@ Removing PHI-reference to removed block (main::@5) in block main::@7 Removing PHI-reference to removed block (main::@5) in block main::@7 Removing PHI-reference to removed block (main::@5) in block main::@7 Removing PHI-reference to removed block (main::@5) in block main::@7 -if() condition always true - replacing block destination [778] if(true) goto main::@6 +if() condition always true - replacing block destination [782] if(true) goto main::@6 Successful SSA optimization Pass2ConstantIfs -Resolved ranged next value [19] keyboard_event_scan::row#1 ← ++ keyboard_event_scan::row#2 to ++ -Resolved ranged comparison value [21] if(keyboard_event_scan::row#1!=rangelast(0,7)) goto keyboard_event_scan::@7 to (number) 8 -Resolved ranged next value [29] keyboard_event_scan::col#1 ← ++ keyboard_event_scan::col#2 to ++ -Resolved ranged comparison value [31] if(keyboard_event_scan::col#1!=rangelast(0,7)) goto keyboard_event_scan::@10 to (number) 8 -Resolved ranged next value [133] render_init::i#1 ← ++ render_init::i#2 to ++ -Resolved ranged comparison value [135] if(render_init::i#1!=rangelast(0,PLAYFIELD_LINES-1)) goto render_init::@1 to (const nomodify byte) PLAYFIELD_LINES-(byte) 1+(number) 1 -Resolved ranged next value [258] render_screen_original::y#1 ← ++ render_screen_original::y#6 to ++ -Resolved ranged comparison value [260] if(render_screen_original::y#1!=rangelast(0,$18)) goto render_screen_original::@1 to (number) $19 -Resolved ranged next value [274] render_playfield::c#1 ← ++ render_playfield::c#2 to ++ -Resolved ranged comparison value [276] if(render_playfield::c#1!=rangelast(0,PLAYFIELD_COLS-1)) goto render_playfield::@2 to (const nomodify byte) PLAYFIELD_COLS-(byte) 1+(number) 1 -Resolved ranged next value [277] render_playfield::l#1 ← ++ render_playfield::l#2 to ++ -Resolved ranged comparison value [279] if(render_playfield::l#1!=rangelast(2,PLAYFIELD_LINES-1)) goto render_playfield::@1 to (const nomodify byte) PLAYFIELD_LINES-(byte) 1+(number) 1 -Resolved ranged next value [296] render_moving::l#1 ← ++ render_moving::l#4 to ++ -Resolved ranged comparison value [298] if(render_moving::l#1!=rangelast(0,3)) goto render_moving::@1 to (number) 4 -Resolved ranged next value [305] render_moving::c#1 ← ++ render_moving::c#2 to ++ -Resolved ranged comparison value [307] if(render_moving::c#1!=rangelast(0,3)) goto render_moving::@4 to (number) 4 -Resolved ranged next value [331] render_next::c#1 ← ++ render_next::c#2 to ++ -Resolved ranged comparison value [333] if(render_next::c#1!=rangelast(0,3)) goto render_next::@5 to (number) 4 -Resolved ranged next value [335] render_next::l#1 ← ++ render_next::l#7 to ++ -Resolved ranged comparison value [337] if(render_next::l#1!=rangelast(0,3)) goto render_next::@4 to (number) 4 -Resolved ranged next value [351] sprites_init::s#1 ← ++ sprites_init::s#2 to ++ -Resolved ranged comparison value [353] if(sprites_init::s#1!=rangelast(0,3)) goto sprites_init::@1 to (number) 4 -Resolved ranged next value [442] play_init::j#1 ← ++ play_init::j#2 to ++ -Resolved ranged comparison value [444] if(play_init::j#1!=rangelast(0,PLAYFIELD_LINES-1)) goto play_init::@1 to (const nomodify byte) PLAYFIELD_LINES-(byte) 1+(number) 1 -Resolved ranged next value [451] play_init::b#1 ← ++ play_init::b#2 to ++ -Resolved ranged comparison value [453] if(play_init::b#1!=rangelast(0,4)) goto play_init::@3 to (number) 5 -Resolved ranged next value [593] play_collision::c#1 ← ++ play_collision::c#2 to ++ -Resolved ranged comparison value [595] if(play_collision::c#1!=rangelast(0,3)) goto play_collision::@2 to (number) 4 -Resolved ranged next value [612] play_collision::l#1 ← ++ play_collision::l#6 to ++ -Resolved ranged comparison value [614] if(play_collision::l#1!=rangelast(0,3)) goto play_collision::@1 to (number) 4 -Resolved ranged next value [630] play_lock_current::c#1 ← ++ play_lock_current::c#2 to ++ -Resolved ranged comparison value [632] if(play_lock_current::c#1!=rangelast(0,3)) goto play_lock_current::@2 to (number) 4 -Resolved ranged next value [635] play_lock_current::l#1 ← ++ play_lock_current::l#6 to ++ -Resolved ranged comparison value [637] if(play_lock_current::l#1!=rangelast(0,3)) goto play_lock_current::@1 to (number) 4 -Resolved ranged next value [681] play_remove_lines::x#1 ← ++ play_remove_lines::x#2 to ++ -Resolved ranged comparison value [683] if(play_remove_lines::x#1!=rangelast(0,PLAYFIELD_COLS-1)) goto play_remove_lines::@2 to (const nomodify byte) PLAYFIELD_COLS-(byte) 1+(number) 1 -Resolved ranged next value [688] play_remove_lines::y#1 ← ++ play_remove_lines::y#8 to ++ -Resolved ranged comparison value [690] if(play_remove_lines::y#1!=rangelast(0,PLAYFIELD_LINES-1)) goto play_remove_lines::@1 to (const nomodify byte) PLAYFIELD_LINES-(byte) 1+(number) 1 -Resolved ranged next value [736] play_increase_level::b#1 ← ++ play_increase_level::b#2 to ++ -Resolved ranged comparison value [738] if(play_increase_level::b#1!=rangelast(0,4)) goto play_increase_level::@6 to (number) 5 -Rewriting conditional comparison [287] if((byte) render_moving::ypos#2>(byte) 1) goto render_moving::@2 -Rewriting conditional comparison [721] if((byte) level#21>(byte) $1d) goto play_increase_level::@1 -Simplifying expression containing zero (byte*)CIA1 in [1] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -Simplifying expression containing zero KEY_MODIFIER_LSHIFT in [57] (byte) keyboard_modifiers#2 ← (const byte) keyboard_modifiers#1 | (const nomodify byte) KEY_MODIFIER_LSHIFT -Simplifying expression containing zero (byte*)CIA2 in [112] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) render_init::vicSelectGfxBank1_toDd001_return#0 -Simplifying expression containing zero PIECES_COLORS_1 in [116] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) 0) -Simplifying expression containing zero PIECES_COLORS_2 in [117] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) 0) -Simplifying expression containing zero render_score::score_bytes in [192] (byte) render_bcd::bcd#2 ← *((const byte*) render_score::score_bytes + (byte) 0) -Simplifying expression containing zero SPRITES_YPOS in [378] *((const nomodify byte*) SPRITES_YPOS + (byte) 0) ← (byte) sprites_irq::ypos#0 -Simplifying expression containing zero PLAYFIELD_SPRITE_PTRS_1 in [389] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1 + (byte) 0) ← (byte) sprites_irq::ptr#0 -Simplifying expression containing zero PLAYFIELD_SPRITE_PTRS_2 in [395] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2 + (byte) 0) ← (byte) sprites_irq::ptr#0 -Simplifying expression containing zero MOVEDOWN_SLOW_SPEEDS in [446] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (const byte) level#0) -Simplifying expression containing zero play_movement::$0 in [462] (byte) play_movement::render#1 ← (const byte) play_movement::render#0 + (byte~) play_movement::$0 -Simplifying expression containing zero current_piece#5 in [645] (byte*) current_piece_gfx#74 ← (byte*) current_piece#5 + (const byte) current_orientation#68 +Resolved ranged next value [24] keyboard_event_scan::row#1 ← ++ keyboard_event_scan::row#2 to ++ +Resolved ranged comparison value [26] if(keyboard_event_scan::row#1!=rangelast(0,7)) goto keyboard_event_scan::@7 to (number) 8 +Resolved ranged next value [34] keyboard_event_scan::col#1 ← ++ keyboard_event_scan::col#2 to ++ +Resolved ranged comparison value [36] if(keyboard_event_scan::col#1!=rangelast(0,7)) goto keyboard_event_scan::@10 to (number) 8 +Resolved ranged next value [135] render_init::i#1 ← ++ render_init::i#2 to ++ +Resolved ranged comparison value [137] if(render_init::i#1!=rangelast(0,PLAYFIELD_LINES-1)) goto render_init::@1 to (const nomodify byte) PLAYFIELD_LINES-(byte) 1+(number) 1 +Resolved ranged next value [260] render_screen_original::y#1 ← ++ render_screen_original::y#6 to ++ +Resolved ranged comparison value [262] if(render_screen_original::y#1!=rangelast(0,$18)) goto render_screen_original::@1 to (number) $19 +Resolved ranged next value [276] render_playfield::c#1 ← ++ render_playfield::c#2 to ++ +Resolved ranged comparison value [278] if(render_playfield::c#1!=rangelast(0,PLAYFIELD_COLS-1)) goto render_playfield::@2 to (const nomodify byte) PLAYFIELD_COLS-(byte) 1+(number) 1 +Resolved ranged next value [279] render_playfield::l#1 ← ++ render_playfield::l#2 to ++ +Resolved ranged comparison value [281] if(render_playfield::l#1!=rangelast(2,PLAYFIELD_LINES-1)) goto render_playfield::@1 to (const nomodify byte) PLAYFIELD_LINES-(byte) 1+(number) 1 +Resolved ranged next value [298] render_moving::l#1 ← ++ render_moving::l#4 to ++ +Resolved ranged comparison value [300] if(render_moving::l#1!=rangelast(0,3)) goto render_moving::@1 to (number) 4 +Resolved ranged next value [307] render_moving::c#1 ← ++ render_moving::c#2 to ++ +Resolved ranged comparison value [309] if(render_moving::c#1!=rangelast(0,3)) goto render_moving::@4 to (number) 4 +Resolved ranged next value [333] render_next::c#1 ← ++ render_next::c#2 to ++ +Resolved ranged comparison value [335] if(render_next::c#1!=rangelast(0,3)) goto render_next::@5 to (number) 4 +Resolved ranged next value [337] render_next::l#1 ← ++ render_next::l#7 to ++ +Resolved ranged comparison value [339] if(render_next::l#1!=rangelast(0,3)) goto render_next::@4 to (number) 4 +Resolved ranged next value [353] sprites_init::s#1 ← ++ sprites_init::s#2 to ++ +Resolved ranged comparison value [355] if(sprites_init::s#1!=rangelast(0,3)) goto sprites_init::@1 to (number) 4 +Resolved ranged next value [444] play_init::j#1 ← ++ play_init::j#2 to ++ +Resolved ranged comparison value [446] if(play_init::j#1!=rangelast(0,PLAYFIELD_LINES-1)) goto play_init::@1 to (const nomodify byte) PLAYFIELD_LINES-(byte) 1+(number) 1 +Resolved ranged next value [453] play_init::b#1 ← ++ play_init::b#2 to ++ +Resolved ranged comparison value [455] if(play_init::b#1!=rangelast(0,4)) goto play_init::@3 to (number) 5 +Resolved ranged next value [595] play_collision::c#1 ← ++ play_collision::c#2 to ++ +Resolved ranged comparison value [597] if(play_collision::c#1!=rangelast(0,3)) goto play_collision::@2 to (number) 4 +Resolved ranged next value [614] play_collision::l#1 ← ++ play_collision::l#6 to ++ +Resolved ranged comparison value [616] if(play_collision::l#1!=rangelast(0,3)) goto play_collision::@1 to (number) 4 +Resolved ranged next value [632] play_lock_current::c#1 ← ++ play_lock_current::c#2 to ++ +Resolved ranged comparison value [634] if(play_lock_current::c#1!=rangelast(0,3)) goto play_lock_current::@2 to (number) 4 +Resolved ranged next value [637] play_lock_current::l#1 ← ++ play_lock_current::l#6 to ++ +Resolved ranged comparison value [639] if(play_lock_current::l#1!=rangelast(0,3)) goto play_lock_current::@1 to (number) 4 +Resolved ranged next value [685] play_remove_lines::x#1 ← ++ play_remove_lines::x#2 to ++ +Resolved ranged comparison value [687] if(play_remove_lines::x#1!=rangelast(0,PLAYFIELD_COLS-1)) goto play_remove_lines::@2 to (const nomodify byte) PLAYFIELD_COLS-(byte) 1+(number) 1 +Resolved ranged next value [692] play_remove_lines::y#1 ← ++ play_remove_lines::y#8 to ++ +Resolved ranged comparison value [694] if(play_remove_lines::y#1!=rangelast(0,PLAYFIELD_LINES-1)) goto play_remove_lines::@1 to (const nomodify byte) PLAYFIELD_LINES-(byte) 1+(number) 1 +Resolved ranged next value [740] play_increase_level::b#1 ← ++ play_increase_level::b#2 to ++ +Resolved ranged comparison value [742] if(play_increase_level::b#1!=rangelast(0,4)) goto play_increase_level::@6 to (number) 5 +Rewriting conditional comparison [289] if((byte) render_moving::ypos#2>(byte) 1) goto render_moving::@2 +Rewriting conditional comparison [725] if((byte) level#21>(byte) $1d) goto play_increase_level::@1 +Simplifying expression containing zero (byte*)CIA1 in [6] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) +Simplifying expression containing zero KEY_MODIFIER_LSHIFT in [62] (byte) keyboard_modifiers#2 ← (const byte) keyboard_modifiers#1 | (const nomodify byte) KEY_MODIFIER_LSHIFT +Simplifying expression containing zero (byte*)CIA2 in [114] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) ← (byte) render_init::vicSelectGfxBank1_toDd001_return#0 +Simplifying expression containing zero PIECES_COLORS_1 in [118] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) 0) +Simplifying expression containing zero PIECES_COLORS_2 in [119] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) 0) +Simplifying expression containing zero render_score::score_bytes in [194] (byte) render_bcd::bcd#2 ← *((const byte*) render_score::score_bytes + (byte) 0) +Simplifying expression containing zero SPRITES_YPOS in [380] *((const nomodify byte*) SPRITES_YPOS + (byte) 0) ← (byte) sprites_irq::ypos#0 +Simplifying expression containing zero PLAYFIELD_SPRITE_PTRS_1 in [391] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1 + (byte) 0) ← (byte) sprites_irq::ptr#0 +Simplifying expression containing zero PLAYFIELD_SPRITE_PTRS_2 in [397] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2 + (byte) 0) ← (byte) sprites_irq::ptr#0 +Simplifying expression containing zero MOVEDOWN_SLOW_SPEEDS in [448] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (const byte) level#0) +Simplifying expression containing zero play_movement::$0 in [464] (byte) play_movement::render#1 ← (const byte) play_movement::render#0 + (byte~) play_movement::$0 +Simplifying expression containing zero current_piece#5 in [647] (byte*) current_piece_gfx#74 ← (byte*) current_piece#5 + (const byte) current_orientation#68 Successful SSA optimization PassNSimplifyExpressionWithZero -Eliminating unused variable (byte*) render_bcd::screen_pos#1 and assignment [147] (byte*) render_bcd::screen_pos#1 ← ++ (byte*) render_bcd::screen_pos#3 +Eliminating unused variable (byte*) render_bcd::screen_pos#1 and assignment [149] (byte*) render_bcd::screen_pos#1 ← ++ (byte*) render_bcd::screen_pos#3 Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#16 Eliminating unused constant (const byte) render_show::d018val#0 Eliminating unused constant (const byte*) render_score::screen#0 @@ -7938,22 +7946,22 @@ Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#14 Eliminating unused constant (const byte) keyboard_modifiers#0 Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused variable (byte) keyboard_modifiers#5 and assignment [52] (byte) keyboard_modifiers#5 ← (byte) keyboard_modifiers#13 | (const nomodify byte) KEY_MODIFIER_COMMODORE +Eliminating unused variable (byte) keyboard_modifiers#5 and assignment [57] (byte) keyboard_modifiers#5 ← (byte) keyboard_modifiers#13 | (const nomodify byte) KEY_MODIFIER_COMMODORE Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#13 Eliminating unused constant (const nomodify byte) KEY_MODIFIER_COMMODORE Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused variable (byte) keyboard_modifiers#4 and assignment [51] (byte) keyboard_modifiers#4 ← (byte) keyboard_modifiers#12 | (const nomodify byte) KEY_MODIFIER_CTRL +Eliminating unused variable (byte) keyboard_modifiers#4 and assignment [56] (byte) keyboard_modifiers#4 ← (byte) keyboard_modifiers#12 | (const nomodify byte) KEY_MODIFIER_CTRL Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#12 Eliminating unused constant (const nomodify byte) KEY_MODIFIER_CTRL Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused variable (byte) keyboard_modifiers#3 and assignment [45] (byte) keyboard_modifiers#3 ← (byte) keyboard_modifiers#11 | (const nomodify byte) KEY_MODIFIER_RSHIFT +Eliminating unused variable (byte) keyboard_modifiers#3 and assignment [50] (byte) keyboard_modifiers#3 ← (byte) keyboard_modifiers#11 | (const nomodify byte) KEY_MODIFIER_RSHIFT Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#11 Eliminating unused constant (const nomodify byte) KEY_MODIFIER_RSHIFT Successful SSA optimization PassNEliminateUnusedVars -Eliminating unused variable (byte) keyboard_modifiers#2 and assignment [39] (byte) keyboard_modifiers#2 ← (const nomodify byte) KEY_MODIFIER_LSHIFT +Eliminating unused variable (byte) keyboard_modifiers#2 and assignment [44] (byte) keyboard_modifiers#2 ← (const nomodify byte) KEY_MODIFIER_LSHIFT Eliminating unused constant (const byte) keyboard_modifiers#1 Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const nomodify byte) KEY_MODIFIER_LSHIFT @@ -8063,7 +8071,7 @@ Identical Phi Values (byte) current_movedown_slow#56 (byte) current_movedown_slo Identical Phi Values (byte*) current_piece#51 (byte*) current_piece#15 Identical Phi Values (byte) current_piece_char#48 (byte) current_piece_char#16 Identical Phi Values (byte) current_orientation#59 (byte) current_orientation#17 -Identical Phi Values (byte*) current_piece_gfx#103 (byte*) current_piece_gfx#18 +Identical Phi Values (byte*) current_piece_gfx#102 (byte*) current_piece_gfx#18 Identical Phi Values (byte) current_xpos#105 (byte) current_xpos#19 Identical Phi Values (byte) current_ypos#31 (byte) current_ypos#19 Identical Phi Values (byte) game_over#42 (byte) game_over#15 @@ -8073,14 +8081,14 @@ Identical Phi Values (word) lines_bcd#41 (word) lines_bcd#15 Identical Phi Values (byte) level#102 (byte) level#17 Identical Phi Values (byte) level_bcd#51 (byte) level_bcd#17 Successful SSA optimization Pass2IdenticalPhiElimination -Constant right-side identified [65] (byte~) render_init::vicSelectGfxBank1_toDd001_$0 ← > (word)(const byte*) render_init::vicSelectGfxBank1_gfx#0 -Constant right-side identified [87] (word~) render_show::toD0181_$0 ← (const word) render_show::toD0181_$7 & (word) $3fff -Constant right-side identified [90] (byte~) render_show::toD0181_$3 ← > (word)(const byte*) render_show::toD0181_gfx#0 -Constant right-side identified [94] (word~) render_show::toD0182_$0 ← (const word) render_show::toD0182_$7 & (word) $3fff -Constant right-side identified [97] (byte~) render_show::toD0182_$3 ← > (word)(const byte*) render_show::toD0182_gfx#0 -Constant right-side identified [242] (word~) toSpritePtr1_$0 ← (const word) toSpritePtr1_$1 / (byte) $40 -Constant right-side identified [286] (word~) sprites_irq::toSpritePtr1_$0 ← (const word) sprites_irq::toSpritePtr1_$1 / (byte) $40 -Constant right-side identified [342] (byte) play_move_down::movedown#1 ← ++ (const byte) play_move_down::movedown#0 +Constant right-side identified [67] (byte~) render_init::vicSelectGfxBank1_toDd001_$0 ← > (word)(const byte*) render_init::vicSelectGfxBank1_gfx#0 +Constant right-side identified [89] (word~) render_show::toD0181_$0 ← (const word) render_show::toD0181_$7 & (word) $3fff +Constant right-side identified [92] (byte~) render_show::toD0181_$3 ← > (word)(const byte*) render_show::toD0181_gfx#0 +Constant right-side identified [96] (word~) render_show::toD0182_$0 ← (const word) render_show::toD0182_$7 & (word) $3fff +Constant right-side identified [99] (byte~) render_show::toD0182_$3 ← > (word)(const byte*) render_show::toD0182_gfx#0 +Constant right-side identified [244] (word~) toSpritePtr1_$0 ← (const word) toSpritePtr1_$1 / (byte) $40 +Constant right-side identified [288] (word~) sprites_irq::toSpritePtr1_$0 ← (const word) sprites_irq::toSpritePtr1_$1 / (byte) $40 +Constant right-side identified [344] (byte) play_move_down::movedown#1 ← ++ (const byte) play_move_down::movedown#0 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) render_init::vicSelectGfxBank1_toDd001_$0 = >(word)render_init::vicSelectGfxBank1_gfx#0 Constant (const word) render_show::toD0181_$0 = render_show::toD0181_$7&$3fff @@ -8100,12 +8108,12 @@ Constant (const byte) sprites_irq::$5 = sprites_irq::toSpritePtr1_return#1 Successful SSA optimization Pass2ConstantIdentification Alias candidate removed (volatile)irq_sprite_ptr = $1 Alias candidate removed (volatile)sprites_irq::raster_sprite_gfx_modify = sprites_irq::$0 -Constant right-side identified [65] (byte~) render_init::vicSelectGfxBank1_toDd001_$1 ← (const byte) render_init::vicSelectGfxBank1_toDd001_$0 / (byte) $40 -Constant right-side identified [86] (word~) render_show::toD0181_$1 ← (const word) render_show::toD0181_$0 * (byte) 4 -Constant right-side identified [88] (byte~) render_show::toD0181_$4 ← (const byte) render_show::toD0181_$3 / (byte) 4 -Constant right-side identified [91] (word~) render_show::toD0182_$1 ← (const word) render_show::toD0182_$0 * (byte) 4 -Constant right-side identified [93] (byte~) render_show::toD0182_$4 ← (const byte) render_show::toD0182_$3 / (byte) 4 -Constant right-side identified [237] (byte~) $1 ← (const byte) toSpritePtr1_return#0 + (byte) 3 +Constant right-side identified [67] (byte~) render_init::vicSelectGfxBank1_toDd001_$1 ← (const byte) render_init::vicSelectGfxBank1_toDd001_$0 / (byte) $40 +Constant right-side identified [88] (word~) render_show::toD0181_$1 ← (const word) render_show::toD0181_$0 * (byte) 4 +Constant right-side identified [90] (byte~) render_show::toD0181_$4 ← (const byte) render_show::toD0181_$3 / (byte) 4 +Constant right-side identified [93] (word~) render_show::toD0182_$1 ← (const word) render_show::toD0182_$0 * (byte) 4 +Constant right-side identified [95] (byte~) render_show::toD0182_$4 ← (const byte) render_show::toD0182_$3 / (byte) 4 +Constant right-side identified [239] (byte~) $1 ← (const byte) toSpritePtr1_return#0 + (byte) 3 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) render_init::vicSelectGfxBank1_toDd001_$1 = render_init::vicSelectGfxBank1_toDd001_$0/$40 Constant (const word) render_show::toD0181_$1 = render_show::toD0181_$0*4 @@ -8116,7 +8124,7 @@ Constant (const byte) $1 = toSpritePtr1_return#0+3 Successful SSA optimization Pass2ConstantIdentification Simplifying constant evaluating to zero (const byte) render_init::vicSelectGfxBank1_toDd001_$0/(byte) $40 in Successful SSA optimization PassNSimplifyConstantZero -Simplifying expression containing zero 3 in [66] (byte) render_init::vicSelectGfxBank1_toDd001_return#0 ← (byte) 3 ^ (const byte) render_init::vicSelectGfxBank1_toDd001_$1 +Simplifying expression containing zero 3 in [68] (byte) render_init::vicSelectGfxBank1_toDd001_return#0 ← (byte) 3 ^ (const byte) render_init::vicSelectGfxBank1_toDd001_$1 Successful SSA optimization PassNSimplifyExpressionWithZero Eliminating unused constant (const byte) render_init::vicSelectGfxBank1_toDd001_$0 Eliminating unused constant (const byte) render_init::vicSelectGfxBank1_toDd001_$1 @@ -8124,10 +8132,10 @@ Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const byte*) render_init::vicSelectGfxBank1_gfx#0 Successful SSA optimization PassNEliminateUnusedVars Alias candidate removed (volatile)sprites_irq::raster_sprite_gfx_modify = sprites_irq::$0 -Constant right-side identified [85] (byte~) render_show::toD0181_$2 ← > (const word) render_show::toD0181_$1 -Constant right-side identified [86] (byte~) render_show::toD0181_$5 ← (const byte) render_show::toD0181_$4 & (byte) $f -Constant right-side identified [88] (byte~) render_show::toD0182_$2 ← > (const word) render_show::toD0182_$1 -Constant right-side identified [89] (byte~) render_show::toD0182_$5 ← (const byte) render_show::toD0182_$4 & (byte) $f +Constant right-side identified [87] (byte~) render_show::toD0181_$2 ← > (const word) render_show::toD0181_$1 +Constant right-side identified [88] (byte~) render_show::toD0181_$5 ← (const byte) render_show::toD0181_$4 & (byte) $f +Constant right-side identified [90] (byte~) render_show::toD0182_$2 ← > (const word) render_show::toD0182_$1 +Constant right-side identified [91] (byte~) render_show::toD0182_$5 ← (const byte) render_show::toD0182_$4 & (byte) $f Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 = 3 Constant (const byte) render_show::toD0181_$2 = >render_show::toD0181_$1 @@ -8136,28 +8144,28 @@ Constant (const byte) render_show::toD0182_$2 = >render_show::toD0182_$1 Constant (const byte) render_show::toD0182_$5 = render_show::toD0182_$4&$f Successful SSA optimization Pass2ConstantIdentification Alias candidate removed (volatile)sprites_irq::raster_sprite_gfx_modify = sprites_irq::$0 -Constant right-side identified [84] (byte) render_show::toD0181_return#0 ← (const byte) render_show::toD0181_$2 | (const byte) render_show::toD0181_$5 -Constant right-side identified [85] (byte) render_show::toD0182_return#0 ← (const byte) render_show::toD0182_$2 | (const byte) render_show::toD0182_$5 +Constant right-side identified [86] (byte) render_show::toD0181_return#0 ← (const byte) render_show::toD0181_$2 | (const byte) render_show::toD0181_$5 +Constant right-side identified [87] (byte) render_show::toD0182_return#0 ← (const byte) render_show::toD0182_$2 | (const byte) render_show::toD0182_$5 Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) render_show::toD0181_return#0 = render_show::toD0181_$2|render_show::toD0181_$5 Constant (const byte) render_show::toD0182_return#0 = render_show::toD0182_$2|render_show::toD0182_$5 Successful SSA optimization Pass2ConstantIdentification Alias candidate removed (volatile)sprites_irq::raster_sprite_gfx_modify = sprites_irq::$0 -Inlining Noop Cast [194] (byte*) render_next::next_piece_gfx#0 ← (byte*)*((const word*) PIECES + (byte~) render_next::$6) keeping *(PIECES + render_next::$6) -Inlining Noop Cast [421] (byte*) current_piece_gfx#74 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) keeping *(PIECES + play_spawn_current::$7) +Inlining Noop Cast [196] (byte*) render_next::next_piece_gfx#0 ← (byte*)*((const word*) PIECES + (byte~) render_next::$6) keeping *(PIECES + render_next::$6) +Inlining Noop Cast [423] (byte*) current_piece_gfx#74 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) keeping *(PIECES + play_spawn_current::$7) Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [75] (byte~) render_init::$5 ← (byte) render_init::i#2 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [157] (byte~) render_playfield::$3 ← (byte~) render_playfield::$0 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [173] (byte~) render_moving::$6 ← (byte~) render_moving::$1 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [193] (byte~) render_next::$6 ← (byte) next_piece_idx#12 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [216] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 * (byte) 2 -Rewriting multiplication to use shift [279] (byte~) play_init::$2 ← (byte) play_init::j#2 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [289] (byte~) play_init::$3 ← (byte) play_init::b#2 * (const byte) SIZEOF_DWORD -Rewriting multiplication to use shift [384] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [404] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 * (const byte) SIZEOF_POINTER -Rewriting multiplication to use shift [420] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [462] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 * (const byte) SIZEOF_DWORD -Rewriting multiplication to use shift [485] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 * (const byte) SIZEOF_DWORD +Rewriting multiplication to use shift [77] (byte~) render_init::$5 ← (byte) render_init::i#2 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [159] (byte~) render_playfield::$3 ← (byte~) render_playfield::$0 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [175] (byte~) render_moving::$6 ← (byte~) render_moving::$1 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [195] (byte~) render_next::$6 ← (byte) next_piece_idx#12 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [218] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 * (byte) 2 +Rewriting multiplication to use shift [281] (byte~) play_init::$2 ← (byte) play_init::j#2 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [291] (byte~) play_init::$3 ← (byte) play_init::b#2 * (const byte) SIZEOF_DWORD +Rewriting multiplication to use shift [386] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [406] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 * (const byte) SIZEOF_POINTER +Rewriting multiplication to use shift [422] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [466] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 * (const byte) SIZEOF_DWORD +Rewriting multiplication to use shift [489] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 * (const byte) SIZEOF_DWORD Successful SSA optimization Pass2MultiplyToShiftRewriting Inlining constant with var siblings (const byte) keyboard_event_scan::keycode#0 Inlining constant with var siblings (const byte) keyboard_event_scan::row#0 @@ -8424,7 +8432,7 @@ Added new block during phi lifting play_collision::@14(between play_collision::@ Added new block during phi lifting play_collision::@15(between play_collision::@3 and play_collision::@2) Added new block during phi lifting play_lock_current::@6(between play_lock_current::@5 and play_lock_current::@1) Added new block during phi lifting play_lock_current::@7(between play_lock_current::@3 and play_lock_current::@2) -Added new block during phi lifting play_spawn_current::@7(between play_spawn_current::@6 and play_spawn_current::@1) +Added new block during phi lifting play_spawn_current::@8(between play_spawn_current::@6 and play_spawn_current::@1) Added new block during phi lifting play_remove_lines::@11(between play_remove_lines::@7 and play_remove_lines::@1) Added new block during phi lifting play_remove_lines::@12(between play_remove_lines::@3 and play_remove_lines::@2) Added new block during phi lifting play_remove_lines::@13(between play_remove_lines::@2 and play_remove_lines::@3) @@ -8469,7 +8477,7 @@ Adding NOP phi() at start of play_move_down::@5 Adding NOP phi() at start of play_move_down::@10 Adding NOP phi() at start of play_move_down::@15 Adding NOP phi() at start of play_spawn_current::@2 -Adding NOP phi() at start of play_spawn_current::sid_rnd1_@return +Adding NOP phi() at start of play_spawn_current::@4 Adding NOP phi() at start of play_update_score::@2 Adding NOP phi() at start of play_increase_level::@1 Adding NOP phi() at start of play_remove_lines @@ -8508,42 +8516,42 @@ Calls in [play_movement] to play_move_down:253 play_move_leftright:264 play_move Calls in [play_move_rotate] to play_collision:294 Calls in [play_move_leftright] to play_collision:351 play_collision:367 Calls in [play_move_down] to keyboard_event_pressed:377 play_collision:397 play_lock_current:402 play_remove_lines:404 play_update_score:408 play_spawn_current:411 -Calls in [play_spawn_current] to play_collision:478 -Calls in [play_update_score] to play_increase_level:506 -Calls in [keyboard_event_scan] to keyboard_matrix_read:626 keyboard_event_pressed:637 keyboard_event_pressed:643 keyboard_event_pressed:649 keyboard_event_pressed:655 -Calls in [render_init] to render_screen_original:768 render_screen_original:770 +Calls in [play_spawn_current] to play_collision:478 sid_rnd:489 +Calls in [play_update_score] to play_increase_level:510 +Calls in [keyboard_event_scan] to keyboard_matrix_read:630 keyboard_event_pressed:641 keyboard_event_pressed:647 keyboard_event_pressed:653 keyboard_event_pressed:659 +Calls in [render_init] to render_screen_original:772 render_screen_original:774 Created 167 initial phi equivalence classes Coalesced [29] next_piece_idx#82 ← next_piece_idx#18 -Coalesced [30] game_over#89 ← game_over#52 -Not coalescing [34] current_ypos#97 ← current_ypos#6 -Not coalescing [35] current_xpos#118 ← current_xpos#100 -Not coalescing [37] current_piece_char#99 ← current_piece_char#5 +Coalesced [30] game_over#88 ← game_over#52 +Not coalescing [34] current_ypos#96 ← current_ypos#6 +Not coalescing [35] current_xpos#117 ← current_xpos#100 +Not coalescing [37] current_piece_char#98 ← current_piece_char#5 Not coalescing [39] next_piece_idx#76 ← next_piece_idx#18 Coalesced [41] current_movedown_slow#95 ← current_movedown_slow#1 -Coalesced [43] current_piece_char#105 ← current_piece_char#5 -Coalesced [45] current_xpos#129 ← current_xpos#100 -Coalesced [46] current_ypos#103 ← current_ypos#6 -Coalesced [47] game_over#92 ← game_over#52 +Coalesced [43] current_piece_char#104 ← current_piece_char#5 +Coalesced [45] current_xpos#128 ← current_xpos#100 +Coalesced [46] current_ypos#102 ← current_ypos#6 +Coalesced [47] game_over#91 ← game_over#52 Coalesced [48] next_piece_idx#84 ← next_piece_idx#18 Not coalescing [67] render_screen_render#63 ← render_screen_render#18 -Not coalescing [69] current_ypos#98 ← current_ypos#19 +Not coalescing [69] current_ypos#97 ← current_ypos#19 Not coalescing [70] render_screen_render#64 ← render_screen_render#18 -Not coalescing [71] current_xpos#119 ← current_xpos#19 -Not coalescing [72] current_piece_gfx#112 ← current_piece_gfx#18 -Not coalescing [73] current_piece_char#100 ← current_piece_char#16 +Not coalescing [71] current_xpos#118 ← current_xpos#19 +Not coalescing [72] current_piece_gfx#111 ← current_piece_gfx#18 +Not coalescing [73] current_piece_char#99 ← current_piece_char#16 Not coalescing [75] render_screen_render#65 ← render_screen_render#18 Not coalescing [76] next_piece_idx#77 ← next_piece_idx#16 Coalesced [82] render_screen_show#59 ← render_screen_show#13 Coalesced [83] render_screen_render#66 ← render_screen_render#11 Coalesced [84] current_movedown_slow#96 ← current_movedown_slow#21 -Coalesced [85] current_piece#101 ← current_piece#15 -Coalesced [86] current_piece_char#106 ← current_piece_char#16 -Coalesced [87] current_orientation#103 ← current_orientation#17 -Coalesced [88] current_piece_gfx#123 ← current_piece_gfx#18 -Coalesced [89] current_xpos#130 ← current_xpos#19 -Coalesced [90] current_ypos#104 ← current_ypos#19 -Coalesced [91] game_over#93 ← game_over#15 +Coalesced [85] current_piece#100 ← current_piece#15 +Coalesced [86] current_piece_char#105 ← current_piece_char#16 +Coalesced [87] current_orientation#102 ← current_orientation#17 +Coalesced [88] current_piece_gfx#122 ← current_piece_gfx#18 +Coalesced [89] current_xpos#129 ← current_xpos#19 +Coalesced [90] current_ypos#103 ← current_ypos#19 +Coalesced [91] game_over#92 ← game_over#15 Coalesced [92] next_piece_idx#85 ← next_piece_idx#16 Coalesced [93] keyboard_events_size#90 ← keyboard_events_size#16 Coalesced [94] current_movedown_counter#59 ← current_movedown_counter#14 @@ -8553,13 +8561,13 @@ Coalesced [97] level_bcd#109 ← level_bcd#17 Coalesced (already) [98] render_screen_show#60 ← render_screen_show#16 Coalesced (already) [99] render_screen_render#67 ← render_screen_render#18 Coalesced (already) [100] current_movedown_slow#97 ← current_movedown_slow#21 -Coalesced (already) [101] current_piece#102 ← current_piece#15 -Coalesced (already) [102] current_piece_char#107 ← current_piece_char#16 -Coalesced (already) [103] current_orientation#104 ← current_orientation#17 -Coalesced (already) [104] current_piece_gfx#124 ← current_piece_gfx#18 -Coalesced (already) [105] current_xpos#131 ← current_xpos#19 -Coalesced (already) [106] current_ypos#105 ← current_ypos#19 -Coalesced (already) [107] game_over#94 ← game_over#15 +Coalesced (already) [101] current_piece#101 ← current_piece#15 +Coalesced (already) [102] current_piece_char#106 ← current_piece_char#16 +Coalesced (already) [103] current_orientation#103 ← current_orientation#17 +Coalesced (already) [104] current_piece_gfx#123 ← current_piece_gfx#18 +Coalesced (already) [105] current_xpos#130 ← current_xpos#19 +Coalesced (already) [106] current_ypos#104 ← current_ypos#19 +Coalesced (already) [107] game_over#93 ← game_over#15 Coalesced (already) [108] next_piece_idx#86 ← next_piece_idx#16 Coalesced (already) [109] keyboard_events_size#91 ← keyboard_events_size#16 Coalesced (already) [110] current_movedown_counter#60 ← current_movedown_counter#14 @@ -8608,24 +8616,24 @@ Coalesced (already) [249] render_playfield::i#7 ← render_playfield::i#1 Coalesced [250] render_playfield::screen_line#4 ← render_playfield::screen_line#1 Coalesced [251] render_playfield::c#3 ← render_playfield::c#1 Coalesced [257] play_movement::return#6 ← play_movement::render#1 -Coalesced [258] current_orientation#95 ← current_orientation#20 -Coalesced [259] current_piece_gfx#113 ← current_piece_gfx#20 -Coalesced [260] current_xpos#120 ← current_xpos#22 +Coalesced [258] current_orientation#94 ← current_orientation#20 +Coalesced [259] current_piece_gfx#112 ← current_piece_gfx#20 +Coalesced [260] current_xpos#119 ← current_xpos#22 Coalesced [273] play_movement::return#7 ← play_movement::return#0 -Coalesced [274] current_orientation#96 ← current_orientation#25 -Coalesced [275] current_piece_gfx#114 ← current_piece_gfx#21 -Coalesced [276] current_xpos#121 ← current_xpos#26 -Coalesced (already) [279] current_orientation#101 ← current_orientation#20 -Coalesced (already) [280] current_piece_gfx#120 ← current_piece_gfx#20 +Coalesced [274] current_orientation#95 ← current_orientation#25 +Coalesced [275] current_piece_gfx#113 ← current_piece_gfx#21 +Coalesced [276] current_xpos#120 ← current_xpos#26 +Coalesced (already) [279] current_orientation#100 ← current_orientation#20 +Coalesced (already) [280] current_piece_gfx#119 ← current_piece_gfx#20 Coalesced [285] play_move_rotate::orientation#7 ← play_move_rotate::orientation#2 -Not coalescing [290] current_piece#98 ← current_piece#15 +Not coalescing [290] current_piece#97 ← current_piece#15 Coalesced [291] play_collision::orientation#9 ← play_collision::orientation#3 Coalesced [292] play_collision::yp#13 ← play_collision::ypos#3 Coalesced [293] play_collision::xpos#17 ← play_collision::xpos#3 -Coalesced [300] current_orientation#102 ← current_orientation#7 -Coalesced [301] current_piece_gfx#121 ← current_piece_gfx#7 -Coalesced (already) [302] current_orientation#100 ← current_orientation#20 -Coalesced (already) [303] current_piece_gfx#119 ← current_piece_gfx#20 +Coalesced [300] current_orientation#101 ← current_orientation#7 +Coalesced [301] current_piece_gfx#120 ← current_piece_gfx#7 +Coalesced (already) [302] current_orientation#99 ← current_orientation#20 +Coalesced (already) [303] current_piece_gfx#118 ← current_piece_gfx#20 Coalesced [306] play_move_rotate::orientation#6 ← play_move_rotate::orientation#1 Coalesced [309] play_collision::yp#15 ← play_collision::yp#0 Coalesced [313] play_collision::i#11 ← play_collision::i#3 @@ -8636,70 +8644,70 @@ Coalesced [338] play_collision::l#10 ← play_collision::l#1 Not coalescing [339] play_collision::i#12 ← play_collision::i#1 Coalesced [340] play_collision::xp#9 ← play_collision::xp#1 Coalesced [341] play_collision::c#8 ← play_collision::c#1 -Not coalescing [347] current_piece#97 ← current_piece#15 +Not coalescing [347] current_piece#96 ← current_piece#15 Coalesced [348] play_collision::orientation#8 ← play_collision::orientation#2 Coalesced [349] play_collision::yp#12 ← play_collision::ypos#2 Coalesced [350] play_collision::xpos#16 ← play_collision::xpos#2 -Coalesced [356] current_xpos#127 ← current_xpos#6 -Coalesced (already) [359] current_xpos#126 ← current_xpos#22 -Not coalescing [363] current_piece#96 ← current_piece#15 +Coalesced [356] current_xpos#126 ← current_xpos#6 +Coalesced (already) [359] current_xpos#125 ← current_xpos#22 +Not coalescing [363] current_piece#95 ← current_piece#15 Coalesced [364] play_collision::orientation#7 ← play_collision::orientation#1 Coalesced [365] play_collision::yp#11 ← play_collision::ypos#1 Coalesced [366] play_collision::xpos#15 ← play_collision::xpos#1 -Coalesced [372] current_xpos#128 ← current_xpos#8 +Coalesced [372] current_xpos#127 ← current_xpos#8 Coalesced [383] play_move_down::movedown#14 ← play_move_down::movedown#2 Coalesced [387] play_move_down::movedown#16 ← play_move_down::movedown#3 -Not coalescing [393] current_piece#95 ← current_piece#10 +Not coalescing [393] current_piece#94 ← current_piece#10 Coalesced [394] play_collision::orientation#6 ← play_collision::orientation#0 Coalesced [395] play_collision::yp#10 ← play_collision::ypos#0 Coalesced [396] play_collision::xpos#14 ← play_collision::xpos#0 Coalesced (already) [409] next_piece_idx#83 ← next_piece_idx#10 -Coalesced (already) [410] game_over#90 ← game_over#10 -Coalesced [412] current_ypos#100 ← current_ypos#6 +Coalesced (already) [410] game_over#89 ← game_over#10 +Coalesced [412] current_ypos#99 ← current_ypos#6 Coalesced [413] lines_bcd#88 ← lines_bcd#17 Coalesced [414] level#104 ← level#19 Coalesced [415] current_movedown_slow#88 ← current_movedown_slow#23 Coalesced [416] level_bcd#101 ← level_bcd#19 -Coalesced [418] current_piece_char#102 ← current_piece_char#5 -Coalesced [420] current_xpos#123 ← current_xpos#100 -Coalesced [421] game_over#86 ← game_over#52 +Coalesced [418] current_piece_char#101 ← current_piece_char#5 +Coalesced [420] current_xpos#122 ← current_xpos#100 +Coalesced [421] game_over#85 ← game_over#52 Coalesced [422] next_piece_idx#79 ← next_piece_idx#18 -Coalesced (already) [424] current_ypos#101 ← current_ypos#38 +Coalesced (already) [424] current_ypos#100 ← current_ypos#38 Coalesced [425] lines_bcd#89 ← lines_bcd#26 Coalesced [426] level#105 ← level#33 Coalesced [427] current_movedown_slow#89 ← current_movedown_slow#37 Coalesced [428] level_bcd#102 ← level_bcd#31 -Coalesced [429] current_piece#93 ← current_piece#28 -Coalesced (already) [430] current_piece_char#103 ← current_piece_char#29 -Coalesced [431] current_orientation#98 ← current_orientation#37 -Coalesced [432] current_piece_gfx#117 ← current_piece_gfx#35 -Coalesced (already) [433] current_xpos#124 ← current_xpos#43 -Coalesced (already) [434] game_over#87 ← game_over#27 +Coalesced [429] current_piece#92 ← current_piece#28 +Coalesced (already) [430] current_piece_char#102 ← current_piece_char#29 +Coalesced [431] current_orientation#97 ← current_orientation#37 +Coalesced [432] current_piece_gfx#116 ← current_piece_gfx#35 +Coalesced (already) [433] current_xpos#123 ← current_xpos#43 +Coalesced (already) [434] game_over#86 ← game_over#27 Coalesced (already) [435] next_piece_idx#80 ← next_piece_idx#30 -Coalesced [439] current_ypos#99 ← current_ypos#3 +Coalesced [439] current_ypos#98 ← current_ypos#3 Coalesced (already) [440] lines_bcd#87 ← lines_bcd#19 Coalesced (already) [441] level#103 ← level#10 Coalesced (already) [442] current_movedown_slow#87 ← current_movedown_slow#14 Coalesced (already) [443] level_bcd#100 ← level_bcd#11 -Coalesced (already) [444] current_piece#91 ← current_piece#10 -Coalesced (already) [445] current_piece_char#101 ← current_piece_char#10 -Coalesced (already) [446] current_orientation#97 ← current_orientation#13 -Coalesced (already) [447] current_piece_gfx#115 ← current_piece_gfx#13 -Coalesced (already) [448] current_xpos#122 ← current_xpos#14 -Coalesced (already) [449] game_over#85 ← game_over#10 +Coalesced (already) [444] current_piece#90 ← current_piece#10 +Coalesced (already) [445] current_piece_char#100 ← current_piece_char#10 +Coalesced (already) [446] current_orientation#96 ← current_orientation#13 +Coalesced (already) [447] current_piece_gfx#114 ← current_piece_gfx#13 +Coalesced (already) [448] current_xpos#121 ← current_xpos#14 +Coalesced (already) [449] game_over#84 ← game_over#10 Coalesced (already) [450] next_piece_idx#78 ← next_piece_idx#10 Coalesced [451] current_movedown_counter#58 ← current_movedown_counter#12 -Coalesced (already) [452] current_ypos#102 ← current_ypos#11 +Coalesced (already) [452] current_ypos#101 ← current_ypos#11 Coalesced (already) [453] lines_bcd#90 ← lines_bcd#19 Coalesced (already) [454] level#106 ← level#10 Coalesced (already) [455] current_movedown_slow#90 ← current_movedown_slow#14 Coalesced (already) [456] level_bcd#103 ← level_bcd#11 -Coalesced (already) [457] current_piece#94 ← current_piece#10 -Coalesced (already) [458] current_piece_char#104 ← current_piece_char#10 -Coalesced (already) [459] current_orientation#99 ← current_orientation#13 -Coalesced (already) [460] current_piece_gfx#118 ← current_piece_gfx#13 -Coalesced (already) [461] current_xpos#125 ← current_xpos#14 -Coalesced (already) [462] game_over#88 ← game_over#10 +Coalesced (already) [457] current_piece#93 ← current_piece#10 +Coalesced (already) [458] current_piece_char#103 ← current_piece_char#10 +Coalesced (already) [459] current_orientation#98 ← current_orientation#13 +Coalesced (already) [460] current_piece_gfx#117 ← current_piece_gfx#13 +Coalesced (already) [461] current_xpos#124 ← current_xpos#14 +Coalesced (already) [462] game_over#87 ← game_over#10 Coalesced (already) [463] next_piece_idx#81 ← next_piece_idx#10 Coalesced [464] play_move_down::movedown#15 ← play_move_down::movedown#7 Coalesced [465] play_move_down::movedown#13 ← play_move_down::movedown#10 @@ -8707,106 +8715,106 @@ Coalesced (already) [466] play_move_down::movedown#12 ← play_move_down::movedo Coalesced [476] play_collision::yp#14 ← play_collision::ypos#4 Coalesced [477] play_collision::xpos#18 ← play_collision::xpos#4 Coalesced [486] next_piece_idx#18 ← play_spawn_current::piece_idx#2 -Coalesced [491] play_spawn_current::piece_idx#4 ← play_spawn_current::piece_idx#1 -Coalesced (already) [492] game_over#91 ← game_over#65 -Coalesced [507] lines_bcd#93 ← lines_bcd#29 -Coalesced [508] level#109 ← level#21 -Coalesced [509] current_movedown_slow#93 ← current_movedown_slow#65 -Coalesced [510] level_bcd#106 ← level_bcd#62 -Coalesced (already) [513] lines_bcd#92 ← lines_bcd#29 -Coalesced (already) [514] level#108 ← level#10 -Coalesced (already) [515] current_movedown_slow#92 ← current_movedown_slow#14 -Coalesced (already) [516] level_bcd#105 ← level_bcd#11 -Coalesced (already) [517] lines_bcd#91 ← lines_bcd#19 -Coalesced (already) [518] level#107 ← level#10 -Coalesced (already) [519] current_movedown_slow#91 ← current_movedown_slow#14 -Coalesced (already) [520] level_bcd#104 ← level_bcd#11 -Coalesced [524] current_movedown_slow#94 ← current_movedown_slow#10 -Coalesced [530] level_bcd#108 ← level_bcd#8 -Coalesced [540] play_increase_level::b#3 ← play_increase_level::b#1 -Coalesced [541] level_bcd#107 ← level_bcd#21 -Coalesced [545] play_remove_lines::r#10 ← play_remove_lines::r#3 -Coalesced [546] play_remove_lines::w#14 ← play_remove_lines::w#12 -Coalesced [560] play_remove_lines::w#17 ← play_remove_lines::w#2 -Coalesced [561] play_remove_lines::removed#14 ← play_remove_lines::removed#1 -Coalesced [565] play_remove_lines::w#18 ← play_remove_lines::w#11 -Coalesced [572] play_remove_lines::w#19 ← play_remove_lines::w#3 -Coalesced [573] play_remove_lines::r#9 ← play_remove_lines::r#1 -Coalesced [574] play_remove_lines::w#13 ← play_remove_lines::w#11 -Coalesced [575] play_remove_lines::y#9 ← play_remove_lines::y#1 -Coalesced [576] play_remove_lines::removed#12 ← play_remove_lines::removed#7 -Coalesced [577] play_remove_lines::w#16 ← play_remove_lines::w#1 -Coalesced (already) [578] play_remove_lines::removed#13 ← play_remove_lines::removed#11 -Coalesced (already) [579] play_remove_lines::r#11 ← play_remove_lines::r#1 -Coalesced (already) [580] play_remove_lines::w#15 ← play_remove_lines::w#1 -Coalesced [581] play_remove_lines::x#5 ← play_remove_lines::x#1 -Coalesced [582] play_remove_lines::full#5 ← play_remove_lines::full#2 -Coalesced (already) [583] play_remove_lines::full#6 ← play_remove_lines::full#4 -Coalesced [585] play_lock_current::yp#7 ← play_lock_current::yp#0 -Coalesced [590] play_lock_current::i#8 ← play_lock_current::i#3 -Coalesced [591] play_lock_current::xp#5 ← play_lock_current::xp#0 -Coalesced [603] play_lock_current::yp#8 ← play_lock_current::yp#1 -Not coalescing [604] play_lock_current::i#7 ← play_lock_current::i#1 -Coalesced [605] play_lock_current::l#7 ← play_lock_current::l#1 -Not coalescing [606] play_lock_current::i#9 ← play_lock_current::i#1 -Coalesced [607] play_lock_current::xp#6 ← play_lock_current::xp#1 -Coalesced [608] play_lock_current::c#5 ← play_lock_current::c#1 -Coalesced [618] keyboard_event_get::return#6 ← keyboard_event_get::return#1 -Coalesced [619] keyboard_events_size#89 ← keyboard_events_size#4 -Coalesced [622] keyboard_events_size#88 ← keyboard_events_size#13 -Coalesced [623] keyboard_events_size#78 ← keyboard_events_size#19 -Coalesced [631] keyboard_event_scan::keycode#17 ← keyboard_event_scan::keycode#1 -Coalesced (already) [632] keyboard_events_size#81 ← keyboard_events_size#30 -Coalesced [661] keyboard_event_scan::row#14 ← keyboard_event_scan::row#1 -Coalesced [662] keyboard_event_scan::keycode#15 ← keyboard_event_scan::keycode#13 -Coalesced (already) [663] keyboard_events_size#79 ← keyboard_events_size#13 -Coalesced [664] keyboard_event_scan::keycode#19 ← keyboard_event_scan::keycode#11 -Coalesced [665] keyboard_events_size#83 ← keyboard_events_size#30 -Coalesced [675] keyboard_events_size#87 ← keyboard_events_size#2 -Coalesced [681] keyboard_event_scan::keycode#16 ← keyboard_event_scan::keycode#14 -Coalesced [682] keyboard_events_size#80 ← keyboard_events_size#29 -Coalesced [683] keyboard_event_scan::col#8 ← keyboard_event_scan::col#1 -Coalesced (already) [684] keyboard_event_scan::keycode#18 ← keyboard_event_scan::keycode#14 -Coalesced (already) [685] keyboard_events_size#82 ← keyboard_events_size#29 -Coalesced [689] keyboard_events_size#85 ← keyboard_events_size#1 -Coalesced (already) [690] keyboard_events_size#86 ← keyboard_events_size#10 -Coalesced (already) [691] keyboard_events_size#84 ← keyboard_events_size#10 -Coalesced [727] play_init::b#3 ← play_init::b#1 -Coalesced [728] play_init::j#3 ← play_init::j#1 -Coalesced [729] play_init::pli#3 ← play_init::pli#1 -Coalesced [730] play_init::idx#3 ← play_init::idx#1 -Coalesced [755] sprites_init::s#3 ← sprites_init::s#1 -Coalesced [756] sprites_init::xpos#3 ← sprites_init::xpos#1 -Coalesced [782] render_init::i#3 ← render_init::i#1 -Coalesced [783] render_init::li_1#3 ← render_init::li_1#1 -Coalesced [784] render_init::li_2#3 ← render_init::li_2#1 -Coalesced [786] render_screen_original::screen#11 ← render_screen_original::screen#9 -Coalesced [788] render_screen_original::screen#13 ← render_screen_original::screen#8 -Coalesced [789] render_screen_original::cols#10 ← render_screen_original::cols#7 -Coalesced [797] render_screen_original::oscr#8 ← render_screen_original::oscr#4 -Coalesced [798] render_screen_original::screen#15 ← render_screen_original::screen#2 -Coalesced [799] render_screen_original::ocols#8 ← render_screen_original::ocols#4 -Coalesced [800] render_screen_original::cols#12 ← render_screen_original::cols#1 -Coalesced [801] render_screen_original::x#8 ← render_screen_original::x#1 -Coalesced [811] render_screen_original::screen#17 ← render_screen_original::screen#3 -Coalesced [812] render_screen_original::cols#14 ← render_screen_original::cols#2 -Coalesced [813] render_screen_original::x#10 ← render_screen_original::x#2 -Coalesced [824] render_screen_original::screen#12 ← render_screen_original::screen#10 -Coalesced [825] render_screen_original::cols#9 ← render_screen_original::cols#3 -Coalesced [826] render_screen_original::oscr#7 ← render_screen_original::oscr#1 -Coalesced [827] render_screen_original::ocols#7 ← render_screen_original::ocols#1 -Coalesced [828] render_screen_original::y#7 ← render_screen_original::y#1 -Coalesced [829] render_screen_original::screen#18 ← render_screen_original::screen#10 -Coalesced [830] render_screen_original::cols#15 ← render_screen_original::cols#3 -Coalesced [831] render_screen_original::x#11 ← render_screen_original::x#3 -Coalesced (already) [832] render_screen_original::oscr#9 ← render_screen_original::oscr#1 -Coalesced [833] render_screen_original::screen#16 ← render_screen_original::screen#3 -Coalesced (already) [834] render_screen_original::ocols#9 ← render_screen_original::ocols#1 -Coalesced [835] render_screen_original::cols#13 ← render_screen_original::cols#2 -Coalesced [836] render_screen_original::x#9 ← render_screen_original::x#2 -Coalesced (already) [837] render_screen_original::screen#14 ← render_screen_original::screen#2 -Coalesced (already) [838] render_screen_original::cols#11 ← render_screen_original::cols#1 -Coalesced [839] render_screen_original::x#7 ← render_screen_original::x#1 +Coalesced [493] play_spawn_current::piece_idx#4 ← play_spawn_current::piece_idx#1 +Coalesced (already) [494] game_over#90 ← game_over#65 +Coalesced [511] lines_bcd#93 ← lines_bcd#29 +Coalesced [512] level#109 ← level#21 +Coalesced [513] current_movedown_slow#93 ← current_movedown_slow#65 +Coalesced [514] level_bcd#106 ← level_bcd#62 +Coalesced (already) [517] lines_bcd#92 ← lines_bcd#29 +Coalesced (already) [518] level#108 ← level#10 +Coalesced (already) [519] current_movedown_slow#92 ← current_movedown_slow#14 +Coalesced (already) [520] level_bcd#105 ← level_bcd#11 +Coalesced (already) [521] lines_bcd#91 ← lines_bcd#19 +Coalesced (already) [522] level#107 ← level#10 +Coalesced (already) [523] current_movedown_slow#91 ← current_movedown_slow#14 +Coalesced (already) [524] level_bcd#104 ← level_bcd#11 +Coalesced [528] current_movedown_slow#94 ← current_movedown_slow#10 +Coalesced [534] level_bcd#108 ← level_bcd#8 +Coalesced [544] play_increase_level::b#3 ← play_increase_level::b#1 +Coalesced [545] level_bcd#107 ← level_bcd#21 +Coalesced [549] play_remove_lines::r#10 ← play_remove_lines::r#3 +Coalesced [550] play_remove_lines::w#14 ← play_remove_lines::w#12 +Coalesced [564] play_remove_lines::w#17 ← play_remove_lines::w#2 +Coalesced [565] play_remove_lines::removed#14 ← play_remove_lines::removed#1 +Coalesced [569] play_remove_lines::w#18 ← play_remove_lines::w#11 +Coalesced [576] play_remove_lines::w#19 ← play_remove_lines::w#3 +Coalesced [577] play_remove_lines::r#9 ← play_remove_lines::r#1 +Coalesced [578] play_remove_lines::w#13 ← play_remove_lines::w#11 +Coalesced [579] play_remove_lines::y#9 ← play_remove_lines::y#1 +Coalesced [580] play_remove_lines::removed#12 ← play_remove_lines::removed#7 +Coalesced [581] play_remove_lines::w#16 ← play_remove_lines::w#1 +Coalesced (already) [582] play_remove_lines::removed#13 ← play_remove_lines::removed#11 +Coalesced (already) [583] play_remove_lines::r#11 ← play_remove_lines::r#1 +Coalesced (already) [584] play_remove_lines::w#15 ← play_remove_lines::w#1 +Coalesced [585] play_remove_lines::x#5 ← play_remove_lines::x#1 +Coalesced [586] play_remove_lines::full#5 ← play_remove_lines::full#2 +Coalesced (already) [587] play_remove_lines::full#6 ← play_remove_lines::full#4 +Coalesced [589] play_lock_current::yp#7 ← play_lock_current::yp#0 +Coalesced [594] play_lock_current::i#8 ← play_lock_current::i#3 +Coalesced [595] play_lock_current::xp#5 ← play_lock_current::xp#0 +Coalesced [607] play_lock_current::yp#8 ← play_lock_current::yp#1 +Not coalescing [608] play_lock_current::i#7 ← play_lock_current::i#1 +Coalesced [609] play_lock_current::l#7 ← play_lock_current::l#1 +Not coalescing [610] play_lock_current::i#9 ← play_lock_current::i#1 +Coalesced [611] play_lock_current::xp#6 ← play_lock_current::xp#1 +Coalesced [612] play_lock_current::c#5 ← play_lock_current::c#1 +Coalesced [622] keyboard_event_get::return#6 ← keyboard_event_get::return#1 +Coalesced [623] keyboard_events_size#89 ← keyboard_events_size#4 +Coalesced [626] keyboard_events_size#88 ← keyboard_events_size#13 +Coalesced [627] keyboard_events_size#78 ← keyboard_events_size#19 +Coalesced [635] keyboard_event_scan::keycode#17 ← keyboard_event_scan::keycode#1 +Coalesced (already) [636] keyboard_events_size#81 ← keyboard_events_size#30 +Coalesced [665] keyboard_event_scan::row#14 ← keyboard_event_scan::row#1 +Coalesced [666] keyboard_event_scan::keycode#15 ← keyboard_event_scan::keycode#13 +Coalesced (already) [667] keyboard_events_size#79 ← keyboard_events_size#13 +Coalesced [668] keyboard_event_scan::keycode#19 ← keyboard_event_scan::keycode#11 +Coalesced [669] keyboard_events_size#83 ← keyboard_events_size#30 +Coalesced [679] keyboard_events_size#87 ← keyboard_events_size#2 +Coalesced [685] keyboard_event_scan::keycode#16 ← keyboard_event_scan::keycode#14 +Coalesced [686] keyboard_events_size#80 ← keyboard_events_size#29 +Coalesced [687] keyboard_event_scan::col#8 ← keyboard_event_scan::col#1 +Coalesced (already) [688] keyboard_event_scan::keycode#18 ← keyboard_event_scan::keycode#14 +Coalesced (already) [689] keyboard_events_size#82 ← keyboard_events_size#29 +Coalesced [693] keyboard_events_size#85 ← keyboard_events_size#1 +Coalesced (already) [694] keyboard_events_size#86 ← keyboard_events_size#10 +Coalesced (already) [695] keyboard_events_size#84 ← keyboard_events_size#10 +Coalesced [731] play_init::b#3 ← play_init::b#1 +Coalesced [732] play_init::j#3 ← play_init::j#1 +Coalesced [733] play_init::pli#3 ← play_init::pli#1 +Coalesced [734] play_init::idx#3 ← play_init::idx#1 +Coalesced [759] sprites_init::s#3 ← sprites_init::s#1 +Coalesced [760] sprites_init::xpos#3 ← sprites_init::xpos#1 +Coalesced [786] render_init::i#3 ← render_init::i#1 +Coalesced [787] render_init::li_1#3 ← render_init::li_1#1 +Coalesced [788] render_init::li_2#3 ← render_init::li_2#1 +Coalesced [790] render_screen_original::screen#11 ← render_screen_original::screen#9 +Coalesced [792] render_screen_original::screen#13 ← render_screen_original::screen#8 +Coalesced [793] render_screen_original::cols#10 ← render_screen_original::cols#7 +Coalesced [801] render_screen_original::oscr#8 ← render_screen_original::oscr#4 +Coalesced [802] render_screen_original::screen#15 ← render_screen_original::screen#2 +Coalesced [803] render_screen_original::ocols#8 ← render_screen_original::ocols#4 +Coalesced [804] render_screen_original::cols#12 ← render_screen_original::cols#1 +Coalesced [805] render_screen_original::x#8 ← render_screen_original::x#1 +Coalesced [815] render_screen_original::screen#17 ← render_screen_original::screen#3 +Coalesced [816] render_screen_original::cols#14 ← render_screen_original::cols#2 +Coalesced [817] render_screen_original::x#10 ← render_screen_original::x#2 +Coalesced [828] render_screen_original::screen#12 ← render_screen_original::screen#10 +Coalesced [829] render_screen_original::cols#9 ← render_screen_original::cols#3 +Coalesced [830] render_screen_original::oscr#7 ← render_screen_original::oscr#1 +Coalesced [831] render_screen_original::ocols#7 ← render_screen_original::ocols#1 +Coalesced [832] render_screen_original::y#7 ← render_screen_original::y#1 +Coalesced [833] render_screen_original::screen#18 ← render_screen_original::screen#10 +Coalesced [834] render_screen_original::cols#15 ← render_screen_original::cols#3 +Coalesced [835] render_screen_original::x#11 ← render_screen_original::x#3 +Coalesced (already) [836] render_screen_original::oscr#9 ← render_screen_original::oscr#1 +Coalesced [837] render_screen_original::screen#16 ← render_screen_original::screen#3 +Coalesced (already) [838] render_screen_original::ocols#9 ← render_screen_original::ocols#1 +Coalesced [839] render_screen_original::cols#13 ← render_screen_original::cols#2 +Coalesced [840] render_screen_original::x#9 ← render_screen_original::x#2 +Coalesced (already) [841] render_screen_original::screen#14 ← render_screen_original::screen#2 +Coalesced (already) [842] render_screen_original::cols#11 ← render_screen_original::cols#1 +Coalesced [843] render_screen_original::x#7 ← render_screen_original::x#1 Coalesced down to 93 phi equivalence classes Culled Empty Block (label) @1 Culled Empty Block (label) toSpritePtr1_@return @@ -8840,8 +8848,7 @@ Culled Empty Block (label) play_move_down::@21 Culled Empty Block (label) play_move_down::@20 Culled Empty Block (label) play_move_down::@19 Culled Empty Block (label) play_spawn_current::@2 -Culled Empty Block (label) play_spawn_current::@4 -Culled Empty Block (label) play_spawn_current::sid_rnd1_@return +Culled Empty Block (label) play_spawn_current::@5 Culled Empty Block (label) play_update_score::@3 Culled Empty Block (label) play_update_score::@5 Culled Empty Block (label) play_update_score::@4 @@ -8947,9 +8954,10 @@ Renumbering block play_collision::@12 to play_collision::@8 Renumbering block play_collision::@14 to play_collision::@9 Renumbering block play_collision::@15 to play_collision::@10 Renumbering block play_spawn_current::@3 to play_spawn_current::@2 -Renumbering block play_spawn_current::@5 to play_spawn_current::@3 +Renumbering block play_spawn_current::@4 to play_spawn_current::@3 Renumbering block play_spawn_current::@6 to play_spawn_current::@4 Renumbering block play_spawn_current::@7 to play_spawn_current::@5 +Renumbering block play_spawn_current::@8 to play_spawn_current::@6 Renumbering block play_remove_lines::@5 to play_remove_lines::@4 Renumbering block play_remove_lines::@6 to play_remove_lines::@5 Renumbering block play_remove_lines::@7 to play_remove_lines::@6 @@ -9005,7 +9013,8 @@ Adding NOP phi() at start of play_move_down::@4 Adding NOP phi() at start of play_move_down::@9 Adding NOP phi() at start of play_move_down::@14 Adding NOP phi() at start of play_move_down::@16 -Adding NOP phi() at start of play_spawn_current::@5 +Adding NOP phi() at start of play_spawn_current::@6 +Adding NOP phi() at start of play_spawn_current::@3 Adding NOP phi() at start of play_update_score::@2 Adding NOP phi() at start of play_remove_lines Adding NOP phi() at start of play_remove_lines::@9 @@ -9106,10 +9115,10 @@ main::@14: scope:[main] from main::@13 [28] call render_playfield to:main::@15 main::@15: scope:[main] from main::@14 - [29] (byte) current_ypos#97 ← (byte) current_ypos#6 - [30] (byte) current_xpos#118 ← (byte) current_xpos#100 - [31] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) - [32] (byte) current_piece_char#99 ← (byte) current_piece_char#5 + [29] (byte) current_ypos#96 ← (byte) current_ypos#6 + [30] (byte) current_xpos#117 ← (byte) current_xpos#100 + [31] (byte*) current_piece_gfx#110 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [32] (byte) current_piece_char#98 ← (byte) current_piece_char#5 [33] call render_moving to:main::@16 main::@16: scope:[main] from main::@15 @@ -9117,8 +9126,8 @@ main::@16: scope:[main] from main::@15 [35] call render_next to:main::@17 main::@17: scope:[main] from main::@16 - [36] (byte*) current_piece#100 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) - [37] (byte*) current_piece_gfx#122 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [36] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [37] (byte*) current_piece_gfx#121 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) to:main::@1 main::@1: scope:[main] from main::@17 main::@25 main::@6 [38] (byte) level_bcd#11 ← phi( main::@17/(byte) 0 main::@25/(byte) level_bcd#17 main::@6/(byte) level_bcd#17 ) @@ -9130,10 +9139,10 @@ main::@1: scope:[main] from main::@17 main::@25 main::@6 [38] (byte) game_over#10 ← phi( main::@17/(byte) game_over#52 main::@25/(byte) game_over#15 main::@6/(byte) game_over#15 ) [38] (byte) current_ypos#11 ← phi( main::@17/(byte) current_ypos#6 main::@25/(byte) current_ypos#19 main::@6/(byte) current_ypos#19 ) [38] (byte) current_xpos#14 ← phi( main::@17/(byte) current_xpos#100 main::@25/(byte) current_xpos#19 main::@6/(byte) current_xpos#19 ) - [38] (byte*) current_piece_gfx#13 ← phi( main::@17/(byte*) current_piece_gfx#122 main::@25/(byte*) current_piece_gfx#18 main::@6/(byte*) current_piece_gfx#18 ) + [38] (byte*) current_piece_gfx#13 ← phi( main::@17/(byte*) current_piece_gfx#121 main::@25/(byte*) current_piece_gfx#18 main::@6/(byte*) current_piece_gfx#18 ) [38] (byte) current_orientation#13 ← phi( main::@17/(byte) 0 main::@25/(byte) current_orientation#17 main::@6/(byte) current_orientation#17 ) [38] (byte) current_piece_char#10 ← phi( main::@17/(byte) current_piece_char#5 main::@25/(byte) current_piece_char#16 main::@6/(byte) current_piece_char#16 ) - [38] (byte*) current_piece#10 ← phi( main::@17/(byte*) current_piece#100 main::@25/(byte*) current_piece#15 main::@6/(byte*) current_piece#15 ) + [38] (byte*) current_piece#10 ← phi( main::@17/(byte*) current_piece#99 main::@25/(byte*) current_piece#15 main::@6/(byte*) current_piece#15 ) [38] (byte) current_movedown_slow#14 ← phi( main::@17/(byte) current_movedown_slow#1 main::@25/(byte) current_movedown_slow#21 main::@6/(byte) current_movedown_slow#21 ) [38] (byte) render_screen_render#18 ← phi( main::@17/(byte) $20 main::@25/(byte) render_screen_render#11 main::@6/(byte) render_screen_render#18 ) [38] (byte) render_screen_show#16 ← phi( main::@17/(byte) 0 main::@25/(byte) render_screen_show#13 main::@6/(byte) render_screen_show#16 ) @@ -9177,11 +9186,11 @@ main::@7: scope:[main] from main::@6 [56] call render_playfield to:main::@22 main::@22: scope:[main] from main::@7 - [57] (byte) current_ypos#98 ← (byte) current_ypos#19 + [57] (byte) current_ypos#97 ← (byte) current_ypos#19 [58] (byte) render_screen_render#64 ← (byte) render_screen_render#18 - [59] (byte) current_xpos#119 ← (byte) current_xpos#19 - [60] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 - [61] (byte) current_piece_char#100 ← (byte) current_piece_char#16 + [59] (byte) current_xpos#118 ← (byte) current_xpos#19 + [60] (byte*) current_piece_gfx#111 ← (byte*) current_piece_gfx#18 + [61] (byte) current_piece_char#99 ← (byte) current_piece_char#16 [62] call render_moving to:main::@23 main::@23: scope:[main] from main::@22 @@ -9324,11 +9333,11 @@ render_next::@5: scope:[render_next] from render_next::@4 (void()) render_moving() render_moving: scope:[render_moving] from main::@15 main::@22 - [128] (byte) current_piece_char#68 ← phi( main::@15/(byte) current_piece_char#99 main::@22/(byte) current_piece_char#100 ) - [128] (byte*) current_piece_gfx#64 ← phi( main::@15/(byte*) current_piece_gfx#111 main::@22/(byte*) current_piece_gfx#112 ) - [128] (byte) current_xpos#59 ← phi( main::@15/(byte) current_xpos#118 main::@22/(byte) current_xpos#119 ) + [128] (byte) current_piece_char#68 ← phi( main::@15/(byte) current_piece_char#98 main::@22/(byte) current_piece_char#99 ) + [128] (byte*) current_piece_gfx#64 ← phi( main::@15/(byte*) current_piece_gfx#110 main::@22/(byte*) current_piece_gfx#111 ) + [128] (byte) current_xpos#59 ← phi( main::@15/(byte) current_xpos#117 main::@22/(byte) current_xpos#118 ) [128] (byte) render_screen_render#33 ← phi( main::@15/(byte) $20 main::@22/(byte) render_screen_render#64 ) - [128] (byte) current_ypos#13 ← phi( main::@15/(byte) current_ypos#97 main::@22/(byte) current_ypos#98 ) + [128] (byte) current_ypos#13 ← phi( main::@15/(byte) current_ypos#96 main::@22/(byte) current_ypos#97 ) [129] (byte) render_moving::ypos#0 ← (byte) current_ypos#13 to:render_moving::@1 render_moving::@1: scope:[render_moving] from render_moving render_moving::@3 @@ -9457,7 +9466,7 @@ play_move_rotate::@3: scope:[play_move_rotate] from play_move_rotate::@1 play_m [188] (byte) play_collision::xpos#3 ← (byte) current_xpos#26 [189] (byte) play_collision::ypos#3 ← (byte) current_ypos#19 [190] (byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3 - [191] (byte*) current_piece#98 ← (byte*) current_piece#15 + [191] (byte*) current_piece#97 ← (byte*) current_piece#15 [192] call play_collision [193] (byte) play_collision::return#14 ← (byte) play_collision::return#15 to:play_move_rotate::@6 @@ -9479,7 +9488,7 @@ play_collision: scope:[play_collision] from play_move_down::@8 play_move_leftri [200] (byte) play_collision::xpos#6 ← phi( play_move_down::@8/(byte) play_collision::xpos#0 play_move_leftright::@1/(byte) play_collision::xpos#1 play_move_leftright::@3/(byte) play_collision::xpos#2 play_move_rotate::@3/(byte) play_collision::xpos#3 play_spawn_current/(byte) play_collision::xpos#4 ) [200] (byte) play_collision::yp#0 ← phi( play_move_down::@8/(byte) play_collision::ypos#0 play_move_leftright::@1/(byte) play_collision::ypos#1 play_move_leftright::@3/(byte) play_collision::ypos#2 play_move_rotate::@3/(byte) play_collision::ypos#3 play_spawn_current/(byte) play_collision::ypos#4 ) [200] (byte) play_collision::orientation#5 ← phi( play_move_down::@8/(byte) play_collision::orientation#0 play_move_leftright::@1/(byte) play_collision::orientation#1 play_move_leftright::@3/(byte) play_collision::orientation#2 play_move_rotate::@3/(byte) play_collision::orientation#3 play_spawn_current/(byte) 0 ) - [200] (byte*) current_piece#17 ← phi( play_move_down::@8/(byte*) current_piece#95 play_move_leftright::@1/(byte*) current_piece#96 play_move_leftright::@3/(byte*) current_piece#97 play_move_rotate::@3/(byte*) current_piece#98 play_spawn_current/(byte*) current_piece#99 ) + [200] (byte*) current_piece#17 ← phi( play_move_down::@8/(byte*) current_piece#94 play_move_leftright::@1/(byte*) current_piece#95 play_move_leftright::@3/(byte*) current_piece#96 play_move_rotate::@3/(byte*) current_piece#97 play_spawn_current/(byte*) current_piece#98 ) [201] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 to:play_collision::@1 play_collision::@1: scope:[play_collision] from play_collision play_collision::@9 @@ -9542,7 +9551,7 @@ play_move_leftright::@3: scope:[play_move_leftright] from play_move_leftright:: [226] (byte) play_collision::xpos#2 ← (byte) current_xpos#22 + (byte) 1 [227] (byte) play_collision::ypos#2 ← (byte) current_ypos#19 [228] (byte) play_collision::orientation#2 ← (byte) current_orientation#20 - [229] (byte*) current_piece#97 ← (byte*) current_piece#15 + [229] (byte*) current_piece#96 ← (byte*) current_piece#15 [230] call play_collision [231] (byte) play_collision::return#13 ← (byte) play_collision::return#15 to:play_move_leftright::@7 @@ -9562,7 +9571,7 @@ play_move_leftright::@1: scope:[play_move_leftright] from play_move_leftright [237] (byte) play_collision::xpos#1 ← (byte) current_xpos#22 - (byte) 1 [238] (byte) play_collision::ypos#1 ← (byte) current_ypos#19 [239] (byte) play_collision::orientation#1 ← (byte) current_orientation#20 - [240] (byte*) current_piece#96 ← (byte*) current_piece#15 + [240] (byte*) current_piece#95 ← (byte*) current_piece#15 [241] call play_collision [242] (byte) play_collision::return#1 ← (byte) play_collision::return#15 to:play_move_leftright::@6 @@ -9612,7 +9621,7 @@ play_move_down::@8: scope:[play_move_down] from play_move_down::@3 [261] (byte) play_collision::ypos#0 ← (byte) current_ypos#11 + (byte) 1 [262] (byte) play_collision::xpos#0 ← (byte) current_xpos#14 [263] (byte) play_collision::orientation#0 ← (byte) current_orientation#13 - [264] (byte*) current_piece#95 ← (byte*) current_piece#10 + [264] (byte*) current_piece#94 ← (byte*) current_piece#10 [265] call play_collision [266] (byte) play_collision::return#0 ← (byte) play_collision::return#15 to:play_move_down::@13 @@ -9639,17 +9648,17 @@ play_move_down::@16: scope:[play_move_down] from play_move_down::@15 [278] call play_spawn_current to:play_move_down::@17 play_move_down::@17: scope:[play_move_down] from play_move_down::@16 - [279] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) - [280] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [279] (byte*) current_piece#91 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [280] (byte*) current_piece_gfx#115 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) to:play_move_down::@11 play_move_down::@11: scope:[play_move_down] from play_move_down::@10 play_move_down::@17 [281] (byte) next_piece_idx#30 ← phi( play_move_down::@10/(byte) next_piece_idx#10 play_move_down::@17/(byte) play_spawn_current::piece_idx#2 ) [281] (byte) game_over#27 ← phi( play_move_down::@10/(byte) game_over#10 play_move_down::@17/(byte) game_over#52 ) [281] (byte) current_xpos#43 ← phi( play_move_down::@10/(byte) current_xpos#14 play_move_down::@17/(byte) current_xpos#100 ) - [281] (byte*) current_piece_gfx#35 ← phi( play_move_down::@10/(byte*) current_piece_gfx#13 play_move_down::@17/(byte*) current_piece_gfx#116 ) + [281] (byte*) current_piece_gfx#35 ← phi( play_move_down::@10/(byte*) current_piece_gfx#13 play_move_down::@17/(byte*) current_piece_gfx#115 ) [281] (byte) current_orientation#37 ← phi( play_move_down::@10/(byte) current_orientation#13 play_move_down::@17/(byte) 0 ) [281] (byte) current_piece_char#29 ← phi( play_move_down::@10/(byte) current_piece_char#10 play_move_down::@17/(byte) current_piece_char#5 ) - [281] (byte*) current_piece#28 ← phi( play_move_down::@10/(byte*) current_piece#10 play_move_down::@17/(byte*) current_piece#92 ) + [281] (byte*) current_piece#28 ← phi( play_move_down::@10/(byte*) current_piece#10 play_move_down::@17/(byte*) current_piece#91 ) [281] (byte) level_bcd#31 ← phi( play_move_down::@10/(byte) level_bcd#11 play_move_down::@17/(byte) level_bcd#19 ) [281] (byte) current_movedown_slow#37 ← phi( play_move_down::@10/(byte) current_movedown_slow#14 play_move_down::@17/(byte) current_movedown_slow#23 ) [281] (byte) level#33 ← phi( play_move_down::@10/(byte) level#10 play_move_down::@17/(byte) level#19 ) @@ -9688,605 +9697,616 @@ play_spawn_current: scope:[play_spawn_current] from main::@12 main::@13 play_mo [290] (byte) current_ypos#6 ← *((const byte*) PIECES_START_Y + (byte) play_spawn_current::current_piece_idx#0) [291] (byte) play_collision::xpos#4 ← (byte) current_xpos#100 [292] (byte) play_collision::ypos#4 ← (byte) current_ypos#6 - [293] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) + [293] (byte*) current_piece#98 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [294] call play_collision [295] (byte) play_collision::return#10 ← (byte) play_collision::return#15 to:play_spawn_current::@4 play_spawn_current::@4: scope:[play_spawn_current] from play_spawn_current [296] (byte~) play_spawn_current::$1 ← (byte) play_collision::return#10 - [297] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@5 + [297] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@6 to:play_spawn_current::@1 -play_spawn_current::@5: scope:[play_spawn_current] from play_spawn_current::@4 +play_spawn_current::@6: scope:[play_spawn_current] from play_spawn_current::@4 [298] phi() to:play_spawn_current::@1 -play_spawn_current::@1: scope:[play_spawn_current] from play_spawn_current::@4 play_spawn_current::@5 - [299] (byte) game_over#52 ← phi( play_spawn_current::@4/(byte) 1 play_spawn_current::@5/(byte) game_over#65 ) +play_spawn_current::@1: scope:[play_spawn_current] from play_spawn_current::@4 play_spawn_current::@6 + [299] (byte) game_over#52 ← phi( play_spawn_current::@4/(byte) 1 play_spawn_current::@6/(byte) game_over#65 ) to:play_spawn_current::@2 -play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@3 - [300] (byte) play_spawn_current::piece_idx#2 ← phi( play_spawn_current::@1/(byte) 7 play_spawn_current::@3/(byte) play_spawn_current::piece_idx#1 ) - [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 +play_spawn_current::@2: scope:[play_spawn_current] from play_spawn_current::@1 play_spawn_current::@5 + [300] (byte) play_spawn_current::piece_idx#2 ← phi( play_spawn_current::@1/(byte) 7 play_spawn_current::@5/(byte) play_spawn_current::piece_idx#1 ) + [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::@3 to:play_spawn_current::@return play_spawn_current::@return: scope:[play_spawn_current] from play_spawn_current::@2 [302] return to:@return -play_spawn_current::sid_rnd1: scope:[play_spawn_current] from play_spawn_current::@2 - [303] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) - to:play_spawn_current::@3 -play_spawn_current::@3: scope:[play_spawn_current] from play_spawn_current::sid_rnd1 - [304] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 +play_spawn_current::@3: scope:[play_spawn_current] from play_spawn_current::@2 + [303] phi() + [304] call sid_rnd + [305] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + to:play_spawn_current::@5 +play_spawn_current::@5: scope:[play_spawn_current] from play_spawn_current::@3 + [306] (byte~) play_spawn_current::$5 ← (byte) sid_rnd::return#2 + [307] (byte) play_spawn_current::piece_idx#1 ← (byte~) play_spawn_current::$5 & (byte) 7 to:play_spawn_current::@2 +(byte()) sid_rnd() +sid_rnd: scope:[sid_rnd] from play_spawn_current::@3 + [308] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) + to:sid_rnd::@return +sid_rnd::@return: scope:[sid_rnd] from sid_rnd + [309] return + to:@return + (void()) play_update_score((byte) play_update_score::removed) play_update_score: scope:[play_update_score] from play_move_down::@15 - [305] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return + [310] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return to:play_update_score::@1 play_update_score::@1: scope:[play_update_score] from play_update_score - [306] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 - [307] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 - [308] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 - [309] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) + [311] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 + [312] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 + [313] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 + [314] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) asm { sed } - [311] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 - [312] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 + [316] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 + [317] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 asm { cld } - [314] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 - [315] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 - [316] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return + [319] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 + [320] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 + [321] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return to:play_update_score::@2 play_update_score::@2: scope:[play_update_score] from play_update_score::@1 - [317] phi() - [318] call play_increase_level + [322] phi() + [323] call play_increase_level to:play_update_score::@return play_update_score::@return: scope:[play_update_score] from play_update_score play_update_score::@1 play_update_score::@2 - [319] (byte) level_bcd#19 ← phi( play_update_score/(byte) level_bcd#11 play_update_score::@1/(byte) level_bcd#11 play_update_score::@2/(byte) level_bcd#62 ) - [319] (byte) current_movedown_slow#23 ← phi( play_update_score/(byte) current_movedown_slow#14 play_update_score::@1/(byte) current_movedown_slow#14 play_update_score::@2/(byte) current_movedown_slow#65 ) - [319] (byte) level#19 ← phi( play_update_score/(byte) level#10 play_update_score::@1/(byte) level#10 play_update_score::@2/(byte) level#21 ) - [319] (word) lines_bcd#17 ← phi( play_update_score/(word) lines_bcd#19 play_update_score::@1/(word) lines_bcd#29 play_update_score::@2/(word) lines_bcd#29 ) - [320] return + [324] (byte) level_bcd#19 ← phi( play_update_score/(byte) level_bcd#11 play_update_score::@1/(byte) level_bcd#11 play_update_score::@2/(byte) level_bcd#62 ) + [324] (byte) current_movedown_slow#23 ← phi( play_update_score/(byte) current_movedown_slow#14 play_update_score::@1/(byte) current_movedown_slow#14 play_update_score::@2/(byte) current_movedown_slow#65 ) + [324] (byte) level#19 ← phi( play_update_score/(byte) level#10 play_update_score::@1/(byte) level#10 play_update_score::@2/(byte) level#21 ) + [324] (word) lines_bcd#17 ← phi( play_update_score/(word) lines_bcd#19 play_update_score::@1/(word) lines_bcd#29 play_update_score::@2/(word) lines_bcd#29 ) + [325] return to:@return (void()) play_increase_level() play_increase_level: scope:[play_increase_level] from play_update_score::@2 - [321] (byte) level#21 ← ++ (byte) level#10 - [322] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 + [326] (byte) level#21 ← ++ (byte) level#10 + [327] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 to:play_increase_level::@3 play_increase_level::@3: scope:[play_increase_level] from play_increase_level - [323] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) + [328] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) to:play_increase_level::@1 play_increase_level::@1: scope:[play_increase_level] from play_increase_level play_increase_level::@3 - [324] (byte) current_movedown_slow#65 ← phi( play_increase_level/(byte) 1 play_increase_level::@3/(byte) current_movedown_slow#10 ) - [325] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 - [326] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f - [327] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 + [329] (byte) current_movedown_slow#65 ← phi( play_increase_level/(byte) 1 play_increase_level::@3/(byte) current_movedown_slow#10 ) + [330] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 + [331] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f + [332] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 to:play_increase_level::@4 play_increase_level::@4: scope:[play_increase_level] from play_increase_level::@1 - [328] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 + [333] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 to:play_increase_level::@2 play_increase_level::@2: scope:[play_increase_level] from play_increase_level::@1 play_increase_level::@4 - [329] (byte) level_bcd#62 ← phi( play_increase_level::@1/(byte) level_bcd#21 play_increase_level::@4/(byte) level_bcd#8 ) + [334] (byte) level_bcd#62 ← phi( play_increase_level::@1/(byte) level_bcd#21 play_increase_level::@4/(byte) level_bcd#8 ) asm { sed } to:play_increase_level::@5 play_increase_level::@5: scope:[play_increase_level] from play_increase_level::@2 play_increase_level::@5 - [331] (byte) play_increase_level::b#2 ← phi( play_increase_level::@2/(byte) 0 play_increase_level::@5/(byte) play_increase_level::b#1 ) - [332] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 - [333] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) - [334] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 - [335] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 + [336] (byte) play_increase_level::b#2 ← phi( play_increase_level::@2/(byte) 0 play_increase_level::@5/(byte) play_increase_level::b#1 ) + [337] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 + [338] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) + [339] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 + [340] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 to:play_increase_level::@6 play_increase_level::@6: scope:[play_increase_level] from play_increase_level::@5 asm { cld } to:play_increase_level::@return play_increase_level::@return: scope:[play_increase_level] from play_increase_level::@6 - [337] return + [342] return to:@return (byte()) play_remove_lines() play_remove_lines: scope:[play_remove_lines] from play_move_down::@14 - [338] phi() + [343] phi() to:play_remove_lines::@1 play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_remove_lines::@6 - [339] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::removed#7 ) - [339] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::y#1 ) - [339] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) - [339] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::r#1 ) + [344] (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::removed#7 ) + [344] (byte) play_remove_lines::y#8 ← phi( play_remove_lines/(byte) 0 play_remove_lines::@6/(byte) play_remove_lines::y#1 ) + [344] (byte) play_remove_lines::w#12 ← phi( play_remove_lines/(const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::w#11 ) + [344] (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 play_remove_lines::@6/(byte) play_remove_lines::r#1 ) to:play_remove_lines::@2 play_remove_lines::@2: scope:[play_remove_lines] from play_remove_lines::@1 play_remove_lines::@3 - [340] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 ) - [340] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 ) - [340] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 ) - [340] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 ) - [341] (byte) play_remove_lines::c#0 ← *((const byte*) playfield + (byte) play_remove_lines::r#2) - [342] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 - [343] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 + [345] (byte) play_remove_lines::full#4 ← phi( play_remove_lines::@1/(byte) 1 play_remove_lines::@3/(byte) play_remove_lines::full#2 ) + [345] (byte) play_remove_lines::x#2 ← phi( play_remove_lines::@1/(byte) 0 play_remove_lines::@3/(byte) play_remove_lines::x#1 ) + [345] (byte) play_remove_lines::w#4 ← phi( play_remove_lines::@1/(byte) play_remove_lines::w#12 play_remove_lines::@3/(byte) play_remove_lines::w#1 ) + [345] (byte) play_remove_lines::r#2 ← phi( play_remove_lines::@1/(byte) play_remove_lines::r#3 play_remove_lines::@3/(byte) play_remove_lines::r#1 ) + [346] (byte) play_remove_lines::c#0 ← *((const byte*) playfield + (byte) play_remove_lines::r#2) + [347] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 + [348] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 to:play_remove_lines::@3 play_remove_lines::@9: scope:[play_remove_lines] from play_remove_lines::@2 - [344] phi() + [349] phi() to:play_remove_lines::@3 play_remove_lines::@3: scope:[play_remove_lines] from play_remove_lines::@2 play_remove_lines::@9 - [345] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@9/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte) 0 ) - [346] *((const byte*) playfield + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 - [347] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 - [348] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 - [349] if((byte) play_remove_lines::x#1!=(const nomodify byte) PLAYFIELD_COLS-(byte) 1+(byte) 1) goto play_remove_lines::@2 + [350] (byte) play_remove_lines::full#2 ← phi( play_remove_lines::@9/(byte) play_remove_lines::full#4 play_remove_lines::@2/(byte) 0 ) + [351] *((const byte*) playfield + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 + [352] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 + [353] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 + [354] if((byte) play_remove_lines::x#1!=(const nomodify byte) PLAYFIELD_COLS-(byte) 1+(byte) 1) goto play_remove_lines::@2 to:play_remove_lines::@4 play_remove_lines::@4: scope:[play_remove_lines] from play_remove_lines::@3 - [350] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 + [355] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 to:play_remove_lines::@5 play_remove_lines::@5: scope:[play_remove_lines] from play_remove_lines::@4 - [351] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS - [352] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 + [356] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS + [357] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 to:play_remove_lines::@6 play_remove_lines::@6: scope:[play_remove_lines] from play_remove_lines::@4 play_remove_lines::@5 - [353] (byte) play_remove_lines::removed#7 ← phi( play_remove_lines::@4/(byte) play_remove_lines::removed#11 play_remove_lines::@5/(byte) play_remove_lines::removed#1 ) - [353] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#1 play_remove_lines::@5/(byte) play_remove_lines::w#2 ) - [354] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 - [355] if((byte) play_remove_lines::y#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_remove_lines::@1 + [358] (byte) play_remove_lines::removed#7 ← phi( play_remove_lines::@4/(byte) play_remove_lines::removed#11 play_remove_lines::@5/(byte) play_remove_lines::removed#1 ) + [358] (byte) play_remove_lines::w#11 ← phi( play_remove_lines::@4/(byte) play_remove_lines::w#1 play_remove_lines::@5/(byte) play_remove_lines::w#2 ) + [359] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 + [360] if((byte) play_remove_lines::y#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_remove_lines::@1 to:play_remove_lines::@7 play_remove_lines::@7: scope:[play_remove_lines] from play_remove_lines::@6 play_remove_lines::@8 - [356] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@6/(byte) play_remove_lines::w#11 play_remove_lines::@8/(byte) play_remove_lines::w#3 ) - [357] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 + [361] (byte) play_remove_lines::w#6 ← phi( play_remove_lines::@6/(byte) play_remove_lines::w#11 play_remove_lines::@8/(byte) play_remove_lines::w#3 ) + [362] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 to:play_remove_lines::@return play_remove_lines::@return: scope:[play_remove_lines] from play_remove_lines::@7 - [358] return + [363] return to:@return play_remove_lines::@8: scope:[play_remove_lines] from play_remove_lines::@7 - [359] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 - [360] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 + [364] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 + [365] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 to:play_remove_lines::@7 (void()) play_lock_current() play_lock_current: scope:[play_lock_current] from play_move_down::@9 - [361] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 + [366] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 to:play_lock_current::@1 play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lock_current::@6 - [362] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::l#1 ) - [362] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::i#7 ) - [362] (byte) play_lock_current::yp#2 ← phi( play_lock_current/(byte) play_lock_current::yp#0 play_lock_current::@6/(byte) play_lock_current::yp#1 ) - [363] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 - [364] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) - [365] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 + [367] (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::l#1 ) + [367] (byte) play_lock_current::i#3 ← phi( play_lock_current/(byte) 0 play_lock_current::@6/(byte) play_lock_current::i#7 ) + [367] (byte) play_lock_current::yp#2 ← phi( play_lock_current/(byte) play_lock_current::yp#0 play_lock_current::@6/(byte) play_lock_current::yp#1 ) + [368] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 + [369] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) + [370] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 to:play_lock_current::@2 play_lock_current::@2: scope:[play_lock_current] from play_lock_current::@1 play_lock_current::@7 - [366] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte) 0 play_lock_current::@7/(byte) play_lock_current::c#1 ) - [366] (byte) play_lock_current::xp#2 ← phi( play_lock_current::@1/(byte) play_lock_current::xp#0 play_lock_current::@7/(byte) play_lock_current::xp#1 ) - [366] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@7/(byte) play_lock_current::i#9 ) - [367] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 - [368] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 + [371] (byte) play_lock_current::c#2 ← phi( play_lock_current::@1/(byte) 0 play_lock_current::@7/(byte) play_lock_current::c#1 ) + [371] (byte) play_lock_current::xp#2 ← phi( play_lock_current::@1/(byte) play_lock_current::xp#0 play_lock_current::@7/(byte) play_lock_current::xp#1 ) + [371] (byte) play_lock_current::i#2 ← phi( play_lock_current::@1/(byte) play_lock_current::i#3 play_lock_current::@7/(byte) play_lock_current::i#9 ) + [372] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 + [373] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 to:play_lock_current::@4 play_lock_current::@4: scope:[play_lock_current] from play_lock_current::@2 - [369] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 + [374] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 to:play_lock_current::@3 play_lock_current::@3: scope:[play_lock_current] from play_lock_current::@2 play_lock_current::@4 - [370] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 - [371] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 - [372] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 + [375] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 + [376] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 + [377] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 to:play_lock_current::@5 play_lock_current::@5: scope:[play_lock_current] from play_lock_current::@3 - [373] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 - [374] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 - [375] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 + [378] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 + [379] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 + [380] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 to:play_lock_current::@return play_lock_current::@return: scope:[play_lock_current] from play_lock_current::@5 - [376] return + [381] return to:@return play_lock_current::@6: scope:[play_lock_current] from play_lock_current::@5 - [377] (byte) play_lock_current::i#7 ← (byte) play_lock_current::i#1 + [382] (byte) play_lock_current::i#7 ← (byte) play_lock_current::i#1 to:play_lock_current::@1 play_lock_current::@7: scope:[play_lock_current] from play_lock_current::@3 - [378] (byte) play_lock_current::i#9 ← (byte) play_lock_current::i#1 + [383] (byte) play_lock_current::i#9 ← (byte) play_lock_current::i#1 to:play_lock_current::@2 (byte()) keyboard_event_pressed((byte) keyboard_event_pressed::keycode) keyboard_event_pressed: scope:[keyboard_event_pressed] from keyboard_event_scan::@1 keyboard_event_scan::@17 keyboard_event_scan::@2 keyboard_event_scan::@3 play_move_down::@1 - [379] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@1/(const nomodify byte) KEY_RSHIFT keyboard_event_scan::@17/(const nomodify byte) KEY_LSHIFT keyboard_event_scan::@2/(const nomodify byte) KEY_CTRL keyboard_event_scan::@3/(const nomodify byte) KEY_COMMODORE play_move_down::@1/(const nomodify byte) KEY_SPACE ) - [380] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 - [381] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0) - [382] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 - [383] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) + [384] (byte) keyboard_event_pressed::keycode#5 ← phi( keyboard_event_scan::@1/(const nomodify byte) KEY_RSHIFT keyboard_event_scan::@17/(const nomodify byte) KEY_LSHIFT keyboard_event_scan::@2/(const nomodify byte) KEY_CTRL keyboard_event_scan::@3/(const nomodify byte) KEY_COMMODORE play_move_down::@1/(const nomodify byte) KEY_SPACE ) + [385] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 + [386] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0) + [387] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 + [388] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) to:keyboard_event_pressed::@return keyboard_event_pressed::@return: scope:[keyboard_event_pressed] from keyboard_event_pressed - [384] return + [389] return to:@return (byte()) keyboard_event_get() keyboard_event_get: scope:[keyboard_event_get] from main::@19 - [385] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return + [390] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return to:keyboard_event_get::@1 keyboard_event_get::@1: scope:[keyboard_event_get] from keyboard_event_get - [386] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 - [387] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) + [391] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 + [392] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) to:keyboard_event_get::@return keyboard_event_get::@return: scope:[keyboard_event_get] from keyboard_event_get keyboard_event_get::@1 - [388] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@1/(byte) keyboard_events_size#4 ) - [388] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte) $ff keyboard_event_get::@1/(byte) keyboard_event_get::return#1 ) - [389] return + [393] (byte) keyboard_events_size#16 ← phi( keyboard_event_get/(byte) keyboard_events_size#13 keyboard_event_get::@1/(byte) keyboard_events_size#4 ) + [393] (byte) keyboard_event_get::return#2 ← phi( keyboard_event_get/(byte) $ff keyboard_event_get::@1/(byte) keyboard_event_get::return#1 ) + [394] return to:@return (void()) keyboard_event_scan() keyboard_event_scan: scope:[keyboard_event_scan] from main::@18 - [390] phi() + [395] phi() to:keyboard_event_scan::@7 keyboard_event_scan::@7: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@8 - [391] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@8/(byte) keyboard_events_size#13 ) - [391] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::keycode#13 ) - [391] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::row#1 ) - [392] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 - [393] call keyboard_matrix_read - [394] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + [396] (byte) keyboard_events_size#30 ← phi( keyboard_event_scan/(byte) keyboard_events_size#19 keyboard_event_scan::@8/(byte) keyboard_events_size#13 ) + [396] (byte) keyboard_event_scan::keycode#11 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::keycode#13 ) + [396] (byte) keyboard_event_scan::row#2 ← phi( keyboard_event_scan/(byte) 0 keyboard_event_scan::@8/(byte) keyboard_event_scan::row#1 ) + [397] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 + [398] call keyboard_matrix_read + [399] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 to:keyboard_event_scan::@19 keyboard_event_scan::@19: scope:[keyboard_event_scan] from keyboard_event_scan::@7 - [395] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 - [396] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 + [400] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 + [401] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 to:keyboard_event_scan::@16 keyboard_event_scan::@16: scope:[keyboard_event_scan] from keyboard_event_scan::@19 - [397] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 + [402] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 to:keyboard_event_scan::@8 keyboard_event_scan::@8: scope:[keyboard_event_scan] from keyboard_event_scan::@15 keyboard_event_scan::@16 - [398] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_events_size#29 keyboard_event_scan::@16/(byte) keyboard_events_size#30 ) - [398] (byte) keyboard_event_scan::keycode#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#1 ) - [399] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 - [400] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 + [403] (byte) keyboard_events_size#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_events_size#29 keyboard_event_scan::@16/(byte) keyboard_events_size#30 ) + [403] (byte) keyboard_event_scan::keycode#13 ← phi( keyboard_event_scan::@15/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@16/(byte) keyboard_event_scan::keycode#1 ) + [404] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 + [405] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 to:keyboard_event_scan::@17 keyboard_event_scan::@17: scope:[keyboard_event_scan] from keyboard_event_scan::@8 - [401] phi() - [402] call keyboard_event_pressed - [403] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 + [406] phi() + [407] call keyboard_event_pressed + [408] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@20 keyboard_event_scan::@20: scope:[keyboard_event_scan] from keyboard_event_scan::@17 - [404] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 - [405] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 + [409] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 + [410] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 to:keyboard_event_scan::@18 keyboard_event_scan::@18: scope:[keyboard_event_scan] from keyboard_event_scan::@20 - [406] phi() + [411] phi() to:keyboard_event_scan::@1 keyboard_event_scan::@1: scope:[keyboard_event_scan] from keyboard_event_scan::@18 keyboard_event_scan::@20 - [407] phi() - [408] call keyboard_event_pressed - [409] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 + [412] phi() + [413] call keyboard_event_pressed + [414] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@21 keyboard_event_scan::@21: scope:[keyboard_event_scan] from keyboard_event_scan::@1 - [410] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 - [411] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 + [415] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 + [416] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 to:keyboard_event_scan::@4 keyboard_event_scan::@4: scope:[keyboard_event_scan] from keyboard_event_scan::@21 - [412] phi() + [417] phi() to:keyboard_event_scan::@2 keyboard_event_scan::@2: scope:[keyboard_event_scan] from keyboard_event_scan::@21 keyboard_event_scan::@4 - [413] phi() - [414] call keyboard_event_pressed - [415] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 + [418] phi() + [419] call keyboard_event_pressed + [420] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@22 keyboard_event_scan::@22: scope:[keyboard_event_scan] from keyboard_event_scan::@2 - [416] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 - [417] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 + [421] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 + [422] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 to:keyboard_event_scan::@5 keyboard_event_scan::@5: scope:[keyboard_event_scan] from keyboard_event_scan::@22 - [418] phi() + [423] phi() to:keyboard_event_scan::@3 keyboard_event_scan::@3: scope:[keyboard_event_scan] from keyboard_event_scan::@22 keyboard_event_scan::@5 - [419] phi() - [420] call keyboard_event_pressed - [421] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 + [424] phi() + [425] call keyboard_event_pressed + [426] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 to:keyboard_event_scan::@23 keyboard_event_scan::@23: scope:[keyboard_event_scan] from keyboard_event_scan::@3 - [422] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 - [423] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return + [427] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 + [428] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return to:keyboard_event_scan::@6 keyboard_event_scan::@6: scope:[keyboard_event_scan] from keyboard_event_scan::@23 - [424] phi() + [429] phi() to:keyboard_event_scan::@return keyboard_event_scan::@return: scope:[keyboard_event_scan] from keyboard_event_scan::@23 keyboard_event_scan::@6 - [425] return + [430] return to:@return keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan::@10 keyboard_event_scan::@19 - [426] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 ) - [426] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#11 ) - [426] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::col#1 keyboard_event_scan::@19/(byte) 0 ) - [427] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) - [428] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) - [429] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 + [431] (byte) keyboard_events_size#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_events_size#29 keyboard_event_scan::@19/(byte) keyboard_events_size#30 ) + [431] (byte) keyboard_event_scan::keycode#10 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::keycode#14 keyboard_event_scan::@19/(byte) keyboard_event_scan::keycode#11 ) + [431] (byte) keyboard_event_scan::col#2 ← phi( keyboard_event_scan::@10/(byte) keyboard_event_scan::col#1 keyboard_event_scan::@19/(byte) 0 ) + [432] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) + [433] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) + [434] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 to:keyboard_event_scan::@12 keyboard_event_scan::@12: scope:[keyboard_event_scan] from keyboard_event_scan::@9 - [430] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 + [435] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 to:keyboard_event_scan::@13 keyboard_event_scan::@13: scope:[keyboard_event_scan] from keyboard_event_scan::@12 - [431] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) - [432] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 + [436] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) + [437] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 to:keyboard_event_scan::@14 keyboard_event_scan::@14: scope:[keyboard_event_scan] from keyboard_event_scan::@13 - [433] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 - [434] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 + [438] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 + [439] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 to:keyboard_event_scan::@10 keyboard_event_scan::@10: scope:[keyboard_event_scan] from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 - [435] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan::@9/(byte) keyboard_events_size#10 keyboard_event_scan::@11/(byte) keyboard_events_size#1 keyboard_event_scan::@12/(byte) keyboard_events_size#10 keyboard_event_scan::@14/(byte) keyboard_events_size#2 ) - [436] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 - [437] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 - [438] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 + [440] (byte) keyboard_events_size#29 ← phi( keyboard_event_scan::@9/(byte) keyboard_events_size#10 keyboard_event_scan::@11/(byte) keyboard_events_size#1 keyboard_event_scan::@12/(byte) keyboard_events_size#10 keyboard_event_scan::@14/(byte) keyboard_events_size#2 ) + [441] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 + [442] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 + [443] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 to:keyboard_event_scan::@15 keyboard_event_scan::@15: scope:[keyboard_event_scan] from keyboard_event_scan::@10 - [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 + [444] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 to:keyboard_event_scan::@8 keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan::@13 - [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 - [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 - [442] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 + [445] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 + [446] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 + [447] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 to:keyboard_event_scan::@10 (byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid) keyboard_matrix_read: scope:[keyboard_matrix_read] from keyboard_event_scan::@7 - [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) - [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) + [448] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) + [449] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) to:keyboard_matrix_read::@return keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matrix_read - [445] return + [450] return to:@return (void()) render_show() render_show: scope:[render_show] from main::@3 - [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 + [451] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 to:render_show::toD0182 render_show::toD0182: scope:[render_show] from render_show - [447] phi() + [452] phi() to:render_show::@1 render_show::@1: scope:[render_show] from render_show::toD0181 render_show::toD0182 - [448] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 ) - [449] *((const nomodify byte*) D018) ← (byte) render_show::d018val#3 - [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) - [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) - [452] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 + [453] (byte) render_show::d018val#3 ← phi( render_show::toD0181/(const byte) render_show::toD0181_return#0 render_show::toD0182/(const byte) render_show::toD0182_return#0 ) + [454] *((const nomodify byte*) D018) ← (byte) render_show::d018val#3 + [455] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) + [456] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) + [457] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 to:render_show::@return render_show::@return: scope:[render_show] from render_show::@1 - [453] return + [458] return to:@return render_show::toD0181: scope:[render_show] from render_show - [454] phi() + [459] phi() to:render_show::@1 (void()) play_init() play_init: scope:[play_init] from main::@11 - [455] phi() + [460] phi() to:play_init::@1 play_init::@1: scope:[play_init] from play_init play_init::@1 - [456] (byte) play_init::idx#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::idx#1 ) - [456] (byte*) play_init::pli#2 ← phi( play_init/(const byte*) playfield play_init::@1/(byte*) play_init::pli#1 ) - [456] (byte) play_init::j#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::j#1 ) - [457] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 - [458] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 - [459] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 - [460] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS - [461] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS - [462] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 - [463] if((byte) play_init::j#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_init::@1 + [461] (byte) play_init::idx#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::idx#1 ) + [461] (byte*) play_init::pli#2 ← phi( play_init/(const byte*) playfield play_init::@1/(byte*) play_init::pli#1 ) + [461] (byte) play_init::j#2 ← phi( play_init/(byte) 0 play_init::@1/(byte) play_init::j#1 ) + [462] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 + [463] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 + [464] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 + [465] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS + [466] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS + [467] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 + [468] if((byte) play_init::j#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_init::@1 to:play_init::@2 play_init::@2: scope:[play_init] from play_init::@1 - [464] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES - [465] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) + [469] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES + [470] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) to:play_init::@3 play_init::@3: scope:[play_init] from play_init::@2 play_init::@3 - [466] (byte) play_init::b#2 ← phi( play_init::@2/(byte) 0 play_init::@3/(byte) play_init::b#1 ) - [467] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 - [468] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) - [469] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 - [470] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 + [471] (byte) play_init::b#2 ← phi( play_init::@2/(byte) 0 play_init::@3/(byte) play_init::b#1 ) + [472] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 + [473] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) + [474] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 + [475] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 to:play_init::@return play_init::@return: scope:[play_init] from play_init::@3 - [471] return + [476] return to:@return (void()) sprites_irq_init() sprites_irq_init: scope:[sprites_irq_init] from main::@10 asm { sei } - [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER + [478] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER asm { ldaCIA1_INTERRUPT } - [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK - [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO - [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR - [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f - [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST - [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER - [481] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() + [480] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK + [481] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO + [482] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR + [483] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f + [484] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST + [485] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER + [486] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() asm { cli } to:sprites_irq_init::@return sprites_irq_init::@return: scope:[sprites_irq_init] from sprites_irq_init - [483] return + [488] return to:@return (void()) sprites_init() sprites_init: scope:[sprites_init] from main::@9 - [484] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $f - [485] *((const nomodify byte*) SPRITES_MC) ← (byte) 0 - [486] *((const nomodify byte*) SPRITES_EXPAND_Y) ← *((const nomodify byte*) SPRITES_MC) - [487] *((const nomodify byte*) SPRITES_EXPAND_X) ← *((const nomodify byte*) SPRITES_EXPAND_Y) + [489] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $f + [490] *((const nomodify byte*) SPRITES_MC) ← (byte) 0 + [491] *((const nomodify byte*) SPRITES_EXPAND_Y) ← *((const nomodify byte*) SPRITES_MC) + [492] *((const nomodify byte*) SPRITES_EXPAND_X) ← *((const nomodify byte*) SPRITES_EXPAND_Y) to:sprites_init::@1 sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1 - [488] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte)(number) $18+(number) $f*(number) 8 sprites_init::@1/(byte) sprites_init::xpos#1 ) - [488] (byte) sprites_init::s#2 ← phi( sprites_init/(byte) 0 sprites_init::@1/(byte) sprites_init::s#1 ) - [489] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 - [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 - [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK - [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 - [493] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 - [494] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 + [493] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte)(number) $18+(number) $f*(number) 8 sprites_init::@1/(byte) sprites_init::xpos#1 ) + [493] (byte) sprites_init::s#2 ← phi( sprites_init/(byte) 0 sprites_init::@1/(byte) sprites_init::s#1 ) + [494] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 + [495] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 + [496] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK + [497] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 + [498] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 + [499] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 to:sprites_init::@return sprites_init::@return: scope:[sprites_init] from sprites_init::@1 - [495] return + [500] return to:@return (void()) render_init() render_init: scope:[render_init] from main::@8 - [496] phi() + [501] phi() to:render_init::vicSelectGfxBank1 render_init::vicSelectGfxBank1: scope:[render_init] from render_init - [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 + [502] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 to:render_init::vicSelectGfxBank1_toDd001 render_init::vicSelectGfxBank1_toDd001: scope:[render_init] from render_init::vicSelectGfxBank1 - [498] phi() + [503] phi() to:render_init::vicSelectGfxBank1_@1 render_init::vicSelectGfxBank1_@1: scope:[render_init] from render_init::vicSelectGfxBank1_toDd001 - [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 + [504] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 to:render_init::@2 render_init::@2: scope:[render_init] from render_init::vicSelectGfxBank1_@1 - [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 - [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK - [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK - [503] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) - [504] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) - [505] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY - [506] call render_screen_original + [505] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 + [506] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK + [507] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK + [508] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) + [509] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) + [510] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY + [511] call render_screen_original to:render_init::@3 render_init::@3: scope:[render_init] from render_init::@2 - [507] phi() - [508] call render_screen_original + [512] phi() + [513] call render_screen_original to:render_init::@1 render_init::@1: scope:[render_init] from render_init::@1 render_init::@3 - [509] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_2+(byte)(number) 2*(number) $28+(byte) $10 ) - [509] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_1+(byte)(number) 2*(number) $28+(byte) $10 ) - [509] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@3/(byte) 0 ) - [510] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 - [511] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 - [512] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 - [513] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 - [514] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 - [515] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 - [516] if((byte) render_init::i#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto render_init::@1 + [514] (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_2+(byte)(number) 2*(number) $28+(byte) $10 ) + [514] (byte*) render_init::li_1#2 ← phi( render_init::@1/(byte*) render_init::li_1#1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_1+(byte)(number) 2*(number) $28+(byte) $10 ) + [514] (byte) render_init::i#2 ← phi( render_init::@1/(byte) render_init::i#1 render_init::@3/(byte) 0 ) + [515] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 + [516] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 + [517] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 + [518] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 + [519] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 + [520] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 + [521] if((byte) render_init::i#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto render_init::@1 to:render_init::@return render_init::@return: scope:[render_init] from render_init::@1 - [517] return + [522] return to:@return (void()) render_screen_original((byte*) render_screen_original::screen) render_screen_original: scope:[render_screen_original] from render_init::@2 render_init::@3 - [518] (byte*) render_screen_original::screen#9 ← phi( render_init::@2/(const nomodify byte*) PLAYFIELD_SCREEN_1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_2 ) + [523] (byte*) render_screen_original::screen#9 ← phi( render_init::@2/(const nomodify byte*) PLAYFIELD_SCREEN_1 render_init::@3/(const nomodify byte*) PLAYFIELD_SCREEN_2 ) to:render_screen_original::@1 render_screen_original::@1: scope:[render_screen_original] from render_screen_original render_screen_original::@5 - [519] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte) 0 render_screen_original::@5/(byte) render_screen_original::y#1 ) - [519] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const to_nomodify byte*) PLAYFIELD_COLORS_ORIGINAL+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::ocols#1 ) - [519] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const to_nomodify byte*) PLAYFIELD_SCREEN_ORIGINAL+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::oscr#1 ) - [519] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const nomodify byte*) COLS render_screen_original::@5/(byte*) render_screen_original::cols#3 ) - [519] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@5/(byte*) render_screen_original::screen#10 ) + [524] (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte) 0 render_screen_original::@5/(byte) render_screen_original::y#1 ) + [524] (byte*) render_screen_original::ocols#4 ← phi( render_screen_original/(const to_nomodify byte*) PLAYFIELD_COLORS_ORIGINAL+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::ocols#1 ) + [524] (byte*) render_screen_original::oscr#4 ← phi( render_screen_original/(const to_nomodify byte*) PLAYFIELD_SCREEN_ORIGINAL+(byte)(number) $20*(number) 2 render_screen_original::@5/(byte*) render_screen_original::oscr#1 ) + [524] (byte*) render_screen_original::cols#7 ← phi( render_screen_original/(const nomodify byte*) COLS render_screen_original::@5/(byte*) render_screen_original::cols#3 ) + [524] (byte*) render_screen_original::screen#8 ← phi( render_screen_original/(byte*) render_screen_original::screen#9 render_screen_original::@5/(byte*) render_screen_original::screen#10 ) to:render_screen_original::@2 render_screen_original::@2: scope:[render_screen_original] from render_screen_original::@1 render_screen_original::@2 - [520] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte) 0 render_screen_original::@2/(byte) render_screen_original::x#1 ) - [520] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 ) - [520] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 ) - [521] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE - [522] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 - [523] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK - [524] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 - [525] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 - [526] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 + [525] (byte) render_screen_original::x#4 ← phi( render_screen_original::@1/(byte) 0 render_screen_original::@2/(byte) render_screen_original::x#1 ) + [525] (byte*) render_screen_original::cols#4 ← phi( render_screen_original::@1/(byte*) render_screen_original::cols#7 render_screen_original::@2/(byte*) render_screen_original::cols#1 ) + [525] (byte*) render_screen_original::screen#5 ← phi( render_screen_original::@1/(byte*) render_screen_original::screen#8 render_screen_original::@2/(byte*) render_screen_original::screen#2 ) + [526] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE + [527] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 + [528] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK + [529] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 + [530] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 + [531] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 to:render_screen_original::@3 render_screen_original::@3: scope:[render_screen_original] from render_screen_original::@2 render_screen_original::@3 - [527] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 ) - [527] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 ) - [527] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 ) - [527] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 ) - [527] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 ) - [528] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) - [529] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 - [530] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 - [531] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) - [532] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 - [533] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 - [534] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 - [535] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 + [532] (byte) render_screen_original::x#5 ← phi( render_screen_original::@2/(byte) render_screen_original::x#1 render_screen_original::@3/(byte) render_screen_original::x#2 ) + [532] (byte*) render_screen_original::cols#5 ← phi( render_screen_original::@2/(byte*) render_screen_original::cols#1 render_screen_original::@3/(byte*) render_screen_original::cols#2 ) + [532] (byte*) render_screen_original::ocols#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::ocols#4 render_screen_original::@3/(byte*) render_screen_original::ocols#1 ) + [532] (byte*) render_screen_original::screen#6 ← phi( render_screen_original::@2/(byte*) render_screen_original::screen#2 render_screen_original::@3/(byte*) render_screen_original::screen#3 ) + [532] (byte*) render_screen_original::oscr#2 ← phi( render_screen_original::@2/(byte*) render_screen_original::oscr#4 render_screen_original::@3/(byte*) render_screen_original::oscr#1 ) + [533] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) + [534] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 + [535] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 + [536] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) + [537] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 + [538] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 + [539] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 + [540] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 to:render_screen_original::@4 render_screen_original::@4: scope:[render_screen_original] from render_screen_original::@3 render_screen_original::@4 - [536] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 ) - [536] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 ) - [536] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 ) - [537] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE - [538] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 - [539] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK - [540] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 - [541] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 - [542] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 + [541] (byte) render_screen_original::x#6 ← phi( render_screen_original::@3/(byte) render_screen_original::x#2 render_screen_original::@4/(byte) render_screen_original::x#3 ) + [541] (byte*) render_screen_original::cols#6 ← phi( render_screen_original::@3/(byte*) render_screen_original::cols#2 render_screen_original::@4/(byte*) render_screen_original::cols#3 ) + [541] (byte*) render_screen_original::screen#7 ← phi( render_screen_original::@3/(byte*) render_screen_original::screen#3 render_screen_original::@4/(byte*) render_screen_original::screen#10 ) + [542] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE + [543] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 + [544] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK + [545] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 + [546] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 + [547] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 to:render_screen_original::@5 render_screen_original::@5: scope:[render_screen_original] from render_screen_original::@4 - [543] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 - [544] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 + [548] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 + [549] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 to:render_screen_original::@return render_screen_original::@return: scope:[render_screen_original] from render_screen_original::@5 - [545] return + [550] return to:@return (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from main - [546] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff - [547] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + [551] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff + [552] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - [548] return + [553] return to:@return interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() sprites_irq: scope:[sprites_irq] from asm { cld } - [550] (byte) sprites_irq::ypos#0 ← (volatile byte) irq_sprite_ypos - [551] *((const nomodify byte*) SPRITES_YPOS) ← (byte) sprites_irq::ypos#0 - [552] *((const nomodify byte*) SPRITES_YPOS+(byte) 2) ← (byte) sprites_irq::ypos#0 - [553] *((const nomodify byte*) SPRITES_YPOS+(byte) 4) ← (byte) sprites_irq::ypos#0 - [554] *((const nomodify byte*) SPRITES_YPOS+(byte) 6) ← (byte) sprites_irq::ypos#0 - [555] (byte~) sprites_irq::$0 ← (volatile byte) irq_raster_next + (byte) 1 - [556] (volatile byte) sprites_irq::raster_sprite_gfx_modify ← (byte~) sprites_irq::$0 + [555] (byte) sprites_irq::ypos#0 ← (volatile byte) irq_sprite_ypos + [556] *((const nomodify byte*) SPRITES_YPOS) ← (byte) sprites_irq::ypos#0 + [557] *((const nomodify byte*) SPRITES_YPOS+(byte) 2) ← (byte) sprites_irq::ypos#0 + [558] *((const nomodify byte*) SPRITES_YPOS+(byte) 4) ← (byte) sprites_irq::ypos#0 + [559] *((const nomodify byte*) SPRITES_YPOS+(byte) 6) ← (byte) sprites_irq::ypos#0 + [560] (byte~) sprites_irq::$0 ← (volatile byte) irq_raster_next + (byte) 1 + [561] (volatile byte) sprites_irq::raster_sprite_gfx_modify ← (byte~) sprites_irq::$0 to:sprites_irq::@8 sprites_irq::@8: scope:[sprites_irq] from sprites_irq sprites_irq::@8 - [557] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 + [562] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 to:sprites_irq::@9 sprites_irq::@9: scope:[sprites_irq] from sprites_irq::@8 - [558] (byte) sprites_irq::ptr#0 ← (volatile byte) irq_sprite_ptr - [559] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 + [563] (byte) sprites_irq::ptr#0 ← (volatile byte) irq_sprite_ptr + [564] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 to:sprites_irq::@10 sprites_irq::@10: scope:[sprites_irq] from sprites_irq::@9 - [560] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2) ← (byte) sprites_irq::ptr#0 - [561] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 - [562] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 1) ← (byte) sprites_irq::ptr#3 - [563] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 2) ← (byte) sprites_irq::ptr#3 - [564] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 - [565] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 3) ← (byte) sprites_irq::ptr#4 + [565] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2) ← (byte) sprites_irq::ptr#0 + [566] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 + [567] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 1) ← (byte) sprites_irq::ptr#3 + [568] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 2) ← (byte) sprites_irq::ptr#3 + [569] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 + [570] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 3) ← (byte) sprites_irq::ptr#4 to:sprites_irq::@2 sprites_irq::@2: scope:[sprites_irq] from sprites_irq::@1 sprites_irq::@10 - [566] (volatile byte) irq_cnt ← ++ (volatile byte) irq_cnt - [567] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 + [571] (volatile byte) irq_cnt ← ++ (volatile byte) irq_cnt + [572] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 to:sprites_irq::@6 sprites_irq::@6: scope:[sprites_irq] from sprites_irq::@2 - [568] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 + [573] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 to:sprites_irq::@7 sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@6 - [569] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 - [570] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 - [571] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 + [574] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 + [575] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 + [576] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 to:sprites_irq::@5 sprites_irq::@5: scope:[sprites_irq] from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 - [572] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next - [573] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER + [577] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next + [578] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER to:sprites_irq::@return sprites_irq::@return: scope:[sprites_irq] from sprites_irq::@5 - [574] return + [579] return to:@return sprites_irq::@4: scope:[sprites_irq] from sprites_irq::@6 - [575] (volatile byte) irq_cnt ← (byte) 0 - [576] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST - [577] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 - [578] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 + [580] (volatile byte) irq_cnt ← (byte) 0 + [581] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST + [582] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 + [583] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 to:sprites_irq::@5 sprites_irq::@3: scope:[sprites_irq] from sprites_irq::@2 - [579] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 - [580] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS + [584] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 + [585] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS to:sprites_irq::toSpritePtr1 sprites_irq::toSpritePtr1: scope:[sprites_irq] from sprites_irq::@3 - [581] phi() + [586] phi() to:sprites_irq::@11 sprites_irq::@11: scope:[sprites_irq] from sprites_irq::toSpritePtr1 - [582] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 + [587] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 to:sprites_irq::@5 sprites_irq::@1: scope:[sprites_irq] from sprites_irq::@9 - [583] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1) ← (byte) sprites_irq::ptr#0 - [584] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 - [585] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 1) ← (byte) sprites_irq::ptr#1 - [586] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 2) ← (byte) sprites_irq::ptr#1 - [587] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 - [588] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 3) ← (byte) sprites_irq::ptr#2 + [588] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1) ← (byte) sprites_irq::ptr#0 + [589] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 + [590] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 1) ← (byte) sprites_irq::ptr#1 + [591] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 2) ← (byte) sprites_irq::ptr#1 + [592] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 + [593] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 3) ← (byte) sprites_irq::ptr#2 to:sprites_irq::@2 @@ -10305,6 +10325,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) current_movedown_counter (byte) current_movedown_counter#12 26666.933333333334 (byte) current_movedown_counter#14 2732.5135135135133 @@ -10326,29 +10369,29 @@ VARIABLE REGISTER WEIGHTS (byte) current_orientation#7 150001.5 (byte*) current_piece (byte*) current_piece#10 8138.27027027027 -(byte*) current_piece#100 11.0 (byte*) current_piece#15 7706.51282051282 (byte*) current_piece#17 1.1400006E7 (byte*) current_piece#28 300003.0 -(byte*) current_piece#92 100001.0 +(byte*) current_piece#91 100001.0 +(byte*) current_piece#94 200002.0 (byte*) current_piece#95 200002.0 (byte*) current_piece#96 200002.0 (byte*) current_piece#97 200002.0 -(byte*) current_piece#98 200002.0 -(byte*) current_piece#99 2000002.0 +(byte*) current_piece#98 2000002.0 +(byte*) current_piece#99 11.0 (byte) current_piece_char (byte) current_piece_char#10 1.8182183847272727E8 -(byte) current_piece_char#100 202.0 (byte) current_piece_char#16 5437.9729729729725 (byte) current_piece_char#29 300003.0 -(byte) current_piece_char#5 34375.75 +(byte) current_piece_char#5 31429.257142857143 (byte) current_piece_char#68 47624.42857142857 -(byte) current_piece_char#99 22.0 +(byte) current_piece_char#98 22.0 +(byte) current_piece_char#99 202.0 (byte*) current_piece_gfx -(byte*) current_piece_gfx#111 11.0 -(byte*) current_piece_gfx#112 101.0 -(byte*) current_piece_gfx#116 200002.0 -(byte*) current_piece_gfx#122 22.0 +(byte*) current_piece_gfx#110 11.0 +(byte*) current_piece_gfx#111 101.0 +(byte*) current_piece_gfx#115 200002.0 +(byte*) current_piece_gfx#121 22.0 (byte*) current_piece_gfx#13 1.8182183847272727E8 (byte*) current_piece_gfx#18 1009.7619047619048 (byte*) current_piece_gfx#20 15185.37037037037 @@ -10357,9 +10400,9 @@ VARIABLE REGISTER WEIGHTS (byte*) current_piece_gfx#64 47624.42857142857 (byte*) current_piece_gfx#7 200002.0 (byte) current_xpos -(byte) current_xpos#100 67742.74193548388 -(byte) current_xpos#118 7.333333333333333 -(byte) current_xpos#119 67.33333333333333 +(byte) current_xpos#100 61765.44117647059 +(byte) current_xpos#117 7.333333333333333 +(byte) current_xpos#118 67.33333333333333 (byte) current_xpos#14 1.8187293036363635E7 (byte) current_xpos#19 1009.7619047619048 (byte) current_xpos#22 36400.4 @@ -10374,14 +10417,14 @@ VARIABLE REGISTER WEIGHTS (byte) current_ypos#19 6425.74358974359 (byte) current_ypos#3 200002.0 (byte) current_ypos#38 300003.0 -(byte) current_ypos#6 70000.83333333334 -(byte) current_ypos#97 5.5 -(byte) current_ypos#98 40.4 +(byte) current_ypos#6 63637.121212121216 +(byte) current_ypos#96 5.5 +(byte) current_ypos#97 40.4 (byte) game_over (byte) game_over#10 6567.760869565218 (byte) game_over#15 5705.54054054054 (byte) game_over#27 300003.0 -(byte) game_over#52 47827.13043478261 +(byte) game_over#52 42308.61538461538 (byte) game_over#65 78572.35714285714 (volatile byte) irq_cnt loadstore 0.48000000000000004 (volatile byte) irq_raster_next loadstore 0.44444444444444453 @@ -10660,14 +10703,13 @@ VARIABLE REGISTER WEIGHTS (byte) play_remove_lines::y#8 1.3333333346666667E8 (void()) play_spawn_current() (byte~) play_spawn_current::$1 2000002.0 -(byte~) play_spawn_current::$7 32258.09677419355 +(byte~) play_spawn_current::$5 2.000000002E9 +(byte~) play_spawn_current::$7 29411.79411764706 (byte) play_spawn_current::current_piece_idx (byte) play_spawn_current::current_piece_idx#0 1250001.25 (byte) play_spawn_current::piece_idx (byte) play_spawn_current::piece_idx#1 2.000000002E9 (byte) play_spawn_current::piece_idx#2 1.000050018E8 -(byte) play_spawn_current::sid_rnd1_return -(byte) play_spawn_current::sid_rnd1_return#0 2.000000002E9 (void()) play_update_score((byte) play_update_score::removed) (byte~) play_update_score::$2 2000002.0 (byte~) play_update_score::$4 2000002.0 @@ -10853,6 +10895,10 @@ VARIABLE REGISTER WEIGHTS (byte) render_show::toD0182_return (byte*) render_show::toD0182_screen (volatile dword) score_bcd loadstore 14598.569343065694 +(byte()) sid_rnd() +(byte) sid_rnd::return +(byte) sid_rnd::return#0 3.666666667333333E9 +(byte) sid_rnd::return#2 2.000000002E9 (void()) sid_rnd_init() (void()) sprites_init() (byte) sprites_init::s @@ -10896,11 +10942,11 @@ Initial phi equivalence classes [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 ] [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 ] [ render_next::c#2 render_next::c#1 ] -[ current_ypos#13 current_ypos#97 current_ypos#98 ] +[ current_ypos#13 current_ypos#96 current_ypos#97 ] [ render_screen_render#33 render_screen_render#64 ] -[ current_xpos#59 current_xpos#118 current_xpos#119 ] -[ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] -[ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] +[ current_xpos#59 current_xpos#117 current_xpos#118 ] +[ current_piece_gfx#64 current_piece_gfx#110 current_piece_gfx#111 ] +[ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] [ render_moving::l#4 render_moving::l#1 ] [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] @@ -10914,7 +10960,7 @@ Initial phi equivalence classes [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] [ play_move_rotate::return#2 ] [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] -[ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] +[ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 ] [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] [ 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 ] @@ -10930,10 +10976,10 @@ Initial phi equivalence classes [ level#33 level#10 level#17 level#19 level#21 ] [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -[ current_piece#28 current_piece#10 current_piece#100 current_piece#15 current_piece#92 ] +[ current_piece#28 current_piece#10 current_piece#99 current_piece#15 current_piece#91 ] [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -[ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#122 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] +[ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#121 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#115 ] [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] [ play_move_down::return#3 ] [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] @@ -11029,7 +11075,9 @@ Added variable play_spawn_current::current_piece_idx#0 to live range equivalence Added variable play_spawn_current::$7 to live range equivalence class [ play_spawn_current::$7 ] Added variable play_collision::return#10 to live range equivalence class [ play_collision::return#10 ] Added variable play_spawn_current::$1 to live range equivalence class [ play_spawn_current::$1 ] -Added variable play_spawn_current::sid_rnd1_return#0 to live range equivalence class [ play_spawn_current::sid_rnd1_return#0 ] +Added variable sid_rnd::return#2 to live range equivalence class [ sid_rnd::return#2 ] +Added variable play_spawn_current::$5 to live range equivalence class [ play_spawn_current::$5 ] +Added variable sid_rnd::return#0 to live range equivalence class [ sid_rnd::return#0 ] Added variable play_update_score::$2 to live range equivalence class [ play_update_score::$2 ] Added variable play_update_score::lines_before#0 to live range equivalence class [ play_update_score::lines_before#0 ] Added variable play_update_score::$9 to live range equivalence class [ play_update_score::$9 ] @@ -11090,11 +11138,11 @@ Complete equivalence classes [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 ] [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 ] [ render_next::c#2 render_next::c#1 ] -[ current_ypos#13 current_ypos#97 current_ypos#98 ] +[ current_ypos#13 current_ypos#96 current_ypos#97 ] [ render_screen_render#33 render_screen_render#64 ] -[ current_xpos#59 current_xpos#118 current_xpos#119 ] -[ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] -[ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] +[ current_xpos#59 current_xpos#117 current_xpos#118 ] +[ current_piece_gfx#64 current_piece_gfx#110 current_piece_gfx#111 ] +[ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] [ render_moving::l#4 render_moving::l#1 ] [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] @@ -11108,7 +11156,7 @@ Complete equivalence classes [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] [ play_move_rotate::return#2 ] [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] -[ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] +[ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 ] [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] [ 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 ] @@ -11124,10 +11172,10 @@ Complete equivalence classes [ level#33 level#10 level#17 level#19 level#21 ] [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -[ current_piece#28 current_piece#10 current_piece#100 current_piece#15 current_piece#92 ] +[ current_piece#28 current_piece#10 current_piece#99 current_piece#15 current_piece#91 ] [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -[ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#122 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] +[ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#121 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#115 ] [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] [ play_move_down::return#3 ] [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] @@ -11223,7 +11271,9 @@ Complete equivalence classes [ play_spawn_current::$7 ] [ play_collision::return#10 ] [ play_spawn_current::$1 ] -[ play_spawn_current::sid_rnd1_return#0 ] +[ sid_rnd::return#2 ] +[ play_spawn_current::$5 ] +[ sid_rnd::return#0 ] [ play_update_score::$2 ] [ play_update_score::lines_before#0 ] [ play_update_score::$9 ] @@ -11283,11 +11333,11 @@ Allocated zp[1]:17 [ render_next::l#7 render_next::l#1 ] Allocated zp[2]:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 ] Allocated zp[2]:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 ] Allocated zp[1]:22 [ render_next::c#2 render_next::c#1 ] -Allocated zp[1]:23 [ current_ypos#13 current_ypos#97 current_ypos#98 ] +Allocated zp[1]:23 [ current_ypos#13 current_ypos#96 current_ypos#97 ] Allocated zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] -Allocated zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] -Allocated zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] -Allocated zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] +Allocated zp[1]:25 [ current_xpos#59 current_xpos#117 current_xpos#118 ] +Allocated zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#110 current_piece_gfx#111 ] +Allocated zp[1]:28 [ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] Allocated zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Allocated zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] Allocated zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] @@ -11301,7 +11351,7 @@ Allocated zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] Allocated zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] Allocated zp[1]:41 [ play_move_rotate::return#2 ] Allocated zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] -Allocated zp[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] +Allocated zp[2]:43 [ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 ] Allocated zp[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] Allocated zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] Allocated zp[1]:47 [ 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 ] @@ -11317,10 +11367,10 @@ Allocated zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_b Allocated zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] Allocated zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] Allocated zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -Allocated zp[2]:61 [ current_piece#28 current_piece#10 current_piece#100 current_piece#15 current_piece#92 ] +Allocated zp[2]:61 [ current_piece#28 current_piece#10 current_piece#99 current_piece#15 current_piece#91 ] Allocated zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] Allocated zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -Allocated zp[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#122 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] +Allocated zp[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#121 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#115 ] Allocated zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] Allocated zp[1]:68 [ play_move_down::return#3 ] Allocated zp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] @@ -11416,51 +11466,53 @@ Allocated zp[1]:171 [ play_spawn_current::current_piece_idx#0 ] Allocated zp[1]:172 [ play_spawn_current::$7 ] Allocated zp[1]:173 [ play_collision::return#10 ] Allocated zp[1]:174 [ play_spawn_current::$1 ] -Allocated zp[1]:175 [ play_spawn_current::sid_rnd1_return#0 ] -Allocated zp[1]:176 [ play_update_score::$2 ] -Allocated zp[1]:177 [ play_update_score::lines_before#0 ] -Allocated zp[1]:178 [ play_update_score::$9 ] -Allocated zp[4]:179 [ play_update_score::add_bcd#0 ] -Allocated zp[1]:183 [ play_update_score::$4 ] -Allocated zp[1]:184 [ play_update_score::lines_after#0 ] -Allocated zp[1]:185 [ play_increase_level::$1 ] -Allocated zp[1]:186 [ play_increase_level::$5 ] -Allocated zp[1]:187 [ play_remove_lines::c#0 ] -Allocated zp[1]:188 [ play_lock_current::$4 ] -Allocated zp[2]:189 [ play_lock_current::playfield_line#0 ] -Allocated zp[1]:191 [ play_lock_current::i#1 ] -Allocated zp[1]:192 [ keyboard_event_pressed::$0 ] -Allocated zp[1]:193 [ keyboard_event_pressed::row_bits#0 ] -Allocated zp[1]:194 [ keyboard_event_pressed::$1 ] -Allocated zp[1]:195 [ keyboard_event_pressed::return#11 ] -Allocated zp[1]:196 [ keyboard_matrix_read::rowid#0 ] -Allocated zp[1]:197 [ keyboard_matrix_read::return#2 ] -Allocated zp[1]:198 [ keyboard_event_scan::row_scan#0 ] -Allocated zp[1]:199 [ keyboard_event_pressed::return#0 ] -Allocated zp[1]:200 [ keyboard_event_scan::$0 ] -Allocated zp[1]:201 [ keyboard_event_pressed::return#1 ] -Allocated zp[1]:202 [ keyboard_event_scan::$3 ] -Allocated zp[1]:203 [ keyboard_event_pressed::return#2 ] -Allocated zp[1]:204 [ keyboard_event_scan::$6 ] -Allocated zp[1]:205 [ keyboard_event_pressed::return#10 ] -Allocated zp[1]:206 [ keyboard_event_scan::$9 ] -Allocated zp[1]:207 [ keyboard_event_scan::$15 ] -Allocated zp[1]:208 [ keyboard_event_scan::$16 ] -Allocated zp[1]:209 [ keyboard_event_scan::event_type#0 ] -Allocated zp[1]:210 [ keyboard_event_scan::$23 ] -Allocated zp[1]:211 [ keyboard_matrix_read::return#0 ] -Allocated zp[1]:212 [ play_init::$2 ] -Allocated zp[1]:213 [ play_init::$3 ] -Allocated zp[1]:214 [ sprites_init::s2#0 ] -Allocated zp[1]:215 [ render_init::$5 ] -Allocated zp[1]:216 [ sprites_irq::ypos#0 ] -Allocated zp[1]:217 [ sprites_irq::$0 ] -Allocated zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] -Allocated zp[1]:219 [ sprites_irq::ptr#0 ] -Allocated zp[1]:220 [ sprites_irq::ptr#3 ] -Allocated zp[1]:221 [ sprites_irq::ptr#4 ] -Allocated zp[1]:222 [ sprites_irq::ptr#1 ] -Allocated zp[1]:223 [ sprites_irq::ptr#2 ] +Allocated zp[1]:175 [ sid_rnd::return#2 ] +Allocated zp[1]:176 [ play_spawn_current::$5 ] +Allocated zp[1]:177 [ sid_rnd::return#0 ] +Allocated zp[1]:178 [ play_update_score::$2 ] +Allocated zp[1]:179 [ play_update_score::lines_before#0 ] +Allocated zp[1]:180 [ play_update_score::$9 ] +Allocated zp[4]:181 [ play_update_score::add_bcd#0 ] +Allocated zp[1]:185 [ play_update_score::$4 ] +Allocated zp[1]:186 [ play_update_score::lines_after#0 ] +Allocated zp[1]:187 [ play_increase_level::$1 ] +Allocated zp[1]:188 [ play_increase_level::$5 ] +Allocated zp[1]:189 [ play_remove_lines::c#0 ] +Allocated zp[1]:190 [ play_lock_current::$4 ] +Allocated zp[2]:191 [ play_lock_current::playfield_line#0 ] +Allocated zp[1]:193 [ play_lock_current::i#1 ] +Allocated zp[1]:194 [ keyboard_event_pressed::$0 ] +Allocated zp[1]:195 [ keyboard_event_pressed::row_bits#0 ] +Allocated zp[1]:196 [ keyboard_event_pressed::$1 ] +Allocated zp[1]:197 [ keyboard_event_pressed::return#11 ] +Allocated zp[1]:198 [ keyboard_matrix_read::rowid#0 ] +Allocated zp[1]:199 [ keyboard_matrix_read::return#2 ] +Allocated zp[1]:200 [ keyboard_event_scan::row_scan#0 ] +Allocated zp[1]:201 [ keyboard_event_pressed::return#0 ] +Allocated zp[1]:202 [ keyboard_event_scan::$0 ] +Allocated zp[1]:203 [ keyboard_event_pressed::return#1 ] +Allocated zp[1]:204 [ keyboard_event_scan::$3 ] +Allocated zp[1]:205 [ keyboard_event_pressed::return#2 ] +Allocated zp[1]:206 [ keyboard_event_scan::$6 ] +Allocated zp[1]:207 [ keyboard_event_pressed::return#10 ] +Allocated zp[1]:208 [ keyboard_event_scan::$9 ] +Allocated zp[1]:209 [ keyboard_event_scan::$15 ] +Allocated zp[1]:210 [ keyboard_event_scan::$16 ] +Allocated zp[1]:211 [ keyboard_event_scan::event_type#0 ] +Allocated zp[1]:212 [ keyboard_event_scan::$23 ] +Allocated zp[1]:213 [ keyboard_matrix_read::return#0 ] +Allocated zp[1]:214 [ play_init::$2 ] +Allocated zp[1]:215 [ play_init::$3 ] +Allocated zp[1]:216 [ sprites_init::s2#0 ] +Allocated zp[1]:217 [ render_init::$5 ] +Allocated zp[1]:218 [ sprites_irq::ypos#0 ] +Allocated zp[1]:219 [ sprites_irq::$0 ] +Allocated zp[1]:220 [ sprites_irq::raster_sprite_gfx_modify ] +Allocated zp[1]:221 [ sprites_irq::ptr#0 ] +Allocated zp[1]:222 [ sprites_irq::ptr#3 ] +Allocated zp[1]:223 [ sprites_irq::ptr#4 ] +Allocated zp[1]:224 [ sprites_irq::ptr#1 ] +Allocated zp[1]:225 [ sprites_irq::ptr#2 ] INITIAL ASM Target platform is c64basic / MOS6502X @@ -11473,6 +11525,10 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -11516,8 +11572,8 @@ Target platform is c64basic / MOS6502X .label CIA2 = $dd00 // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f + // The SID MOD 6581/8580 + .label SID = $d400 // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -11542,11 +11598,6 @@ Target platform is c64basic / MOS6502X .const KEY_CTRL = $3a .const KEY_SPACE = $3c .const KEY_COMMODORE = $3d - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b // Address of the first screen .label PLAYFIELD_SCREEN_1 = $400 // Address of the second screen @@ -11579,6 +11630,9 @@ Target platform is c64basic / MOS6502X // Right side collision (cell beyond the right side of the playfield) .const COLLISION_RIGHT = 8 .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 @@ -11715,7 +11769,7 @@ main: { // asm { sei } sei // [16] call render_init - // [496] phi from main::@8 to render_init [phi:main::@8->render_init] + // [501] phi from main::@8 to render_init [phi:main::@8->render_init] render_init_from___b8: jsr render_init // [17] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -11738,7 +11792,7 @@ main: { // main::@11 __b11: // [22] call play_init - // [455] phi from main::@11 to play_init [phi:main::@11->play_init] + // [460] phi from main::@11 to play_init [phi:main::@11->play_init] play_init_from___b11: jsr play_init // [23] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -11783,31 +11837,31 @@ main: { jmp __b15 // main::@15 __b15: - // [29] (byte) current_ypos#97 ← (byte) current_ypos#6 -- vbuz1=vbuz2 + // [29] (byte) current_ypos#96 ← (byte) current_ypos#6 -- vbuz1=vbuz2 lda.z current_ypos sta.z current_ypos_1 - // [30] (byte) current_xpos#118 ← (byte) current_xpos#100 -- vbuz1=vbuz2 + // [30] (byte) current_xpos#117 ← (byte) current_xpos#100 -- vbuz1=vbuz2 lda.z current_xpos sta.z current_xpos_1 - // [31] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [31] (byte*) current_piece_gfx#110 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece_gfx_1 lda PIECES+1,y sta.z current_piece_gfx_1+1 - // [32] (byte) current_piece_char#99 ← (byte) current_piece_char#5 -- vbuz1=vbuz2 + // [32] (byte) current_piece_char#98 ← (byte) current_piece_char#5 -- vbuz1=vbuz2 lda.z current_piece_char sta.z current_piece_char_1 // [33] call render_moving // [128] phi from main::@15 to render_moving [phi:main::@15->render_moving] render_moving_from___b15: - // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#99 [phi:main::@15->render_moving#0] -- register_copy - // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#111 [phi:main::@15->render_moving#1] -- register_copy - // [128] phi (byte) current_xpos#59 = (byte) current_xpos#118 [phi:main::@15->render_moving#2] -- register_copy + // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#98 [phi:main::@15->render_moving#0] -- register_copy + // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#110 [phi:main::@15->render_moving#1] -- register_copy + // [128] phi (byte) current_xpos#59 = (byte) current_xpos#117 [phi:main::@15->render_moving#2] -- register_copy // [128] phi (byte) render_screen_render#33 = (byte) $20 [phi:main::@15->render_moving#3] -- vbuz1=vbuc1 lda #$20 sta.z render_screen_render_3 - // [128] phi (byte) current_ypos#13 = (byte) current_ypos#97 [phi:main::@15->render_moving#4] -- register_copy + // [128] phi (byte) current_ypos#13 = (byte) current_ypos#96 [phi:main::@15->render_moving#4] -- register_copy jsr render_moving jmp __b16 // main::@16 @@ -11826,13 +11880,13 @@ main: { jmp __b17 // main::@17 __b17: - // [36] (byte*) current_piece#100 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [36] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece lda PIECES+1,y sta.z current_piece+1 - // [37] (byte*) current_piece_gfx#122 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [37] (byte*) current_piece_gfx#121 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece_gfx @@ -11861,12 +11915,12 @@ main: { // [38] phi (byte) game_over#10 = (byte) game_over#52 [phi:main::@17->main::@1#6] -- register_copy // [38] phi (byte) current_ypos#11 = (byte) current_ypos#6 [phi:main::@17->main::@1#7] -- register_copy // [38] phi (byte) current_xpos#14 = (byte) current_xpos#100 [phi:main::@17->main::@1#8] -- register_copy - // [38] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#122 [phi:main::@17->main::@1#9] -- register_copy + // [38] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#121 [phi:main::@17->main::@1#9] -- register_copy // [38] phi (byte) current_orientation#13 = (byte) 0 [phi:main::@17->main::@1#10] -- vbuz1=vbuc1 lda #0 sta.z current_orientation // [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#5 [phi:main::@17->main::@1#11] -- register_copy - // [38] phi (byte*) current_piece#10 = (byte*) current_piece#100 [phi:main::@17->main::@1#12] -- register_copy + // [38] phi (byte*) current_piece#10 = (byte*) current_piece#99 [phi:main::@17->main::@1#12] -- register_copy // [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#1 [phi:main::@17->main::@1#13] -- register_copy // [38] phi (byte) render_screen_render#18 = (byte) $20 [phi:main::@17->main::@1#14] -- vbuz1=vbuc1 lda #$20 @@ -11921,7 +11975,7 @@ main: { __b18: // [43] call keyboard_event_scan // Scan keyboard events - // [390] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] + // [395] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] keyboard_event_scan_from___b18: jsr keyboard_event_scan // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -11987,31 +12041,31 @@ main: { jmp __b22 // main::@22 __b22: - // [57] (byte) current_ypos#98 ← (byte) current_ypos#19 -- vbuz1=vbuz2 + // [57] (byte) current_ypos#97 ← (byte) current_ypos#19 -- vbuz1=vbuz2 lda.z current_ypos sta.z current_ypos_1 // [58] (byte) render_screen_render#64 ← (byte) render_screen_render#18 -- vbuz1=vbuz2 lda.z render_screen_render sta.z render_screen_render_3 - // [59] (byte) current_xpos#119 ← (byte) current_xpos#19 -- vbuz1=vbuz2 + // [59] (byte) current_xpos#118 ← (byte) current_xpos#19 -- vbuz1=vbuz2 lda.z current_xpos sta.z current_xpos_1 - // [60] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 -- pbuz1=pbuz2 + // [60] (byte*) current_piece_gfx#111 ← (byte*) current_piece_gfx#18 -- pbuz1=pbuz2 lda.z current_piece_gfx sta.z current_piece_gfx_1 lda.z current_piece_gfx+1 sta.z current_piece_gfx_1+1 - // [61] (byte) current_piece_char#100 ← (byte) current_piece_char#16 -- vbuz1=vbuz2 + // [61] (byte) current_piece_char#99 ← (byte) current_piece_char#16 -- vbuz1=vbuz2 lda.z current_piece_char sta.z current_piece_char_1 // [62] call render_moving // [128] phi from main::@22 to render_moving [phi:main::@22->render_moving] render_moving_from___b22: - // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#100 [phi:main::@22->render_moving#0] -- register_copy - // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#112 [phi:main::@22->render_moving#1] -- register_copy - // [128] phi (byte) current_xpos#59 = (byte) current_xpos#119 [phi:main::@22->render_moving#2] -- register_copy + // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#99 [phi:main::@22->render_moving#0] -- register_copy + // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#111 [phi:main::@22->render_moving#1] -- register_copy + // [128] phi (byte) current_xpos#59 = (byte) current_xpos#118 [phi:main::@22->render_moving#2] -- register_copy // [128] phi (byte) render_screen_render#33 = (byte) render_screen_render#64 [phi:main::@22->render_moving#3] -- register_copy - // [128] phi (byte) current_ypos#13 = (byte) current_ypos#98 [phi:main::@22->render_moving#4] -- register_copy + // [128] phi (byte) current_ypos#13 = (byte) current_ypos#97 [phi:main::@22->render_moving#4] -- register_copy jsr render_moving jmp __b23 // main::@23 @@ -12845,7 +12899,7 @@ play_move_rotate: { // [190] (byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3 -- vbuz1=vbuz2 lda.z orientation sta.z play_collision.orientation - // [191] (byte*) current_piece#98 ← (byte*) current_piece#15 -- pbuz1=pbuz2 + // [191] (byte*) current_piece#97 ← (byte*) current_piece#15 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -12856,7 +12910,7 @@ play_move_rotate: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#3 [phi:play_move_rotate::@3->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#3 [phi:play_move_rotate::@3->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#3 [phi:play_move_rotate::@3->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#98 [phi:play_move_rotate::@3->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#97 [phi:play_move_rotate::@3->play_collision#3] -- register_copy jsr play_collision // [193] (byte) play_collision::return#14 ← (byte) play_collision::return#15 -- vbuz1=vbuz2 lda.z play_collision.return_5 @@ -13148,7 +13202,7 @@ play_move_leftright: { // [228] (byte) play_collision::orientation#2 ← (byte) current_orientation#20 -- vbuz1=vbuz2 lda.z current_orientation sta.z play_collision.orientation - // [229] (byte*) current_piece#97 ← (byte*) current_piece#15 -- pbuz1=pbuz2 + // [229] (byte*) current_piece#96 ← (byte*) current_piece#15 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -13159,7 +13213,7 @@ play_move_leftright: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#2 [phi:play_move_leftright::@3->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#2 [phi:play_move_leftright::@3->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#2 [phi:play_move_leftright::@3->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#97 [phi:play_move_leftright::@3->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#96 [phi:play_move_leftright::@3->play_collision#3] -- register_copy jsr play_collision // [231] (byte) play_collision::return#13 ← (byte) play_collision::return#15 -- vbuz1=vbuz2 lda.z play_collision.return_5 @@ -13212,7 +13266,7 @@ play_move_leftright: { // [239] (byte) play_collision::orientation#1 ← (byte) current_orientation#20 -- vbuz1=vbuz2 lda.z current_orientation sta.z play_collision.orientation - // [240] (byte*) current_piece#96 ← (byte*) current_piece#15 -- pbuz1=pbuz2 + // [240] (byte*) current_piece#95 ← (byte*) current_piece#15 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -13223,7 +13277,7 @@ play_move_leftright: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#1 [phi:play_move_leftright::@1->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#1 [phi:play_move_leftright::@1->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#1 [phi:play_move_leftright::@1->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#96 [phi:play_move_leftright::@1->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#95 [phi:play_move_leftright::@1->play_collision#3] -- register_copy jsr play_collision // [242] (byte) play_collision::return#1 ← (byte) play_collision::return#15 -- vbuz1=vbuz2 lda.z play_collision.return_5 @@ -13283,9 +13337,9 @@ play_move_down: { // play_move_down::@1 __b1: // [250] call keyboard_event_pressed - // [379] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] + // [384] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] keyboard_event_pressed_from___b1: - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_SPACE [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_SPACE [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_SPACE sta.z keyboard_event_pressed.keycode jsr keyboard_event_pressed @@ -13355,7 +13409,7 @@ play_move_down: { // [263] (byte) play_collision::orientation#0 ← (byte) current_orientation#13 -- vbuz1=vbuz2 lda.z current_orientation sta.z play_collision.orientation - // [264] (byte*) current_piece#95 ← (byte*) current_piece#10 -- pbuz1=pbuz2 + // [264] (byte*) current_piece#94 ← (byte*) current_piece#10 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -13366,7 +13420,7 @@ play_move_down: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#0 [phi:play_move_down::@8->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#0 [phi:play_move_down::@8->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#0 [phi:play_move_down::@8->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#95 [phi:play_move_down::@8->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#94 [phi:play_move_down::@8->play_collision#3] -- register_copy jsr play_collision // [266] (byte) play_collision::return#0 ← (byte) play_collision::return#15 -- vbuz1=vbuz2 lda.z play_collision.return_5 @@ -13395,7 +13449,7 @@ play_move_down: { // play_move_down::@14 __b14: // [272] call play_remove_lines - // [338] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] + // [343] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] play_remove_lines_from___b14: jsr play_remove_lines // [273] (byte) play_remove_lines::return#0 ← (byte) play_remove_lines::removed#7 -- vbuz1=vbuz2 @@ -13428,13 +13482,13 @@ play_move_down: { jmp __b17 // play_move_down::@17 __b17: - // [279] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [279] (byte*) current_piece#91 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece lda PIECES+1,y sta.z current_piece+1 - // [280] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [280] (byte*) current_piece_gfx#115 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece_gfx @@ -13445,12 +13499,12 @@ play_move_down: { // [281] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#2 [phi:play_move_down::@17->play_move_down::@11#0] -- register_copy // [281] phi (byte) game_over#27 = (byte) game_over#52 [phi:play_move_down::@17->play_move_down::@11#1] -- register_copy // [281] phi (byte) current_xpos#43 = (byte) current_xpos#100 [phi:play_move_down::@17->play_move_down::@11#2] -- register_copy - // [281] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#116 [phi:play_move_down::@17->play_move_down::@11#3] -- register_copy + // [281] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#115 [phi:play_move_down::@17->play_move_down::@11#3] -- register_copy // [281] phi (byte) current_orientation#37 = (byte) 0 [phi:play_move_down::@17->play_move_down::@11#4] -- vbuz1=vbuc1 lda #0 sta.z current_orientation // [281] phi (byte) current_piece_char#29 = (byte) current_piece_char#5 [phi:play_move_down::@17->play_move_down::@11#5] -- register_copy - // [281] phi (byte*) current_piece#28 = (byte*) current_piece#92 [phi:play_move_down::@17->play_move_down::@11#6] -- register_copy + // [281] phi (byte*) current_piece#28 = (byte*) current_piece#91 [phi:play_move_down::@17->play_move_down::@11#6] -- register_copy // [281] phi (byte) level_bcd#31 = (byte) level_bcd#19 [phi:play_move_down::@17->play_move_down::@11#7] -- register_copy // [281] phi (byte) current_movedown_slow#37 = (byte) current_movedown_slow#23 [phi:play_move_down::@17->play_move_down::@11#8] -- register_copy // [281] phi (byte) level#33 = (byte) level#19 [phi:play_move_down::@17->play_move_down::@11#9] -- register_copy @@ -13528,9 +13582,9 @@ play_move_down: { // Moves the next piece into the current and spawns a new next piece play_spawn_current: { .label __1 = $ae + .label __5 = $b0 .label __7 = $ac .label current_piece_idx = $ab - .label sid_rnd1_return = $af // Spawn a new next piece // Pick a random piece (0-6) .label piece_idx = $45 @@ -13560,7 +13614,7 @@ play_spawn_current: { // [292] (byte) play_collision::ypos#4 ← (byte) current_ypos#6 -- vbuz1=vbuz2 lda.z current_ypos sta.z play_collision.ypos - // [293] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [293] (byte*) current_piece#98 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z __7 lda PIECES,y sta.z current_piece_1 @@ -13574,7 +13628,7 @@ play_spawn_current: { // [200] phi (byte) play_collision::orientation#5 = (byte) 0 [phi:play_spawn_current->play_collision#2] -- vbuz1=vbuc1 lda #0 sta.z play_collision.orientation - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#99 [phi:play_spawn_current->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#98 [phi:play_spawn_current->play_collision#3] -- register_copy jsr play_collision // [295] (byte) play_collision::return#10 ← (byte) play_collision::return#15 -- vbuz1=vbuz2 lda.z play_collision.return_5 @@ -13585,24 +13639,24 @@ play_spawn_current: { // [296] (byte~) play_spawn_current::$1 ← (byte) play_collision::return#10 -- vbuz1=vbuz2 lda.z play_collision.return_2 sta.z __1 - // [297] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@5 -- vbuz1_neq_vbuc1_then_la1 + // [297] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@6 -- vbuz1_neq_vbuc1_then_la1 lda #COLLISION_PLAYFIELD cmp.z __1 - bne __b5_from___b4 + bne __b6_from___b4 // [299] phi from play_spawn_current::@4 to play_spawn_current::@1 [phi:play_spawn_current::@4->play_spawn_current::@1] __b1_from___b4: // [299] phi (byte) game_over#52 = (byte) 1 [phi:play_spawn_current::@4->play_spawn_current::@1#0] -- vbuz1=vbuc1 lda #1 sta.z game_over jmp __b1 - // [298] phi from play_spawn_current::@4 to play_spawn_current::@5 [phi:play_spawn_current::@4->play_spawn_current::@5] - __b5_from___b4: - jmp __b5 - // play_spawn_current::@5 - __b5: - // [299] phi from play_spawn_current::@5 to play_spawn_current::@1 [phi:play_spawn_current::@5->play_spawn_current::@1] - __b1_from___b5: - // [299] phi (byte) game_over#52 = (byte) game_over#65 [phi:play_spawn_current::@5->play_spawn_current::@1#0] -- register_copy + // [298] phi from play_spawn_current::@4 to play_spawn_current::@6 [phi:play_spawn_current::@4->play_spawn_current::@6] + __b6_from___b4: + jmp __b6 + // play_spawn_current::@6 + __b6: + // [299] phi from play_spawn_current::@6 to play_spawn_current::@1 [phi:play_spawn_current::@6->play_spawn_current::@1] + __b1_from___b6: + // [299] phi (byte) game_over#52 = (byte) game_over#65 [phi:play_spawn_current::@6->play_spawn_current::@1#0] -- register_copy jmp __b1 // play_spawn_current::@1 __b1: @@ -13614,63 +13668,86 @@ play_spawn_current: { jmp __b2 // play_spawn_current::@2 __b2: - // [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1 + // [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::@3 -- vbuz1_eq_vbuc1_then_la1 lda #7 cmp.z piece_idx - beq sid_rnd1 + beq __b3_from___b2 jmp __breturn // play_spawn_current::@return __breturn: // [302] return rts - // play_spawn_current::sid_rnd1 - sid_rnd1: - // [303] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuz1=_deref_pbuc1 - lda SID_VOICE3_OSC - sta.z sid_rnd1_return + // [303] phi from play_spawn_current::@2 to play_spawn_current::@3 [phi:play_spawn_current::@2->play_spawn_current::@3] + __b3_from___b2: jmp __b3 // play_spawn_current::@3 __b3: - // [304] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [304] call sid_rnd + jsr sid_rnd + // [305] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 -- vbuz1=vbuz2 + lda.z sid_rnd.return + sta.z sid_rnd.return_1 + jmp __b5 + // play_spawn_current::@5 + __b5: + // [306] (byte~) play_spawn_current::$5 ← (byte) sid_rnd::return#2 -- vbuz1=vbuz2 + lda.z sid_rnd.return_1 + sta.z __5 + // [307] (byte) play_spawn_current::piece_idx#1 ← (byte~) play_spawn_current::$5 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 - and.z sid_rnd1_return + and.z __5 sta.z piece_idx - // [300] phi from play_spawn_current::@3 to play_spawn_current::@2 [phi:play_spawn_current::@3->play_spawn_current::@2] - __b2_from___b3: - // [300] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@3->play_spawn_current::@2#0] -- register_copy + // [300] phi from play_spawn_current::@5 to play_spawn_current::@2 [phi:play_spawn_current::@5->play_spawn_current::@2] + __b2_from___b5: + // [300] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@5->play_spawn_current::@2#0] -- register_copy jmp __b2 +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + .label return = $b1 + .label return_1 = $af + // [308] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuz1=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC + sta.z return + jmp __breturn + // sid_rnd::@return + __breturn: + // [309] return + rts } // play_update_score // Update the score based on the number of lines removed // play_update_score(byte zp($aa) removed) play_update_score: { - .label __2 = $b0 - .label __4 = $b7 - .label __9 = $b2 + .label __2 = $b2 + .label __4 = $b9 + .label __9 = $b4 .label removed = $aa - .label lines_before = $b1 - .label add_bcd = $b3 - .label lines_after = $b8 - // [305] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuz1_eq_0_then_la1 + .label lines_before = $b3 + .label add_bcd = $b5 + .label lines_after = $ba + // [310] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuz1_eq_0_then_la1 lda.z removed cmp #0 beq __breturn_from_play_update_score jmp __b1 // play_update_score::@1 __b1: - // [306] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuz1=_lo_vwuz2 + // [311] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuz1=_lo_vwuz2 lda.z lines_bcd sta.z __2 - // [307] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 -- vbuz1=vbuz2_band_vbuc1 + // [312] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 -- vbuz1=vbuz2_band_vbuc1 lda #$f0 and.z __2 sta.z lines_before - // [308] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [313] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z removed asl asl sta.z __9 - // [309] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) -- vduz1=pduc1_derefidx_vbuz2 + // [314] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) -- vduz1=pduc1_derefidx_vbuz2 ldy.z __9 lda score_add_bcd,y sta.z add_bcd @@ -13682,7 +13759,7 @@ play_update_score: { sta.z add_bcd+3 // asm { sed } sed - // [311] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuz2 + // [316] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuz2 lda.z removed clc adc.z lines_bcd @@ -13690,7 +13767,7 @@ play_update_score: { bcc !+ inc.z lines_bcd+1 !: - // [312] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2 + // [317] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2 lda.z score_bcd clc adc.z add_bcd @@ -13706,47 +13783,47 @@ play_update_score: { sta.z score_bcd+3 // asm { cld } cld - // [314] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 -- vbuz1=_lo_vwuz2 + // [319] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 -- vbuz1=_lo_vwuz2 lda.z lines_bcd sta.z __4 - // [315] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 -- vbuz1=vbuz2_band_vbuc1 + // [320] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 -- vbuz1=vbuz2_band_vbuc1 lda #$f0 and.z __4 sta.z lines_after - // [316] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuz2_then_la1 + // [321] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuz2_then_la1 lda.z lines_before cmp.z lines_after beq __breturn_from___b1 - // [317] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2] + // [322] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2] __b2_from___b1: jmp __b2 // play_update_score::@2 __b2: - // [318] call play_increase_level + // [323] call play_increase_level jsr play_increase_level - // [319] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] + // [324] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] __breturn_from_play_update_score: __breturn_from___b1: __breturn_from___b2: - // [319] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy - // [319] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy - // [319] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy - // [319] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy + // [324] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy + // [324] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy + // [324] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy + // [324] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy jmp __breturn // play_update_score::@return __breturn: - // [320] return + // [325] return rts } // play_increase_level // Increase the level play_increase_level: { - .label __1 = $b9 - .label __5 = $ba + .label __1 = $bb + .label __5 = $bc .label b = $47 - // [321] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 + // [326] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 inc.z level - // [322] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 + // [327] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 // Update speed of moving tetrominos down lda.z level cmp #$1d+1 @@ -13754,68 +13831,68 @@ play_increase_level: { jmp __b3 // play_increase_level::@3 __b3: - // [323] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 + // [328] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z level lda MOVEDOWN_SLOW_SPEEDS,y sta.z current_movedown_slow - // [324] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] + // [329] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] __b1_from___b3: - // [324] phi (byte) current_movedown_slow#65 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy + // [329] phi (byte) current_movedown_slow#65 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy jmp __b1 - // [324] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] + // [329] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] __b1_from_play_increase_level: - // [324] phi (byte) current_movedown_slow#65 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 + // [329] phi (byte) current_movedown_slow#65 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 lda #1 sta.z current_movedown_slow jmp __b1 // play_increase_level::@1 __b1: - // [325] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 + // [330] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 inc.z level_bcd - // [326] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 + // [331] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuz1=vbuz2_band_vbuc1 lda #$f and.z level_bcd sta.z __1 - // [327] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuz1_neq_vbuc1_then_la1 + // [332] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuz1_neq_vbuc1_then_la1 lda #$a cmp.z __1 bne __b2_from___b1 jmp __b4 // play_increase_level::@4 __b4: - // [328] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 + // [333] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 // If level low nybble hits 0xa change to 0x10 lax.z level_bcd axs #-[6] stx.z level_bcd - // [329] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] + // [334] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] __b2_from___b1: __b2_from___b4: - // [329] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy + // [334] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy jmp __b2 // play_increase_level::@2 __b2: // asm { sed } // Increase the score values gained sed - // [331] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] + // [336] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] __b5_from___b2: - // [331] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuz1=vbuc1 + // [336] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuz1=vbuc1 lda #0 sta.z b jmp __b5 - // [331] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] + // [336] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] __b5_from___b5: - // [331] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy + // [336] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy jmp __b5 // play_increase_level::@5 __b5: - // [332] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [337] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z b asl asl sta.z __5 - // [333] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuz1=pduc1_derefidx_vbuz1_plus_pduc2_derefidx_vbuz1 + // [338] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuz1=pduc1_derefidx_vbuz1_plus_pduc2_derefidx_vbuz1 ldy.z __5 clc lda score_add_bcd,y @@ -13830,9 +13907,9 @@ play_increase_level: { lda score_add_bcd+3,y adc SCORE_BASE_BCD+3,y sta score_add_bcd+3,y - // [334] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuz1=_inc_vbuz1 + // [339] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuz1=_inc_vbuz1 inc.z b - // [335] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuz1_neq_vbuc1_then_la1 + // [340] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuz1_neq_vbuc1_then_la1 lda #5 cmp.z b bne __b5_from___b5 @@ -13844,7 +13921,7 @@ play_increase_level: { jmp __breturn // play_increase_level::@return __breturn: - // [337] return + // [342] return rts } // play_remove_lines @@ -13854,7 +13931,7 @@ play_increase_level: { // Returns the number of lines removed play_remove_lines: { .label return = $a8 - .label c = $bb + .label c = $bd // Start both cursors at the end of the playfield .label r = $4a .label w = $4d @@ -13862,201 +13939,201 @@ play_remove_lines: { .label y = $48 .label removed = $49 .label full = $4c - // [339] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] + // [344] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] __b1_from_play_remove_lines: - // [339] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 + // [344] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 lda #0 sta.z removed - // [339] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 + // [344] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 lda #0 sta.z y - // [339] phi (byte) play_remove_lines::w#12 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuz1=vbuc1 + // [344] phi (byte) play_remove_lines::w#12 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuz1=vbuc1 lda #PLAYFIELD_LINES*PLAYFIELD_COLS-1 sta.z w - // [339] phi (byte) play_remove_lines::r#3 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuz1=vbuc1 + // [344] phi (byte) play_remove_lines::r#3 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuz1=vbuc1 lda #PLAYFIELD_LINES*PLAYFIELD_COLS-1 sta.z r jmp __b1 // Read all lines and rewrite them - // [339] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] + // [344] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] __b1_from___b6: - // [339] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#7 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy - // [339] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy - // [339] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy - // [339] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy + // [344] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#7 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy + // [344] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy + // [344] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy + // [344] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy jmp __b1 // play_remove_lines::@1 __b1: - // [340] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] + // [345] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] __b2_from___b1: - // [340] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 + // [345] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 lda #1 sta.z full - // [340] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 + // [345] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 lda #0 sta.z x - // [340] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy - // [340] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy + // [345] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy + // [345] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy jmp __b2 - // [340] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] + // [345] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] __b2_from___b3: - // [340] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy - // [340] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy - // [340] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy - // [340] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy + // [345] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy + // [345] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy + // [345] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy + // [345] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy jmp __b2 // play_remove_lines::@2 __b2: - // [341] (byte) play_remove_lines::c#0 ← *((const byte*) playfield + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuz2 + // [346] (byte) play_remove_lines::c#0 ← *((const byte*) playfield + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z r lda playfield,y sta.z c - // [342] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuz1=_dec_vbuz1 + // [347] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuz1=_dec_vbuz1 dec.z r - // [343] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 + // [348] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 lda.z c cmp #0 bne __b9_from___b2 - // [345] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] + // [350] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] __b3_from___b2: - // [345] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 + // [350] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 lda #0 sta.z full jmp __b3 - // [344] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] + // [349] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] __b9_from___b2: jmp __b9 // play_remove_lines::@9 __b9: - // [345] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] + // [350] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] __b3_from___b9: - // [345] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy + // [350] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy jmp __b3 // play_remove_lines::@3 __b3: - // [346] *((const byte*) playfield + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [351] *((const byte*) playfield + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z c ldy.z w sta playfield,y - // [347] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuz1=_dec_vbuz1 + // [352] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuz1=_dec_vbuz1 dec.z w - // [348] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 + // [353] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [349] if((byte) play_remove_lines::x#1!=(const nomodify byte) PLAYFIELD_COLS-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 + // [354] if((byte) play_remove_lines::x#1!=(const nomodify byte) PLAYFIELD_COLS-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_COLS-1+1 cmp.z x bne __b2_from___b3 jmp __b4 // play_remove_lines::@4 __b4: - // [350] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 + // [355] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 lda #1 cmp.z full bne __b6_from___b4 jmp __b5 // play_remove_lines::@5 __b5: - // [351] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS -- vbuz1=vbuz1_plus_vbuc1 + // [356] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS -- vbuz1=vbuz1_plus_vbuc1 lax.z w axs #-[PLAYFIELD_COLS] stx.z w - // [352] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 + // [357] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 inc.z removed - // [353] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] + // [358] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] __b6_from___b4: __b6_from___b5: - // [353] phi (byte) play_remove_lines::removed#7 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy - // [353] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy + // [358] phi (byte) play_remove_lines::removed#7 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy + // [358] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy jmp __b6 // play_remove_lines::@6 __b6: - // [354] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 + // [359] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 inc.z y - // [355] if((byte) play_remove_lines::y#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 + // [360] if((byte) play_remove_lines::y#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_LINES-1+1 cmp.z y bne __b1_from___b6 - // [356] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] + // [361] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] __b7_from___b6: __b7_from___b8: - // [356] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy + // [361] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy jmp __b7 // Write zeros in the rest of the lines // play_remove_lines::@7 __b7: - // [357] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuz1_neq_vbuc1_then_la1 + // [362] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuz1_neq_vbuc1_then_la1 lda #$ff cmp.z w bne __b8 jmp __breturn // play_remove_lines::@return __breturn: - // [358] return + // [363] return rts // play_remove_lines::@8 __b8: - // [359] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 + // [364] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2 lda #0 ldy.z w sta playfield,y - // [360] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuz1=_dec_vbuz1 + // [365] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuz1=_dec_vbuz1 dec.z w jmp __b7_from___b8 } // play_lock_current // Lock the current piece onto the playfield play_lock_current: { - .label __4 = $bc + .label __4 = $be .label yp = $4e - .label playfield_line = $bd + .label playfield_line = $bf .label xp = $51 - .label i = $bf + .label i = $c1 .label c = $52 .label l = $4f .label i_1 = $50 - // [361] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 -- vbuz1=vbuz2 + // [366] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 -- vbuz1=vbuz2 lda.z current_ypos sta.z yp - // [362] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] + // [367] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] __b1_from_play_lock_current: - // [362] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 + // [367] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 lda #0 sta.z l - // [362] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 + // [367] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i_1 - // [362] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy + // [367] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy jmp __b1 // play_lock_current::@1 __b1: - // [363] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [368] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z yp asl sta.z __4 - // [364] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuz2 + // [369] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z __4 lda playfield_lines,y sta.z playfield_line lda playfield_lines+1,y sta.z playfield_line+1 - // [365] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 + // [370] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 lda.z current_xpos sta.z xp - // [366] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] + // [371] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] __b2_from___b1: - // [366] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuz1=vbuc1 + // [371] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuz1=vbuc1 lda #0 sta.z c - // [366] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy - // [366] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy + // [371] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy + // [371] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy jmp __b2 // play_lock_current::@2 __b2: - // [367] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 + // [372] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 ldy.z i_1 iny sty.z i - // [368] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 + // [373] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 ldy.z i_1 lda (current_piece_gfx),y cmp #0 @@ -14064,58 +14141,58 @@ play_lock_current: { jmp __b4 // play_lock_current::@4 __b4: - // [369] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 + // [374] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z current_piece_char ldy.z xp sta (playfield_line),y jmp __b3 // play_lock_current::@3 __b3: - // [370] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 + // [375] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 inc.z xp - // [371] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuz1=_inc_vbuz1 + // [376] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuz1=_inc_vbuz1 inc.z c - // [372] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuz1_neq_vbuc1_then_la1 + // [377] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp.z c bne __b7 jmp __b5 // play_lock_current::@5 __b5: - // [373] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 + // [378] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 inc.z yp - // [374] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 + // [379] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 inc.z l - // [375] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 + // [380] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp.z l bne __b6 jmp __breturn // play_lock_current::@return __breturn: - // [376] return + // [381] return rts // play_lock_current::@6 __b6: - // [377] (byte) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [382] (byte) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda.z i sta.z i_1 - // [362] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] + // [367] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] __b1_from___b6: - // [362] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy - // [362] phi (byte) play_lock_current::i#3 = (byte) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy - // [362] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy + // [367] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy + // [367] phi (byte) play_lock_current::i#3 = (byte) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy + // [367] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy jmp __b1 // play_lock_current::@7 __b7: - // [378] (byte) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [383] (byte) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda.z i sta.z i_1 - // [366] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] + // [371] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] __b2_from___b7: - // [366] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy - // [366] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy - // [366] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy + // [371] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy + // [371] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy + // [371] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy jmp __b2 } // keyboard_event_pressed @@ -14123,31 +14200,31 @@ play_lock_current: { // Returns 0 is not pressed and non-0 if pressed // keyboard_event_pressed(byte zp($53) keycode) keyboard_event_pressed: { - .label __0 = $c0 - .label __1 = $c2 - .label return = $c7 - .label return_1 = $c9 - .label return_2 = $cb - .label row_bits = $c1 - .label return_3 = $cd + .label __0 = $c2 + .label __1 = $c4 + .label return = $c9 + .label return_1 = $cb + .label return_2 = $cd + .label row_bits = $c3 + .label return_3 = $cf .label keycode = $53 - .label return_4 = $c3 + .label return_4 = $c5 .label return_5 = $a4 - // [380] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuz1=vbuz2_ror_3 + // [385] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuz1=vbuz2_ror_3 lda.z keycode lsr lsr lsr sta.z __0 - // [381] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuz2 + // [386] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z __0 lda keyboard_scan_values,y sta.z row_bits - // [382] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 + // [387] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 lda #7 and.z keycode sta.z __1 - // [383] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 + // [388] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 lda.z row_bits ldy.z __1 and keyboard_matrix_col_bitmask,y @@ -14155,7 +14232,7 @@ keyboard_event_pressed: { jmp __breturn // keyboard_event_pressed::@return __breturn: - // [384] return + // [389] return rts } // keyboard_event_get @@ -14165,34 +14242,34 @@ keyboard_event_pressed: { keyboard_event_get: { .label return = $54 .label return_1 = $79 - // [385] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 + // [390] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 lda.z keyboard_events_size cmp #0 beq __breturn_from_keyboard_event_get jmp __b1 // keyboard_event_get::@1 __b1: - // [386] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 + // [391] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 dec.z keyboard_events_size - // [387] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) -- vbuz1=pbuc1_derefidx_vbuz2 + // [392] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z keyboard_events_size lda keyboard_events,y sta.z return - // [388] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] + // [393] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] __breturn_from___b1: - // [388] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy - // [388] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy + // [393] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy + // [393] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy jmp __breturn - // [388] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] + // [393] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] __breturn_from_keyboard_event_get: - // [388] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy - // [388] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuz1=vbuc1 + // [393] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy + // [393] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuz1=vbuc1 lda #$ff sta.z return jmp __breturn // keyboard_event_get::@return __breturn: - // [389] return + // [394] return rts } // keyboard_event_scan @@ -14201,51 +14278,51 @@ keyboard_event_get: { // Handles debounce and only generates events when the status of a key changes. // Also stores current status of modifiers in keyboard_modifiers. keyboard_event_scan: { - .label __0 = $c8 - .label __3 = $ca - .label __6 = $cc - .label __9 = $ce - .label __15 = $cf - .label __16 = $d0 - .label __23 = $d2 - .label row_scan = $c6 + .label __0 = $ca + .label __3 = $cc + .label __6 = $ce + .label __9 = $d0 + .label __15 = $d1 + .label __16 = $d2 + .label __23 = $d4 + .label row_scan = $c8 .label keycode = $57 .label row = $55 .label col = $56 - .label event_type = $d1 - // [391] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] + .label event_type = $d3 + // [396] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] __b7_from_keyboard_event_scan: - // [391] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy - // [391] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 + // [396] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy + // [396] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 lda #0 sta.z keycode - // [391] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 + // [396] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 lda #0 sta.z row jmp __b7 - // [391] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] + // [396] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] __b7_from___b8: - // [391] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy - // [391] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy - // [391] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy + // [396] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy + // [396] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy + // [396] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy jmp __b7 // keyboard_event_scan::@7 __b7: - // [392] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuz1=vbuz2 + // [397] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuz1=vbuz2 lda.z row sta.z keyboard_matrix_read.rowid - // [393] call keyboard_matrix_read + // [398] call keyboard_matrix_read jsr keyboard_matrix_read - // [394] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 + // [399] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 -- vbuz1=vbuz2 lda.z keyboard_matrix_read.return sta.z keyboard_matrix_read.return_1 jmp __b19 // keyboard_event_scan::@19 __b19: - // [395] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 + // [400] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuz2 lda.z keyboard_matrix_read.return_1 sta.z row_scan - // [396] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 + // [401] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 lda.z row_scan ldy.z row cmp keyboard_scan_values,y @@ -14253,143 +14330,143 @@ keyboard_event_scan: { jmp __b16 // keyboard_event_scan::@16 __b16: - // [397] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 + // [402] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 lax.z keycode axs #-[8] stx.z keycode - // [398] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] + // [403] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] __b8_from___b15: __b8_from___b16: - // [398] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy - // [398] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy + // [403] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy + // [403] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy jmp __b8 // keyboard_event_scan::@8 __b8: - // [399] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 + // [404] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 inc.z row - // [400] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 + // [405] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z row bne __b7_from___b8 - // [401] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] + // [406] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] __b17_from___b8: jmp __b17 // keyboard_event_scan::@17 __b17: - // [402] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] + // [407] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] keyboard_event_pressed_from___b17: - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_LSHIFT [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_LSHIFT [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_LSHIFT sta.z keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [403] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 + // [408] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 lda.z keyboard_event_pressed.return_4 sta.z keyboard_event_pressed.return jmp __b20 // keyboard_event_scan::@20 __b20: - // [404] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 -- vbuz1=vbuz2 + // [409] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 -- vbuz1=vbuz2 lda.z keyboard_event_pressed.return sta.z __0 - // [405] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuz1_eq_0_then_la1 + // [410] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuz1_eq_0_then_la1 lda.z __0 cmp #0 beq __b1_from___b20 - // [406] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] + // [411] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] __b18_from___b20: jmp __b18 // keyboard_event_scan::@18 __b18: - // [407] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] + // [412] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] __b1_from___b18: __b1_from___b20: jmp __b1 // keyboard_event_scan::@1 __b1: - // [408] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] + // [413] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] keyboard_event_pressed_from___b1: - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_RSHIFT [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_RSHIFT [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_RSHIFT sta.z keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [409] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 + // [414] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 lda.z keyboard_event_pressed.return_4 sta.z keyboard_event_pressed.return_1 jmp __b21 // keyboard_event_scan::@21 __b21: - // [410] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 -- vbuz1=vbuz2 + // [415] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 -- vbuz1=vbuz2 lda.z keyboard_event_pressed.return_1 sta.z __3 - // [411] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuz1_eq_0_then_la1 + // [416] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuz1_eq_0_then_la1 lda.z __3 cmp #0 beq __b2_from___b21 - // [412] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] + // [417] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] __b4_from___b21: jmp __b4 // keyboard_event_scan::@4 __b4: - // [413] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] + // [418] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] __b2_from___b21: __b2_from___b4: jmp __b2 // keyboard_event_scan::@2 __b2: - // [414] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] + // [419] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] keyboard_event_pressed_from___b2: - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_CTRL [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_CTRL [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_CTRL sta.z keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [415] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 + // [420] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 lda.z keyboard_event_pressed.return_4 sta.z keyboard_event_pressed.return_2 jmp __b22 // keyboard_event_scan::@22 __b22: - // [416] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 -- vbuz1=vbuz2 + // [421] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 -- vbuz1=vbuz2 lda.z keyboard_event_pressed.return_2 sta.z __6 - // [417] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuz1_eq_0_then_la1 + // [422] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuz1_eq_0_then_la1 lda.z __6 cmp #0 beq __b3_from___b22 - // [418] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] + // [423] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] __b5_from___b22: jmp __b5 // keyboard_event_scan::@5 __b5: - // [419] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] + // [424] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] __b3_from___b22: __b3_from___b5: jmp __b3 // keyboard_event_scan::@3 __b3: - // [420] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] + // [425] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] keyboard_event_pressed_from___b3: - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_COMMODORE [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1 + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_COMMODORE [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuz1=vbuc1 lda #KEY_COMMODORE sta.z keyboard_event_pressed.keycode jsr keyboard_event_pressed - // [421] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 + // [426] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 -- vbuz1=vbuz2 lda.z keyboard_event_pressed.return_4 sta.z keyboard_event_pressed.return_3 jmp __b23 // keyboard_event_scan::@23 __b23: - // [422] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 -- vbuz1=vbuz2 + // [427] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 -- vbuz1=vbuz2 lda.z keyboard_event_pressed.return_3 sta.z __9 - // [423] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuz1_eq_0_then_la1 + // [428] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuz1_eq_0_then_la1 lda.z __9 cmp #0 beq __breturn - // [424] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] + // [429] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] __b6_from___b23: jmp __b6 // keyboard_event_scan::@6 @@ -14397,89 +14474,89 @@ keyboard_event_scan: { jmp __breturn // keyboard_event_scan::@return __breturn: - // [425] return + // [430] return rts // Something has changed on the keyboard row - check each column - // [426] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] + // [431] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] __b9_from___b10: - // [426] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy - // [426] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy - // [426] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy + // [431] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy + // [431] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy + // [431] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy jmp __b9 - // [426] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] + // [431] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] __b9_from___b19: - // [426] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy - // [426] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy - // [426] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuz1=vbuc1 + // [431] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy + // [431] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy + // [431] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuz1=vbuc1 lda #0 sta.z col jmp __b9 // keyboard_event_scan::@9 __b9: - // [427] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) -- vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuz3 + // [432] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) -- vbuz1=vbuz2_bxor_pbuc1_derefidx_vbuz3 lda.z row_scan ldy.z row eor keyboard_scan_values,y sta.z __15 - // [428] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 + // [433] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 lda.z __15 ldy.z col and keyboard_matrix_col_bitmask,y sta.z __16 - // [429] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuz1_eq_0_then_la1 + // [434] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuz1_eq_0_then_la1 lda.z __16 cmp #0 beq __b10_from___b9 jmp __b12 // keyboard_event_scan::@12 __b12: - // [430] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 + // [435] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 lda #8 cmp.z keyboard_events_size beq __b10_from___b12 jmp __b13 // keyboard_event_scan::@13 __b13: - // [431] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 + // [436] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuz1=vbuz2_band_pbuc1_derefidx_vbuz3 lda.z row_scan ldy.z col and keyboard_matrix_col_bitmask,y sta.z event_type - // [432] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuz1_eq_0_then_la1 + // [437] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuz1_eq_0_then_la1 lda.z event_type cmp #0 beq __b11 jmp __b14 // keyboard_event_scan::@14 __b14: - // [433] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 + // [438] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 // Key pressed lda.z keycode ldy.z keyboard_events_size sta keyboard_events,y - // [434] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [439] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc.z keyboard_events_size - // [435] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] + // [440] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] __b10_from___b11: __b10_from___b12: __b10_from___b14: __b10_from___b9: - // [435] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy + // [440] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy jmp __b10 // keyboard_event_scan::@10 __b10: - // [436] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 + // [441] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 inc.z keycode - // [437] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuz1=_inc_vbuz1 + // [442] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuz1=_inc_vbuz1 inc.z col - // [438] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuz1_neq_vbuc1_then_la1 + // [443] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z col bne __b9_from___b10 jmp __b15 // keyboard_event_scan::@15 __b15: - // [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [444] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 // Store the current keyboard status for the row to debounce lda.z row_scan ldy.z row @@ -14487,16 +14564,16 @@ keyboard_event_scan: { jmp __b8_from___b15 // keyboard_event_scan::@11 __b11: - // [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuz1=vbuz2_bor_vbuc1 + // [445] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuz1=vbuz2_bor_vbuc1 lda #$40 ora.z keycode sta.z __23 - // [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuz2 + // [446] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuz2 // Key released lda.z __23 ldy.z keyboard_events_size sta keyboard_events,y - // [442] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [447] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc.z keyboard_events_size jmp __b10_from___b11 } @@ -14506,23 +14583,23 @@ keyboard_event_scan: { // Returns the keys pressed on the row as bits according to the C64 key matrix. // Notice: If the C64 normal interrupt is still running it will occasionally interrupt right between the read & write // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. -// keyboard_matrix_read(byte zp($c4) rowid) +// keyboard_matrix_read(byte zp($c6) rowid) keyboard_matrix_read: { - .label return = $d3 - .label rowid = $c4 - .label return_1 = $c5 - // [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + .label return = $d5 + .label rowid = $c6 + .label return_1 = $c7 + // [448] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z rowid lda keyboard_matrix_row_bitmask,y sta CIA1 - // [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 + // [449] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuz1=_bnot__deref_pbuc1 lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff sta.z return jmp __breturn // keyboard_matrix_read::@return __breturn: - // [445] return + // [450] return rts } // render_show @@ -14531,50 +14608,50 @@ render_show: { .const toD0181_return = (>(PLAYFIELD_SCREEN_1&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f .const toD0182_return = (>(PLAYFIELD_SCREEN_2&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f .label d018val = $59 - // [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 + // [451] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 lda.z render_screen_show cmp #0 beq toD0181_from_render_show - // [447] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] + // [452] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] toD0182_from_render_show: jmp toD0182 // render_show::toD0182 toD0182: - // [448] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] + // [453] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] __b1_from_toD0182: - // [448] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuz1=vbuc1 + // [453] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuz1=vbuc1 lda #toD0182_return sta.z d018val jmp __b1 // render_show::@1 __b1: - // [449] *((const nomodify byte*) D018) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuz1 + // [454] *((const nomodify byte*) D018) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuz1 lda.z d018val sta D018 - // [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [455] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z level lda PIECES_COLORS_1,y sta BGCOL2 - // [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [456] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z level lda PIECES_COLORS_2,y sta BGCOL3 - // [452] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 -- vbuz1=vbuz2 + // [457] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 -- vbuz1=vbuz2 lda.z render_screen_show sta.z render_screen_showing jmp __breturn // render_show::@return __breturn: - // [453] return + // [458] return rts - // [454] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] + // [459] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] toD0181_from_render_show: jmp toD0181 // render_show::toD0181 toD0181: - // [448] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] + // [453] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] __b1_from_toD0181: - // [448] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuz1=vbuc1 + // [453] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuz1=vbuc1 lda #toD0181_return sta.z d018val jmp __b1 @@ -14582,50 +14659,50 @@ render_show: { // play_init // Initialize play data tables play_init: { - .label __2 = $d4 - .label __3 = $d5 + .label __2 = $d6 + .label __3 = $d7 .label pli = $5b // Initialize the playfield line pointers; .label idx = $5d .label j = $5a .label b = $5e - // [456] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] + // [461] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] __b1_from_play_init: - // [456] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 + // [461] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [456] phi (byte*) play_init::pli#2 = (const byte*) playfield [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 + // [461] phi (byte*) play_init::pli#2 = (const byte*) playfield [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 lda #playfield sta.z pli+1 - // [456] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuz1=vbuc1 + // [461] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuz1=vbuc1 lda #0 sta.z j jmp __b1 - // [456] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] + // [461] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] __b1_from___b1: - // [456] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy - // [456] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy - // [456] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy + // [461] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy + // [461] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy + // [461] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy jmp __b1 // play_init::@1 __b1: - // [457] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [462] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z j asl sta.z __2 - // [458] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuz1=pbuz2 + // [463] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuz1=pbuz2 ldy.z __2 lda.z pli sta playfield_lines,y lda.z pli+1 sta playfield_lines+1,y - // [459] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [464] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z idx ldy.z j sta playfield_lines_idx,y - // [460] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS -- pbuz1=pbuz1_plus_vbuc1 + // [465] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS -- pbuz1=pbuz1_plus_vbuc1 lda #PLAYFIELD_COLS clc adc.z pli @@ -14633,45 +14710,45 @@ play_init: { bcc !+ inc.z pli+1 !: - // [461] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS -- vbuz1=vbuz1_plus_vbuc1 + // [466] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS -- vbuz1=vbuz1_plus_vbuc1 lax.z idx axs #-[PLAYFIELD_COLS] stx.z idx - // [462] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuz1=_inc_vbuz1 + // [467] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuz1=_inc_vbuz1 inc.z j - // [463] if((byte) play_init::j#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_init::@1 -- vbuz1_neq_vbuc1_then_la1 + // [468] if((byte) play_init::j#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_init::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_LINES-1+1 cmp.z j bne __b1_from___b1 jmp __b2 // play_init::@2 __b2: - // [464] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES -- _deref_pbuc1=vbuc2 + // [469] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES -- _deref_pbuc1=vbuc2 lda #PLAYFIELD_COLS*PLAYFIELD_LINES sta playfield_lines_idx+PLAYFIELD_LINES - // [465] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) -- vbuz1=_deref_pbuc1 + // [470] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) -- vbuz1=_deref_pbuc1 // Set initial speed of moving down a tetromino lda MOVEDOWN_SLOW_SPEEDS sta.z current_movedown_slow - // [466] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] + // [471] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] __b3_from___b2: - // [466] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuz1=vbuc1 + // [471] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuz1=vbuc1 lda #0 sta.z b jmp __b3 // Set the initial score add values - // [466] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] + // [471] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] __b3_from___b3: - // [466] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy + // [471] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy jmp __b3 // play_init::@3 __b3: - // [467] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 + // [472] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 -- vbuz1=vbuz2_rol_2 lda.z b asl asl sta.z __3 - // [468] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) -- pduc1_derefidx_vbuz1=pduc2_derefidx_vbuz1 + // [473] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) -- pduc1_derefidx_vbuz1=pduc2_derefidx_vbuz1 ldy.z __3 lda SCORE_BASE_BCD,y sta score_add_bcd,y @@ -14681,16 +14758,16 @@ play_init: { sta score_add_bcd+2,y lda SCORE_BASE_BCD+3,y sta score_add_bcd+3,y - // [469] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuz1=_inc_vbuz1 + // [474] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuz1=_inc_vbuz1 inc.z b - // [470] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuz1_neq_vbuc1_then_la1 + // [475] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuz1_neq_vbuc1_then_la1 lda #5 cmp.z b bne __b3_from___b3 jmp __breturn // play_init::@return __breturn: - // [471] return + // [476] return rts } // sprites_irq_init @@ -14698,36 +14775,36 @@ play_init: { sprites_irq_init: { // asm { sei } sei - // [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [478] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge any IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS // asm { ldaCIA1_INTERRUPT } lda CIA1_INTERRUPT - // [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [480] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [481] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [482] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT - // [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [483] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line lda #$7f and VIC_CONTROL sta VIC_CONTROL - // [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST -- _deref_pbuc1=vbuc2 + // [484] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST -- _deref_pbuc1=vbuc2 lda #IRQ_RASTER_FIRST sta RASTER - // [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [485] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [481] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 + // [486] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #sprites_init::@1] + // [493] phi from sprites_init to sprites_init::@1 [phi:sprites_init->sprites_init::@1] __b1_from_sprites_init: - // [488] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 + // [493] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 lda #$18+$f*8 sta.z xpos - // [488] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuz1=vbuc1 + // [493] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuz1=vbuc1 lda #0 sta.z s jmp __b1 - // [488] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] + // [493] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] __b1_from___b1: - // [488] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy - // [488] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy + // [493] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy + // [493] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy jmp __b1 // sprites_init::@1 __b1: - // [489] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [494] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z s asl sta.z s2 - // [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuz1=vbuz2 + // [495] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuz1=vbuz2 lda.z xpos ldy.z s2 sta SPRITES_XPOS,y - // [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK -- pbuc1_derefidx_vbuz1=vbuc2 + // [496] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK -- pbuc1_derefidx_vbuz1=vbuc2 lda #BLACK ldy.z s sta SPRITES_COLS,y - // [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 + // [497] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 lax.z xpos axs #-[$18] stx.z xpos - // [493] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuz1=_inc_vbuz1 + // [498] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuz1=_inc_vbuz1 inc.z s - // [494] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuz1_neq_vbuc1_then_la1 + // [499] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp.z s bne __b1_from___b1 jmp __breturn // sprites_init::@return __breturn: - // [495] return + // [500] return rts } // render_init // Initialize rendering render_init: { .const vicSelectGfxBank1_toDd001_return = 3 - .label __5 = $d7 + .label __5 = $d9 // Initialize the screen line pointers; .label li_1 = $62 .label li_2 = $64 @@ -14815,10 +14892,10 @@ render_init: { jmp vicSelectGfxBank1 // render_init::vicSelectGfxBank1 vicSelectGfxBank1: - // [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [502] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR - // [498] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] + // [503] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 // render_init::vicSelectGfxBank1_toDd001 @@ -14826,96 +14903,96 @@ render_init: { jmp vicSelectGfxBank1___b1 // render_init::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [504] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return sta CIA2 jmp __b2 // render_init::@2 __b2: - // [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 + // [505] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Enable Extended Background Color Mode lda #VIC_ECM|VIC_DEN|VIC_RSEL|3 sta D011 - // [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 + // [506] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BORDERCOL - // [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 + // [507] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BGCOL1 - // [503] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) -- _deref_pbuc1=_deref_pbuc2 + // [508] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_1 sta BGCOL2 - // [504] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) -- _deref_pbuc1=_deref_pbuc2 + // [509] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_2 sta BGCOL3 - // [505] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY -- _deref_pbuc1=vbuc2 + // [510] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY -- _deref_pbuc1=vbuc2 lda #GREY sta BGCOL4 - // [506] call render_screen_original + // [511] call render_screen_original // Setup chars on the screens - // [518] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] + // [523] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] render_screen_original_from___b2: - // [518] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_1 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 + // [523] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_1 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1 sta.z render_screen_original.screen+1 jsr render_screen_original - // [507] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] + // [512] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] __b3_from___b2: jmp __b3 // render_init::@3 __b3: - // [508] call render_screen_original - // [518] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] + // [513] call render_screen_original + // [523] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] render_screen_original_from___b3: - // [518] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_2 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 + // [523] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_2 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2 sta.z render_screen_original.screen+1 jsr render_screen_original - // [509] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] + // [514] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] __b1_from___b3: - // [509] phi (byte*) render_init::li_2#2 = (const nomodify byte*) PLAYFIELD_SCREEN_2+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 + // [514] phi (byte*) render_init::li_2#2 = (const nomodify byte*) PLAYFIELD_SCREEN_2+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2+2*$28+$10 sta.z li_2+1 - // [509] phi (byte*) render_init::li_1#2 = (const nomodify byte*) PLAYFIELD_SCREEN_1+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 + // [514] phi (byte*) render_init::li_1#2 = (const nomodify byte*) PLAYFIELD_SCREEN_1+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1+2*$28+$10 sta.z li_1+1 - // [509] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuz1=vbuc1 + // [514] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuz1=vbuc1 lda #0 sta.z i jmp __b1 - // [509] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] + // [514] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] __b1_from___b1: - // [509] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy - // [509] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy - // [509] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy + // [514] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy + // [514] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy + // [514] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy jmp __b1 // render_init::@1 __b1: - // [510] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 + // [515] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1 lda.z i asl sta.z __5 - // [511] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuz1=pbuz2 + // [516] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuz1=pbuz2 ldy.z __5 lda.z li_1 sta screen_lines_1,y lda.z li_1+1 sta screen_lines_1+1,y - // [512] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuz1=pbuz2 + // [517] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuz1=pbuz2 ldy.z __5 lda.z li_2 sta screen_lines_2,y lda.z li_2+1 sta screen_lines_2+1,y - // [513] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [518] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z li_1 @@ -14923,7 +15000,7 @@ render_init: { bcc !+ inc.z li_1+1 !: - // [514] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [519] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z li_2 @@ -14931,16 +15008,16 @@ render_init: { bcc !+ inc.z li_2+1 !: - // [515] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuz1=_inc_vbuz1 + // [520] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuz1=_inc_vbuz1 inc.z i - // [516] if((byte) render_init::i#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto render_init::@1 -- vbuz1_neq_vbuc1_then_la1 + // [521] if((byte) render_init::i#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto render_init::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_LINES-1+1 cmp.z i bne __b1_from___b1 jmp __breturn // render_init::@return __breturn: - // [517] return + // [522] return rts } // render_screen_original @@ -14955,188 +15032,188 @@ render_screen_original: { .label oscr = $67 .label ocols = $69 .label y = $66 - // [519] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] + // [524] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] __b1_from_render_screen_original: - // [519] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 + // [524] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 lda #0 sta.z y - // [519] phi (byte*) render_screen_original::ocols#4 = (const to_nomodify byte*) PLAYFIELD_COLORS_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 + // [524] phi (byte*) render_screen_original::ocols#4 = (const to_nomodify byte*) PLAYFIELD_COLORS_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_COLORS_ORIGINAL+$20*2 sta.z ocols+1 - // [519] phi (byte*) render_screen_original::oscr#4 = (const to_nomodify byte*) PLAYFIELD_SCREEN_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 + // [524] phi (byte*) render_screen_original::oscr#4 = (const to_nomodify byte*) PLAYFIELD_SCREEN_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_ORIGINAL+$20*2 sta.z oscr+1 - // [519] phi (byte*) render_screen_original::cols#7 = (const nomodify byte*) COLS [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 + // [524] phi (byte*) render_screen_original::cols#7 = (const nomodify byte*) COLS [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 lda #COLS sta.z cols+1 - // [519] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy + // [524] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy jmp __b1 - // [519] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] + // [524] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] __b1_from___b5: - // [519] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy - // [519] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy - // [519] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy - // [519] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy - // [519] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy + // [524] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy + // [524] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy + // [524] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy + // [524] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy + // [524] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy jmp __b1 // render_screen_original::@1 __b1: - // [520] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] + // [525] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] __b2_from___b1: - // [520] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuz1=vbuc1 + // [525] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuz1=vbuc1 lda #0 sta.z x - // [520] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy - // [520] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy + // [525] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy + // [525] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy jmp __b2 - // [520] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] + // [525] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] __b2_from___b2: - // [520] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy - // [520] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy - // [520] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy + // [525] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy + // [525] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy + // [525] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy jmp __b2 // render_screen_original::@2 __b2: - // [521] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 + // [526] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y - // [522] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 + // [527] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [523] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 + // [528] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y - // [524] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 + // [529] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 inc.z cols bne !+ inc.z cols+1 !: - // [525] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuz1=_inc_vbuz1 + // [530] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuz1=_inc_vbuz1 inc.z x - // [526] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuz1_neq_vbuc1_then_la1 + // [531] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp.z x bne __b2_from___b2 - // [527] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] + // [532] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] __b3_from___b2: __b3_from___b3: - // [527] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy - // [527] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy - // [527] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy - // [527] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy - // [527] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy + // [532] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy + // [532] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy + // [532] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy + // [532] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy + // [532] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy jmp __b3 // render_screen_original::@3 __b3: - // [528] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 + // [533] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (oscr),y ldy #0 sta (screen),y - // [529] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 + // [534] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [530] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 + // [535] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 inc.z oscr bne !+ inc.z oscr+1 !: - // [531] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 + // [536] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (ocols),y ldy #0 sta (cols),y - // [532] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 + // [537] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 inc.z cols bne !+ inc.z cols+1 !: - // [533] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 + // [538] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 inc.z ocols bne !+ inc.z ocols+1 !: - // [534] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuz1=_inc_vbuz1 + // [539] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuz1=_inc_vbuz1 inc.z x - // [535] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuz1_neq_vbuc1_then_la1 + // [540] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuz1_neq_vbuc1_then_la1 lda #$24 cmp.z x bne __b3_from___b3 - // [536] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] + // [541] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] __b4_from___b3: __b4_from___b4: - // [536] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy - // [536] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy - // [536] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy + // [541] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy + // [541] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy + // [541] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy jmp __b4 // render_screen_original::@4 __b4: - // [537] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 + // [542] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y - // [538] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 + // [543] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [539] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 + // [544] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y - // [540] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 + // [545] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 inc.z cols bne !+ inc.z cols+1 !: - // [541] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuz1=_inc_vbuz1 + // [546] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuz1=_inc_vbuz1 inc.z x - // [542] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuz1_neq_vbuc1_then_la1 + // [547] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuz1_neq_vbuc1_then_la1 lda #$28 cmp.z x bne __b4_from___b4 jmp __b5 // render_screen_original::@5 __b5: - // [543] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 + // [548] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 inc.z y - // [544] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 + // [549] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z y bne __b1_from___b5 jmp __breturn // render_screen_original::@return __breturn: - // [545] return + // [550] return rts } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [546] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [551] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // [547] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // [552] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL jmp __breturn // sid_rnd_init::@return __breturn: - // [548] return + // [553] return rts } // sprites_irq @@ -15145,14 +15222,14 @@ sid_rnd_init: { // Utilizes duplicated gfx in the sprites to allow for some leeway in updating the sprite pointers sprites_irq: { .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 - .label raster_sprite_gfx_modify = $da - .label __0 = $d9 - .label ypos = $d8 - .label ptr = $db - .label ptr_1 = $de - .label ptr_2 = $df - .label ptr_3 = $dc - .label ptr_4 = $dd + .label raster_sprite_gfx_modify = $dc + .label __0 = $db + .label ypos = $da + .label ptr = $dd + .label ptr_1 = $e0 + .label ptr_2 = $e1 + .label ptr_3 = $de + .label ptr_4 = $df // entry interrupt(HARDWARE_CLOBBER) sta rega+1 stx regx+1 @@ -15161,116 +15238,116 @@ sprites_irq: { //(*BGCOL)++; // Clear decimal flag (because it is used by the score algorithm) cld - // [550] (byte) sprites_irq::ypos#0 ← (volatile byte) irq_sprite_ypos -- vbuz1=vbuz2 + // [555] (byte) sprites_irq::ypos#0 ← (volatile byte) irq_sprite_ypos -- vbuz1=vbuz2 // Place the sprites lda.z irq_sprite_ypos sta.z ypos - // [551] *((const nomodify byte*) SPRITES_YPOS) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 + // [556] *((const nomodify byte*) SPRITES_YPOS) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 lda.z ypos sta SPRITES_YPOS - // [552] *((const nomodify byte*) SPRITES_YPOS+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 + // [557] *((const nomodify byte*) SPRITES_YPOS+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 lda.z ypos sta SPRITES_YPOS+2 - // [553] *((const nomodify byte*) SPRITES_YPOS+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 + // [558] *((const nomodify byte*) SPRITES_YPOS+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 lda.z ypos sta SPRITES_YPOS+4 - // [554] *((const nomodify byte*) SPRITES_YPOS+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 + // [559] *((const nomodify byte*) SPRITES_YPOS+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuz1 lda.z ypos sta SPRITES_YPOS+6 - // [555] (byte~) sprites_irq::$0 ← (volatile byte) irq_raster_next + (byte) 1 -- vbuz1=vbuz2_plus_1 + // [560] (byte~) sprites_irq::$0 ← (volatile byte) irq_raster_next + (byte) 1 -- vbuz1=vbuz2_plus_1 ldy.z irq_raster_next iny sty.z __0 - // [556] (volatile byte) sprites_irq::raster_sprite_gfx_modify ← (byte~) sprites_irq::$0 -- vbuz1=vbuz2 + // [561] (volatile byte) sprites_irq::raster_sprite_gfx_modify ← (byte~) sprites_irq::$0 -- vbuz1=vbuz2 // Wait for the y-position before changing sprite pointers lda.z __0 sta.z raster_sprite_gfx_modify jmp __b8 // sprites_irq::@8 __b8: - // [557] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1 + // [562] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1 lda RASTER cmp.z raster_sprite_gfx_modify bcc __b8 jmp __b9 // sprites_irq::@9 __b9: - // [558] (byte) sprites_irq::ptr#0 ← (volatile byte) irq_sprite_ptr -- vbuz1=vbuz2 + // [563] (byte) sprites_irq::ptr#0 ← (volatile byte) irq_sprite_ptr -- vbuz1=vbuz2 lda.z irq_sprite_ptr sta.z ptr - // [559] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1 + // [564] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1 lda.z render_screen_showing cmp #0 beq __b1 jmp __b10 // sprites_irq::@10 __b10: - // [560] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1 + // [565] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1 lda.z ptr sta PLAYFIELD_SPRITE_PTRS_2 - // [561] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2 + // [566] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2 ldy.z ptr iny sty.z ptr_3 - // [562] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuz1 + // [567] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuz1 lda.z ptr_3 sta PLAYFIELD_SPRITE_PTRS_2+1 - // [563] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuz1 + // [568] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuz1 lda.z ptr_3 sta PLAYFIELD_SPRITE_PTRS_2+2 - // [564] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuz1=_inc_vbuz2 + // [569] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuz1=_inc_vbuz2 ldy.z ptr_3 iny sty.z ptr_4 - // [565] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuz1 + // [570] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuz1 lda.z ptr_4 sta PLAYFIELD_SPRITE_PTRS_2+3 jmp __b2 // sprites_irq::@2 __b2: - // [566] (volatile byte) irq_cnt ← ++ (volatile byte) irq_cnt -- vbuz1=_inc_vbuz1 + // [571] (volatile byte) irq_cnt ← ++ (volatile byte) irq_cnt -- vbuz1=_inc_vbuz1 inc.z irq_cnt - // [567] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1 + // [572] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1 lda #9 cmp.z irq_cnt beq __b3 jmp __b6 // sprites_irq::@6 __b6: - // [568] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1 + // [573] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1 lda #$a cmp.z irq_cnt beq __b4 jmp __b7 // sprites_irq::@7 __b7: - // [569] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 -- vbuz1=vbuz1_plus_vbuc1 + // [574] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_raster_next axs #-[$14] stx.z irq_raster_next - // [570] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [575] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_sprite_ypos axs #-[$15] stx.z irq_sprite_ypos - // [571] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [576] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_sprite_ptr axs #-[3] stx.z irq_sprite_ptr jmp __b5 // sprites_irq::@5 __b5: - // [572] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next -- _deref_pbuc1=vbuz1 + // [577] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next -- _deref_pbuc1=vbuz1 // Setup next interrupt lda.z irq_raster_next sta RASTER - // [573] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [578] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS jmp __breturn // sprites_irq::@return __breturn: - // [574] return - exit interrupt(HARDWARE_CLOBBER) + // [579] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 regx: @@ -15280,31 +15357,31 @@ sprites_irq: { rti // sprites_irq::@4 __b4: - // [575] (volatile byte) irq_cnt ← (byte) 0 -- vbuz1=vbuc1 + // [580] (volatile byte) irq_cnt ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z irq_cnt - // [576] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST -- vbuz1=vbuc1 + // [581] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST -- vbuz1=vbuc1 lda #IRQ_RASTER_FIRST sta.z irq_raster_next - // [577] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [582] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_sprite_ypos axs #-[$15] stx.z irq_sprite_ypos - // [578] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [583] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_sprite_ptr axs #-[3] stx.z irq_sprite_ptr jmp __b5 // sprites_irq::@3 __b3: - // [579] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [584] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_raster_next axs #-[$15] stx.z irq_raster_next - // [580] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS -- vbuz1=vbuc1 + // [585] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS -- vbuz1=vbuc1 lda #SPRITES_FIRST_YPOS sta.z irq_sprite_ypos - // [581] phi from sprites_irq::@3 to sprites_irq::toSpritePtr1 [phi:sprites_irq::@3->sprites_irq::toSpritePtr1] + // [586] phi from sprites_irq::@3 to sprites_irq::toSpritePtr1 [phi:sprites_irq::@3->sprites_irq::toSpritePtr1] toSpritePtr1_from___b3: jmp toSpritePtr1 // sprites_irq::toSpritePtr1 @@ -15312,30 +15389,30 @@ sprites_irq: { jmp __b11 // sprites_irq::@11 __b11: - // [582] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 -- vbuz1=vbuc1 + // [587] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 -- vbuz1=vbuc1 lda #toSpritePtr1_return sta.z irq_sprite_ptr jmp __b5 // sprites_irq::@1 __b1: - // [583] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1 + // [588] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1 lda.z ptr sta PLAYFIELD_SPRITE_PTRS_1 - // [584] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2 + // [589] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2 ldy.z ptr iny sty.z ptr_1 - // [585] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1 + // [590] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1 lda.z ptr_1 sta PLAYFIELD_SPRITE_PTRS_1+1 - // [586] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1 + // [591] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1 lda.z ptr_1 sta PLAYFIELD_SPRITE_PTRS_1+2 - // [587] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuz1=_inc_vbuz2 + // [592] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuz1=_inc_vbuz2 ldy.z ptr_1 iny sty.z ptr_2 - // [588] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuz1 + // [593] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuz1 lda.z ptr_2 sta PLAYFIELD_SPRITE_PTRS_1+3 jmp __b2 @@ -15447,18 +15524,18 @@ Statement [5] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RAST Statement [6] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS+(byte) $15 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a Statement [8] (volatile byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a Statement [9] (volatile byte) irq_cnt ← (byte) 0 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a -Statement [31] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:23 [ current_ypos#13 current_ypos#97 current_ypos#98 ] +Statement [31] (byte*) current_piece_gfx#110 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#96 current_ypos#6 current_xpos#117 current_xpos#100 current_piece_gfx#110 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#96 current_ypos#6 current_xpos#117 current_xpos#100 current_piece_gfx#110 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:23 [ current_ypos#13 current_ypos#96 current_ypos#97 ] Removing always clobbered register reg byte a as potential for zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#6 current_ypos#19 ] -Removing always clobbered register reg byte a as potential for zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] +Removing always clobbered register reg byte a as potential for zp[1]:25 [ current_xpos#59 current_xpos#117 current_xpos#118 ] Removing always clobbered register reg byte a as potential for zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] Removing always clobbered register reg byte a as potential for zp[1]:172 [ play_spawn_current::$7 ] Removing always clobbered register reg byte a as potential for zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] Removing always clobbered register reg byte a as potential for zp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] Removing always clobbered register reg byte a as potential for zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] Removing always clobbered register reg byte a as potential for zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#52 game_over#15 ] -Statement [36] (byte*) current_piece#100 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a -Statement [37] (byte*) current_piece_gfx#122 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_piece_gfx#122 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_piece_gfx#122 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a +Statement [36] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a +Statement [37] (byte*) current_piece_gfx#121 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_piece_gfx#121 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_piece_gfx#121 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a Statement [39] if(*((const nomodify byte*) RASTER)!=(byte) $ff) goto main::@2 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] Removing always clobbered register reg byte a as potential for zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] @@ -15467,7 +15544,7 @@ Removing always clobbered register reg byte a as potential for zp[1]:88 [ keyboa Removing always clobbered register reg byte a as potential for zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Removing always clobbered register reg byte a as potential for zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] Removing always clobbered register reg byte a as potential for zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -Statement [60] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a +Statement [60] (byte*) current_piece_gfx#111 ← (byte*) current_piece_gfx#18 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#97 render_screen_render#64 current_xpos#118 current_piece_gfx#111 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#97 render_screen_render#64 current_xpos#118 current_piece_gfx#111 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] Statement [70] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte) $20 [ render_screen_show#16 render_screen_render#11 ] ( main:11::render_screen_swap:69 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] { } ) always clobbers reg byte a Statement [71] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte) $20 [ render_screen_show#13 render_screen_render#11 ] ( main:11::render_screen_swap:69 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] { } ) always clobbers reg byte a @@ -15512,18 +15589,18 @@ Removing always clobbered register reg byte y as potential for zp[1]:22 [ render Statement [119] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:11::render_next:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { next_piece_idx#12 = next_piece_idx#76 } } main:11::render_next:65 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { render_screen_render#15 = render_screen_render#65 } { next_piece_idx#12 = next_piece_idx#77 } } ) always clobbers reg byte a reg byte y Statement [123] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:11::render_next:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] { { next_piece_idx#12 = next_piece_idx#76 } } main:11::render_next:65 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] { { render_screen_render#15 = render_screen_render#65 } { next_piece_idx#12 = next_piece_idx#77 } } ) always clobbers reg byte a Statement [127] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:11::render_next:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { next_piece_idx#12 = next_piece_idx#76 } } main:11::render_next:65 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { render_screen_render#15 = render_screen_render#65 } { next_piece_idx#12 = next_piece_idx#77 } } ) always clobbers reg byte a reg byte y -Statement [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] +Statement [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:28 [ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] Removing always clobbered register reg byte a as potential for zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Removing always clobbered register reg byte a as potential for zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] -Statement [138] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a +Statement [138] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] -Statement [139] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [140] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [143] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a +Statement [139] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [140] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [143] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] Removing always clobbered register reg byte a as potential for zp[1]:33 [ render_moving::c#2 render_moving::c#1 ] -Statement [146] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a +Statement [146] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a Statement [152] (byte~) render_playfield::$0 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ( main:11::render_playfield:28 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] { } main:11::render_playfield:56 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] { { render_screen_render#22 = render_screen_render#63 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:34 [ render_screen_render#22 render_screen_render#63 ] Removing always clobbered register reg byte a as potential for zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] @@ -15541,41 +15618,41 @@ Removing always clobbered register reg byte a as potential for zp[1]:123 [ play_ Statement [180] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:11::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] { { play_movement::key_event#0 = main::key_event#0 } { play_movement::return#2 = play_movement::return#3 } } ) always clobbers reg byte a Statement [185] (byte~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:145 [ play_movement::render#2 ] -Statement [191] (byte*) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [191] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#97 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#97 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] Removing always clobbered register reg byte a as potential for zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] Removing always clobbered register reg byte a as potential for zp[1]:47 [ 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 ] Removing always clobbered register reg byte a as potential for zp[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] Statement [197] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a Statement [198] (byte~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a -Statement [201] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [201] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] -Statement [203] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [203] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] Removing always clobbered register reg byte a as potential for zp[1]:48 [ play_collision::l#6 play_collision::l#1 ] -Statement [204] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [208] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [204] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [208] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] Removing always clobbered register reg byte a as potential for zp[1]:51 [ play_collision::c#2 play_collision::c#1 ] Removing always clobbered register reg byte a as potential for zp[1]:158 [ play_collision::i#1 ] -Statement [210] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [213] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [229] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [240] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [264] (byte*) current_piece#95 ← (byte*) current_piece#10 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [279] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [280] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [287] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [210] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [213] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [229] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [240] (byte*) current_piece#95 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#95 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#95 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [264] (byte*) current_piece#94 ← (byte*) current_piece#10 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#94 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#94 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [279] (byte*) current_piece#91 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [280] (byte*) current_piece_gfx#115 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 current_piece_gfx#115 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 current_piece_gfx#115 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [287] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:171 [ play_spawn_current::current_piece_idx#0 ] -Statement [293] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [308] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [293] (byte*) current_piece#98 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [313] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:170 [ play_update_score::removed#0 ] -Removing always clobbered register reg byte a as potential for zp[1]:177 [ play_update_score::lines_before#0 ] -Statement [309] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [311] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [312] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [326] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [328] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a reg byte x +Removing always clobbered register reg byte a as potential for zp[1]:179 [ play_update_score::lines_before#0 ] +Statement [314] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [316] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [317] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [331] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [333] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] Removing always clobbered register reg byte x as potential for zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] Removing always clobbered register reg byte x as potential for zp[1]:88 [ 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 ] @@ -15584,144 +15661,144 @@ Removing always clobbered register reg byte x as potential for zp[1]:70 [ game_o Removing always clobbered register reg byte x as potential for zp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] Removing always clobbered register reg byte x as potential for zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] Removing always clobbered register reg byte x as potential for zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] -Statement [332] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [337] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:71 [ play_increase_level::b#2 play_increase_level::b#1 ] -Statement [333] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [351] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a +Statement [338] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [356] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] Removing always clobbered register reg byte a as potential for zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] Removing always clobbered register reg byte a as potential for zp[1]:74 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] -Statement [359] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#7 play_remove_lines::w#6 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#7 play_remove_lines::w#6 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a +Statement [364] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#7 play_remove_lines::w#6 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#7 play_remove_lines::w#6 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:77 [ play_remove_lines::w#6 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 play_remove_lines::w#3 ] -Statement [363] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [368] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Removing always clobbered register reg byte a as potential for zp[1]:80 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] Removing always clobbered register reg byte a as potential for zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 ] -Statement [364] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [368] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [369] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [373] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:81 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] Removing always clobbered register reg byte a as potential for zp[1]:82 [ play_lock_current::c#2 play_lock_current::c#1 ] -Removing always clobbered register reg byte a as potential for zp[1]:191 [ play_lock_current::i#1 ] -Statement [369] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [380] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:402 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:408 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:414 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:420 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:193 [ play_lock_current::i#1 ] +Statement [374] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [385] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:407 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:413 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:419 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:425 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:54 [ 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 ] Removing always clobbered register reg byte a as potential for zp[1]:83 [ keyboard_event_pressed::keycode#5 ] -Statement [382] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:402 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:408 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:414 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:420 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:193 [ keyboard_event_pressed::row_bits#0 ] -Statement [383] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:402 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:408 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:414 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:420 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a -Statement [385] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte a -Statement [387] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte y -Statement [397] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] { } ) always clobbers reg byte a +Statement [387] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:407 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:413 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:419 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:425 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:195 [ keyboard_event_pressed::row_bits#0 ] +Statement [388] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:407 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:413 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:419 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:425 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a +Statement [390] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte a +Statement [392] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte y +Statement [402] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Statement [427] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:198 [ keyboard_event_scan::row_scan#0 ] +Statement [432] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:200 [ keyboard_event_scan::row_scan#0 ] Removing always clobbered register reg byte a as potential for zp[1]:86 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Removing always clobbered register reg byte a as potential for zp[1]:87 [ 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 ] -Statement [430] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a -Statement [431] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] { } ) always clobbers reg byte a -Statement [433] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a reg byte y +Statement [435] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a +Statement [436] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] { } ) always clobbers reg byte a +Statement [438] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Removing always clobbered register reg byte y as potential for zp[1]:198 [ keyboard_event_scan::row_scan#0 ] +Removing always clobbered register reg byte y as potential for zp[1]:200 [ keyboard_event_scan::row_scan#0 ] Removing always clobbered register reg byte y as potential for zp[1]:86 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Removing always clobbered register reg byte y as potential for zp[1]:87 [ 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 ] -Statement [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] { } ) always clobbers reg byte a -Statement [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] { } ) always clobbers reg byte a -Statement [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte y -Statement [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a -Statement [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y -Statement [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y -Statement [452] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a -Statement [457] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] { } ) always clobbers reg byte a +Statement [444] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] { } ) always clobbers reg byte a +Statement [445] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] { } ) always clobbers reg byte a +Statement [446] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte y +Statement [448] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:398 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [449] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:398 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [451] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a +Statement [455] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y +Statement [456] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y +Statement [457] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a +Statement [462] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:90 [ play_init::j#2 play_init::j#1 ] Removing always clobbered register reg byte a as potential for zp[1]:93 [ play_init::idx#2 play_init::idx#1 ] -Statement [458] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a -Statement [459] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a -Statement [460] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::idx#2 play_init::pli#1 ] { } ) always clobbers reg byte a -Statement [461] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#1 play_init::idx#1 ] { } ) always clobbers reg byte a -Statement [464] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES [ ] ( main:11::play_init:22 [ score_bcd ] { } ) always clobbers reg byte a -Statement [465] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 ] { } ) always clobbers reg byte a -Statement [467] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 play_init::$3 ] { } ) always clobbers reg byte a +Statement [463] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a +Statement [464] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a +Statement [465] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::idx#2 play_init::pli#1 ] { } ) always clobbers reg byte a +Statement [466] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#1 play_init::idx#1 ] { } ) always clobbers reg byte a +Statement [469] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES [ ] ( main:11::play_init:22 [ score_bcd ] { } ) always clobbers reg byte a +Statement [470] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 ] { } ) always clobbers reg byte a +Statement [472] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 play_init::$3 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:94 [ play_init::b#2 play_init::b#1 ] -Statement [468] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 ] { } ) always clobbers reg byte a -Statement [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [473] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 ] { } ) always clobbers reg byte a +Statement [478] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a -Statement [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [481] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [484] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [485] *((const nomodify byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [486] *((const nomodify byte*) SPRITES_EXPAND_Y) ← *((const nomodify byte*) SPRITES_MC) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [487] *((const nomodify byte*) SPRITES_EXPAND_X) ← *((const nomodify byte*) SPRITES_EXPAND_Y) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [489] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] { } ) always clobbers reg byte a +Statement [480] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [481] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [482] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [483] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [484] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [485] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [486] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [489] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [490] *((const nomodify byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [491] *((const nomodify byte*) SPRITES_EXPAND_Y) ← *((const nomodify byte*) SPRITES_MC) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [492] *((const nomodify byte*) SPRITES_EXPAND_X) ← *((const nomodify byte*) SPRITES_EXPAND_Y) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [494] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:95 [ sprites_init::s#2 sprites_init::s#1 ] Removing always clobbered register reg byte a as potential for zp[1]:96 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Statement [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a -Statement [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a -Statement [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] { } ) always clobbers reg byte a -Statement [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [503] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [504] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [505] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [510] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a +Statement [495] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a +Statement [496] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a +Statement [497] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] { } ) always clobbers reg byte a +Statement [502] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [504] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [505] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [506] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [507] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [508] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [509] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [510] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [515] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:97 [ render_init::i#2 render_init::i#1 ] -Statement [511] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:215 [ render_init::$5 ] -Statement [512] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] { } ) always clobbers reg byte a -Statement [513] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] { } ) always clobbers reg byte a -Statement [514] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] { } ) always clobbers reg byte a -Statement [521] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } ) always clobbers reg byte a reg byte y +Statement [516] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:217 [ render_init::$5 ] +Statement [517] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] { } ) always clobbers reg byte a +Statement [518] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] { } ) always clobbers reg byte a +Statement [519] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] { } ) always clobbers reg byte a +Statement [526] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte a as potential for zp[1]:102 [ render_screen_original::y#6 render_screen_original::y#1 ] Removing always clobbered register reg byte y as potential for zp[1]:102 [ render_screen_original::y#6 render_screen_original::y#1 ] Removing always clobbered register reg byte a as potential for zp[1]:111 [ 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 ] Removing always clobbered register reg byte y as potential for zp[1]:111 [ 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 ] -Statement [523] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } ) always clobbers reg byte a reg byte y -Statement [528] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } ) always clobbers reg byte a reg byte y -Statement [531] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } ) always clobbers reg byte a reg byte y -Statement [537] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y -Statement [539] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y -Statement [546] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a -Statement [547] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a -Statement [557] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] { } ) always clobbers reg byte a -Statement [559] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] { } ) always clobbers reg byte a -Removing always clobbered register reg byte a as potential for zp[1]:219 [ sprites_irq::ptr#0 ] -Statement [567] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] { } ) always clobbers reg byte a -Statement [568] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a -Statement [569] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x -Statement [570] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x -Statement [571] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x -Statement [572] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next [ ] ( [ ] { } ) always clobbers reg byte a -Statement [573] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a -Statement [574] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [575] (volatile byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a -Statement [576] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a -Statement [577] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x -Statement [578] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x -Statement [579] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x -Statement [580] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a -Statement [582] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a +Statement [528] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } ) always clobbers reg byte a reg byte y +Statement [533] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } ) always clobbers reg byte a reg byte y +Statement [536] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } ) always clobbers reg byte a reg byte y +Statement [542] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y +Statement [544] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y +Statement [551] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a +Statement [552] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a +Statement [562] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] { } ) always clobbers reg byte a +Statement [564] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] { } ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp[1]:221 [ sprites_irq::ptr#0 ] +Statement [572] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] { } ) always clobbers reg byte a +Statement [573] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a +Statement [574] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x +Statement [575] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x +Statement [576] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x +Statement [577] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next [ ] ( [ ] { } ) always clobbers reg byte a +Statement [578] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a +Statement [579] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [580] (volatile byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a +Statement [581] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a +Statement [582] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x +Statement [583] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x +Statement [584] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x +Statement [585] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a +Statement [587] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a Statement [1] (volatile byte) render_screen_showing ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] (volatile dword) score_bcd ← (dword) 0 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a Statement [5] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a Statement [6] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS+(byte) $15 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a Statement [8] (volatile byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a Statement [9] (volatile byte) irq_cnt ← (byte) 0 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a -Statement [31] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a -Statement [36] (byte*) current_piece#100 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a -Statement [37] (byte*) current_piece_gfx#122 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_piece_gfx#122 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_piece_gfx#122 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a +Statement [31] (byte*) current_piece_gfx#110 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#96 current_ypos#6 current_xpos#117 current_xpos#100 current_piece_gfx#110 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#96 current_ypos#6 current_xpos#117 current_xpos#100 current_piece_gfx#110 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } ) always clobbers reg byte a +Statement [36] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a +Statement [37] (byte*) current_piece_gfx#121 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_piece_gfx#121 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_piece_gfx#121 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a Statement [39] if(*((const nomodify byte*) RASTER)!=(byte) $ff) goto main::@2 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] { } ) always clobbers reg byte a Statement [48] if((byte) game_over#10==(byte) 0) goto main::@4 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:122 [ main::key_event#0 ] -Statement [60] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a +Statement [60] (byte*) current_piece_gfx#111 ← (byte*) current_piece_gfx#18 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#97 render_screen_render#64 current_xpos#118 current_piece_gfx#111 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#97 render_screen_render#64 current_xpos#118 current_piece_gfx#111 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a Statement [70] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte) $20 [ render_screen_show#16 render_screen_render#11 ] ( main:11::render_screen_swap:69 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] { } ) always clobbers reg byte a Statement [71] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte) $20 [ render_screen_show#13 render_screen_render#11 ] ( main:11::render_screen_swap:69 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] { } ) always clobbers reg byte a Statement [73] if((byte) render_screen_render#18==(byte) 0) goto render_score::@1 [ render_screen_render#18 lines_bcd#15 level_bcd#17 ] ( main:11::render_score:67 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] { } ) always clobbers reg byte a @@ -15742,12 +15819,12 @@ Statement [116] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece Statement [119] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:11::render_next:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { next_piece_idx#12 = next_piece_idx#76 } } main:11::render_next:65 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { render_screen_render#15 = render_screen_render#65 } { next_piece_idx#12 = next_piece_idx#77 } } ) always clobbers reg byte a reg byte y Statement [123] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:11::render_next:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] { { next_piece_idx#12 = next_piece_idx#76 } } main:11::render_next:65 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] { { render_screen_render#15 = render_screen_render#65 } { next_piece_idx#12 = next_piece_idx#77 } } ) always clobbers reg byte a Statement [127] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:11::render_next:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { next_piece_idx#12 = next_piece_idx#76 } } main:11::render_next:65 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { render_screen_render#15 = render_screen_render#65 } { next_piece_idx#12 = next_piece_idx#77 } } ) always clobbers reg byte a reg byte y -Statement [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [138] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [139] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [140] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [143] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [146] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a +Statement [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [138] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [139] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [140] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [143] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [146] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a Statement [152] (byte~) render_playfield::$0 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ( main:11::render_playfield:28 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] { } main:11::render_playfield:56 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] { { render_screen_render#22 = render_screen_render#63 } } ) always clobbers reg byte a Statement [153] (byte~) render_playfield::$3 ← (byte~) render_playfield::$0 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:11::render_playfield:28 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] { } main:11::render_playfield:56 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] { { render_screen_render#22 = render_screen_render#63 } } ) always clobbers reg byte a Statement [154] (byte*) render_playfield::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:11::render_playfield:28 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] { } main:11::render_playfield:56 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] { { render_screen_render#22 = render_screen_render#63 } } ) always clobbers reg byte a @@ -15756,48 +15833,48 @@ Statement [168] if((byte) game_over#15==(byte) 0) goto play_movement::@1 [ score Statement [175] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:11::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a Statement [180] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:11::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] { { play_movement::key_event#0 = main::key_event#0 } { play_movement::return#2 = play_movement::return#3 } } ) always clobbers reg byte a Statement [185] (byte~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a -Statement [191] (byte*) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [191] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#97 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#97 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } ) always clobbers reg byte a Statement [197] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a Statement [198] (byte~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a -Statement [201] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [203] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [204] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [208] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [210] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [213] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [229] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [240] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [264] (byte*) current_piece#95 ← (byte*) current_piece#10 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [279] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [280] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [287] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [293] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } } ) always clobbers reg byte a -Statement [304] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } } ) always clobbers reg byte a -Statement [308] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [309] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [311] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [312] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [322] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [323] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a reg byte y +Statement [201] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [203] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [204] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [208] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [210] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [213] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [229] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [240] (byte*) current_piece#95 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#95 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#95 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [264] (byte*) current_piece#94 ← (byte*) current_piece#10 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#94 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#94 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [279] (byte*) current_piece#91 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [280] (byte*) current_piece_gfx#115 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 current_piece_gfx#115 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 current_piece_gfx#115 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [287] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [293] (byte*) current_piece#98 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::@3 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } } ) always clobbers reg byte a +Statement [307] (byte) play_spawn_current::piece_idx#1 ← (byte~) play_spawn_current::$5 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } } ) always clobbers reg byte a +Statement [313] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [314] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [316] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [317] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [327] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [328] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a reg byte y Removing always clobbered register reg byte y as potential for zp[1]:123 [ play_movement::key_event#0 ] -Statement [326] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [328] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a reg byte x -Statement [332] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [333] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [351] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a -Statement [359] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#7 play_remove_lines::w#6 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#7 play_remove_lines::w#6 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a -Statement [363] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [364] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [368] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [369] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [380] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:402 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:408 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:414 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:420 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a -Statement [382] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:402 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:408 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:414 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:420 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a -Statement [383] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:402 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:408 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:414 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:420 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a -Statement [385] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte a -Statement [387] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte y -Statement [396] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] { } ) always clobbers reg byte a -Statement [397] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] { } ) always clobbers reg byte a reg byte x +Statement [331] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [333] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a reg byte x +Statement [337] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [338] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [356] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a +Statement [364] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#7 play_remove_lines::w#6 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#7 play_remove_lines::w#6 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a +Statement [368] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [369] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [373] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [374] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [385] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:407 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:413 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:419 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:425 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a +Statement [387] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:407 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:413 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:419 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:425 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a +Statement [388] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:407 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:413 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:419 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:425 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a +Statement [390] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte a +Statement [392] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte y +Statement [401] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] { } ) always clobbers reg byte a +Statement [402] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] { } ) always clobbers reg byte a reg byte x Removing always clobbered register reg byte x as potential for zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] Removing always clobbered register reg byte x as potential for zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] Removing always clobbered register reg byte x as potential for zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] @@ -15805,97 +15882,97 @@ Removing always clobbered register reg byte x as potential for zp[1]:55 [ curren Removing always clobbered register reg byte x as potential for zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Removing always clobbered register reg byte x as potential for zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] Removing always clobbered register reg byte x as potential for zp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Statement [400] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] { } ) always clobbers reg byte a -Statement [427] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] { } ) always clobbers reg byte a -Statement [428] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] { } ) always clobbers reg byte a -Statement [430] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a -Statement [431] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] { } ) always clobbers reg byte a -Statement [433] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a reg byte y -Statement [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] { } ) always clobbers reg byte a reg byte y -Statement [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] { } ) always clobbers reg byte a -Statement [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte y -Statement [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a -Statement [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y -Statement [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y -Statement [452] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a -Statement [457] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] { } ) always clobbers reg byte a -Statement [458] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a -Statement [459] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a -Statement [460] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::idx#2 play_init::pli#1 ] { } ) always clobbers reg byte a -Statement [461] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#1 play_init::idx#1 ] { } ) always clobbers reg byte a -Statement [464] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES [ ] ( main:11::play_init:22 [ score_bcd ] { } ) always clobbers reg byte a -Statement [465] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 ] { } ) always clobbers reg byte a -Statement [467] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 play_init::$3 ] { } ) always clobbers reg byte a -Statement [468] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 ] { } ) always clobbers reg byte a -Statement [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [405] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] { } ) always clobbers reg byte a +Statement [432] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] { } ) always clobbers reg byte a +Statement [433] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] { } ) always clobbers reg byte a +Statement [435] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a +Statement [436] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] { } ) always clobbers reg byte a +Statement [438] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a reg byte y +Statement [444] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] { } ) always clobbers reg byte a reg byte y +Statement [445] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] { } ) always clobbers reg byte a +Statement [446] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte y +Statement [448] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:398 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [449] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:398 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [451] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a +Statement [455] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y +Statement [456] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y +Statement [457] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a +Statement [462] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] { } ) always clobbers reg byte a +Statement [463] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a +Statement [464] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a +Statement [465] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::idx#2 play_init::pli#1 ] { } ) always clobbers reg byte a +Statement [466] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#1 play_init::idx#1 ] { } ) always clobbers reg byte a +Statement [469] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES [ ] ( main:11::play_init:22 [ score_bcd ] { } ) always clobbers reg byte a +Statement [470] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 ] { } ) always clobbers reg byte a +Statement [472] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 play_init::$3 ] { } ) always clobbers reg byte a +Statement [473] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 ] { } ) always clobbers reg byte a +Statement [478] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a -Statement [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [481] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [484] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [485] *((const nomodify byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [486] *((const nomodify byte*) SPRITES_EXPAND_Y) ← *((const nomodify byte*) SPRITES_MC) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [487] *((const nomodify byte*) SPRITES_EXPAND_X) ← *((const nomodify byte*) SPRITES_EXPAND_Y) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [489] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] { } ) always clobbers reg byte a -Statement [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a -Statement [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a -Statement [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] { } ) always clobbers reg byte a -Statement [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [503] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [504] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [505] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [510] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a -Statement [511] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a -Statement [512] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] { } ) always clobbers reg byte a -Statement [513] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] { } ) always clobbers reg byte a -Statement [514] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] { } ) always clobbers reg byte a -Statement [521] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } ) always clobbers reg byte a reg byte y -Statement [523] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } ) always clobbers reg byte a reg byte y -Statement [528] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } ) always clobbers reg byte a reg byte y -Statement [531] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } ) always clobbers reg byte a reg byte y -Statement [537] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y -Statement [539] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y -Statement [546] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a -Statement [547] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a -Statement [557] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] { } ) always clobbers reg byte a -Statement [559] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] { } ) always clobbers reg byte a -Statement [567] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] { } ) always clobbers reg byte a -Statement [568] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a -Statement [569] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x -Statement [570] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x -Statement [571] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x -Statement [572] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next [ ] ( [ ] { } ) always clobbers reg byte a -Statement [573] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a -Statement [574] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [575] (volatile byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a -Statement [576] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a -Statement [577] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x -Statement [578] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x -Statement [579] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x -Statement [580] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a -Statement [582] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a +Statement [480] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [481] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [482] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [483] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [484] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [485] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [486] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [489] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [490] *((const nomodify byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [491] *((const nomodify byte*) SPRITES_EXPAND_Y) ← *((const nomodify byte*) SPRITES_MC) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [492] *((const nomodify byte*) SPRITES_EXPAND_X) ← *((const nomodify byte*) SPRITES_EXPAND_Y) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [494] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] { } ) always clobbers reg byte a +Statement [495] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a +Statement [496] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a +Statement [497] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] { } ) always clobbers reg byte a +Statement [502] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [504] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [505] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [506] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [507] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [508] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [509] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [510] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [515] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a +Statement [516] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a +Statement [517] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] { } ) always clobbers reg byte a +Statement [518] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] { } ) always clobbers reg byte a +Statement [519] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] { } ) always clobbers reg byte a +Statement [526] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } ) always clobbers reg byte a reg byte y +Statement [528] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } ) always clobbers reg byte a reg byte y +Statement [533] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } ) always clobbers reg byte a reg byte y +Statement [536] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } ) always clobbers reg byte a reg byte y +Statement [542] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y +Statement [544] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y +Statement [551] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a +Statement [552] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a +Statement [562] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] { } ) always clobbers reg byte a +Statement [564] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] { } ) always clobbers reg byte a +Statement [572] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] { } ) always clobbers reg byte a +Statement [573] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a +Statement [574] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x +Statement [575] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x +Statement [576] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x +Statement [577] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next [ ] ( [ ] { } ) always clobbers reg byte a +Statement [578] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a +Statement [579] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [580] (volatile byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a +Statement [581] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a +Statement [582] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x +Statement [583] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x +Statement [584] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x +Statement [585] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a +Statement [587] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a Statement [1] (volatile byte) render_screen_showing ← (byte) 0 [ ] ( [ ] { } ) always clobbers reg byte a Statement [2] (volatile dword) score_bcd ← (dword) 0 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a Statement [5] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a Statement [6] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS+(byte) $15 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a Statement [8] (volatile byte) irq_sprite_ptr ← (const byte) toSpritePtr1_return#0+(byte) 3 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a Statement [9] (volatile byte) irq_cnt ← (byte) 0 [ score_bcd ] ( [ score_bcd ] { } ) always clobbers reg byte a -Statement [31] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#97 current_ypos#6 current_xpos#118 current_xpos#100 current_piece_gfx#111 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a -Statement [36] (byte*) current_piece#100 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a -Statement [37] (byte*) current_piece_gfx#122 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_piece_gfx#122 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#100 current_piece_gfx#122 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a +Statement [31] (byte*) current_piece_gfx#110 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#96 current_ypos#6 current_xpos#117 current_xpos#100 current_piece_gfx#110 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#96 current_ypos#6 current_xpos#117 current_xpos#100 current_piece_gfx#110 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } ) always clobbers reg byte a +Statement [36] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a +Statement [37] (byte*) current_piece_gfx#121 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_piece_gfx#121 current_movedown_slow#1 game_over#52 ] ( main:11 [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 current_piece#99 current_piece_gfx#121 current_movedown_slow#1 game_over#52 ] { } ) always clobbers reg byte a Statement [39] if(*((const nomodify byte*) RASTER)!=(byte) $ff) goto main::@2 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 ] { } ) always clobbers reg byte a Statement [48] if((byte) game_over#10==(byte) 0) goto main::@4 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#16 main::key_event#0 ] { } ) always clobbers reg byte a -Statement [60] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#98 render_screen_render#64 current_xpos#119 current_piece_gfx#112 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a +Statement [60] (byte*) current_piece_gfx#111 ← (byte*) current_piece_gfx#18 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#97 render_screen_render#64 current_xpos#118 current_piece_gfx#111 ] ( main:11 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 current_ypos#97 render_screen_render#64 current_xpos#118 current_piece_gfx#111 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a Statement [70] (byte) render_screen_render#11 ← (byte) render_screen_render#18 ^ (byte) $20 [ render_screen_show#16 render_screen_render#11 ] ( main:11::render_screen_swap:69 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#16 render_screen_render#11 ] { } ) always clobbers reg byte a Statement [71] (byte) render_screen_show#13 ← (byte) render_screen_show#16 ^ (byte) $20 [ render_screen_show#13 render_screen_render#11 ] ( main:11::render_screen_swap:69 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_show#13 render_screen_render#11 ] { } ) always clobbers reg byte a Statement [73] if((byte) render_screen_render#18==(byte) 0) goto render_score::@1 [ render_screen_render#18 lines_bcd#15 level_bcd#17 ] ( main:11::render_score:67 [ score_bcd render_screen_show#16 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 level#17 render_screen_render#18 lines_bcd#15 level_bcd#17 ] { } ) always clobbers reg byte a @@ -15916,12 +15993,12 @@ Statement [116] (byte) render_next::cell#0 ← *((byte*) render_next::next_piece Statement [119] *((byte*) render_next::screen_next_area#5) ← (byte) 0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:11::render_next:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { next_piece_idx#12 = next_piece_idx#76 } } main:11::render_next:65 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { render_screen_render#15 = render_screen_render#65 } { next_piece_idx#12 = next_piece_idx#77 } } ) always clobbers reg byte a reg byte y Statement [123] (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#3 + (byte) $24 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] ( main:11::render_next:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] { { next_piece_idx#12 = next_piece_idx#76 } } main:11::render_next:65 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#4 ] { { render_screen_render#15 = render_screen_render#65 } { next_piece_idx#12 = next_piece_idx#77 } } ) always clobbers reg byte a Statement [127] *((byte*) render_next::screen_next_area#5) ← (byte) render_next::next_piece_char#0 [ render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] ( main:11::render_next:35 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { next_piece_idx#12 = next_piece_idx#76 } } main:11::render_next:65 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_next::next_piece_char#0 render_next::l#7 render_next::next_piece_gfx#1 render_next::screen_next_area#5 render_next::c#2 ] { { render_screen_render#15 = render_screen_render#65 } { next_piece_idx#12 = next_piece_idx#77 } } ) always clobbers reg byte a reg byte y -Statement [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [138] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [139] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [140] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [143] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a -Statement [146] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#97 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#98 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#119 = current_xpos#59 } { current_piece_gfx#112 = current_piece_gfx#64 } { current_piece_char#100 = current_piece_char#68 } } ) always clobbers reg byte a +Statement [132] (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (byte) 4 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#1 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [138] (byte~) render_moving::$1 ← (byte) render_screen_render#33 + (byte) render_moving::ypos#2 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$1 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [139] (byte~) render_moving::$6 ← (byte~) render_moving::$1 << (byte) 1 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::$6 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [140] (byte*) render_moving::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_moving::$6) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::i#3 render_moving::l#4 render_moving::screen_line#0 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [143] (byte) render_moving::current_cell#0 ← *((byte*) current_piece_gfx#64 + (byte) render_moving::i#4) [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::screen_line#0 render_moving::i#4 render_moving::xpos#2 render_moving::c#2 render_moving::current_cell#0 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a +Statement [146] *((byte*) render_moving::screen_line#0 + (byte) render_moving::xpos#2) ← (byte) current_piece_char#68 [ render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] ( main:11::render_moving:33 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#96 } { current_xpos#117 = current_xpos#59 } { current_piece_gfx#110 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#98 } } main:11::render_moving:62 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#33 current_xpos#59 current_piece_gfx#64 current_piece_char#68 render_moving::ypos#2 render_moving::l#4 render_moving::i#2 render_moving::screen_line#0 render_moving::xpos#2 render_moving::c#2 ] { { current_ypos#13 = current_ypos#97 } { render_screen_render#33 = render_screen_render#64 } { current_xpos#118 = current_xpos#59 } { current_piece_gfx#111 = current_piece_gfx#64 } { current_piece_char#68 = current_piece_char#99 } } ) always clobbers reg byte a Statement [152] (byte~) render_playfield::$0 ← (byte) render_screen_render#22 + (byte) render_playfield::l#2 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] ( main:11::render_playfield:28 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] { } main:11::render_playfield:56 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$0 ] { { render_screen_render#22 = render_screen_render#63 } } ) always clobbers reg byte a Statement [153] (byte~) render_playfield::$3 ← (byte~) render_playfield::$0 << (byte) 1 [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] ( main:11::render_playfield:28 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] { } main:11::render_playfield:56 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::$3 ] { { render_screen_render#22 = render_screen_render#63 } } ) always clobbers reg byte a Statement [154] (byte*) render_playfield::screen_line#0 ← *((const byte**) screen_lines_1 + (byte~) render_playfield::$3) [ render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] ( main:11::render_playfield:28 [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 current_movedown_slow#1 game_over#52 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] { } main:11::render_playfield:56 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#21 current_piece#15 current_piece_char#16 current_orientation#17 current_piece_gfx#18 current_xpos#19 current_ypos#19 game_over#15 next_piece_idx#16 keyboard_events_size#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 render_screen_render#22 render_playfield::l#2 render_playfield::i#3 render_playfield::screen_line#0 ] { { render_screen_render#22 = render_screen_render#63 } } ) always clobbers reg byte a @@ -15930,131 +16007,131 @@ Statement [168] if((byte) game_over#15==(byte) 0) goto play_movement::@1 [ score Statement [175] (byte) play_movement::render#2 ← (byte) play_movement::render#1 + (byte~) play_movement::$3 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] ( main:11::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_movement::render#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a Statement [180] (byte) play_movement::return#0 ← (byte) play_movement::render#2 + (byte~) play_movement::$4 [ score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] ( main:11::play_movement:51 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece#15 current_piece_char#16 current_ypos#19 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::return#0 current_orientation#25 current_piece_gfx#21 current_xpos#26 ] { { play_movement::key_event#0 = main::key_event#0 } { play_movement::return#2 = play_movement::return#3 } } ) always clobbers reg byte a Statement [185] (byte~) play_move_rotate::$5 ← (byte) current_orientation#20 + (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a -Statement [191] (byte*) current_piece#98 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#98 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [191] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#97 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#3 play_collision::ypos#3 play_collision::orientation#3 current_piece#97 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } ) always clobbers reg byte a Statement [197] (byte*) current_piece_gfx#7 ← (byte*) current_piece#15 + (byte) current_orientation#7 [ current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_xpos#26 current_orientation#7 current_piece_gfx#7 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a Statement [198] (byte~) play_move_rotate::$7 ← (byte) current_orientation#20 - (byte) $10 [ current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] ( main:11::play_movement:51::play_move_rotate:177 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::$7 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } } ) always clobbers reg byte a -Statement [201] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [203] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [204] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [208] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [210] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [213] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#98 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [229] (byte*) current_piece#97 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#97 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [240] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [201] (byte*) play_collision::piece_gfx#0 ← (byte*) current_piece#17 + (byte) play_collision::orientation#5 [ play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::yp#0 play_collision::xpos#6 play_collision::piece_gfx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [203] (byte~) play_collision::$14 ← (byte) play_collision::yp#2 << (byte) 1 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::$14 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [204] (byte*) play_collision::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_collision::$14) [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::i#3 play_collision::l#6 play_collision::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [208] if(*((byte*) play_collision::piece_gfx#0 + (byte) play_collision::i#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [210] (byte~) play_collision::$5 ← (byte) play_collision::xp#2 & (byte) $80 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 play_collision::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [213] if(*((byte*) play_collision::playfield_line#0 + (byte) play_collision::xp#2)==(byte) 0) goto play_collision::@3 [ play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] ( main:11::play_movement:51::play_move_rotate:177::play_collision:192 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::render#2 current_piece#15 current_ypos#19 current_orientation#20 current_piece_gfx#20 current_xpos#26 play_move_rotate::orientation#3 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_rotate::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_rotate::return#0 = play_move_rotate::return#2 } { current_piece#17 = current_piece#97 } { play_collision::orientation#3 = play_collision::orientation#5 play_move_rotate::orientation#3 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#3 } { play_collision::xpos#3 = play_collision::xpos#6 current_xpos#26 } { play_collision::return#14 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:230 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } main:11::play_movement:51::play_move_leftright:172::play_collision:241 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_collision:265 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } main:11::play_spawn_current:24::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26::play_collision:294 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278::play_collision:294 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_collision::xpos#6 play_collision::piece_gfx#0 play_collision::yp#2 play_collision::l#6 play_collision::playfield_line#0 play_collision::xp#2 play_collision::c#2 play_collision::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [229] (byte*) current_piece#96 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#96 play_collision::orientation#2 play_collision::ypos#2 play_collision::xpos#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#96 } { play_collision::orientation#2 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#2 } { play_collision::xpos#2 = play_collision::xpos#6 } { play_collision::return#13 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [240] (byte*) current_piece#95 ← (byte*) current_piece#15 [ current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#95 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] ( main:11::play_movement:51::play_move_leftright:172 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 score_bcd current_movedown_slow#21 current_piece_char#16 game_over#15 next_piece_idx#16 current_movedown_counter#14 lines_bcd#15 level#17 level_bcd#17 play_movement::key_event#0 play_movement::render#1 current_piece_gfx#20 current_piece#15 current_ypos#19 current_orientation#20 current_xpos#22 current_piece#95 play_collision::orientation#1 play_collision::ypos#1 play_collision::xpos#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_leftright::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_leftright::return#0 = play_move_leftright::return#2 } { current_piece#17 = current_piece#95 } { play_collision::orientation#1 = play_collision::orientation#5 current_orientation#20 } { current_ypos#19 = play_collision::yp#0 play_collision::ypos#1 } { play_collision::xpos#1 = play_collision::xpos#6 } { play_collision::return#1 = play_collision::return#15 } } ) always clobbers reg byte a Statement [254] if((byte) current_movedown_counter#12<(const nomodify byte) current_movedown_fast) goto play_move_down::@2 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a Statement [257] if((byte) current_movedown_counter#12<(byte) current_movedown_slow#14) goto play_move_down::@3 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#7 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#7 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [264] (byte*) current_piece#95 ← (byte*) current_piece#10 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#95 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#95 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [279] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [280] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#92 current_piece_gfx#116 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [287] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [288] (byte) current_piece_char#5 ← *((const byte*) PIECES_CHARS + (byte) play_spawn_current::current_piece_idx#0) [ play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [289] (byte) current_xpos#100 ← *((const byte*) PIECES_START_X + (byte) play_spawn_current::current_piece_idx#0) [ current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [290] (byte) current_ypos#6 ← *((const byte*) PIECES_START_Y + (byte) play_spawn_current::current_piece_idx#0) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [293] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#99 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#99 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a -Statement [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } } ) always clobbers reg byte a -Statement [304] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } } ) always clobbers reg byte a -Statement [308] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [309] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [311] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [312] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [322] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [323] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a reg byte y -Statement [326] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [328] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a reg byte x -Statement [332] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [333] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:318 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a -Statement [351] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a -Statement [359] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#7 play_remove_lines::w#6 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#7 play_remove_lines::w#6 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a -Statement [363] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [364] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [368] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [369] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a -Statement [380] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:402 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:408 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:414 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:420 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a -Statement [382] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:402 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:408 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:414 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:420 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a -Statement [383] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:402 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:408 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:414 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:420 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a -Statement [385] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte a -Statement [387] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte y -Statement [396] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] { } ) always clobbers reg byte a reg byte y -Statement [397] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] { } ) always clobbers reg byte a reg byte x -Statement [400] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] { } ) always clobbers reg byte a -Statement [427] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] { } ) always clobbers reg byte a -Statement [428] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] { } ) always clobbers reg byte a -Statement [430] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a -Statement [431] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] { } ) always clobbers reg byte a -Statement [433] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a reg byte y -Statement [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] { } ) always clobbers reg byte a reg byte y -Statement [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] { } ) always clobbers reg byte a -Statement [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte y -Statement [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:393 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a -Statement [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a -Statement [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y -Statement [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y -Statement [452] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a -Statement [457] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] { } ) always clobbers reg byte a -Statement [458] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a -Statement [459] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a -Statement [460] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::idx#2 play_init::pli#1 ] { } ) always clobbers reg byte a -Statement [461] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#1 play_init::idx#1 ] { } ) always clobbers reg byte a -Statement [464] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES [ ] ( main:11::play_init:22 [ score_bcd ] { } ) always clobbers reg byte a -Statement [465] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 ] { } ) always clobbers reg byte a -Statement [467] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 play_init::$3 ] { } ) always clobbers reg byte a -Statement [468] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 ] { } ) always clobbers reg byte a -Statement [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [264] (byte*) current_piece#94 ← (byte*) current_piece#10 [ score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#94 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece#94 play_collision::orientation#0 play_collision::ypos#0 play_collision::xpos#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { current_piece#17 = current_piece#94 } { play_collision::orientation#0 = play_collision::orientation#5 current_orientation#13 } { play_collision::yp#0 = play_collision::ypos#0 } { play_collision::xpos#0 = play_collision::xpos#6 current_xpos#14 } { play_collision::return#0 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [279] (byte*) current_piece#91 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [280] (byte*) current_piece_gfx#115 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 current_piece_gfx#115 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] ( main:11::play_movement:51::play_move_down:165 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_ypos#6 current_xpos#100 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 current_piece#91 current_piece_gfx#115 lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [287] (byte~) play_spawn_current::$7 ← (byte) play_spawn_current::current_piece_idx#0 << (byte) 1 [ play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 game_over#65 play_spawn_current::current_piece_idx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [288] (byte) current_piece_char#5 ← *((const byte*) PIECES_CHARS + (byte) play_spawn_current::current_piece_idx#0) [ play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [289] (byte) current_xpos#100 ← *((const byte*) PIECES_START_X + (byte) play_spawn_current::current_piece_idx#0) [ current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 play_spawn_current::current_piece_idx#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [290] (byte) current_ypos#6 ← *((const byte*) PIECES_START_Y + (byte) play_spawn_current::current_piece_idx#0) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#65 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [293] (byte*) current_piece#98 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 current_piece#98 play_collision::ypos#4 play_collision::xpos#4 game_over#65 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } { current_piece#17 = current_piece#98 } { current_ypos#6 = play_collision::yp#0 play_collision::ypos#4 } { play_collision::xpos#4 = play_collision::xpos#6 current_xpos#100 } { play_collision::return#10 = play_collision::return#15 } } ) always clobbers reg byte a +Statement [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::@3 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 play_spawn_current::piece_idx#2 game_over#52 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } } ) always clobbers reg byte a +Statement [307] (byte) play_spawn_current::piece_idx#1 ← (byte~) play_spawn_current::$5 & (byte) 7 [ current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] ( main:11::play_spawn_current:24 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { } main:11::play_spawn_current:26 [ score_bcd current_movedown_slow#1 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { { next_piece_idx#17 = play_spawn_current::piece_idx#2 } { game_over#52 = game_over#65 } } main:11::play_movement:51::play_move_down:165::play_spawn_current:278 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd lines_bcd#17 level#19 current_movedown_slow#23 level_bcd#19 current_ypos#6 current_xpos#100 play_spawn_current::$7 current_piece_char#5 game_over#52 play_spawn_current::piece_idx#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { next_piece_idx#10 = next_piece_idx#17 } { game_over#10 = game_over#65 } } ) always clobbers reg byte a +Statement [313] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::$9 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [314] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) [ score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 lines_bcd#19 level#10 level_bcd#11 play_update_score::removed#0 play_update_score::lines_before#0 play_update_score::add_bcd#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [316] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 play_update_score::add_bcd#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [317] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 [ score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd current_movedown_slow#14 level#10 level_bcd#11 play_update_score::lines_before#0 lines_bcd#29 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [327] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 [ level_bcd#11 level#21 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [328] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) [ level_bcd#11 level#21 current_movedown_slow#10 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level_bcd#11 level#21 current_movedown_slow#10 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a reg byte y +Statement [331] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f [ level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#21 play_increase_level::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [333] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 [ level#21 current_movedown_slow#65 level_bcd#8 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#8 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a reg byte x +Statement [337] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 play_increase_level::$5 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [338] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) [ level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] ( main:11::play_movement:51::play_move_down:165::play_update_score:276::play_increase_level:323 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 game_over#10 next_piece_idx#10 score_bcd lines_bcd#29 level#21 current_movedown_slow#65 level_bcd#62 play_increase_level::b#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_update_score::removed#0 = play_move_down::removed#0 } } ) always clobbers reg byte a +Statement [356] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS [ play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::y#8 play_remove_lines::removed#11 play_remove_lines::r#1 play_remove_lines::w#2 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a +Statement [364] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 [ play_remove_lines::removed#7 play_remove_lines::w#6 ] ( main:11::play_movement:51::play_move_down:165::play_remove_lines:272 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 play_remove_lines::removed#7 play_remove_lines::w#6 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { play_remove_lines::return#0 = play_remove_lines::removed#7 } } ) always clobbers reg byte a +Statement [368] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::$4 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [369] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::i#3 play_lock_current::l#6 play_lock_current::playfield_line#0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [373] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [374] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 [ current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] ( main:11::play_movement:51::play_move_down:165::play_lock_current:270 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_piece_char#10 current_piece_gfx#13 current_xpos#14 play_lock_current::yp#2 play_lock_current::l#6 play_lock_current::playfield_line#0 play_lock_current::xp#2 play_lock_current::c#2 play_lock_current::i#1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } } ) always clobbers reg byte a +Statement [385] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 [ keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:407 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:413 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:419 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:425 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::keycode#5 keyboard_event_pressed::$0 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a +Statement [387] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 [ keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:407 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:413 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:419 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:425 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::row_bits#0 keyboard_event_pressed::$1 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a +Statement [388] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) [ keyboard_event_pressed::return#11 ] ( main:11::play_movement:51::play_move_down:165::keyboard_event_pressed:250 [ render_screen_show#16 render_screen_render#18 keyboard_events_size#16 play_movement::key_event#0 score_bcd current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 lines_bcd#19 level#10 level_bcd#11 current_movedown_counter#12 play_move_down::movedown#10 keyboard_event_pressed::return#11 ] { { play_movement::key_event#0 = main::key_event#0 play_move_down::key_event#0 } { play_movement::return#2 = play_movement::return#3 } { play_move_down::return#0 = play_move_down::return#3 } { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#12 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:407 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#0 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:413 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#1 = keyboard_event_pressed::return#11 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:419 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#11 = keyboard_event_pressed::return#2 } } main:11::keyboard_event_scan:43::keyboard_event_pressed:425 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_pressed::return#11 ] { { keyboard_event_pressed::return#10 = keyboard_event_pressed::return#11 } } ) always clobbers reg byte a +Statement [390] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return [ keyboard_events_size#13 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte a +Statement [392] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) [ keyboard_events_size#4 keyboard_event_get::return#1 ] ( main:11::keyboard_event_get:45 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#4 keyboard_event_get::return#1 ] { { keyboard_event_get::return#2 = keyboard_event_get::return#3 } } ) always clobbers reg byte y +Statement [401] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_event_scan::row_scan#0 ] { } ) always clobbers reg byte a reg byte y +Statement [402] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 [ keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_events_size#30 keyboard_event_scan::keycode#1 ] { } ) always clobbers reg byte a reg byte x +Statement [405] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 [ keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_events_size#13 keyboard_event_scan::row#1 keyboard_event_scan::keycode#13 ] { } ) always clobbers reg byte a +Statement [432] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$15 ] { } ) always clobbers reg byte a +Statement [433] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$16 ] { } ) always clobbers reg byte a +Statement [435] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a +Statement [436] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::event_type#0 ] { } ) always clobbers reg byte a +Statement [438] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte a reg byte y +Statement [444] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 [ keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#14 keyboard_events_size#29 ] { } ) always clobbers reg byte a reg byte y +Statement [445] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 keyboard_event_scan::$23 ] { } ) always clobbers reg byte a +Statement [446] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 [ keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] ( main:11::keyboard_event_scan:43 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::row_scan#0 keyboard_event_scan::col#2 keyboard_event_scan::keycode#10 keyboard_events_size#10 ] { } ) always clobbers reg byte y +Statement [448] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) [ ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:398 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [449] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) [ keyboard_matrix_read::return#0 ] ( main:11::keyboard_event_scan:43::keyboard_matrix_read:398 [ score_bcd render_screen_show#16 render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 current_movedown_counter#16 lines_bcd#19 level#10 level_bcd#11 keyboard_event_scan::row#2 keyboard_event_scan::keycode#11 keyboard_events_size#30 keyboard_matrix_read::return#0 ] { { keyboard_matrix_read::rowid#0 = keyboard_event_scan::row#2 } { keyboard_matrix_read::return#0 = keyboard_matrix_read::return#2 } } ) always clobbers reg byte a +Statement [451] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a +Statement [455] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y +Statement [456] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a reg byte y +Statement [457] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 [ render_screen_show#16 level#10 ] ( main:11::render_show:41 [ score_bcd render_screen_render#18 current_movedown_slow#14 current_piece#10 current_piece_char#10 current_orientation#13 current_piece_gfx#13 current_xpos#14 current_ypos#11 game_over#10 next_piece_idx#10 keyboard_events_size#19 current_movedown_counter#16 lines_bcd#19 level_bcd#11 render_screen_show#16 level#10 ] { } ) always clobbers reg byte a +Statement [462] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 [ play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 play_init::$2 ] { } ) always clobbers reg byte a +Statement [463] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a +Statement [464] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 [ play_init::j#2 play_init::pli#2 play_init::idx#2 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#2 play_init::idx#2 ] { } ) always clobbers reg byte a +Statement [465] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::idx#2 play_init::pli#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::idx#2 play_init::pli#1 ] { } ) always clobbers reg byte a +Statement [466] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS [ play_init::j#2 play_init::pli#1 play_init::idx#1 ] ( main:11::play_init:22 [ score_bcd play_init::j#2 play_init::pli#1 play_init::idx#1 ] { } ) always clobbers reg byte a +Statement [469] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES [ ] ( main:11::play_init:22 [ score_bcd ] { } ) always clobbers reg byte a +Statement [470] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) [ current_movedown_slow#1 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 ] { } ) always clobbers reg byte a +Statement [472] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 [ current_movedown_slow#1 play_init::b#2 play_init::$3 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 play_init::$3 ] { } ) always clobbers reg byte a +Statement [473] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) [ current_movedown_slow#1 play_init::b#2 ] ( main:11::play_init:22 [ score_bcd current_movedown_slow#1 play_init::b#2 ] { } ) always clobbers reg byte a +Statement [478] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a Statement asm { ldaCIA1_INTERRUPT } always clobbers reg byte a -Statement [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [481] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a -Statement [484] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [485] *((const nomodify byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [486] *((const nomodify byte*) SPRITES_EXPAND_Y) ← *((const nomodify byte*) SPRITES_MC) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [487] *((const nomodify byte*) SPRITES_EXPAND_X) ← *((const nomodify byte*) SPRITES_EXPAND_Y) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a -Statement [489] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] { } ) always clobbers reg byte a -Statement [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a -Statement [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a -Statement [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] { } ) always clobbers reg byte a -Statement [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [503] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [504] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [505] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a -Statement [510] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a -Statement [511] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a -Statement [512] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] { } ) always clobbers reg byte a -Statement [513] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] { } ) always clobbers reg byte a -Statement [514] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] { } ) always clobbers reg byte a -Statement [521] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } ) always clobbers reg byte a reg byte y -Statement [523] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } ) always clobbers reg byte a reg byte y -Statement [528] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } ) always clobbers reg byte a reg byte y -Statement [531] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } ) always clobbers reg byte a reg byte y -Statement [537] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y -Statement [539] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:506 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:508 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y -Statement [546] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a -Statement [547] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a -Statement [557] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] { } ) always clobbers reg byte a -Statement [559] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] { } ) always clobbers reg byte a -Statement [567] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] { } ) always clobbers reg byte a -Statement [568] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a -Statement [569] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x -Statement [570] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x -Statement [571] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x -Statement [572] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next [ ] ( [ ] { } ) always clobbers reg byte a -Statement [573] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a -Statement [574] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y -Statement [575] (volatile byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a -Statement [576] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a -Statement [577] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x -Statement [578] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x -Statement [579] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x -Statement [580] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a -Statement [582] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a +Statement [480] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [481] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [482] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [483] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [484] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [485] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [486] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() [ ] ( main:11::sprites_irq_init:20 [ score_bcd ] { } ) always clobbers reg byte a +Statement [489] *((const nomodify byte*) SPRITES_ENABLE) ← (byte) $f [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [490] *((const nomodify byte*) SPRITES_MC) ← (byte) 0 [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [491] *((const nomodify byte*) SPRITES_EXPAND_Y) ← *((const nomodify byte*) SPRITES_MC) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [492] *((const nomodify byte*) SPRITES_EXPAND_X) ← *((const nomodify byte*) SPRITES_EXPAND_Y) [ ] ( main:11::sprites_init:18 [ score_bcd ] { } ) always clobbers reg byte a +Statement [494] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 [ sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 sprites_init::s2#0 ] { } ) always clobbers reg byte a +Statement [495] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a +Statement [496] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK [ sprites_init::s#2 sprites_init::xpos#2 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#2 ] { } ) always clobbers reg byte a +Statement [497] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 [ sprites_init::s#2 sprites_init::xpos#1 ] ( main:11::sprites_init:18 [ score_bcd sprites_init::s#2 sprites_init::xpos#1 ] { } ) always clobbers reg byte a +Statement [502] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [504] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [505] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [506] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [507] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [508] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [509] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [510] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY [ ] ( main:11::render_init:16 [ score_bcd ] { } ) always clobbers reg byte a +Statement [515] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a +Statement [516] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 render_init::$5 ] { } ) always clobbers reg byte a +Statement [517] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 [ render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#2 render_init::li_2#2 ] { } ) always clobbers reg byte a +Statement [518] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 [ render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_2#2 render_init::li_1#1 ] { } ) always clobbers reg byte a +Statement [519] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 [ render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] ( main:11::render_init:16 [ score_bcd render_init::i#2 render_init::li_1#1 render_init::li_2#1 ] { } ) always clobbers reg byte a +Statement [526] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::screen#5 render_screen_original::cols#4 render_screen_original::x#4 ] { } ) always clobbers reg byte a reg byte y +Statement [528] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK [ render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::oscr#4 render_screen_original::ocols#4 render_screen_original::y#6 render_screen_original::cols#4 render_screen_original::x#4 render_screen_original::screen#2 ] { } ) always clobbers reg byte a reg byte y +Statement [533] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) [ render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#2 render_screen_original::screen#6 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 ] { } ) always clobbers reg byte a reg byte y +Statement [536] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#2 render_screen_original::cols#5 render_screen_original::x#5 render_screen_original::screen#3 ] { } ) always clobbers reg byte a reg byte y +Statement [542] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE [ render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::screen#7 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y +Statement [544] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK [ render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] ( main:11::render_init:16::render_screen_original:511 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } main:11::render_init:16::render_screen_original:513 [ score_bcd render_screen_original::y#6 render_screen_original::screen#10 render_screen_original::oscr#1 render_screen_original::ocols#1 render_screen_original::cols#6 render_screen_original::x#6 ] { } ) always clobbers reg byte a reg byte y +Statement [551] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a +Statement [552] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:11::sid_rnd_init:14 [ score_bcd ] { } ) always clobbers reg byte a +Statement [562] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] ( [ render_screen_showing irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::raster_sprite_gfx_modify ] { } ) always clobbers reg byte a +Statement [564] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt sprites_irq::ptr#0 ] { } ) always clobbers reg byte a +Statement [572] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr irq_cnt ] { } ) always clobbers reg byte a +Statement [573] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a +Statement [574] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x +Statement [575] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x +Statement [576] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x +Statement [577] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next [ ] ( [ ] { } ) always clobbers reg byte a +Statement [578] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a +Statement [579] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y +Statement [580] (volatile byte) irq_cnt ← (byte) 0 [ irq_sprite_ypos irq_sprite_ptr ] ( [ irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a +Statement [581] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ypos irq_sprite_ptr ] { } ) always clobbers reg byte a +Statement [582] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 [ irq_raster_next irq_sprite_ptr ] ( [ irq_raster_next irq_sprite_ptr ] { } ) always clobbers reg byte a reg byte x +Statement [583] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x +Statement [584] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a reg byte x +Statement [585] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a +Statement [587] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 [ irq_raster_next ] ( [ irq_raster_next ] { } ) always clobbers reg byte a Potential registers zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] : zp[1]:2 , Potential registers zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] : zp[1]:3 , Potential registers zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] : zp[1]:4 , @@ -16070,11 +16147,11 @@ Potential registers zp[1]:17 [ render_next::l#7 render_next::l#1 ] : zp[1]:17 , Potential registers zp[2]:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 ] : zp[2]:18 , Potential registers zp[2]:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 ] : zp[2]:20 , Potential registers zp[1]:22 [ render_next::c#2 render_next::c#1 ] : zp[1]:22 , reg byte x , -Potential registers zp[1]:23 [ current_ypos#13 current_ypos#97 current_ypos#98 ] : zp[1]:23 , reg byte x , reg byte y , +Potential registers zp[1]:23 [ current_ypos#13 current_ypos#96 current_ypos#97 ] : zp[1]:23 , reg byte x , reg byte y , Potential registers zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] : zp[1]:24 , reg byte x , reg byte y , -Potential registers zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] : zp[1]:25 , reg byte x , reg byte y , -Potential registers zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] : zp[2]:26 , -Potential registers zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] : zp[1]:28 , reg byte x , reg byte y , +Potential registers zp[1]:25 [ current_xpos#59 current_xpos#117 current_xpos#118 ] : zp[1]:25 , reg byte x , reg byte y , +Potential registers zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#110 current_piece_gfx#111 ] : zp[2]:26 , +Potential registers zp[1]:28 [ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] : zp[1]:28 , reg byte x , reg byte y , Potential registers zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] : zp[1]:29 , reg byte x , reg byte y , Potential registers zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] : zp[1]:30 , reg byte x , reg byte y , Potential registers zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] : zp[1]:31 , reg byte x , reg byte y , @@ -16088,7 +16165,7 @@ Potential registers zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] : z Potential registers zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] : zp[1]:40 , reg byte x , reg byte y , Potential registers zp[1]:41 [ play_move_rotate::return#2 ] : zp[1]:41 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] : zp[1]:42 , reg byte x , reg byte y , -Potential registers zp[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] : zp[2]:43 , +Potential registers zp[2]:43 [ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 ] : zp[2]:43 , Potential registers zp[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] : zp[1]:45 , reg byte x , reg byte y , Potential registers zp[1]:46 [ 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[1]:46 , reg byte x , reg byte y , Potential registers zp[1]:47 [ 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[1]:47 , reg byte x , reg byte y , @@ -16104,10 +16181,10 @@ Potential registers zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd# Potential registers zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] : zp[1]:58 , Potential registers zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] : zp[1]:59 , Potential registers zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] : zp[1]:60 , -Potential registers zp[2]:61 [ current_piece#28 current_piece#10 current_piece#100 current_piece#15 current_piece#92 ] : zp[2]:61 , +Potential registers zp[2]:61 [ current_piece#28 current_piece#10 current_piece#99 current_piece#15 current_piece#91 ] : zp[2]:61 , Potential registers zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] : zp[1]:63 , Potential registers zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] : zp[1]:64 , -Potential registers zp[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#122 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] : zp[2]:65 , +Potential registers zp[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#121 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#115 ] : zp[2]:65 , Potential registers zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] : zp[1]:67 , Potential registers zp[1]:68 [ play_move_down::return#3 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] : zp[1]:69 , @@ -16203,66 +16280,69 @@ Potential registers zp[1]:171 [ play_spawn_current::current_piece_idx#0 ] : zp[1 Potential registers zp[1]:172 [ play_spawn_current::$7 ] : zp[1]:172 , reg byte x , Potential registers zp[1]:173 [ play_collision::return#10 ] : zp[1]:173 , reg byte a , reg byte x , reg byte y , Potential registers zp[1]:174 [ play_spawn_current::$1 ] : zp[1]:174 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:175 [ play_spawn_current::sid_rnd1_return#0 ] : zp[1]:175 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:176 [ play_update_score::$2 ] : zp[1]:176 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:177 [ play_update_score::lines_before#0 ] : zp[1]:177 , reg byte x , reg byte y , -Potential registers zp[1]:178 [ play_update_score::$9 ] : zp[1]:178 , reg byte a , reg byte x , reg byte y , -Potential registers zp[4]:179 [ play_update_score::add_bcd#0 ] : zp[4]:179 , -Potential registers zp[1]:183 [ play_update_score::$4 ] : zp[1]:183 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:184 [ play_update_score::lines_after#0 ] : zp[1]:184 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:185 [ play_increase_level::$1 ] : zp[1]:185 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:186 [ play_increase_level::$5 ] : zp[1]:186 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:187 [ play_remove_lines::c#0 ] : zp[1]:187 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:188 [ play_lock_current::$4 ] : zp[1]:188 , reg byte a , reg byte x , reg byte y , -Potential registers zp[2]:189 [ play_lock_current::playfield_line#0 ] : zp[2]:189 , -Potential registers zp[1]:191 [ play_lock_current::i#1 ] : zp[1]:191 , reg byte x , reg byte y , -Potential registers zp[1]:192 [ keyboard_event_pressed::$0 ] : zp[1]:192 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:193 [ keyboard_event_pressed::row_bits#0 ] : zp[1]:193 , reg byte x , reg byte y , -Potential registers zp[1]:194 [ keyboard_event_pressed::$1 ] : zp[1]:194 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:195 [ keyboard_event_pressed::return#11 ] : zp[1]:195 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:196 [ keyboard_matrix_read::rowid#0 ] : zp[1]:196 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:197 [ keyboard_matrix_read::return#2 ] : zp[1]:197 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:198 [ keyboard_event_scan::row_scan#0 ] : zp[1]:198 , reg byte x , -Potential registers zp[1]:199 [ keyboard_event_pressed::return#0 ] : zp[1]:199 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:200 [ keyboard_event_scan::$0 ] : zp[1]:200 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:201 [ keyboard_event_pressed::return#1 ] : zp[1]:201 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:202 [ keyboard_event_scan::$3 ] : zp[1]:202 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:203 [ keyboard_event_pressed::return#2 ] : zp[1]:203 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:204 [ keyboard_event_scan::$6 ] : zp[1]:204 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:205 [ keyboard_event_pressed::return#10 ] : zp[1]:205 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:206 [ keyboard_event_scan::$9 ] : zp[1]:206 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:207 [ keyboard_event_scan::$15 ] : zp[1]:207 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:208 [ keyboard_event_scan::$16 ] : zp[1]:208 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:209 [ keyboard_event_scan::event_type#0 ] : zp[1]:209 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:210 [ keyboard_event_scan::$23 ] : zp[1]:210 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:211 [ keyboard_matrix_read::return#0 ] : zp[1]:211 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:212 [ play_init::$2 ] : zp[1]:212 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:213 [ play_init::$3 ] : zp[1]:213 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:214 [ sprites_init::s2#0 ] : zp[1]:214 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:215 [ render_init::$5 ] : zp[1]:215 , reg byte x , reg byte y , -Potential registers zp[1]:216 [ sprites_irq::ypos#0 ] : zp[1]:216 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:217 [ sprites_irq::$0 ] : zp[1]:217 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] : zp[1]:218 , -Potential registers zp[1]:219 [ sprites_irq::ptr#0 ] : zp[1]:219 , reg byte x , reg byte y , -Potential registers zp[1]:220 [ sprites_irq::ptr#3 ] : zp[1]:220 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:221 [ sprites_irq::ptr#4 ] : zp[1]:221 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:222 [ sprites_irq::ptr#1 ] : zp[1]:222 , reg byte a , reg byte x , reg byte y , -Potential registers zp[1]:223 [ sprites_irq::ptr#2 ] : zp[1]:223 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:175 [ sid_rnd::return#2 ] : zp[1]:175 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:176 [ play_spawn_current::$5 ] : zp[1]:176 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:177 [ sid_rnd::return#0 ] : zp[1]:177 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:178 [ play_update_score::$2 ] : zp[1]:178 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:179 [ play_update_score::lines_before#0 ] : zp[1]:179 , reg byte x , reg byte y , +Potential registers zp[1]:180 [ play_update_score::$9 ] : zp[1]:180 , reg byte a , reg byte x , reg byte y , +Potential registers zp[4]:181 [ play_update_score::add_bcd#0 ] : zp[4]:181 , +Potential registers zp[1]:185 [ play_update_score::$4 ] : zp[1]:185 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:186 [ play_update_score::lines_after#0 ] : zp[1]:186 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:187 [ play_increase_level::$1 ] : zp[1]:187 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:188 [ play_increase_level::$5 ] : zp[1]:188 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:189 [ play_remove_lines::c#0 ] : zp[1]:189 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:190 [ play_lock_current::$4 ] : zp[1]:190 , reg byte a , reg byte x , reg byte y , +Potential registers zp[2]:191 [ play_lock_current::playfield_line#0 ] : zp[2]:191 , +Potential registers zp[1]:193 [ play_lock_current::i#1 ] : zp[1]:193 , reg byte x , reg byte y , +Potential registers zp[1]:194 [ keyboard_event_pressed::$0 ] : zp[1]:194 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:195 [ keyboard_event_pressed::row_bits#0 ] : zp[1]:195 , reg byte x , reg byte y , +Potential registers zp[1]:196 [ keyboard_event_pressed::$1 ] : zp[1]:196 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:197 [ keyboard_event_pressed::return#11 ] : zp[1]:197 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:198 [ keyboard_matrix_read::rowid#0 ] : zp[1]:198 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:199 [ keyboard_matrix_read::return#2 ] : zp[1]:199 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:200 [ keyboard_event_scan::row_scan#0 ] : zp[1]:200 , reg byte x , +Potential registers zp[1]:201 [ keyboard_event_pressed::return#0 ] : zp[1]:201 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:202 [ keyboard_event_scan::$0 ] : zp[1]:202 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:203 [ keyboard_event_pressed::return#1 ] : zp[1]:203 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:204 [ keyboard_event_scan::$3 ] : zp[1]:204 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:205 [ keyboard_event_pressed::return#2 ] : zp[1]:205 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:206 [ keyboard_event_scan::$6 ] : zp[1]:206 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:207 [ keyboard_event_pressed::return#10 ] : zp[1]:207 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:208 [ keyboard_event_scan::$9 ] : zp[1]:208 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:209 [ keyboard_event_scan::$15 ] : zp[1]:209 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:210 [ keyboard_event_scan::$16 ] : zp[1]:210 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:211 [ keyboard_event_scan::event_type#0 ] : zp[1]:211 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:212 [ keyboard_event_scan::$23 ] : zp[1]:212 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:213 [ keyboard_matrix_read::return#0 ] : zp[1]:213 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:214 [ play_init::$2 ] : zp[1]:214 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:215 [ play_init::$3 ] : zp[1]:215 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:216 [ sprites_init::s2#0 ] : zp[1]:216 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:217 [ render_init::$5 ] : zp[1]:217 , reg byte x , reg byte y , +Potential registers zp[1]:218 [ sprites_irq::ypos#0 ] : zp[1]:218 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:219 [ sprites_irq::$0 ] : zp[1]:219 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:220 [ sprites_irq::raster_sprite_gfx_modify ] : zp[1]:220 , +Potential registers zp[1]:221 [ sprites_irq::ptr#0 ] : zp[1]:221 , reg byte x , reg byte y , +Potential registers zp[1]:222 [ sprites_irq::ptr#3 ] : zp[1]:222 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:223 [ sprites_irq::ptr#4 ] : zp[1]:223 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:224 [ sprites_irq::ptr#1 ] : zp[1]:224 , reg byte a , reg byte x , reg byte y , +Potential registers zp[1]:225 [ sprites_irq::ptr#2 ] : zp[1]:225 , reg byte a , reg byte x , reg byte y , REGISTER UPLIFT SCOPES Uplift Scope [play_collision] 380,000,000,006.5: zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] 200,000,000,002: zp[1]:159 [ play_collision::$5 ] 133,750,000,003.25: zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] 122,222,222,223.44: zp[1]:51 [ play_collision::c#2 play_collision::c#1 ] 20,000,000,002: zp[1]:155 [ play_collision::$14 ] 16,153,846,154.08: zp[1]:158 [ play_collision::i#1 ] 13,132,575,007.31: zp[1]:47 [ 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 ] 11,176,470,589.35: zp[1]:48 [ play_collision::l#6 play_collision::l#1 ] 7,857,142,857.29: zp[2]:156 [ play_collision::playfield_line#0 ] 4,762,380,952.48: zp[2]:153 [ play_collision::piece_gfx#0 ] 455,492,427.35: zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] 10,800,009: zp[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] 2,000,002: zp[1]:173 [ play_collision::return#10 ] 200,002: zp[1]:150 [ play_collision::return#14 ] 200,002: zp[1]:160 [ play_collision::return#13 ] 200,002: zp[1]:162 [ play_collision::return#1 ] 200,002: zp[1]:166 [ play_collision::return#0 ] 200,000.71: zp[1]:52 [ play_collision::return#15 ] -Uplift Scope [play_lock_current] 38,000,000,006.5: zp[1]:80 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] 14,750,000,003.5: zp[1]:81 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] 14,000,000,001.4: zp[1]:82 [ play_lock_current::c#2 play_lock_current::c#1 ] 2,333,333,333.67: zp[1]:191 [ play_lock_current::i#1 ] 2,000,000,002: zp[1]:188 [ play_lock_current::$4 ] 1,153,846,155: zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 ] 1,100,000,000.2: zp[2]:189 [ play_lock_current::playfield_line#0 ] 752,083,336.17: zp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] -Uplift Scope [play_remove_lines] 19,000,000,004.21: zp[1]:74 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] 17,928,571,438.14: zp[1]:77 [ play_remove_lines::w#6 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 play_remove_lines::w#3 ] 17,500,000,001.75: zp[1]:75 [ play_remove_lines::x#2 play_remove_lines::x#1 ] 8,200,000,001: zp[1]:76 [ play_remove_lines::full#4 play_remove_lines::full#2 ] 6,000,000,000.6: zp[1]:187 [ play_remove_lines::c#0 ] 2,564,113,677.89: zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] 1,633,333,334.97: zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] 200,002: zp[1]:168 [ play_remove_lines::return#0 ] -Uplift Scope [play_increase_level] 40,000,000,004: zp[1]:186 [ play_increase_level::$5 ] 25,000,000,002.5: zp[1]:71 [ play_increase_level::b#2 play_increase_level::b#1 ] 20,000,002: zp[1]:185 [ play_increase_level::$1 ] -Uplift Scope [] 2,101,417,003.77: zp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] 588,273,523.09: zp[1]:88 [ 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 ] 182,589,729.94: zp[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#122 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] 182,161,655.2: zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] 36,379,641.34: zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] 21,522,727.69: zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] 19,012,786.51: zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] 14,200,016: zp[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] 2,655,686.72: zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] 1,310,325.83: zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] 611,596.9: zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#6 current_ypos#19 ] 438,675.79: zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#52 game_over#15 ] 427,344.55: zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] 415,859.78: zp[2]:61 [ current_piece#28 current_piece#10 current_piece#100 current_piece#15 current_piece#92 ] 47,848.43: zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] 47,736.43: zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] 37,176.6: zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] 14,598.57: zp[4]:113 [ score_bcd ] 7,902.15: zp[1]:34 [ render_screen_render#22 render_screen_render#63 ] 4,841.95: zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] 4,817.26: zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] 1,203: zp[1]:15 [ render_screen_render#15 render_screen_render#65 ] 1,158.9: zp[1]:23 [ current_ypos#13 current_ypos#97 current_ypos#98 ] 1,000.5: zp[1]:112 [ render_screen_showing ] 944.98: zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] 646.8: zp[1]:16 [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] 360.27: zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] 0.48: zp[1]:118 [ irq_sprite_ypos ] 0.48: zp[1]:120 [ irq_cnt ] 0.45: zp[1]:119 [ irq_sprite_ptr ] 0.44: zp[1]:117 [ irq_raster_next ] -Uplift Scope [play_spawn_current] 2,000,000,002: zp[1]:175 [ play_spawn_current::sid_rnd1_return#0 ] 2,000,002: zp[1]:174 [ play_spawn_current::$1 ] 1,250,001.25: zp[1]:171 [ play_spawn_current::current_piece_idx#0 ] 32,258.1: zp[1]:172 [ play_spawn_current::$7 ] -Uplift Scope [keyboard_event_scan] 200,000,002: zp[1]:207 [ keyboard_event_scan::$15 ] 200,000,002: zp[1]:208 [ keyboard_event_scan::$16 ] 200,000,002: zp[1]:209 [ keyboard_event_scan::event_type#0 ] 200,000,002: zp[1]:210 [ keyboard_event_scan::$23 ] 178,571,430.36: zp[1]:86 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] 119,038,466.17: zp[1]:87 [ 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 ] 21,000,001.74: zp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] 12,777,778.06: zp[1]:198 [ keyboard_event_scan::row_scan#0 ] 20,002: zp[1]:200 [ keyboard_event_scan::$0 ] 20,002: zp[1]:202 [ keyboard_event_scan::$3 ] 20,002: zp[1]:204 [ keyboard_event_scan::$6 ] 20,002: zp[1]:206 [ keyboard_event_scan::$9 ] -Uplift Scope [keyboard_matrix_read] 110,000,002: zp[1]:196 [ keyboard_matrix_read::rowid#0 ] 36,666,667.33: zp[1]:211 [ keyboard_matrix_read::return#0 ] 20,000,002: zp[1]:197 [ keyboard_matrix_read::return#2 ] -Uplift Scope [play_update_score] 2,000,002: zp[1]:176 [ play_update_score::$2 ] 2,000,002: zp[1]:178 [ play_update_score::$9 ] 2,000,002: zp[1]:183 [ play_update_score::$4 ] 2,000,002: zp[1]:184 [ play_update_score::lines_after#0 ] 666,667.33: zp[4]:179 [ play_update_score::add_bcd#0 ] 442,857.71: zp[1]:170 [ play_update_score::removed#0 ] 222,222.44: zp[1]:177 [ play_update_score::lines_before#0 ] +Uplift Scope [play_lock_current] 38,000,000,006.5: zp[1]:80 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] 14,750,000,003.5: zp[1]:81 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] 14,000,000,001.4: zp[1]:82 [ play_lock_current::c#2 play_lock_current::c#1 ] 2,333,333,333.67: zp[1]:193 [ play_lock_current::i#1 ] 2,000,000,002: zp[1]:190 [ play_lock_current::$4 ] 1,153,846,155: zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 ] 1,100,000,000.2: zp[2]:191 [ play_lock_current::playfield_line#0 ] 752,083,336.17: zp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplift Scope [play_remove_lines] 19,000,000,004.21: zp[1]:74 [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] 17,928,571,438.14: zp[1]:77 [ play_remove_lines::w#6 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 play_remove_lines::w#3 ] 17,500,000,001.75: zp[1]:75 [ play_remove_lines::x#2 play_remove_lines::x#1 ] 8,200,000,001: zp[1]:76 [ play_remove_lines::full#4 play_remove_lines::full#2 ] 6,000,000,000.6: zp[1]:189 [ play_remove_lines::c#0 ] 2,564,113,677.89: zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] 1,633,333,334.97: zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] 200,002: zp[1]:168 [ play_remove_lines::return#0 ] +Uplift Scope [play_increase_level] 40,000,000,004: zp[1]:188 [ play_increase_level::$5 ] 25,000,000,002.5: zp[1]:71 [ play_increase_level::b#2 play_increase_level::b#1 ] 20,000,002: zp[1]:187 [ play_increase_level::$1 ] +Uplift Scope [sid_rnd] 3,666,666,667.33: zp[1]:177 [ sid_rnd::return#0 ] 2,000,000,002: zp[1]:175 [ sid_rnd::return#2 ] +Uplift Scope [] 2,101,417,003.77: zp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] 588,273,523.09: zp[1]:88 [ 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 ] 182,589,729.94: zp[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#121 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#115 ] 182,158,708.7: zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] 36,379,641.34: zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] 21,522,727.69: zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] 19,006,809.21: zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] 14,200,016: zp[2]:43 [ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 ] 2,655,686.72: zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] 1,310,325.83: zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] 605,233.19: zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#6 current_ypos#19 ] 433,157.27: zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#52 game_over#15 ] 427,344.55: zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] 415,859.78: zp[2]:61 [ current_piece#28 current_piece#10 current_piece#99 current_piece#15 current_piece#91 ] 47,848.43: zp[1]:28 [ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] 47,736.43: zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#110 current_piece_gfx#111 ] 37,176.6: zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] 14,598.57: zp[4]:113 [ score_bcd ] 7,902.15: zp[1]:34 [ render_screen_render#22 render_screen_render#63 ] 4,841.95: zp[1]:25 [ current_xpos#59 current_xpos#117 current_xpos#118 ] 4,817.26: zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] 1,203: zp[1]:15 [ render_screen_render#15 render_screen_render#65 ] 1,158.9: zp[1]:23 [ current_ypos#13 current_ypos#96 current_ypos#97 ] 1,000.5: zp[1]:112 [ render_screen_showing ] 944.98: zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] 646.8: zp[1]:16 [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] 360.27: zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] 0.48: zp[1]:118 [ irq_sprite_ypos ] 0.48: zp[1]:120 [ irq_cnt ] 0.45: zp[1]:119 [ irq_sprite_ptr ] 0.44: zp[1]:117 [ irq_raster_next ] +Uplift Scope [play_spawn_current] 2,000,000,002: zp[1]:176 [ play_spawn_current::$5 ] 2,000,002: zp[1]:174 [ play_spawn_current::$1 ] 1,250,001.25: zp[1]:171 [ play_spawn_current::current_piece_idx#0 ] 29,411.79: zp[1]:172 [ play_spawn_current::$7 ] +Uplift Scope [keyboard_event_scan] 200,000,002: zp[1]:209 [ keyboard_event_scan::$15 ] 200,000,002: zp[1]:210 [ keyboard_event_scan::$16 ] 200,000,002: zp[1]:211 [ keyboard_event_scan::event_type#0 ] 200,000,002: zp[1]:212 [ keyboard_event_scan::$23 ] 178,571,430.36: zp[1]:86 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] 119,038,466.17: zp[1]:87 [ 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 ] 21,000,001.74: zp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] 12,777,778.06: zp[1]:200 [ keyboard_event_scan::row_scan#0 ] 20,002: zp[1]:202 [ keyboard_event_scan::$0 ] 20,002: zp[1]:204 [ keyboard_event_scan::$3 ] 20,002: zp[1]:206 [ keyboard_event_scan::$6 ] 20,002: zp[1]:208 [ keyboard_event_scan::$9 ] +Uplift Scope [keyboard_matrix_read] 110,000,002: zp[1]:198 [ keyboard_matrix_read::rowid#0 ] 36,666,667.33: zp[1]:213 [ keyboard_matrix_read::return#0 ] 20,000,002: zp[1]:199 [ keyboard_matrix_read::return#2 ] +Uplift Scope [play_update_score] 2,000,002: zp[1]:178 [ play_update_score::$2 ] 2,000,002: zp[1]:180 [ play_update_score::$9 ] 2,000,002: zp[1]:185 [ play_update_score::$4 ] 2,000,002: zp[1]:186 [ play_update_score::lines_after#0 ] 666,667.33: zp[4]:181 [ play_update_score::add_bcd#0 ] 442,857.71: zp[1]:170 [ play_update_score::removed#0 ] 222,222.44: zp[1]:179 [ play_update_score::lines_before#0 ] Uplift Scope [render_moving] 2,600,005.75: zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] 1,833,335.17: zp[1]:33 [ render_moving::c#2 render_moving::c#1 ] 1,486,670.13: zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] 1,000,001: zp[1]:137 [ render_moving::current_cell#0 ] 200,002: zp[1]:133 [ render_moving::$1 ] 200,002: zp[1]:134 [ render_moving::$6 ] 161,766.32: zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] 110,000.2: zp[2]:135 [ render_moving::screen_line#0 ] 93,732.15: zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Uplift Scope [render_next] 1,963,007.3: zp[2]:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 ] 1,785,716.07: zp[1]:22 [ render_next::c#2 render_next::c#1 ] 1,651,255.75: zp[2]:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 ] 1,000,001: zp[1]:132 [ render_next::cell#0 ] 168,183.5: zp[1]:17 [ render_next::l#7 render_next::l#1 ] 66,733.47: zp[1]:131 [ render_next::next_piece_char#0 ] 500.5: zp[1]:130 [ render_next::$6 ] Uplift Scope [render_playfield] 2,250,004.5: zp[2]:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] 2,000,002: zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] 1,503,335.77: zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] 200,002: zp[1]:138 [ render_playfield::$0 ] 200,002: zp[1]:139 [ render_playfield::$3 ] 180,001.8: zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] -Uplift Scope [keyboard_event_pressed] 2,000,002: zp[1]:192 [ keyboard_event_pressed::$0 ] 2,000,002: zp[1]:194 [ keyboard_event_pressed::$1 ] 1,000,001: zp[1]:193 [ keyboard_event_pressed::row_bits#0 ] 666,667.33: zp[1]:83 [ keyboard_event_pressed::keycode#5 ] 200,002: zp[1]:164 [ keyboard_event_pressed::return#12 ] 162,858: zp[1]:195 [ keyboard_event_pressed::return#11 ] 20,002: zp[1]:199 [ keyboard_event_pressed::return#0 ] 20,002: zp[1]:201 [ keyboard_event_pressed::return#1 ] 20,002: zp[1]:203 [ keyboard_event_pressed::return#2 ] 20,002: zp[1]:205 [ keyboard_event_pressed::return#10 ] +Uplift Scope [keyboard_event_pressed] 2,000,002: zp[1]:194 [ keyboard_event_pressed::$0 ] 2,000,002: zp[1]:196 [ keyboard_event_pressed::$1 ] 1,000,001: zp[1]:195 [ keyboard_event_pressed::row_bits#0 ] 666,667.33: zp[1]:83 [ keyboard_event_pressed::keycode#5 ] 200,002: zp[1]:164 [ keyboard_event_pressed::return#12 ] 162,858: zp[1]:197 [ keyboard_event_pressed::return#11 ] 20,002: zp[1]:201 [ keyboard_event_pressed::return#0 ] 20,002: zp[1]:203 [ keyboard_event_pressed::return#1 ] 20,002: zp[1]:205 [ keyboard_event_pressed::return#2 ] 20,002: zp[1]:207 [ keyboard_event_pressed::return#10 ] Uplift Scope [render_screen_original] 709,868.6: zp[2]:107 [ 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 ] 692,864.07: zp[1]:111 [ 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 ] 494,507.15: zp[2]:109 [ 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 ] 161,085.12: zp[2]:103 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] 97,917.83: zp[2]:105 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] 15,834.92: zp[1]:102 [ render_screen_original::y#6 render_screen_original::y#1 ] Uplift Scope [play_move_down] 1,000,010: zp[1]:54 [ 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 ] 200,002: zp[1]:165 [ play_move_down::$2 ] 200,002: zp[1]:167 [ play_move_down::$12 ] 200,002: zp[1]:169 [ play_move_down::removed#0 ] 55,001: zp[1]:140 [ play_move_down::key_event#0 ] 20,002: zp[1]:141 [ play_move_down::return#0 ] 3,333.67: zp[1]:68 [ play_move_down::return#3 ] Uplift Scope [play_move_rotate] 444,448.89: zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] 200,002: zp[1]:149 [ play_move_rotate::$5 ] 200,002: zp[1]:151 [ play_move_rotate::$2 ] 200,002: zp[1]:152 [ play_move_rotate::$7 ] 105,001.5: zp[1]:146 [ play_move_rotate::key_event#0 ] 20,002: zp[1]:147 [ play_move_rotate::return#0 ] 3,333.67: zp[1]:41 [ play_move_rotate::return#2 ] @@ -16270,270 +16350,273 @@ Uplift Scope [play_move_leftright] 200,002: zp[1]:161 [ play_move_leftright::$4 Uplift Scope [render_bcd] 38,003.8: zp[2]:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] 24,015: zp[2]:7 [ 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 ] 20,002: zp[1]:126 [ render_bcd::$5 ] 20,002: zp[1]:127 [ render_bcd::$6 ] 20,002: zp[1]:128 [ render_bcd::$3 ] 20,002: zp[1]:129 [ render_bcd::$4 ] 13,261: zp[1]:12 [ 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 ] 10,001: zp[2]:9 [ render_bcd::offset#6 ] 5,000.5: zp[1]:11 [ render_bcd::only_low#6 ] Uplift Scope [play_movement] 32,003.5: zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] 20,002: zp[1]:144 [ play_movement::$3 ] 20,002: zp[1]:148 [ play_movement::$4 ] 4,000.4: zp[1]:145 [ play_movement::render#2 ] 2,818.55: zp[1]:123 [ play_movement::key_event#0 ] 2,002: zp[1]:124 [ play_movement::return#3 ] Uplift Scope [keyboard_event_get] 23,669.33: zp[1]:84 [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] 2,002: zp[1]:121 [ keyboard_event_get::return#3 ] -Uplift Scope [play_init] 3,003: zp[1]:213 [ play_init::$3 ] 2,502.5: zp[1]:94 [ play_init::b#2 play_init::b#1 ] 2,168.83: zp[1]:90 [ play_init::j#2 play_init::j#1 ] 2,002: zp[1]:212 [ play_init::$2 ] 1,267.93: zp[1]:93 [ play_init::idx#2 play_init::idx#1 ] 1,251.25: zp[2]:91 [ play_init::pli#2 play_init::pli#1 ] +Uplift Scope [play_init] 3,003: zp[1]:215 [ play_init::$3 ] 2,502.5: zp[1]:94 [ play_init::b#2 play_init::b#1 ] 2,168.83: zp[1]:90 [ play_init::j#2 play_init::j#1 ] 2,002: zp[1]:214 [ play_init::$2 ] 1,267.93: zp[1]:93 [ play_init::idx#2 play_init::idx#1 ] 1,251.25: zp[2]:91 [ play_init::pli#2 play_init::pli#1 ] Uplift Scope [render_show] 10,001: zp[1]:89 [ render_show::d018val#3 ] -Uplift Scope [render_init] 2,002: zp[1]:97 [ render_init::i#2 render_init::i#1 ] 1,501.5: zp[1]:215 [ render_init::$5 ] 1,267.93: zp[2]:100 [ render_init::li_2#2 render_init::li_2#1 ] 1,251.25: zp[2]:98 [ render_init::li_1#2 render_init::li_1#1 ] -Uplift Scope [sprites_init] 2,302.3: zp[1]:95 [ sprites_init::s#2 sprites_init::s#1 ] 2,002: zp[1]:214 [ sprites_init::s2#0 ] 1,418.08: zp[1]:96 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplift Scope [render_init] 2,002: zp[1]:97 [ render_init::i#2 render_init::i#1 ] 1,501.5: zp[1]:217 [ render_init::$5 ] 1,267.93: zp[2]:100 [ render_init::li_2#2 render_init::li_2#1 ] 1,251.25: zp[2]:98 [ render_init::li_1#2 render_init::li_1#1 ] +Uplift Scope [sprites_init] 2,302.3: zp[1]:95 [ sprites_init::s#2 sprites_init::s#1 ] 2,002: zp[1]:216 [ sprites_init::s2#0 ] 1,418.08: zp[1]:96 [ sprites_init::xpos#2 sprites_init::xpos#1 ] Uplift Scope [main] 2,002: zp[1]:125 [ main::render#1 ] 1,001: zp[1]:122 [ main::key_event#0 ] Uplift Scope [render_score] 375.38: zp[2]:5 [ render_score::screen#3 ] -Uplift Scope [sprites_irq] 6.5: zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] 4: zp[1]:217 [ sprites_irq::$0 ] 4: zp[1]:221 [ sprites_irq::ptr#4 ] 4: zp[1]:223 [ sprites_irq::ptr#2 ] 2.67: zp[1]:220 [ sprites_irq::ptr#3 ] 2.67: zp[1]:222 [ sprites_irq::ptr#1 ] 2.5: zp[1]:216 [ sprites_irq::ypos#0 ] 2.5: zp[1]:219 [ sprites_irq::ptr#0 ] +Uplift Scope [sprites_irq] 6.5: zp[1]:220 [ sprites_irq::raster_sprite_gfx_modify ] 4: zp[1]:219 [ sprites_irq::$0 ] 4: zp[1]:223 [ sprites_irq::ptr#4 ] 4: zp[1]:225 [ sprites_irq::ptr#2 ] 2.67: zp[1]:222 [ sprites_irq::ptr#3 ] 2.67: zp[1]:224 [ sprites_irq::ptr#1 ] 2.5: zp[1]:218 [ sprites_irq::ypos#0 ] 2.5: zp[1]:221 [ sprites_irq::ptr#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [sid_rnd_init] Uplift Scope [render_screen_swap] Uplift Scope [sprites_irq_init] -Uplifting [play_collision] best 4793737 combination zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] reg byte a [ play_collision::$5 ] zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp[1]:155 [ play_collision::$14 ] zp[1]:158 [ play_collision::i#1 ] zp[1]:47 [ 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[1]:48 [ play_collision::l#6 play_collision::l#1 ] zp[2]:156 [ play_collision::playfield_line#0 ] zp[2]:153 [ play_collision::piece_gfx#0 ] zp[1]:46 [ 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[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp[1]:173 [ play_collision::return#10 ] zp[1]:150 [ play_collision::return#14 ] zp[1]:160 [ play_collision::return#13 ] zp[1]:162 [ play_collision::return#1 ] zp[1]:166 [ play_collision::return#0 ] zp[1]:52 [ play_collision::return#15 ] +Uplifting [play_collision] best 4807753 combination zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] reg byte a [ play_collision::$5 ] zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] zp[1]:155 [ play_collision::$14 ] zp[1]:158 [ play_collision::i#1 ] zp[1]:47 [ 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[1]:48 [ play_collision::l#6 play_collision::l#1 ] zp[2]:156 [ play_collision::playfield_line#0 ] zp[2]:153 [ play_collision::piece_gfx#0 ] zp[1]:46 [ 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[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] zp[1]:173 [ play_collision::return#10 ] zp[1]:150 [ play_collision::return#14 ] zp[1]:160 [ play_collision::return#13 ] zp[1]:162 [ play_collision::return#1 ] zp[1]:166 [ play_collision::return#0 ] zp[1]:52 [ play_collision::return#15 ] Limited combination testing to 100 combinations of 429981696 possible. -Uplifting [play_lock_current] best 4699737 combination zp[1]:80 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp[1]:81 [ 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[1]:191 [ play_lock_current::i#1 ] reg byte a [ play_lock_current::$4 ] zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 ] zp[2]:189 [ play_lock_current::playfield_line#0 ] zp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplifting [play_lock_current] best 4713753 combination zp[1]:80 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] zp[1]:81 [ 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[1]:193 [ play_lock_current::i#1 ] reg byte a [ play_lock_current::$4 ] zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 ] zp[2]:191 [ play_lock_current::playfield_line#0 ] zp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Limited combination testing to 100 combinations of 2916 possible. -Uplifting [play_remove_lines] best 4560737 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 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 play_remove_lines::w#3 ] zp[1]:75 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp[1]:76 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp[1]:187 [ play_remove_lines::c#0 ] zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp[1]:168 [ play_remove_lines::return#0 ] +Uplifting [play_remove_lines] best 4574753 combination reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ] reg byte x [ play_remove_lines::w#6 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 play_remove_lines::w#3 ] zp[1]:75 [ play_remove_lines::x#2 play_remove_lines::x#1 ] zp[1]:76 [ play_remove_lines::full#4 play_remove_lines::full#2 ] zp[1]:189 [ play_remove_lines::c#0 ] zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] zp[1]:168 [ play_remove_lines::return#0 ] Limited combination testing to 100 combinations of 20736 possible. -Uplifting [play_increase_level] best 4546731 combination reg byte a [ play_increase_level::$5 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ] -Uplifting [] best 4546598 combination zp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] zp[1]:88 [ 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[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#122 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] zp[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#6 current_ypos#19 ] zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#52 game_over#15 ] zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp[2]:61 [ current_piece#28 current_piece#10 current_piece#100 current_piece#15 current_piece#92 ] zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp[4]:113 [ score_bcd ] reg byte x [ render_screen_render#22 render_screen_render#63 ] zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] zp[1]:15 [ render_screen_render#15 render_screen_render#65 ] zp[1]:23 [ current_ypos#13 current_ypos#97 current_ypos#98 ] zp[1]:112 [ render_screen_showing ] zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] zp[1]:16 [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] zp[1]:118 [ irq_sprite_ypos ] zp[1]:120 [ irq_cnt ] zp[1]:119 [ irq_sprite_ptr ] zp[1]:117 [ irq_raster_next ] +Uplifting [play_increase_level] best 4560747 combination reg byte a [ play_increase_level::$5 ] reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ] reg byte a [ play_increase_level::$1 ] +Uplifting [sid_rnd] best 4551744 combination reg byte a [ sid_rnd::return#0 ] reg byte a [ sid_rnd::return#2 ] +Uplifting [] best 4551611 combination zp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] zp[1]:88 [ 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[2]:65 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#121 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#115 ] zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] zp[2]:43 [ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 ] zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] zp[2]:56 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#6 current_ypos#19 ] zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#52 game_over#15 ] zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] zp[2]:61 [ current_piece#28 current_piece#10 current_piece#99 current_piece#15 current_piece#91 ] zp[1]:28 [ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#110 current_piece_gfx#111 ] zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] zp[4]:113 [ score_bcd ] reg byte x [ render_screen_render#22 render_screen_render#63 ] zp[1]:25 [ current_xpos#59 current_xpos#117 current_xpos#118 ] zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] zp[1]:15 [ render_screen_render#15 render_screen_render#65 ] zp[1]:23 [ current_ypos#13 current_ypos#96 current_ypos#97 ] zp[1]:112 [ render_screen_showing ] zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] zp[1]:16 [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] zp[1]:118 [ irq_sprite_ypos ] zp[1]:120 [ irq_cnt ] zp[1]:119 [ irq_sprite_ptr ] zp[1]:117 [ irq_raster_next ] Limited combination testing to 100 combinations of 1944 possible. -Uplifting [play_spawn_current] best 4540579 combination reg byte a [ play_spawn_current::sid_rnd1_return#0 ] reg byte a [ play_spawn_current::$1 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp[1]:172 [ play_spawn_current::$7 ] -Uplifting [keyboard_event_scan] best 4300579 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp[1]:86 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp[1]:87 [ 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[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp[1]:198 [ keyboard_event_scan::row_scan#0 ] zp[1]:200 [ keyboard_event_scan::$0 ] zp[1]:202 [ keyboard_event_scan::$3 ] zp[1]:204 [ keyboard_event_scan::$6 ] zp[1]:206 [ keyboard_event_scan::$9 ] +Uplifting [play_spawn_current] best 4545592 combination reg byte a [ play_spawn_current::$5 ] reg byte a [ play_spawn_current::$1 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] zp[1]:172 [ play_spawn_current::$7 ] +Uplifting [keyboard_event_scan] best 4305592 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] reg byte a [ keyboard_event_scan::event_type#0 ] reg byte a [ keyboard_event_scan::$23 ] zp[1]:86 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp[1]:87 [ 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[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp[1]:200 [ keyboard_event_scan::row_scan#0 ] zp[1]:202 [ keyboard_event_scan::$0 ] zp[1]:204 [ keyboard_event_scan::$3 ] zp[1]:206 [ keyboard_event_scan::$6 ] zp[1]:208 [ keyboard_event_scan::$9 ] Limited combination testing to 100 combinations of 524288 possible. -Uplifting [keyboard_matrix_read] best 4288573 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] -Uplifting [play_update_score] best 4288551 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$9 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::lines_after#0 ] zp[4]:179 [ play_update_score::add_bcd#0 ] zp[1]:170 [ play_update_score::removed#0 ] zp[1]:177 [ play_update_score::lines_before#0 ] +Uplifting [keyboard_matrix_read] best 4293586 combination reg byte x [ keyboard_matrix_read::rowid#0 ] reg byte a [ keyboard_matrix_read::return#0 ] reg byte a [ keyboard_matrix_read::return#2 ] +Uplifting [play_update_score] best 4293564 combination reg byte a [ play_update_score::$2 ] reg byte a [ play_update_score::$9 ] reg byte a [ play_update_score::$4 ] reg byte a [ play_update_score::lines_after#0 ] zp[4]:181 [ play_update_score::add_bcd#0 ] zp[1]:170 [ play_update_score::removed#0 ] zp[1]:179 [ play_update_score::lines_before#0 ] Limited combination testing to 100 combinations of 2304 possible. -Uplifting [render_moving] best 4273551 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp[1]:133 [ render_moving::$1 ] zp[1]:134 [ render_moving::$6 ] zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] zp[2]:135 [ render_moving::screen_line#0 ] zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] +Uplifting [render_moving] best 4278564 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] reg byte a [ render_moving::current_cell#0 ] zp[1]:133 [ render_moving::$1 ] zp[1]:134 [ render_moving::$6 ] zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] zp[2]:135 [ render_moving::screen_line#0 ] zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Limited combination testing to 100 combinations of 15552 possible. -Uplifting [render_next] best 4258547 combination zp[2]:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp[2]:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 ] reg byte a [ render_next::cell#0 ] zp[1]:17 [ render_next::l#7 render_next::l#1 ] zp[1]:131 [ render_next::next_piece_char#0 ] reg byte x [ render_next::$6 ] +Uplifting [render_next] best 4263560 combination zp[2]:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 ] reg byte x [ render_next::c#2 render_next::c#1 ] zp[2]:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 ] reg byte a [ render_next::cell#0 ] zp[1]:17 [ render_next::l#7 render_next::l#1 ] zp[1]:131 [ render_next::next_piece_char#0 ] reg byte x [ render_next::$6 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [render_playfield] best 4257547 combination zp[2]:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$0 ] reg byte a [ render_playfield::$3 ] zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] +Uplifting [render_playfield] best 4262560 combination zp[2]:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] reg byte a [ render_playfield::$0 ] reg byte a [ render_playfield::$3 ] zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] Limited combination testing to 100 combinations of 128 possible. -Uplifting [keyboard_event_pressed] best 4257518 combination reg byte y [ keyboard_event_pressed::$0 ] reg byte x [ keyboard_event_pressed::$1 ] reg byte y [ keyboard_event_pressed::row_bits#0 ] reg byte x [ keyboard_event_pressed::keycode#5 ] zp[1]:164 [ keyboard_event_pressed::return#12 ] zp[1]:195 [ keyboard_event_pressed::return#11 ] zp[1]:199 [ keyboard_event_pressed::return#0 ] zp[1]:201 [ keyboard_event_pressed::return#1 ] zp[1]:203 [ keyboard_event_pressed::return#2 ] zp[1]:205 [ keyboard_event_pressed::return#10 ] +Uplifting [keyboard_event_pressed] best 4262531 combination reg byte y [ keyboard_event_pressed::$0 ] reg byte x [ keyboard_event_pressed::$1 ] reg byte y [ keyboard_event_pressed::row_bits#0 ] reg byte x [ keyboard_event_pressed::keycode#5 ] zp[1]:164 [ keyboard_event_pressed::return#12 ] zp[1]:197 [ keyboard_event_pressed::return#11 ] zp[1]:201 [ keyboard_event_pressed::return#0 ] zp[1]:203 [ keyboard_event_pressed::return#1 ] zp[1]:205 [ keyboard_event_pressed::return#2 ] zp[1]:207 [ keyboard_event_pressed::return#10 ] Limited combination testing to 100 combinations of 589824 possible. -Uplifting [render_screen_original] best 4255418 combination zp[2]:107 [ 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 ] 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[2]:109 [ 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[2]:103 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp[2]:105 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp[1]:102 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplifting [play_move_down] best 4255400 combination zp[1]:54 [ 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 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] reg byte a [ play_move_down::removed#0 ] zp[1]:140 [ play_move_down::key_event#0 ] zp[1]:141 [ play_move_down::return#0 ] zp[1]:68 [ play_move_down::return#3 ] +Uplifting [render_screen_original] best 4260431 combination zp[2]:107 [ 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 ] 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[2]:109 [ 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[2]:103 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] zp[2]:105 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] zp[1]:102 [ render_screen_original::y#6 render_screen_original::y#1 ] +Uplifting [play_move_down] best 4260413 combination zp[1]:54 [ 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 ] reg byte a [ play_move_down::$2 ] reg byte a [ play_move_down::$12 ] reg byte a [ play_move_down::removed#0 ] zp[1]:140 [ play_move_down::key_event#0 ] zp[1]:141 [ play_move_down::return#0 ] zp[1]:68 [ play_move_down::return#3 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [play_move_rotate] best 4255384 combination zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] reg byte a [ play_move_rotate::$7 ] zp[1]:146 [ play_move_rotate::key_event#0 ] zp[1]:147 [ play_move_rotate::return#0 ] zp[1]:41 [ play_move_rotate::return#2 ] +Uplifting [play_move_rotate] best 4260397 combination zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] reg byte x [ play_move_rotate::$5 ] reg byte a [ play_move_rotate::$2 ] reg byte a [ play_move_rotate::$7 ] zp[1]:146 [ play_move_rotate::key_event#0 ] zp[1]:147 [ play_move_rotate::return#0 ] zp[1]:41 [ play_move_rotate::return#2 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [play_move_leftright] best 4255357 combination reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] reg byte a [ play_move_leftright::return#0 ] zp[1]:53 [ play_move_leftright::return#2 ] +Uplifting [play_move_leftright] best 4260370 combination reg byte a [ play_move_leftright::$4 ] reg byte a [ play_move_leftright::$8 ] reg byte a [ play_move_leftright::key_event#0 ] reg byte a [ play_move_leftright::return#0 ] zp[1]:53 [ play_move_leftright::return#2 ] Limited combination testing to 100 combinations of 1024 possible. -Uplifting [render_bcd] best 4255337 combination zp[2]:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] zp[2]:7 [ 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 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] reg byte a [ render_bcd::$4 ] zp[1]:12 [ 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 ] zp[2]:9 [ render_bcd::offset#6 ] zp[1]:11 [ render_bcd::only_low#6 ] +Uplifting [render_bcd] best 4260350 combination zp[2]:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] zp[2]:7 [ 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 ] reg byte a [ render_bcd::$5 ] reg byte a [ render_bcd::$6 ] reg byte a [ render_bcd::$3 ] reg byte a [ render_bcd::$4 ] zp[1]:12 [ 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 ] zp[2]:9 [ render_bcd::offset#6 ] zp[1]:11 [ render_bcd::only_low#6 ] Limited combination testing to 100 combinations of 1536 possible. -Uplifting [play_movement] best 4255325 combination zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp[1]:145 [ play_movement::render#2 ] zp[1]:123 [ play_movement::key_event#0 ] zp[1]:124 [ play_movement::return#3 ] +Uplifting [play_movement] best 4260338 combination zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] reg byte a [ play_movement::$3 ] reg byte a [ play_movement::$4 ] zp[1]:145 [ play_movement::render#2 ] zp[1]:123 [ play_movement::key_event#0 ] zp[1]:124 [ play_movement::return#3 ] Limited combination testing to 100 combinations of 576 possible. -Uplifting [keyboard_event_get] best 4254419 combination reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] reg byte a [ keyboard_event_get::return#3 ] -Uplifting [play_init] best 4254209 combination reg byte a [ play_init::$3 ] zp[1]:94 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$2 ] zp[1]:93 [ play_init::idx#2 play_init::idx#1 ] zp[2]:91 [ play_init::pli#2 play_init::pli#1 ] +Uplifting [keyboard_event_get] best 4259432 combination reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] reg byte a [ keyboard_event_get::return#3 ] +Uplifting [play_init] best 4259222 combination reg byte a [ play_init::$3 ] zp[1]:94 [ play_init::b#2 play_init::b#1 ] reg byte y [ play_init::j#2 play_init::j#1 ] reg byte x [ play_init::$2 ] zp[1]:93 [ play_init::idx#2 play_init::idx#1 ] zp[2]:91 [ play_init::pli#2 play_init::pli#1 ] Limited combination testing to 100 combinations of 432 possible. -Uplifting [render_show] best 4254200 combination reg byte a [ render_show::d018val#3 ] -Uplifting [render_init] best 4254030 combination reg byte y [ render_init::i#2 render_init::i#1 ] reg byte x [ render_init::$5 ] zp[2]:100 [ render_init::li_2#2 render_init::li_2#1 ] zp[2]:98 [ render_init::li_1#2 render_init::li_1#1 ] -Uplifting [sprites_init] best 4253860 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp[1]:96 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [main] best 4252860 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ] -Uplifting [render_score] best 4252860 combination zp[2]:5 [ render_score::screen#3 ] -Uplifting [sprites_irq] best 4252836 combination zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp[1]:222 [ sprites_irq::ptr#1 ] zp[1]:216 [ sprites_irq::ypos#0 ] zp[1]:219 [ sprites_irq::ptr#0 ] +Uplifting [render_show] best 4259213 combination reg byte a [ render_show::d018val#3 ] +Uplifting [render_init] best 4259043 combination reg byte y [ render_init::i#2 render_init::i#1 ] reg byte x [ render_init::$5 ] zp[2]:100 [ render_init::li_2#2 render_init::li_2#1 ] zp[2]:98 [ render_init::li_1#2 render_init::li_1#1 ] +Uplifting [sprites_init] best 4258873 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp[1]:96 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [main] best 4257873 combination reg byte a [ main::render#1 ] reg byte x [ main::key_event#0 ] +Uplifting [render_score] best 4257873 combination zp[2]:5 [ render_score::screen#3 ] +Uplifting [sprites_irq] best 4257849 combination zp[1]:220 [ sprites_irq::raster_sprite_gfx_modify ] reg byte x [ sprites_irq::$0 ] reg byte a [ sprites_irq::ptr#4 ] reg byte a [ sprites_irq::ptr#2 ] reg byte a [ sprites_irq::ptr#3 ] zp[1]:224 [ sprites_irq::ptr#1 ] zp[1]:218 [ sprites_irq::ypos#0 ] zp[1]:221 [ sprites_irq::ptr#0 ] Limited combination testing to 100 combinations of 12288 possible. -Uplifting [MOS6526_CIA] best 4252836 combination -Uplifting [sid_rnd_init] best 4252836 combination -Uplifting [render_screen_swap] best 4252836 combination -Uplifting [sprites_irq_init] best 4252836 combination +Uplifting [MOS6526_CIA] best 4257849 combination +Uplifting [MOS6581_SID] best 4257849 combination +Uplifting [sid_rnd_init] best 4257849 combination +Uplifting [render_screen_swap] best 4257849 combination +Uplifting [sprites_irq_init] best 4257849 combination Attempting to uplift remaining variables inzp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] -Uplifting [play_collision] best 4252836 combination zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] +Uplifting [play_collision] best 4257849 combination zp[1]:49 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] Attempting to uplift remaining variables inzp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] -Uplifting [play_collision] best 4252836 combination zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] +Uplifting [play_collision] best 4257849 combination zp[1]:50 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] Attempting to uplift remaining variables inzp[1]:80 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] -Uplifting [play_lock_current] best 4252836 combination zp[1]:80 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] +Uplifting [play_lock_current] best 4257849 combination zp[1]:80 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ] Attempting to uplift remaining variables inzp[1]:155 [ play_collision::$14 ] -Uplifting [play_collision] best 4248836 combination reg byte a [ play_collision::$14 ] +Uplifting [play_collision] best 4253849 combination reg byte a [ play_collision::$14 ] Attempting to uplift remaining variables inzp[1]:75 [ play_remove_lines::x#2 play_remove_lines::x#1 ] -Uplifting [play_remove_lines] best 4248836 combination zp[1]:75 [ play_remove_lines::x#2 play_remove_lines::x#1 ] +Uplifting [play_remove_lines] best 4253849 combination zp[1]:75 [ play_remove_lines::x#2 play_remove_lines::x#1 ] Attempting to uplift remaining variables inzp[1]:158 [ play_collision::i#1 ] -Uplifting [play_collision] best 4248836 combination zp[1]:158 [ play_collision::i#1 ] +Uplifting [play_collision] best 4253849 combination zp[1]:158 [ play_collision::i#1 ] Attempting to uplift remaining variables inzp[1]:81 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] -Uplifting [play_lock_current] best 4248836 combination zp[1]:81 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] +Uplifting [play_lock_current] best 4253849 combination zp[1]:81 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] Attempting to uplift remaining variables inzp[1]:47 [ 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 ] -Uplifting [play_collision] best 4248836 combination zp[1]:47 [ 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 ] +Uplifting [play_collision] best 4253849 combination zp[1]:47 [ 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 ] Attempting to uplift remaining variables inzp[1]:48 [ play_collision::l#6 play_collision::l#1 ] -Uplifting [play_collision] best 4248836 combination zp[1]:48 [ play_collision::l#6 play_collision::l#1 ] +Uplifting [play_collision] best 4253849 combination zp[1]:48 [ play_collision::l#6 play_collision::l#1 ] Attempting to uplift remaining variables inzp[1]:76 [ play_remove_lines::full#4 play_remove_lines::full#2 ] -Uplifting [play_remove_lines] best 4248836 combination zp[1]:76 [ play_remove_lines::full#4 play_remove_lines::full#2 ] -Attempting to uplift remaining variables inzp[1]:187 [ play_remove_lines::c#0 ] -Uplifting [play_remove_lines] best 4248836 combination zp[1]:187 [ play_remove_lines::c#0 ] +Uplifting [play_remove_lines] best 4253849 combination zp[1]:76 [ play_remove_lines::full#4 play_remove_lines::full#2 ] +Attempting to uplift remaining variables inzp[1]:189 [ play_remove_lines::c#0 ] +Uplifting [play_remove_lines] best 4253849 combination zp[1]:189 [ play_remove_lines::c#0 ] Attempting to uplift remaining variables inzp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] -Uplifting [play_remove_lines] best 4248836 combination zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] -Attempting to uplift remaining variables inzp[1]:191 [ play_lock_current::i#1 ] -Uplifting [play_lock_current] best 4248836 combination zp[1]:191 [ play_lock_current::i#1 ] +Uplifting [play_remove_lines] best 4253849 combination zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] +Attempting to uplift remaining variables inzp[1]:193 [ play_lock_current::i#1 ] +Uplifting [play_lock_current] best 4253849 combination zp[1]:193 [ play_lock_current::i#1 ] Attempting to uplift remaining variables inzp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] -Uplifting [] best 4248836 combination zp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] +Uplifting [] best 4253849 combination zp[1]:69 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] Attempting to uplift remaining variables inzp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] -Uplifting [play_remove_lines] best 4248836 combination zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] +Uplifting [play_remove_lines] best 4253849 combination zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] Attempting to uplift remaining variables inzp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 ] -Uplifting [play_lock_current] best 4248836 combination zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 ] +Uplifting [play_lock_current] best 4253849 combination zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 ] Attempting to uplift remaining variables inzp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] -Uplifting [play_lock_current] best 4248836 combination zp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] +Uplifting [play_lock_current] best 4253849 combination zp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Attempting to uplift remaining variables inzp[1]:88 [ 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 ] -Uplifting [] best 4248836 combination zp[1]:88 [ 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 ] +Uplifting [] best 4253849 combination zp[1]:88 [ 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 ] Attempting to uplift remaining variables inzp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] -Uplifting [play_collision] best 4248836 combination zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] +Uplifting [play_collision] best 4253849 combination zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] Attempting to uplift remaining variables inzp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] -Uplifting [] best 4248836 combination zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] +Uplifting [] best 4253849 combination zp[1]:63 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] Attempting to uplift remaining variables inzp[1]:86 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] -Uplifting [keyboard_event_scan] best 4098836 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] +Uplifting [keyboard_event_scan] best 4103849 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] Attempting to uplift remaining variables inzp[1]:87 [ 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 ] -Uplifting [keyboard_event_scan] best 4098836 combination zp[1]:87 [ 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 ] +Uplifting [keyboard_event_scan] best 4103849 combination zp[1]:87 [ 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 ] Attempting to uplift remaining variables inzp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -Uplifting [] best 4098836 combination zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] +Uplifting [] best 4103849 combination zp[1]:60 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] Attempting to uplift remaining variables inzp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] -Uplifting [] best 4098836 combination zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] +Uplifting [] best 4103849 combination zp[1]:59 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] Attempting to uplift remaining variables inzp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] -Uplifting [keyboard_event_scan] best 4098836 combination zp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] +Uplifting [keyboard_event_scan] best 4103849 combination zp[1]:85 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] Attempting to uplift remaining variables inzp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] -Uplifting [] best 4098836 combination zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] -Attempting to uplift remaining variables inzp[1]:198 [ keyboard_event_scan::row_scan#0 ] -Uplifting [keyboard_event_scan] best 4098836 combination zp[1]:198 [ keyboard_event_scan::row_scan#0 ] +Uplifting [] best 4103849 combination zp[1]:67 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] +Attempting to uplift remaining variables inzp[1]:200 [ keyboard_event_scan::row_scan#0 ] +Uplifting [keyboard_event_scan] best 4103849 combination zp[1]:200 [ keyboard_event_scan::row_scan#0 ] Attempting to uplift remaining variables inzp[1]:45 [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] -Uplifting [play_collision] best 4098820 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] +Uplifting [play_collision] best 4103833 combination reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] Attempting to uplift remaining variables inzp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] -Uplifting [] best 4098820 combination zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] +Uplifting [] best 4103833 combination zp[1]:58 [ level#33 level#10 level#17 level#19 level#21 ] Attempting to uplift remaining variables inzp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] -Uplifting [render_moving] best 4098820 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] +Uplifting [render_moving] best 4103833 combination zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] Attempting to uplift remaining variables inzp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] -Uplifting [render_playfield] best 4098820 combination zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] +Uplifting [render_playfield] best 4103833 combination zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] Attempting to uplift remaining variables inzp[1]:173 [ play_collision::return#10 ] -Uplifting [play_collision] best 4098814 combination reg byte a [ play_collision::return#10 ] +Uplifting [play_collision] best 4103827 combination reg byte a [ play_collision::return#10 ] Attempting to uplift remaining variables inzp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] -Uplifting [render_playfield] best 4098814 combination zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] +Uplifting [render_playfield] best 4103827 combination zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] Attempting to uplift remaining variables inzp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] -Uplifting [render_moving] best 4098814 combination zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] +Uplifting [render_moving] best 4103827 combination zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] Attempting to uplift remaining variables inzp[1]:54 [ 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 ] -Uplifting [play_move_down] best 4098814 combination zp[1]:54 [ 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 ] +Uplifting [play_move_down] best 4103827 combination zp[1]:54 [ 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 ] Attempting to uplift remaining variables inzp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#6 current_ypos#19 ] -Uplifting [] best 4098814 combination zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#6 current_ypos#19 ] +Uplifting [] best 4103827 combination zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#6 current_ypos#19 ] Attempting to uplift remaining variables inzp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] -Uplifting [play_move_rotate] best 4098814 combination zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] +Uplifting [play_move_rotate] best 4103827 combination zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] Attempting to uplift remaining variables inzp[1]:170 [ play_update_score::removed#0 ] -Uplifting [play_update_score] best 4098808 combination reg byte x [ play_update_score::removed#0 ] +Uplifting [play_update_score] best 4103821 combination reg byte x [ play_update_score::removed#0 ] Attempting to uplift remaining variables inzp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#52 game_over#15 ] -Uplifting [] best 4098808 combination zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#52 game_over#15 ] +Uplifting [] best 4103821 combination zp[1]:70 [ game_over#65 game_over#27 game_over#10 game_over#52 game_over#15 ] Attempting to uplift remaining variables inzp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -Uplifting [] best 4098808 combination zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -Attempting to uplift remaining variables inzp[1]:177 [ play_update_score::lines_before#0 ] -Uplifting [play_update_score] best 4098808 combination zp[1]:177 [ play_update_score::lines_before#0 ] +Uplifting [] best 4103821 combination zp[1]:64 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] +Attempting to uplift remaining variables inzp[1]:179 [ play_update_score::lines_before#0 ] +Uplifting [play_update_score] best 4103821 combination zp[1]:179 [ play_update_score::lines_before#0 ] Attempting to uplift remaining variables inzp[1]:133 [ render_moving::$1 ] -Uplifting [render_moving] best 4098208 combination reg byte a [ render_moving::$1 ] +Uplifting [render_moving] best 4103221 combination reg byte a [ render_moving::$1 ] Attempting to uplift remaining variables inzp[1]:134 [ render_moving::$6 ] -Uplifting [render_moving] best 4097808 combination reg byte a [ render_moving::$6 ] +Uplifting [render_moving] best 4102821 combination reg byte a [ render_moving::$6 ] Attempting to uplift remaining variables inzp[1]:150 [ play_collision::return#14 ] -Uplifting [play_collision] best 4097802 combination reg byte a [ play_collision::return#14 ] +Uplifting [play_collision] best 4102815 combination reg byte a [ play_collision::return#14 ] Attempting to uplift remaining variables inzp[1]:160 [ play_collision::return#13 ] -Uplifting [play_collision] best 4097796 combination reg byte a [ play_collision::return#13 ] +Uplifting [play_collision] best 4102809 combination reg byte a [ play_collision::return#13 ] Attempting to uplift remaining variables inzp[1]:162 [ play_collision::return#1 ] -Uplifting [play_collision] best 4097790 combination reg byte a [ play_collision::return#1 ] +Uplifting [play_collision] best 4102803 combination reg byte a [ play_collision::return#1 ] Attempting to uplift remaining variables inzp[1]:164 [ keyboard_event_pressed::return#12 ] -Uplifting [keyboard_event_pressed] best 4097784 combination reg byte a [ keyboard_event_pressed::return#12 ] +Uplifting [keyboard_event_pressed] best 4102797 combination reg byte a [ keyboard_event_pressed::return#12 ] Attempting to uplift remaining variables inzp[1]:166 [ play_collision::return#0 ] -Uplifting [play_collision] best 4097778 combination reg byte a [ play_collision::return#0 ] +Uplifting [play_collision] best 4102791 combination reg byte a [ play_collision::return#0 ] Attempting to uplift remaining variables inzp[1]:168 [ play_remove_lines::return#0 ] -Uplifting [play_remove_lines] best 4097772 combination reg byte a [ play_remove_lines::return#0 ] +Uplifting [play_remove_lines] best 4102785 combination reg byte a [ play_remove_lines::return#0 ] Attempting to uplift remaining variables inzp[1]:52 [ play_collision::return#15 ] -Uplifting [play_collision] best 4097742 combination reg byte a [ play_collision::return#15 ] +Uplifting [play_collision] best 4102755 combination reg byte a [ play_collision::return#15 ] Attempting to uplift remaining variables inzp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] -Uplifting [render_playfield] best 4097742 combination zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] +Uplifting [render_playfield] best 4102755 combination zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 ] Attempting to uplift remaining variables inzp[1]:17 [ render_next::l#7 render_next::l#1 ] -Uplifting [render_next] best 4097742 combination zp[1]:17 [ render_next::l#7 render_next::l#1 ] -Attempting to uplift remaining variables inzp[1]:195 [ keyboard_event_pressed::return#11 ] -Uplifting [keyboard_event_pressed] best 4097724 combination reg byte a [ keyboard_event_pressed::return#11 ] +Uplifting [render_next] best 4102755 combination zp[1]:17 [ render_next::l#7 render_next::l#1 ] +Attempting to uplift remaining variables inzp[1]:197 [ keyboard_event_pressed::return#11 ] +Uplifting [keyboard_event_pressed] best 4102737 combination reg byte a [ keyboard_event_pressed::return#11 ] Attempting to uplift remaining variables inzp[1]:30 [ render_moving::l#4 render_moving::l#1 ] -Uplifting [render_moving] best 4097724 combination zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] +Uplifting [render_moving] best 4102737 combination zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] Attempting to uplift remaining variables inzp[1]:146 [ play_move_rotate::key_event#0 ] -Uplifting [play_move_rotate] best 4097715 combination reg byte a [ play_move_rotate::key_event#0 ] +Uplifting [play_move_rotate] best 4102728 combination reg byte a [ play_move_rotate::key_event#0 ] Attempting to uplift remaining variables inzp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] -Uplifting [render_moving] best 4097715 combination zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] +Uplifting [render_moving] best 4102728 combination zp[1]:29 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Attempting to uplift remaining variables inzp[1]:131 [ render_next::next_piece_char#0 ] -Uplifting [render_next] best 4097715 combination zp[1]:131 [ render_next::next_piece_char#0 ] +Uplifting [render_next] best 4102728 combination zp[1]:131 [ render_next::next_piece_char#0 ] Attempting to uplift remaining variables inzp[1]:140 [ play_move_down::key_event#0 ] -Uplifting [play_move_down] best 4097709 combination reg byte a [ play_move_down::key_event#0 ] -Attempting to uplift remaining variables inzp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] -Uplifting [] best 4097709 combination zp[1]:28 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] +Uplifting [play_move_down] best 4102722 combination reg byte a [ play_move_down::key_event#0 ] +Attempting to uplift remaining variables inzp[1]:28 [ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] +Uplifting [] best 4102722 combination zp[1]:28 [ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] Attempting to uplift remaining variables inzp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] -Uplifting [] best 4097709 combination zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] -Attempting to uplift remaining variables inzp[1]:172 [ play_spawn_current::$7 ] -Uplifting [play_spawn_current] best 4097709 combination zp[1]:172 [ play_spawn_current::$7 ] +Uplifting [] best 4102722 combination zp[1]:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ] Attempting to uplift remaining variables inzp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] -Uplifting [play_movement] best 4097709 combination zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] +Uplifting [play_movement] best 4102722 combination zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] +Attempting to uplift remaining variables inzp[1]:172 [ play_spawn_current::$7 ] +Uplifting [play_spawn_current] best 4102722 combination zp[1]:172 [ play_spawn_current::$7 ] Attempting to uplift remaining variables inzp[1]:141 [ play_move_down::return#0 ] -Uplifting [play_move_down] best 4097703 combination reg byte a [ play_move_down::return#0 ] +Uplifting [play_move_down] best 4102716 combination reg byte a [ play_move_down::return#0 ] Attempting to uplift remaining variables inzp[1]:147 [ play_move_rotate::return#0 ] -Uplifting [play_move_rotate] best 4097697 combination reg byte a [ play_move_rotate::return#0 ] -Attempting to uplift remaining variables inzp[1]:199 [ keyboard_event_pressed::return#0 ] -Uplifting [keyboard_event_pressed] best 4097691 combination reg byte a [ keyboard_event_pressed::return#0 ] -Attempting to uplift remaining variables inzp[1]:200 [ keyboard_event_scan::$0 ] -Uplifting [keyboard_event_scan] best 4097685 combination reg byte a [ keyboard_event_scan::$0 ] -Attempting to uplift remaining variables inzp[1]:201 [ keyboard_event_pressed::return#1 ] -Uplifting [keyboard_event_pressed] best 4097679 combination reg byte a [ keyboard_event_pressed::return#1 ] -Attempting to uplift remaining variables inzp[1]:202 [ keyboard_event_scan::$3 ] -Uplifting [keyboard_event_scan] best 4097673 combination reg byte a [ keyboard_event_scan::$3 ] -Attempting to uplift remaining variables inzp[1]:203 [ keyboard_event_pressed::return#2 ] -Uplifting [keyboard_event_pressed] best 4097667 combination reg byte a [ keyboard_event_pressed::return#2 ] -Attempting to uplift remaining variables inzp[1]:204 [ keyboard_event_scan::$6 ] -Uplifting [keyboard_event_scan] best 4097661 combination reg byte a [ keyboard_event_scan::$6 ] -Attempting to uplift remaining variables inzp[1]:205 [ keyboard_event_pressed::return#10 ] -Uplifting [keyboard_event_pressed] best 4097655 combination reg byte a [ keyboard_event_pressed::return#10 ] -Attempting to uplift remaining variables inzp[1]:206 [ keyboard_event_scan::$9 ] -Uplifting [keyboard_event_scan] best 4097649 combination reg byte a [ keyboard_event_scan::$9 ] +Uplifting [play_move_rotate] best 4102710 combination reg byte a [ play_move_rotate::return#0 ] +Attempting to uplift remaining variables inzp[1]:201 [ keyboard_event_pressed::return#0 ] +Uplifting [keyboard_event_pressed] best 4102704 combination reg byte a [ keyboard_event_pressed::return#0 ] +Attempting to uplift remaining variables inzp[1]:202 [ keyboard_event_scan::$0 ] +Uplifting [keyboard_event_scan] best 4102698 combination reg byte a [ keyboard_event_scan::$0 ] +Attempting to uplift remaining variables inzp[1]:203 [ keyboard_event_pressed::return#1 ] +Uplifting [keyboard_event_pressed] best 4102692 combination reg byte a [ keyboard_event_pressed::return#1 ] +Attempting to uplift remaining variables inzp[1]:204 [ keyboard_event_scan::$3 ] +Uplifting [keyboard_event_scan] best 4102686 combination reg byte a [ keyboard_event_scan::$3 ] +Attempting to uplift remaining variables inzp[1]:205 [ keyboard_event_pressed::return#2 ] +Uplifting [keyboard_event_pressed] best 4102680 combination reg byte a [ keyboard_event_pressed::return#2 ] +Attempting to uplift remaining variables inzp[1]:206 [ keyboard_event_scan::$6 ] +Uplifting [keyboard_event_scan] best 4102674 combination reg byte a [ keyboard_event_scan::$6 ] +Attempting to uplift remaining variables inzp[1]:207 [ keyboard_event_pressed::return#10 ] +Uplifting [keyboard_event_pressed] best 4102668 combination reg byte a [ keyboard_event_pressed::return#10 ] +Attempting to uplift remaining variables inzp[1]:208 [ keyboard_event_scan::$9 ] +Uplifting [keyboard_event_scan] best 4102662 combination reg byte a [ keyboard_event_scan::$9 ] Attempting to uplift remaining variables inzp[1]:102 [ render_screen_original::y#6 render_screen_original::y#1 ] -Uplifting [render_screen_original] best 4097649 combination zp[1]:102 [ render_screen_original::y#6 render_screen_original::y#1 ] +Uplifting [render_screen_original] best 4102662 combination zp[1]:102 [ render_screen_original::y#6 render_screen_original::y#1 ] Attempting to uplift remaining variables inzp[1]:12 [ 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 ] -Uplifting [render_bcd] best 4097629 combination 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 ] +Uplifting [render_bcd] best 4102642 combination 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 ] Attempting to uplift remaining variables inzp[1]:11 [ render_bcd::only_low#6 ] -Uplifting [render_bcd] best 4097608 combination reg byte y [ render_bcd::only_low#6 ] -Attempting to uplift remaining variables inzp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] -Uplifting [] best 4097608 combination zp[1]:25 [ current_xpos#59 current_xpos#118 current_xpos#119 ] +Uplifting [render_bcd] best 4102621 combination reg byte y [ render_bcd::only_low#6 ] +Attempting to uplift remaining variables inzp[1]:25 [ current_xpos#59 current_xpos#117 current_xpos#118 ] +Uplifting [] best 4102621 combination zp[1]:25 [ current_xpos#59 current_xpos#117 current_xpos#118 ] Attempting to uplift remaining variables inzp[1]:24 [ render_screen_render#33 render_screen_render#64 ] -Uplifting [] best 4097608 combination zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] +Uplifting [] best 4102621 combination zp[1]:24 [ render_screen_render#33 render_screen_render#64 ] Attempting to uplift remaining variables inzp[1]:145 [ play_movement::render#2 ] -Uplifting [play_movement] best 4097608 combination zp[1]:145 [ play_movement::render#2 ] +Uplifting [play_movement] best 4102621 combination zp[1]:145 [ play_movement::render#2 ] Attempting to uplift remaining variables inzp[1]:41 [ play_move_rotate::return#2 ] -Uplifting [play_move_rotate] best 4097599 combination reg byte a [ play_move_rotate::return#2 ] +Uplifting [play_move_rotate] best 4102612 combination reg byte a [ play_move_rotate::return#2 ] Attempting to uplift remaining variables inzp[1]:53 [ play_move_leftright::return#2 ] -Uplifting [play_move_leftright] best 4097590 combination reg byte a [ play_move_leftright::return#2 ] +Uplifting [play_move_leftright] best 4102603 combination reg byte a [ play_move_leftright::return#2 ] Attempting to uplift remaining variables inzp[1]:68 [ play_move_down::return#3 ] -Uplifting [play_move_down] best 4097583 combination reg byte x [ play_move_down::return#3 ] +Uplifting [play_move_down] best 4102596 combination reg byte x [ play_move_down::return#3 ] Attempting to uplift remaining variables inzp[1]:123 [ play_movement::key_event#0 ] -Uplifting [play_movement] best 4097583 combination zp[1]:123 [ play_movement::key_event#0 ] +Uplifting [play_movement] best 4102596 combination zp[1]:123 [ play_movement::key_event#0 ] Attempting to uplift remaining variables inzp[1]:94 [ play_init::b#2 play_init::b#1 ] -Uplifting [play_init] best 4097483 combination reg byte x [ play_init::b#2 play_init::b#1 ] +Uplifting [play_init] best 4102496 combination reg byte x [ play_init::b#2 play_init::b#1 ] Attempting to uplift remaining variables inzp[1]:124 [ play_movement::return#3 ] -Uplifting [play_movement] best 4096883 combination reg byte a [ play_movement::return#3 ] +Uplifting [play_movement] best 4101896 combination reg byte a [ play_movement::return#3 ] Attempting to uplift remaining variables inzp[1]:96 [ sprites_init::xpos#2 sprites_init::xpos#1 ] -Uplifting [sprites_init] best 4096883 combination zp[1]:96 [ sprites_init::xpos#2 sprites_init::xpos#1 ] +Uplifting [sprites_init] best 4101896 combination zp[1]:96 [ sprites_init::xpos#2 sprites_init::xpos#1 ] Attempting to uplift remaining variables inzp[1]:93 [ play_init::idx#2 play_init::idx#1 ] -Uplifting [play_init] best 4096883 combination zp[1]:93 [ play_init::idx#2 play_init::idx#1 ] +Uplifting [play_init] best 4101896 combination zp[1]:93 [ play_init::idx#2 play_init::idx#1 ] Attempting to uplift remaining variables inzp[1]:15 [ render_screen_render#15 render_screen_render#65 ] -Uplifting [] best 4096847 combination reg byte x [ render_screen_render#15 render_screen_render#65 ] -Attempting to uplift remaining variables inzp[1]:23 [ current_ypos#13 current_ypos#97 current_ypos#98 ] -Uplifting [] best 4096811 combination reg byte x [ current_ypos#13 current_ypos#97 current_ypos#98 ] +Uplifting [] best 4101860 combination reg byte x [ render_screen_render#15 render_screen_render#65 ] +Attempting to uplift remaining variables inzp[1]:23 [ current_ypos#13 current_ypos#96 current_ypos#97 ] +Uplifting [] best 4101824 combination reg byte x [ current_ypos#13 current_ypos#96 current_ypos#97 ] Attempting to uplift remaining variables inzp[1]:112 [ render_screen_showing ] -Uplifting [] best 4096811 combination zp[1]:112 [ render_screen_showing ] +Uplifting [] best 4101824 combination zp[1]:112 [ render_screen_showing ] Attempting to uplift remaining variables inzp[1]:2 [ render_screen_show#16 render_screen_show#13 ] -Uplifting [] best 4096811 combination zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] +Uplifting [] best 4101824 combination zp[1]:2 [ render_screen_show#16 render_screen_show#13 ] Attempting to uplift remaining variables inzp[1]:16 [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] -Uplifting [] best 4096774 combination reg byte y [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] +Uplifting [] best 4101787 combination reg byte y [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] Attempting to uplift remaining variables inzp[1]:3 [ render_screen_render#18 render_screen_render#11 ] -Uplifting [] best 4096774 combination zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] -Attempting to uplift remaining variables inzp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] -Uplifting [sprites_irq] best 4096774 combination zp[1]:218 [ sprites_irq::raster_sprite_gfx_modify ] -Attempting to uplift remaining variables inzp[1]:222 [ sprites_irq::ptr#1 ] -Uplifting [sprites_irq] best 4096762 combination reg byte x [ sprites_irq::ptr#1 ] -Attempting to uplift remaining variables inzp[1]:216 [ sprites_irq::ypos#0 ] -Uplifting [sprites_irq] best 4096747 combination reg byte a [ sprites_irq::ypos#0 ] -Attempting to uplift remaining variables inzp[1]:219 [ sprites_irq::ptr#0 ] -Uplifting [sprites_irq] best 4096732 combination reg byte x [ sprites_irq::ptr#0 ] +Uplifting [] best 4101787 combination zp[1]:3 [ render_screen_render#18 render_screen_render#11 ] +Attempting to uplift remaining variables inzp[1]:220 [ sprites_irq::raster_sprite_gfx_modify ] +Uplifting [sprites_irq] best 4101787 combination zp[1]:220 [ sprites_irq::raster_sprite_gfx_modify ] +Attempting to uplift remaining variables inzp[1]:224 [ sprites_irq::ptr#1 ] +Uplifting [sprites_irq] best 4101775 combination reg byte x [ sprites_irq::ptr#1 ] +Attempting to uplift remaining variables inzp[1]:218 [ sprites_irq::ypos#0 ] +Uplifting [sprites_irq] best 4101760 combination reg byte a [ sprites_irq::ypos#0 ] +Attempting to uplift remaining variables inzp[1]:221 [ sprites_irq::ptr#0 ] +Uplifting [sprites_irq] best 4101745 combination reg byte x [ sprites_irq::ptr#0 ] Attempting to uplift remaining variables inzp[1]:118 [ irq_sprite_ypos ] -Uplifting [] best 4096732 combination zp[1]:118 [ irq_sprite_ypos ] +Uplifting [] best 4101745 combination zp[1]:118 [ irq_sprite_ypos ] Attempting to uplift remaining variables inzp[1]:120 [ irq_cnt ] -Uplifting [] best 4096732 combination zp[1]:120 [ irq_cnt ] +Uplifting [] best 4101745 combination zp[1]:120 [ irq_cnt ] Attempting to uplift remaining variables inzp[1]:119 [ irq_sprite_ptr ] -Uplifting [] best 4096732 combination zp[1]:119 [ irq_sprite_ptr ] +Uplifting [] best 4101745 combination zp[1]:119 [ irq_sprite_ptr ] Attempting to uplift remaining variables inzp[1]:117 [ irq_raster_next ] -Uplifting [] best 4096732 combination zp[1]:117 [ irq_raster_next ] +Uplifting [] best 4101745 combination zp[1]:117 [ irq_raster_next ] Coalescing zero page register [ zp[2]:5 [ render_score::screen#3 ] ] with [ zp[2]:7 [ 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 ] ] - score: 6 Coalescing zero page register [ zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 ] ] with [ zp[1]:145 [ play_movement::render#2 ] ] - score: 2 Coalescing zero page register [ zp[2]:9 [ render_bcd::offset#6 ] ] with [ zp[2]:13 [ render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] ] - score: 1 -Coalescing zero page register [ zp[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 ] ] with [ zp[2]:153 [ play_collision::piece_gfx#0 ] ] - score: 1 +Coalescing zero page register [ zp[2]:43 [ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 ] ] with [ zp[2]:153 [ play_collision::piece_gfx#0 ] ] - score: 1 Coalescing zero page register [ zp[1]:55 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#6 current_ypos#19 ] ] with [ zp[1]:78 [ play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] ] - score: 1 Coalescing zero page register [ zp[2]:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 ] ] with [ zp[2]: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 ] ] Coalescing zero page register [ zp[2]:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 ] ] with [ zp[2]:9 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] ] @@ -16542,7 +16625,7 @@ Coalescing zero page register [ zp[1]:35 [ render_playfield::l#2 render_playfiel Coalescing zero page register [ zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ] ] with [ zp[1]:30 [ render_moving::l#4 render_moving::l#1 ] ] Coalescing zero page register [ zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 ] ] with [ zp[1]:31 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] ] Coalescing zero page register [ zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 ] ] with [ zp[1]:32 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] ] -Coalescing zero page register [ zp[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 play_collision::piece_gfx#0 ] ] with [ zp[2]:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] ] +Coalescing zero page register [ zp[2]:43 [ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 play_collision::piece_gfx#0 ] ] with [ zp[2]:37 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] ] Coalescing zero page register [ zp[1]:54 [ 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 ] ] with [ zp[1]:42 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] ] Coalescing zero page register [ zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 ] ] with [ zp[1]:46 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] ] Coalescing zero page register [ zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 ] ] with [ zp[1]:47 [ 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 ] ] @@ -16557,11 +16640,11 @@ Coalescing zero page register [ zp[1]:123 [ play_movement::key_event#0 ] ] with Coalescing zero page register [ zp[2]:135 [ render_moving::screen_line#0 ] ] with [ zp[2]:100 [ render_init::li_2#2 render_init::li_2#1 ] ] Coalescing zero page register [ zp[2]:156 [ play_collision::playfield_line#0 ] ] with [ zp[2]:103 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] ] Coalescing zero page register [ zp[1]:158 [ play_collision::i#1 ] ] with [ zp[1]:131 [ render_next::next_piece_char#0 ] ] -Coalescing zero page register [ zp[1]:177 [ play_update_score::lines_before#0 ] ] with [ zp[1]:172 [ play_spawn_current::$7 ] ] -Coalescing zero page register [ zp[2]:189 [ play_lock_current::playfield_line#0 ] ] with [ zp[2]:105 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] ] -Coalescing zero page register [ zp[1]:191 [ play_lock_current::i#1 ] ] with [ zp[1]:187 [ play_remove_lines::c#0 ] ] -Coalescing zero page register [ zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 ] ] with [ zp[2]:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 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 ] ] -Coalescing zero page register [ zp[2]:43 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 play_collision::piece_gfx#0 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] ] with [ zp[2]:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] ] +Coalescing zero page register [ zp[1]:179 [ play_update_score::lines_before#0 ] ] with [ zp[1]:172 [ play_spawn_current::$7 ] ] +Coalescing zero page register [ zp[2]:191 [ play_lock_current::playfield_line#0 ] ] with [ zp[2]:105 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] ] +Coalescing zero page register [ zp[1]:193 [ play_lock_current::i#1 ] ] with [ zp[1]:189 [ play_remove_lines::c#0 ] ] +Coalescing zero page register [ zp[2]:26 [ current_piece_gfx#64 current_piece_gfx#110 current_piece_gfx#111 ] ] with [ zp[2]:18 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 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 ] ] +Coalescing zero page register [ zp[2]:43 [ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 play_collision::piece_gfx#0 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ] ] with [ zp[2]:20 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] ] Coalescing zero page register [ zp[1]:54 [ 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 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ] ] with [ zp[1]:35 [ render_playfield::l#2 render_playfield::l#1 render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] ] Coalescing zero page register [ zp[1]:72 [ play_remove_lines::y#8 play_remove_lines::y#1 play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ] ] with [ zp[1]:36 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 render_moving::l#4 render_moving::l#1 ] ] Coalescing zero page register [ zp[1]:73 [ play_remove_lines::removed#11 play_remove_lines::removed#7 play_remove_lines::removed#1 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 ] ] with [ zp[1]:39 [ render_playfield::c#2 render_playfield::c#1 render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ] ] @@ -16569,23 +16652,23 @@ Coalescing zero page register [ zp[1]:85 [ keyboard_event_scan::row#2 keyboard_e Coalescing zero page register [ zp[1]:87 [ 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 play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ] ] with [ zp[1]:76 [ play_remove_lines::full#4 play_remove_lines::full#2 play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ] ] Coalescing zero page register [ zp[1]:96 [ sprites_init::xpos#2 sprites_init::xpos#1 play_init::idx#2 play_init::idx#1 ] ] with [ zp[1]:40 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ] ] Coalescing zero page register [ zp[2]:135 [ render_moving::screen_line#0 render_init::li_2#2 render_init::li_2#1 ] ] with [ zp[2]:107 [ 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 ] ] -Coalescing zero page register [ zp[1]:191 [ play_lock_current::i#1 play_remove_lines::c#0 ] ] with [ zp[1]:158 [ play_collision::i#1 render_next::next_piece_char#0 ] ] -Coalescing zero page register [ zp[1]:198 [ keyboard_event_scan::row_scan#0 ] ] with [ zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] ] +Coalescing zero page register [ zp[1]:193 [ play_lock_current::i#1 play_remove_lines::c#0 ] ] with [ zp[1]:158 [ play_collision::i#1 render_next::next_piece_char#0 ] ] +Coalescing zero page register [ zp[1]:200 [ keyboard_event_scan::row_scan#0 ] ] with [ zp[1]:79 [ play_lock_current::l#6 play_lock_current::l#1 play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] ] Allocated (was zp[1]:24) zp[1]:5 [ render_screen_render#33 render_screen_render#64 render_next::l#7 render_next::l#1 ] -Allocated (was zp[1]:25) zp[1]:6 [ current_xpos#59 current_xpos#118 current_xpos#119 ] -Allocated (was zp[2]:26) zp[2]:7 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 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 ] -Allocated (was zp[1]:28) zp[1]:9 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] -Allocated (was zp[2]:43) zp[2]:10 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 play_collision::piece_gfx#0 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] +Allocated (was zp[1]:25) zp[1]:6 [ current_xpos#59 current_xpos#117 current_xpos#118 ] +Allocated (was zp[2]:26) zp[2]:7 [ current_piece_gfx#64 current_piece_gfx#110 current_piece_gfx#111 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 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 ] +Allocated (was zp[1]:28) zp[1]:9 [ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] +Allocated (was zp[2]:43) zp[2]:10 [ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 play_collision::piece_gfx#0 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] Allocated (was zp[1]:54) zp[1]:12 [ 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 play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 render_playfield::l#2 render_playfield::l#1 render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ] Allocated (was zp[1]:55) zp[1]:13 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#6 current_ypos#19 play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ] Allocated (was zp[2]:56) zp[2]:14 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] Allocated (was zp[1]:58) zp[1]:16 [ level#33 level#10 level#17 level#19 level#21 ] Allocated (was zp[1]:59) zp[1]:17 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] Allocated (was zp[1]:60) zp[1]:18 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -Allocated (was zp[2]:61) zp[2]:19 [ current_piece#28 current_piece#10 current_piece#100 current_piece#15 current_piece#92 ] +Allocated (was zp[2]:61) zp[2]:19 [ current_piece#28 current_piece#10 current_piece#99 current_piece#15 current_piece#91 ] Allocated (was zp[1]:63) zp[1]:21 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] Allocated (was zp[1]:64) zp[1]:22 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -Allocated (was zp[2]:65) zp[2]:23 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#122 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] +Allocated (was zp[2]:65) zp[2]:23 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#121 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#115 ] Allocated (was zp[1]:67) zp[1]:25 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] Allocated (was zp[1]:69) zp[1]:26 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] Allocated (was zp[1]:70) zp[1]:27 [ game_over#65 game_over#27 game_over#10 game_over#52 game_over#15 ] @@ -16606,16 +16689,16 @@ Allocated (was zp[1]:120) zp[1]:46 [ irq_cnt ] Allocated (was zp[1]:123) zp[1]:47 [ play_movement::key_event#0 render_screen_original::y#6 render_screen_original::y#1 ] Allocated (was zp[2]:135) zp[2]:48 [ render_moving::screen_line#0 render_init::li_2#2 render_init::li_2#1 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 ] Allocated (was zp[2]:156) zp[2]:50 [ play_collision::playfield_line#0 render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ] -Allocated (was zp[1]:177) zp[1]:52 [ play_update_score::lines_before#0 play_spawn_current::$7 ] -Allocated (was zp[4]:179) zp[4]:53 [ play_update_score::add_bcd#0 ] -Allocated (was zp[2]:189) zp[2]:57 [ play_lock_current::playfield_line#0 render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] -Allocated (was zp[1]:191) zp[1]:59 [ play_lock_current::i#1 play_remove_lines::c#0 play_collision::i#1 render_next::next_piece_char#0 ] -Allocated (was zp[1]:198) zp[1]:60 [ keyboard_event_scan::row_scan#0 play_lock_current::l#6 play_lock_current::l#1 play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] -Allocated (was zp[1]:218) zp[1]:61 [ sprites_irq::raster_sprite_gfx_modify ] +Allocated (was zp[1]:179) zp[1]:52 [ play_update_score::lines_before#0 play_spawn_current::$7 ] +Allocated (was zp[4]:181) zp[4]:53 [ play_update_score::add_bcd#0 ] +Allocated (was zp[2]:191) zp[2]:57 [ play_lock_current::playfield_line#0 render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ] +Allocated (was zp[1]:193) zp[1]:59 [ play_lock_current::i#1 play_remove_lines::c#0 play_collision::i#1 render_next::next_piece_char#0 ] +Allocated (was zp[1]:200) zp[1]:60 [ keyboard_event_scan::row_scan#0 play_lock_current::l#6 play_lock_current::l#1 play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ] +Allocated (was zp[1]:220) zp[1]:61 [ sprites_irq::raster_sprite_gfx_modify ] Interrupt procedure sprites_irq clobbers AXCNZV -Removing interrupt register storage sty regy+1 in 1183 entry interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage regy: in 1217 [574] return - exit interrupt(HARDWARE_CLOBBER) -Removing interrupt register storage ldy #00 in 1217 [574] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage sty regy+1 in 1190 entry interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage regy: in 1224 [579] return - exit interrupt(HARDWARE_CLOBBER) +Removing interrupt register storage ldy #00 in 1224 [579] return - exit interrupt(HARDWARE_CLOBBER) ASSEMBLER BEFORE OPTIMIZATION // File Comments @@ -16627,6 +16710,10 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -16670,8 +16757,8 @@ ASSEMBLER BEFORE OPTIMIZATION .label CIA2 = $dd00 // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f + // The SID MOD 6581/8580 + .label SID = $d400 // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -16696,11 +16783,6 @@ ASSEMBLER BEFORE OPTIMIZATION .const KEY_CTRL = $3a .const KEY_SPACE = $3c .const KEY_COMMODORE = $3d - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b // Address of the first screen .label PLAYFIELD_SCREEN_1 = $400 // Address of the second screen @@ -16733,6 +16815,9 @@ ASSEMBLER BEFORE OPTIMIZATION // Right side collision (cell beyond the right side of the playfield) .const COLLISION_RIGHT = 8 .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 @@ -16860,7 +16945,7 @@ main: { // asm { sei } sei // [16] call render_init - // [496] phi from main::@8 to render_init [phi:main::@8->render_init] + // [501] phi from main::@8 to render_init [phi:main::@8->render_init] render_init_from___b8: jsr render_init // [17] phi from main::@8 to main::@9 [phi:main::@8->main::@9] @@ -16883,7 +16968,7 @@ main: { // main::@11 __b11: // [22] call play_init - // [455] phi from main::@11 to play_init [phi:main::@11->play_init] + // [460] phi from main::@11 to play_init [phi:main::@11->play_init] play_init_from___b11: jsr play_init // [23] phi from main::@11 to main::@12 [phi:main::@11->main::@12] @@ -16927,30 +17012,30 @@ main: { jmp __b15 // main::@15 __b15: - // [29] (byte) current_ypos#97 ← (byte) current_ypos#6 -- vbuxx=vbuz1 + // [29] (byte) current_ypos#96 ← (byte) current_ypos#6 -- vbuxx=vbuz1 ldx.z current_ypos - // [30] (byte) current_xpos#118 ← (byte) current_xpos#100 -- vbuz1=vbuz2 + // [30] (byte) current_xpos#117 ← (byte) current_xpos#100 -- vbuz1=vbuz2 lda.z current_xpos sta.z current_xpos_1 - // [31] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [31] (byte*) current_piece_gfx#110 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece_gfx_1 lda PIECES+1,y sta.z current_piece_gfx_1+1 - // [32] (byte) current_piece_char#99 ← (byte) current_piece_char#5 -- vbuz1=vbuz2 + // [32] (byte) current_piece_char#98 ← (byte) current_piece_char#5 -- vbuz1=vbuz2 lda.z current_piece_char sta.z current_piece_char_1 // [33] call render_moving // [128] phi from main::@15 to render_moving [phi:main::@15->render_moving] render_moving_from___b15: - // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#99 [phi:main::@15->render_moving#0] -- register_copy - // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#111 [phi:main::@15->render_moving#1] -- register_copy - // [128] phi (byte) current_xpos#59 = (byte) current_xpos#118 [phi:main::@15->render_moving#2] -- register_copy + // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#98 [phi:main::@15->render_moving#0] -- register_copy + // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#110 [phi:main::@15->render_moving#1] -- register_copy + // [128] phi (byte) current_xpos#59 = (byte) current_xpos#117 [phi:main::@15->render_moving#2] -- register_copy // [128] phi (byte) render_screen_render#33 = (byte) $20 [phi:main::@15->render_moving#3] -- vbuz1=vbuc1 lda #$20 sta.z render_screen_render_1 - // [128] phi (byte) current_ypos#13 = (byte) current_ypos#97 [phi:main::@15->render_moving#4] -- register_copy + // [128] phi (byte) current_ypos#13 = (byte) current_ypos#96 [phi:main::@15->render_moving#4] -- register_copy jsr render_moving jmp __b16 // main::@16 @@ -16967,13 +17052,13 @@ main: { jmp __b17 // main::@17 __b17: - // [36] (byte*) current_piece#100 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [36] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece lda PIECES+1,y sta.z current_piece+1 - // [37] (byte*) current_piece_gfx#122 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [37] (byte*) current_piece_gfx#121 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece_gfx @@ -17002,12 +17087,12 @@ main: { // [38] phi (byte) game_over#10 = (byte) game_over#52 [phi:main::@17->main::@1#6] -- register_copy // [38] phi (byte) current_ypos#11 = (byte) current_ypos#6 [phi:main::@17->main::@1#7] -- register_copy // [38] phi (byte) current_xpos#14 = (byte) current_xpos#100 [phi:main::@17->main::@1#8] -- register_copy - // [38] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#122 [phi:main::@17->main::@1#9] -- register_copy + // [38] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#121 [phi:main::@17->main::@1#9] -- register_copy // [38] phi (byte) current_orientation#13 = (byte) 0 [phi:main::@17->main::@1#10] -- vbuz1=vbuc1 lda #0 sta.z current_orientation // [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#5 [phi:main::@17->main::@1#11] -- register_copy - // [38] phi (byte*) current_piece#10 = (byte*) current_piece#100 [phi:main::@17->main::@1#12] -- register_copy + // [38] phi (byte*) current_piece#10 = (byte*) current_piece#99 [phi:main::@17->main::@1#12] -- register_copy // [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#1 [phi:main::@17->main::@1#13] -- register_copy // [38] phi (byte) render_screen_render#18 = (byte) $20 [phi:main::@17->main::@1#14] -- vbuz1=vbuc1 lda #$20 @@ -17062,7 +17147,7 @@ main: { __b18: // [43] call keyboard_event_scan // Scan keyboard events - // [390] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] + // [395] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] keyboard_event_scan_from___b18: jsr keyboard_event_scan // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] @@ -17119,30 +17204,30 @@ main: { jmp __b22 // main::@22 __b22: - // [57] (byte) current_ypos#98 ← (byte) current_ypos#19 -- vbuxx=vbuz1 + // [57] (byte) current_ypos#97 ← (byte) current_ypos#19 -- vbuxx=vbuz1 ldx.z current_ypos // [58] (byte) render_screen_render#64 ← (byte) render_screen_render#18 -- vbuz1=vbuz2 lda.z render_screen_render sta.z render_screen_render_1 - // [59] (byte) current_xpos#119 ← (byte) current_xpos#19 -- vbuz1=vbuz2 + // [59] (byte) current_xpos#118 ← (byte) current_xpos#19 -- vbuz1=vbuz2 lda.z current_xpos sta.z current_xpos_1 - // [60] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 -- pbuz1=pbuz2 + // [60] (byte*) current_piece_gfx#111 ← (byte*) current_piece_gfx#18 -- pbuz1=pbuz2 lda.z current_piece_gfx sta.z current_piece_gfx_1 lda.z current_piece_gfx+1 sta.z current_piece_gfx_1+1 - // [61] (byte) current_piece_char#100 ← (byte) current_piece_char#16 -- vbuz1=vbuz2 + // [61] (byte) current_piece_char#99 ← (byte) current_piece_char#16 -- vbuz1=vbuz2 lda.z current_piece_char sta.z current_piece_char_1 // [62] call render_moving // [128] phi from main::@22 to render_moving [phi:main::@22->render_moving] render_moving_from___b22: - // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#100 [phi:main::@22->render_moving#0] -- register_copy - // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#112 [phi:main::@22->render_moving#1] -- register_copy - // [128] phi (byte) current_xpos#59 = (byte) current_xpos#119 [phi:main::@22->render_moving#2] -- register_copy + // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#99 [phi:main::@22->render_moving#0] -- register_copy + // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#111 [phi:main::@22->render_moving#1] -- register_copy + // [128] phi (byte) current_xpos#59 = (byte) current_xpos#118 [phi:main::@22->render_moving#2] -- register_copy // [128] phi (byte) render_screen_render#33 = (byte) render_screen_render#64 [phi:main::@22->render_moving#3] -- register_copy - // [128] phi (byte) current_ypos#13 = (byte) current_ypos#98 [phi:main::@22->render_moving#4] -- register_copy + // [128] phi (byte) current_ypos#13 = (byte) current_ypos#97 [phi:main::@22->render_moving#4] -- register_copy jsr render_moving jmp __b23 // main::@23 @@ -17867,7 +17952,7 @@ play_move_rotate: { sta.z play_collision.ypos // [190] (byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3 -- vbuxx=vbuz1 ldx.z orientation - // [191] (byte*) current_piece#98 ← (byte*) current_piece#15 -- pbuz1=pbuz2 + // [191] (byte*) current_piece#97 ← (byte*) current_piece#15 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -17878,7 +17963,7 @@ play_move_rotate: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#3 [phi:play_move_rotate::@3->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#3 [phi:play_move_rotate::@3->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#3 [phi:play_move_rotate::@3->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#98 [phi:play_move_rotate::@3->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#97 [phi:play_move_rotate::@3->play_collision#3] -- register_copy jsr play_collision // [193] (byte) play_collision::return#14 ← (byte) play_collision::return#15 jmp __b6 @@ -18111,7 +18196,7 @@ play_move_leftright: { sta.z play_collision.ypos // [228] (byte) play_collision::orientation#2 ← (byte) current_orientation#20 -- vbuxx=vbuz1 ldx.z current_orientation - // [229] (byte*) current_piece#97 ← (byte*) current_piece#15 -- pbuz1=pbuz2 + // [229] (byte*) current_piece#96 ← (byte*) current_piece#15 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -18122,7 +18207,7 @@ play_move_leftright: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#2 [phi:play_move_leftright::@3->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#2 [phi:play_move_leftright::@3->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#2 [phi:play_move_leftright::@3->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#97 [phi:play_move_leftright::@3->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#96 [phi:play_move_leftright::@3->play_collision#3] -- register_copy jsr play_collision // [231] (byte) play_collision::return#13 ← (byte) play_collision::return#15 jmp __b7 @@ -18167,7 +18252,7 @@ play_move_leftright: { sta.z play_collision.ypos // [239] (byte) play_collision::orientation#1 ← (byte) current_orientation#20 -- vbuxx=vbuz1 ldx.z current_orientation - // [240] (byte*) current_piece#96 ← (byte*) current_piece#15 -- pbuz1=pbuz2 + // [240] (byte*) current_piece#95 ← (byte*) current_piece#15 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -18178,7 +18263,7 @@ play_move_leftright: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#1 [phi:play_move_leftright::@1->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#1 [phi:play_move_leftright::@1->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#1 [phi:play_move_leftright::@1->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#96 [phi:play_move_leftright::@1->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#95 [phi:play_move_leftright::@1->play_collision#3] -- register_copy jsr play_collision // [242] (byte) play_collision::return#1 ← (byte) play_collision::return#15 jmp __b6 @@ -18226,9 +18311,9 @@ play_move_down: { // play_move_down::@1 __b1: // [250] call keyboard_event_pressed - // [379] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] + // [384] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] keyboard_event_pressed_from___b1: - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_SPACE [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuxx=vbuc1 + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_SPACE [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuxx=vbuc1 ldx #KEY_SPACE jsr keyboard_event_pressed // [251] (byte) keyboard_event_pressed::return#12 ← (byte) keyboard_event_pressed::return#11 @@ -18291,7 +18376,7 @@ play_move_down: { sta.z play_collision.xpos // [263] (byte) play_collision::orientation#0 ← (byte) current_orientation#13 -- vbuxx=vbuz1 ldx.z current_orientation - // [264] (byte*) current_piece#95 ← (byte*) current_piece#10 -- pbuz1=pbuz2 + // [264] (byte*) current_piece#94 ← (byte*) current_piece#10 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -18302,7 +18387,7 @@ play_move_down: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#0 [phi:play_move_down::@8->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#0 [phi:play_move_down::@8->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#0 [phi:play_move_down::@8->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#95 [phi:play_move_down::@8->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#94 [phi:play_move_down::@8->play_collision#3] -- register_copy jsr play_collision // [266] (byte) play_collision::return#0 ← (byte) play_collision::return#15 jmp __b13 @@ -18326,7 +18411,7 @@ play_move_down: { // play_move_down::@14 __b14: // [272] call play_remove_lines - // [338] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] + // [343] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] play_remove_lines_from___b14: jsr play_remove_lines // [273] (byte) play_remove_lines::return#0 ← (byte) play_remove_lines::removed#7 -- vbuaa=vbuz1 @@ -18355,13 +18440,13 @@ play_move_down: { jmp __b17 // play_move_down::@17 __b17: - // [279] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [279] (byte*) current_piece#91 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece lda PIECES+1,y sta.z current_piece+1 - // [280] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [280] (byte*) current_piece_gfx#115 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece_gfx @@ -18372,12 +18457,12 @@ play_move_down: { // [281] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#2 [phi:play_move_down::@17->play_move_down::@11#0] -- register_copy // [281] phi (byte) game_over#27 = (byte) game_over#52 [phi:play_move_down::@17->play_move_down::@11#1] -- register_copy // [281] phi (byte) current_xpos#43 = (byte) current_xpos#100 [phi:play_move_down::@17->play_move_down::@11#2] -- register_copy - // [281] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#116 [phi:play_move_down::@17->play_move_down::@11#3] -- register_copy + // [281] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#115 [phi:play_move_down::@17->play_move_down::@11#3] -- register_copy // [281] phi (byte) current_orientation#37 = (byte) 0 [phi:play_move_down::@17->play_move_down::@11#4] -- vbuz1=vbuc1 lda #0 sta.z current_orientation // [281] phi (byte) current_piece_char#29 = (byte) current_piece_char#5 [phi:play_move_down::@17->play_move_down::@11#5] -- register_copy - // [281] phi (byte*) current_piece#28 = (byte*) current_piece#92 [phi:play_move_down::@17->play_move_down::@11#6] -- register_copy + // [281] phi (byte*) current_piece#28 = (byte*) current_piece#91 [phi:play_move_down::@17->play_move_down::@11#6] -- register_copy // [281] phi (byte) level_bcd#31 = (byte) level_bcd#19 [phi:play_move_down::@17->play_move_down::@11#7] -- register_copy // [281] phi (byte) current_movedown_slow#37 = (byte) current_movedown_slow#23 [phi:play_move_down::@17->play_move_down::@11#8] -- register_copy // [281] phi (byte) level#33 = (byte) level#19 [phi:play_move_down::@17->play_move_down::@11#9] -- register_copy @@ -18478,7 +18563,7 @@ play_spawn_current: { // [292] (byte) play_collision::ypos#4 ← (byte) current_ypos#6 -- vbuz1=vbuz2 lda.z current_ypos sta.z play_collision.ypos - // [293] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [293] (byte*) current_piece#98 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z __7 lda PIECES,y sta.z current_piece_1 @@ -18491,30 +18576,30 @@ play_spawn_current: { // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#4 [phi:play_spawn_current->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) 0 [phi:play_spawn_current->play_collision#2] -- vbuxx=vbuc1 ldx #0 - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#99 [phi:play_spawn_current->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#98 [phi:play_spawn_current->play_collision#3] -- register_copy jsr play_collision // [295] (byte) play_collision::return#10 ← (byte) play_collision::return#15 jmp __b4 // play_spawn_current::@4 __b4: // [296] (byte~) play_spawn_current::$1 ← (byte) play_collision::return#10 - // [297] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@5 -- vbuaa_neq_vbuc1_then_la1 + // [297] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@6 -- vbuaa_neq_vbuc1_then_la1 cmp #COLLISION_PLAYFIELD - bne __b5_from___b4 + bne __b6_from___b4 // [299] phi from play_spawn_current::@4 to play_spawn_current::@1 [phi:play_spawn_current::@4->play_spawn_current::@1] __b1_from___b4: // [299] phi (byte) game_over#52 = (byte) 1 [phi:play_spawn_current::@4->play_spawn_current::@1#0] -- vbuz1=vbuc1 lda #1 sta.z game_over jmp __b1 - // [298] phi from play_spawn_current::@4 to play_spawn_current::@5 [phi:play_spawn_current::@4->play_spawn_current::@5] - __b5_from___b4: - jmp __b5 - // play_spawn_current::@5 - __b5: - // [299] phi from play_spawn_current::@5 to play_spawn_current::@1 [phi:play_spawn_current::@5->play_spawn_current::@1] - __b1_from___b5: - // [299] phi (byte) game_over#52 = (byte) game_over#65 [phi:play_spawn_current::@5->play_spawn_current::@1#0] -- register_copy + // [298] phi from play_spawn_current::@4 to play_spawn_current::@6 [phi:play_spawn_current::@4->play_spawn_current::@6] + __b6_from___b4: + jmp __b6 + // play_spawn_current::@6 + __b6: + // [299] phi from play_spawn_current::@6 to play_spawn_current::@1 [phi:play_spawn_current::@6->play_spawn_current::@1] + __b1_from___b6: + // [299] phi (byte) game_over#52 = (byte) game_over#65 [phi:play_spawn_current::@6->play_spawn_current::@1#0] -- register_copy jmp __b1 // play_spawn_current::@1 __b1: @@ -18526,29 +18611,46 @@ play_spawn_current: { jmp __b2 // play_spawn_current::@2 __b2: - // [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1 + // [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::@3 -- vbuz1_eq_vbuc1_then_la1 lda #7 cmp.z piece_idx - beq sid_rnd1 + beq __b3_from___b2 jmp __breturn // play_spawn_current::@return __breturn: // [302] return rts - // play_spawn_current::sid_rnd1 - sid_rnd1: - // [303] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // [303] phi from play_spawn_current::@2 to play_spawn_current::@3 [phi:play_spawn_current::@2->play_spawn_current::@3] + __b3_from___b2: jmp __b3 // play_spawn_current::@3 __b3: - // [304] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 + // [304] call sid_rnd + jsr sid_rnd + // [305] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + jmp __b5 + // play_spawn_current::@5 + __b5: + // [306] (byte~) play_spawn_current::$5 ← (byte) sid_rnd::return#2 + // [307] (byte) play_spawn_current::piece_idx#1 ← (byte~) play_spawn_current::$5 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 and #7 sta.z piece_idx - // [300] phi from play_spawn_current::@3 to play_spawn_current::@2 [phi:play_spawn_current::@3->play_spawn_current::@2] - __b2_from___b3: - // [300] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@3->play_spawn_current::@2#0] -- register_copy + // [300] phi from play_spawn_current::@5 to play_spawn_current::@2 [phi:play_spawn_current::@5->play_spawn_current::@2] + __b2_from___b5: + // [300] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@5->play_spawn_current::@2#0] -- register_copy jmp __b2 +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + // [308] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuaa=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC + jmp __breturn + // sid_rnd::@return + __breturn: + // [309] return + rts } // play_update_score // Update the score based on the number of lines removed @@ -18556,22 +18658,22 @@ play_spawn_current: { play_update_score: { .label lines_before = $34 .label add_bcd = $35 - // [305] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuxx_eq_0_then_la1 + // [310] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuxx_eq_0_then_la1 cpx #0 beq __breturn_from_play_update_score jmp __b1 // play_update_score::@1 __b1: - // [306] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuaa=_lo_vwuz1 + // [311] (byte~) play_update_score::$2 ← < (word) lines_bcd#19 -- vbuaa=_lo_vwuz1 lda.z lines_bcd - // [307] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 -- vbuz1=vbuaa_band_vbuc1 + // [312] (byte) play_update_score::lines_before#0 ← (byte~) play_update_score::$2 & (byte) $f0 -- vbuz1=vbuaa_band_vbuc1 and #$f0 sta.z lines_before - // [308] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [313] (byte~) play_update_score::$9 ← (byte) play_update_score::removed#0 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [309] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) -- vduz1=pduc1_derefidx_vbuaa + // [314] (dword) play_update_score::add_bcd#0 ← *((const dword*) score_add_bcd + (byte~) play_update_score::$9) -- vduz1=pduc1_derefidx_vbuaa tay lda score_add_bcd,y sta.z add_bcd @@ -18583,7 +18685,7 @@ play_update_score: { sta.z add_bcd+3 // asm { sed } sed - // [311] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuxx + // [316] (word) lines_bcd#29 ← (word) lines_bcd#19 + (byte) play_update_score::removed#0 -- vwuz1=vwuz1_plus_vbuxx txa clc adc.z lines_bcd @@ -18591,7 +18693,7 @@ play_update_score: { bcc !+ inc.z lines_bcd+1 !: - // [312] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2 + // [317] (volatile dword) score_bcd ← (volatile dword) score_bcd + (dword) play_update_score::add_bcd#0 -- vduz1=vduz1_plus_vduz2 lda.z score_bcd clc adc.z add_bcd @@ -18607,40 +18709,40 @@ play_update_score: { sta.z score_bcd+3 // asm { cld } cld - // [314] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 -- vbuaa=_lo_vwuz1 + // [319] (byte~) play_update_score::$4 ← < (word) lines_bcd#29 -- vbuaa=_lo_vwuz1 lda.z lines_bcd - // [315] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 -- vbuaa=vbuaa_band_vbuc1 + // [320] (byte) play_update_score::lines_after#0 ← (byte~) play_update_score::$4 & (byte) $f0 -- vbuaa=vbuaa_band_vbuc1 and #$f0 - // [316] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuaa_then_la1 + // [321] if((byte) play_update_score::lines_before#0==(byte) play_update_score::lines_after#0) goto play_update_score::@return -- vbuz1_eq_vbuaa_then_la1 cmp.z lines_before beq __breturn_from___b1 - // [317] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2] + // [322] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2] __b2_from___b1: jmp __b2 // play_update_score::@2 __b2: - // [318] call play_increase_level + // [323] call play_increase_level jsr play_increase_level - // [319] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] + // [324] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] __breturn_from_play_update_score: __breturn_from___b1: __breturn_from___b2: - // [319] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy - // [319] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy - // [319] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy - // [319] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy + // [324] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy + // [324] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy + // [324] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy + // [324] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy jmp __breturn // play_update_score::@return __breturn: - // [320] return + // [325] return rts } // play_increase_level // Increase the level play_increase_level: { - // [321] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 + // [326] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 inc.z level - // [322] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 + // [327] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 // Update speed of moving tetrominos down lda.z level cmp #$1d+1 @@ -18648,64 +18750,64 @@ play_increase_level: { jmp __b3 // play_increase_level::@3 __b3: - // [323] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 + // [328] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 ldy.z level lda MOVEDOWN_SLOW_SPEEDS,y sta.z current_movedown_slow - // [324] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] + // [329] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] __b1_from___b3: - // [324] phi (byte) current_movedown_slow#65 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy + // [329] phi (byte) current_movedown_slow#65 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy jmp __b1 - // [324] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] + // [329] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] __b1_from_play_increase_level: - // [324] phi (byte) current_movedown_slow#65 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 + // [329] phi (byte) current_movedown_slow#65 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 lda #1 sta.z current_movedown_slow jmp __b1 // play_increase_level::@1 __b1: - // [325] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 + // [330] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 inc.z level_bcd - // [326] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + // [331] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 lda #$f and.z level_bcd - // [327] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuaa_neq_vbuc1_then_la1 + // [332] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuaa_neq_vbuc1_then_la1 cmp #$a bne __b2_from___b1 jmp __b4 // play_increase_level::@4 __b4: - // [328] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 + // [333] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 // If level low nybble hits 0xa change to 0x10 lax.z level_bcd axs #-[6] stx.z level_bcd - // [329] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] + // [334] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] __b2_from___b1: __b2_from___b4: - // [329] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy + // [334] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy jmp __b2 // play_increase_level::@2 __b2: // asm { sed } // Increase the score values gained sed - // [331] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] + // [336] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] __b5_from___b2: - // [331] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuxx=vbuc1 + // [336] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuxx=vbuc1 ldx #0 jmp __b5 - // [331] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] + // [336] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] __b5_from___b5: - // [331] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy + // [336] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy jmp __b5 // play_increase_level::@5 __b5: - // [332] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [337] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [333] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa + // [338] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa tay clc lda score_add_bcd,y @@ -18720,9 +18822,9 @@ play_increase_level: { lda score_add_bcd+3,y adc SCORE_BASE_BCD+3,y sta score_add_bcd+3,y - // [334] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuxx=_inc_vbuxx + // [339] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuxx=_inc_vbuxx inx - // [335] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuxx_neq_vbuc1_then_la1 + // [340] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne __b5_from___b5 jmp __b6 @@ -18733,7 +18835,7 @@ play_increase_level: { jmp __breturn // play_increase_level::@return __breturn: - // [337] return + // [342] return rts } // play_remove_lines @@ -18747,137 +18849,137 @@ play_remove_lines: { .label y = $1c .label removed = $1d .label full = $1f - // [339] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] + // [344] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] __b1_from_play_remove_lines: - // [339] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 + // [344] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 lda #0 sta.z removed - // [339] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 + // [344] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 lda #0 sta.z y - // [339] phi (byte) play_remove_lines::w#12 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuxx=vbuc1 + // [344] phi (byte) play_remove_lines::w#12 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuxx=vbuc1 ldx #PLAYFIELD_LINES*PLAYFIELD_COLS-1 - // [339] phi (byte) play_remove_lines::r#3 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuyy=vbuc1 + // [344] phi (byte) play_remove_lines::r#3 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuyy=vbuc1 ldy #PLAYFIELD_LINES*PLAYFIELD_COLS-1 jmp __b1 // Read all lines and rewrite them - // [339] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] + // [344] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] __b1_from___b6: - // [339] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#7 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy - // [339] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy - // [339] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy - // [339] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy + // [344] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#7 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy + // [344] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy + // [344] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy + // [344] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy jmp __b1 // play_remove_lines::@1 __b1: - // [340] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] + // [345] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] __b2_from___b1: - // [340] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 + // [345] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 lda #1 sta.z full - // [340] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 + // [345] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 lda #0 sta.z x - // [340] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy - // [340] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy + // [345] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy + // [345] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy jmp __b2 - // [340] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] + // [345] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] __b2_from___b3: - // [340] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy - // [340] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy - // [340] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy - // [340] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy + // [345] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy + // [345] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy + // [345] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy + // [345] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy jmp __b2 // play_remove_lines::@2 __b2: - // [341] (byte) play_remove_lines::c#0 ← *((const byte*) playfield + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuyy + // [346] (byte) play_remove_lines::c#0 ← *((const byte*) playfield + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuyy lda playfield,y sta.z c - // [342] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuyy=_dec_vbuyy + // [347] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuyy=_dec_vbuyy dey - // [343] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 + // [348] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 lda.z c cmp #0 bne __b9_from___b2 - // [345] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] + // [350] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] __b3_from___b2: - // [345] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 + // [350] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 lda #0 sta.z full jmp __b3 - // [344] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] + // [349] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] __b9_from___b2: jmp __b9 // play_remove_lines::@9 __b9: - // [345] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] + // [350] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] __b3_from___b9: - // [345] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy + // [350] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy jmp __b3 // play_remove_lines::@3 __b3: - // [346] *((const byte*) playfield + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuxx=vbuz1 + // [351] *((const byte*) playfield + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z c sta playfield,x - // [347] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuxx=_dec_vbuxx + // [352] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuxx=_dec_vbuxx dex - // [348] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 + // [353] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [349] if((byte) play_remove_lines::x#1!=(const nomodify byte) PLAYFIELD_COLS-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 + // [354] if((byte) play_remove_lines::x#1!=(const nomodify byte) PLAYFIELD_COLS-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_COLS-1+1 cmp.z x bne __b2_from___b3 jmp __b4 // play_remove_lines::@4 __b4: - // [350] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 + // [355] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 lda #1 cmp.z full bne __b6_from___b4 jmp __b5 // play_remove_lines::@5 __b5: - // [351] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS -- vbuxx=vbuxx_plus_vbuc1 + // [356] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[PLAYFIELD_COLS] - // [352] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 + // [357] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 inc.z removed - // [353] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] + // [358] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] __b6_from___b4: __b6_from___b5: - // [353] phi (byte) play_remove_lines::removed#7 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy - // [353] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy + // [358] phi (byte) play_remove_lines::removed#7 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy + // [358] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy jmp __b6 // play_remove_lines::@6 __b6: - // [354] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 + // [359] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 inc.z y - // [355] if((byte) play_remove_lines::y#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 + // [360] if((byte) play_remove_lines::y#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_LINES-1+1 cmp.z y bne __b1_from___b6 - // [356] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] + // [361] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] __b7_from___b6: __b7_from___b8: - // [356] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy + // [361] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy jmp __b7 // Write zeros in the rest of the lines // play_remove_lines::@7 __b7: - // [357] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuxx_neq_vbuc1_then_la1 + // [362] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuxx_neq_vbuc1_then_la1 cpx #$ff bne __b8 jmp __breturn // play_remove_lines::@return __breturn: - // [358] return + // [363] return rts // play_remove_lines::@8 __b8: - // [359] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [364] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta playfield,x - // [360] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuxx=_dec_vbuxx + // [365] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuxx=_dec_vbuxx dex jmp __b7_from___b8 } @@ -18890,45 +18992,45 @@ play_lock_current: { .label i = $3b .label l = $3c .label i_1 = $1e - // [361] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 - // [362] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] + // [366] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 + // [367] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] __b1_from_play_lock_current: - // [362] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 + // [367] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 lda #0 sta.z l - // [362] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 + // [367] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 lda #0 sta.z i_1 - // [362] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy + // [367] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy jmp __b1 // play_lock_current::@1 __b1: - // [363] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [368] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z yp asl - // [364] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuaa + // [369] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuaa tay lda playfield_lines,y sta.z playfield_line lda playfield_lines+1,y sta.z playfield_line+1 - // [365] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 + // [370] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 lda.z current_xpos sta.z xp - // [366] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] + // [371] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] __b2_from___b1: - // [366] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuxx=vbuc1 + // [371] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuxx=vbuc1 ldx #0 - // [366] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy - // [366] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy + // [371] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy + // [371] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy jmp __b2 // play_lock_current::@2 __b2: - // [367] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 + // [372] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 ldy.z i_1 iny sty.z i - // [368] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 + // [373] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 ldy.z i_1 lda (current_piece_gfx),y cmp #0 @@ -18936,57 +19038,57 @@ play_lock_current: { jmp __b4 // play_lock_current::@4 __b4: - // [369] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 + // [374] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z current_piece_char ldy.z xp sta (playfield_line),y jmp __b3 // play_lock_current::@3 __b3: - // [370] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 + // [375] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 inc.z xp - // [371] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuxx=_inc_vbuxx + // [376] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuxx=_inc_vbuxx inx - // [372] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuxx_neq_vbuc1_then_la1 + // [377] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuxx_neq_vbuc1_then_la1 cpx #4 bne __b7 jmp __b5 // play_lock_current::@5 __b5: - // [373] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 + // [378] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 inc.z yp - // [374] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 + // [379] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 inc.z l - // [375] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 + // [380] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp.z l bne __b6 jmp __breturn // play_lock_current::@return __breturn: - // [376] return + // [381] return rts // play_lock_current::@6 __b6: - // [377] (byte) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [382] (byte) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda.z i sta.z i_1 - // [362] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] + // [367] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] __b1_from___b6: - // [362] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy - // [362] phi (byte) play_lock_current::i#3 = (byte) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy - // [362] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy + // [367] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy + // [367] phi (byte) play_lock_current::i#3 = (byte) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy + // [367] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy jmp __b1 // play_lock_current::@7 __b7: - // [378] (byte) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [383] (byte) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda.z i sta.z i_1 - // [366] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] + // [371] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] __b2_from___b7: - // [366] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy - // [366] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy - // [366] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy + // [371] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy + // [371] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy + // [371] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy jmp __b2 } // keyboard_event_pressed @@ -18994,25 +19096,25 @@ play_lock_current: { // Returns 0 is not pressed and non-0 if pressed // keyboard_event_pressed(byte register(X) keycode) keyboard_event_pressed: { - // [380] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuyy=vbuxx_ror_3 + // [385] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuyy=vbuxx_ror_3 txa lsr lsr lsr tay - // [381] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0) -- vbuyy=pbuc1_derefidx_vbuyy + // [386] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0) -- vbuyy=pbuc1_derefidx_vbuyy lda keyboard_scan_values,y tay - // [382] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuxx=vbuxx_band_vbuc1 + // [387] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuxx=vbuxx_band_vbuc1 lda #7 axs #0 - // [383] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) -- vbuaa=vbuyy_band_pbuc1_derefidx_vbuxx + // [388] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) -- vbuaa=vbuyy_band_pbuc1_derefidx_vbuxx tya and keyboard_matrix_col_bitmask,x jmp __breturn // keyboard_event_pressed::@return __breturn: - // [384] return + // [389] return rts } // keyboard_event_get @@ -19020,32 +19122,32 @@ keyboard_event_pressed: { // Returns $ff if there is no event waiting. As all events are <$7f it is enough to examine bit 7 when determining if there is any event to process. // The buffer is filled by keyboard_event_scan() keyboard_event_get: { - // [385] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 + // [390] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 lda.z keyboard_events_size cmp #0 beq __breturn_from_keyboard_event_get jmp __b1 // keyboard_event_get::@1 __b1: - // [386] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 + // [391] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 dec.z keyboard_events_size - // [387] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) -- vbuaa=pbuc1_derefidx_vbuz1 + // [392] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z keyboard_events_size lda keyboard_events,y - // [388] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] + // [393] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] __breturn_from___b1: - // [388] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy - // [388] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy + // [393] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy + // [393] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy jmp __breturn - // [388] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] + // [393] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] __breturn_from_keyboard_event_get: - // [388] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy - // [388] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuaa=vbuc1 + // [393] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy + // [393] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuaa=vbuc1 lda #$ff jmp __breturn // keyboard_event_get::@return __breturn: - // [389] return + // [394] return rts } // keyboard_event_scan @@ -19057,35 +19159,35 @@ keyboard_event_scan: { .label row_scan = $3c .label keycode = $1f .label row = $1e - // [391] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] + // [396] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] __b7_from_keyboard_event_scan: - // [391] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy - // [391] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 + // [396] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy + // [396] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 lda #0 sta.z keycode - // [391] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 + // [396] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 lda #0 sta.z row jmp __b7 - // [391] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] + // [396] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] __b7_from___b8: - // [391] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy - // [391] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy - // [391] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy + // [396] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy + // [396] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy + // [396] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy jmp __b7 // keyboard_event_scan::@7 __b7: - // [392] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuxx=vbuz1 + // [397] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuxx=vbuz1 ldx.z row - // [393] call keyboard_matrix_read + // [398] call keyboard_matrix_read jsr keyboard_matrix_read - // [394] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + // [399] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 jmp __b19 // keyboard_event_scan::@19 __b19: - // [395] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuaa + // [400] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuaa sta.z row_scan - // [396] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 + // [401] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 lda.z row_scan ldy.z row cmp keyboard_scan_values,y @@ -19093,119 +19195,119 @@ keyboard_event_scan: { jmp __b16 // keyboard_event_scan::@16 __b16: - // [397] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 + // [402] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 lax.z keycode axs #-[8] stx.z keycode - // [398] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] + // [403] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] __b8_from___b15: __b8_from___b16: - // [398] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy - // [398] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy + // [403] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy + // [403] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy jmp __b8 // keyboard_event_scan::@8 __b8: - // [399] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 + // [404] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 inc.z row - // [400] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 + // [405] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z row bne __b7_from___b8 - // [401] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] + // [406] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] __b17_from___b8: jmp __b17 // keyboard_event_scan::@17 __b17: - // [402] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] + // [407] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] keyboard_event_pressed_from___b17: - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_LSHIFT [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuxx=vbuc1 + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_LSHIFT [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuxx=vbuc1 ldx #KEY_LSHIFT jsr keyboard_event_pressed - // [403] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 + // [408] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 jmp __b20 // keyboard_event_scan::@20 __b20: - // [404] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 - // [405] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuaa_eq_0_then_la1 + // [409] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 + // [410] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuaa_eq_0_then_la1 cmp #0 beq __b1_from___b20 - // [406] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] + // [411] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] __b18_from___b20: jmp __b18 // keyboard_event_scan::@18 __b18: - // [407] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] + // [412] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] __b1_from___b18: __b1_from___b20: jmp __b1 // keyboard_event_scan::@1 __b1: - // [408] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] + // [413] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] keyboard_event_pressed_from___b1: - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_RSHIFT [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuxx=vbuc1 + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_RSHIFT [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuxx=vbuc1 ldx #KEY_RSHIFT jsr keyboard_event_pressed - // [409] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 + // [414] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 jmp __b21 // keyboard_event_scan::@21 __b21: - // [410] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 - // [411] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuaa_eq_0_then_la1 + // [415] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 + // [416] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuaa_eq_0_then_la1 cmp #0 beq __b2_from___b21 - // [412] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] + // [417] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] __b4_from___b21: jmp __b4 // keyboard_event_scan::@4 __b4: - // [413] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] + // [418] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] __b2_from___b21: __b2_from___b4: jmp __b2 // keyboard_event_scan::@2 __b2: - // [414] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] + // [419] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] keyboard_event_pressed_from___b2: - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_CTRL [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuxx=vbuc1 + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_CTRL [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuxx=vbuc1 ldx #KEY_CTRL jsr keyboard_event_pressed - // [415] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 + // [420] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 jmp __b22 // keyboard_event_scan::@22 __b22: - // [416] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 - // [417] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuaa_eq_0_then_la1 + // [421] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 + // [422] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuaa_eq_0_then_la1 cmp #0 beq __b3_from___b22 - // [418] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] + // [423] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] __b5_from___b22: jmp __b5 // keyboard_event_scan::@5 __b5: - // [419] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] + // [424] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] __b3_from___b22: __b3_from___b5: jmp __b3 // keyboard_event_scan::@3 __b3: - // [420] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] + // [425] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] keyboard_event_pressed_from___b3: - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_COMMODORE [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuxx=vbuc1 + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_COMMODORE [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuxx=vbuc1 ldx #KEY_COMMODORE jsr keyboard_event_pressed - // [421] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 + // [426] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 jmp __b23 // keyboard_event_scan::@23 __b23: - // [422] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 - // [423] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuaa_eq_0_then_la1 + // [427] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 + // [428] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuaa_eq_0_then_la1 cmp #0 beq __breturn - // [424] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] + // [429] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] __b6_from___b23: jmp __b6 // keyboard_event_scan::@6 @@ -19213,79 +19315,79 @@ keyboard_event_scan: { jmp __breturn // keyboard_event_scan::@return __breturn: - // [425] return + // [430] return rts // Something has changed on the keyboard row - check each column - // [426] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] + // [431] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] __b9_from___b10: - // [426] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy - // [426] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy - // [426] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy + // [431] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy + // [431] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy + // [431] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy jmp __b9 - // [426] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] + // [431] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] __b9_from___b19: - // [426] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy - // [426] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy - // [426] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuxx=vbuc1 + // [431] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy + // [431] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy + // [431] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuxx=vbuc1 ldx #0 jmp __b9 // keyboard_event_scan::@9 __b9: - // [427] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) -- vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 + // [432] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) -- vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 lda.z row_scan ldy.z row eor keyboard_scan_values,y - // [428] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx + // [433] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx and keyboard_matrix_col_bitmask,x - // [429] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuaa_eq_0_then_la1 + // [434] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuaa_eq_0_then_la1 cmp #0 beq __b10_from___b9 jmp __b12 // keyboard_event_scan::@12 __b12: - // [430] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 + // [435] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 lda #8 cmp.z keyboard_events_size beq __b10_from___b12 jmp __b13 // keyboard_event_scan::@13 __b13: - // [431] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx + // [436] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx lda keyboard_matrix_col_bitmask,x and.z row_scan - // [432] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuaa_eq_0_then_la1 + // [437] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuaa_eq_0_then_la1 cmp #0 beq __b11 jmp __b14 // keyboard_event_scan::@14 __b14: - // [433] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 + // [438] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 // Key pressed lda.z keycode ldy.z keyboard_events_size sta keyboard_events,y - // [434] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [439] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc.z keyboard_events_size - // [435] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] + // [440] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] __b10_from___b11: __b10_from___b12: __b10_from___b14: __b10_from___b9: - // [435] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy + // [440] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy jmp __b10 // keyboard_event_scan::@10 __b10: - // [436] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 + // [441] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 inc.z keycode - // [437] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuxx=_inc_vbuxx + // [442] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuxx=_inc_vbuxx inx - // [438] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuxx_neq_vbuc1_then_la1 + // [443] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b9_from___b10 jmp __b15 // keyboard_event_scan::@15 __b15: - // [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [444] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 // Store the current keyboard status for the row to debounce lda.z row_scan ldy.z row @@ -19293,14 +19395,14 @@ keyboard_event_scan: { jmp __b8_from___b15 // keyboard_event_scan::@11 __b11: - // [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuaa=vbuz1_bor_vbuc1 + // [445] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuaa=vbuz1_bor_vbuc1 lda #$40 ora.z keycode - // [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuaa + // [446] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuaa // Key released ldy.z keyboard_events_size sta keyboard_events,y - // [442] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [447] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc.z keyboard_events_size jmp __b10_from___b11 } @@ -19312,16 +19414,16 @@ keyboard_event_scan: { // leading to erroneous readings. You must disable kill the normal interrupt or sei/cli around calls to the keyboard matrix reader. // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { - // [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [448] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x sta CIA1 - // [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + // [449] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff jmp __breturn // keyboard_matrix_read::@return __breturn: - // [445] return + // [450] return rts } // render_show @@ -19329,48 +19431,48 @@ keyboard_matrix_read: { render_show: { .const toD0181_return = (>(PLAYFIELD_SCREEN_1&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f .const toD0182_return = (>(PLAYFIELD_SCREEN_2&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f - // [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 + // [451] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 lda.z render_screen_show cmp #0 beq toD0181_from_render_show - // [447] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] + // [452] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] toD0182_from_render_show: jmp toD0182 // render_show::toD0182 toD0182: - // [448] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] + // [453] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] __b1_from_toD0182: - // [448] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuaa=vbuc1 + // [453] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuaa=vbuc1 lda #toD0182_return jmp __b1 // render_show::@1 __b1: - // [449] *((const nomodify byte*) D018) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuaa + // [454] *((const nomodify byte*) D018) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuaa sta D018 - // [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [455] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z level lda PIECES_COLORS_1,y sta BGCOL2 - // [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [456] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z level lda PIECES_COLORS_2,y sta BGCOL3 - // [452] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 -- vbuz1=vbuz2 + // [457] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 -- vbuz1=vbuz2 lda.z render_screen_show sta.z render_screen_showing jmp __breturn // render_show::@return __breturn: - // [453] return + // [458] return rts - // [454] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] + // [459] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] toD0181_from_render_show: jmp toD0181 // render_show::toD0181 toD0181: - // [448] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] + // [453] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] __b1_from_toD0181: - // [448] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuaa=vbuc1 + // [453] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuaa=vbuc1 lda #toD0181_return jmp __b1 } @@ -19380,40 +19482,40 @@ play_init: { .label pli = $22 // Initialize the playfield line pointers; .label idx = $21 - // [456] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] + // [461] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] __b1_from_play_init: - // [456] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 + // [461] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [456] phi (byte*) play_init::pli#2 = (const byte*) playfield [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 + // [461] phi (byte*) play_init::pli#2 = (const byte*) playfield [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 lda #playfield sta.z pli+1 - // [456] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuyy=vbuc1 + // [461] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuyy=vbuc1 ldy #0 jmp __b1 - // [456] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] + // [461] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] __b1_from___b1: - // [456] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy - // [456] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy - // [456] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy + // [461] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy + // [461] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy + // [461] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy jmp __b1 // play_init::@1 __b1: - // [457] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [462] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax - // [458] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [463] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuxx=pbuz1 lda.z pli sta playfield_lines,x lda.z pli+1 sta playfield_lines+1,x - // [459] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuyy=vbuz1 + // [464] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuyy=vbuz1 lda.z idx sta playfield_lines_idx,y - // [460] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS -- pbuz1=pbuz1_plus_vbuc1 + // [465] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS -- pbuz1=pbuz1_plus_vbuc1 lda #PLAYFIELD_COLS clc adc.z pli @@ -19421,42 +19523,42 @@ play_init: { bcc !+ inc.z pli+1 !: - // [461] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS -- vbuz1=vbuz1_plus_vbuc1 + // [466] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS -- vbuz1=vbuz1_plus_vbuc1 lax.z idx axs #-[PLAYFIELD_COLS] stx.z idx - // [462] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuyy=_inc_vbuyy + // [467] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuyy=_inc_vbuyy iny - // [463] if((byte) play_init::j#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [468] if((byte) play_init::j#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #PLAYFIELD_LINES-1+1 bne __b1_from___b1 jmp __b2 // play_init::@2 __b2: - // [464] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES -- _deref_pbuc1=vbuc2 + // [469] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES -- _deref_pbuc1=vbuc2 lda #PLAYFIELD_COLS*PLAYFIELD_LINES sta playfield_lines_idx+PLAYFIELD_LINES - // [465] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) -- vbuz1=_deref_pbuc1 + // [470] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) -- vbuz1=_deref_pbuc1 // Set initial speed of moving down a tetromino lda MOVEDOWN_SLOW_SPEEDS sta.z current_movedown_slow - // [466] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] + // [471] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] __b3_from___b2: - // [466] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuxx=vbuc1 + // [471] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuxx=vbuc1 ldx #0 jmp __b3 // Set the initial score add values - // [466] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] + // [471] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] __b3_from___b3: - // [466] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy + // [471] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy jmp __b3 // play_init::@3 __b3: - // [467] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [472] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [468] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) -- pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa + // [473] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) -- pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa tay lda SCORE_BASE_BCD,y sta score_add_bcd,y @@ -19466,15 +19568,15 @@ play_init: { sta score_add_bcd+2,y lda SCORE_BASE_BCD+3,y sta score_add_bcd+3,y - // [469] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuxx=_inc_vbuxx + // [474] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuxx=_inc_vbuxx inx - // [470] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuxx_neq_vbuc1_then_la1 + // [475] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne __b3_from___b3 jmp __breturn // play_init::@return __breturn: - // [471] return + // [476] return rts } // sprites_irq_init @@ -19482,36 +19584,36 @@ play_init: { sprites_irq_init: { // asm { sei } sei - // [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [478] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge any IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS // asm { ldaCIA1_INTERRUPT } lda CIA1_INTERRUPT - // [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [480] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR - // [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [481] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT - // [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [482] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT - // [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [483] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line lda #$7f and VIC_CONTROL sta VIC_CONTROL - // [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST -- _deref_pbuc1=vbuc2 + // [484] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST -- _deref_pbuc1=vbuc2 lda #IRQ_RASTER_FIRST sta RASTER - // [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [485] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE - // [481] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 + // [486] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #sprites_init::@1] + // [493] phi from sprites_init to sprites_init::@1 [phi:sprites_init->sprites_init::@1] __b1_from_sprites_init: - // [488] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 + // [493] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 lda #$18+$f*8 sta.z xpos - // [488] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1 + // [493] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1 ldy #0 jmp __b1 - // [488] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] + // [493] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] __b1_from___b1: - // [488] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy - // [488] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy + // [493] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy + // [493] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy jmp __b1 // sprites_init::@1 __b1: - // [489] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [494] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax - // [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1 + // [495] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z xpos sta SPRITES_XPOS,x - // [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK -- pbuc1_derefidx_vbuyy=vbuc2 + // [496] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK -- pbuc1_derefidx_vbuyy=vbuc2 lda #BLACK sta SPRITES_COLS,y - // [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 + // [497] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 lax.z xpos axs #-[$18] stx.z xpos - // [493] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy + // [498] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy iny - // [494] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [499] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #4 bne __b1_from___b1 jmp __breturn // sprites_init::@return __breturn: - // [495] return + // [500] return rts } // render_init @@ -19591,10 +19693,10 @@ render_init: { jmp vicSelectGfxBank1 // render_init::vicSelectGfxBank1 vicSelectGfxBank1: - // [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [502] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR - // [498] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] + // [503] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] vicSelectGfxBank1_toDd001_from_vicSelectGfxBank1: jmp vicSelectGfxBank1_toDd001 // render_init::vicSelectGfxBank1_toDd001 @@ -19602,93 +19704,93 @@ render_init: { jmp vicSelectGfxBank1___b1 // render_init::vicSelectGfxBank1_@1 vicSelectGfxBank1___b1: - // [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [504] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return sta CIA2 jmp __b2 // render_init::@2 __b2: - // [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 + // [505] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Enable Extended Background Color Mode lda #VIC_ECM|VIC_DEN|VIC_RSEL|3 sta D011 - // [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 + // [506] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BORDERCOL - // [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 + // [507] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BGCOL1 - // [503] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) -- _deref_pbuc1=_deref_pbuc2 + // [508] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_1 sta BGCOL2 - // [504] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) -- _deref_pbuc1=_deref_pbuc2 + // [509] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_2 sta BGCOL3 - // [505] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY -- _deref_pbuc1=vbuc2 + // [510] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY -- _deref_pbuc1=vbuc2 lda #GREY sta BGCOL4 - // [506] call render_screen_original + // [511] call render_screen_original // Setup chars on the screens - // [518] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] + // [523] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] render_screen_original_from___b2: - // [518] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_1 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 + // [523] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_1 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1 sta.z render_screen_original.screen+1 jsr render_screen_original - // [507] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] + // [512] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] __b3_from___b2: jmp __b3 // render_init::@3 __b3: - // [508] call render_screen_original - // [518] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] + // [513] call render_screen_original + // [523] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] render_screen_original_from___b3: - // [518] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_2 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 + // [523] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_2 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2 sta.z render_screen_original.screen+1 jsr render_screen_original - // [509] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] + // [514] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] __b1_from___b3: - // [509] phi (byte*) render_init::li_2#2 = (const nomodify byte*) PLAYFIELD_SCREEN_2+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 + // [514] phi (byte*) render_init::li_2#2 = (const nomodify byte*) PLAYFIELD_SCREEN_2+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2+2*$28+$10 sta.z li_2+1 - // [509] phi (byte*) render_init::li_1#2 = (const nomodify byte*) PLAYFIELD_SCREEN_1+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 + // [514] phi (byte*) render_init::li_1#2 = (const nomodify byte*) PLAYFIELD_SCREEN_1+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1+2*$28+$10 sta.z li_1+1 - // [509] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuyy=vbuc1 + // [514] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuyy=vbuc1 ldy #0 jmp __b1 - // [509] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] + // [514] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] __b1_from___b1: - // [509] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy - // [509] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy - // [509] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy + // [514] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy + // [514] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy + // [514] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy jmp __b1 // render_init::@1 __b1: - // [510] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [515] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax - // [511] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [516] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuxx=pbuz1 lda.z li_1 sta screen_lines_1,x lda.z li_1+1 sta screen_lines_1+1,x - // [512] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [517] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuxx=pbuz1 lda.z li_2 sta screen_lines_2,x lda.z li_2+1 sta screen_lines_2+1,x - // [513] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [518] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z li_1 @@ -19696,7 +19798,7 @@ render_init: { bcc !+ inc.z li_1+1 !: - // [514] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [519] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z li_2 @@ -19704,15 +19806,15 @@ render_init: { bcc !+ inc.z li_2+1 !: - // [515] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuyy=_inc_vbuyy + // [520] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuyy=_inc_vbuyy iny - // [516] if((byte) render_init::i#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto render_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [521] if((byte) render_init::i#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto render_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #PLAYFIELD_LINES-1+1 bne __b1_from___b1 jmp __breturn // render_init::@return __breturn: - // [517] return + // [522] return rts } // render_screen_original @@ -19726,184 +19828,184 @@ render_screen_original: { .label oscr = $32 .label ocols = $39 .label y = $2f - // [519] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] + // [524] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] __b1_from_render_screen_original: - // [519] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 + // [524] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 lda #0 sta.z y - // [519] phi (byte*) render_screen_original::ocols#4 = (const to_nomodify byte*) PLAYFIELD_COLORS_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 + // [524] phi (byte*) render_screen_original::ocols#4 = (const to_nomodify byte*) PLAYFIELD_COLORS_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_COLORS_ORIGINAL+$20*2 sta.z ocols+1 - // [519] phi (byte*) render_screen_original::oscr#4 = (const to_nomodify byte*) PLAYFIELD_SCREEN_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 + // [524] phi (byte*) render_screen_original::oscr#4 = (const to_nomodify byte*) PLAYFIELD_SCREEN_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_ORIGINAL+$20*2 sta.z oscr+1 - // [519] phi (byte*) render_screen_original::cols#7 = (const nomodify byte*) COLS [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 + // [524] phi (byte*) render_screen_original::cols#7 = (const nomodify byte*) COLS [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 lda #COLS sta.z cols+1 - // [519] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy + // [524] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy jmp __b1 - // [519] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] + // [524] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] __b1_from___b5: - // [519] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy - // [519] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy - // [519] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy - // [519] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy - // [519] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy + // [524] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy + // [524] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy + // [524] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy + // [524] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy + // [524] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy jmp __b1 // render_screen_original::@1 __b1: - // [520] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] + // [525] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] __b2_from___b1: - // [520] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuxx=vbuc1 + // [525] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuxx=vbuc1 ldx #0 - // [520] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy - // [520] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy + // [525] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy + // [525] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy jmp __b2 - // [520] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] + // [525] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] __b2_from___b2: - // [520] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy - // [520] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy - // [520] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy + // [525] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy + // [525] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy + // [525] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy jmp __b2 // render_screen_original::@2 __b2: - // [521] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 + // [526] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y - // [522] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 + // [527] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [523] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 + // [528] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y - // [524] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 + // [529] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 inc.z cols bne !+ inc.z cols+1 !: - // [525] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuxx=_inc_vbuxx + // [530] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuxx=_inc_vbuxx inx - // [526] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuxx_neq_vbuc1_then_la1 + // [531] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuxx_neq_vbuc1_then_la1 cpx #4 bne __b2_from___b2 - // [527] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] + // [532] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] __b3_from___b2: __b3_from___b3: - // [527] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy - // [527] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy - // [527] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy - // [527] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy - // [527] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy + // [532] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy + // [532] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy + // [532] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy + // [532] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy + // [532] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy jmp __b3 // render_screen_original::@3 __b3: - // [528] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 + // [533] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (oscr),y ldy #0 sta (screen),y - // [529] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 + // [534] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [530] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 + // [535] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 inc.z oscr bne !+ inc.z oscr+1 !: - // [531] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 + // [536] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (ocols),y ldy #0 sta (cols),y - // [532] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 + // [537] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 inc.z cols bne !+ inc.z cols+1 !: - // [533] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 + // [538] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 inc.z ocols bne !+ inc.z ocols+1 !: - // [534] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuxx=_inc_vbuxx + // [539] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuxx=_inc_vbuxx inx - // [535] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuxx_neq_vbuc1_then_la1 + // [540] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #$24 bne __b3_from___b3 - // [536] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] + // [541] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] __b4_from___b3: __b4_from___b4: - // [536] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy - // [536] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy - // [536] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy + // [541] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy + // [541] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy + // [541] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy jmp __b4 // render_screen_original::@4 __b4: - // [537] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 + // [542] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y - // [538] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 + // [543] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [539] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 + // [544] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y - // [540] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 + // [545] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 inc.z cols bne !+ inc.z cols+1 !: - // [541] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuxx=_inc_vbuxx + // [546] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuxx=_inc_vbuxx inx - // [542] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuxx_neq_vbuc1_then_la1 + // [547] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuxx_neq_vbuc1_then_la1 cpx #$28 bne __b4_from___b4 jmp __b5 // render_screen_original::@5 __b5: - // [543] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 + // [548] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 inc.z y - // [544] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 + // [549] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z y bne __b1_from___b5 jmp __breturn // render_screen_original::@return __breturn: - // [545] return + // [550] return rts } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [546] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [551] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // [547] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // [552] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL jmp __breturn // sid_rnd_init::@return __breturn: - // [548] return + // [553] return rts } // sprites_irq @@ -19920,102 +20022,102 @@ sprites_irq: { //(*BGCOL)++; // Clear decimal flag (because it is used by the score algorithm) cld - // [550] (byte) sprites_irq::ypos#0 ← (volatile byte) irq_sprite_ypos -- vbuaa=vbuz1 + // [555] (byte) sprites_irq::ypos#0 ← (volatile byte) irq_sprite_ypos -- vbuaa=vbuz1 // Place the sprites lda.z irq_sprite_ypos - // [551] *((const nomodify byte*) SPRITES_YPOS) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [556] *((const nomodify byte*) SPRITES_YPOS) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS - // [552] *((const nomodify byte*) SPRITES_YPOS+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [557] *((const nomodify byte*) SPRITES_YPOS+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+2 - // [553] *((const nomodify byte*) SPRITES_YPOS+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [558] *((const nomodify byte*) SPRITES_YPOS+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+4 - // [554] *((const nomodify byte*) SPRITES_YPOS+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [559] *((const nomodify byte*) SPRITES_YPOS+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+6 - // [555] (byte~) sprites_irq::$0 ← (volatile byte) irq_raster_next + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [560] (byte~) sprites_irq::$0 ← (volatile byte) irq_raster_next + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx.z irq_raster_next inx - // [556] (volatile byte) sprites_irq::raster_sprite_gfx_modify ← (byte~) sprites_irq::$0 -- vbuz1=vbuxx + // [561] (volatile byte) sprites_irq::raster_sprite_gfx_modify ← (byte~) sprites_irq::$0 -- vbuz1=vbuxx // Wait for the y-position before changing sprite pointers stx.z raster_sprite_gfx_modify jmp __b8 // sprites_irq::@8 __b8: - // [557] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1 + // [562] if(*((const nomodify byte*) RASTER)<(volatile byte) sprites_irq::raster_sprite_gfx_modify) goto sprites_irq::@8 -- _deref_pbuc1_lt_vbuz1_then_la1 lda RASTER cmp.z raster_sprite_gfx_modify bcc __b8 jmp __b9 // sprites_irq::@9 __b9: - // [558] (byte) sprites_irq::ptr#0 ← (volatile byte) irq_sprite_ptr -- vbuxx=vbuz1 + // [563] (byte) sprites_irq::ptr#0 ← (volatile byte) irq_sprite_ptr -- vbuxx=vbuz1 ldx.z irq_sprite_ptr - // [559] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1 + // [564] if((volatile byte) render_screen_showing==(byte) 0) goto sprites_irq::@1 -- vbuz1_eq_0_then_la1 lda.z render_screen_showing cmp #0 beq __b1 jmp __b10 // sprites_irq::@10 __b10: - // [560] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx + // [565] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_2 - // [561] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuaa=_inc_vbuxx + // [566] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0 -- vbuaa=_inc_vbuxx inx txa - // [562] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa + // [567] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 1) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa sta PLAYFIELD_SPRITE_PTRS_2+1 - // [563] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa + // [568] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 2) ← (byte) sprites_irq::ptr#3 -- _deref_pbuc1=vbuaa sta PLAYFIELD_SPRITE_PTRS_2+2 - // [564] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuaa=_inc_vbuaa + // [569] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3 -- vbuaa=_inc_vbuaa clc adc #1 - // [565] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuaa + // [570] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_2+(byte) 3) ← (byte) sprites_irq::ptr#4 -- _deref_pbuc1=vbuaa sta PLAYFIELD_SPRITE_PTRS_2+3 jmp __b2 // sprites_irq::@2 __b2: - // [566] (volatile byte) irq_cnt ← ++ (volatile byte) irq_cnt -- vbuz1=_inc_vbuz1 + // [571] (volatile byte) irq_cnt ← ++ (volatile byte) irq_cnt -- vbuz1=_inc_vbuz1 inc.z irq_cnt - // [567] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1 + // [572] if((volatile byte) irq_cnt==(byte) 9) goto sprites_irq::@3 -- vbuz1_eq_vbuc1_then_la1 lda #9 cmp.z irq_cnt beq __b3 jmp __b6 // sprites_irq::@6 __b6: - // [568] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1 + // [573] if((volatile byte) irq_cnt==(byte) $a) goto sprites_irq::@4 -- vbuz1_eq_vbuc1_then_la1 lda #$a cmp.z irq_cnt beq __b4 jmp __b7 // sprites_irq::@7 __b7: - // [569] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 -- vbuz1=vbuz1_plus_vbuc1 + // [574] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $14 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_raster_next axs #-[$14] stx.z irq_raster_next - // [570] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [575] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_sprite_ypos axs #-[$15] stx.z irq_sprite_ypos - // [571] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [576] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_sprite_ptr axs #-[3] stx.z irq_sprite_ptr jmp __b5 // sprites_irq::@5 __b5: - // [572] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next -- _deref_pbuc1=vbuz1 + // [577] *((const nomodify byte*) RASTER) ← (volatile byte) irq_raster_next -- _deref_pbuc1=vbuz1 // Setup next interrupt lda.z irq_raster_next sta RASTER - // [573] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [578] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge the IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS jmp __breturn // sprites_irq::@return __breturn: - // [574] return - exit interrupt(HARDWARE_CLOBBER) + // [579] return - exit interrupt(HARDWARE_CLOBBER) rega: lda #00 regx: @@ -20023,31 +20125,31 @@ sprites_irq: { rti // sprites_irq::@4 __b4: - // [575] (volatile byte) irq_cnt ← (byte) 0 -- vbuz1=vbuc1 + // [580] (volatile byte) irq_cnt ← (byte) 0 -- vbuz1=vbuc1 lda #0 sta.z irq_cnt - // [576] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST -- vbuz1=vbuc1 + // [581] (volatile byte) irq_raster_next ← (const nomodify byte) IRQ_RASTER_FIRST -- vbuz1=vbuc1 lda #IRQ_RASTER_FIRST sta.z irq_raster_next - // [577] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [582] (volatile byte) irq_sprite_ypos ← (volatile byte) irq_sprite_ypos + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_sprite_ypos axs #-[$15] stx.z irq_sprite_ypos - // [578] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 + // [583] (volatile byte) irq_sprite_ptr ← (volatile byte) irq_sprite_ptr + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_sprite_ptr axs #-[3] stx.z irq_sprite_ptr jmp __b5 // sprites_irq::@3 __b3: - // [579] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 + // [584] (volatile byte) irq_raster_next ← (volatile byte) irq_raster_next + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1 lax.z irq_raster_next axs #-[$15] stx.z irq_raster_next - // [580] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS -- vbuz1=vbuc1 + // [585] (volatile byte) irq_sprite_ypos ← (const nomodify byte) SPRITES_FIRST_YPOS -- vbuz1=vbuc1 lda #SPRITES_FIRST_YPOS sta.z irq_sprite_ypos - // [581] phi from sprites_irq::@3 to sprites_irq::toSpritePtr1 [phi:sprites_irq::@3->sprites_irq::toSpritePtr1] + // [586] phi from sprites_irq::@3 to sprites_irq::toSpritePtr1 [phi:sprites_irq::@3->sprites_irq::toSpritePtr1] toSpritePtr1_from___b3: jmp toSpritePtr1 // sprites_irq::toSpritePtr1 @@ -20055,24 +20157,24 @@ sprites_irq: { jmp __b11 // sprites_irq::@11 __b11: - // [582] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 -- vbuz1=vbuc1 + // [587] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 -- vbuz1=vbuc1 lda #toSpritePtr1_return sta.z irq_sprite_ptr jmp __b5 // sprites_irq::@1 __b1: - // [583] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx + // [588] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1 - // [584] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx + // [589] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx inx - // [585] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx + // [590] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1+1 - // [586] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx + // [591] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1+2 - // [587] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx + // [592] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx inx txa - // [588] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa + // [593] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa sta PLAYFIELD_SPRITE_PTRS_1+3 jmp __b2 } @@ -20278,11 +20380,13 @@ Removing instruction jmp __b17 Removing instruction jmp __b11 Removing instruction jmp __breturn Removing instruction jmp __b4 -Removing instruction jmp __b5 +Removing instruction jmp __b6 Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __breturn Removing instruction jmp __b3 +Removing instruction jmp __b5 +Removing instruction jmp __breturn Removing instruction jmp __b1 Removing instruction jmp __b2 Removing instruction jmp __breturn @@ -20417,7 +20521,8 @@ Replacing label __breturn_from___b6 with __breturn_from___b7 Replacing label __b2_from___b12 with __b2 Replacing label __b2_from___b5 with __b2 Replacing label __b3_from___b2 with __b3 -Replacing label __b5_from___b4 with __b1 +Replacing label __b6_from___b4 with __b1 +Replacing label __b3_from___b2 with __b3 Replacing label __breturn_from_play_update_score with __breturn Replacing label __breturn_from___b1 with __breturn Replacing label __b2_from___b1 with __b2 @@ -20504,10 +20609,11 @@ Removing instruction __b14_from___b9: Removing instruction play_remove_lines_from___b14: Removing instruction __b16_from___b15: Removing instruction __breturn_from___b11: -Removing instruction __b5_from___b4: -Removing instruction __b5: -Removing instruction __b1_from___b5: +Removing instruction __b6_from___b4: +Removing instruction __b6: +Removing instruction __b1_from___b6: Removing instruction __b2_from___b1: +Removing instruction __b3_from___b2: Removing instruction __b2_from___b1: Removing instruction __breturn_from_play_update_score: Removing instruction __breturn_from___b1: @@ -20683,8 +20789,9 @@ Removing instruction play_collision_from_play_spawn_current: Removing instruction __b4: Removing instruction __b1_from___b4: Removing instruction __breturn: -Removing instruction __b3: -Removing instruction __b2_from___b3: +Removing instruction __b5: +Removing instruction __b2_from___b5: +Removing instruction __breturn: Removing instruction __b1: Removing instruction __b2: Removing instruction __b3: @@ -20873,10 +20980,36 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS[] = { (byte) $30, (byte) $2b, (byte) $26, (byte) $21, (byte) $1c, (byte) $17, (byte) $12, (byte) $d, (byte) 8, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 1 } (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const nomodify byte) ORANGE = (byte) 8 (const word*) PIECES[] = { (word)(const byte*) PIECE_T, (word)(const byte*) PIECE_S, (word)(const byte*) PIECE_Z, (word)(const byte*) PIECE_J, (word)(const byte*) PIECE_O, (word)(const byte*) PIECE_I, (word)(const byte*) PIECE_L } (const byte*) PIECES_CHARS[] = { (byte) $65, (byte) $66, (byte) $a6, (byte) $66, (byte) $65, (byte) $65, (byte) $a6 } @@ -20920,10 +21053,8 @@ FINAL SYMBOL TABLE (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte) RED = (byte) 2 (const to_nomodify dword*) SCORE_BASE_BCD[] = { (dword) 0, (dword) $40, (dword) $100, (dword) $300, (dword) $1200 } +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*) 54272 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*) 54290 -(const nomodify word*) SID_VOICE3_FREQ = (word*) 54286 -(const nomodify byte*) SID_VOICE3_OSC = (byte*) 54299 (const nomodify byte*) SPRITES_COLS = (byte*) 53287 (const nomodify byte*) SPRITES_ENABLE = (byte*) 53269 (const nomodify byte*) SPRITES_EXPAND_X = (byte*) 53277 @@ -20959,29 +21090,29 @@ FINAL SYMBOL TABLE (byte) current_orientation#7 current_orientation zp[1]:22 150001.5 (byte*) current_piece (byte*) current_piece#10 current_piece zp[2]:19 8138.27027027027 -(byte*) current_piece#100 current_piece zp[2]:19 11.0 (byte*) current_piece#15 current_piece zp[2]:19 7706.51282051282 (byte*) current_piece#17 current_piece_1 zp[2]:10 1.1400006E7 (byte*) current_piece#28 current_piece zp[2]:19 300003.0 -(byte*) current_piece#92 current_piece zp[2]:19 100001.0 +(byte*) current_piece#91 current_piece zp[2]:19 100001.0 +(byte*) current_piece#94 current_piece_1 zp[2]:10 200002.0 (byte*) current_piece#95 current_piece_1 zp[2]:10 200002.0 (byte*) current_piece#96 current_piece_1 zp[2]:10 200002.0 (byte*) current_piece#97 current_piece_1 zp[2]:10 200002.0 -(byte*) current_piece#98 current_piece_1 zp[2]:10 200002.0 -(byte*) current_piece#99 current_piece_1 zp[2]:10 2000002.0 +(byte*) current_piece#98 current_piece_1 zp[2]:10 2000002.0 +(byte*) current_piece#99 current_piece zp[2]:19 11.0 (byte) current_piece_char (byte) current_piece_char#10 current_piece_char zp[1]:21 1.8182183847272727E8 -(byte) current_piece_char#100 current_piece_char_1 zp[1]:9 202.0 (byte) current_piece_char#16 current_piece_char zp[1]:21 5437.9729729729725 (byte) current_piece_char#29 current_piece_char zp[1]:21 300003.0 -(byte) current_piece_char#5 current_piece_char zp[1]:21 34375.75 +(byte) current_piece_char#5 current_piece_char zp[1]:21 31429.257142857143 (byte) current_piece_char#68 current_piece_char_1 zp[1]:9 47624.42857142857 -(byte) current_piece_char#99 current_piece_char_1 zp[1]:9 22.0 +(byte) current_piece_char#98 current_piece_char_1 zp[1]:9 22.0 +(byte) current_piece_char#99 current_piece_char_1 zp[1]:9 202.0 (byte*) current_piece_gfx -(byte*) current_piece_gfx#111 current_piece_gfx_1 zp[2]:7 11.0 -(byte*) current_piece_gfx#112 current_piece_gfx_1 zp[2]:7 101.0 -(byte*) current_piece_gfx#116 current_piece_gfx zp[2]:23 200002.0 -(byte*) current_piece_gfx#122 current_piece_gfx zp[2]:23 22.0 +(byte*) current_piece_gfx#110 current_piece_gfx_1 zp[2]:7 11.0 +(byte*) current_piece_gfx#111 current_piece_gfx_1 zp[2]:7 101.0 +(byte*) current_piece_gfx#115 current_piece_gfx zp[2]:23 200002.0 +(byte*) current_piece_gfx#121 current_piece_gfx zp[2]:23 22.0 (byte*) current_piece_gfx#13 current_piece_gfx zp[2]:23 1.8182183847272727E8 (byte*) current_piece_gfx#18 current_piece_gfx zp[2]:23 1009.7619047619048 (byte*) current_piece_gfx#20 current_piece_gfx zp[2]:23 15185.37037037037 @@ -20990,9 +21121,9 @@ FINAL SYMBOL TABLE (byte*) current_piece_gfx#64 current_piece_gfx_1 zp[2]:7 47624.42857142857 (byte*) current_piece_gfx#7 current_piece_gfx zp[2]:23 200002.0 (byte) current_xpos -(byte) current_xpos#100 current_xpos zp[1]:25 67742.74193548388 -(byte) current_xpos#118 current_xpos_1 zp[1]:6 7.333333333333333 -(byte) current_xpos#119 current_xpos_1 zp[1]:6 67.33333333333333 +(byte) current_xpos#100 current_xpos zp[1]:25 61765.44117647059 +(byte) current_xpos#117 current_xpos_1 zp[1]:6 7.333333333333333 +(byte) current_xpos#118 current_xpos_1 zp[1]:6 67.33333333333333 (byte) current_xpos#14 current_xpos zp[1]:25 1.8187293036363635E7 (byte) current_xpos#19 current_xpos zp[1]:25 1009.7619047619048 (byte) current_xpos#22 current_xpos zp[1]:25 36400.4 @@ -21007,14 +21138,14 @@ FINAL SYMBOL TABLE (byte) current_ypos#19 current_ypos zp[1]:13 6425.74358974359 (byte) current_ypos#3 current_ypos zp[1]:13 200002.0 (byte) current_ypos#38 current_ypos zp[1]:13 300003.0 -(byte) current_ypos#6 current_ypos zp[1]:13 70000.83333333334 -(byte) current_ypos#97 reg byte x 5.5 -(byte) current_ypos#98 reg byte x 40.4 +(byte) current_ypos#6 current_ypos zp[1]:13 63637.121212121216 +(byte) current_ypos#96 reg byte x 5.5 +(byte) current_ypos#97 reg byte x 40.4 (byte) game_over (byte) game_over#10 game_over zp[1]:27 6567.760869565218 (byte) game_over#15 game_over zp[1]:27 5705.54054054054 (byte) game_over#27 game_over zp[1]:27 300003.0 -(byte) game_over#52 game_over zp[1]:27 47827.13043478261 +(byte) game_over#52 game_over zp[1]:27 42308.61538461538 (byte) game_over#65 game_over zp[1]:27 78572.35714285714 (volatile byte) irq_cnt loadstore zp[1]:46 0.48000000000000004 (volatile byte) irq_raster_next loadstore zp[1]:43 0.44444444444444453 @@ -21428,21 +21559,20 @@ FINAL SYMBOL TABLE (byte) play_remove_lines::y#8 y zp[1]:28 1.3333333346666667E8 (void()) play_spawn_current() (byte~) play_spawn_current::$1 reg byte a 2000002.0 -(byte~) play_spawn_current::$7 zp[1]:52 32258.09677419355 +(byte~) play_spawn_current::$5 reg byte a 2.000000002E9 +(byte~) play_spawn_current::$7 zp[1]:52 29411.79411764706 (label) play_spawn_current::@1 (label) play_spawn_current::@2 (label) play_spawn_current::@3 (label) play_spawn_current::@4 (label) play_spawn_current::@5 +(label) play_spawn_current::@6 (label) play_spawn_current::@return (byte) play_spawn_current::current_piece_idx (byte) play_spawn_current::current_piece_idx#0 reg byte x 1250001.25 (byte) play_spawn_current::piece_idx (byte) play_spawn_current::piece_idx#1 piece_idx zp[1]:26 2.000000002E9 (byte) play_spawn_current::piece_idx#2 piece_idx zp[1]:26 1.000050018E8 -(label) play_spawn_current::sid_rnd1 -(byte) play_spawn_current::sid_rnd1_return -(byte) play_spawn_current::sid_rnd1_return#0 reg byte a 2.000000002E9 (void()) play_update_score((byte) play_update_score::removed) (byte~) play_update_score::$2 reg byte a 2000002.0 (byte~) play_update_score::$4 reg byte a 2000002.0 @@ -21697,6 +21827,11 @@ FINAL SYMBOL TABLE (volatile dword) score_bcd loadstore zp[4]:39 14598.569343065694 (const byte**) screen_lines_1[(const nomodify byte) PLAYFIELD_LINES] = { fill( PLAYFIELD_LINES, 0) } (const byte**) screen_lines_2[(const nomodify byte) PLAYFIELD_LINES] = { fill( PLAYFIELD_LINES, 0) } +(byte()) sid_rnd() +(label) sid_rnd::@return +(byte) sid_rnd::return +(byte) sid_rnd::return#0 reg byte a 3.666666667333333E9 +(byte) sid_rnd::return#2 reg byte a 2.000000002E9 (void()) sid_rnd_init() (label) sid_rnd_init::@return (void()) sprites_init() @@ -21752,15 +21887,15 @@ reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::b reg byte x [ render_screen_render#15 render_screen_render#65 ] reg byte y [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] reg byte x [ render_next::c#2 render_next::c#1 ] -reg byte x [ current_ypos#13 current_ypos#97 current_ypos#98 ] +reg byte x [ current_ypos#13 current_ypos#96 current_ypos#97 ] zp[1]:5 [ render_screen_render#33 render_screen_render#64 render_next::l#7 render_next::l#1 ] -zp[1]:6 [ current_xpos#59 current_xpos#118 current_xpos#119 ] -zp[2]:7 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 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[1]:9 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] +zp[1]:6 [ current_xpos#59 current_xpos#117 current_xpos#118 ] +zp[2]:7 [ current_piece_gfx#64 current_piece_gfx#110 current_piece_gfx#111 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 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[1]:9 [ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] reg byte x [ render_screen_render#22 render_screen_render#63 ] reg byte a [ play_move_rotate::return#2 ] -zp[2]:10 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 play_collision::piece_gfx#0 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] +zp[2]:10 [ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 play_collision::piece_gfx#0 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] reg byte a [ play_collision::return#15 ] @@ -21771,10 +21906,10 @@ zp[2]:14 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp[1]:16 [ level#33 level#10 level#17 level#19 level#21 ] zp[1]:17 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] zp[1]:18 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -zp[2]:19 [ current_piece#28 current_piece#10 current_piece#100 current_piece#15 current_piece#92 ] +zp[2]:19 [ current_piece#28 current_piece#10 current_piece#99 current_piece#15 current_piece#91 ] zp[1]:21 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] zp[1]:22 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -zp[2]:23 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#122 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] +zp[2]:23 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#121 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#115 ] zp[1]:25 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] reg byte x [ play_move_down::return#3 ] zp[1]:26 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] @@ -21852,7 +21987,9 @@ reg byte x [ play_update_score::removed#0 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] reg byte a [ play_collision::return#10 ] reg byte a [ play_spawn_current::$1 ] -reg byte a [ play_spawn_current::sid_rnd1_return#0 ] +reg byte a [ sid_rnd::return#2 ] +reg byte a [ play_spawn_current::$5 ] +reg byte a [ sid_rnd::return#0 ] reg byte a [ play_update_score::$2 ] zp[1]:52 [ play_update_score::lines_before#0 play_spawn_current::$7 ] reg byte a [ play_update_score::$9 ] @@ -21899,7 +22036,7 @@ reg byte a [ sprites_irq::ptr#2 ] FINAL ASSEMBLER -Score: 3348927 +Score: 3350937 // File Comments // Tetris Game for the Commodore 64 @@ -21910,6 +22047,10 @@ Score: 3348927 :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -21953,8 +22094,8 @@ Score: 3348927 .label CIA2 = $dd00 // CIA#1 Interrupt for reading in ASM .label CIA1_INTERRUPT = $dc0d - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f + // The SID MOD 6581/8580 + .label SID = $d400 // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -21979,11 +22120,6 @@ Score: 3348927 .const KEY_CTRL = $3a .const KEY_SPACE = $3c .const KEY_COMMODORE = $3d - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b // Address of the first screen .label PLAYFIELD_SCREEN_1 = $400 // Address of the second screen @@ -22016,6 +22152,9 @@ Score: 3348927 // Right side collision (cell beyond the right side of the playfield) .const COLLISION_RIGHT = 8 .const OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = 2 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .const OFFSET_STRUCT_MOS6526_CIA_PORT_B = 1 .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .const toSpritePtr1_return = PLAYFIELD_SPRITES/$40 @@ -22132,7 +22271,7 @@ main: { sei // render_init() // [16] call render_init - // [496] phi from main::@8 to render_init [phi:main::@8->render_init] + // [501] phi from main::@8 to render_init [phi:main::@8->render_init] jsr render_init // [17] phi from main::@8 to main::@9 [phi:main::@8->main::@9] // main::@9 @@ -22148,7 +22287,7 @@ main: { // main::@11 // play_init() // [22] call play_init - // [455] phi from main::@11 to play_init [phi:main::@11->play_init] + // [460] phi from main::@11 to play_init [phi:main::@11->play_init] jsr play_init // [23] phi from main::@11 to main::@12 [phi:main::@11->main::@12] // main::@12 @@ -22179,30 +22318,30 @@ main: { ldx #$20 jsr render_playfield // main::@15 - // [29] (byte) current_ypos#97 ← (byte) current_ypos#6 -- vbuxx=vbuz1 + // [29] (byte) current_ypos#96 ← (byte) current_ypos#6 -- vbuxx=vbuz1 ldx.z current_ypos - // [30] (byte) current_xpos#118 ← (byte) current_xpos#100 -- vbuz1=vbuz2 + // [30] (byte) current_xpos#117 ← (byte) current_xpos#100 -- vbuz1=vbuz2 lda.z current_xpos sta.z current_xpos_1 - // [31] (byte*) current_piece_gfx#111 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [31] (byte*) current_piece_gfx#110 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece_gfx_1 lda PIECES+1,y sta.z current_piece_gfx_1+1 - // [32] (byte) current_piece_char#99 ← (byte) current_piece_char#5 -- vbuz1=vbuz2 + // [32] (byte) current_piece_char#98 ← (byte) current_piece_char#5 -- vbuz1=vbuz2 lda.z current_piece_char sta.z current_piece_char_1 // render_moving() // [33] call render_moving // [128] phi from main::@15 to render_moving [phi:main::@15->render_moving] - // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#99 [phi:main::@15->render_moving#0] -- register_copy - // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#111 [phi:main::@15->render_moving#1] -- register_copy - // [128] phi (byte) current_xpos#59 = (byte) current_xpos#118 [phi:main::@15->render_moving#2] -- register_copy + // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#98 [phi:main::@15->render_moving#0] -- register_copy + // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#110 [phi:main::@15->render_moving#1] -- register_copy + // [128] phi (byte) current_xpos#59 = (byte) current_xpos#117 [phi:main::@15->render_moving#2] -- register_copy // [128] phi (byte) render_screen_render#33 = (byte) $20 [phi:main::@15->render_moving#3] -- vbuz1=vbuc1 lda #$20 sta.z render_screen_render_1 - // [128] phi (byte) current_ypos#13 = (byte) current_ypos#97 [phi:main::@15->render_moving#4] -- register_copy + // [128] phi (byte) current_ypos#13 = (byte) current_ypos#96 [phi:main::@15->render_moving#4] -- register_copy jsr render_moving // main::@16 // [34] (byte) next_piece_idx#76 ← (byte) play_spawn_current::piece_idx#2 -- vbuyy=vbuz1 @@ -22215,13 +22354,13 @@ main: { ldx #$20 jsr render_next // main::@17 - // [36] (byte*) current_piece#100 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [36] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece lda PIECES+1,y sta.z current_piece+1 - // [37] (byte*) current_piece_gfx#122 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [37] (byte*) current_piece_gfx#121 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 lda PIECES,y sta.z current_piece_gfx lda PIECES+1,y @@ -22243,11 +22382,11 @@ main: { // [38] phi (byte) game_over#10 = (byte) game_over#52 [phi:main::@17->main::@1#6] -- register_copy // [38] phi (byte) current_ypos#11 = (byte) current_ypos#6 [phi:main::@17->main::@1#7] -- register_copy // [38] phi (byte) current_xpos#14 = (byte) current_xpos#100 [phi:main::@17->main::@1#8] -- register_copy - // [38] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#122 [phi:main::@17->main::@1#9] -- register_copy + // [38] phi (byte*) current_piece_gfx#13 = (byte*) current_piece_gfx#121 [phi:main::@17->main::@1#9] -- register_copy // [38] phi (byte) current_orientation#13 = (byte) 0 [phi:main::@17->main::@1#10] -- vbuz1=vbuc1 sta.z current_orientation // [38] phi (byte) current_piece_char#10 = (byte) current_piece_char#5 [phi:main::@17->main::@1#11] -- register_copy - // [38] phi (byte*) current_piece#10 = (byte*) current_piece#100 [phi:main::@17->main::@1#12] -- register_copy + // [38] phi (byte*) current_piece#10 = (byte*) current_piece#99 [phi:main::@17->main::@1#12] -- register_copy // [38] phi (byte) current_movedown_slow#14 = (byte) current_movedown_slow#1 [phi:main::@17->main::@1#13] -- register_copy // [38] phi (byte) render_screen_render#18 = (byte) $20 [phi:main::@17->main::@1#14] -- vbuz1=vbuc1 lda #$20 @@ -22294,7 +22433,7 @@ main: { // keyboard_event_scan() // [43] call keyboard_event_scan // Scan keyboard events - // [390] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] + // [395] phi from main::@18 to keyboard_event_scan [phi:main::@18->keyboard_event_scan] jsr keyboard_event_scan // [44] phi from main::@18 to main::@19 [phi:main::@18->main::@19] // main::@19 @@ -22343,30 +22482,30 @@ main: { // [150] phi (byte) render_screen_render#22 = (byte) render_screen_render#63 [phi:main::@7->render_playfield#0] -- register_copy jsr render_playfield // main::@22 - // [57] (byte) current_ypos#98 ← (byte) current_ypos#19 -- vbuxx=vbuz1 + // [57] (byte) current_ypos#97 ← (byte) current_ypos#19 -- vbuxx=vbuz1 ldx.z current_ypos // [58] (byte) render_screen_render#64 ← (byte) render_screen_render#18 -- vbuz1=vbuz2 lda.z render_screen_render sta.z render_screen_render_1 - // [59] (byte) current_xpos#119 ← (byte) current_xpos#19 -- vbuz1=vbuz2 + // [59] (byte) current_xpos#118 ← (byte) current_xpos#19 -- vbuz1=vbuz2 lda.z current_xpos sta.z current_xpos_1 - // [60] (byte*) current_piece_gfx#112 ← (byte*) current_piece_gfx#18 -- pbuz1=pbuz2 + // [60] (byte*) current_piece_gfx#111 ← (byte*) current_piece_gfx#18 -- pbuz1=pbuz2 lda.z current_piece_gfx sta.z current_piece_gfx_1 lda.z current_piece_gfx+1 sta.z current_piece_gfx_1+1 - // [61] (byte) current_piece_char#100 ← (byte) current_piece_char#16 -- vbuz1=vbuz2 + // [61] (byte) current_piece_char#99 ← (byte) current_piece_char#16 -- vbuz1=vbuz2 lda.z current_piece_char sta.z current_piece_char_1 // render_moving() // [62] call render_moving // [128] phi from main::@22 to render_moving [phi:main::@22->render_moving] - // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#100 [phi:main::@22->render_moving#0] -- register_copy - // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#112 [phi:main::@22->render_moving#1] -- register_copy - // [128] phi (byte) current_xpos#59 = (byte) current_xpos#119 [phi:main::@22->render_moving#2] -- register_copy + // [128] phi (byte) current_piece_char#68 = (byte) current_piece_char#99 [phi:main::@22->render_moving#0] -- register_copy + // [128] phi (byte*) current_piece_gfx#64 = (byte*) current_piece_gfx#111 [phi:main::@22->render_moving#1] -- register_copy + // [128] phi (byte) current_xpos#59 = (byte) current_xpos#118 [phi:main::@22->render_moving#2] -- register_copy // [128] phi (byte) render_screen_render#33 = (byte) render_screen_render#64 [phi:main::@22->render_moving#3] -- register_copy - // [128] phi (byte) current_ypos#13 = (byte) current_ypos#98 [phi:main::@22->render_moving#4] -- register_copy + // [128] phi (byte) current_ypos#13 = (byte) current_ypos#97 [phi:main::@22->render_moving#4] -- register_copy jsr render_moving // main::@23 // [63] (byte) render_screen_render#65 ← (byte) render_screen_render#18 -- vbuxx=vbuz1 @@ -23052,7 +23191,7 @@ play_move_rotate: { sta.z play_collision.ypos // [190] (byte) play_collision::orientation#3 ← (byte) play_move_rotate::orientation#3 -- vbuxx=vbuz1 ldx.z orientation - // [191] (byte*) current_piece#98 ← (byte*) current_piece#15 -- pbuz1=pbuz2 + // [191] (byte*) current_piece#97 ← (byte*) current_piece#15 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -23063,7 +23202,7 @@ play_move_rotate: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#3 [phi:play_move_rotate::@3->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#3 [phi:play_move_rotate::@3->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#3 [phi:play_move_rotate::@3->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#98 [phi:play_move_rotate::@3->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#97 [phi:play_move_rotate::@3->play_collision#3] -- register_copy jsr play_collision // play_collision(current_xpos, current_ypos, orientation) // [193] (byte) play_collision::return#14 ← (byte) play_collision::return#15 @@ -23290,7 +23429,7 @@ play_move_leftright: { sta.z play_collision.ypos // [228] (byte) play_collision::orientation#2 ← (byte) current_orientation#20 -- vbuxx=vbuz1 ldx.z current_orientation - // [229] (byte*) current_piece#97 ← (byte*) current_piece#15 -- pbuz1=pbuz2 + // [229] (byte*) current_piece#96 ← (byte*) current_piece#15 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -23301,7 +23440,7 @@ play_move_leftright: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#2 [phi:play_move_leftright::@3->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#2 [phi:play_move_leftright::@3->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#2 [phi:play_move_leftright::@3->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#97 [phi:play_move_leftright::@3->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#96 [phi:play_move_leftright::@3->play_collision#3] -- register_copy jsr play_collision // play_collision(current_xpos+1,current_ypos,current_orientation) // [231] (byte) play_collision::return#13 ← (byte) play_collision::return#15 @@ -23342,7 +23481,7 @@ play_move_leftright: { sta.z play_collision.ypos // [239] (byte) play_collision::orientation#1 ← (byte) current_orientation#20 -- vbuxx=vbuz1 ldx.z current_orientation - // [240] (byte*) current_piece#96 ← (byte*) current_piece#15 -- pbuz1=pbuz2 + // [240] (byte*) current_piece#95 ← (byte*) current_piece#15 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -23353,7 +23492,7 @@ play_move_leftright: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#1 [phi:play_move_leftright::@1->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#1 [phi:play_move_leftright::@1->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#1 [phi:play_move_leftright::@1->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#96 [phi:play_move_leftright::@1->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#95 [phi:play_move_leftright::@1->play_collision#3] -- register_copy jsr play_collision // play_collision(current_xpos-1,current_ypos,current_orientation) // [242] (byte) play_collision::return#1 ← (byte) play_collision::return#15 @@ -23398,8 +23537,8 @@ play_move_down: { __b1: // keyboard_event_pressed(KEY_SPACE) // [250] call keyboard_event_pressed - // [379] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_SPACE [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuxx=vbuc1 + // [384] phi from play_move_down::@1 to keyboard_event_pressed [phi:play_move_down::@1->keyboard_event_pressed] + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_SPACE [phi:play_move_down::@1->keyboard_event_pressed#0] -- vbuxx=vbuc1 ldx #KEY_SPACE jsr keyboard_event_pressed // keyboard_event_pressed(KEY_SPACE) @@ -23453,7 +23592,7 @@ play_move_down: { sta.z play_collision.xpos // [263] (byte) play_collision::orientation#0 ← (byte) current_orientation#13 -- vbuxx=vbuz1 ldx.z current_orientation - // [264] (byte*) current_piece#95 ← (byte*) current_piece#10 -- pbuz1=pbuz2 + // [264] (byte*) current_piece#94 ← (byte*) current_piece#10 -- pbuz1=pbuz2 lda.z current_piece sta.z current_piece_1 lda.z current_piece+1 @@ -23464,7 +23603,7 @@ play_move_down: { // [200] phi (byte) play_collision::xpos#6 = (byte) play_collision::xpos#0 [phi:play_move_down::@8->play_collision#0] -- register_copy // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#0 [phi:play_move_down::@8->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) play_collision::orientation#0 [phi:play_move_down::@8->play_collision#2] -- register_copy - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#95 [phi:play_move_down::@8->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#94 [phi:play_move_down::@8->play_collision#3] -- register_copy jsr play_collision // play_collision(current_xpos,current_ypos+1,current_orientation) // [266] (byte) play_collision::return#0 ← (byte) play_collision::return#15 @@ -23484,7 +23623,7 @@ play_move_down: { // play_move_down::@14 // play_remove_lines() // [272] call play_remove_lines - // [338] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] + // [343] phi from play_move_down::@14 to play_remove_lines [phi:play_move_down::@14->play_remove_lines] jsr play_remove_lines // play_remove_lines() // [273] (byte) play_remove_lines::return#0 ← (byte) play_remove_lines::removed#7 -- vbuaa=vbuz1 @@ -23508,13 +23647,13 @@ play_move_down: { // [285] phi (byte) next_piece_idx#17 = (byte) next_piece_idx#10 [phi:play_move_down::@16->play_spawn_current#1] -- register_copy jsr play_spawn_current // play_move_down::@17 - // [279] (byte*) current_piece#92 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [279] (byte*) current_piece#91 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z play_spawn_current.__7 lda PIECES,y sta.z current_piece lda PIECES+1,y sta.z current_piece+1 - // [280] (byte*) current_piece_gfx#116 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [280] (byte*) current_piece_gfx#115 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 lda PIECES,y sta.z current_piece_gfx lda PIECES+1,y @@ -23523,12 +23662,12 @@ play_move_down: { // [281] phi (byte) next_piece_idx#30 = (byte) play_spawn_current::piece_idx#2 [phi:play_move_down::@17->play_move_down::@11#0] -- register_copy // [281] phi (byte) game_over#27 = (byte) game_over#52 [phi:play_move_down::@17->play_move_down::@11#1] -- register_copy // [281] phi (byte) current_xpos#43 = (byte) current_xpos#100 [phi:play_move_down::@17->play_move_down::@11#2] -- register_copy - // [281] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#116 [phi:play_move_down::@17->play_move_down::@11#3] -- register_copy + // [281] phi (byte*) current_piece_gfx#35 = (byte*) current_piece_gfx#115 [phi:play_move_down::@17->play_move_down::@11#3] -- register_copy // [281] phi (byte) current_orientation#37 = (byte) 0 [phi:play_move_down::@17->play_move_down::@11#4] -- vbuz1=vbuc1 lda #0 sta.z current_orientation // [281] phi (byte) current_piece_char#29 = (byte) current_piece_char#5 [phi:play_move_down::@17->play_move_down::@11#5] -- register_copy - // [281] phi (byte*) current_piece#28 = (byte*) current_piece#92 [phi:play_move_down::@17->play_move_down::@11#6] -- register_copy + // [281] phi (byte*) current_piece#28 = (byte*) current_piece#91 [phi:play_move_down::@17->play_move_down::@11#6] -- register_copy // [281] phi (byte) level_bcd#31 = (byte) level_bcd#19 [phi:play_move_down::@17->play_move_down::@11#7] -- register_copy // [281] phi (byte) current_movedown_slow#37 = (byte) current_movedown_slow#23 [phi:play_move_down::@17->play_move_down::@11#8] -- register_copy // [281] phi (byte) level#33 = (byte) level#19 [phi:play_move_down::@17->play_move_down::@11#9] -- register_copy @@ -23632,7 +23771,7 @@ play_spawn_current: { // [292] (byte) play_collision::ypos#4 ← (byte) current_ypos#6 -- vbuz1=vbuz2 lda.z current_ypos sta.z play_collision.ypos - // [293] (byte*) current_piece#99 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 + // [293] (byte*) current_piece#98 ← (byte*)*((const word*) PIECES + (byte~) play_spawn_current::$7) -- pbuz1=pptc1_derefidx_vbuz2 ldy.z __7 lda PIECES,y sta.z current_piece_1 @@ -23645,24 +23784,24 @@ play_spawn_current: { // [200] phi (byte) play_collision::yp#0 = (byte) play_collision::ypos#4 [phi:play_spawn_current->play_collision#1] -- register_copy // [200] phi (byte) play_collision::orientation#5 = (byte) 0 [phi:play_spawn_current->play_collision#2] -- vbuxx=vbuc1 ldx #0 - // [200] phi (byte*) current_piece#17 = (byte*) current_piece#99 [phi:play_spawn_current->play_collision#3] -- register_copy + // [200] phi (byte*) current_piece#17 = (byte*) current_piece#98 [phi:play_spawn_current->play_collision#3] -- register_copy jsr play_collision // play_collision(current_xpos,current_ypos,current_orientation) // [295] (byte) play_collision::return#10 ← (byte) play_collision::return#15 // play_spawn_current::@4 // [296] (byte~) play_spawn_current::$1 ← (byte) play_collision::return#10 // if(play_collision(current_xpos,current_ypos,current_orientation)==COLLISION_PLAYFIELD) - // [297] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@5 -- vbuaa_neq_vbuc1_then_la1 + // [297] if((byte~) play_spawn_current::$1!=(const nomodify byte) COLLISION_PLAYFIELD) goto play_spawn_current::@6 -- vbuaa_neq_vbuc1_then_la1 cmp #COLLISION_PLAYFIELD bne __b1 // [299] phi from play_spawn_current::@4 to play_spawn_current::@1 [phi:play_spawn_current::@4->play_spawn_current::@1] // [299] phi (byte) game_over#52 = (byte) 1 [phi:play_spawn_current::@4->play_spawn_current::@1#0] -- vbuz1=vbuc1 lda #1 sta.z game_over - // [298] phi from play_spawn_current::@4 to play_spawn_current::@5 [phi:play_spawn_current::@4->play_spawn_current::@5] - // play_spawn_current::@5 - // [299] phi from play_spawn_current::@5 to play_spawn_current::@1 [phi:play_spawn_current::@5->play_spawn_current::@1] - // [299] phi (byte) game_over#52 = (byte) game_over#65 [phi:play_spawn_current::@5->play_spawn_current::@1#0] -- register_copy + // [298] phi from play_spawn_current::@4 to play_spawn_current::@6 [phi:play_spawn_current::@4->play_spawn_current::@6] + // play_spawn_current::@6 + // [299] phi from play_spawn_current::@6 to play_spawn_current::@1 [phi:play_spawn_current::@6->play_spawn_current::@1] + // [299] phi (byte) game_over#52 = (byte) game_over#65 [phi:play_spawn_current::@6->play_spawn_current::@1#0] -- register_copy // play_spawn_current::@1 __b1: // [300] phi from play_spawn_current::@1 to play_spawn_current::@2 [phi:play_spawn_current::@1->play_spawn_current::@2] @@ -23672,27 +23811,42 @@ play_spawn_current: { // play_spawn_current::@2 __b2: // while(piece_idx==7) - // [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::sid_rnd1 -- vbuz1_eq_vbuc1_then_la1 + // [301] if((byte) play_spawn_current::piece_idx#2==(byte) 7) goto play_spawn_current::@3 -- vbuz1_eq_vbuc1_then_la1 lda #7 cmp.z piece_idx - beq sid_rnd1 + beq __b3 // play_spawn_current::@return // } // [302] return rts - // play_spawn_current::sid_rnd1 - sid_rnd1: - // return *SID_VOICE3_OSC; - // [303] (byte) play_spawn_current::sid_rnd1_return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // [303] phi from play_spawn_current::@2 to play_spawn_current::@3 [phi:play_spawn_current::@2->play_spawn_current::@3] // play_spawn_current::@3 + __b3: + // sid_rnd() + // [304] call sid_rnd + jsr sid_rnd + // [305] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 + // play_spawn_current::@5 + // [306] (byte~) play_spawn_current::$5 ← (byte) sid_rnd::return#2 // piece_idx = sid_rnd()&7 - // [304] (byte) play_spawn_current::piece_idx#1 ← (byte) play_spawn_current::sid_rnd1_return#0 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 + // [307] (byte) play_spawn_current::piece_idx#1 ← (byte~) play_spawn_current::$5 & (byte) 7 -- vbuz1=vbuaa_band_vbuc1 and #7 sta.z piece_idx - // [300] phi from play_spawn_current::@3 to play_spawn_current::@2 [phi:play_spawn_current::@3->play_spawn_current::@2] - // [300] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@3->play_spawn_current::@2#0] -- register_copy + // [300] phi from play_spawn_current::@5 to play_spawn_current::@2 [phi:play_spawn_current::@5->play_spawn_current::@2] + // [300] phi (byte) play_spawn_current::piece_idx#2 = (byte) play_spawn_current::piece_idx#1 [phi:play_spawn_current::@5->play_spawn_current::@2#0] -- register_copy jmp __b2 +} + // sid_rnd +// Get a random number from the SID voice 3, +// Must be initialized with sid_rnd_init() +sid_rnd: { + // return SID->CH3_OSC; + // [308] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuaa=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC + // sid_rnd::@return + // } + // [309] return + rts } // play_update_score // Update the score based on the number of lines removed @@ -23701,23 +23855,23 @@ play_update_score: { .label lines_before = $34 .label add_bcd = $35 // if(removed!=0) - // [305] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuxx_eq_0_then_la1 + // [310] if((byte) play_update_score::removed#0==(byte) 0) goto play_update_score::@return -- vbuxx_eq_0_then_la1 cpx #0 beq __breturn // play_update_score::@1 // play_update_score::@2] + // [322] phi from play_update_score::@1 to play_update_score::@2 [phi:play_update_score::@1->play_update_score::@2] // play_update_score::@2 // play_increase_level() - // [318] call play_increase_level + // [323] call play_increase_level jsr play_increase_level - // [319] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] - // [319] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy - // [319] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy - // [319] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy - // [319] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy + // [324] phi from play_update_score play_update_score::@1 play_update_score::@2 to play_update_score::@return [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return] + // [324] phi (byte) level_bcd#19 = (byte) level_bcd#11 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#0] -- register_copy + // [324] phi (byte) current_movedown_slow#23 = (byte) current_movedown_slow#14 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#1] -- register_copy + // [324] phi (byte) level#19 = (byte) level#10 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#2] -- register_copy + // [324] phi (word) lines_bcd#17 = (word) lines_bcd#19 [phi:play_update_score/play_update_score::@1/play_update_score::@2->play_update_score::@return#3] -- register_copy // play_update_score::@return __breturn: // } - // [320] return + // [325] return rts } // play_increase_level // Increase the level play_increase_level: { // level++; - // [321] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 + // [326] (byte) level#21 ← ++ (byte) level#10 -- vbuz1=_inc_vbuz1 inc.z level // if(level>29) - // [322] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 + // [327] if((byte) level#21>=(byte) $1d+(byte) 1) goto play_increase_level::@1 -- vbuz1_ge_vbuc1_then_la1 // Update speed of moving tetrominos down lda.z level cmp #$1d+1 bcs __b3 // play_increase_level::@3 // current_movedown_slow = MOVEDOWN_SLOW_SPEEDS[level] - // [323] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 + // [328] (byte) current_movedown_slow#10 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS + (byte) level#21) -- vbuz1=pbuc1_derefidx_vbuz2 tay lda MOVEDOWN_SLOW_SPEEDS,y sta.z current_movedown_slow - // [324] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] - // [324] phi (byte) current_movedown_slow#65 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy + // [329] phi from play_increase_level::@3 to play_increase_level::@1 [phi:play_increase_level::@3->play_increase_level::@1] + // [329] phi (byte) current_movedown_slow#65 = (byte) current_movedown_slow#10 [phi:play_increase_level::@3->play_increase_level::@1#0] -- register_copy jmp __b1 - // [324] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] + // [329] phi from play_increase_level to play_increase_level::@1 [phi:play_increase_level->play_increase_level::@1] __b3: - // [324] phi (byte) current_movedown_slow#65 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 + // [329] phi (byte) current_movedown_slow#65 = (byte) 1 [phi:play_increase_level->play_increase_level::@1#0] -- vbuz1=vbuc1 lda #1 sta.z current_movedown_slow // play_increase_level::@1 __b1: // level_bcd++; - // [325] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 + // [330] (byte) level_bcd#21 ← ++ (byte) level_bcd#11 -- vbuz1=_inc_vbuz1 inc.z level_bcd // level_bcd&0xf - // [326] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 + // [331] (byte~) play_increase_level::$1 ← (byte) level_bcd#21 & (byte) $f -- vbuaa=vbuz1_band_vbuc1 lda #$f and.z level_bcd // if((level_bcd&0xf)==0xa) - // [327] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuaa_neq_vbuc1_then_la1 + // [332] if((byte~) play_increase_level::$1!=(byte) $a) goto play_increase_level::@2 -- vbuaa_neq_vbuc1_then_la1 cmp #$a bne __b2 // play_increase_level::@4 // level_bcd += 6 - // [328] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 + // [333] (byte) level_bcd#8 ← (byte) level_bcd#21 + (byte) 6 -- vbuz1=vbuz1_plus_vbuc1 // If level low nybble hits 0xa change to 0x10 lax.z level_bcd axs #-[6] stx.z level_bcd - // [329] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] - // [329] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy + // [334] phi from play_increase_level::@1 play_increase_level::@4 to play_increase_level::@2 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2] + // [334] phi (byte) level_bcd#62 = (byte) level_bcd#21 [phi:play_increase_level::@1/play_increase_level::@4->play_increase_level::@2#0] -- register_copy // play_increase_level::@2 __b2: // asm // asm { sed } // Increase the score values gained sed - // [331] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] - // [331] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuxx=vbuc1 + // [336] phi from play_increase_level::@2 to play_increase_level::@5 [phi:play_increase_level::@2->play_increase_level::@5] + // [336] phi (byte) play_increase_level::b#2 = (byte) 0 [phi:play_increase_level::@2->play_increase_level::@5#0] -- vbuxx=vbuc1 ldx #0 - // [331] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] - // [331] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy + // [336] phi from play_increase_level::@5 to play_increase_level::@5 [phi:play_increase_level::@5->play_increase_level::@5] + // [336] phi (byte) play_increase_level::b#2 = (byte) play_increase_level::b#1 [phi:play_increase_level::@5->play_increase_level::@5#0] -- register_copy // play_increase_level::@5 __b5: // score_add_bcd[b] += SCORE_BASE_BCD[b] - // [332] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [337] (byte~) play_increase_level::$5 ← (byte) play_increase_level::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [333] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa + // [338] *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) ← *((const dword*) score_add_bcd + (byte~) play_increase_level::$5) + *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_increase_level::$5) -- pduc1_derefidx_vbuaa=pduc1_derefidx_vbuaa_plus_pduc2_derefidx_vbuaa tay clc lda score_add_bcd,y @@ -23865,9 +24019,9 @@ play_increase_level: { adc SCORE_BASE_BCD+3,y sta score_add_bcd+3,y // for(char b: 0..4) - // [334] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuxx=_inc_vbuxx + // [339] (byte) play_increase_level::b#1 ← ++ (byte) play_increase_level::b#2 -- vbuxx=_inc_vbuxx inx - // [335] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuxx_neq_vbuc1_then_la1 + // [340] if((byte) play_increase_level::b#1!=(byte) 5) goto play_increase_level::@5 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne __b5 // play_increase_level::@6 @@ -23876,7 +24030,7 @@ play_increase_level: { cld // play_increase_level::@return // } - // [337] return + // [342] return rts } // play_remove_lines @@ -23890,121 +24044,121 @@ play_remove_lines: { .label y = $1c .label removed = $1d .label full = $1f - // [339] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] - // [339] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 + // [344] phi from play_remove_lines to play_remove_lines::@1 [phi:play_remove_lines->play_remove_lines::@1] + // [344] phi (byte) play_remove_lines::removed#11 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#0] -- vbuz1=vbuc1 lda #0 sta.z removed - // [339] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 + // [344] phi (byte) play_remove_lines::y#8 = (byte) 0 [phi:play_remove_lines->play_remove_lines::@1#1] -- vbuz1=vbuc1 sta.z y - // [339] phi (byte) play_remove_lines::w#12 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuxx=vbuc1 + // [344] phi (byte) play_remove_lines::w#12 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#2] -- vbuxx=vbuc1 ldx #PLAYFIELD_LINES*PLAYFIELD_COLS-1 - // [339] phi (byte) play_remove_lines::r#3 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuyy=vbuc1 + // [344] phi (byte) play_remove_lines::r#3 = (const nomodify byte) PLAYFIELD_LINES*(const nomodify byte) PLAYFIELD_COLS-(byte) 1 [phi:play_remove_lines->play_remove_lines::@1#3] -- vbuyy=vbuc1 ldy #PLAYFIELD_LINES*PLAYFIELD_COLS-1 // Read all lines and rewrite them - // [339] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] - // [339] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#7 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy - // [339] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy - // [339] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy - // [339] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy + // [344] phi from play_remove_lines::@6 to play_remove_lines::@1 [phi:play_remove_lines::@6->play_remove_lines::@1] + // [344] phi (byte) play_remove_lines::removed#11 = (byte) play_remove_lines::removed#7 [phi:play_remove_lines::@6->play_remove_lines::@1#0] -- register_copy + // [344] phi (byte) play_remove_lines::y#8 = (byte) play_remove_lines::y#1 [phi:play_remove_lines::@6->play_remove_lines::@1#1] -- register_copy + // [344] phi (byte) play_remove_lines::w#12 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6->play_remove_lines::@1#2] -- register_copy + // [344] phi (byte) play_remove_lines::r#3 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@6->play_remove_lines::@1#3] -- register_copy // play_remove_lines::@1 __b1: - // [340] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] - // [340] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 + // [345] phi from play_remove_lines::@1 to play_remove_lines::@2 [phi:play_remove_lines::@1->play_remove_lines::@2] + // [345] phi (byte) play_remove_lines::full#4 = (byte) 1 [phi:play_remove_lines::@1->play_remove_lines::@2#0] -- vbuz1=vbuc1 lda #1 sta.z full - // [340] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 + // [345] phi (byte) play_remove_lines::x#2 = (byte) 0 [phi:play_remove_lines::@1->play_remove_lines::@2#1] -- vbuz1=vbuc1 lda #0 sta.z x - // [340] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy - // [340] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy - // [340] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] - // [340] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy - // [340] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy - // [340] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy - // [340] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy + // [345] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#12 [phi:play_remove_lines::@1->play_remove_lines::@2#2] -- register_copy + // [345] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#3 [phi:play_remove_lines::@1->play_remove_lines::@2#3] -- register_copy + // [345] phi from play_remove_lines::@3 to play_remove_lines::@2 [phi:play_remove_lines::@3->play_remove_lines::@2] + // [345] phi (byte) play_remove_lines::full#4 = (byte) play_remove_lines::full#2 [phi:play_remove_lines::@3->play_remove_lines::@2#0] -- register_copy + // [345] phi (byte) play_remove_lines::x#2 = (byte) play_remove_lines::x#1 [phi:play_remove_lines::@3->play_remove_lines::@2#1] -- register_copy + // [345] phi (byte) play_remove_lines::w#4 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@3->play_remove_lines::@2#2] -- register_copy + // [345] phi (byte) play_remove_lines::r#2 = (byte) play_remove_lines::r#1 [phi:play_remove_lines::@3->play_remove_lines::@2#3] -- register_copy // play_remove_lines::@2 __b2: // c = playfield[r--] - // [341] (byte) play_remove_lines::c#0 ← *((const byte*) playfield + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuyy + // [346] (byte) play_remove_lines::c#0 ← *((const byte*) playfield + (byte) play_remove_lines::r#2) -- vbuz1=pbuc1_derefidx_vbuyy lda playfield,y sta.z c - // [342] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuyy=_dec_vbuyy + // [347] (byte) play_remove_lines::r#1 ← -- (byte) play_remove_lines::r#2 -- vbuyy=_dec_vbuyy dey // if(c==0) - // [343] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 + // [348] if((byte) play_remove_lines::c#0!=(byte) 0) goto play_remove_lines::@9 -- vbuz1_neq_0_then_la1 cmp #0 bne __b3 - // [345] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] - // [345] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 + // [350] phi from play_remove_lines::@2 to play_remove_lines::@3 [phi:play_remove_lines::@2->play_remove_lines::@3] + // [350] phi (byte) play_remove_lines::full#2 = (byte) 0 [phi:play_remove_lines::@2->play_remove_lines::@3#0] -- vbuz1=vbuc1 lda #0 sta.z full - // [344] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] + // [349] phi from play_remove_lines::@2 to play_remove_lines::@9 [phi:play_remove_lines::@2->play_remove_lines::@9] // play_remove_lines::@9 - // [345] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] - // [345] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy + // [350] phi from play_remove_lines::@9 to play_remove_lines::@3 [phi:play_remove_lines::@9->play_remove_lines::@3] + // [350] phi (byte) play_remove_lines::full#2 = (byte) play_remove_lines::full#4 [phi:play_remove_lines::@9->play_remove_lines::@3#0] -- register_copy // play_remove_lines::@3 __b3: // playfield[w--] = c - // [346] *((const byte*) playfield + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuxx=vbuz1 + // [351] *((const byte*) playfield + (byte) play_remove_lines::w#4) ← (byte) play_remove_lines::c#0 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z c sta playfield,x // playfield[w--] = c; - // [347] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuxx=_dec_vbuxx + // [352] (byte) play_remove_lines::w#1 ← -- (byte) play_remove_lines::w#4 -- vbuxx=_dec_vbuxx dex // for(char x:0..PLAYFIELD_COLS-1) - // [348] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 + // [353] (byte) play_remove_lines::x#1 ← ++ (byte) play_remove_lines::x#2 -- vbuz1=_inc_vbuz1 inc.z x - // [349] if((byte) play_remove_lines::x#1!=(const nomodify byte) PLAYFIELD_COLS-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 + // [354] if((byte) play_remove_lines::x#1!=(const nomodify byte) PLAYFIELD_COLS-(byte) 1+(byte) 1) goto play_remove_lines::@2 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_COLS-1+1 cmp.z x bne __b2 // play_remove_lines::@4 // if(full==1) - // [350] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 + // [355] if((byte) play_remove_lines::full#2!=(byte) 1) goto play_remove_lines::@6 -- vbuz1_neq_vbuc1_then_la1 lda #1 cmp.z full bne __b6 // play_remove_lines::@5 // w = w + PLAYFIELD_COLS - // [351] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS -- vbuxx=vbuxx_plus_vbuc1 + // [356] (byte) play_remove_lines::w#2 ← (byte) play_remove_lines::w#1 + (const nomodify byte) PLAYFIELD_COLS -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[PLAYFIELD_COLS] // removed++; - // [352] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 + // [357] (byte) play_remove_lines::removed#1 ← ++ (byte) play_remove_lines::removed#11 -- vbuz1=_inc_vbuz1 inc.z removed - // [353] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] - // [353] phi (byte) play_remove_lines::removed#7 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy - // [353] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy + // [358] phi from play_remove_lines::@4 play_remove_lines::@5 to play_remove_lines::@6 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6] + // [358] phi (byte) play_remove_lines::removed#7 = (byte) play_remove_lines::removed#11 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#0] -- register_copy + // [358] phi (byte) play_remove_lines::w#11 = (byte) play_remove_lines::w#1 [phi:play_remove_lines::@4/play_remove_lines::@5->play_remove_lines::@6#1] -- register_copy // play_remove_lines::@6 __b6: // for(char y:0..PLAYFIELD_LINES-1) - // [354] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 + // [359] (byte) play_remove_lines::y#1 ← ++ (byte) play_remove_lines::y#8 -- vbuz1=_inc_vbuz1 inc.z y - // [355] if((byte) play_remove_lines::y#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 + // [360] if((byte) play_remove_lines::y#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_remove_lines::@1 -- vbuz1_neq_vbuc1_then_la1 lda #PLAYFIELD_LINES-1+1 cmp.z y bne __b1 - // [356] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] + // [361] phi from play_remove_lines::@6 play_remove_lines::@8 to play_remove_lines::@7 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7] __b4: - // [356] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy + // [361] phi (byte) play_remove_lines::w#6 = (byte) play_remove_lines::w#11 [phi:play_remove_lines::@6/play_remove_lines::@8->play_remove_lines::@7#0] -- register_copy // Write zeros in the rest of the lines // play_remove_lines::@7 // while(w!=0xff) - // [357] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuxx_neq_vbuc1_then_la1 + // [362] if((byte) play_remove_lines::w#6!=(byte) $ff) goto play_remove_lines::@8 -- vbuxx_neq_vbuc1_then_la1 cpx #$ff bne __b8 // play_remove_lines::@return // } - // [358] return + // [363] return rts // play_remove_lines::@8 __b8: // playfield[w--] = 0 - // [359] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 + // [364] *((const byte*) playfield + (byte) play_remove_lines::w#6) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2 lda #0 sta playfield,x // playfield[w--] = 0; - // [360] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuxx=_dec_vbuxx + // [365] (byte) play_remove_lines::w#3 ← -- (byte) play_remove_lines::w#6 -- vbuxx=_dec_vbuxx dex jmp __b4 } @@ -24018,98 +24172,98 @@ play_lock_current: { .label l = $3c .label i_1 = $1e // yp = current_ypos - // [361] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 - // [362] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] - // [362] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 + // [366] (byte) play_lock_current::yp#0 ← (byte) current_ypos#11 + // [367] phi from play_lock_current to play_lock_current::@1 [phi:play_lock_current->play_lock_current::@1] + // [367] phi (byte) play_lock_current::l#6 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#0] -- vbuz1=vbuc1 lda #0 sta.z l - // [362] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 + // [367] phi (byte) play_lock_current::i#3 = (byte) 0 [phi:play_lock_current->play_lock_current::@1#1] -- vbuz1=vbuc1 sta.z i_1 - // [362] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy + // [367] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#0 [phi:play_lock_current->play_lock_current::@1#2] -- register_copy // play_lock_current::@1 __b1: // playfield_line = playfield_lines[yp] - // [363] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 + // [368] (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 << (byte) 1 -- vbuaa=vbuz1_rol_1 lda.z yp asl - // [364] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuaa + // [369] (byte*) play_lock_current::playfield_line#0 ← *((const byte**) playfield_lines + (byte~) play_lock_current::$4) -- pbuz1=pptc1_derefidx_vbuaa tay lda playfield_lines,y sta.z playfield_line lda playfield_lines+1,y sta.z playfield_line+1 // xp = current_xpos - // [365] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 + // [370] (byte) play_lock_current::xp#0 ← (byte) current_xpos#14 -- vbuz1=vbuz2 lda.z current_xpos sta.z xp - // [366] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] - // [366] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuxx=vbuc1 + // [371] phi from play_lock_current::@1 to play_lock_current::@2 [phi:play_lock_current::@1->play_lock_current::@2] + // [371] phi (byte) play_lock_current::c#2 = (byte) 0 [phi:play_lock_current::@1->play_lock_current::@2#0] -- vbuxx=vbuc1 ldx #0 - // [366] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy - // [366] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy + // [371] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#0 [phi:play_lock_current::@1->play_lock_current::@2#1] -- register_copy + // [371] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#3 [phi:play_lock_current::@1->play_lock_current::@2#2] -- register_copy // play_lock_current::@2 __b2: // if(current_piece_gfx[i++]!=0) - // [367] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 + // [372] (byte) play_lock_current::i#1 ← ++ (byte) play_lock_current::i#2 -- vbuz1=_inc_vbuz2 ldy.z i_1 iny sty.z i - // [368] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 + // [373] if(*((byte*) current_piece_gfx#13 + (byte) play_lock_current::i#2)==(byte) 0) goto play_lock_current::@3 -- pbuz1_derefidx_vbuz2_eq_0_then_la1 ldy.z i_1 lda (current_piece_gfx),y cmp #0 beq __b3 // play_lock_current::@4 // playfield_line[xp] = current_piece_char - // [369] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 + // [374] *((byte*) play_lock_current::playfield_line#0 + (byte) play_lock_current::xp#2) ← (byte) current_piece_char#10 -- pbuz1_derefidx_vbuz2=vbuz3 lda.z current_piece_char ldy.z xp sta (playfield_line),y // play_lock_current::@3 __b3: // xp++; - // [370] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 + // [375] (byte) play_lock_current::xp#1 ← ++ (byte) play_lock_current::xp#2 -- vbuz1=_inc_vbuz1 inc.z xp // for(char c:0..3) - // [371] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuxx=_inc_vbuxx + // [376] (byte) play_lock_current::c#1 ← ++ (byte) play_lock_current::c#2 -- vbuxx=_inc_vbuxx inx - // [372] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuxx_neq_vbuc1_then_la1 + // [377] if((byte) play_lock_current::c#1!=(byte) 4) goto play_lock_current::@7 -- vbuxx_neq_vbuc1_then_la1 cpx #4 bne __b7 // play_lock_current::@5 // yp++; - // [373] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 + // [378] (byte) play_lock_current::yp#1 ← ++ (byte) play_lock_current::yp#2 -- vbuz1=_inc_vbuz1 inc.z yp // for(char l:0..3) - // [374] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 + // [379] (byte) play_lock_current::l#1 ← ++ (byte) play_lock_current::l#6 -- vbuz1=_inc_vbuz1 inc.z l - // [375] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 + // [380] if((byte) play_lock_current::l#1!=(byte) 4) goto play_lock_current::@6 -- vbuz1_neq_vbuc1_then_la1 lda #4 cmp.z l bne __b6 // play_lock_current::@return // } - // [376] return + // [381] return rts // play_lock_current::@6 __b6: - // [377] (byte) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [382] (byte) play_lock_current::i#7 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda.z i sta.z i_1 - // [362] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] - // [362] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy - // [362] phi (byte) play_lock_current::i#3 = (byte) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy - // [362] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy + // [367] phi from play_lock_current::@6 to play_lock_current::@1 [phi:play_lock_current::@6->play_lock_current::@1] + // [367] phi (byte) play_lock_current::l#6 = (byte) play_lock_current::l#1 [phi:play_lock_current::@6->play_lock_current::@1#0] -- register_copy + // [367] phi (byte) play_lock_current::i#3 = (byte) play_lock_current::i#7 [phi:play_lock_current::@6->play_lock_current::@1#1] -- register_copy + // [367] phi (byte) play_lock_current::yp#2 = (byte) play_lock_current::yp#1 [phi:play_lock_current::@6->play_lock_current::@1#2] -- register_copy jmp __b1 // play_lock_current::@7 __b7: - // [378] (byte) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 + // [383] (byte) play_lock_current::i#9 ← (byte) play_lock_current::i#1 -- vbuz1=vbuz2 lda.z i sta.z i_1 - // [366] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] - // [366] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy - // [366] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy - // [366] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy + // [371] phi from play_lock_current::@7 to play_lock_current::@2 [phi:play_lock_current::@7->play_lock_current::@2] + // [371] phi (byte) play_lock_current::c#2 = (byte) play_lock_current::c#1 [phi:play_lock_current::@7->play_lock_current::@2#0] -- register_copy + // [371] phi (byte) play_lock_current::xp#2 = (byte) play_lock_current::xp#1 [phi:play_lock_current::@7->play_lock_current::@2#1] -- register_copy + // [371] phi (byte) play_lock_current::i#2 = (byte) play_lock_current::i#9 [phi:play_lock_current::@7->play_lock_current::@2#2] -- register_copy jmp __b2 } // keyboard_event_pressed @@ -24118,27 +24272,27 @@ play_lock_current: { // keyboard_event_pressed(byte register(X) keycode) keyboard_event_pressed: { // keycode>>3 - // [380] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuyy=vbuxx_ror_3 + // [385] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#5 >> (byte) 3 -- vbuyy=vbuxx_ror_3 txa lsr lsr lsr tay // row_bits = keyboard_scan_values[keycode>>3] - // [381] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0) -- vbuyy=pbuc1_derefidx_vbuyy + // [386] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0) -- vbuyy=pbuc1_derefidx_vbuyy lda keyboard_scan_values,y tay // keycode&7 - // [382] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuxx=vbuxx_band_vbuc1 + // [387] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#5 & (byte) 7 -- vbuxx=vbuxx_band_vbuc1 lda #7 axs #0 // row_bits & keyboard_matrix_col_bitmask[keycode&7] - // [383] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) -- vbuaa=vbuyy_band_pbuc1_derefidx_vbuxx + // [388] (byte) keyboard_event_pressed::return#11 ← (byte) keyboard_event_pressed::row_bits#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte~) keyboard_event_pressed::$1) -- vbuaa=vbuyy_band_pbuc1_derefidx_vbuxx tya and keyboard_matrix_col_bitmask,x // keyboard_event_pressed::@return // } - // [384] return + // [389] return rts } // keyboard_event_get @@ -24147,29 +24301,29 @@ keyboard_event_pressed: { // The buffer is filled by keyboard_event_scan() keyboard_event_get: { // if(keyboard_events_size==0) - // [385] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 + // [390] if((byte) keyboard_events_size#13==(byte) 0) goto keyboard_event_get::@return -- vbuz1_eq_0_then_la1 lda.z keyboard_events_size cmp #0 beq __b1 // keyboard_event_get::@1 // return keyboard_events[--keyboard_events_size]; - // [386] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 + // [391] (byte) keyboard_events_size#4 ← -- (byte) keyboard_events_size#13 -- vbuz1=_dec_vbuz1 dec.z keyboard_events_size - // [387] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) -- vbuaa=pbuc1_derefidx_vbuz1 + // [392] (byte) keyboard_event_get::return#1 ← *((const byte*) keyboard_events + (byte) keyboard_events_size#4) -- vbuaa=pbuc1_derefidx_vbuz1 ldy.z keyboard_events_size lda keyboard_events,y - // [388] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] - // [388] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy - // [388] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy + // [393] phi from keyboard_event_get::@1 to keyboard_event_get::@return [phi:keyboard_event_get::@1->keyboard_event_get::@return] + // [393] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#4 [phi:keyboard_event_get::@1->keyboard_event_get::@return#0] -- register_copy + // [393] phi (byte) keyboard_event_get::return#2 = (byte) keyboard_event_get::return#1 [phi:keyboard_event_get::@1->keyboard_event_get::@return#1] -- register_copy rts - // [388] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] + // [393] phi from keyboard_event_get to keyboard_event_get::@return [phi:keyboard_event_get->keyboard_event_get::@return] __b1: - // [388] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy - // [388] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuaa=vbuc1 + // [393] phi (byte) keyboard_events_size#16 = (byte) keyboard_events_size#13 [phi:keyboard_event_get->keyboard_event_get::@return#0] -- register_copy + // [393] phi (byte) keyboard_event_get::return#2 = (byte) $ff [phi:keyboard_event_get->keyboard_event_get::@return#1] -- vbuaa=vbuc1 lda #$ff // keyboard_event_get::@return // } - // [389] return + // [394] return rts } // keyboard_event_scan @@ -24181,190 +24335,190 @@ keyboard_event_scan: { .label row_scan = $3c .label keycode = $1f .label row = $1e - // [391] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] - // [391] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy - // [391] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 + // [396] phi from keyboard_event_scan to keyboard_event_scan::@7 [phi:keyboard_event_scan->keyboard_event_scan::@7] + // [396] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#19 [phi:keyboard_event_scan->keyboard_event_scan::@7#0] -- register_copy + // [396] phi (byte) keyboard_event_scan::keycode#11 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#1] -- vbuz1=vbuc1 lda #0 sta.z keycode - // [391] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 + // [396] phi (byte) keyboard_event_scan::row#2 = (byte) 0 [phi:keyboard_event_scan->keyboard_event_scan::@7#2] -- vbuz1=vbuc1 sta.z row - // [391] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] - // [391] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy - // [391] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy - // [391] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy + // [396] phi from keyboard_event_scan::@8 to keyboard_event_scan::@7 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7] + // [396] phi (byte) keyboard_events_size#30 = (byte) keyboard_events_size#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#0] -- register_copy + // [396] phi (byte) keyboard_event_scan::keycode#11 = (byte) keyboard_event_scan::keycode#13 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#1] -- register_copy + // [396] phi (byte) keyboard_event_scan::row#2 = (byte) keyboard_event_scan::row#1 [phi:keyboard_event_scan::@8->keyboard_event_scan::@7#2] -- register_copy // keyboard_event_scan::@7 __b7: // keyboard_matrix_read(row) - // [392] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuxx=vbuz1 + // [397] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_event_scan::row#2 -- vbuxx=vbuz1 ldx.z row - // [393] call keyboard_matrix_read + // [398] call keyboard_matrix_read jsr keyboard_matrix_read - // [394] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 + // [399] (byte) keyboard_matrix_read::return#2 ← (byte) keyboard_matrix_read::return#0 // keyboard_event_scan::@19 // row_scan = keyboard_matrix_read(row) - // [395] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuaa + // [400] (byte) keyboard_event_scan::row_scan#0 ← (byte) keyboard_matrix_read::return#2 -- vbuz1=vbuaa sta.z row_scan // if(row_scan!=keyboard_scan_values[row]) - // [396] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 + // [401] if((byte) keyboard_event_scan::row_scan#0!=*((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2)) goto keyboard_event_scan::@9 -- vbuz1_neq_pbuc1_derefidx_vbuz2_then_la1 ldy.z row cmp keyboard_scan_values,y bne __b5 // keyboard_event_scan::@16 // keycode = keycode + 8 - // [397] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 + // [402] (byte) keyboard_event_scan::keycode#1 ← (byte) keyboard_event_scan::keycode#11 + (byte) 8 -- vbuz1=vbuz1_plus_vbuc1 lax.z keycode axs #-[8] stx.z keycode - // [398] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] - // [398] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy - // [398] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy + // [403] phi from keyboard_event_scan::@15 keyboard_event_scan::@16 to keyboard_event_scan::@8 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8] + // [403] phi (byte) keyboard_events_size#13 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#0] -- register_copy + // [403] phi (byte) keyboard_event_scan::keycode#13 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@15/keyboard_event_scan::@16->keyboard_event_scan::@8#1] -- register_copy // keyboard_event_scan::@8 __b8: // for(char row : 0..7) - // [399] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 + // [404] (byte) keyboard_event_scan::row#1 ← ++ (byte) keyboard_event_scan::row#2 -- vbuz1=_inc_vbuz1 inc.z row - // [400] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 + // [405] if((byte) keyboard_event_scan::row#1!=(byte) 8) goto keyboard_event_scan::@7 -- vbuz1_neq_vbuc1_then_la1 lda #8 cmp.z row bne __b7 - // [401] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] + // [406] phi from keyboard_event_scan::@8 to keyboard_event_scan::@17 [phi:keyboard_event_scan::@8->keyboard_event_scan::@17] // keyboard_event_scan::@17 // keyboard_event_pressed(KEY_LSHIFT) - // [402] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_LSHIFT [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuxx=vbuc1 + // [407] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@17 to keyboard_event_pressed [phi:keyboard_event_scan::@17->keyboard_event_pressed] + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_LSHIFT [phi:keyboard_event_scan::@17->keyboard_event_pressed#0] -- vbuxx=vbuc1 ldx #KEY_LSHIFT jsr keyboard_event_pressed // keyboard_event_pressed(KEY_LSHIFT) - // [403] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 + // [408] (byte) keyboard_event_pressed::return#0 ← (byte) keyboard_event_pressed::return#11 // keyboard_event_scan::@20 - // [404] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 + // [409] (byte~) keyboard_event_scan::$0 ← (byte) keyboard_event_pressed::return#0 // if(keyboard_event_pressed(KEY_LSHIFT)!= 0) - // [405] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuaa_eq_0_then_la1 + // [410] if((byte~) keyboard_event_scan::$0==(byte) 0) goto keyboard_event_scan::@1 -- vbuaa_eq_0_then_la1 cmp #0 - // [406] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] + // [411] phi from keyboard_event_scan::@20 to keyboard_event_scan::@18 [phi:keyboard_event_scan::@20->keyboard_event_scan::@18] // keyboard_event_scan::@18 - // [407] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] + // [412] phi from keyboard_event_scan::@18 keyboard_event_scan::@20 to keyboard_event_scan::@1 [phi:keyboard_event_scan::@18/keyboard_event_scan::@20->keyboard_event_scan::@1] // keyboard_event_scan::@1 // keyboard_event_pressed(KEY_RSHIFT) - // [408] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_RSHIFT [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuxx=vbuc1 + // [413] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@1 to keyboard_event_pressed [phi:keyboard_event_scan::@1->keyboard_event_pressed] + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_RSHIFT [phi:keyboard_event_scan::@1->keyboard_event_pressed#0] -- vbuxx=vbuc1 ldx #KEY_RSHIFT jsr keyboard_event_pressed // keyboard_event_pressed(KEY_RSHIFT) - // [409] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 + // [414] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11 // keyboard_event_scan::@21 - // [410] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 + // [415] (byte~) keyboard_event_scan::$3 ← (byte) keyboard_event_pressed::return#1 // if(keyboard_event_pressed(KEY_RSHIFT)!= 0) - // [411] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuaa_eq_0_then_la1 + // [416] if((byte~) keyboard_event_scan::$3==(byte) 0) goto keyboard_event_scan::@2 -- vbuaa_eq_0_then_la1 cmp #0 - // [412] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] + // [417] phi from keyboard_event_scan::@21 to keyboard_event_scan::@4 [phi:keyboard_event_scan::@21->keyboard_event_scan::@4] // keyboard_event_scan::@4 - // [413] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] + // [418] phi from keyboard_event_scan::@21 keyboard_event_scan::@4 to keyboard_event_scan::@2 [phi:keyboard_event_scan::@21/keyboard_event_scan::@4->keyboard_event_scan::@2] // keyboard_event_scan::@2 // keyboard_event_pressed(KEY_CTRL) - // [414] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_CTRL [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuxx=vbuc1 + // [419] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@2 to keyboard_event_pressed [phi:keyboard_event_scan::@2->keyboard_event_pressed] + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_CTRL [phi:keyboard_event_scan::@2->keyboard_event_pressed#0] -- vbuxx=vbuc1 ldx #KEY_CTRL jsr keyboard_event_pressed // keyboard_event_pressed(KEY_CTRL) - // [415] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 + // [420] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11 // keyboard_event_scan::@22 - // [416] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 + // [421] (byte~) keyboard_event_scan::$6 ← (byte) keyboard_event_pressed::return#2 // if(keyboard_event_pressed(KEY_CTRL)!= 0) - // [417] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuaa_eq_0_then_la1 + // [422] if((byte~) keyboard_event_scan::$6==(byte) 0) goto keyboard_event_scan::@3 -- vbuaa_eq_0_then_la1 cmp #0 - // [418] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] + // [423] phi from keyboard_event_scan::@22 to keyboard_event_scan::@5 [phi:keyboard_event_scan::@22->keyboard_event_scan::@5] // keyboard_event_scan::@5 - // [419] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] + // [424] phi from keyboard_event_scan::@22 keyboard_event_scan::@5 to keyboard_event_scan::@3 [phi:keyboard_event_scan::@22/keyboard_event_scan::@5->keyboard_event_scan::@3] // keyboard_event_scan::@3 // keyboard_event_pressed(KEY_COMMODORE) - // [420] call keyboard_event_pressed - // [379] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] - // [379] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_COMMODORE [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuxx=vbuc1 + // [425] call keyboard_event_pressed + // [384] phi from keyboard_event_scan::@3 to keyboard_event_pressed [phi:keyboard_event_scan::@3->keyboard_event_pressed] + // [384] phi (byte) keyboard_event_pressed::keycode#5 = (const nomodify byte) KEY_COMMODORE [phi:keyboard_event_scan::@3->keyboard_event_pressed#0] -- vbuxx=vbuc1 ldx #KEY_COMMODORE jsr keyboard_event_pressed // keyboard_event_pressed(KEY_COMMODORE) - // [421] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 + // [426] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11 // keyboard_event_scan::@23 - // [422] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 + // [427] (byte~) keyboard_event_scan::$9 ← (byte) keyboard_event_pressed::return#10 // if(keyboard_event_pressed(KEY_COMMODORE)!= 0) - // [423] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuaa_eq_0_then_la1 + // [428] if((byte~) keyboard_event_scan::$9==(byte) 0) goto keyboard_event_scan::@return -- vbuaa_eq_0_then_la1 cmp #0 - // [424] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] + // [429] phi from keyboard_event_scan::@23 to keyboard_event_scan::@6 [phi:keyboard_event_scan::@23->keyboard_event_scan::@6] // keyboard_event_scan::@6 // keyboard_event_scan::@return // } - // [425] return + // [430] return rts // Something has changed on the keyboard row - check each column - // [426] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] - // [426] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy - // [426] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy - // [426] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy - // [426] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] + // [431] phi from keyboard_event_scan::@10 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9] + // [431] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#29 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#0] -- register_copy + // [431] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#14 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#1] -- register_copy + // [431] phi (byte) keyboard_event_scan::col#2 = (byte) keyboard_event_scan::col#1 [phi:keyboard_event_scan::@10->keyboard_event_scan::@9#2] -- register_copy + // [431] phi from keyboard_event_scan::@19 to keyboard_event_scan::@9 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9] __b5: - // [426] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy - // [426] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy - // [426] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuxx=vbuc1 + // [431] phi (byte) keyboard_events_size#10 = (byte) keyboard_events_size#30 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#0] -- register_copy + // [431] phi (byte) keyboard_event_scan::keycode#10 = (byte) keyboard_event_scan::keycode#11 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#1] -- register_copy + // [431] phi (byte) keyboard_event_scan::col#2 = (byte) 0 [phi:keyboard_event_scan::@19->keyboard_event_scan::@9#2] -- vbuxx=vbuc1 ldx #0 // keyboard_event_scan::@9 __b9: // row_scan^keyboard_scan_values[row] - // [427] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) -- vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 + // [432] (byte~) keyboard_event_scan::$15 ← (byte) keyboard_event_scan::row_scan#0 ^ *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) -- vbuaa=vbuz1_bxor_pbuc1_derefidx_vbuz2 lda.z row_scan ldy.z row eor keyboard_scan_values,y // (row_scan^keyboard_scan_values[row])&keyboard_matrix_col_bitmask[col] - // [428] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx + // [433] (byte~) keyboard_event_scan::$16 ← (byte~) keyboard_event_scan::$15 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuaa_band_pbuc1_derefidx_vbuxx and keyboard_matrix_col_bitmask,x // if(((row_scan^keyboard_scan_values[row])&keyboard_matrix_col_bitmask[col])!=0) - // [429] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuaa_eq_0_then_la1 + // [434] if((byte~) keyboard_event_scan::$16==(byte) 0) goto keyboard_event_scan::@10 -- vbuaa_eq_0_then_la1 cmp #0 beq __b10 // keyboard_event_scan::@12 // if(keyboard_events_size!=8) - // [430] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 + // [435] if((byte) keyboard_events_size#10==(byte) 8) goto keyboard_event_scan::@10 -- vbuz1_eq_vbuc1_then_la1 lda #8 cmp.z keyboard_events_size beq __b10 // keyboard_event_scan::@13 // event_type = row_scan&keyboard_matrix_col_bitmask[col] - // [431] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx + // [436] (byte) keyboard_event_scan::event_type#0 ← (byte) keyboard_event_scan::row_scan#0 & *((const byte*) keyboard_matrix_col_bitmask + (byte) keyboard_event_scan::col#2) -- vbuaa=vbuz1_band_pbuc1_derefidx_vbuxx lda keyboard_matrix_col_bitmask,x and.z row_scan // if(event_type==0) - // [432] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuaa_eq_0_then_la1 + // [437] if((byte) keyboard_event_scan::event_type#0==(byte) 0) goto keyboard_event_scan::@11 -- vbuaa_eq_0_then_la1 cmp #0 beq __b11 // keyboard_event_scan::@14 // keyboard_events[keyboard_events_size++] = keycode - // [433] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 + // [438] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte) keyboard_event_scan::keycode#10 -- pbuc1_derefidx_vbuz1=vbuz2 // Key pressed lda.z keycode ldy.z keyboard_events_size sta keyboard_events,y // keyboard_events[keyboard_events_size++] = keycode; - // [434] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [439] (byte) keyboard_events_size#2 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc.z keyboard_events_size - // [435] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] - // [435] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy + // [440] phi from keyboard_event_scan::@11 keyboard_event_scan::@12 keyboard_event_scan::@14 keyboard_event_scan::@9 to keyboard_event_scan::@10 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10] + // [440] phi (byte) keyboard_events_size#29 = (byte) keyboard_events_size#1 [phi:keyboard_event_scan::@11/keyboard_event_scan::@12/keyboard_event_scan::@14/keyboard_event_scan::@9->keyboard_event_scan::@10#0] -- register_copy // keyboard_event_scan::@10 __b10: // keycode++; - // [436] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 + // [441] (byte) keyboard_event_scan::keycode#14 ← ++ (byte) keyboard_event_scan::keycode#10 -- vbuz1=_inc_vbuz1 inc.z keycode // for(char col : 0..7) - // [437] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuxx=_inc_vbuxx + // [442] (byte) keyboard_event_scan::col#1 ← ++ (byte) keyboard_event_scan::col#2 -- vbuxx=_inc_vbuxx inx - // [438] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuxx_neq_vbuc1_then_la1 + // [443] if((byte) keyboard_event_scan::col#1!=(byte) 8) goto keyboard_event_scan::@9 -- vbuxx_neq_vbuc1_then_la1 cpx #8 bne __b9 // keyboard_event_scan::@15 // keyboard_scan_values[row] = row_scan - // [439] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 + // [444] *((const byte*) keyboard_scan_values + (byte) keyboard_event_scan::row#2) ← (byte) keyboard_event_scan::row_scan#0 -- pbuc1_derefidx_vbuz1=vbuz2 // Store the current keyboard status for the row to debounce lda.z row_scan ldy.z row @@ -24373,16 +24527,16 @@ keyboard_event_scan: { // keyboard_event_scan::@11 __b11: // keycode|$40 - // [440] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuaa=vbuz1_bor_vbuc1 + // [445] (byte~) keyboard_event_scan::$23 ← (byte) keyboard_event_scan::keycode#10 | (byte) $40 -- vbuaa=vbuz1_bor_vbuc1 lda #$40 ora.z keycode // keyboard_events[keyboard_events_size++] = keycode|$40 - // [441] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuaa + // [446] *((const byte*) keyboard_events + (byte) keyboard_events_size#10) ← (byte~) keyboard_event_scan::$23 -- pbuc1_derefidx_vbuz1=vbuaa // Key released ldy.z keyboard_events_size sta keyboard_events,y // keyboard_events[keyboard_events_size++] = keycode|$40; - // [442] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 + // [447] (byte) keyboard_events_size#1 ← ++ (byte) keyboard_events_size#10 -- vbuz1=_inc_vbuz1 inc.z keyboard_events_size jmp __b10 } @@ -24395,16 +24549,16 @@ keyboard_event_scan: { // keyboard_matrix_read(byte register(X) rowid) keyboard_matrix_read: { // CIA1->PORT_A = keyboard_matrix_row_bitmask[rowid] - // [443] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx + // [448] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1) ← *((const byte*) keyboard_matrix_row_bitmask + (byte) keyboard_matrix_read::rowid#0) -- _deref_pbuc1=pbuc2_derefidx_vbuxx lda keyboard_matrix_row_bitmask,x sta CIA1 // ~CIA1->PORT_B - // [444] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 + // [449] (byte) keyboard_matrix_read::return#0 ← ~ *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -- vbuaa=_bnot__deref_pbuc1 lda CIA1+OFFSET_STRUCT_MOS6526_CIA_PORT_B eor #$ff // keyboard_matrix_read::@return // } - // [445] return + // [450] return rts } // render_show @@ -24413,42 +24567,42 @@ render_show: { .const toD0181_return = (>(PLAYFIELD_SCREEN_1&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f .const toD0182_return = (>(PLAYFIELD_SCREEN_2&$3fff)*4)|(>PLAYFIELD_CHARSET)/4&$f // if(render_screen_show==0) - // [446] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 + // [451] if((byte) render_screen_show#16==(byte) 0) goto render_show::toD0181 -- vbuz1_eq_0_then_la1 lda.z render_screen_show cmp #0 beq toD0181 - // [447] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] + // [452] phi from render_show to render_show::toD0182 [phi:render_show->render_show::toD0182] // render_show::toD0182 - // [448] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] - // [448] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuaa=vbuc1 + // [453] phi from render_show::toD0182 to render_show::@1 [phi:render_show::toD0182->render_show::@1] + // [453] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0182_return#0 [phi:render_show::toD0182->render_show::@1#0] -- vbuaa=vbuc1 lda #toD0182_return // render_show::@1 __b1: // *D018 = d018val - // [449] *((const nomodify byte*) D018) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuaa + // [454] *((const nomodify byte*) D018) ← (byte) render_show::d018val#3 -- _deref_pbuc1=vbuaa sta D018 // *BGCOL2 = PIECES_COLORS_1[level] - // [450] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [455] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 ldy.z level lda PIECES_COLORS_1,y sta BGCOL2 // *BGCOL3 = PIECES_COLORS_2[level] - // [451] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 + // [456] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2 + (byte) level#10) -- _deref_pbuc1=pbuc2_derefidx_vbuz1 lda PIECES_COLORS_2,y sta BGCOL3 // render_screen_showing = render_screen_show - // [452] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 -- vbuz1=vbuz2 + // [457] (volatile byte) render_screen_showing ← (byte) render_screen_show#16 -- vbuz1=vbuz2 lda.z render_screen_show sta.z render_screen_showing // render_show::@return // } - // [453] return + // [458] return rts - // [454] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] + // [459] phi from render_show to render_show::toD0181 [phi:render_show->render_show::toD0181] // render_show::toD0181 toD0181: - // [448] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] - // [448] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuaa=vbuc1 + // [453] phi from render_show::toD0181 to render_show::@1 [phi:render_show::toD0181->render_show::@1] + // [453] phi (byte) render_show::d018val#3 = (const byte) render_show::toD0181_return#0 [phi:render_show::toD0181->render_show::@1#0] -- vbuaa=vbuc1 lda #toD0181_return jmp __b1 } @@ -24458,39 +24612,39 @@ play_init: { .label pli = $22 // Initialize the playfield line pointers; .label idx = $21 - // [456] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] - // [456] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 + // [461] phi from play_init to play_init::@1 [phi:play_init->play_init::@1] + // [461] phi (byte) play_init::idx#2 = (byte) 0 [phi:play_init->play_init::@1#0] -- vbuz1=vbuc1 lda #0 sta.z idx - // [456] phi (byte*) play_init::pli#2 = (const byte*) playfield [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 + // [461] phi (byte*) play_init::pli#2 = (const byte*) playfield [phi:play_init->play_init::@1#1] -- pbuz1=pbuc1 lda #playfield sta.z pli+1 - // [456] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuyy=vbuc1 + // [461] phi (byte) play_init::j#2 = (byte) 0 [phi:play_init->play_init::@1#2] -- vbuyy=vbuc1 ldy #0 - // [456] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] - // [456] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy - // [456] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy - // [456] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy + // [461] phi from play_init::@1 to play_init::@1 [phi:play_init::@1->play_init::@1] + // [461] phi (byte) play_init::idx#2 = (byte) play_init::idx#1 [phi:play_init::@1->play_init::@1#0] -- register_copy + // [461] phi (byte*) play_init::pli#2 = (byte*) play_init::pli#1 [phi:play_init::@1->play_init::@1#1] -- register_copy + // [461] phi (byte) play_init::j#2 = (byte) play_init::j#1 [phi:play_init::@1->play_init::@1#2] -- register_copy // play_init::@1 __b1: // playfield_lines[j] = pli - // [457] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [462] (byte~) play_init::$2 ← (byte) play_init::j#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax - // [458] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [463] *((const byte**) playfield_lines + (byte~) play_init::$2) ← (byte*) play_init::pli#2 -- pptc1_derefidx_vbuxx=pbuz1 lda.z pli sta playfield_lines,x lda.z pli+1 sta playfield_lines+1,x // playfield_lines_idx[j] = idx - // [459] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuyy=vbuz1 + // [464] *((const byte*) playfield_lines_idx + (byte) play_init::j#2) ← (byte) play_init::idx#2 -- pbuc1_derefidx_vbuyy=vbuz1 lda.z idx sta playfield_lines_idx,y // pli += PLAYFIELD_COLS - // [460] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS -- pbuz1=pbuz1_plus_vbuc1 + // [465] (byte*) play_init::pli#1 ← (byte*) play_init::pli#2 + (const nomodify byte) PLAYFIELD_COLS -- pbuz1=pbuz1_plus_vbuc1 lda #PLAYFIELD_COLS clc adc.z pli @@ -24499,40 +24653,40 @@ play_init: { inc.z pli+1 !: // idx += PLAYFIELD_COLS - // [461] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS -- vbuz1=vbuz1_plus_vbuc1 + // [466] (byte) play_init::idx#1 ← (byte) play_init::idx#2 + (const nomodify byte) PLAYFIELD_COLS -- vbuz1=vbuz1_plus_vbuc1 lax.z idx axs #-[PLAYFIELD_COLS] stx.z idx // for(char j:0..PLAYFIELD_LINES-1) - // [462] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuyy=_inc_vbuyy + // [467] (byte) play_init::j#1 ← ++ (byte) play_init::j#2 -- vbuyy=_inc_vbuyy iny - // [463] if((byte) play_init::j#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [468] if((byte) play_init::j#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto play_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #PLAYFIELD_LINES-1+1 bne __b1 // play_init::@2 // playfield_lines_idx[PLAYFIELD_LINES] = PLAYFIELD_COLS*PLAYFIELD_LINES - // [464] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES -- _deref_pbuc1=vbuc2 + // [469] *((const byte*) playfield_lines_idx+(const nomodify byte) PLAYFIELD_LINES) ← (const nomodify byte) PLAYFIELD_COLS*(const nomodify byte) PLAYFIELD_LINES -- _deref_pbuc1=vbuc2 lda #PLAYFIELD_COLS*PLAYFIELD_LINES sta playfield_lines_idx+PLAYFIELD_LINES // current_movedown_slow = MOVEDOWN_SLOW_SPEEDS[level] - // [465] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) -- vbuz1=_deref_pbuc1 + // [470] (byte) current_movedown_slow#1 ← *((const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS) -- vbuz1=_deref_pbuc1 // Set initial speed of moving down a tetromino lda MOVEDOWN_SLOW_SPEEDS sta.z current_movedown_slow - // [466] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] - // [466] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuxx=vbuc1 + // [471] phi from play_init::@2 to play_init::@3 [phi:play_init::@2->play_init::@3] + // [471] phi (byte) play_init::b#2 = (byte) 0 [phi:play_init::@2->play_init::@3#0] -- vbuxx=vbuc1 ldx #0 // Set the initial score add values - // [466] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] - // [466] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy + // [471] phi from play_init::@3 to play_init::@3 [phi:play_init::@3->play_init::@3] + // [471] phi (byte) play_init::b#2 = (byte) play_init::b#1 [phi:play_init::@3->play_init::@3#0] -- register_copy // play_init::@3 __b3: // score_add_bcd[b] = SCORE_BASE_BCD[b] - // [467] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 + // [472] (byte~) play_init::$3 ← (byte) play_init::b#2 << (byte) 2 -- vbuaa=vbuxx_rol_2 txa asl asl - // [468] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) -- pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa + // [473] *((const dword*) score_add_bcd + (byte~) play_init::$3) ← *((const to_nomodify dword*) SCORE_BASE_BCD + (byte~) play_init::$3) -- pduc1_derefidx_vbuaa=pduc2_derefidx_vbuaa tay lda SCORE_BASE_BCD,y sta score_add_bcd,y @@ -24543,14 +24697,14 @@ play_init: { lda SCORE_BASE_BCD+3,y sta score_add_bcd+3,y // for(char b: 0..4) - // [469] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuxx=_inc_vbuxx + // [474] (byte) play_init::b#1 ← ++ (byte) play_init::b#2 -- vbuxx=_inc_vbuxx inx - // [470] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuxx_neq_vbuc1_then_la1 + // [475] if((byte) play_init::b#1!=(byte) 5) goto play_init::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #5 bne __b3 // play_init::@return // } - // [471] return + // [476] return rts } // sprites_irq_init @@ -24560,7 +24714,7 @@ sprites_irq_init: { // asm { sei } sei // *IRQ_STATUS = IRQ_RASTER - // [473] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [478] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Acknowledge any IRQ and setup the next one lda #IRQ_RASTER sta IRQ_STATUS @@ -24568,36 +24722,36 @@ sprites_irq_init: { // asm { ldaCIA1_INTERRUPT } lda CIA1_INTERRUPT // *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK - // [475] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 + // [480] *((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 // Disable kernal & basic lda #PROCPORT_DDR_MEMORY_MASK sta PROCPORT_DDR // *PROCPORT = PROCPORT_RAM_IO - // [476] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 + // [481] *((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 lda #PROCPORT_RAM_IO sta PROCPORT // CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR - // [477] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 + // [482] *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) ← (const nomodify byte) CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2 // Disable CIA 1 Timer IRQ lda #CIA_INTERRUPT_CLEAR sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT // *VIC_CONTROL &=0x7f - // [478] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 + // [483] *((const nomodify byte*) VIC_CONTROL) ← *((const nomodify byte*) VIC_CONTROL) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2 // Set raster line lda #$7f and VIC_CONTROL sta VIC_CONTROL // *RASTER = IRQ_RASTER_FIRST - // [479] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST -- _deref_pbuc1=vbuc2 + // [484] *((const nomodify byte*) RASTER) ← (const nomodify byte) IRQ_RASTER_FIRST -- _deref_pbuc1=vbuc2 lda #IRQ_RASTER_FIRST sta RASTER // *IRQ_ENABLE = IRQ_RASTER - // [480] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 + // [485] *((const nomodify byte*) IRQ_ENABLE) ← (const nomodify byte) IRQ_RASTER -- _deref_pbuc1=vbuc2 // Enable Raster Interrupt lda #IRQ_RASTER sta IRQ_ENABLE // *HARDWARE_IRQ = &sprites_irq - // [481] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 + // [486] *((const nomodify void()**) HARDWARE_IRQ) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq() -- _deref_pptc1=pprc2 // Set the IRQ routine lda #sprites_init::@1] - // [488] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 + // [493] phi from sprites_init to sprites_init::@1 [phi:sprites_init->sprites_init::@1] + // [493] phi (byte) sprites_init::xpos#2 = (byte)(number) $18+(number) $f*(number) 8 [phi:sprites_init->sprites_init::@1#0] -- vbuz1=vbuc1 lda #$18+$f*8 sta.z xpos - // [488] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1 + // [493] phi (byte) sprites_init::s#2 = (byte) 0 [phi:sprites_init->sprites_init::@1#1] -- vbuyy=vbuc1 ldy #0 - // [488] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] - // [488] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy - // [488] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy + // [493] phi from sprites_init::@1 to sprites_init::@1 [phi:sprites_init::@1->sprites_init::@1] + // [493] phi (byte) sprites_init::xpos#2 = (byte) sprites_init::xpos#1 [phi:sprites_init::@1->sprites_init::@1#0] -- register_copy + // [493] phi (byte) sprites_init::s#2 = (byte) sprites_init::s#1 [phi:sprites_init::@1->sprites_init::@1#1] -- register_copy // sprites_init::@1 __b1: // s2 = s*2 - // [489] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [494] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax // SPRITES_XPOS[s2] = xpos - // [490] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1 + // [495] *((const nomodify byte*) SPRITES_XPOS + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2 -- pbuc1_derefidx_vbuxx=vbuz1 lda.z xpos sta SPRITES_XPOS,x // SPRITES_COLS[s] = BLACK - // [491] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK -- pbuc1_derefidx_vbuyy=vbuc2 + // [496] *((const nomodify byte*) SPRITES_COLS + (byte) sprites_init::s#2) ← (const nomodify byte) BLACK -- pbuc1_derefidx_vbuyy=vbuc2 lda #BLACK sta SPRITES_COLS,y // xpos = xpos+24 - // [492] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 + // [497] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18 -- vbuz1=vbuz1_plus_vbuc1 lax.z xpos axs #-[$18] stx.z xpos // for(char s:0..3) - // [493] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy + // [498] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2 -- vbuyy=_inc_vbuyy iny - // [494] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [499] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #4 bne __b1 // sprites_init::@return // } - // [495] return + // [500] return rts } // render_init @@ -24678,99 +24832,99 @@ render_init: { .label li_2 = $30 // render_init::vicSelectGfxBank1 // CIA2->PORT_A_DDR = %00000011 - // [497] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 + // [502] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 lda #3 sta CIA2+OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR - // [498] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] + // [503] phi from render_init::vicSelectGfxBank1 to render_init::vicSelectGfxBank1_toDd001 [phi:render_init::vicSelectGfxBank1->render_init::vicSelectGfxBank1_toDd001] // render_init::vicSelectGfxBank1_toDd001 // render_init::vicSelectGfxBank1_@1 // CIA2->PORT_A = toDd00(gfx) - // [499] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 + // [504] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byte) render_init::vicSelectGfxBank1_toDd001_return#0 -- _deref_pbuc1=vbuc2 lda #vicSelectGfxBank1_toDd001_return sta CIA2 // render_init::@2 // *D011 = VIC_ECM | VIC_DEN | VIC_RSEL | 3 - // [500] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 + // [505] *((const nomodify byte*) D011) ← (const nomodify byte) VIC_ECM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 // Enable Extended Background Color Mode lda #VIC_ECM|VIC_DEN|VIC_RSEL|3 sta D011 // *BORDERCOL = BLACK - // [501] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 + // [506] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 lda #BLACK sta BORDERCOL // *BGCOL1 = BLACK - // [502] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 + // [507] *((const nomodify byte*) BGCOL1) ← (const nomodify byte) BLACK -- _deref_pbuc1=vbuc2 sta BGCOL1 // *BGCOL2 = PIECES_COLORS_1[0] - // [503] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) -- _deref_pbuc1=_deref_pbuc2 + // [508] *((const nomodify byte*) BGCOL2) ← *((const byte*) PIECES_COLORS_1) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_1 sta BGCOL2 // *BGCOL3 = PIECES_COLORS_2[0] - // [504] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) -- _deref_pbuc1=_deref_pbuc2 + // [509] *((const nomodify byte*) BGCOL3) ← *((const byte*) PIECES_COLORS_2) -- _deref_pbuc1=_deref_pbuc2 lda PIECES_COLORS_2 sta BGCOL3 // *BGCOL4 = GREY - // [505] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY -- _deref_pbuc1=vbuc2 + // [510] *((const nomodify byte*) BGCOL4) ← (const nomodify byte) GREY -- _deref_pbuc1=vbuc2 lda #GREY sta BGCOL4 // render_screen_original(PLAYFIELD_SCREEN_1) - // [506] call render_screen_original + // [511] call render_screen_original // Setup chars on the screens - // [518] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] - // [518] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_1 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 + // [523] phi from render_init::@2 to render_screen_original [phi:render_init::@2->render_screen_original] + // [523] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_1 [phi:render_init::@2->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1 sta.z render_screen_original.screen+1 jsr render_screen_original - // [507] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] + // [512] phi from render_init::@2 to render_init::@3 [phi:render_init::@2->render_init::@3] // render_init::@3 // render_screen_original(PLAYFIELD_SCREEN_2) - // [508] call render_screen_original - // [518] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] - // [518] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_2 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 + // [513] call render_screen_original + // [523] phi from render_init::@3 to render_screen_original [phi:render_init::@3->render_screen_original] + // [523] phi (byte*) render_screen_original::screen#9 = (const nomodify byte*) PLAYFIELD_SCREEN_2 [phi:render_init::@3->render_screen_original#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2 sta.z render_screen_original.screen+1 jsr render_screen_original - // [509] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] - // [509] phi (byte*) render_init::li_2#2 = (const nomodify byte*) PLAYFIELD_SCREEN_2+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 + // [514] phi from render_init::@3 to render_init::@1 [phi:render_init::@3->render_init::@1] + // [514] phi (byte*) render_init::li_2#2 = (const nomodify byte*) PLAYFIELD_SCREEN_2+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#0] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_2+2*$28+$10 sta.z li_2+1 - // [509] phi (byte*) render_init::li_1#2 = (const nomodify byte*) PLAYFIELD_SCREEN_1+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 + // [514] phi (byte*) render_init::li_1#2 = (const nomodify byte*) PLAYFIELD_SCREEN_1+(byte)(number) 2*(number) $28+(byte) $10 [phi:render_init::@3->render_init::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_1+2*$28+$10 sta.z li_1+1 - // [509] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuyy=vbuc1 + // [514] phi (byte) render_init::i#2 = (byte) 0 [phi:render_init::@3->render_init::@1#2] -- vbuyy=vbuc1 ldy #0 - // [509] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] - // [509] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy - // [509] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy - // [509] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy + // [514] phi from render_init::@1 to render_init::@1 [phi:render_init::@1->render_init::@1] + // [514] phi (byte*) render_init::li_2#2 = (byte*) render_init::li_2#1 [phi:render_init::@1->render_init::@1#0] -- register_copy + // [514] phi (byte*) render_init::li_1#2 = (byte*) render_init::li_1#1 [phi:render_init::@1->render_init::@1#1] -- register_copy + // [514] phi (byte) render_init::i#2 = (byte) render_init::i#1 [phi:render_init::@1->render_init::@1#2] -- register_copy // render_init::@1 __b1: // screen_lines_1[i] = li_1 - // [510] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 + // [515] (byte~) render_init::$5 ← (byte) render_init::i#2 << (byte) 1 -- vbuxx=vbuyy_rol_1 tya asl tax - // [511] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [516] *((const byte**) screen_lines_1 + (byte~) render_init::$5) ← (byte*) render_init::li_1#2 -- pptc1_derefidx_vbuxx=pbuz1 lda.z li_1 sta screen_lines_1,x lda.z li_1+1 sta screen_lines_1+1,x // screen_lines_2[i] = li_2 - // [512] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuxx=pbuz1 + // [517] *((const byte**) screen_lines_2 + (byte~) render_init::$5) ← (byte*) render_init::li_2#2 -- pptc1_derefidx_vbuxx=pbuz1 lda.z li_2 sta screen_lines_2,x lda.z li_2+1 sta screen_lines_2+1,x // li_1 += 40 - // [513] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [518] (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z li_1 @@ -24779,7 +24933,7 @@ render_init: { inc.z li_1+1 !: // li_2 += 40 - // [514] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 + // [519] (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z li_2 @@ -24788,14 +24942,14 @@ render_init: { inc.z li_2+1 !: // for(char i:0..PLAYFIELD_LINES-1) - // [515] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuyy=_inc_vbuyy + // [520] (byte) render_init::i#1 ← ++ (byte) render_init::i#2 -- vbuyy=_inc_vbuyy iny - // [516] if((byte) render_init::i#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto render_init::@1 -- vbuyy_neq_vbuc1_then_la1 + // [521] if((byte) render_init::i#1!=(const nomodify byte) PLAYFIELD_LINES-(byte) 1+(byte) 1) goto render_init::@1 -- vbuyy_neq_vbuc1_then_la1 cpy #PLAYFIELD_LINES-1+1 bne __b1 // render_init::@return // } - // [517] return + // [522] return rts } // render_screen_original @@ -24809,182 +24963,182 @@ render_screen_original: { .label oscr = $32 .label ocols = $39 .label y = $2f - // [519] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] - // [519] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 + // [524] phi from render_screen_original to render_screen_original::@1 [phi:render_screen_original->render_screen_original::@1] + // [524] phi (byte) render_screen_original::y#6 = (byte) 0 [phi:render_screen_original->render_screen_original::@1#0] -- vbuz1=vbuc1 lda #0 sta.z y - // [519] phi (byte*) render_screen_original::ocols#4 = (const to_nomodify byte*) PLAYFIELD_COLORS_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 + // [524] phi (byte*) render_screen_original::ocols#4 = (const to_nomodify byte*) PLAYFIELD_COLORS_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#1] -- pbuz1=pbuc1 lda #PLAYFIELD_COLORS_ORIGINAL+$20*2 sta.z ocols+1 - // [519] phi (byte*) render_screen_original::oscr#4 = (const to_nomodify byte*) PLAYFIELD_SCREEN_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 + // [524] phi (byte*) render_screen_original::oscr#4 = (const to_nomodify byte*) PLAYFIELD_SCREEN_ORIGINAL+(byte)(number) $20*(number) 2 [phi:render_screen_original->render_screen_original::@1#2] -- pbuz1=pbuc1 lda #PLAYFIELD_SCREEN_ORIGINAL+$20*2 sta.z oscr+1 - // [519] phi (byte*) render_screen_original::cols#7 = (const nomodify byte*) COLS [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 + // [524] phi (byte*) render_screen_original::cols#7 = (const nomodify byte*) COLS [phi:render_screen_original->render_screen_original::@1#3] -- pbuz1=pbuc1 lda #COLS sta.z cols+1 - // [519] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy - // [519] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] - // [519] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy - // [519] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy - // [519] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy - // [519] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy - // [519] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy + // [524] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#9 [phi:render_screen_original->render_screen_original::@1#4] -- register_copy + // [524] phi from render_screen_original::@5 to render_screen_original::@1 [phi:render_screen_original::@5->render_screen_original::@1] + // [524] phi (byte) render_screen_original::y#6 = (byte) render_screen_original::y#1 [phi:render_screen_original::@5->render_screen_original::@1#0] -- register_copy + // [524] phi (byte*) render_screen_original::ocols#4 = (byte*) render_screen_original::ocols#1 [phi:render_screen_original::@5->render_screen_original::@1#1] -- register_copy + // [524] phi (byte*) render_screen_original::oscr#4 = (byte*) render_screen_original::oscr#1 [phi:render_screen_original::@5->render_screen_original::@1#2] -- register_copy + // [524] phi (byte*) render_screen_original::cols#7 = (byte*) render_screen_original::cols#3 [phi:render_screen_original::@5->render_screen_original::@1#3] -- register_copy + // [524] phi (byte*) render_screen_original::screen#8 = (byte*) render_screen_original::screen#10 [phi:render_screen_original::@5->render_screen_original::@1#4] -- register_copy // render_screen_original::@1 __b1: - // [520] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] - // [520] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuxx=vbuc1 + // [525] phi from render_screen_original::@1 to render_screen_original::@2 [phi:render_screen_original::@1->render_screen_original::@2] + // [525] phi (byte) render_screen_original::x#4 = (byte) 0 [phi:render_screen_original::@1->render_screen_original::@2#0] -- vbuxx=vbuc1 ldx #0 - // [520] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy - // [520] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy - // [520] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] - // [520] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy - // [520] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy - // [520] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy + // [525] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#7 [phi:render_screen_original::@1->render_screen_original::@2#1] -- register_copy + // [525] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#8 [phi:render_screen_original::@1->render_screen_original::@2#2] -- register_copy + // [525] phi from render_screen_original::@2 to render_screen_original::@2 [phi:render_screen_original::@2->render_screen_original::@2] + // [525] phi (byte) render_screen_original::x#4 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2->render_screen_original::@2#0] -- register_copy + // [525] phi (byte*) render_screen_original::cols#4 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2->render_screen_original::@2#1] -- register_copy + // [525] phi (byte*) render_screen_original::screen#5 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2->render_screen_original::@2#2] -- register_copy // render_screen_original::@2 __b2: // *screen++ = SPACE - // [521] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 + // [526] *((byte*) render_screen_original::screen#5) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y // *screen++ = SPACE; - // [522] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 + // [527] (byte*) render_screen_original::screen#2 ← ++ (byte*) render_screen_original::screen#5 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: // *cols++ = BLACK - // [523] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 + // [528] *((byte*) render_screen_original::cols#4) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y // *cols++ = BLACK; - // [524] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 + // [529] (byte*) render_screen_original::cols#1 ← ++ (byte*) render_screen_original::cols#4 -- pbuz1=_inc_pbuz1 inc.z cols bne !+ inc.z cols+1 !: // while(++x!=4) - // [525] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuxx=_inc_vbuxx + // [530] (byte) render_screen_original::x#1 ← ++ (byte) render_screen_original::x#4 -- vbuxx=_inc_vbuxx inx - // [526] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuxx_neq_vbuc1_then_la1 + // [531] if((byte) render_screen_original::x#1!=(byte) 4) goto render_screen_original::@2 -- vbuxx_neq_vbuc1_then_la1 cpx #4 bne __b2 - // [527] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] - // [527] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy - // [527] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy - // [527] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy - // [527] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy - // [527] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy + // [532] phi from render_screen_original::@2 render_screen_original::@3 to render_screen_original::@3 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3] + // [532] phi (byte) render_screen_original::x#5 = (byte) render_screen_original::x#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#0] -- register_copy + // [532] phi (byte*) render_screen_original::cols#5 = (byte*) render_screen_original::cols#1 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#1] -- register_copy + // [532] phi (byte*) render_screen_original::ocols#2 = (byte*) render_screen_original::ocols#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#2] -- register_copy + // [532] phi (byte*) render_screen_original::screen#6 = (byte*) render_screen_original::screen#2 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#3] -- register_copy + // [532] phi (byte*) render_screen_original::oscr#2 = (byte*) render_screen_original::oscr#4 [phi:render_screen_original::@2/render_screen_original::@3->render_screen_original::@3#4] -- register_copy // render_screen_original::@3 __b3: // *screen++ = *oscr++ - // [528] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 + // [533] *((byte*) render_screen_original::screen#6) ← *((byte*) render_screen_original::oscr#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (oscr),y sta (screen),y // *screen++ = *oscr++; - // [529] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 + // [534] (byte*) render_screen_original::screen#3 ← ++ (byte*) render_screen_original::screen#6 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: - // [530] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 + // [535] (byte*) render_screen_original::oscr#1 ← ++ (byte*) render_screen_original::oscr#2 -- pbuz1=_inc_pbuz1 inc.z oscr bne !+ inc.z oscr+1 !: // *cols++ = *ocols++ - // [531] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 + // [536] *((byte*) render_screen_original::cols#5) ← *((byte*) render_screen_original::ocols#2) -- _deref_pbuz1=_deref_pbuz2 ldy #0 lda (ocols),y sta (cols),y // *cols++ = *ocols++; - // [532] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 + // [537] (byte*) render_screen_original::cols#2 ← ++ (byte*) render_screen_original::cols#5 -- pbuz1=_inc_pbuz1 inc.z cols bne !+ inc.z cols+1 !: - // [533] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 + // [538] (byte*) render_screen_original::ocols#1 ← ++ (byte*) render_screen_original::ocols#2 -- pbuz1=_inc_pbuz1 inc.z ocols bne !+ inc.z ocols+1 !: // while(++x!=36) - // [534] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuxx=_inc_vbuxx + // [539] (byte) render_screen_original::x#2 ← ++ (byte) render_screen_original::x#5 -- vbuxx=_inc_vbuxx inx - // [535] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuxx_neq_vbuc1_then_la1 + // [540] if((byte) render_screen_original::x#2!=(byte) $24) goto render_screen_original::@3 -- vbuxx_neq_vbuc1_then_la1 cpx #$24 bne __b3 - // [536] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] - // [536] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy - // [536] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy - // [536] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy + // [541] phi from render_screen_original::@3 render_screen_original::@4 to render_screen_original::@4 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4] + // [541] phi (byte) render_screen_original::x#6 = (byte) render_screen_original::x#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#0] -- register_copy + // [541] phi (byte*) render_screen_original::cols#6 = (byte*) render_screen_original::cols#2 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#1] -- register_copy + // [541] phi (byte*) render_screen_original::screen#7 = (byte*) render_screen_original::screen#3 [phi:render_screen_original::@3/render_screen_original::@4->render_screen_original::@4#2] -- register_copy // render_screen_original::@4 __b4: // *screen++ = SPACE - // [537] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 + // [542] *((byte*) render_screen_original::screen#7) ← (const byte) render_screen_original::SPACE -- _deref_pbuz1=vbuc1 lda #SPACE ldy #0 sta (screen),y // *screen++ = SPACE; - // [538] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 + // [543] (byte*) render_screen_original::screen#10 ← ++ (byte*) render_screen_original::screen#7 -- pbuz1=_inc_pbuz1 inc.z screen bne !+ inc.z screen+1 !: // *cols++ = BLACK - // [539] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 + // [544] *((byte*) render_screen_original::cols#6) ← (const nomodify byte) BLACK -- _deref_pbuz1=vbuc1 lda #BLACK ldy #0 sta (cols),y // *cols++ = BLACK; - // [540] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 + // [545] (byte*) render_screen_original::cols#3 ← ++ (byte*) render_screen_original::cols#6 -- pbuz1=_inc_pbuz1 inc.z cols bne !+ inc.z cols+1 !: // while(++x!=40) - // [541] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuxx=_inc_vbuxx + // [546] (byte) render_screen_original::x#3 ← ++ (byte) render_screen_original::x#6 -- vbuxx=_inc_vbuxx inx - // [542] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuxx_neq_vbuc1_then_la1 + // [547] if((byte) render_screen_original::x#3!=(byte) $28) goto render_screen_original::@4 -- vbuxx_neq_vbuc1_then_la1 cpx #$28 bne __b4 // render_screen_original::@5 // for(char y:0..24) - // [543] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 + // [548] (byte) render_screen_original::y#1 ← ++ (byte) render_screen_original::y#6 -- vbuz1=_inc_vbuz1 inc.z y - // [544] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 + // [549] if((byte) render_screen_original::y#1!=(byte) $19) goto render_screen_original::@1 -- vbuz1_neq_vbuc1_then_la1 lda #$19 cmp.z y bne __b1 // render_screen_original::@return // } - // [545] return + // [550] return rts } // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // *SID_VOICE3_FREQ = 0xffff - // [546] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // SID->CH3_FREQ = 0xffff + // [551] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE - // [547] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // SID->CH3_CONTROL = SID_CONTROL_NOISE + // [552] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL // sid_rnd_init::@return // } - // [548] return + // [553] return rts } // sprites_irq @@ -25003,113 +25157,113 @@ sprites_irq: { // Clear decimal flag (because it is used by the score algorithm) cld // ypos = irq_sprite_ypos - // [550] (byte) sprites_irq::ypos#0 ← (volatile byte) irq_sprite_ypos -- vbuaa=vbuz1 + // [555] (byte) sprites_irq::ypos#0 ← (volatile byte) irq_sprite_ypos -- vbuaa=vbuz1 // Place the sprites lda.z irq_sprite_ypos // SPRITES_YPOS[0] = ypos - // [551] *((const nomodify byte*) SPRITES_YPOS) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [556] *((const nomodify byte*) SPRITES_YPOS) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS // SPRITES_YPOS[2] = ypos - // [552] *((const nomodify byte*) SPRITES_YPOS+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [557] *((const nomodify byte*) SPRITES_YPOS+(byte) 2) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+2 // SPRITES_YPOS[4] = ypos - // [553] *((const nomodify byte*) SPRITES_YPOS+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [558] *((const nomodify byte*) SPRITES_YPOS+(byte) 4) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+4 // SPRITES_YPOS[6] = ypos - // [554] *((const nomodify byte*) SPRITES_YPOS+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa + // [559] *((const nomodify byte*) SPRITES_YPOS+(byte) 6) ← (byte) sprites_irq::ypos#0 -- _deref_pbuc1=vbuaa sta SPRITES_YPOS+6 // irq_raster_next+1 - // [555] (byte~) sprites_irq::$0 ← (volatile byte) irq_raster_next + (byte) 1 -- vbuxx=vbuz1_plus_1 + // [560] (byte~) sprites_irq::$0 ← (volatile byte) irq_raster_next + (byte) 1 -- vbuxx=vbuz1_plus_1 ldx.z irq_raster_next inx // raster_sprite_gfx_modify = irq_raster_next+1 - // [556] (volatile byte) sprites_irq::raster_sprite_gfx_modify ← (byte~) sprites_irq::$0 -- vbuz1=vbuxx + // [561] (volatile byte) sprites_irq::raster_sprite_gfx_modify ← (byte~) sprites_irq::$0 -- vbuz1=vbuxx // Wait for the y-position before changing sprite pointers stx.z raster_sprite_gfx_modify // sprites_irq::@8 __b8: // while(*RASTERsprites_irq::toSpritePtr1] + // [586] phi from sprites_irq::@3 to sprites_irq::toSpritePtr1 [phi:sprites_irq::@3->sprites_irq::toSpritePtr1] // sprites_irq::toSpritePtr1 // sprites_irq::@11 // irq_sprite_ptr = toSpritePtr(PLAYFIELD_SPRITES) - // [582] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 -- vbuz1=vbuc1 + // [587] (volatile byte) irq_sprite_ptr ← (const byte) sprites_irq::toSpritePtr1_return#0 -- vbuz1=vbuc1 lda #toSpritePtr1_return sta.z irq_sprite_ptr jmp __b5 // sprites_irq::@1 __b1: // PLAYFIELD_SPRITE_PTRS_1[0] = ptr++ - // [583] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx + // [588] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1 // PLAYFIELD_SPRITE_PTRS_1[0] = ptr++; - // [584] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx + // [589] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx inx // PLAYFIELD_SPRITE_PTRS_1[1] = ptr - // [585] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx + // [590] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1+1 // PLAYFIELD_SPRITE_PTRS_1[2] = ptr++ - // [586] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx + // [591] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx stx PLAYFIELD_SPRITE_PTRS_1+2 // PLAYFIELD_SPRITE_PTRS_1[2] = ptr++; - // [587] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx + // [592] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx inx txa // PLAYFIELD_SPRITE_PTRS_1[3] = ptr - // [588] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa + // [593] *((const nomodify byte*) PLAYFIELD_SPRITE_PTRS_1+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa sta PLAYFIELD_SPRITE_PTRS_1+3 jmp __b2 } diff --git a/src/test/ref/complex/tetris/tetris.sym b/src/test/ref/complex/tetris/tetris.sym index bb73dce86..b829abc3f 100644 --- a/src/test/ref/complex/tetris/tetris.sym +++ b/src/test/ref/complex/tetris/tetris.sym @@ -58,10 +58,36 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const to_nomodify byte*) MOVEDOWN_SLOW_SPEEDS[] = { (byte) $30, (byte) $2b, (byte) $26, (byte) $21, (byte) $1c, (byte) $17, (byte) $12, (byte) $d, (byte) 8, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 4, (byte) 4, (byte) 4, (byte) 3, (byte) 3, (byte) 3, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 2, (byte) 1 } (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const nomodify byte) ORANGE = (byte) 8 (const word*) PIECES[] = { (word)(const byte*) PIECE_T, (word)(const byte*) PIECE_S, (word)(const byte*) PIECE_Z, (word)(const byte*) PIECE_J, (word)(const byte*) PIECE_O, (word)(const byte*) PIECE_I, (word)(const byte*) PIECE_L } (const byte*) PIECES_CHARS[] = { (byte) $65, (byte) $66, (byte) $a6, (byte) $66, (byte) $65, (byte) $65, (byte) $a6 } @@ -105,10 +131,8 @@ (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte) RED = (byte) 2 (const to_nomodify dword*) SCORE_BASE_BCD[] = { (dword) 0, (dword) $40, (dword) $100, (dword) $300, (dword) $1200 } +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*) 54272 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*) 54290 -(const nomodify word*) SID_VOICE3_FREQ = (word*) 54286 -(const nomodify byte*) SID_VOICE3_OSC = (byte*) 54299 (const nomodify byte*) SPRITES_COLS = (byte*) 53287 (const nomodify byte*) SPRITES_ENABLE = (byte*) 53269 (const nomodify byte*) SPRITES_EXPAND_X = (byte*) 53277 @@ -144,29 +168,29 @@ (byte) current_orientation#7 current_orientation zp[1]:22 150001.5 (byte*) current_piece (byte*) current_piece#10 current_piece zp[2]:19 8138.27027027027 -(byte*) current_piece#100 current_piece zp[2]:19 11.0 (byte*) current_piece#15 current_piece zp[2]:19 7706.51282051282 (byte*) current_piece#17 current_piece_1 zp[2]:10 1.1400006E7 (byte*) current_piece#28 current_piece zp[2]:19 300003.0 -(byte*) current_piece#92 current_piece zp[2]:19 100001.0 +(byte*) current_piece#91 current_piece zp[2]:19 100001.0 +(byte*) current_piece#94 current_piece_1 zp[2]:10 200002.0 (byte*) current_piece#95 current_piece_1 zp[2]:10 200002.0 (byte*) current_piece#96 current_piece_1 zp[2]:10 200002.0 (byte*) current_piece#97 current_piece_1 zp[2]:10 200002.0 -(byte*) current_piece#98 current_piece_1 zp[2]:10 200002.0 -(byte*) current_piece#99 current_piece_1 zp[2]:10 2000002.0 +(byte*) current_piece#98 current_piece_1 zp[2]:10 2000002.0 +(byte*) current_piece#99 current_piece zp[2]:19 11.0 (byte) current_piece_char (byte) current_piece_char#10 current_piece_char zp[1]:21 1.8182183847272727E8 -(byte) current_piece_char#100 current_piece_char_1 zp[1]:9 202.0 (byte) current_piece_char#16 current_piece_char zp[1]:21 5437.9729729729725 (byte) current_piece_char#29 current_piece_char zp[1]:21 300003.0 -(byte) current_piece_char#5 current_piece_char zp[1]:21 34375.75 +(byte) current_piece_char#5 current_piece_char zp[1]:21 31429.257142857143 (byte) current_piece_char#68 current_piece_char_1 zp[1]:9 47624.42857142857 -(byte) current_piece_char#99 current_piece_char_1 zp[1]:9 22.0 +(byte) current_piece_char#98 current_piece_char_1 zp[1]:9 22.0 +(byte) current_piece_char#99 current_piece_char_1 zp[1]:9 202.0 (byte*) current_piece_gfx -(byte*) current_piece_gfx#111 current_piece_gfx_1 zp[2]:7 11.0 -(byte*) current_piece_gfx#112 current_piece_gfx_1 zp[2]:7 101.0 -(byte*) current_piece_gfx#116 current_piece_gfx zp[2]:23 200002.0 -(byte*) current_piece_gfx#122 current_piece_gfx zp[2]:23 22.0 +(byte*) current_piece_gfx#110 current_piece_gfx_1 zp[2]:7 11.0 +(byte*) current_piece_gfx#111 current_piece_gfx_1 zp[2]:7 101.0 +(byte*) current_piece_gfx#115 current_piece_gfx zp[2]:23 200002.0 +(byte*) current_piece_gfx#121 current_piece_gfx zp[2]:23 22.0 (byte*) current_piece_gfx#13 current_piece_gfx zp[2]:23 1.8182183847272727E8 (byte*) current_piece_gfx#18 current_piece_gfx zp[2]:23 1009.7619047619048 (byte*) current_piece_gfx#20 current_piece_gfx zp[2]:23 15185.37037037037 @@ -175,9 +199,9 @@ (byte*) current_piece_gfx#64 current_piece_gfx_1 zp[2]:7 47624.42857142857 (byte*) current_piece_gfx#7 current_piece_gfx zp[2]:23 200002.0 (byte) current_xpos -(byte) current_xpos#100 current_xpos zp[1]:25 67742.74193548388 -(byte) current_xpos#118 current_xpos_1 zp[1]:6 7.333333333333333 -(byte) current_xpos#119 current_xpos_1 zp[1]:6 67.33333333333333 +(byte) current_xpos#100 current_xpos zp[1]:25 61765.44117647059 +(byte) current_xpos#117 current_xpos_1 zp[1]:6 7.333333333333333 +(byte) current_xpos#118 current_xpos_1 zp[1]:6 67.33333333333333 (byte) current_xpos#14 current_xpos zp[1]:25 1.8187293036363635E7 (byte) current_xpos#19 current_xpos zp[1]:25 1009.7619047619048 (byte) current_xpos#22 current_xpos zp[1]:25 36400.4 @@ -192,14 +216,14 @@ (byte) current_ypos#19 current_ypos zp[1]:13 6425.74358974359 (byte) current_ypos#3 current_ypos zp[1]:13 200002.0 (byte) current_ypos#38 current_ypos zp[1]:13 300003.0 -(byte) current_ypos#6 current_ypos zp[1]:13 70000.83333333334 -(byte) current_ypos#97 reg byte x 5.5 -(byte) current_ypos#98 reg byte x 40.4 +(byte) current_ypos#6 current_ypos zp[1]:13 63637.121212121216 +(byte) current_ypos#96 reg byte x 5.5 +(byte) current_ypos#97 reg byte x 40.4 (byte) game_over (byte) game_over#10 game_over zp[1]:27 6567.760869565218 (byte) game_over#15 game_over zp[1]:27 5705.54054054054 (byte) game_over#27 game_over zp[1]:27 300003.0 -(byte) game_over#52 game_over zp[1]:27 47827.13043478261 +(byte) game_over#52 game_over zp[1]:27 42308.61538461538 (byte) game_over#65 game_over zp[1]:27 78572.35714285714 (volatile byte) irq_cnt loadstore zp[1]:46 0.48000000000000004 (volatile byte) irq_raster_next loadstore zp[1]:43 0.44444444444444453 @@ -613,21 +637,20 @@ (byte) play_remove_lines::y#8 y zp[1]:28 1.3333333346666667E8 (void()) play_spawn_current() (byte~) play_spawn_current::$1 reg byte a 2000002.0 -(byte~) play_spawn_current::$7 zp[1]:52 32258.09677419355 +(byte~) play_spawn_current::$5 reg byte a 2.000000002E9 +(byte~) play_spawn_current::$7 zp[1]:52 29411.79411764706 (label) play_spawn_current::@1 (label) play_spawn_current::@2 (label) play_spawn_current::@3 (label) play_spawn_current::@4 (label) play_spawn_current::@5 +(label) play_spawn_current::@6 (label) play_spawn_current::@return (byte) play_spawn_current::current_piece_idx (byte) play_spawn_current::current_piece_idx#0 reg byte x 1250001.25 (byte) play_spawn_current::piece_idx (byte) play_spawn_current::piece_idx#1 piece_idx zp[1]:26 2.000000002E9 (byte) play_spawn_current::piece_idx#2 piece_idx zp[1]:26 1.000050018E8 -(label) play_spawn_current::sid_rnd1 -(byte) play_spawn_current::sid_rnd1_return -(byte) play_spawn_current::sid_rnd1_return#0 reg byte a 2.000000002E9 (void()) play_update_score((byte) play_update_score::removed) (byte~) play_update_score::$2 reg byte a 2000002.0 (byte~) play_update_score::$4 reg byte a 2000002.0 @@ -882,6 +905,11 @@ (volatile dword) score_bcd loadstore zp[4]:39 14598.569343065694 (const byte**) screen_lines_1[(const nomodify byte) PLAYFIELD_LINES] = { fill( PLAYFIELD_LINES, 0) } (const byte**) screen_lines_2[(const nomodify byte) PLAYFIELD_LINES] = { fill( PLAYFIELD_LINES, 0) } +(byte()) sid_rnd() +(label) sid_rnd::@return +(byte) sid_rnd::return +(byte) sid_rnd::return#0 reg byte a 3.666666667333333E9 +(byte) sid_rnd::return#2 reg byte a 2.000000002E9 (void()) sid_rnd_init() (label) sid_rnd_init::@return (void()) sprites_init() @@ -937,15 +965,15 @@ reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::b reg byte x [ render_screen_render#15 render_screen_render#65 ] reg byte y [ next_piece_idx#12 next_piece_idx#76 next_piece_idx#77 ] reg byte x [ render_next::c#2 render_next::c#1 ] -reg byte x [ current_ypos#13 current_ypos#97 current_ypos#98 ] +reg byte x [ current_ypos#13 current_ypos#96 current_ypos#97 ] zp[1]:5 [ render_screen_render#33 render_screen_render#64 render_next::l#7 render_next::l#1 ] -zp[1]:6 [ current_xpos#59 current_xpos#118 current_xpos#119 ] -zp[2]:7 [ current_piece_gfx#64 current_piece_gfx#111 current_piece_gfx#112 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 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[1]:9 [ current_piece_char#68 current_piece_char#99 current_piece_char#100 ] +zp[1]:6 [ current_xpos#59 current_xpos#117 current_xpos#118 ] +zp[2]:7 [ current_piece_gfx#64 current_piece_gfx#110 current_piece_gfx#111 render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#8 render_next::next_piece_gfx#1 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[1]:9 [ current_piece_char#68 current_piece_char#98 current_piece_char#99 ] reg byte x [ render_moving::c#2 render_moving::c#1 ] reg byte x [ render_screen_render#22 render_screen_render#63 ] reg byte a [ play_move_rotate::return#2 ] -zp[2]:10 [ current_piece#17 current_piece#95 current_piece#96 current_piece#97 current_piece#98 current_piece#99 play_collision::piece_gfx#0 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] +zp[2]:10 [ current_piece#17 current_piece#94 current_piece#95 current_piece#96 current_piece#97 current_piece#98 play_collision::piece_gfx#0 render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#11 render_next::screen_next_area#4 render_next::screen_next_area#3 render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ] reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ] reg byte x [ play_collision::c#2 play_collision::c#1 ] reg byte a [ play_collision::return#15 ] @@ -956,10 +984,10 @@ zp[2]:14 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ] zp[1]:16 [ level#33 level#10 level#17 level#19 level#21 ] zp[1]:17 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#1 current_movedown_slow#21 current_movedown_slow#23 current_movedown_slow#65 current_movedown_slow#10 ] zp[1]:18 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ] -zp[2]:19 [ current_piece#28 current_piece#10 current_piece#100 current_piece#15 current_piece#92 ] +zp[2]:19 [ current_piece#28 current_piece#10 current_piece#99 current_piece#15 current_piece#91 ] zp[1]:21 [ current_piece_char#29 current_piece_char#10 current_piece_char#5 current_piece_char#16 ] zp[1]:22 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ] -zp[2]:23 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#122 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#116 ] +zp[2]:23 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#121 current_piece_gfx#18 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#115 ] zp[1]:25 [ current_xpos#43 current_xpos#14 current_xpos#100 current_xpos#19 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ] reg byte x [ play_move_down::return#3 ] zp[1]:26 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 play_spawn_current::piece_idx#2 next_piece_idx#16 play_spawn_current::piece_idx#1 ] @@ -1037,7 +1065,9 @@ reg byte x [ play_update_score::removed#0 ] reg byte x [ play_spawn_current::current_piece_idx#0 ] reg byte a [ play_collision::return#10 ] reg byte a [ play_spawn_current::$1 ] -reg byte a [ play_spawn_current::sid_rnd1_return#0 ] +reg byte a [ sid_rnd::return#2 ] +reg byte a [ play_spawn_current::$5 ] +reg byte a [ sid_rnd::return#0 ] reg byte a [ play_update_score::$2 ] zp[1]:52 [ play_update_score::lines_before#0 play_spawn_current::$7 ] reg byte a [ play_update_score::$9 ] diff --git a/src/test/ref/cordic-atan2-16-ref.log b/src/test/ref/cordic-atan2-16-ref.log index ec3214122..4247b566b 100644 --- a/src/test/ref/cordic-atan2-16-ref.log +++ b/src/test/ref/cordic-atan2-16-ref.log @@ -1,7 +1,5 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET @@ -560,6 +558,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1855,6 +1876,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 20002.0 (byte~) atan2_16::$22 2.0000002E7 @@ -3225,6 +3269,7 @@ Uplift Scope [] 12,603: zp[2]:12 [ print_char_cursor#18 print_char_cursor#24 pri Uplift Scope [print_uchar] 2,002: zp[1]:61 [ print_uchar::$0 ] 2,002: zp[1]:62 [ print_uchar::$2 ] 955: zp[1]:10 [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Uplift Scope [print_uint] 71: zp[2]:59 [ print_uint::w#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplifting [atan2_16] best 1158649 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:25 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:27 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:20 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:15 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:17 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:22 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:47 [ atan2_16::return#2 ] zp[2]:43 [ atan2_16::x#0 ] zp[2]:45 [ atan2_16::y#0 ] @@ -3240,6 +3285,7 @@ Uplifting [] best 1136236 combination zp[2]:12 [ print_char_cursor#18 print_char Uplifting [print_uchar] best 1136218 combination reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] reg byte x [ print_uchar::b#2 print_uchar::b#0 print_uchar::b#1 ] Uplifting [print_uint] best 1136218 combination zp[2]:59 [ print_uint::w#0 ] Uplifting [MOS6526_CIA] best 1136218 combination +Uplifting [MOS6581_SID] best 1136218 combination Uplifting [RADIX] best 1136218 combination Attempting to uplift remaining variables inzp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Uplifting [init_font_hex] best 1136218 combination zp[1]:38 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -4278,6 +4324,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/cordic-atan2-16-ref.sym b/src/test/ref/cordic-atan2-16-ref.sym index 3bb9204e2..543a57859 100644 --- a/src/test/ref/cordic-atan2-16-ref.sym +++ b/src/test/ref/cordic-atan2-16-ref.sym @@ -23,6 +23,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/cordic-atan2-16.log b/src/test/ref/cordic-atan2-16.log index 4dac58eaf..840ad50ff 100644 --- a/src/test/ref/cordic-atan2-16.log +++ b/src/test/ref/cordic-atan2-16.log @@ -1,7 +1,5 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET @@ -406,6 +404,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*)(number) $2800 (const byte) SIZEOF_WORD = (byte) 2 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) @@ -1407,6 +1428,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 20002.0 (byte~) atan2_16::$22 2.0000002E7 @@ -2429,6 +2473,7 @@ Uplift Scope [atan2_16] 286,666,670.58: zp[1]:15 [ atan2_16::shift#2 atan2_16::s Uplift Scope [init_font_hex] 216,668.83: zp[1]:28 [ init_font_hex::i#2 init_font_hex::i#1 ] 200,002: zp[1]:48 [ init_font_hex::$1 ] 200,002: zp[1]:49 [ init_font_hex::$2 ] 115,001.6: zp[1]:29 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 100,001: zp[1]:47 [ init_font_hex::$0 ] 20,002: zp[1]:50 [ init_font_hex::idx#3 ] 16,334.97: zp[1]:27 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 16,288.71: zp[2]:23 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 14,231.5: zp[2]:25 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 6,334.17: zp[2]:20 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 1,606.87: zp[1]:22 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplift Scope [main] 2,002: zp[2]:40 [ main::angle_w#0 ] 2,002: zp[2]:42 [ main::$3 ] 2,002: zp[1]:44 [ main::ang_w#0 ] 1,668.33: zp[1]:3 [ main::x#2 main::x#1 ] 904.78: zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] 500.5: zp[2]:30 [ main::xw#0 ] 500.5: zp[2]:32 [ main::yw#0 ] 164.97: zp[1]:2 [ main::y#4 main::y#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [atan2_16] best 1149809 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:16 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:18 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:11 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:6 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:8 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:13 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:38 [ atan2_16::return#2 ] zp[2]:34 [ atan2_16::x#0 ] zp[2]:36 [ atan2_16::y#0 ] @@ -2437,6 +2482,7 @@ Uplifting [init_font_hex] best 1130809 combination reg byte x [ init_font_hex::i Limited combination testing to 100 combinations of 6912 possible. Uplifting [main] best 1130209 combination zp[2]:40 [ main::angle_w#0 ] zp[2]:42 [ main::$3 ] reg byte a [ main::ang_w#0 ] zp[1]:3 [ main::x#2 main::x#1 ] zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] zp[2]:30 [ main::xw#0 ] zp[2]:32 [ main::yw#0 ] zp[1]:2 [ main::y#4 main::y#1 ] Uplifting [MOS6526_CIA] best 1130209 combination +Uplifting [MOS6581_SID] best 1130209 combination Uplifting [] best 1130209 combination Attempting to uplift remaining variables inzp[1]:29 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Uplifting [init_font_hex] best 1130209 combination zp[1]:29 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -3251,6 +3297,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 10240 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 zp[2]:10 20002.0 diff --git a/src/test/ref/cordic-atan2-16.sym b/src/test/ref/cordic-atan2-16.sym index 46a55c2f0..d47a7dbec 100644 --- a/src/test/ref/cordic-atan2-16.sym +++ b/src/test/ref/cordic-atan2-16.sym @@ -23,6 +23,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 10240 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 zp[2]:10 20002.0 diff --git a/src/test/ref/cordic-atan2-clear.log b/src/test/ref/cordic-atan2-clear.log index d2c8b7774..a4d1a1adf 100644 --- a/src/test/ref/cordic-atan2-clear.log +++ b/src/test/ref/cordic-atan2-clear.log @@ -1,7 +1,5 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET @@ -460,6 +458,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte*) SCREEN = (byte*)(number) $2800 (const byte) SIZEOF_WORD = (byte) 2 @@ -1609,6 +1630,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 200002.0 (byte~) atan2_16::$22 2.00000002E8 @@ -2841,6 +2885,7 @@ Uplift Scope [init_font_hex] 216,668.83: zp[1]:33 [ init_font_hex::i#2 init_font Uplift Scope [init_angle_screen] 21,820.36: zp[1]:10 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 20,002: zp[1]:35 [ init_angle_screen::$3 ] 20,002: zp[1]:36 [ init_angle_screen::$4 ] 20,002: zp[1]:39 [ init_angle_screen::$5 ] 20,002: zp[2]:48 [ init_angle_screen::angle_w#0 ] 20,002: zp[2]:50 [ init_angle_screen::$7 ] 20,002: zp[1]:53 [ init_angle_screen::$9 ] 20,002: zp[1]:54 [ init_angle_screen::$10 ] 20,002: zp[1]:55 [ init_angle_screen::$11 ] 12,858.43: zp[1]:9 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 7,143.57: zp[1]:52 [ init_angle_screen::ang_w#0 ] 5,000.5: zp[2]:40 [ init_angle_screen::yw#0 ] 3,333.67: zp[2]:37 [ init_angle_screen::xw#0 ] 1,963.15: zp[1]:4 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 1,547.49: zp[2]:7 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#1 ] 1,417.33: zp[2]:5 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#1 ] Uplift Scope [main] 1,028.5: zp[2]:2 [ main::clear_char#5 main::clear_char#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [atan2_16] best 1174671 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:21 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:23 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:16 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:11 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:13 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:18 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:46 [ atan2_16::return#2 ] zp[2]:42 [ atan2_16::x#0 ] zp[2]:44 [ atan2_16::y#0 ] @@ -2851,6 +2896,7 @@ Uplifting [init_angle_screen] best 1154071 combination zp[1]:10 [ init_angle_scr Limited combination testing to 100 combinations of 65536 possible. Uplifting [main] best 1154071 combination zp[2]:2 [ main::clear_char#5 main::clear_char#1 ] Uplifting [MOS6526_CIA] best 1154071 combination +Uplifting [MOS6581_SID] best 1154071 combination Uplifting [] best 1154071 combination Attempting to uplift remaining variables inzp[1]:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Uplifting [init_font_hex] best 1154071 combination zp[1]:34 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -3811,6 +3857,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 10240 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) diff --git a/src/test/ref/cordic-atan2-clear.sym b/src/test/ref/cordic-atan2-clear.sym index 3d889d845..191b3777b 100644 --- a/src/test/ref/cordic-atan2-clear.sym +++ b/src/test/ref/cordic-atan2-clear.sym @@ -22,6 +22,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 10240 (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) diff --git a/src/test/ref/cordic-atan2.log b/src/test/ref/cordic-atan2.log index 4f9cd6228..e632e658c 100644 --- a/src/test/ref/cordic-atan2.log +++ b/src/test/ref/cordic-atan2.log @@ -1,7 +1,5 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET @@ -337,6 +335,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*)(number) $2800 (byte()) atan2_8((signed byte) atan2_8::x , (signed byte) atan2_8::y) (bool~) atan2_8::$0 @@ -1164,6 +1185,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte()) atan2_8((signed byte) atan2_8::x , (signed byte) atan2_8::y) (signed byte~) atan2_8::$2 20002.0 (signed byte~) atan2_8::$7 20002.0 @@ -1983,6 +2027,7 @@ Uplift Scope [atan2_8] 77,787,786.56: zp[1]:9 [ atan2_8::angle#6 atan2_8::angle# Uplift Scope [init_font_hex] 216,668.83: zp[1]:19 [ init_font_hex::i#2 init_font_hex::i#1 ] 200,002: zp[1]:28 [ init_font_hex::$1 ] 200,002: zp[1]:29 [ init_font_hex::$2 ] 115,001.6: zp[1]:20 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 100,001: zp[1]:27 [ init_font_hex::$0 ] 20,002: zp[1]:30 [ init_font_hex::idx#3 ] 16,334.97: zp[1]:18 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 16,288.71: zp[2]:14 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 14,231.5: zp[2]:16 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 6,334.17: zp[2]:11 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 1,606.87: zp[1]:13 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplift Scope [main] 2,002: zp[1]:24 [ main::angle#0 ] 1,876.88: zp[1]:3 [ main::x#2 main::x#1 ] 1,066.03: zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] 260.86: zp[1]:2 [ main::y#4 main::y#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [atan2_8] best 278273 combination zp[1]:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] reg byte x [ atan2_8::yi#3 atan2_8::yi#7 atan2_8::yi#0 atan2_8::yi#11 atan2_8::$2 atan2_8::yi#1 atan2_8::yi#2 ] zp[1]:7 [ atan2_8::xi#3 atan2_8::xi#7 atan2_8::xi#0 atan2_8::xi#8 atan2_8::$7 atan2_8::xi#1 atan2_8::xi#2 ] zp[1]:8 [ atan2_8::i#2 atan2_8::i#1 ] zp[1]:26 [ atan2_8::yd#0 ] zp[1]:25 [ atan2_8::xd#0 ] zp[1]:10 [ atan2_8::return#0 atan2_8::angle#11 atan2_8::angle#1 atan2_8::angle#4 atan2_8::angle#5 ] zp[1]:23 [ atan2_8::return#2 ] zp[1]:21 [ atan2_8::x#0 ] zp[1]:22 [ atan2_8::y#0 ] @@ -1991,6 +2036,7 @@ Uplifting [init_font_hex] best 259273 combination reg byte x [ init_font_hex::i# Limited combination testing to 100 combinations of 6912 possible. Uplifting [main] best 258673 combination reg byte a [ main::angle#0 ] zp[1]:3 [ main::x#2 main::x#1 ] zp[2]:4 [ main::screen#2 main::screen#4 main::screen#1 ] zp[1]:2 [ main::y#4 main::y#1 ] Uplifting [MOS6526_CIA] best 258673 combination +Uplifting [MOS6581_SID] best 258673 combination Uplifting [] best 258673 combination Attempting to uplift remaining variables inzp[1]:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] Uplifting [atan2_8] best 258673 combination zp[1]:9 [ atan2_8::angle#6 atan2_8::angle#12 atan2_8::angle#13 atan2_8::angle#2 atan2_8::angle#3 ] @@ -2694,6 +2740,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 10240 (byte()) atan2_8((signed byte) atan2_8::x , (signed byte) atan2_8::y) (signed byte~) atan2_8::$2 reg byte x 20002.0 diff --git a/src/test/ref/cordic-atan2.sym b/src/test/ref/cordic-atan2.sym index f0bca7eef..836f2d509 100644 --- a/src/test/ref/cordic-atan2.sym +++ b/src/test/ref/cordic-atan2.sym @@ -22,6 +22,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 10240 (byte()) atan2_8((signed byte) atan2_8::x , (signed byte) atan2_8::y) (signed byte~) atan2_8::$2 reg byte x 20002.0 diff --git a/src/test/ref/danny-joystick-problem.log b/src/test/ref/danny-joystick-problem.log index 76c7ecf39..69539733f 100644 --- a/src/test/ref/danny-joystick-problem.log +++ b/src/test/ref/danny-joystick-problem.log @@ -1,8 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -46,6 +41,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) SCREEN = (byte*)(number) $400 (void()) main() @@ -113,6 +131,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte) main::port4Value (byte) main::port4Value#0 22.0 @@ -182,10 +223,12 @@ Potential registers zp[1]:2 [ main::port4Value#0 ] : zp[1]:2 , reg byte a , reg REGISTER UPLIFT SCOPES Uplift Scope [main] 22: zp[1]:2 [ main::port4Value#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [main] best 41 combination reg byte a [ main::port4Value#0 ] Uplifting [MOS6526_CIA] best 41 combination +Uplifting [MOS6581_SID] best 41 combination Uplifting [] best 41 combination ASSEMBLER BEFORE OPTIMIZATION @@ -272,6 +315,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) SCREEN = (byte*) 1024 (void()) main() diff --git a/src/test/ref/danny-joystick-problem.sym b/src/test/ref/danny-joystick-problem.sym index 2b51c1bb1..81264ffd2 100644 --- a/src/test/ref/danny-joystick-problem.sym +++ b/src/test/ref/danny-joystick-problem.sym @@ -16,6 +16,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) SCREEN = (byte*) 1024 (void()) main() diff --git a/src/test/ref/declared-memory-var-3.log b/src/test/ref/declared-memory-var-3.log index c6ac1b6c8..65e647c85 100644 --- a/src/test/ref/declared-memory-var-3.log +++ b/src/test/ref/declared-memory-var-3.log @@ -1,6 +1,4 @@ Setting struct to load/store in variable affected by address-of (struct foo*) main::barp ← &(struct foo) bar -Replacing struct member reference *((struct foo*) main::barp).thing1 with member unwinding reference *((byte*~) main::$0) -Replacing struct member reference *((struct foo*) main::barp).thing2 with member unwinding reference *((byte*~) main::$1) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/declared-memory-var-4.log b/src/test/ref/declared-memory-var-4.log index 7e82fab42..92a12ad9c 100644 --- a/src/test/ref/declared-memory-var-4.log +++ b/src/test/ref/declared-memory-var-4.log @@ -3,9 +3,6 @@ Fixing struct type size struct foo to 14 Fixing struct type SIZE_OF struct foo to 14 Fixing struct type SIZE_OF struct foo to 14 Setting struct to load/store in variable affected by address-of (struct foo*) main::barp ← &(struct foo) bar -Replacing struct member reference *((struct foo*) main::barp).thing1 with member unwinding reference *((byte*~) main::$1) -Replacing struct member reference *((struct foo*) main::barp).thing2 with member unwinding reference *((byte*~) main::$2) -Replacing struct member reference *((struct foo*) main::barp).thing3 with member unwinding reference (byte*~) main::$3 CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/declared-memory-var-5.log b/src/test/ref/declared-memory-var-5.log index 804b5452d..7bc35cea8 100644 --- a/src/test/ref/declared-memory-var-5.log +++ b/src/test/ref/declared-memory-var-5.log @@ -1,5 +1,3 @@ -Replacing struct member reference (struct foo) bar.thing1 with member unwinding reference *((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING1) -Replacing struct member reference (struct foo) bar.thing2 with member unwinding reference *((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING2) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/enum-7.log b/src/test/ref/enum-7.log index 7021ddb26..e6327bdc2 100644 --- a/src/test/ref/enum-7.log +++ b/src/test/ref/enum-7.log @@ -1,11 +1,3 @@ -Created struct value member variable (byte) main::button_color -Created struct value member variable (byte) main::button_size -Converted struct value to member variables (struct Button) main::button -Unwinding value copy (struct Button) main::button ← { color: (const byte) RED, size: (byte) $18 } -Adding value simple copy (byte) main::button_color ← (const byte) RED -Adding value simple copy (byte) main::button_size ← (byte) $18 -Replacing struct member reference (struct Button) main::button.color with member unwinding reference (byte) main::button_color -Replacing struct member reference (struct Button) main::button.size with member unwinding reference (byte) main::button_size CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/enum-8.log b/src/test/ref/enum-8.log index 5ac158f3e..6da7d5c33 100644 --- a/src/test/ref/enum-8.log +++ b/src/test/ref/enum-8.log @@ -1,11 +1,3 @@ -Created struct value member variable (byte) main::button_color -Created struct value member variable (byte) main::button_size -Converted struct value to member variables (struct Button) main::button -Unwinding value copy (struct Button) main::button ← { color: (const byte) RED, size: (byte) $18 } -Adding value simple copy (byte) main::button_color ← (const byte) RED -Adding value simple copy (byte) main::button_size ← (byte) $18 -Replacing struct member reference (struct Button) main::button.color with member unwinding reference (byte) main::button_color -Replacing struct member reference (struct Button) main::button.size with member unwinding reference (byte) main::button_size CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index 72462951d..1a297f5ea 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -89,8 +89,6 @@ Resolved forward reference COSH_LO to (byte*) COSH_LO Resolved forward reference mulf_sqr1 to (const byte*) mulf_sqr1 Resolved forward reference mulf_sqr2 to (const byte*) mulf_sqr2 Resolved forward reference PERSP_Z to (const signed byte*) PERSP_Z -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call print_schar_pos (signed byte) sx (number) 0 (number) $25 Inlined call call print_schar_pos (signed byte) sy (number) 1 (number) $25 @@ -1103,6 +1101,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 6.0 @@ -3706,6 +3727,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) anim() (byte~) anim::$10 20002.0 (byte~) anim::$9 20002.0 @@ -6685,6 +6729,7 @@ Uplift Scope [print_str_at] 31,254.25: zp[2]:16 [ print_str_at::str#13 print_str Uplift Scope [] 2,144.9: zp[1]:3 [ sy#10 sy#3 ] 1,145.49: zp[1]:2 [ sx#10 sx#3 ] Uplift Scope [sprites_init] 2,836.17: zp[1]:22 [ sprites_init::i#2 sprites_init::i#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplift Scope [print_cls] Uplift Scope [main] @@ -6703,6 +6748,7 @@ Uplifting [print_str_at] best 74623 combination zp[2]:16 [ print_str_at::str#13 Uplifting [] best 74623 combination zp[1]:3 [ sy#10 sy#3 ] zp[1]:2 [ sx#10 sx#3 ] Uplifting [sprites_init] best 74473 combination reg byte x [ sprites_init::i#2 sprites_init::i#1 ] Uplifting [MOS6526_CIA] best 74473 combination +Uplifting [MOS6581_SID] best 74473 combination Uplifting [RADIX] best 74473 combination Uplifting [print_cls] best 74473 combination Uplifting [main] best 74473 combination @@ -9002,6 +9048,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 6.0 diff --git a/src/test/ref/examples/3d/3d.sym b/src/test/ref/examples/3d/3d.sym index 7a5935a01..41ce13756 100644 --- a/src/test/ref/examples/3d/3d.sym +++ b/src/test/ref/examples/3d/3d.sym @@ -21,6 +21,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 6.0 diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log index f802d785d..8a59d8115 100644 --- a/src/test/ref/examples/3d/perspective.log +++ b/src/test/ref/examples/3d/perspective.log @@ -1,8 +1,6 @@ Resolved forward reference mulf_sqr1 to (const byte*) mulf_sqr1 Resolved forward reference mulf_sqr2 to (const byte*) mulf_sqr2 Resolved forward reference PERSP_Z to (const signed byte*) PERSP_Z -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -472,6 +470,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 5.0 @@ -1479,6 +1500,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) do_perspective((signed byte) do_perspective::x , (signed byte) do_perspective::y , (signed byte) do_perspective::z) (signed byte) do_perspective::x (signed byte) do_perspective::y @@ -2411,6 +2455,7 @@ Uplift Scope [print_str] 31,254.25: zp[2]:4 [ print_str::str#7 print_str::str#10 Uplift Scope [mulf_init] 2,102.1: zp[1]:15 [ mulf_init::i#2 mulf_init::i#1 ] 2,002: zp[1]:22 [ mulf_init::$5 ] 2,002: zp[1]:23 [ mulf_init::$6 ] 1,501.5: zp[1]:21 [ mulf_init::$2 ] 881.83: zp[2]:16 [ mulf_init::add#2 mulf_init::add#1 ] 819: zp[1]:20 [ mulf_init::val#0 ] 731.5: zp[2]:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ] Uplift Scope [print_schar] 4,504.5: zp[1]:10 [ print_schar::b#6 print_schar::b#0 print_schar::b#4 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -2427,6 +2472,7 @@ Uplifting [mulf_init] best 3803 combination reg byte y [ mulf_init::i#2 mulf_ini Limited combination testing to 100 combinations of 432 possible. Uplifting [print_schar] best 3788 combination reg byte x [ print_schar::b#6 print_schar::b#0 print_schar::b#4 ] Uplifting [MOS6526_CIA] best 3788 combination +Uplifting [MOS6581_SID] best 3788 combination Uplifting [RADIX] best 3788 combination Uplifting [print_ln] best 3788 combination Uplifting [print_cls] best 3788 combination @@ -3289,6 +3335,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 5.0 diff --git a/src/test/ref/examples/3d/perspective.sym b/src/test/ref/examples/3d/perspective.sym index 08c750738..1bca1118d 100644 --- a/src/test/ref/examples/3d/perspective.sym +++ b/src/test/ref/examples/3d/perspective.sym @@ -15,6 +15,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const signed byte*) PERSP_Z[(number) $100] = kickasm {{ { .var d = 256.0 .var z0 = 5.0 diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.log b/src/test/ref/examples/bresenham/bitmap-bresenham.log index 324e91cef..97c65354d 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -666,6 +664,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 @@ -2152,6 +2173,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) bitmap_clear() (byte*) bitmap_clear::bitmap (word) bitmap_clear::bitmap#0 101.0 @@ -3838,6 +3882,7 @@ Uplift Scope [bitmap_clear] 22,007.6: zp[2]:32 [ bitmap_clear::bitmap#2 bitmap_c Uplift Scope [bitmap_init] 3,628.62: zp[2]:38 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] 2,268.93: zp[1]:36 [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] 2,168.83: zp[1]:35 [ bitmap_init::x#2 bitmap_init::x#1 ] 2,002: zp[1]:37 [ bitmap_init::y#2 bitmap_init::y#1 ] 2,002: zp[1]:63 [ bitmap_init::$0 ] 2,002: zp[1]:65 [ bitmap_init::$7 ] 2,002: zp[1]:66 [ bitmap_init::$8 ] 2,002: zp[1]:67 [ bitmap_init::$9 ] 500.5: zp[1]:64 [ bitmap_init::$10 ] Uplift Scope [init_screen] 3,336.67: zp[2]:29 [ init_screen::c#2 init_screen::c#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [] @@ -3858,6 +3903,7 @@ Uplifting [bitmap_init] best 272643 combination zp[2]:38 [ bitmap_init::yoffs#2 Limited combination testing to 100 combinations of 34560 possible. Uplifting [init_screen] best 272643 combination zp[2]:29 [ init_screen::c#2 init_screen::c#1 ] Uplifting [MOS6526_CIA] best 272643 combination +Uplifting [MOS6581_SID] best 272643 combination Uplifting [main] best 272643 combination Uplifting [] best 272643 combination Attempting to uplift remaining variables inzp[1]:8 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] @@ -5146,6 +5192,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.sym b/src/test/ref/examples/bresenham/bitmap-bresenham.sym index 7f9b17f3d..4e3a4880b 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.sym +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.sym @@ -19,6 +19,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_BMM = (byte) $20 (const nomodify byte) VIC_DEN = (byte) $10 diff --git a/src/test/ref/examples/chargen/chargen-analysis.log b/src/test/ref/examples/chargen/chargen-analysis.log index 5b7f2492f..ae9c9a23e 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.log +++ b/src/test/ref/examples/chargen/chargen-analysis.log @@ -1,11 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -488,6 +480,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*)(number) 1 @@ -1585,6 +1600,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) (byte) keyboard_get_keycode::ch (byte) keyboard_get_keycode::ch#0 11002.0 @@ -2849,6 +2887,7 @@ Uplift Scope [keyboard_get_keycode] 11,002: zp[1]:35 [ keyboard_get_keycode::ch# Uplift Scope [main] 4,004: zp[1]:8 [ main::pressed#2 main::pressed#1 ] 1,751.75: zp[1]:7 [ main::ch#2 main::ch#1 ] 1,501.5: zp[1]:37 [ main::key#0 ] 368.79: zp[1]:5 [ main::cur_pos#18 main::cur_pos#20 main::cur_pos#22 main::cur_pos#24 main::cur_pos#11 ] 336.67: zp[2]:2 [ main::sc#2 main::sc#1 ] 252.5: zp[1]:4 [ main::i#2 main::i#1 ] 202: zp[1]:26 [ main::$15 ] 202: zp[1]:28 [ main::$18 ] 202: zp[1]:30 [ main::$21 ] 202: zp[1]:32 [ main::$24 ] 202: zp[1]:34 [ main::$27 ] 52.68: zp[1]:6 [ main::shift#9 ] Uplift Scope [print_str_at] 3,129.25: zp[2]:21 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] 2,136.67: zp[2]:23 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [plot_chargen] best 726612 combination reg byte a [ plot_chargen::$8 ] reg byte x [ plot_chargen::x#2 plot_chargen::x#1 ] zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] zp[2]:16 [ plot_chargen::sc#3 plot_chargen::sc#7 plot_chargen::sc#0 plot_chargen::sc#2 plot_chargen::sc#1 ] reg byte a [ plot_chargen::c#2 ] zp[1]:14 [ plot_chargen::y#2 plot_chargen::y#1 ] zp[2]:12 [ plot_chargen::chargen#4 plot_chargen::chargen#0 plot_chargen::chargen#1 ] zp[2]:39 [ plot_chargen::$15 ] zp[2]:41 [ plot_chargen::$0 ] zp[1]:43 [ plot_chargen::$16 ] zp[1]:44 [ plot_chargen::$17 ] zp[1]:45 [ plot_chargen::$5 ] zp[1]:10 [ plot_chargen::shift#2 plot_chargen::shift#1 ] zp[1]:11 [ plot_chargen::pos#2 plot_chargen::pos#1 plot_chargen::pos#0 ] zp[1]:9 [ plot_chargen::ch#2 plot_chargen::ch#1 ] @@ -2861,6 +2900,7 @@ Uplifting [main] best 723459 combination reg byte a [ main::pressed#2 main::pres Limited combination testing to 100 combinations of 262144 possible. Uplifting [print_str_at] best 723459 combination zp[2]:21 [ print_str_at::str#5 print_str_at::str#7 print_str_at::str#4 ] zp[2]:23 [ print_str_at::at#5 print_str_at::at#7 print_str_at::at#4 ] Uplifting [MOS6526_CIA] best 723459 combination +Uplifting [MOS6581_SID] best 723459 combination Uplifting [] best 723459 combination Attempting to uplift remaining variables inzp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] Uplifting [plot_chargen] best 723459 combination zp[1]:15 [ plot_chargen::bits#2 plot_chargen::bits#0 plot_chargen::bits#1 ] @@ -3954,6 +3994,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*) 1 (const byte*) SCREEN = (byte*) 1024 diff --git a/src/test/ref/examples/chargen/chargen-analysis.sym b/src/test/ref/examples/chargen/chargen-analysis.sym index 5cc41beae..9ce7216a5 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.sym +++ b/src/test/ref/examples/chargen/chargen-analysis.sym @@ -72,6 +72,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte*) PROCPORT = (byte*) 1 (const byte*) SCREEN = (byte*) 1024 diff --git a/src/test/ref/examples/conio/nacht-screen.log b/src/test/ref/examples/conio/nacht-screen.log index f90347032..7bab4a9b9 100644 --- a/src/test/ref/examples/conio/nacht-screen.log +++ b/src/test/ref/examples/conio/nacht-screen.log @@ -3,9 +3,6 @@ Fixing struct type SIZE_OF struct $0 to 41 Fixing struct type SIZE_OF struct $0 to 41 Setting inferred volatile on symbol affected by address-of (void~) main::$0 ← call screensize &(byte) XSize &(byte) YSize Setting inferred volatile on symbol affected by address-of (void~) main::$0 ← call screensize &(volatile byte) XSize &(byte) YSize -Replacing struct member reference *((to_nomodify struct $0*) MakeNiceScreen::T).Msg with member unwinding reference (byte*~) MakeNiceScreen::$28 -Replacing struct member reference *((to_nomodify struct $0*) MakeNiceScreen::T).Y with member unwinding reference *((byte*~) MakeNiceScreen::$29) -Replacing struct member reference *((to_nomodify struct $0*) MakeNiceScreen::T).Msg with member unwinding reference (byte*~) MakeNiceScreen::$30 CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/examples/eightqueens/eightqueens-recursive.log b/src/test/ref/examples/eightqueens/eightqueens-recursive.log index 7f87ad092..9c401125a 100644 --- a/src/test/ref/examples/eightqueens/eightqueens-recursive.log +++ b/src/test/ref/examples/eightqueens/eightqueens-recursive.log @@ -8,201 +8,6 @@ Added struct type cast to parameter value list call printf_string (byte*~) main: Added struct type cast to parameter value list call printf_ulong (dword) count (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } Added struct type cast to parameter value list call printf_uchar (byte) print::i (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) HEXADECIMAL } Added struct type cast to parameter value list call printf_uchar (byte) print::i1 (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) HEXADECIMAL } -Created struct value member variable (byte) printf_slong::format_min_length -Created struct value member variable (byte) printf_slong::format_justify_left -Created struct value member variable (byte) printf_slong::format_sign_always -Created struct value member variable (byte) printf_slong::format_zero_padding -Created struct value member variable (byte) printf_slong::format_upper_case -Created struct value member variable (byte) printf_slong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_slong::format -Created struct value member variable (byte) printf_ulong::format_min_length -Created struct value member variable (byte) printf_ulong::format_justify_left -Created struct value member variable (byte) printf_ulong::format_sign_always -Created struct value member variable (byte) printf_ulong::format_zero_padding -Created struct value member variable (byte) printf_ulong::format_upper_case -Created struct value member variable (byte) printf_ulong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_ulong::format -Created struct value member variable (byte) printf_sint::format_min_length -Created struct value member variable (byte) printf_sint::format_justify_left -Created struct value member variable (byte) printf_sint::format_sign_always -Created struct value member variable (byte) printf_sint::format_zero_padding -Created struct value member variable (byte) printf_sint::format_upper_case -Created struct value member variable (byte) printf_sint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_sint::format -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Created struct value member variable (byte) printf_schar::format_min_length -Created struct value member variable (byte) printf_schar::format_justify_left -Created struct value member variable (byte) printf_schar::format_sign_always -Created struct value member variable (byte) printf_schar::format_zero_padding -Created struct value member variable (byte) printf_schar::format_upper_case -Created struct value member variable (byte) printf_schar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_schar::format -Created struct value member variable (byte) printf_uchar::format_min_length -Created struct value member variable (byte) printf_uchar::format_justify_left -Created struct value member variable (byte) printf_uchar::format_sign_always -Created struct value member variable (byte) printf_uchar::format_zero_padding -Created struct value member variable (byte) printf_uchar::format_upper_case -Created struct value member variable (byte) printf_uchar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uchar::format -Created struct value member variable (byte) printf_number_buffer::buffer_sign -Created struct value member variable (byte*) printf_number_buffer::buffer_digits -Converted struct value to member variables (struct printf_buffer_number) printf_number_buffer::buffer -Created struct value member variable (byte) printf_number_buffer::format_min_length -Created struct value member variable (byte) printf_number_buffer::format_justify_left -Created struct value member variable (byte) printf_number_buffer::format_sign_always -Created struct value member variable (byte) printf_number_buffer::format_zero_padding -Created struct value member variable (byte) printf_number_buffer::format_upper_case -Created struct value member variable (byte) printf_number_buffer::format_radix -Converted struct value to member variables (struct printf_format_number) printf_number_buffer::format -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Created struct value member variable (byte) tod_init::tod_TENTHS -Created struct value member variable (byte) tod_init::tod_SEC -Created struct value member variable (byte) tod_init::tod_MIN -Created struct value member variable (byte) tod_init::tod_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_init::tod -Created struct value member variable (byte) tod_read::return_TENTHS -Created struct value member variable (byte) tod_read::return_SEC -Created struct value member variable (byte) tod_read::return_MIN -Created struct value member variable (byte) tod_read::return_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_read::return -Created struct value member variable (byte) tod_read::tod_TENTHS -Created struct value member variable (byte) tod_read::tod_SEC -Created struct value member variable (byte) tod_read::tod_MIN -Created struct value member variable (byte) tod_read::tod_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_read::tod -Created struct value member variable (byte) tod_str::tod_TENTHS -Created struct value member variable (byte) tod_str::tod_SEC -Created struct value member variable (byte) tod_str::tod_MIN -Created struct value member variable (byte) tod_str::tod_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_str::tod -Created struct value member variable (byte~) main::$5_TENTHS -Created struct value member variable (byte~) main::$5_SEC -Created struct value member variable (byte~) main::$5_MIN -Created struct value member variable (byte~) main::$5_HOURS -Converted struct value to member variables (struct TIME_OF_DAY~) main::$5 -Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_schar((signed byte) printf_schar::value , (byte) printf_schar::format_min_length , (byte) printf_schar::format_justify_left , (byte) printf_schar::format_sign_always , (byte) printf_schar::format_zero_padding , (byte) printf_schar::format_upper_case , (byte) printf_schar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted procedure struct value parameter to member unwinding (void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) -Converted procedure struct value parameter to member unwinding (byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) -Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix -Unwinding value copy (struct TIME_OF_DAY) tod_read::tod ← (struct TIME_OF_DAY){ (byte) tod_read::tenths, (byte) tod_read::secs, (byte) tod_read::mins, (byte) tod_read::hours } -Adding value simple copy (byte) tod_read::tod_TENTHS ← (byte) tod_read::tenths -Adding value simple copy (byte) tod_read::tod_SEC ← (byte) tod_read::secs -Adding value simple copy (byte) tod_read::tod_MIN ← (byte) tod_read::mins -Adding value simple copy (byte) tod_read::tod_HOURS ← (byte) tod_read::hours -Unwinding value copy (struct TIME_OF_DAY) tod_read::return ← (struct TIME_OF_DAY) tod_read::tod -Adding value simple copy (byte) tod_read::return_TENTHS ← (byte) tod_read::tod_TENTHS -Adding value simple copy (byte) tod_read::return_SEC ← (byte) tod_read::tod_SEC -Adding value simple copy (byte) tod_read::return_MIN ← (byte) tod_read::tod_MIN -Adding value simple copy (byte) tod_read::return_HOURS ← (byte) tod_read::tod_HOURS -Unwinding value copy (struct TIME_OF_DAY) tod_read::return ← (struct TIME_OF_DAY) tod_read::return -Adding value simple copy (byte) tod_read::return_TENTHS ← (byte) tod_read::return_TENTHS -Adding value simple copy (byte) tod_read::return_SEC ← (byte) tod_read::return_SEC -Adding value simple copy (byte) tod_read::return_MIN ← (byte) tod_read::return_MIN -Adding value simple copy (byte) tod_read::return_HOURS ← (byte) tod_read::return_HOURS -Converted procedure struct return value to member unwinding return { (byte) tod_read::return_TENTHS, (byte) tod_read::return_SEC, (byte) tod_read::return_MIN, (byte) tod_read::return_HOURS } -Converted call struct value parameter to member unwinding call printf_uint (number) 8 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding (void~) main::$3 ← call tod_init *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) -Converted procedure call LValue to member unwinding { (byte~) main::$5_TENTHS, (byte~) main::$5_SEC, (byte~) main::$5_MIN, (byte~) main::$5_HOURS } ← call tod_read -Converted call struct value parameter to member unwinding (byte*~) main::$6 ← call tod_str (byte~) main::$5_TENTHS (byte~) main::$5_SEC (byte~) main::$5_MIN (byte~) main::$5_HOURS -Converted call struct value parameter to member unwinding call printf_ulong (dword) count (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_string (byte*~) main::$6 (byte) 0 (byte) 0 -Converted call struct value parameter to member unwinding call printf_ulong (dword) count (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_uchar (byte) print::i (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL -Converted call struct value parameter to member unwinding call printf_uchar (byte) print::i1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_slong::format.sign_always with member unwinding reference (byte) printf_slong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_slong::format.radix with member unwinding reference (byte) printf_slong::format_radix -Replacing struct member reference (struct printf_format_number) printf_ulong::format.sign_always with member unwinding reference (byte) printf_ulong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_ulong::format.radix with member unwinding reference (byte) printf_ulong::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_sint::format.sign_always with member unwinding reference (byte) printf_sint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_sint::format.radix with member unwinding reference (byte) printf_sint::format_radix -Replacing struct member reference (struct printf_format_number) printf_uint::format.sign_always with member unwinding reference (byte) printf_uint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uint::format.radix with member unwinding reference (byte) printf_uint::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_schar::format.sign_always with member unwinding reference (byte) printf_schar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_schar::format.radix with member unwinding reference (byte) printf_schar::format_radix -Replacing struct member reference (struct printf_format_number) printf_uchar::format.sign_always with member unwinding reference (byte) printf_uchar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uchar::format.radix with member unwinding reference (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.upper_case with member unwinding reference (byte) printf_number_buffer::format_upper_case -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.HOURS with member unwinding reference (byte) tod_init::tod_HOURS -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_HOURS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.MIN with member unwinding reference (byte) tod_init::tod_MIN -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_MIN with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.SEC with member unwinding reference (byte) tod_init::tod_SEC -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_SEC with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.TENTHS with member unwinding reference (byte) tod_init::tod_TENTHS -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_10THS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_HOURS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_MIN with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_SEC with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_10THS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.HOURS with member unwinding reference (byte) tod_str::tod_HOURS -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.HOURS with member unwinding reference (byte) tod_str::tod_HOURS -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.MIN with member unwinding reference (byte) tod_str::tod_MIN -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.MIN with member unwinding reference (byte) tod_str::tod_MIN -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.SEC with member unwinding reference (byte) tod_str::tod_SEC -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.SEC with member unwinding reference (byte) tod_str::tod_SEC -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.TENTHS with member unwinding reference (byte) tod_str::tod_TENTHS -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.TENTHS with member unwinding reference (byte) tod_str::tod_TENTHS Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Eliminating unused variable with no statement (void~) main::$1 Eliminating unused variable with no statement (void~) main::$2 @@ -2074,6 +1879,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OCTAL = (number) 8 (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f @@ -6386,6 +6214,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) TIME_OF_DAY::HOURS (byte) TIME_OF_DAY::MIN (byte) TIME_OF_DAY::SEC @@ -10217,6 +10068,7 @@ Uplift Scope [printf_uint] Uplift Scope [printf_string] Uplift Scope [TIME_OF_DAY] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Limited combination testing to 100 combinations of 256 possible. @@ -13319,6 +13171,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 diff --git a/src/test/ref/examples/eightqueens/eightqueens-recursive.sym b/src/test/ref/examples/eightqueens/eightqueens-recursive.sym index 263f89b0d..d2962a9de 100644 --- a/src/test/ref/examples/eightqueens/eightqueens-recursive.sym +++ b/src/test/ref/examples/eightqueens/eightqueens-recursive.sym @@ -19,6 +19,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 diff --git a/src/test/ref/examples/eightqueens/eightqueens.log b/src/test/ref/examples/eightqueens/eightqueens.log index 4cf99a9ed..ac810262a 100644 --- a/src/test/ref/examples/eightqueens/eightqueens.log +++ b/src/test/ref/examples/eightqueens/eightqueens.log @@ -8,201 +8,6 @@ Added struct type cast to parameter value list call printf_string (byte*~) main: Added struct type cast to parameter value list call printf_ulong (dword) count (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } Added struct type cast to parameter value list call printf_uchar (byte) print::i (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) HEXADECIMAL } Added struct type cast to parameter value list call printf_uchar (byte) print::i1 (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) HEXADECIMAL } -Created struct value member variable (byte) printf_slong::format_min_length -Created struct value member variable (byte) printf_slong::format_justify_left -Created struct value member variable (byte) printf_slong::format_sign_always -Created struct value member variable (byte) printf_slong::format_zero_padding -Created struct value member variable (byte) printf_slong::format_upper_case -Created struct value member variable (byte) printf_slong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_slong::format -Created struct value member variable (byte) printf_ulong::format_min_length -Created struct value member variable (byte) printf_ulong::format_justify_left -Created struct value member variable (byte) printf_ulong::format_sign_always -Created struct value member variable (byte) printf_ulong::format_zero_padding -Created struct value member variable (byte) printf_ulong::format_upper_case -Created struct value member variable (byte) printf_ulong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_ulong::format -Created struct value member variable (byte) printf_sint::format_min_length -Created struct value member variable (byte) printf_sint::format_justify_left -Created struct value member variable (byte) printf_sint::format_sign_always -Created struct value member variable (byte) printf_sint::format_zero_padding -Created struct value member variable (byte) printf_sint::format_upper_case -Created struct value member variable (byte) printf_sint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_sint::format -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Created struct value member variable (byte) printf_schar::format_min_length -Created struct value member variable (byte) printf_schar::format_justify_left -Created struct value member variable (byte) printf_schar::format_sign_always -Created struct value member variable (byte) printf_schar::format_zero_padding -Created struct value member variable (byte) printf_schar::format_upper_case -Created struct value member variable (byte) printf_schar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_schar::format -Created struct value member variable (byte) printf_uchar::format_min_length -Created struct value member variable (byte) printf_uchar::format_justify_left -Created struct value member variable (byte) printf_uchar::format_sign_always -Created struct value member variable (byte) printf_uchar::format_zero_padding -Created struct value member variable (byte) printf_uchar::format_upper_case -Created struct value member variable (byte) printf_uchar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uchar::format -Created struct value member variable (byte) printf_number_buffer::buffer_sign -Created struct value member variable (byte*) printf_number_buffer::buffer_digits -Converted struct value to member variables (struct printf_buffer_number) printf_number_buffer::buffer -Created struct value member variable (byte) printf_number_buffer::format_min_length -Created struct value member variable (byte) printf_number_buffer::format_justify_left -Created struct value member variable (byte) printf_number_buffer::format_sign_always -Created struct value member variable (byte) printf_number_buffer::format_zero_padding -Created struct value member variable (byte) printf_number_buffer::format_upper_case -Created struct value member variable (byte) printf_number_buffer::format_radix -Converted struct value to member variables (struct printf_format_number) printf_number_buffer::format -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Created struct value member variable (byte) tod_init::tod_TENTHS -Created struct value member variable (byte) tod_init::tod_SEC -Created struct value member variable (byte) tod_init::tod_MIN -Created struct value member variable (byte) tod_init::tod_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_init::tod -Created struct value member variable (byte) tod_read::return_TENTHS -Created struct value member variable (byte) tod_read::return_SEC -Created struct value member variable (byte) tod_read::return_MIN -Created struct value member variable (byte) tod_read::return_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_read::return -Created struct value member variable (byte) tod_read::tod_TENTHS -Created struct value member variable (byte) tod_read::tod_SEC -Created struct value member variable (byte) tod_read::tod_MIN -Created struct value member variable (byte) tod_read::tod_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_read::tod -Created struct value member variable (byte) tod_str::tod_TENTHS -Created struct value member variable (byte) tod_str::tod_SEC -Created struct value member variable (byte) tod_str::tod_MIN -Created struct value member variable (byte) tod_str::tod_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_str::tod -Created struct value member variable (byte~) main::$5_TENTHS -Created struct value member variable (byte~) main::$5_SEC -Created struct value member variable (byte~) main::$5_MIN -Created struct value member variable (byte~) main::$5_HOURS -Converted struct value to member variables (struct TIME_OF_DAY~) main::$5 -Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_schar((signed byte) printf_schar::value , (byte) printf_schar::format_min_length , (byte) printf_schar::format_justify_left , (byte) printf_schar::format_sign_always , (byte) printf_schar::format_zero_padding , (byte) printf_schar::format_upper_case , (byte) printf_schar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted procedure struct value parameter to member unwinding (void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) -Converted procedure struct value parameter to member unwinding (byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) -Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix -Unwinding value copy (struct TIME_OF_DAY) tod_read::tod ← (struct TIME_OF_DAY){ (byte) tod_read::tenths, (byte) tod_read::secs, (byte) tod_read::mins, (byte) tod_read::hours } -Adding value simple copy (byte) tod_read::tod_TENTHS ← (byte) tod_read::tenths -Adding value simple copy (byte) tod_read::tod_SEC ← (byte) tod_read::secs -Adding value simple copy (byte) tod_read::tod_MIN ← (byte) tod_read::mins -Adding value simple copy (byte) tod_read::tod_HOURS ← (byte) tod_read::hours -Unwinding value copy (struct TIME_OF_DAY) tod_read::return ← (struct TIME_OF_DAY) tod_read::tod -Adding value simple copy (byte) tod_read::return_TENTHS ← (byte) tod_read::tod_TENTHS -Adding value simple copy (byte) tod_read::return_SEC ← (byte) tod_read::tod_SEC -Adding value simple copy (byte) tod_read::return_MIN ← (byte) tod_read::tod_MIN -Adding value simple copy (byte) tod_read::return_HOURS ← (byte) tod_read::tod_HOURS -Unwinding value copy (struct TIME_OF_DAY) tod_read::return ← (struct TIME_OF_DAY) tod_read::return -Adding value simple copy (byte) tod_read::return_TENTHS ← (byte) tod_read::return_TENTHS -Adding value simple copy (byte) tod_read::return_SEC ← (byte) tod_read::return_SEC -Adding value simple copy (byte) tod_read::return_MIN ← (byte) tod_read::return_MIN -Adding value simple copy (byte) tod_read::return_HOURS ← (byte) tod_read::return_HOURS -Converted procedure struct return value to member unwinding return { (byte) tod_read::return_TENTHS, (byte) tod_read::return_SEC, (byte) tod_read::return_MIN, (byte) tod_read::return_HOURS } -Converted call struct value parameter to member unwinding call printf_uint (number) 8 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding (void~) main::$3 ← call tod_init *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) -Converted procedure call LValue to member unwinding { (byte~) main::$5_TENTHS, (byte~) main::$5_SEC, (byte~) main::$5_MIN, (byte~) main::$5_HOURS } ← call tod_read -Converted call struct value parameter to member unwinding (byte*~) main::$6 ← call tod_str (byte~) main::$5_TENTHS (byte~) main::$5_SEC (byte~) main::$5_MIN (byte~) main::$5_HOURS -Converted call struct value parameter to member unwinding call printf_ulong (dword) count (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_string (byte*~) main::$6 (byte) 0 (byte) 0 -Converted call struct value parameter to member unwinding call printf_ulong (dword) count (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_uchar (byte) print::i (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL -Converted call struct value parameter to member unwinding call printf_uchar (byte) print::i1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_slong::format.sign_always with member unwinding reference (byte) printf_slong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_slong::format.radix with member unwinding reference (byte) printf_slong::format_radix -Replacing struct member reference (struct printf_format_number) printf_ulong::format.sign_always with member unwinding reference (byte) printf_ulong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_ulong::format.radix with member unwinding reference (byte) printf_ulong::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_sint::format.sign_always with member unwinding reference (byte) printf_sint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_sint::format.radix with member unwinding reference (byte) printf_sint::format_radix -Replacing struct member reference (struct printf_format_number) printf_uint::format.sign_always with member unwinding reference (byte) printf_uint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uint::format.radix with member unwinding reference (byte) printf_uint::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_schar::format.sign_always with member unwinding reference (byte) printf_schar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_schar::format.radix with member unwinding reference (byte) printf_schar::format_radix -Replacing struct member reference (struct printf_format_number) printf_uchar::format.sign_always with member unwinding reference (byte) printf_uchar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uchar::format.radix with member unwinding reference (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.upper_case with member unwinding reference (byte) printf_number_buffer::format_upper_case -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.HOURS with member unwinding reference (byte) tod_init::tod_HOURS -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_HOURS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.MIN with member unwinding reference (byte) tod_init::tod_MIN -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_MIN with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.SEC with member unwinding reference (byte) tod_init::tod_SEC -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_SEC with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.TENTHS with member unwinding reference (byte) tod_init::tod_TENTHS -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_10THS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_HOURS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_MIN with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_SEC with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_10THS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.HOURS with member unwinding reference (byte) tod_str::tod_HOURS -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.HOURS with member unwinding reference (byte) tod_str::tod_HOURS -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.MIN with member unwinding reference (byte) tod_str::tod_MIN -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.MIN with member unwinding reference (byte) tod_str::tod_MIN -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.SEC with member unwinding reference (byte) tod_str::tod_SEC -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.SEC with member unwinding reference (byte) tod_str::tod_SEC -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.TENTHS with member unwinding reference (byte) tod_str::tod_TENTHS -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.TENTHS with member unwinding reference (byte) tod_str::tod_TENTHS Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) legal::$3 ← call diff *((const byte*) board + (byte) legal::i) (byte) legal::column Inlined call (byte~) legal::$4 ← call diff (byte) legal::i (byte) legal::row @@ -2156,6 +1961,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OCTAL = (number) 8 (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f @@ -6636,6 +6464,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) TIME_OF_DAY::HOURS (byte) TIME_OF_DAY::MIN (byte) TIME_OF_DAY::SEC @@ -10404,6 +10255,7 @@ Uplift Scope [printf_uint] Uplift Scope [printf_string] Uplift Scope [TIME_OF_DAY] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplifting [memcpy] best 1739295 combination zp[2]:11 [ memcpy::src#2 memcpy::src#1 ] zp[2]:13 [ memcpy::dst#2 memcpy::dst#1 ] @@ -10443,6 +10295,7 @@ Uplifting [printf_uint] best 1575566 combination Uplifting [printf_string] best 1575566 combination Uplifting [TIME_OF_DAY] best 1575566 combination Uplifting [MOS6526_CIA] best 1575566 combination +Uplifting [MOS6581_SID] best 1575566 combination Uplifting [main] best 1575566 combination Attempting to uplift remaining variables inzp[1]:159 [ uctoa_append::sub#0 ] Uplifting [uctoa_append] best 1575566 combination zp[1]:159 [ uctoa_append::sub#0 ] @@ -13375,6 +13228,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 diff --git a/src/test/ref/examples/eightqueens/eightqueens.sym b/src/test/ref/examples/eightqueens/eightqueens.sym index 6af05321e..2efa91f78 100644 --- a/src/test/ref/examples/eightqueens/eightqueens.sym +++ b/src/test/ref/examples/eightqueens/eightqueens.sym @@ -18,6 +18,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 diff --git a/src/test/ref/examples/fire/fire.asm b/src/test/ref/examples/fire/fire.asm index aee3a55f0..bf7b9d706 100644 --- a/src/test/ref/examples/fire/fire.asm +++ b/src/test/ref/examples/fire/fire.asm @@ -6,19 +6,21 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const YELLOW = 7 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label SCREEN1 = $3800 .label SCREEN2 = $3c00 .label BUFFER = $4000 @@ -202,8 +204,8 @@ fire: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // return *SID_VOICE3_OSC; - lda SID_VOICE3_OSC + // return SID->CH3_OSC; + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC // } rts } @@ -371,14 +373,14 @@ makecharset: { } // Initialize SID voice 3 for random number generation sid_rnd_init: { - // *SID_VOICE3_FREQ = $ffff + // SID->CH3_FREQ = 0xffff lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // SID->CH3_CONTROL = SID_CONTROL_NOISE lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL // } rts } diff --git a/src/test/ref/examples/fire/fire.cfg b/src/test/ref/examples/fire/fire.cfg index f9fbad2f2..3b9f544d4 100644 --- a/src/test/ref/examples/fire/fire.cfg +++ b/src/test/ref/examples/fire/fire.cfg @@ -108,7 +108,7 @@ fire::@4: scope:[fire] from fire::@2 fire::@5 (byte()) sid_rnd() sid_rnd: scope:[sid_rnd] from fire::@7 - [54] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) + [54] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd [55] return @@ -182,8 +182,8 @@ makecharset::@2: scope:[makecharset] from makecharset::@1 (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from main::@7 - [88] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff - [89] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + [88] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff + [89] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init [90] return diff --git a/src/test/ref/examples/fire/fire.log b/src/test/ref/examples/fire/fire.log index 9358a847b..b50cb11fc 100644 --- a/src/test/ref/examples/fire/fire.log +++ b/src/test/ref/examples/fire/fire.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$7 ← call toD018 (const byte*) SCREEN1 (const byte*) CHARSET Inlined call (byte~) main::$9 ← call toD018 (const byte*) SCREEN2 (const byte*) CHARSET @@ -10,8 +8,8 @@ CONTROL FLOW GRAPH SSA (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from main::@8 - *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff - *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (number) $ffff + *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init return @@ -19,7 +17,7 @@ sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init (byte()) sid_rnd() sid_rnd: scope:[sid_rnd] from fire::@7 - (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) + (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd (byte) sid_rnd::return#3 ← phi( sid_rnd/(byte) sid_rnd::return#0 ) @@ -392,12 +390,36 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte*) SCREEN1 = (byte*)(number) $3800 (const byte*) SCREEN2 = (byte*)(number) $3c00 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*)(number) $d400 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*)(number) $d412 -(const nomodify word*) SID_VOICE3_FREQ = (word*)(number) $d40e -(const nomodify byte*) SID_VOICE3_OSC = (byte*)(number) $d41b (const nomodify byte) YELLOW = (byte) 7 (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (bool~) fillscreen::$0 @@ -669,7 +691,7 @@ SYMBOL TABLE SSA (void()) sid_rnd_init() (label) sid_rnd_init::@return -Adding number conversion cast (unumber) $ffff in *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff +Adding number conversion cast (unumber) $ffff in *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (number) $ffff Adding number conversion cast (unumber) 0 in (byte) fillscreen::fill#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) fillscreen::fill#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) fillscreen::fill#2 ← (number) 0 @@ -728,7 +750,7 @@ Adding number conversion cast (unumber) makecharset::$12 in (number~) makecharse Adding number conversion cast (unumber) 7 in (number~) makecharset::$13 ← (unumber~) makecharset::$12 & (number) 7 Adding number conversion cast (unumber) makecharset::$13 in (number~) makecharset::$13 ← (unumber~) makecharset::$12 & (unumber)(number) 7 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast *((const nomodify word*) SID_VOICE3_FREQ) ← (unumber)(number) $ffff +Inlining cast *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (unumber)(number) $ffff Inlining cast (byte) fillscreen::fill#0 ← (unumber)(number) 0 Inlining cast (byte) fillscreen::fill#1 ← (unumber)(number) 0 Inlining cast (byte) fillscreen::fill#2 ← (unumber)(number) 0 @@ -739,9 +761,7 @@ Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant pointer cast (word*) 54286 -Simplifying constant pointer cast (byte*) 54290 -Simplifying constant pointer cast (byte*) 54299 +Simplifying constant pointer cast (struct MOS6581_SID*) 54272 Simplifying constant pointer cast (byte*) 14336 Simplifying constant pointer cast (byte*) 15360 Simplifying constant pointer cast (byte*) 16384 @@ -1283,7 +1303,7 @@ fire::@4: scope:[fire] from fire::@2 fire::@5 (byte()) sid_rnd() sid_rnd: scope:[sid_rnd] from fire::@7 - [54] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) + [54] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd [55] return @@ -1357,8 +1377,8 @@ makecharset::@2: scope:[makecharset] from makecharset::@1 (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from main::@7 - [88] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff - [89] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + [88] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff + [89] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init [90] return @@ -1397,6 +1417,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (byte) fillscreen::fill (byte) fillscreen::fill#5 166.83333333333334 @@ -1588,19 +1631,21 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const YELLOW = 7 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label SCREEN1 = $3800 .label SCREEN2 = $3c00 .label BUFFER = $4000 @@ -1956,8 +2001,8 @@ fire: { sid_rnd: { .label return = $22 .label return_1 = $1b - // [54] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuz1=_deref_pbuc1 - lda SID_VOICE3_OSC + // [54] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuz1=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC sta.z return jmp __breturn // sid_rnd::@return @@ -2207,14 +2252,14 @@ makecharset: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [88] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [88] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // [89] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // [89] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL jmp __breturn // sid_rnd_init::@return __breturn: @@ -2318,8 +2363,8 @@ Statement [79] (byte~) makecharset::$12 ← (byte) makecharset::ii#2 + (byte~) m Statement [81] (byte) makecharset::b#1 ← (byte) makecharset::b#2 + *((const to_nomodify byte*) makecharset::bittab + (byte~) makecharset::$13) [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::bc#2 makecharset::b#1 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::bc#2 makecharset::b#1 ] { } ) always clobbers reg byte a Statement [84] *((byte*) makecharset::font1#2) ← (byte) $ff [ makecharset::font1#2 ] ( main:2::makecharset:17 [ makecharset::font1#2 ] { } ) always clobbers reg byte a reg byte y Statement [86] *((byte*) makecharset::font#2) ← (byte) 0 [ makecharset::font#2 ] ( main:2::makecharset:17 [ makecharset::font#2 ] { } ) always clobbers reg byte a reg byte y -Statement [88] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:2::sid_rnd_init:15 [ ] { } ) always clobbers reg byte a -Statement [89] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::sid_rnd_init:15 [ ] { } ) always clobbers reg byte a +Statement [88] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:2::sid_rnd_init:15 [ ] { } ) always clobbers reg byte a +Statement [89] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::sid_rnd_init:15 [ ] { } ) always clobbers reg byte a Statement [93] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] { } main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] { } main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] { } main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] { } ) always clobbers reg byte y Removing always clobbered register reg byte y as potential for zp[1]:22 [ fillscreen::fill#5 ] Statement [96] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] { } main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] { } main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] { } main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] { } ) always clobbers reg byte a @@ -2358,8 +2403,8 @@ Statement [79] (byte~) makecharset::$12 ← (byte) makecharset::ii#2 + (byte~) m Statement [81] (byte) makecharset::b#1 ← (byte) makecharset::b#2 + *((const to_nomodify byte*) makecharset::bittab + (byte~) makecharset::$13) [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::bc#2 makecharset::b#1 ] ( main:2::makecharset:17 [ makecharset::c#2 makecharset::i#2 makecharset::ii#2 makecharset::bc#2 makecharset::b#1 ] { } ) always clobbers reg byte a Statement [84] *((byte*) makecharset::font1#2) ← (byte) $ff [ makecharset::font1#2 ] ( main:2::makecharset:17 [ makecharset::font1#2 ] { } ) always clobbers reg byte a reg byte y Statement [86] *((byte*) makecharset::font#2) ← (byte) 0 [ makecharset::font#2 ] ( main:2::makecharset:17 [ makecharset::font#2 ] { } ) always clobbers reg byte a reg byte y -Statement [88] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:2::sid_rnd_init:15 [ ] { } ) always clobbers reg byte a -Statement [89] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::sid_rnd_init:15 [ ] { } ) always clobbers reg byte a +Statement [88] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:2::sid_rnd_init:15 [ ] { } ) always clobbers reg byte a +Statement [89] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::sid_rnd_init:15 [ ] { } ) always clobbers reg byte a Statement [93] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] { } main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] { } main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] { } main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#5 fillscreen::i#2 ] { } ) always clobbers reg byte a reg byte y Statement [96] if((word) fillscreen::i#1!=(word) $3e8) goto fillscreen::@1 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] ( main:2::fillscreen:7 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] { } main:2::fillscreen:9 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] { } main:2::fillscreen:11 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] { } main:2::fillscreen:13 [ fillscreen::fill#5 fillscreen::screen#4 fillscreen::i#1 ] { } ) always clobbers reg byte a Potential registers zp[2]:2 [ fire::screen#0 ] : zp[2]:2 , @@ -2400,6 +2445,7 @@ Uplift Scope [makecharset] 427,505.4: zp[1]:19 [ makecharset::bc#6 makecharset:: Uplift Scope [sid_rnd] 366,667.33: zp[1]:34 [ sid_rnd::return#0 ] 200,002: zp[1]:27 [ sid_rnd::return#2 ] Uplift Scope [fillscreen] 2,320.33: zp[2]:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] 2,168.83: zp[2]:25 [ fillscreen::i#2 fillscreen::i#1 ] 166.83: zp[1]:22 [ fillscreen::fill#5 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [sid_rnd_init] Uplift Scope [main] Uplift Scope [] @@ -2411,6 +2457,7 @@ Limited combination testing to 100 combinations of 512 possible. Uplifting [sid_rnd] best 121492 combination reg byte a [ sid_rnd::return#0 ] reg byte a [ sid_rnd::return#2 ] Uplifting [fillscreen] best 121470 combination zp[2]:23 [ fillscreen::screen#5 fillscreen::screen#6 fillscreen::screen#4 ] zp[2]:25 [ fillscreen::i#2 fillscreen::i#1 ] reg byte x [ fillscreen::fill#5 ] Uplifting [MOS6526_CIA] best 121470 combination +Uplifting [MOS6581_SID] best 121470 combination Uplifting [sid_rnd_init] best 121470 combination Uplifting [main] best 121470 combination Uplifting [] best 121470 combination @@ -2458,19 +2505,21 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const YELLOW = 7 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label SCREEN1 = $3800 .label SCREEN2 = $3c00 .label BUFFER = $4000 @@ -2794,8 +2843,8 @@ fire: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // [54] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // [54] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuaa=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC jmp __breturn // sid_rnd::@return __breturn: @@ -3028,14 +3077,14 @@ makecharset: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [88] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [88] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // [89] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // [89] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL jmp __breturn // sid_rnd_init::@return __breturn: @@ -3218,10 +3267,10 @@ Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction __bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [193] bne __b2 to beq -Fixing long branch [198] bne __b2 to beq -Fixing long branch [208] bne __b4 to beq -Fixing long branch [213] bne __b4 to beq +Fixing long branch [195] bne __b2 to beq +Fixing long branch [200] bne __b2 to beq +Fixing long branch [210] bne __b4 to beq +Fixing long branch [215] bne __b4 to beq FINAL SYMBOL TABLE (label) @1 @@ -3248,12 +3297,36 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte*) SCREEN1 = (byte*) 14336 (const byte*) SCREEN2 = (byte*) 15360 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*) 54272 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*) 54290 -(const nomodify word*) SID_VOICE3_FREQ = (word*) 54286 -(const nomodify byte*) SID_VOICE3_OSC = (byte*) 54299 (const nomodify byte) YELLOW = (byte) 7 (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (label) fillscreen::@1 @@ -3414,19 +3487,21 @@ Score: 102725 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const YELLOW = 7 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label SCREEN1 = $3800 .label SCREEN2 = $3c00 .label BUFFER = $4000 @@ -3715,9 +3790,9 @@ fire: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // return *SID_VOICE3_OSC; - // [54] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // return SID->CH3_OSC; + // [54] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuaa=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC // sid_rnd::@return // } // [55] return @@ -3956,16 +4031,16 @@ makecharset: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // *SID_VOICE3_FREQ = $ffff - // [88] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // SID->CH3_FREQ = 0xffff + // [88] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE - // [89] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // SID->CH3_CONTROL = SID_CONTROL_NOISE + // [89] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL // sid_rnd_init::@return // } // [90] return diff --git a/src/test/ref/examples/fire/fire.sym b/src/test/ref/examples/fire/fire.sym index 3f748f562..1f9a77819 100644 --- a/src/test/ref/examples/fire/fire.sym +++ b/src/test/ref/examples/fire/fire.sym @@ -22,12 +22,36 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte*) SCREEN1 = (byte*) 14336 (const byte*) SCREEN2 = (byte*) 15360 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*) 54272 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*) 54290 -(const nomodify word*) SID_VOICE3_FREQ = (word*) 54286 -(const nomodify byte*) SID_VOICE3_OSC = (byte*) 54299 (const nomodify byte) YELLOW = (byte) 7 (void()) fillscreen((byte*) fillscreen::screen , (byte) fillscreen::fill) (label) fillscreen::@1 diff --git a/src/test/ref/examples/font-2x2/font-2x2.log b/src/test/ref/examples/font-2x2/font-2x2.log index 8a5278806..14fd36354 100644 --- a/src/test/ref/examples/font-2x2/font-2x2.log +++ b/src/test/ref/examples/font-2x2/font-2x2.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$2 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) FONT_COMPRESSED @@ -531,6 +529,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 @@ -1859,6 +1880,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) font_2x2((byte*) font_2x2::font_original , (byte*) font_2x2::font_2x2) (byte~) font_2x2::$1 200002.0 (byte~) font_2x2::$11 20002.0 @@ -3157,6 +3201,7 @@ Uplift Scope [font_compress] 35,003.5: zp[1]:13 [ font_compress::l#2 font_compre Uplift Scope [main] 2,002: zp[1]:4 [ main::x#2 main::x#1 ] 1,243.4: zp[1]:3 [ main::c#2 main::c#4 main::c#1 ] 285.17: zp[1]:2 [ main::y#4 main::y#1 ] Uplift Scope [memset] 3,336.67: zp[2]:5 [ memset::dst#2 memset::dst#1 ] 168.67: zp[1]:37 [ memset::c#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [font_find] best 204483 combination reg byte y [ font_find::l#2 font_find::l#1 ] reg byte x [ font_find::return#3 font_find::i#2 font_find::i#1 ] zp[2]:16 [ font_find::font#4 font_find::font#1 ] reg byte a [ font_find::found#2 ] zp[2]:57 [ font_find::glyph#0 ] zp[1]:59 [ font_find::font_size#0 ] zp[1]:60 [ font_find::return#0 ] @@ -3170,6 +3215,7 @@ Limited combination testing to 100 combinations of 324 possible. Uplifting [main] best 180053 combination zp[1]:4 [ main::x#2 main::x#1 ] zp[1]:3 [ main::c#2 main::c#4 main::c#1 ] zp[1]:2 [ main::y#4 main::y#1 ] Uplifting [memset] best 180040 combination zp[2]:5 [ memset::dst#2 memset::dst#1 ] reg byte x [ memset::c#0 ] Uplifting [MOS6526_CIA] best 180040 combination +Uplifting [MOS6581_SID] best 180040 combination Uplifting [] best 180040 combination Attempting to uplift remaining variables inzp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] Uplifting [font_2x2] best 180040 combination zp[1]:32 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] @@ -4144,6 +4190,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 diff --git a/src/test/ref/examples/font-2x2/font-2x2.sym b/src/test/ref/examples/font-2x2/font-2x2.sym index c0f5c7032..1c9a62087 100644 --- a/src/test/ref/examples/font-2x2/font-2x2.sym +++ b/src/test/ref/examples/font-2x2/font-2x2.sym @@ -20,6 +20,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 diff --git a/src/test/ref/examples/irq/irq-hyperscreen.asm b/src/test/ref/examples/irq/irq-hyperscreen.asm index 2716186a0..d8e50a980 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.asm +++ b/src/test/ref/examples/irq/irq-hyperscreen.asm @@ -2,6 +2,8 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label BORDERCOL = $d020 .label VIC_CONTROL = $d011 @@ -14,8 +16,6 @@ .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 diff --git a/src/test/ref/examples/irq/irq-hyperscreen.log b/src/test/ref/examples/irq/irq-hyperscreen.log index 1e9ce47b6..7dda7e0b6 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.log +++ b/src/test/ref/examples/irq/irq-hyperscreen.log @@ -1,8 +1,5 @@ Resolved forward reference irq_bottom_1 to interrupt(KERNEL_MIN)(void()) irq_bottom_1() Resolved forward reference irq_bottom_2 to interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -83,6 +80,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte) RED = (byte) 2 @@ -214,6 +234,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE interrupt(KERNEL_MIN)(void()) irq_bottom_1() interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() (void()) main() @@ -230,6 +273,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label BORDERCOL = $d020 .label VIC_CONTROL = $d011 @@ -242,8 +287,6 @@ Target platform is c64basic / MOS6502X .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 @@ -393,12 +436,14 @@ Statement [25] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) RED REGISTER UPLIFT SCOPES Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [irq_bottom_1] Uplift Scope [irq_bottom_2] Uplift Scope [] Uplifting [MOS6526_CIA] best 175 combination +Uplifting [MOS6581_SID] best 175 combination Uplifting [main] best 175 combination Uplifting [irq_bottom_1] best 175 combination Uplifting [irq_bottom_2] best 175 combination @@ -412,6 +457,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label BORDERCOL = $d020 .label VIC_CONTROL = $d011 @@ -424,8 +471,6 @@ ASSEMBLER BEFORE OPTIMIZATION .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 @@ -601,6 +646,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte) RED = (byte) 2 @@ -626,6 +694,8 @@ Score: 154 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label BORDERCOL = $d020 .label VIC_CONTROL = $d011 @@ -638,8 +708,6 @@ Score: 154 .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 diff --git a/src/test/ref/examples/irq/irq-hyperscreen.sym b/src/test/ref/examples/irq/irq-hyperscreen.sym index 74cdbbd23..f8d073bc0 100644 --- a/src/test/ref/examples/irq/irq-hyperscreen.sym +++ b/src/test/ref/examples/irq/irq-hyperscreen.sym @@ -23,6 +23,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte) RED = (byte) 2 diff --git a/src/test/ref/examples/kernalload/kernalload.log b/src/test/ref/examples/kernalload/kernalload.log index b75cd0c83..236057f9b 100644 --- a/src/test/ref/examples/kernalload/kernalload.log +++ b/src/test/ref/examples/kernalload/kernalload.log @@ -1,6 +1,4 @@ Loading link script "kernalload.ld" -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$3 ← call toSpritePtr (const nomodify byte*) LOAD_SPRITE @@ -199,6 +197,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*)(number) $400 (const byte*) SPRITE[] = kickasm {{ .var pic = LoadPicture("sprite.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) @@ -640,6 +661,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) error((byte) error::err) (byte) error::err (byte) error::err#0 112.0 @@ -1102,6 +1146,7 @@ Uplift Scope [error] 112: zp[1]:8 [ error::err#0 ] Uplift Scope [loadFileToMemory] 37.33: zp[1]:10 [ loadFileToMemory::return#1 ] 22: zp[1]:6 [ loadFileToMemory::return#0 ] Uplift Scope [main] 11: zp[1]:7 [ main::status#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [setlfs] Uplift Scope [] @@ -1112,6 +1157,7 @@ Uplifting [error] best 1026 combination reg byte a [ error::err#0 ] Uplifting [loadFileToMemory] best 1014 combination reg byte a [ loadFileToMemory::return#1 ] reg byte a [ loadFileToMemory::return#0 ] Uplifting [main] best 1009 combination reg byte x [ main::status#0 ] Uplifting [MOS6526_CIA] best 1009 combination +Uplifting [MOS6581_SID] best 1009 combination Uplifting [setlfs] best 1009 combination Uplifting [] best 1009 combination Coalescing zero page register [ zp[2]:4 [ strlen::len#2 strlen::len#1 ] ] with [ zp[2]:12 [ strlen::return#2 ] ] - score: 1 @@ -1508,6 +1554,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const byte*) SPRITE[] = kickasm {{ .var pic = LoadPicture("sprite.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) diff --git a/src/test/ref/examples/kernalload/kernalload.sym b/src/test/ref/examples/kernalload/kernalload.sym index 314fc658a..357ed6e25 100644 --- a/src/test/ref/examples/kernalload/kernalload.sym +++ b/src/test/ref/examples/kernalload/kernalload.sym @@ -18,6 +18,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const byte*) SPRITE[] = kickasm {{ .var pic = LoadPicture("sprite.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.log b/src/test/ref/examples/multiplexer/simple-multiplexer.log index 10748e48d..56dc0dd48 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call plexSetScreen (byte*) plexInit::screen Inlined call call plexFreePrepare @@ -396,6 +394,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } @@ -1348,6 +1369,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte*) PLEX_SCREEN_PTR (void()) init() (byte~) init::$4 2002.0 @@ -2403,6 +2447,7 @@ Uplift Scope [] 13,261.07: zp[1]:16 [ plex_sprite_msb ] 10,625.17: zp[1]:14 [ pl Uplift Scope [plexInit] 35,003.5: zp[1]:13 [ plexInit::i#2 plexInit::i#1 ] Uplift Scope [init] 3,003: zp[1]:12 [ init::ss#2 init::ss#1 ] 2,302.3: zp[1]:9 [ init::sx#2 init::sx#1 ] 2,002: zp[1]:35 [ init::$4 ] 1,418.08: zp[2]:10 [ init::xp#2 init::xp#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplifting [plexSort] best 82790 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp[1]:34 [ plexSort::s#2 ] zp[1]:6 [ plexSort::m#2 plexSort::m#1 ] zp[1]:33 [ plexSort::nxt_y#0 ] zp[1]:32 [ plexSort::nxt_idx#0 ] @@ -2416,6 +2461,7 @@ Uplifting [plexInit] best 81460 combination reg byte x [ plexInit::i#2 plexInit: Uplifting [init] best 81210 combination reg byte x [ init::ss#2 init::ss#1 ] reg byte x [ init::sx#2 init::sx#1 ] zp[1]:35 [ init::$4 ] zp[2]:10 [ init::xp#2 init::xp#1 ] Limited combination testing to 10 combinations of 36 possible. Uplifting [MOS6526_CIA] best 81210 combination +Uplifting [MOS6581_SID] best 81210 combination Uplifting [main] best 81210 combination Attempting to uplift remaining variables inzp[1]:34 [ plexSort::s#2 ] Uplifting [plexSort] best 80610 combination reg byte x [ plexSort::s#2 ] @@ -3248,6 +3294,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.sym b/src/test/ref/examples/multiplexer/simple-multiplexer.sym index 7a83bdedc..ad66b34b5 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.sym +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.sym @@ -22,6 +22,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } (const byte*) PLEX_PTR[(const nomodify byte) PLEX_COUNT] = { fill( PLEX_COUNT, 0) } diff --git a/src/test/ref/examples/music/music.log b/src/test/ref/examples/music/music.log index 387979453..fc7f91160 100644 --- a/src/test/ref/examples/music/music.log +++ b/src/test/ref/examples/music/music.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -57,6 +55,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) MUSIC = (byte*)(number) $1000 (const nomodify byte*) RASTER = (byte*)(number) $d012 (void()) main() @@ -140,6 +161,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() Initial phi equivalence classes @@ -218,10 +262,12 @@ Statement asm { jsrmusic.play } always clobbers reg byte a reg byte x reg byte REGISTER UPLIFT SCOPES Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [] Uplifting [MOS6526_CIA] best 4227 combination +Uplifting [MOS6581_SID] best 4227 combination Uplifting [main] best 4227 combination Uplifting [] best 4227 combination @@ -331,6 +377,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) MUSIC = (byte*) 4096 (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() diff --git a/src/test/ref/examples/music/music.sym b/src/test/ref/examples/music/music.sym index 11bbd1074..22812be0d 100644 --- a/src/test/ref/examples/music/music.sym +++ b/src/test/ref/examples/music/music.sym @@ -17,6 +17,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) MUSIC = (byte*) 4096 (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() diff --git a/src/test/ref/examples/music/music_irq.asm b/src/test/ref/examples/music/music_irq.asm index aa2c1ccb1..5c7cbd694 100644 --- a/src/test/ref/examples/music/music_irq.asm +++ b/src/test/ref/examples/music/music_irq.asm @@ -2,6 +2,8 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label BORDERCOL = $d020 .label VIC_CONTROL = $d011 @@ -13,8 +15,6 @@ .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label MUSIC = $1000 diff --git a/src/test/ref/examples/music/music_irq.log b/src/test/ref/examples/music/music_irq.log index 6db213a55..88af00777 100644 --- a/src/test/ref/examples/music/music_irq.log +++ b/src/test/ref/examples/music/music_irq.log @@ -1,7 +1,4 @@ Resolved forward reference irq_play to interrupt(KERNEL_KEYBOARD)(void()) irq_play() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -72,6 +69,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) MUSIC = (byte*)(number) $1000 (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*)(number) $d012 @@ -172,6 +192,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE interrupt(KERNEL_KEYBOARD)(void()) irq_play() (void()) main() @@ -187,6 +230,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label BORDERCOL = $d020 .label VIC_CONTROL = $d011 @@ -198,8 +243,6 @@ Target platform is c64basic / MOS6502X .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label MUSIC = $1000 @@ -301,11 +344,13 @@ Statement [16] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IR REGISTER UPLIFT SCOPES Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [irq_play] Uplift Scope [] Uplifting [MOS6526_CIA] best 2947 combination +Uplifting [MOS6581_SID] best 2947 combination Uplifting [main] best 2947 combination Uplifting [irq_play] best 2947 combination Uplifting [] best 2947 combination @@ -318,6 +363,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label BORDERCOL = $d020 .label VIC_CONTROL = $d011 @@ -329,8 +376,6 @@ ASSEMBLER BEFORE OPTIMIZATION .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label MUSIC = $1000 @@ -468,6 +513,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) MUSIC = (byte*) 4096 (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 @@ -489,6 +557,8 @@ Score: 2899 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label BORDERCOL = $d020 .label VIC_CONTROL = $d011 @@ -500,8 +570,6 @@ Score: 2899 .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label MUSIC = $1000 diff --git a/src/test/ref/examples/music/music_irq.sym b/src/test/ref/examples/music/music_irq.sym index f106adf04..ecf1fea7e 100644 --- a/src/test/ref/examples/music/music_irq.sym +++ b/src/test/ref/examples/music/music_irq.sym @@ -23,6 +23,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) MUSIC = (byte*) 4096 (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 diff --git a/src/test/ref/examples/nmisamples/nmisamples.asm b/src/test/ref/examples/nmisamples/nmisamples.asm index 60d139506..1511bcc94 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.asm +++ b/src/test/ref/examples/nmisamples/nmisamples.asm @@ -4,21 +4,22 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label BORDERCOL = $d020 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 Interrupt for reading in ASM .label CIA2_INTERRUPT = $dd0d - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f + // The SID MOD 6581/8580 + .label SID = $d400 // The vector used when the KERNAL serves NMI interrupts .label KERNEL_NMI = $318 - // The SID volume - .label SID_VOLUME = $d418 .const SAMPLE_SIZE = $6100 .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A = 4 .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE = $18 .label sample = 2 __bbegin: // sample = SAMPLE @@ -81,8 +82,8 @@ nmi2: { lsr lsr lsr - // *SID_VOLUME = *sample >> 4 - sta SID_VOLUME + // SID->VOLUME_FILTER_MODE = *sample >> 4 + sta SID+OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE // sample++; inc.z sample bne !+ @@ -127,8 +128,8 @@ nmi: { lda #$f ldy #0 and (sample),y - // *SID_VOLUME = *sample & $0f - sta SID_VOLUME + // SID->VOLUME_FILTER_MODE = *sample & $0f + sta SID+OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE // *KERNEL_NMI = &nmi2 lda #> (byte) 4 - [17] *((const nomodify byte*) SID_VOLUME) ← (byte~) nmi2::$1 + [17] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE) ← (byte~) nmi2::$1 [18] (volatile byte*) sample ← ++ (volatile byte*) sample [19] (byte~) nmi2::$2 ← > (volatile byte*) sample [20] if((byte~) nmi2::$2!=>(const byte*) SAMPLE+(word) $6100) goto nmi2::@1 @@ -52,7 +52,7 @@ nmi: scope:[nmi] from [25] *((const nomodify byte*) BORDERCOL) ← ++ *((const nomodify byte*) BORDERCOL) asm { ldaCIA2_INTERRUPT } [27] (byte~) nmi::$1 ← *((volatile byte*) sample) & (byte) $f - [28] *((const nomodify byte*) SID_VOLUME) ← (byte~) nmi::$1 + [28] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE) ← (byte~) nmi::$1 [29] *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi2() [30] *((const nomodify byte*) BORDERCOL) ← -- *((const nomodify byte*) BORDERCOL) to:nmi::@return diff --git a/src/test/ref/examples/nmisamples/nmisamples.log b/src/test/ref/examples/nmisamples/nmisamples.log index 6eb579354..27a4466d1 100644 --- a/src/test/ref/examples/nmisamples/nmisamples.log +++ b/src/test/ref/examples/nmisamples/nmisamples.log @@ -1,11 +1,5 @@ Resolved forward reference nmi to interrupt(HARDWARE_ALL)(void()) nmi() Resolved forward reference nmi2 to interrupt(HARDWARE_ALL)(void()) nmi2() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A with member unwinding reference *((word*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -35,7 +29,7 @@ nmi: scope:[nmi] from *((const nomodify byte*) BORDERCOL) ← ++ *((const nomodify byte*) BORDERCOL) asm { ldaCIA2_INTERRUPT } (number~) nmi::$1 ← *((volatile byte*) sample) & (number) $f - *((const nomodify byte*) SID_VOLUME) ← (number~) nmi::$1 + *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE) ← (number~) nmi::$1 *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi2() *((const nomodify byte*) BORDERCOL) ← -- *((const nomodify byte*) BORDERCOL) to:nmi::@return @@ -48,7 +42,7 @@ nmi2: scope:[nmi2] from *((const nomodify byte*) BORDERCOL) ← ++ *((const nomodify byte*) BORDERCOL) asm { ldaCIA2_INTERRUPT } (byte~) nmi2::$1 ← *((volatile byte*) sample) >> (number) 4 - *((const nomodify byte*) SID_VOLUME) ← (byte~) nmi2::$1 + *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE) ← (byte~) nmi2::$1 (volatile byte*) sample ← ++ (volatile byte*) sample (byte~) nmi2::$2 ← > (volatile byte*) sample (bool~) nmi2::$3 ← (byte~) nmi2::$2 == >(const byte*) SAMPLE+(number) $6100 @@ -97,12 +91,36 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A = (byte) 4 (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE = (byte) $18 (const byte*) SAMPLE[(const nomodify word) SAMPLE_SIZE] = kickasm {{ .import binary "moments_sample.bin" }} (const nomodify word) SAMPLE_SIZE = (word) $6100 -(const nomodify byte*) SID_VOLUME = (byte*)(number) $d418 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*)(number) $d400 (void()) main() (label) main::@return interrupt(HARDWARE_ALL)(void()) nmi() @@ -133,8 +151,8 @@ Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (struct MOS6526_CIA*) 56576 Simplifying constant pointer cast (byte*) 56589 +Simplifying constant pointer cast (struct MOS6581_SID*) 54272 Simplifying constant pointer cast (void()**) 792 -Simplifying constant pointer cast (byte*) 54296 Simplifying constant integer cast $88 Simplifying constant integer cast $81 Simplifying constant integer cast 1 @@ -202,7 +220,7 @@ nmi2: scope:[nmi2] from [14] *((const nomodify byte*) BORDERCOL) ← ++ *((const nomodify byte*) BORDERCOL) asm { ldaCIA2_INTERRUPT } [16] (byte~) nmi2::$1 ← *((volatile byte*) sample) >> (byte) 4 - [17] *((const nomodify byte*) SID_VOLUME) ← (byte~) nmi2::$1 + [17] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE) ← (byte~) nmi2::$1 [18] (volatile byte*) sample ← ++ (volatile byte*) sample [19] (byte~) nmi2::$2 ← > (volatile byte*) sample [20] if((byte~) nmi2::$2!=>(const byte*) SAMPLE+(word) $6100) goto nmi2::@1 @@ -223,7 +241,7 @@ nmi: scope:[nmi] from [25] *((const nomodify byte*) BORDERCOL) ← ++ *((const nomodify byte*) BORDERCOL) asm { ldaCIA2_INTERRUPT } [27] (byte~) nmi::$1 ← *((volatile byte*) sample) & (byte) $f - [28] *((const nomodify byte*) SID_VOLUME) ← (byte~) nmi::$1 + [28] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE) ← (byte~) nmi::$1 [29] *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi2() [30] *((const nomodify byte*) BORDERCOL) ← -- *((const nomodify byte*) BORDERCOL) to:nmi::@return @@ -247,6 +265,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() interrupt(HARDWARE_ALL)(void()) nmi() (byte~) nmi::$1 4.0 @@ -281,21 +322,22 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label BORDERCOL = $d020 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 Interrupt for reading in ASM .label CIA2_INTERRUPT = $dd0d - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f + // The SID MOD 6581/8580 + .label SID = $d400 // The vector used when the KERNAL serves NMI interrupts .label KERNEL_NMI = $318 - // The SID volume - .label SID_VOLUME = $d418 .const SAMPLE_SIZE = $6100 .const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A = 4 .const OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = $e + .const OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE = $18 .label sample = 2 // @begin __bbegin: @@ -382,9 +424,9 @@ nmi2: { lsr lsr sta.z __1 - // [17] *((const nomodify byte*) SID_VOLUME) ← (byte~) nmi2::$1 -- _deref_pbuc1=vbuz1 + // [17] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE) ← (byte~) nmi2::$1 -- _deref_pbuc1=vbuz1 lda.z __1 - sta SID_VOLUME + sta SID+OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE // [18] (volatile byte*) sample ← ++ (volatile byte*) sample -- pbuz1=_inc_pbuz1 inc.z sample bne !+ @@ -443,9 +485,9 @@ nmi: { ldy #0 and (sample),y sta.z __1 - // [28] *((const nomodify byte*) SID_VOLUME) ← (byte~) nmi::$1 -- _deref_pbuc1=vbuz1 + // [28] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE) ← (byte~) nmi::$1 -- _deref_pbuc1=vbuz1 lda.z __1 - sta SID_VOLUME + sta SID+OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE // [29] *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi2() -- _deref_pptc1=pprc2 lda #> 4 - // [17] *((const nomodify byte*) SID_VOLUME) ← (byte~) nmi2::$1 -- _deref_pbuc1=vbuaa - sta SID_VOLUME + // SID->VOLUME_FILTER_MODE = *sample >> 4 + // [17] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE) ← (byte~) nmi2::$1 -- _deref_pbuc1=vbuaa + sta SID+OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE // sample++; // [18] (volatile byte*) sample ← ++ (volatile byte*) sample -- pbuz1=_inc_pbuz1 inc.z sample @@ -941,9 +1011,9 @@ nmi: { lda #$f ldy #0 and (sample),y - // *SID_VOLUME = *sample & $0f - // [28] *((const nomodify byte*) SID_VOLUME) ← (byte~) nmi::$1 -- _deref_pbuc1=vbuaa - sta SID_VOLUME + // SID->VOLUME_FILTER_MODE = *sample & $0f + // [28] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE) ← (byte~) nmi::$1 -- _deref_pbuc1=vbuaa + sta SID+OFFSET_STRUCT_MOS6581_SID_VOLUME_FILTER_MODE // *KERNEL_NMI = &nmi2 // [29] *((const nomodify void()**) KERNEL_NMI) ← &interrupt(HARDWARE_ALL)(void()) nmi2() -- _deref_pptc1=pprc2 lda #CH3_OSC; + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC // } rts } @@ -510,14 +512,14 @@ memset: { } // Initialize SID voice 3 for random number generation sid_rnd_init: { - // *SID_VOICE3_FREQ = $ffff + // SID->CH3_FREQ = 0xffff lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // SID->CH3_CONTROL = SID_CONTROL_NOISE lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL // } rts } diff --git a/src/test/ref/examples/plasma/plasma-unroll.cfg b/src/test/ref/examples/plasma/plasma-unroll.cfg index 326d46761..27e938f54 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.cfg +++ b/src/test/ref/examples/plasma/plasma-unroll.cfg @@ -268,7 +268,7 @@ makecharset::@8: scope:[makecharset] from makecharset::@13 makecharset::@9 (byte()) sid_rnd() sid_rnd: scope:[sid_rnd] from makecharset::@6 - [130] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) + [130] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd [131] return @@ -310,8 +310,8 @@ memset::@2: scope:[memset] from memset::@1 (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from makecharset - [144] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff - [145] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + [144] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff + [145] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init [146] return diff --git a/src/test/ref/examples/plasma/plasma-unroll.log b/src/test/ref/examples/plasma/plasma-unroll.log index e9c43cf87..dfe26063f 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.log +++ b/src/test/ref/examples/plasma/plasma-unroll.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN1 (const nomodify byte*) CHARSET @@ -7,6 +5,25 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@1 +(void()) sid_rnd_init() +sid_rnd_init: scope:[sid_rnd_init] from makecharset + *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (number) $ffff + *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + to:sid_rnd_init::@return +sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init + return + to:@return + +(byte()) sid_rnd() +sid_rnd: scope:[sid_rnd] from makecharset::@7 + (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) + to:sid_rnd::@return +sid_rnd::@return: scope:[sid_rnd] from sid_rnd + (byte) sid_rnd::return#3 ← phi( sid_rnd/(byte) sid_rnd::return#0 ) + (byte) sid_rnd::return#1 ← (byte) sid_rnd::return#3 + return + to:@return + (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from print_cls (byte) memset::c#4 ← phi( print_cls/(byte) memset::c#0 ) @@ -91,25 +108,6 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 return to:@return -(void()) sid_rnd_init() -sid_rnd_init: scope:[sid_rnd_init] from makecharset - *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff - *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE - to:sid_rnd_init::@return -sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - return - to:@return - -(byte()) sid_rnd() -sid_rnd: scope:[sid_rnd] from makecharset::@7 - (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) - to:sid_rnd::@return -sid_rnd::@return: scope:[sid_rnd] from sid_rnd - (byte) sid_rnd::return#3 ← phi( sid_rnd/(byte) sid_rnd::return#0 ) - (byte) sid_rnd::return#1 ← (byte) sid_rnd::return#3 - return - to:@return - (void()) main() main: scope:[main] from @3 (byte) c2B#31 ← phi( @3/(byte) c2B#17 ) @@ -646,15 +644,39 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const nomodify byte*) SCREEN1 = (byte*)(number) $2800 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*)(number) $d400 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*)(number) $d412 -(const nomodify word*) SID_VOICE3_FREQ = (word*)(number) $d40e -(const nomodify byte*) SID_VOICE3_OSC = (byte*)(number) $d41b (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*sin(toRadians(360*i/256))) }} @@ -1186,9 +1208,9 @@ SYMBOL TABLE SSA (void()) sid_rnd_init() (label) sid_rnd_init::@return +Adding number conversion cast (unumber) $ffff in *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (number) $ffff Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) $ffff in *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff Adding number conversion cast (unumber) $3e8 in (byte*) main::col#1 ← (byte*) main::col#2 + rangenext(COLS,COLS+$3e8) Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (number) $3fff Adding number conversion cast (unumber) main::toD0181_$0 in (number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (unumber)(number) $3fff @@ -1226,23 +1248,21 @@ Adding number conversion cast (unumber) 8 in (number~) makecharset::$10 ← (wor Adding number conversion cast (unumber) makecharset::$10 in (number~) makecharset::$10 ← (word) makecharset::c#5 * (unumber)(number) 8 Adding number conversion cast (unumber) makecharset::$11 in (number~) makecharset::$11 ← (unumber~) makecharset::$10 + (byte) makecharset::i#3 Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (unumber)(number) $ffff Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast *((const nomodify word*) SID_VOICE3_FREQ) ← (unumber)(number) $ffff Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant pointer cast (word*) 54286 -Simplifying constant pointer cast (byte*) 54290 -Simplifying constant pointer cast (byte*) 54299 +Simplifying constant pointer cast (struct MOS6581_SID*) 54272 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 8192 +Simplifying constant integer cast $ffff Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $3e8 -Simplifying constant integer cast $ffff Simplifying constant integer cast $3e8 Simplifying constant integer cast $3fff Simplifying constant integer cast 4 @@ -1269,9 +1289,9 @@ Simplifying constant integer cast 8 Simplifying constant integer cast $ff Simplifying constant integer cast 8 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (word) $ffff Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (word) $ffff Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 @@ -1309,10 +1329,11 @@ Inferred type updated to byte in (unumber~) makecharset::$12 ← (word) makechar Inferred type updated to byte in (unumber~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff Inferred type updated to word in (unumber~) makecharset::$10 ← (word) makecharset::c#5 * (byte) 8 Inferred type updated to word in (unumber~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#3 -Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 +Inversing boolean not [9] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [8] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 Inversing boolean not [188] (bool~) makecharset::$14 ← (byte~) makecharset::$12 != (byte) 0 from [187] (bool~) makecharset::$13 ← (byte~) makecharset::$12 == (byte) 0 Inversing boolean not [200] (bool~) makecharset::$9 ← (byte~) makecharset::$7 <= (byte) makecharset::s#1 from [199] (bool~) makecharset::$8 ← (byte~) makecharset::$7 > (byte) makecharset::s#1 Successful SSA optimization Pass2UnaryNotSimplification +Alias sid_rnd::return#0 = sid_rnd::return#3 sid_rnd::return#1 Alias memset::return#0 = memset::str#1 memset::return#3 memset::return#1 Alias memset::str#2 = memset::str#3 Alias memset::num#1 = memset::num#2 @@ -1325,7 +1346,6 @@ Alias memset::str#4 = memset::str#5 Alias print_line_cursor#0 = print_screen#0 print_char_cursor#0 print_line_cursor#24 print_char_cursor#32 print_screen#9 print_line_cursor#18 print_char_cursor#25 print_screen#8 Alias print_char_cursor#1 = print_char_cursor#12 print_char_cursor#2 Alias print_line_cursor#1 = print_screen#2 print_screen#1 print_char_cursor#3 print_line_cursor#8 print_char_cursor#13 print_line_cursor#2 print_char_cursor#4 -Alias sid_rnd::return#0 = sid_rnd::return#3 sid_rnd::return#1 Alias print_line_cursor#14 = print_line_cursor#19 Alias print_char_cursor#21 = print_char_cursor#26 Alias print_screen#5 = print_screen#6 @@ -1515,8 +1535,8 @@ Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte*) print_line_cursor#12 (byte*) print_line_cursor#0 Identical Phi Values (byte*) makecharset::charset#10 (byte*) makecharset::charset#0 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) memset::$1 [2] if((word) memset::num#0<=(byte) 0) goto memset::@1 -Simple Condition (bool~) memset::$3 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4 +Simple Condition (bool~) memset::$1 [7] if((word) memset::num#0<=(byte) 0) goto memset::@1 +Simple Condition (bool~) memset::$3 [14] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4 Simple Condition (bool~) main::$2 [39] if((byte*) main::col#1!=rangelast(COLS,COLS+$3e8)) goto main::@1 Simple Condition (bool~) doplasma::$0 [71] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2 Simple Condition (bool~) doplasma::$3 [85] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@5 @@ -1560,7 +1580,7 @@ Constant (const void*) memset::return#2 = memset::str#0 Successful SSA optimization Pass2ConstantIdentification Constant value identified (word)main::toD0181_gfx#0 in [49] (byte~) main::toD0181_$3 ← > (word)(const byte*) main::toD0181_gfx#0 Successful SSA optimization Pass2ConstantValues -if() condition always false - eliminating [2] if((const word) memset::num#0<=(byte) 0) goto memset::@1 +if() condition always false - eliminating [7] if((const word) memset::num#0<=(byte) 0) goto memset::@1 if() condition always true - replacing block destination [55] if(true) goto main::@4 Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [37] main::col#1 ← ++ main::col#2 to ++ @@ -1578,7 +1598,7 @@ Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$4 + (const word) memset::num#0 +Constant right-side identified [5] (byte*) memset::end#0 ← (const byte*) memset::$4 + (const word) memset::num#0 Constant right-side identified [24] (word~) main::toD0181_$0 ← (const word) main::toD0181_$7 & (word) $3fff Constant right-side identified [27] (byte~) main::toD0181_$3 ← > (word)(const byte*) main::toD0181_gfx#0 Successful SSA optimization Pass2ConstantRValueConsolidation @@ -2756,7 +2776,7 @@ makecharset::@8: scope:[makecharset] from makecharset::@13 makecharset::@9 (byte()) sid_rnd() sid_rnd: scope:[sid_rnd] from makecharset::@6 - [130] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) + [130] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd [131] return @@ -2798,8 +2818,8 @@ memset::@2: scope:[memset] from memset::@1 (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from makecharset - [144] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff - [145] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + [144] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff + [145] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init [146] return @@ -2821,6 +2841,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) c1A (byte) c1A#1 161.76923076923077 (byte) c1A#3 15.971014492753623 @@ -3142,21 +3185,23 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const BLUE = 6 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b .label SCREEN1 = $2800 .label CHARSET = $2000 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label print_line_cursor = $400 .label print_char_cursor = $12 // Plasma state variables @@ -4003,8 +4048,8 @@ makecharset: { sid_rnd: { .label return = $42 .label return_1 = $3f - // [130] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuz1=_deref_pbuc1 - lda SID_VOICE3_OSC + // [130] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuz1=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC sta.z return jmp __breturn // sid_rnd::@return @@ -4093,14 +4138,14 @@ memset: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [144] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [144] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // [145] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // [145] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL jmp __breturn // sid_rnd_init::@return __breturn: @@ -4184,8 +4229,8 @@ Removing always clobbered register reg byte a as potential for zp[1]:21 [ makech Statement [132] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:2::makecharset:12::print_char:111 [ makecharset::c#2 print_char_cursor#18 ] { } ) always clobbers reg byte a reg byte y Statement [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:100::memset:136 [ memset::dst#2 ] { } ) always clobbers reg byte a Statement [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:100::memset:136 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [144] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] { } ) always clobbers reg byte a -Statement [145] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] { } ) always clobbers reg byte a +Statement [144] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] { } ) always clobbers reg byte a +Statement [145] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] { } ) always clobbers reg byte a Statement [5] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLUE [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [6] *((const nomodify byte*) BGCOL) ← (const nomodify byte) BLUE [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [8] *((byte*) main::col#2) ← (const nomodify byte) BLACK [ main::col#2 ] ( main:2 [ main::col#2 ] { } ) always clobbers reg byte a reg byte y @@ -4236,8 +4281,8 @@ Statement [127] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const t Statement [132] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:2::makecharset:12::print_char:111 [ makecharset::c#2 print_char_cursor#18 ] { } ) always clobbers reg byte a reg byte y Statement [140] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:100::memset:136 [ memset::dst#2 ] { } ) always clobbers reg byte a Statement [142] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:100::memset:136 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [144] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] { } ) always clobbers reg byte a -Statement [145] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] { } ) always clobbers reg byte a +Statement [144] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] { } ) always clobbers reg byte a +Statement [145] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::makecharset:12::sid_rnd_init:98 [ ] { } ) always clobbers reg byte a Potential registers zp[2]:2 [ main::col#2 main::col#1 ] : zp[2]:2 , Potential registers zp[1]:4 [ c1A#1 c1A#3 ] : zp[1]:4 , reg byte x , reg byte y , Potential registers zp[1]:5 [ c1B#1 c1B#3 ] : zp[1]:5 , reg byte x , reg byte y , @@ -4305,10 +4350,11 @@ Uplift Scope [memset] 333,336.67: zp[2]:23 [ memset::dst#2 memset::dst#1 ] Uplift Scope [] 6,015.14: zp[2]:18 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] 177.74: zp[1]:4 [ c1A#1 c1A#3 ] 166.42: zp[1]:5 [ c1B#1 c1B#3 ] 106.62: zp[1]:6 [ c2A#1 c2A#3 ] 103.45: zp[1]:7 [ c2B#1 c2B#3 ] Uplift Scope [main] 303: zp[2]:2 [ main::col#2 main::col#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] +Uplift Scope [sid_rnd_init] Uplift Scope [RADIX] Uplift Scope [print_char] Uplift Scope [print_cls] -Uplift Scope [sid_rnd_init] Uplifting [makecharset] best 168084 combination reg byte y [ makecharset::b#2 makecharset::b#6 makecharset::b#1 ] reg byte x [ makecharset::ii#2 makecharset::ii#1 ] reg byte a [ makecharset::$6 ] zp[1]:65 [ makecharset::$7 ] zp[1]:20 [ makecharset::i#2 makecharset::i#1 ] zp[2]:57 [ makecharset::$10 ] zp[2]:59 [ makecharset::$11 ] zp[2]:61 [ makecharset::$16 ] zp[1]:55 [ makecharset::s#0 ] zp[2]:16 [ makecharset::c#2 makecharset::c#1 ] zp[1]:54 [ makecharset::$3 ] zp[1]:56 [ makecharset::$12 ] Limited combination testing to 100 combinations of 9216 possible. @@ -4317,10 +4363,11 @@ Uplifting [memset] best 159081 combination zp[2]:23 [ memset::dst#2 memset::dst# Uplifting [] best 159081 combination zp[2]:18 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] zp[1]:4 [ c1A#1 c1A#3 ] zp[1]:5 [ c1B#1 c1B#3 ] zp[1]:6 [ c2A#1 c2A#3 ] zp[1]:7 [ c2B#1 c2B#3 ] Uplifting [main] best 159081 combination zp[2]:2 [ main::col#2 main::col#1 ] Uplifting [MOS6526_CIA] best 159081 combination +Uplifting [MOS6581_SID] best 159081 combination +Uplifting [sid_rnd_init] best 159081 combination Uplifting [RADIX] best 159081 combination Uplifting [print_char] best 159081 combination Uplifting [print_cls] best 159081 combination -Uplifting [sid_rnd_init] best 159081 combination Attempting to uplift remaining variables inzp[1]:11 [ doplasma::yprev#2 doplasma::yprev#4 ] Uplifting [doplasma] best 158581 combination reg byte x [ doplasma::yprev#2 doplasma::yprev#4 ] Attempting to uplift remaining variables inzp[1]:12 [ doplasma::i1#2 doplasma::i1#1 ] @@ -4449,21 +4496,23 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const BLUE = 6 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b .label SCREEN1 = $2800 .label CHARSET = $2000 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label print_line_cursor = $400 .label print_char_cursor = $b // Plasma state variables @@ -5151,8 +5200,8 @@ makecharset: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // [130] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // [130] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuaa=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC jmp __breturn // sid_rnd::@return __breturn: @@ -5240,14 +5289,14 @@ memset: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [144] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [144] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // [145] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // [145] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL jmp __breturn // sid_rnd_init::@return __breturn: @@ -5425,8 +5474,8 @@ Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination Removing instruction __bbegin: Succesful ASM optimization Pass5UnusedLabelElimination -Fixing long branch [90] bcc __b2 to bcs -Fixing long branch [108] bcc __b5 to bcs +Fixing long branch [92] bcc __b2 to bcs +Fixing long branch [110] bcc __b5 to bcs FINAL SYMBOL TABLE (label) @1 @@ -5453,15 +5502,39 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const nomodify byte*) SCREEN1 = (byte*) 10240 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*) 54272 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*) 54290 -(const nomodify word*) SID_VOICE3_FREQ = (word*) 54286 -(const nomodify byte*) SID_VOICE3_OSC = (byte*) 54299 (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*sin(toRadians(360*i/256))) }} @@ -5735,21 +5808,23 @@ Score: 97666 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const BLUE = 6 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b .label SCREEN1 = $2800 .label CHARSET = $2000 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label print_line_cursor = $400 .label print_char_cursor = $b // Plasma state variables @@ -6413,9 +6488,9 @@ makecharset: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // return *SID_VOICE3_OSC; - // [130] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // return SID->CH3_OSC; + // [130] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuaa=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC // sid_rnd::@return // } // [131] return @@ -6501,16 +6576,16 @@ memset: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // *SID_VOICE3_FREQ = $ffff - // [144] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // SID->CH3_FREQ = 0xffff + // [144] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE - // [145] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // SID->CH3_CONTROL = SID_CONTROL_NOISE + // [145] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL // sid_rnd_init::@return // } // [146] return diff --git a/src/test/ref/examples/plasma/plasma-unroll.sym b/src/test/ref/examples/plasma/plasma-unroll.sym index 029874fad..373d3ebac 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.sym +++ b/src/test/ref/examples/plasma/plasma-unroll.sym @@ -22,15 +22,39 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const nomodify byte*) SCREEN1 = (byte*) 10240 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*) 54272 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*) 54290 -(const nomodify word*) SID_VOICE3_FREQ = (word*) 54286 -(const nomodify byte*) SID_VOICE3_OSC = (byte*) 54299 (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*sin(toRadians(360*i/256))) }} diff --git a/src/test/ref/examples/plasma/plasma.asm b/src/test/ref/examples/plasma/plasma.asm index 2d9a965a0..14b130e28 100644 --- a/src/test/ref/examples/plasma/plasma.asm +++ b/src/test/ref/examples/plasma/plasma.asm @@ -6,22 +6,24 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const BLUE = 6 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b .label SCREEN1 = $2800 .label SCREEN2 = $2c00 .label CHARSET = $2000 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label print_line_cursor = $400 .label print_char_cursor = $b // Plasma state variables @@ -344,8 +346,8 @@ makecharset: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // return *SID_VOICE3_OSC; - lda SID_VOICE3_OSC + // return SID->CH3_OSC; + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC // } rts } @@ -406,14 +408,14 @@ memset: { } // Initialize SID voice 3 for random number generation sid_rnd_init: { - // *SID_VOICE3_FREQ = $ffff + // SID->CH3_FREQ = 0xffff lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // SID->CH3_CONTROL = SID_CONTROL_NOISE lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL // } rts } diff --git a/src/test/ref/examples/plasma/plasma.cfg b/src/test/ref/examples/plasma/plasma.cfg index 8165c060f..b9afb7929 100644 --- a/src/test/ref/examples/plasma/plasma.cfg +++ b/src/test/ref/examples/plasma/plasma.cfg @@ -185,7 +185,7 @@ makecharset::@8: scope:[makecharset] from makecharset::@13 makecharset::@9 (byte()) sid_rnd() sid_rnd: scope:[sid_rnd] from makecharset::@6 - [87] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) + [87] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd [88] return @@ -227,8 +227,8 @@ memset::@2: scope:[memset] from memset::@1 (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from makecharset - [101] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff - [102] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + [101] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff + [102] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init [103] return diff --git a/src/test/ref/examples/plasma/plasma.log b/src/test/ref/examples/plasma/plasma.log index 1bdd4efdd..8ca8389ef 100644 --- a/src/test/ref/examples/plasma/plasma.log +++ b/src/test/ref/examples/plasma/plasma.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$3 ← call toD018 (const nomodify byte*) SCREEN1 (const nomodify byte*) CHARSET Inlined call (byte~) main::$5 ← call toD018 (const nomodify byte*) SCREEN2 (const nomodify byte*) CHARSET @@ -8,6 +6,25 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@1 +(void()) sid_rnd_init() +sid_rnd_init: scope:[sid_rnd_init] from makecharset + *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (number) $ffff + *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + to:sid_rnd_init::@return +sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init + return + to:@return + +(byte()) sid_rnd() +sid_rnd: scope:[sid_rnd] from makecharset::@7 + (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) + to:sid_rnd::@return +sid_rnd::@return: scope:[sid_rnd] from sid_rnd + (byte) sid_rnd::return#3 ← phi( sid_rnd/(byte) sid_rnd::return#0 ) + (byte) sid_rnd::return#1 ← (byte) sid_rnd::return#3 + return + to:@return + (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from print_cls (byte) memset::c#4 ← phi( print_cls/(byte) memset::c#0 ) @@ -92,25 +109,6 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 return to:@return -(void()) sid_rnd_init() -sid_rnd_init: scope:[sid_rnd_init] from makecharset - *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff - *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE - to:sid_rnd_init::@return -sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - return - to:@return - -(byte()) sid_rnd() -sid_rnd: scope:[sid_rnd] from makecharset::@7 - (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) - to:sid_rnd::@return -sid_rnd::@return: scope:[sid_rnd] from sid_rnd - (byte) sid_rnd::return#3 ← phi( sid_rnd/(byte) sid_rnd::return#0 ) - (byte) sid_rnd::return#1 ← (byte) sid_rnd::return#3 - return - to:@return - (void()) main() main: scope:[main] from @3 (byte*) print_screen#7 ← phi( @3/(byte*) print_screen#8 ) @@ -693,16 +691,40 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const nomodify byte*) SCREEN1 = (byte*)(number) $2800 (const nomodify byte*) SCREEN2 = (byte*)(number) $2c00 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*)(number) $d400 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*)(number) $d412 -(const nomodify word*) SID_VOICE3_FREQ = (word*)(number) $d40e -(const nomodify byte*) SID_VOICE3_OSC = (byte*)(number) $d41b (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*sin(2*PI*i/256)) }} @@ -1274,9 +1296,9 @@ SYMBOL TABLE SSA (void()) sid_rnd_init() (label) sid_rnd_init::@return +Adding number conversion cast (unumber) $ffff in *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (number) $ffff Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) $ffff in *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff Adding number conversion cast (unumber) $3e8 in (byte*) main::col#1 ← (byte*) main::col#2 + rangenext(COLS,COLS+$3e8) Adding number conversion cast (unumber) $3fff in (number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (number) $3fff Adding number conversion cast (unumber) main::toD0181_$0 in (number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (unumber)(number) $3fff @@ -1323,24 +1345,22 @@ Adding number conversion cast (unumber) 8 in (number~) makecharset::$10 ← (wor Adding number conversion cast (unumber) makecharset::$10 in (number~) makecharset::$10 ← (word) makecharset::c#5 * (unumber)(number) 8 Adding number conversion cast (unumber) makecharset::$11 in (number~) makecharset::$11 ← (unumber~) makecharset::$10 + (byte) makecharset::i#3 Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (unumber)(number) $ffff Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast *((const nomodify word*) SID_VOICE3_FREQ) ← (unumber)(number) $ffff Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant pointer cast (word*) 54286 -Simplifying constant pointer cast (byte*) 54290 -Simplifying constant pointer cast (byte*) 54299 +Simplifying constant pointer cast (struct MOS6581_SID*) 54272 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 11264 Simplifying constant pointer cast (byte*) 8192 +Simplifying constant integer cast $ffff Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $3e8 -Simplifying constant integer cast $ffff Simplifying constant integer cast $3e8 Simplifying constant integer cast $3fff Simplifying constant integer cast 4 @@ -1371,9 +1391,9 @@ Simplifying constant integer cast 8 Simplifying constant integer cast $ff Simplifying constant integer cast 8 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (word) $ffff Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (word) $ffff Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 @@ -1420,10 +1440,11 @@ Inferred type updated to byte in (unumber~) makecharset::$12 ← (word) makechar Inferred type updated to byte in (unumber~) makecharset::$7 ← (byte~) makecharset::$6 & (byte) $ff Inferred type updated to word in (unumber~) makecharset::$10 ← (word) makecharset::c#5 * (byte) 8 Inferred type updated to word in (unumber~) makecharset::$11 ← (word~) makecharset::$10 + (byte) makecharset::i#3 -Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 +Inversing boolean not [9] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [8] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0 Inversing boolean not [206] (bool~) makecharset::$14 ← (byte~) makecharset::$12 != (byte) 0 from [205] (bool~) makecharset::$13 ← (byte~) makecharset::$12 == (byte) 0 Inversing boolean not [218] (bool~) makecharset::$9 ← (byte~) makecharset::$7 <= (byte) makecharset::s#1 from [217] (bool~) makecharset::$8 ← (byte~) makecharset::$7 > (byte) makecharset::s#1 Successful SSA optimization Pass2UnaryNotSimplification +Alias sid_rnd::return#0 = sid_rnd::return#3 sid_rnd::return#1 Alias memset::return#0 = memset::str#1 memset::return#3 memset::return#1 Alias memset::str#2 = memset::str#3 Alias memset::num#1 = memset::num#2 @@ -1436,7 +1457,6 @@ Alias memset::str#4 = memset::str#5 Alias print_line_cursor#0 = print_screen#0 print_char_cursor#0 print_line_cursor#23 print_char_cursor#31 print_screen#9 print_line_cursor#18 print_char_cursor#25 print_screen#8 Alias print_char_cursor#1 = print_char_cursor#12 print_char_cursor#2 Alias print_line_cursor#1 = print_screen#2 print_screen#1 print_char_cursor#3 print_line_cursor#8 print_char_cursor#13 print_line_cursor#2 print_char_cursor#4 -Alias sid_rnd::return#0 = sid_rnd::return#3 sid_rnd::return#1 Alias print_line_cursor#14 = print_line_cursor#19 Alias print_char_cursor#21 = print_char_cursor#26 Alias c1A#21 = c1A#26 c1A#31 @@ -1628,8 +1648,8 @@ Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte*) print_line_cursor#12 (byte*) print_line_cursor#0 Identical Phi Values (byte*) makecharset::charset#10 (byte*) makecharset::charset#0 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) memset::$1 [2] if((word) memset::num#0<=(byte) 0) goto memset::@1 -Simple Condition (bool~) memset::$3 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4 +Simple Condition (bool~) memset::$1 [7] if((word) memset::num#0<=(byte) 0) goto memset::@1 +Simple Condition (bool~) memset::$3 [14] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4 Simple Condition (bool~) main::$1 [39] if((byte*) main::col#1!=rangelast(COLS,COLS+$3e8)) goto main::@1 Simple Condition (bool~) doplasma::$0 [84] if((byte) doplasma::i#2<(byte) $19) goto doplasma::@2 Simple Condition (bool~) doplasma::$2 [97] if((byte) doplasma::i1#2<(byte) $28) goto doplasma::@5 @@ -1677,7 +1697,7 @@ Successful SSA optimization Pass2ConstantIdentification Constant value identified (word)main::toD0181_gfx#0 in [54] (byte~) main::toD0181_$3 ← > (word)(const byte*) main::toD0181_gfx#0 Constant value identified (word)main::toD0182_gfx#0 in [68] (byte~) main::toD0182_$3 ← > (word)(const byte*) main::toD0182_gfx#0 Successful SSA optimization Pass2ConstantValues -if() condition always false - eliminating [2] if((const word) memset::num#0<=(byte) 0) goto memset::@1 +if() condition always false - eliminating [7] if((const word) memset::num#0<=(byte) 0) goto memset::@1 if() condition always true - replacing block destination [44] if(true) goto main::@4 Successful SSA optimization Pass2ConstantIfs Resolved ranged next value [37] main::col#1 ← ++ main::col#2 to ++ @@ -1695,7 +1715,7 @@ Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$4 + (const word) memset::num#0 +Constant right-side identified [5] (byte*) memset::end#0 ← (const byte*) memset::$4 + (const word) memset::num#0 Constant right-side identified [26] (word~) main::toD0181_$0 ← (const word) main::toD0181_$7 & (word) $3fff Constant right-side identified [29] (byte~) main::toD0181_$3 ← > (word)(const byte*) main::toD0181_gfx#0 Constant right-side identified [35] (word~) main::toD0182_$0 ← (const word) main::toD0182_$7 & (word) $3fff @@ -2098,7 +2118,7 @@ makecharset::@8: scope:[makecharset] from makecharset::@13 makecharset::@9 (byte()) sid_rnd() sid_rnd: scope:[sid_rnd] from makecharset::@6 - [87] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) + [87] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd [88] return @@ -2140,8 +2160,8 @@ memset::@2: scope:[memset] from memset::@1 (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from makecharset - [101] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff - [102] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + [101] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff + [102] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init [103] return @@ -2163,6 +2183,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) c1A (byte) c1A#10 220.39999999999998 (byte) c1A#14 101.0 @@ -2388,22 +2431,24 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const BLUE = 6 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b .label SCREEN1 = $2800 .label SCREEN2 = $2c00 .label CHARSET = $2000 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label print_line_cursor = $400 .label print_char_cursor = $14 // Plasma state variables @@ -2983,8 +3028,8 @@ makecharset: { sid_rnd: { .label return = $2a .label return_1 = $27 - // [87] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuz1=_deref_pbuc1 - lda SID_VOICE3_OSC + // [87] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuz1=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC sta.z return jmp __breturn // sid_rnd::@return @@ -3073,14 +3118,14 @@ memset: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [101] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [101] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // [102] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // [102] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL jmp __breturn // sid_rnd_init::@return __breturn: @@ -3140,8 +3185,8 @@ Removing always clobbered register reg byte a as potential for zp[1]:23 [ makech Statement [89] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:2::makecharset:12::print_char:68 [ makecharset::c#2 print_char_cursor#18 ] { } ) always clobbers reg byte a reg byte y Statement [97] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:57::memset:93 [ memset::dst#2 ] { } ) always clobbers reg byte a Statement [99] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:57::memset:93 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [101] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] { } ) always clobbers reg byte a -Statement [102] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] { } ) always clobbers reg byte a +Statement [101] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] { } ) always clobbers reg byte a +Statement [102] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] { } ) always clobbers reg byte a Statement [5] *((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLUE [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [6] *((const nomodify byte*) BGCOL) ← (const nomodify byte) BLUE [ ] ( main:2 [ ] { } ) always clobbers reg byte a Statement [8] *((byte*) main::col#2) ← (const nomodify byte) BLACK [ main::col#2 ] ( main:2 [ main::col#2 ] { } ) always clobbers reg byte a reg byte y @@ -3169,8 +3214,8 @@ Statement [84] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const to Statement [89] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:2::makecharset:12::print_char:68 [ makecharset::c#2 print_char_cursor#18 ] { } ) always clobbers reg byte a reg byte y Statement [97] if((byte*) memset::dst#2!=(const byte*) memset::end#0) goto memset::@2 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:57::memset:93 [ memset::dst#2 ] { } ) always clobbers reg byte a Statement [99] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::makecharset:12::print_cls:57::memset:93 [ memset::dst#2 ] { } ) always clobbers reg byte a reg byte y -Statement [101] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] { } ) always clobbers reg byte a -Statement [102] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] { } ) always clobbers reg byte a +Statement [101] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] { } ) always clobbers reg byte a +Statement [102] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:2::makecharset:12::sid_rnd_init:55 [ ] { } ) always clobbers reg byte a Potential registers zp[2]:2 [ main::col#2 main::col#1 ] : zp[2]:2 , Potential registers zp[1]:4 [ c1A#10 c1A#14 c1A#4 ] : zp[1]:4 , reg byte x , reg byte y , Potential registers zp[1]:5 [ c1B#10 c1B#14 c1B#4 ] : zp[1]:5 , reg byte x , reg byte y , @@ -3213,10 +3258,11 @@ Uplift Scope [memset] 333,336.67: zp[2]:25 [ memset::dst#2 memset::dst#1 ] Uplift Scope [] 6,015.14: zp[2]:20 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] 362.88: zp[1]:4 [ c1A#10 c1A#14 c1A#4 ] 344.33: zp[1]:5 [ c1B#10 c1B#14 c1B#4 ] 272.79: zp[1]:6 [ c2A#24 c2A#14 c2A#4 ] 271.95: zp[1]:7 [ c2B#24 c2B#14 c2B#4 ] Uplift Scope [main] 303: zp[2]:2 [ main::col#2 main::col#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] +Uplift Scope [sid_rnd_init] Uplift Scope [RADIX] Uplift Scope [print_char] Uplift Scope [print_cls] -Uplift Scope [sid_rnd_init] Uplifting [doplasma] best 158157 combination reg byte y [ doplasma::i2#2 doplasma::i2#1 ] reg byte a [ doplasma::$6 ] reg byte x [ doplasma::ii#2 doplasma::ii#1 ] zp[2]:15 [ doplasma::screen#6 doplasma::screen#2 doplasma::screen#13 ] zp[1]:8 [ doplasma::i#2 doplasma::i#1 ] zp[1]:11 [ doplasma::i1#2 doplasma::i1#1 ] zp[1]:28 [ doplasma::$3 ] zp[1]:29 [ doplasma::$1 ] zp[1]:10 [ doplasma::c1b#2 doplasma::c1b#0 doplasma::c1b#1 ] zp[1]:13 [ doplasma::c2b#2 doplasma::c2b#0 doplasma::c2b#1 ] zp[1]:9 [ doplasma::c1a#2 doplasma::c1a#0 doplasma::c1a#1 ] zp[1]:12 [ doplasma::c2a#2 doplasma::c2a#0 doplasma::c2a#1 ] Limited combination testing to 100 combinations of 419904 possible. @@ -3227,10 +3273,11 @@ Uplifting [memset] best 126054 combination zp[2]:25 [ memset::dst#2 memset::dst# Uplifting [] best 126054 combination zp[2]:20 [ print_char_cursor#18 print_char_cursor#29 print_char_cursor#1 ] zp[1]:4 [ c1A#10 c1A#14 c1A#4 ] zp[1]:5 [ c1B#10 c1B#14 c1B#4 ] zp[1]:6 [ c2A#24 c2A#14 c2A#4 ] zp[1]:7 [ c2B#24 c2B#14 c2B#4 ] Uplifting [main] best 126054 combination zp[2]:2 [ main::col#2 main::col#1 ] Uplifting [MOS6526_CIA] best 126054 combination +Uplifting [MOS6581_SID] best 126054 combination +Uplifting [sid_rnd_init] best 126054 combination Uplifting [RADIX] best 126054 combination Uplifting [print_char] best 126054 combination Uplifting [print_cls] best 126054 combination -Uplifting [sid_rnd_init] best 126054 combination Attempting to uplift remaining variables inzp[1]:8 [ doplasma::i#2 doplasma::i#1 ] Uplifting [doplasma] best 126054 combination zp[1]:8 [ doplasma::i#2 doplasma::i#1 ] Attempting to uplift remaining variables inzp[1]:11 [ doplasma::i1#2 doplasma::i1#1 ] @@ -3299,22 +3346,24 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const BLUE = 6 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b .label SCREEN1 = $2800 .label SCREEN2 = $2c00 .label CHARSET = $2000 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label print_line_cursor = $400 .label print_char_cursor = $b // Plasma state variables @@ -3856,8 +3905,8 @@ makecharset: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // [87] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // [87] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuaa=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC jmp __breturn // sid_rnd::@return __breturn: @@ -3945,14 +3994,14 @@ memset: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [101] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [101] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // [102] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // [102] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL jmp __breturn // sid_rnd_init::@return __breturn: @@ -4115,16 +4164,40 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const nomodify byte*) SCREEN1 = (byte*) 10240 (const nomodify byte*) SCREEN2 = (byte*) 11264 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*) 54272 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*) 54290 -(const nomodify word*) SID_VOICE3_FREQ = (word*) 54286 -(const nomodify byte*) SID_VOICE3_OSC = (byte*) 54299 (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*sin(2*PI*i/256)) }} @@ -4330,22 +4403,24 @@ Score: 97752 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label BORDERCOL = $d020 .label BGCOL = $d021 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const BLUE = 6 - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b .label SCREEN1 = $2800 .label SCREEN2 = $2c00 .label CHARSET = $2000 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b .label print_line_cursor = $400 .label print_char_cursor = $b // Plasma state variables @@ -4855,9 +4930,9 @@ makecharset: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // return *SID_VOICE3_OSC; - // [87] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // return SID->CH3_OSC; + // [87] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuaa=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC // sid_rnd::@return // } // [88] return @@ -4943,16 +5018,16 @@ memset: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // *SID_VOICE3_FREQ = $ffff - // [101] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // SID->CH3_FREQ = 0xffff + // [101] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE - // [102] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // SID->CH3_CONTROL = SID_CONTROL_NOISE + // [102] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL // sid_rnd_init::@return // } // [103] return diff --git a/src/test/ref/examples/plasma/plasma.sym b/src/test/ref/examples/plasma/plasma.sym index 11289a0c5..6b2b4221b 100644 --- a/src/test/ref/examples/plasma/plasma.sym +++ b/src/test/ref/examples/plasma/plasma.sym @@ -22,16 +22,40 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 (const byte) RADIX::OCTAL = (number) 8 (const nomodify byte*) SCREEN1 = (byte*) 10240 (const nomodify byte*) SCREEN2 = (byte*) 11264 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*) 54272 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*) 54290 -(const nomodify word*) SID_VOICE3_FREQ = (word*) 54286 -(const nomodify byte*) SID_VOICE3_OSC = (byte*) 54299 (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*sin(2*PI*i/256)) }} diff --git a/src/test/ref/examples/rasterbars/raster-bars.log b/src/test/ref/examples/rasterbars/raster-bars.log index 8a241b094..1dc533da4 100644 --- a/src/test/ref/examples/rasterbars/raster-bars.log +++ b/src/test/ref/examples/rasterbars/raster-bars.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -76,6 +74,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*)(number) $d012 (void()) main() (bool~) main::$0 @@ -214,6 +235,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (void()) raster() (byte) raster::col @@ -383,11 +427,13 @@ Potential registers zp[1]:3 [ raster::i#2 raster::i#1 ] : zp[1]:3 , reg byte a , REGISTER UPLIFT SCOPES Uplift Scope [raster] 252,505: zp[1]:2 [ raster::col#2 raster::col#0 raster::col#1 ] 141,668.08: zp[1]:3 [ raster::i#2 raster::i#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [] Uplifting [raster] best 9585 combination reg byte a [ raster::col#2 raster::col#0 raster::col#1 ] reg byte x [ raster::i#2 raster::i#1 ] Uplifting [MOS6526_CIA] best 9585 combination +Uplifting [MOS6581_SID] best 9585 combination Uplifting [main] best 9585 combination Uplifting [] best 9585 combination @@ -571,6 +617,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() (label) main::@1 diff --git a/src/test/ref/examples/rasterbars/raster-bars.sym b/src/test/ref/examples/rasterbars/raster-bars.sym index 14b0d13e6..e1ebbe579 100644 --- a/src/test/ref/examples/rasterbars/raster-bars.sym +++ b/src/test/ref/examples/rasterbars/raster-bars.sym @@ -17,6 +17,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*) 53266 (void()) main() (label) main::@1 diff --git a/src/test/ref/examples/rotate/rotate.asm b/src/test/ref/examples/rotate/rotate.asm index 51500e665..b26852101 100644 --- a/src/test/ref/examples/rotate/rotate.asm +++ b/src/test/ref/examples/rotate/rotate.asm @@ -2,6 +2,10 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 .label SPRITES_XMSB = $d010 @@ -13,10 +17,6 @@ .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .const GREEN = 5 .const LIGHT_BLUE = $e // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. diff --git a/src/test/ref/examples/rotate/rotate.log b/src/test/ref/examples/rotate/rotate.log index b216fd58f..3fe9aefab 100644 --- a/src/test/ref/examples/rotate/rotate.log +++ b/src/test/ref/examples/rotate/rotate.log @@ -1,10 +1,4 @@ Resolved forward reference SPRITE to (byte*) SPRITE -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call mulf8s_prepare (signed byte) mulf8s::a Inlined call call mulf8s_prepare (signed byte) anim::cos_a @@ -610,6 +604,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 @@ -1919,6 +1936,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) anim() (signed word~) anim::$10 20002.0 (signed word~) anim::$11 20002.0 @@ -2256,6 +2296,10 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 .label SPRITES_XMSB = $d010 @@ -2267,10 +2311,6 @@ Target platform is c64basic / MOS6502X .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .const GREEN = 5 .const LIGHT_BLUE = $e // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. @@ -3628,6 +3668,7 @@ Uplift Scope [print_ulong_at] 7,001: zp[4]:76 [ print_ulong_at::dw#0 ] Uplift Scope [clock] 3,667.33: zp[4]:82 [ clock::return#0 ] 2,002: zp[4]:64 [ clock::return#2 ] Uplift Scope [init] 2,836.17: zp[1]:19 [ init::i#2 init::i#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [clock_start] Uplift Scope [RADIX] Uplift Scope [main] @@ -3648,6 +3689,7 @@ Uplifting [print_ulong_at] best 44325 combination zp[4]:76 [ print_ulong_at::dw# Uplifting [clock] best 44325 combination zp[4]:82 [ clock::return#0 ] zp[4]:64 [ clock::return#2 ] Uplifting [init] best 44175 combination reg byte x [ init::i#2 init::i#1 ] Uplifting [MOS6526_CIA] best 44175 combination +Uplifting [MOS6581_SID] best 44175 combination Uplifting [clock_start] best 44175 combination Uplifting [RADIX] best 44175 combination Uplifting [main] best 44175 combination @@ -3723,6 +3765,10 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 .label SPRITES_XMSB = $d010 @@ -3734,10 +3780,6 @@ ASSEMBLER BEFORE OPTIMIZATION .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .const GREEN = 5 .const LIGHT_BLUE = $e // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. @@ -4862,6 +4904,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 @@ -5137,6 +5202,10 @@ Score: 30994 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 .label SPRITES_XMSB = $d010 @@ -5148,10 +5217,6 @@ Score: 30994 .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .const GREEN = 5 .const LIGHT_BLUE = $e // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. diff --git a/src/test/ref/examples/rotate/rotate.sym b/src/test/ref/examples/rotate/rotate.sym index 469a78d31..0c060a87a 100644 --- a/src/test/ref/examples/rotate/rotate.sym +++ b/src/test/ref/examples/rotate/rotate.sym @@ -24,6 +24,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.log b/src/test/ref/examples/scrolllogo/scrolllogo.log index 09352ff33..830efb385 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.log +++ b/src/test/ref/examples/scrolllogo/scrolllogo.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$0 ← call toD018 (const byte*) SCREEN (const byte*) LOGO @@ -865,6 +863,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 @@ -3572,6 +3593,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor) (dword) div32u16u::dividend (word) div32u16u::divisor @@ -6085,6 +6129,7 @@ Uplift Scope [memset] 3,572.33: zp[2]:55 [ memset::dst#2 memset::dst#4 memset::d Uplift Scope [div32u16u] 2,002: zp[2]:169 [ div32u16u::quotient_lo#0 ] 400.4: zp[2]:165 [ div32u16u::quotient_hi#0 ] 367.33: zp[4]:171 [ div32u16u::return#0 ] 202: zp[4]:82 [ div32u16u::return#2 ] Uplift Scope [main] 353.5: zp[1]:2 [ main::ch#2 main::ch#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplifting [mul16u] best 75504 combination zp[4]:25 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:29 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:23 [ mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ] zp[2]:21 [ mul16u::b#2 mul16u::b#1 ] zp[4]:149 [ mul16u::return#3 ] zp[4]:104 [ mul16u::return#2 ] Uplifting [divr16u] best 75294 combination zp[2]:45 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:49 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:47 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:163 [ divr16u::return#2 ] zp[2]:167 [ divr16u::return#3 ] @@ -6098,6 +6143,7 @@ Uplifting [memset] best 75253 combination zp[2]:55 [ memset::dst#2 memset::dst#4 Uplifting [div32u16u] best 75253 combination zp[2]:169 [ div32u16u::quotient_lo#0 ] zp[2]:165 [ div32u16u::quotient_hi#0 ] zp[4]:171 [ div32u16u::return#0 ] zp[4]:82 [ div32u16u::return#2 ] Uplifting [main] best 75133 combination reg byte x [ main::ch#2 main::ch#1 ] Uplifting [MOS6526_CIA] best 75133 combination +Uplifting [MOS6581_SID] best 75133 combination Attempting to uplift remaining variables inzp[1]:5 [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] Uplifting [render_logo] best 70033 combination reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ] Attempting to uplift remaining variables inzp[1]:8 [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ] @@ -7934,6 +7980,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.sym b/src/test/ref/examples/scrolllogo/scrolllogo.sym index 6d0996cb7..b9e67682e 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.sym +++ b/src/test/ref/examples/scrolllogo/scrolllogo.sym @@ -26,6 +26,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 (const nomodify dword) PI_u4f28 = (dword) $3243f6a9 diff --git a/src/test/ref/examples/showlogo/showlogo.log b/src/test/ref/examples/showlogo/showlogo.log index 7225377ff..b9eb338a3 100644 --- a/src/test/ref/examples/showlogo/showlogo.log +++ b/src/test/ref/examples/showlogo/showlogo.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$0 ← call toD018 (const byte*) SCREEN (const byte*) LOGO @@ -161,6 +159,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte*) SCREEN = (byte*)(number) $400 (const nomodify byte) VIC_CSEL = (byte) 8 (const nomodify byte) VIC_MCM = (byte) $10 @@ -537,6 +558,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte) main::ch (byte) main::ch#1 151.5 @@ -830,11 +874,13 @@ REGISTER UPLIFT SCOPES Uplift Scope [memset] 3,572.33: zp[2]:8 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 183.67: zp[2]:10 [ memset::end#0 ] 125.12: zp[1]:7 [ memset::c#4 ] 101: zp[2]:3 [ memset::num#2 ] 0: zp[2]:5 [ memset::str#3 ] Uplift Scope [main] 353.5: zp[1]:2 [ main::ch#2 main::ch#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [memset] best 6284 combination zp[2]:8 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:10 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:3 [ memset::num#2 ] zp[2]:5 [ memset::str#3 ] Uplifting [main] best 6164 combination reg byte x [ main::ch#2 main::ch#1 ] Uplifting [MOS6526_CIA] best 6164 combination +Uplifting [MOS6581_SID] best 6164 combination Uplifting [] best 6164 combination Coalescing zero page register [ zp[2]:3 [ memset::num#2 ] ] with [ zp[2]:10 [ memset::end#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:5 [ memset::str#3 ] ] with [ zp[2]:8 [ memset::dst#2 memset::dst#4 memset::dst#1 ] ] - score: 1 @@ -1116,6 +1162,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_CSEL = (byte) 8 (const nomodify byte) VIC_MCM = (byte) $10 diff --git a/src/test/ref/examples/showlogo/showlogo.sym b/src/test/ref/examples/showlogo/showlogo.sym index d97f268f4..8786d92ef 100644 --- a/src/test/ref/examples/showlogo/showlogo.sym +++ b/src/test/ref/examples/showlogo/showlogo.sym @@ -26,6 +26,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte*) SCREEN = (byte*) 1024 (const nomodify byte) VIC_CSEL = (byte) 8 (const nomodify byte) VIC_MCM = (byte) $10 diff --git a/src/test/ref/examples/sinplotter/sine-plotter.log b/src/test/ref/examples/sinplotter/sine-plotter.log index f39a8a381..83645a051 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.log +++ b/src/test/ref/examples/sinplotter/sine-plotter.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call vicSelectGfxBank (const byte*) SCREEN Inlined call (byte~) main::$1 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -948,6 +946,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 @@ -3159,6 +3180,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol) (byte) bitmap_clear::bgcol (byte) bitmap_clear::col @@ -5744,6 +5788,7 @@ Uplift Scope [sin16s_gen2] 2,233: zp[2]:11 [ sin16s_gen2::i#2 sin16s_gen2::i#1 ] Uplift Scope [div32u16u] 2,002: zp[2]:177 [ div32u16u::quotient_lo#0 ] 400.4: zp[2]:173 [ div32u16u::quotient_hi#0 ] 367.33: zp[4]:179 [ div32u16u::return#0 ] 202: zp[4]:90 [ div32u16u::return#2 ] Uplift Scope [] 2,200.4: zp[2]:185 [ rem16u#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [bitmap_clear] Uplift Scope [main] @@ -5762,6 +5807,7 @@ Uplifting [sin16s_gen2] best 30310 combination zp[2]:11 [ sin16s_gen2::i#2 sin16 Uplifting [div32u16u] best 30310 combination zp[2]:177 [ div32u16u::quotient_lo#0 ] zp[2]:173 [ div32u16u::quotient_hi#0 ] zp[4]:179 [ div32u16u::return#0 ] zp[4]:90 [ div32u16u::return#2 ] Uplifting [] best 30310 combination zp[2]:185 [ rem16u#1 ] Uplifting [MOS6526_CIA] best 30310 combination +Uplifting [MOS6581_SID] best 30310 combination Uplifting [bitmap_clear] best 30310 combination Uplifting [main] best 30310 combination Attempting to uplift remaining variables inzp[1]:191 [ bitmap_init::$5 ] @@ -7597,6 +7643,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 diff --git a/src/test/ref/examples/sinplotter/sine-plotter.sym b/src/test/ref/examples/sinplotter/sine-plotter.sym index 3fea64382..50f217f0d 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.sym +++ b/src/test/ref/examples/sinplotter/sine-plotter.sym @@ -21,6 +21,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify dword) PI2_u4f28 = (dword) $6487ed51 (const nomodify dword) PI_HALF_u4f28 = (dword) $1921fb54 diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.log b/src/test/ref/examples/sinsprites/sinus-sprites.log index e587d41f0..82be3f683 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.log +++ b/src/test/ref/examples/sinsprites/sinus-sprites.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call prepareMEM (word) setFAC::w Inlined call call prepareMEM (word)(byte*) setMEMtoFAC::mem @@ -933,6 +931,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a @@ -3005,6 +3026,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) addMEMtoFAC((byte*) addMEMtoFAC::mem) (byte*) addMEMtoFAC::mem (word) addMEMtoFAC::prepareMEM1_mem @@ -5114,6 +5158,7 @@ Uplift Scope [clear_screen] 33,336.67: zp[2]:11 [ clear_screen::sc#2 clear_scree Uplift Scope [gen_sintab] 21,668.83: zp[1]:21 [ gen_sintab::i#10 gen_sintab::i#1 ] 10,001: zp[2]:57 [ gen_sintab::$20 ] 208.35: zp[1]:17 [ gen_sintab::length#10 ] 208.35: zp[2]:19 [ gen_sintab::sintab#13 ] 0: zp[1]:15 [ gen_sintab::max#2 ] 0: zp[1]:16 [ gen_sintab::min#2 ] Uplift Scope [init] 2,836.17: zp[1]:10 [ init::i#2 init::i#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [setARGtoFAC] Uplift Scope [addMEMtoFAC] Uplift Scope [subFACfromARG] @@ -5140,6 +5185,7 @@ Uplifting [clear_screen] best 1062803 combination zp[2]:11 [ clear_screen::sc#2 Uplifting [gen_sintab] best 1062796 combination zp[1]:21 [ gen_sintab::i#10 gen_sintab::i#1 ] zp[2]:57 [ gen_sintab::$20 ] zp[1]:17 [ gen_sintab::length#10 ] zp[2]:19 [ gen_sintab::sintab#13 ] reg byte x [ gen_sintab::max#2 ] zp[1]:16 [ gen_sintab::min#2 ] Uplifting [init] best 1062646 combination reg byte x [ init::i#2 init::i#1 ] Uplifting [MOS6526_CIA] best 1062646 combination +Uplifting [MOS6581_SID] best 1062646 combination Uplifting [setARGtoFAC] best 1062646 combination Uplifting [addMEMtoFAC] best 1062646 combination Uplifting [subFACfromARG] best 1062646 combination @@ -6961,6 +7007,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*) 1 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.sym b/src/test/ref/examples/sinsprites/sinus-sprites.sym index 78ea0a7c1..2578db0b8 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.sym +++ b/src/test/ref/examples/sinsprites/sinus-sprites.sym @@ -18,6 +18,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*) 1 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/font-hex-show.log b/src/test/ref/font-hex-show.log index 736accd01..155cf0838 100644 --- a/src/test/ref/font-hex-show.log +++ b/src/test/ref/font-hex-show.log @@ -1,7 +1,5 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$0 ← call toD018 (const byte*) SCREEN (const byte*) CHARSET @@ -151,6 +149,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte*) SCREEN = (byte*)(number) $400 (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 @@ -562,6 +583,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 100001.0 (byte~) init_font_hex::$1 200002.0 @@ -927,12 +971,14 @@ REGISTER UPLIFT SCOPES Uplift Scope [init_font_hex] 216,668.83: zp[1]:11 [ init_font_hex::i#2 init_font_hex::i#1 ] 200,002: zp[1]:14 [ init_font_hex::$1 ] 200,002: zp[1]:15 [ init_font_hex::$2 ] 115,001.6: zp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ] 100,001: zp[1]:13 [ init_font_hex::$0 ] 20,002: zp[1]:16 [ init_font_hex::idx#3 ] 16,334.97: zp[1]:10 [ init_font_hex::c1#4 init_font_hex::c1#1 ] 16,288.71: zp[2]:6 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] 14,231.5: zp[2]:8 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] 6,334.17: zp[2]:3 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] 1,606.87: zp[1]:5 [ init_font_hex::c#6 init_font_hex::c#1 ] Uplift Scope [main] 353.5: zp[1]:2 [ main::c#2 main::c#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [init_font_hex] best 83724 combination reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ] reg byte a [ init_font_hex::$1 ] reg byte a [ init_font_hex::$2 ] zp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ] zp[1]:13 [ init_font_hex::$0 ] zp[1]:16 [ init_font_hex::idx#3 ] zp[1]:10 [ init_font_hex::c1#4 init_font_hex::c1#1 ] zp[2]:6 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ] zp[2]:8 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ] zp[2]:3 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ] zp[1]:5 [ init_font_hex::c#6 init_font_hex::c#1 ] Limited combination testing to 100 combinations of 6912 possible. Uplifting [main] best 83604 combination reg byte x [ main::c#2 main::c#1 ] Uplifting [MOS6526_CIA] best 83604 combination +Uplifting [MOS6581_SID] best 83604 combination Uplifting [] best 83604 combination Attempting to uplift remaining variables inzp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ] Uplifting [init_font_hex] best 83604 combination zp[1]:12 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -1262,6 +1308,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte*) SCREEN = (byte*) 1024 (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 zp[1]:11 100001.0 diff --git a/src/test/ref/font-hex-show.sym b/src/test/ref/font-hex-show.sym index 2327ccaad..afd558ac5 100644 --- a/src/test/ref/font-hex-show.sym +++ b/src/test/ref/font-hex-show.sym @@ -18,6 +18,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte*) SCREEN = (byte*) 1024 (void()) init_font_hex((byte*) init_font_hex::charset) (byte~) init_font_hex::$0 zp[1]:11 100001.0 diff --git a/src/test/ref/gfxbank.log b/src/test/ref/gfxbank.log index cd1bbf533..58caca766 100644 --- a/src/test/ref/gfxbank.log +++ b/src/test/ref/gfxbank.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call vicSelectGfxBank (const nomodify byte*) main::PLAYFIELD_CHARSET @@ -62,6 +60,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (void()) main() @@ -203,6 +224,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte*) main::vicSelectGfxBank1_gfx (byte*) main::vicSelectGfxBank1_toDd001_gfx @@ -273,10 +317,12 @@ Statement [7] *((byte*)(const nomodify struct MOS6526_CIA*) CIA2) ← (const byt REGISTER UPLIFT SCOPES Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [] Uplifting [MOS6526_CIA] best 96 combination +Uplifting [MOS6581_SID] best 96 combination Uplifting [main] best 96 combination Uplifting [] best 96 combination @@ -380,6 +426,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (void()) main() (label) main::@return diff --git a/src/test/ref/gfxbank.sym b/src/test/ref/gfxbank.sym index 9d4ad7830..a487baca4 100644 --- a/src/test/ref/gfxbank.sym +++ b/src/test/ref/gfxbank.sym @@ -16,6 +16,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (void()) main() (label) main::@return diff --git a/src/test/ref/initializer-2.log b/src/test/ref/initializer-2.log index 0d3722a15..7df05879e 100644 --- a/src/test/ref/initializer-2.log +++ b/src/test/ref/initializer-2.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const struct Point*) points + (byte~) main::$1).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$1) -Replacing struct member reference *((const struct Point*) points + (byte~) main::$2).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$2) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/initializer-3.log b/src/test/ref/initializer-3.log index e4ddd81a3..b66d0c5bb 100644 --- a/src/test/ref/initializer-3.log +++ b/src/test/ref/initializer-3.log @@ -1,6 +1,3 @@ -Replacing struct member reference *((const struct Point*) points + (byte~) main::$3).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$3) -Replacing struct member reference *((const struct Point*) points + (byte~) main::$4).y with member unwinding reference *((signed word*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) -Replacing struct member reference *((const struct Point*) points + (byte~) main::$5).y with member unwinding reference *((signed word*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$5) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/irq-hardware-clobber-jsr.asm b/src/test/ref/irq-hardware-clobber-jsr.asm index 92dbbbbae..b536f63ed 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.asm +++ b/src/test/ref/irq-hardware-clobber-jsr.asm @@ -2,6 +2,8 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -22,8 +24,6 @@ .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 diff --git a/src/test/ref/irq-hardware-clobber-jsr.log b/src/test/ref/irq-hardware-clobber-jsr.log index 636c67c3f..c4a611237 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.log +++ b/src/test/ref/irq-hardware-clobber-jsr.log @@ -1,7 +1,4 @@ Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -84,6 +81,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte*) PROCPORT_DDR = (byte*)(number) 0 @@ -211,6 +231,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) do_irq() interrupt(HARDWARE_CLOBBER)(void()) irq() (void()) main() @@ -227,6 +270,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -247,8 +292,6 @@ Target platform is c64basic / MOS6502X .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -367,12 +410,14 @@ Statement [19] *((const nomodify byte*) IRQ_STATUS) ← (const nomodify byte) IR REGISTER UPLIFT SCOPES Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [irq] Uplift Scope [do_irq] Uplift Scope [] Uplifting [MOS6526_CIA] best 329 combination +Uplifting [MOS6581_SID] best 329 combination Uplifting [main] best 329 combination Uplifting [irq] best 329 combination Uplifting [do_irq] best 329 combination @@ -393,6 +438,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -413,8 +460,6 @@ ASSEMBLER BEFORE OPTIMIZATION .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 @@ -560,6 +605,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 @@ -587,6 +655,8 @@ Score: 224 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f // Processor port data direction register .label PROCPORT_DDR = 0 // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written @@ -607,8 +677,6 @@ Score: 224 .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the HARDWARE serves IRQ interrupts .label HARDWARE_IRQ = $fffe // The colors of the C64 diff --git a/src/test/ref/irq-hardware-clobber-jsr.sym b/src/test/ref/irq-hardware-clobber-jsr.sym index 7941b335d..57e1a5eb0 100644 --- a/src/test/ref/irq-hardware-clobber-jsr.sym +++ b/src/test/ref/irq-hardware-clobber-jsr.sym @@ -24,6 +24,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/irq-idx-problem.asm b/src/test/ref/irq-idx-problem.asm index dadf420c1..125771b8e 100644 --- a/src/test/ref/irq-idx-problem.asm +++ b/src/test/ref/irq-idx-problem.asm @@ -2,6 +2,8 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label VIC_CONTROL = $d011 // VIC II IRQ Status Register @@ -12,8 +14,6 @@ .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label SCREEN = $400 diff --git a/src/test/ref/irq-idx-problem.log b/src/test/ref/irq-idx-problem.log index 9c337c4df..7b0693332 100644 --- a/src/test/ref/irq-idx-problem.log +++ b/src/test/ref/irq-idx-problem.log @@ -1,7 +1,4 @@ Resolved forward reference table_driven_irq to interrupt(KERNEL_MIN)(void()) table_driven_irq() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -107,6 +104,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte*) SCREEN = (byte*)(number) $400 @@ -300,6 +320,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (volatile byte) irq_idx loadstore 6.0 (void()) main() interrupt(KERNEL_MIN)(void()) table_driven_irq() @@ -329,6 +372,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label VIC_CONTROL = $d011 // VIC II IRQ Status Register @@ -339,8 +384,6 @@ Target platform is c64basic / MOS6502X .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label SCREEN = $400 @@ -518,11 +561,13 @@ REGISTER UPLIFT SCOPES Uplift Scope [table_driven_irq] 11: zp[1]:3 [ table_driven_irq::idx#0 ] 6.17: zp[1]:4 [ table_driven_irq::val#0 ] Uplift Scope [] 6: zp[1]:2 [ irq_idx ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplifting [table_driven_irq] best 762 combination reg byte a [ table_driven_irq::idx#0 ] reg byte x [ table_driven_irq::val#0 ] Uplifting [] best 762 combination zp[1]:2 [ irq_idx ] Uplifting [MOS6526_CIA] best 762 combination +Uplifting [MOS6581_SID] best 762 combination Uplifting [main] best 762 combination Attempting to uplift remaining variables inzp[1]:2 [ irq_idx ] Uplifting [] best 762 combination zp[1]:2 [ irq_idx ] @@ -535,6 +580,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label VIC_CONTROL = $d011 // VIC II IRQ Status Register @@ -545,8 +592,6 @@ ASSEMBLER BEFORE OPTIMIZATION .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label SCREEN = $400 @@ -740,6 +785,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 1024 @@ -777,6 +845,8 @@ Score: 604 :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label RASTER = $d012 .label VIC_CONTROL = $d011 // VIC II IRQ Status Register @@ -787,8 +857,6 @@ Score: 604 .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .label SCREEN = $400 diff --git a/src/test/ref/irq-idx-problem.sym b/src/test/ref/irq-idx-problem.sym index 1cf0bbd6b..cdc02d19f 100644 --- a/src/test/ref/irq-idx-problem.sym +++ b/src/test/ref/irq-idx-problem.sym @@ -25,6 +25,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 1024 diff --git a/src/test/ref/irq-kernel-minimal.log b/src/test/ref/irq-kernel-minimal.log index bd1559785..85e9a9053 100644 --- a/src/test/ref/irq-kernel-minimal.log +++ b/src/test/ref/irq-kernel-minimal.log @@ -1,6 +1,4 @@ Resolved forward reference irq to interrupt(KERNEL_KEYBOARD)(void()) irq() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -54,6 +52,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return @@ -123,6 +144,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE interrupt(KERNEL_KEYBOARD)(void()) irq() (void()) main() @@ -201,11 +245,13 @@ Statement [9] *((const nomodify byte*) BGCOL) ← (const nomodify byte) BLACK [ REGISTER UPLIFT SCOPES Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [irq] Uplift Scope [] Uplifting [MOS6526_CIA] best 55 combination +Uplifting [MOS6581_SID] best 55 combination Uplifting [main] best 55 combination Uplifting [irq] best 55 combination Uplifting [] best 55 combination @@ -315,6 +361,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return diff --git a/src/test/ref/irq-kernel-minimal.sym b/src/test/ref/irq-kernel-minimal.sym index e72a86ac8..63fd3df89 100644 --- a/src/test/ref/irq-kernel-minimal.sym +++ b/src/test/ref/irq-kernel-minimal.sym @@ -18,6 +18,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) WHITE = (byte) 1 interrupt(KERNEL_KEYBOARD)(void()) irq() (label) irq::@return diff --git a/src/test/ref/keyboard-glitch.log b/src/test/ref/keyboard-glitch.log index 6be373149..060229e88 100644 --- a/src/test/ref/keyboard-glitch.log +++ b/src/test/ref/keyboard-glitch.log @@ -1,11 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -184,6 +176,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) RED = (byte) 2 @@ -531,6 +546,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) (byte~) keyboard_key_pressed::$2 2.0000002E7 (byte) keyboard_key_pressed::colidx @@ -942,6 +980,7 @@ Uplift Scope [keyboard_key_pressed] 20,000,002: zp[1]:10 [ keyboard_key_pressed: Uplift Scope [pressed] 2,000,002: zp[1]:17 [ pressed::$1 ] Uplift Scope [menu] 200,002: zp[1]:4 [ menu::$0 ] 200,002: zp[1]:6 [ menu::$4 ] 200,002: zp[1]:8 [ menu::$7 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [] @@ -951,6 +990,7 @@ Limited combination testing to 100 combinations of 196608 possible. Uplifting [pressed] best 11607 combination reg byte a [ pressed::$1 ] Uplifting [menu] best 9807 combination reg byte a [ menu::$0 ] reg byte a [ menu::$4 ] reg byte a [ menu::$7 ] Uplifting [MOS6526_CIA] best 9807 combination +Uplifting [MOS6581_SID] best 9807 combination Uplifting [main] best 9807 combination Uplifting [] best 9807 combination Attempting to uplift remaining variables inzp[1]:9 [ keyboard_key_pressed::colidx#0 ] @@ -1299,6 +1339,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) RED = (byte) 2 (const byte*) SCREEN = (byte*) 1024 diff --git a/src/test/ref/keyboard-glitch.sym b/src/test/ref/keyboard-glitch.sym index c7181ae38..3524a14ec 100644 --- a/src/test/ref/keyboard-glitch.sym +++ b/src/test/ref/keyboard-glitch.sym @@ -23,6 +23,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const nomodify byte) RED = (byte) 2 (const byte*) SCREEN = (byte*) 1024 diff --git a/src/test/ref/line-anim.log b/src/test/ref/line-anim.log index 946861401..efc7c1e68 100644 --- a/src/test/ref/line-anim.log +++ b/src/test/ref/line-anim.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call vicSelectGfxBank (const byte*) SCREEN Inlined call (byte~) main::$1 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP @@ -597,6 +595,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*)(number) 1 @@ -2077,6 +2098,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) bitmap_clear() (byte*) bitmap_clear::bitmap (word) bitmap_clear::bitmap#0 101.0 @@ -3693,6 +3737,7 @@ Uplift Scope [bitmap_init] 3,628.62: zp[2]:32 [ bitmap_init::yoffs#2 bitmap_init Uplift Scope [bitmap_plot] 2,103: zp[1]:38 [ bitmap_plot::y#0 ] 2,002: zp[2]:41 [ bitmap_plot::$0 ] 2,002: zp[1]:45 [ bitmap_plot::$1 ] 1,501.5: zp[2]:43 [ bitmap_plot::plotter#1 ] 500.5: zp[2]:39 [ bitmap_plot::plotter#0 ] 420.6: zp[2]:36 [ bitmap_plot::x#0 ] Uplift Scope [main] 223.64: zp[1]:2 [ main::i#2 main::i#1 ] 202: zp[1]:35 [ main::$10 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [divr16u] best 30437 combination zp[2]:14 [ divr16u::rem#4 divr16u::rem#3 divr16u::rem#9 divr16u::rem#5 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:16 [ divr16u::dividend#2 divr16u::dividend#0 ] zp[2]:76 [ divr16u::divisor#0 ] zp[2]:78 [ divr16u::return#2 ] @@ -3706,6 +3751,7 @@ Limited combination testing to 100 combinations of 15360 possible. Uplifting [bitmap_plot] best 28051 combination reg byte x [ bitmap_plot::y#0 ] zp[2]:41 [ bitmap_plot::$0 ] reg byte x [ bitmap_plot::$1 ] zp[2]:43 [ bitmap_plot::plotter#1 ] zp[2]:39 [ bitmap_plot::plotter#0 ] zp[2]:36 [ bitmap_plot::x#0 ] Uplifting [main] best 28011 combination zp[1]:2 [ main::i#2 main::i#1 ] reg byte a [ main::$10 ] Uplifting [MOS6526_CIA] best 28011 combination +Uplifting [MOS6581_SID] best 28011 combination Uplifting [] best 28011 combination Attempting to uplift remaining variables inzp[1]:92 [ bitmap_init::$5 ] Uplifting [bitmap_init] best 27951 combination reg byte a [ bitmap_init::$5 ] @@ -4904,6 +4950,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/line-anim.sym b/src/test/ref/line-anim.sym index ed04ea6a2..2b8ad9493 100644 --- a/src/test/ref/line-anim.sym +++ b/src/test/ref/line-anim.sym @@ -21,6 +21,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/loophead-problem-3.log b/src/test/ref/loophead-problem-3.log index 6eba8296f..a4b8884fe 100644 --- a/src/test/ref/loophead-problem-3.log +++ b/src/test/ref/loophead-problem-3.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -104,6 +102,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (dword~) main::$0 (word~) main::$1 @@ -328,6 +349,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte~) main::$2 22.0 (byte~) main::$3 22.0 @@ -583,11 +627,13 @@ REGISTER UPLIFT SCOPES Uplift Scope [mul16u] 3,505.33: zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] 2,431: zp[4]:8 [ mul16u::mb#2 mul16u::mb#1 ] 2,002: zp[1]:24 [ mul16u::$1 ] 1,668.33: zp[2]:2 [ mul16u::a#2 mul16u::a#0 ] 22: zp[4]:12 [ mul16u::return#2 ] Uplift Scope [main] 22: zp[4]:16 [ main::result#0 ] 22: zp[1]:22 [ main::$2 ] 22: zp[1]:23 [ main::$3 ] 11: zp[2]:20 [ main::kaputt#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [mul16u] best 1657 combination zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:8 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:2 [ mul16u::a#2 mul16u::a#0 ] zp[4]:12 [ mul16u::return#2 ] Uplifting [main] best 1645 combination zp[4]:16 [ main::result#0 ] reg byte a [ main::$2 ] reg byte a [ main::$3 ] zp[2]:20 [ main::kaputt#0 ] Uplifting [MOS6526_CIA] best 1645 combination +Uplifting [MOS6581_SID] best 1645 combination Uplifting [] best 1645 combination Coalescing zero page register [ zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] ] with [ zp[4]:12 [ mul16u::return#2 ] ] - score: 1 Coalescing zero page register [ zp[4]:4 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 ] ] with [ zp[4]:16 [ main::result#0 ] ] - score: 1 @@ -806,6 +852,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte~) main::$2 reg byte a 22.0 (byte~) main::$3 reg byte a 22.0 diff --git a/src/test/ref/loophead-problem-3.sym b/src/test/ref/loophead-problem-3.sym index f7b5e694c..878b343df 100644 --- a/src/test/ref/loophead-problem-3.sym +++ b/src/test/ref/loophead-problem-3.sym @@ -17,6 +17,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte~) main::$2 reg byte a 22.0 (byte~) main::$3 reg byte a 22.0 diff --git a/src/test/ref/memcpy-0.log b/src/test/ref/memcpy-0.log index e67a1e12c..3a8557d37 100644 --- a/src/test/ref/memcpy-0.log +++ b/src/test/ref/memcpy-0.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$0 ← call toD018 (const nomodify byte*) SCREEN_COPY (const nomodify byte*) CHARSET @@ -122,6 +120,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 @@ -419,6 +440,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte*) main::toD0181_gfx (byte) main::toD0181_return @@ -663,11 +707,13 @@ Potential registers zp[2]:12 [ memcpy::src_end#0 ] : zp[2]:12 , REGISTER UPLIFT SCOPES Uplift Scope [memcpy] 3,129.25: zp[2]:8 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] 2,237.67: zp[2]:10 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] 137.75: zp[2]:12 [ memcpy::src_end#0 ] 101: zp[2]:6 [ memcpy::num#2 ] 0: zp[2]:2 [ memcpy::source#2 ] 0: zp[2]:4 [ memcpy::destination#2 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [] Uplifting [memcpy] best 869 combination zp[2]:8 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] zp[2]:10 [ memcpy::dst#2 memcpy::dst#4 memcpy::dst#1 ] zp[2]:12 [ memcpy::src_end#0 ] zp[2]:6 [ memcpy::num#2 ] zp[2]:2 [ memcpy::source#2 ] zp[2]:4 [ memcpy::destination#2 ] Uplifting [MOS6526_CIA] best 869 combination +Uplifting [MOS6581_SID] best 869 combination Uplifting [main] best 869 combination Uplifting [] best 869 combination Coalescing zero page register [ zp[2]:2 [ memcpy::source#2 ] ] with [ zp[2]:8 [ memcpy::src#2 memcpy::src#4 memcpy::src#1 ] ] - score: 1 @@ -905,6 +951,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 diff --git a/src/test/ref/memcpy-0.sym b/src/test/ref/memcpy-0.sym index a14d78c8b..44d32a39b 100644 --- a/src/test/ref/memcpy-0.sym +++ b/src/test/ref/memcpy-0.sym @@ -18,6 +18,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte) PROCPORT_RAM_CHARROM = (byte) 1 diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.log b/src/test/ref/millfork-benchmarks/linkedlist-kc.log index 6cf411fe6..821e74386 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.log +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.log @@ -2,16 +2,6 @@ Resolved forward reference rand_seed to (word) rand_seed Fixing struct type size struct node to 4 Setting inferred volatile on symbol affected by address-of (word) last_time Setting inferred volatile on symbol affected by address-of (word) rand_seed -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((struct node*) prepend::new).next with member unwinding reference *((struct node**~) prepend::$1) -Replacing struct member reference *((struct node*) prepend::new).value with member unwinding reference *((word*~) prepend::$2) -Replacing struct member reference *((struct node*) sum::current).value with member unwinding reference *((word*~) sum::$0) -Replacing struct member reference *((struct node*) sum::current).next with member unwinding reference *((struct node**~) sum::$1) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -445,6 +435,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_NODE_NEXT = (byte) 0 (const byte) OFFSET_STRUCT_NODE_VALUE = (byte) 2 (const byte) RADIX::BINARY = (number) 2 @@ -1281,6 +1294,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (word) Ticks (word) Ticks#1 101.0 (word) Ticks#12 202.0 @@ -2036,6 +2072,7 @@ Uplift Scope [print_uint] 701: zp[2]:31 [ print_uint::w#0 ] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [start] Uplift Scope [end] Uplift Scope [node] @@ -2052,6 +2089,7 @@ Uplifting [print_uint] best 18387 combination zp[2]:31 [ print_uint::w#0 ] Uplifting [RADIX] best 18387 combination Uplifting [print_ln] best 18387 combination Uplifting [MOS6526_CIA] best 18387 combination +Uplifting [MOS6581_SID] best 18387 combination Uplifting [start] best 18387 combination Uplifting [end] best 18387 combination Uplifting [node] best 18387 combination @@ -2664,6 +2702,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_NODE_VALUE = (byte) 2 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/millfork-benchmarks/linkedlist-kc.sym b/src/test/ref/millfork-benchmarks/linkedlist-kc.sym index 29151084c..75aa75731 100644 --- a/src/test/ref/millfork-benchmarks/linkedlist-kc.sym +++ b/src/test/ref/millfork-benchmarks/linkedlist-kc.sym @@ -16,6 +16,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_NODE_VALUE = (byte) 2 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.log b/src/test/ref/millfork-benchmarks/plasma-kc.log index b6a4d69cd..e8a04a526 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.log +++ b/src/test/ref/millfork-benchmarks/plasma-kc.log @@ -1,15 +1,6 @@ Resolved forward reference rand_seed to (word) rand_seed Setting inferred volatile on symbol affected by address-of (word) last_time Setting inferred volatile on symbol affected by address-of (word) rand_seed -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -550,6 +541,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const nomodify byte) PAGE1 = (byte)(word)(const nomodify byte*) SCREEN1>>(number) 6&(number) $f0|(word)(const nomodify byte*) CHARSET>>(number) $a&(number) $e (const nomodify byte) PAGE2 = (byte)(word)(const nomodify byte*) SCREEN2>>(number) 6&(number) $f0|(word)(const nomodify byte*) CHARSET>>(number) $a&(number) $e @@ -1738,6 +1752,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (word) Ticks (word) Ticks#1 101.0 (word) Ticks#12 202.0 @@ -2882,6 +2919,7 @@ Uplift Scope [main] 245.29: zp[2]:2 [ main::count#2 main::count#1 ] 22: zp[1]:30 Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [start] Uplift Scope [end] @@ -2898,6 +2936,7 @@ Uplifting [main] best 131949 combination zp[2]:2 [ main::count#2 main::count#1 ] Uplifting [RADIX] best 131949 combination Uplifting [print_ln] best 131949 combination Uplifting [MOS6526_CIA] best 131949 combination +Uplifting [MOS6581_SID] best 131949 combination Uplifting [start] best 131949 combination Uplifting [end] best 131949 combination Attempting to uplift remaining variables inzp[1]:24 [ makechar::b#3 makechar::b#7 makechar::b#2 ] @@ -3817,6 +3856,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) PAGE1 = (word)(const nomodify byte*) SCREEN1>>(byte) 6&(byte) $f0|(word)(const nomodify byte*) CHARSET>>(byte) $a&(byte) $e (const nomodify byte) PAGE2 = (word)(const nomodify byte*) SCREEN2>>(byte) 6&(byte) $f0|(word)(const nomodify byte*) CHARSET>>(byte) $a&(byte) $e (const byte) RADIX::BINARY = (number) 2 diff --git a/src/test/ref/millfork-benchmarks/plasma-kc.sym b/src/test/ref/millfork-benchmarks/plasma-kc.sym index be94a0736..550001d4c 100644 --- a/src/test/ref/millfork-benchmarks/plasma-kc.sym +++ b/src/test/ref/millfork-benchmarks/plasma-kc.sym @@ -19,6 +19,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) PAGE1 = (word)(const nomodify byte*) SCREEN1>>(byte) 6&(byte) $f0|(word)(const nomodify byte*) CHARSET>>(byte) $a&(byte) $e (const nomodify byte) PAGE2 = (word)(const nomodify byte*) SCREEN2>>(byte) 6&(byte) $f0|(word)(const nomodify byte*) CHARSET>>(byte) $a&(byte) $e (const byte) RADIX::BINARY = (number) 2 diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.log b/src/test/ref/millfork-benchmarks/romsum-kc.log index a48126bf6..3c335fefc 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.log +++ b/src/test/ref/millfork-benchmarks/romsum-kc.log @@ -1,12 +1,6 @@ Resolved forward reference rand_seed to (word) rand_seed Setting inferred volatile on symbol affected by address-of (word) last_time Setting inferred volatile on symbol affected by address-of (word) rand_seed -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -571,6 +565,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OCTAL = (number) 8 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a @@ -1740,6 +1757,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (word) Ticks (word) Ticks#1 101.0 (word) Ticks#12 202.0 @@ -2805,6 +2845,7 @@ Uplift Scope [main] 134.67: zp[2]:2 [ main::i#3 main::i#2 ] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [start] Uplift Scope [end] @@ -2821,6 +2862,7 @@ Uplifting [main] best 124674 combination zp[2]:2 [ main::i#3 main::i#2 ] Uplifting [RADIX] best 124674 combination Uplifting [print_ln] best 124674 combination Uplifting [MOS6526_CIA] best 124674 combination +Uplifting [MOS6581_SID] best 124674 combination Uplifting [start] best 124674 combination Uplifting [end] best 124674 combination Attempting to uplift remaining variables inzp[1]:11 [ utoa::digit#2 utoa::digit#1 ] @@ -3653,6 +3695,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/millfork-benchmarks/romsum-kc.sym b/src/test/ref/millfork-benchmarks/romsum-kc.sym index ab2af5dc7..063a585b1 100644 --- a/src/test/ref/millfork-benchmarks/romsum-kc.sym +++ b/src/test/ref/millfork-benchmarks/romsum-kc.sym @@ -17,6 +17,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.log b/src/test/ref/millfork-benchmarks/sieve-kc.log index 9c005a459..4962a7107 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.log +++ b/src/test/ref/millfork-benchmarks/sieve-kc.log @@ -1,12 +1,6 @@ Resolved forward reference rand_seed to (word) rand_seed Setting inferred volatile on symbol affected by address-of (word) last_time Setting inferred volatile on symbol affected by address-of (word) rand_seed -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -350,6 +344,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -994,6 +1011,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (word) Ticks (word) Ticks#1 101.0 (word) Ticks#12 202.0 @@ -1626,6 +1666,7 @@ Uplift Scope [print_uint] 701: zp[2]:19 [ print_uint::w#0 ] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [start] Uplift Scope [end] Uplift Scope [main] @@ -1638,6 +1679,7 @@ Uplifting [print_uint] best 7402 combination zp[2]:19 [ print_uint::w#0 ] Uplifting [RADIX] best 7402 combination Uplifting [print_ln] best 7402 combination Uplifting [MOS6526_CIA] best 7402 combination +Uplifting [MOS6581_SID] best 7402 combination Uplifting [start] best 7402 combination Uplifting [end] best 7402 combination Uplifting [main] best 7402 combination @@ -2232,6 +2274,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/millfork-benchmarks/sieve-kc.sym b/src/test/ref/millfork-benchmarks/sieve-kc.sym index 01df0be6f..090912f0c 100644 --- a/src/test/ref/millfork-benchmarks/sieve-kc.sym +++ b/src/test/ref/millfork-benchmarks/sieve-kc.sym @@ -17,6 +17,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm index 0c7616f73..014e69bc2 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm @@ -2,6 +2,8 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 .label SPRITES_XMSB = $d010 @@ -21,8 +23,6 @@ .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index 60ee40db8..9a6e35ac0 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -1,7 +1,4 @@ Resolved forward reference plex_irq to interrupt(KERNEL_MIN)(void()) plex_irq() -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).INTERRUPT with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call call plexSetScreen (byte*) plexInit::screen Inlined call call plexFreePrepare @@ -392,6 +389,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } @@ -1317,6 +1337,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte*) PLEX_SCREEN_PTR (volatile bool) framedone loadstore 1222.8888888888887 (void()) init() @@ -1502,6 +1545,8 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 .label SPRITES_XMSB = $d010 @@ -1521,8 +1566,6 @@ Target platform is c64basic / MOS6502X .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 @@ -2466,6 +2509,7 @@ Uplift Scope [] 1,222.89: zp[1]:17 [ framedone ] 325.22: zp[1]:14 [ plex_sprite_ Uplift Scope [plexShowSprite] 202: zp[1]:26 [ plexShowSprite::plexFreeAdd1_$0 ] 202: zp[1]:27 [ plexShowSprite::plexFreeAdd1_$1 ] 202: zp[1]:28 [ plexShowSprite::plexFreeAdd1_$2 ] 202: zp[1]:29 [ plexShowSprite::xpos_idx#0 ] 202: zp[1]:31 [ plexShowSprite::$2 ] 202: zp[1]:32 [ plexShowSprite::$3 ] 202: zp[1]:33 [ plexShowSprite::$9 ] 202: zp[1]:34 [ plexShowSprite::$5 ] 202: zp[1]:35 [ plexShowSprite::$6 ] 151.5: zp[1]:25 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 101: zp[1]:30 [ plexShowSprite::$11 ] 25.25: zp[1]:24 [ plexShowSprite::plex_sprite_idx2#0 ] Uplift Scope [plex_irq] 11: zp[1]:23 [ plex_irq::$4 ] 4: zp[1]:22 [ plex_irq::plexFreeNextYpos1_return#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplifting [plexSort] best 60245 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] zp[1]:20 [ plexSort::s#2 ] zp[1]:5 [ plexSort::m#2 plexSort::m#1 ] zp[1]:19 [ plexSort::nxt_y#0 ] zp[1]:18 [ plexSort::nxt_idx#0 ] @@ -2480,6 +2524,7 @@ Uplifting [plexShowSprite] best 57935 combination reg byte a [ plexShowSprite::p Limited combination testing to 10 combinations of 1572864 possible. Uplifting [plex_irq] best 57872 combination zp[1]:23 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ] Uplifting [MOS6526_CIA] best 57872 combination +Uplifting [MOS6581_SID] best 57872 combination Uplifting [main] best 57872 combination Attempting to uplift remaining variables inzp[1]:20 [ plexSort::s#2 ] Uplifting [plexSort] best 57272 combination reg byte x [ plexSort::s#2 ] @@ -2545,6 +2590,8 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 .label SPRITES_XMSB = $d010 @@ -2564,8 +2611,6 @@ ASSEMBLER BEFORE OPTIMIZATION .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 @@ -3374,6 +3419,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } @@ -3562,6 +3630,8 @@ Score: 43606 :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Value that disables all CIA interrupts when stored to the CIA Interrupt registers + .const CIA_INTERRUPT_CLEAR = $7f .label SPRITES_XPOS = $d000 .label SPRITES_YPOS = $d001 .label SPRITES_XMSB = $d010 @@ -3581,8 +3651,6 @@ Score: 43606 .const IRQ_RASTER = 1 // The CIA#1: keyboard matrix, joystick #1/#2 .label CIA1 = $dc00 - // Value that disables all CIA interrupts when stored to the CIA Interrupt registers - .const CIA_INTERRUPT_CLEAR = $7f // The vector used when the KERNAL serves IRQ interrupts .label KERNEL_IRQ = $314 .const WHITE = 1 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym index 6a3c7b4b6..2ad4178ae 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.sym @@ -27,6 +27,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = (byte) $d (const nomodify byte) PLEX_COUNT = (byte) $20 (const byte*) PLEX_FREE_YPOS[(number) 8] = { fill( 8, 0) } diff --git a/src/test/ref/parse-negated-struct-ref.log b/src/test/ref/parse-negated-struct-ref.log index 7f66b9020..345c02605 100644 --- a/src/test/ref/parse-negated-struct-ref.log +++ b/src/test/ref/parse-negated-struct-ref.log @@ -1,5 +1,4 @@ Setting struct to load/store in variable affected by address-of (struct A*) main::a ← &(struct A) aa -Replacing struct member reference *((struct A*) main::a).b with member unwinding reference *((byte*~) main::$2) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/plasma-center.asm b/src/test/ref/plasma-center.asm index 79c01bf22..3025c192f 100644 --- a/src/test/ref/plasma-center.asm +++ b/src/test/ref/plasma-center.asm @@ -2,25 +2,27 @@ .pc = $801 "Basic" :BasicUpstart(__bbegin) .pc = $80d "Program" + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const SIZEOF_WORD = 2 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b // Plasma charset .label CHARSET = $2000 // Plasma screen 1 .label SCREEN1 = $2800 // Plasma screen 2 .label SCREEN2 = $2c00 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b // Top of the heap used by malloc() .label HEAP_TOP = $a000 .label print_line_cursor = $400 @@ -372,8 +374,8 @@ make_plasma_charset: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // return *SID_VOICE3_OSC; - lda SID_VOICE3_OSC + // return SID->CH3_OSC; + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC // } rts } @@ -406,14 +408,14 @@ print_cls: { } // Initialize SID voice 3 for random number generation sid_rnd_init: { - // *SID_VOICE3_FREQ = $ffff + // SID->CH3_FREQ = 0xffff lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // SID->CH3_CONTROL = SID_CONTROL_NOISE lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL // } rts } diff --git a/src/test/ref/plasma-center.cfg b/src/test/ref/plasma-center.cfg index 6fb4aa00d..84dcf87c7 100644 --- a/src/test/ref/plasma-center.cfg +++ b/src/test/ref/plasma-center.cfg @@ -186,7 +186,7 @@ make_plasma_charset::@8: scope:[make_plasma_charset] from make_plasma_charset:: (byte()) sid_rnd() sid_rnd: scope:[sid_rnd] from make_plasma_charset::@6 - [85] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) + [85] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd [86] return @@ -212,8 +212,8 @@ print_cls::@return: scope:[print_cls] from print_cls (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from make_plasma_charset - [93] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff - [94] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + [93] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff + [94] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init [95] return diff --git a/src/test/ref/plasma-center.log b/src/test/ref/plasma-center.log index 33e610839..602633c40 100644 --- a/src/test/ref/plasma-center.log +++ b/src/test/ref/plasma-center.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$5 ← call toD018 (const nomodify byte*) SCREEN1 (const nomodify byte*) CHARSET Inlined call (byte~) main::$7 ← call toD018 (const nomodify byte*) SCREEN2 (const nomodify byte*) CHARSET @@ -8,6 +6,25 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@1 +(void()) sid_rnd_init() +sid_rnd_init: scope:[sid_rnd_init] from make_plasma_charset + *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (number) $ffff + *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + to:sid_rnd_init::@return +sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init + return + to:@return + +(byte()) sid_rnd() +sid_rnd: scope:[sid_rnd] from make_plasma_charset::@7 + (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) + to:sid_rnd::@return +sid_rnd::@return: scope:[sid_rnd] from sid_rnd + (byte) sid_rnd::return#3 ← phi( sid_rnd/(byte) sid_rnd::return#0 ) + (byte) sid_rnd::return#1 ← (byte) sid_rnd::return#3 + return + to:@return + (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) memset: scope:[memset] from main::@7 print_cls (byte) memset::c#5 ← phi( main::@7/(byte) memset::c#1 print_cls/(byte) memset::c#0 ) @@ -506,25 +523,6 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#13 return to:@return - -(void()) sid_rnd_init() -sid_rnd_init: scope:[sid_rnd_init] from make_plasma_charset - *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff - *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE - to:sid_rnd_init::@return -sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init - return - to:@return - -(byte()) sid_rnd() -sid_rnd: scope:[sid_rnd] from make_plasma_charset::@7 - (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) - to:sid_rnd::@return -sid_rnd::@return: scope:[sid_rnd] from sid_rnd - (byte) sid_rnd::return#3 ← phi( sid_rnd/(byte) sid_rnd::return#0 ) - (byte) sid_rnd::return#1 ← (byte) sid_rnd::return#3 - return - to:@return @4: scope:[] from @3 (byte*) print_screen#12 ← phi( @3/(byte*) print_screen#0 ) (byte*) print_char_cursor#41 ← phi( @3/(byte*) print_char_cursor#0 ) @@ -1430,6 +1428,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) NUM_SQUARES (byte) NUM_SQUARES#0 (byte) NUM_SQUARES#1 @@ -1480,6 +1501,9 @@ SYMBOL TABLE SSA (byte) NUM_SQUARES#7 (byte) NUM_SQUARES#8 (byte) NUM_SQUARES#9 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1527,10 +1551,8 @@ SYMBOL TABLE SSA (byte*) SCREEN_DIST#7 (byte*) SCREEN_DIST#8 (byte*) SCREEN_DIST#9 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*)(number) $d400 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*)(number) $d412 -(const nomodify word*) SID_VOICE3_FREQ = (word*)(number) $d40e -(const nomodify byte*) SID_VOICE3_OSC = (byte*)(number) $d41b (const to_nomodify byte*) SINTABLE[(number) $200] = kickasm {{ .for(var i=0;i<$200;i++) .byte round(127.5+127.5*sin(2*PI*i/256)) }} @@ -2661,6 +2683,7 @@ SYMBOL TABLE SSA Fixing inline constructor with init_angle_screen::$13 ← (byte)init_angle_screen::$4 w= (byte)0 Fixing inline constructor with init_angle_screen::$14 ← (byte)init_angle_screen::$5 w= (byte)0 Successful SSA optimization Pass2FixInlineConstructors +Adding number conversion cast (unumber) $ffff in *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (number) $ffff Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#2 > (number) 0 Adding number conversion cast (unumber) 0 in (bool~) bsearch16u::$5 ← (byte) bsearch16u::num#3 > (number) 0 Adding number conversion cast (unumber) 1 in (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#4 >> (number) 1 @@ -2693,7 +2716,6 @@ Adding number conversion cast (snumber) 0 in (bool~) atan2_16::$13 ← (signed w Adding number conversion cast (unumber) $8000 in (number~) atan2_16::$12 ← (number) $8000 - (word) atan2_16::angle#9 Adding number conversion cast (unumber) atan2_16::$12 in (number~) atan2_16::$12 ← (unumber)(number) $8000 - (word) atan2_16::angle#9 Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8 -Adding number conversion cast (unumber) $ffff in *((const nomodify word*) SID_VOICE3_FREQ) ← (number) $ffff Adding number conversion cast (unumber) $3e8 in (word) malloc::size#1 ← (number) $3e8 Adding number conversion cast (unumber) $3e8 in (word) malloc::size#2 ← (number) $3e8 Adding number conversion cast (unumber) $3e8 in (word) memset::num#1 ← (number) $3e8 @@ -2792,11 +2814,11 @@ Adding number conversion cast (unumber) 8 in (number~) make_plasma_charset::$10 Adding number conversion cast (unumber) make_plasma_charset::$10 in (number~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#5 * (unumber)(number) 8 Adding number conversion cast (unumber) make_plasma_charset::$11 in (number~) make_plasma_charset::$11 ← (unumber~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#3 Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (unumber)(number) $ffff Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 Inlining cast (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 Inlining cast (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8 -Inlining cast *((const nomodify word*) SID_VOICE3_FREQ) ← (unumber)(number) $ffff Inlining cast (word) malloc::size#1 ← (unumber)(number) $3e8 Inlining cast (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $0 Inlining cast (word) malloc::size#2 ← (unumber)(number) $3e8 @@ -2806,13 +2828,12 @@ Inlining cast (byte) NUM_SQUARES#3 ← (unumber)(number) $30 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant pointer cast (word*) 54286 -Simplifying constant pointer cast (byte*) 54290 -Simplifying constant pointer cast (byte*) 54299 +Simplifying constant pointer cast (struct MOS6581_SID*) 54272 Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 10240 Simplifying constant pointer cast (byte*) 11264 Simplifying constant pointer cast (byte*) 40960 +Simplifying constant integer cast $ffff Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -2841,7 +2862,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $8000 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $3e8 -Simplifying constant integer cast $ffff Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8 Simplifying constant integer cast $3e8 @@ -2889,6 +2909,7 @@ Simplifying constant integer cast 8 Simplifying constant integer cast $ff Simplifying constant integer cast 8 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (word) $ffff Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -2916,7 +2937,6 @@ Finalized unsigned number type (byte) 1 Finalized signed number type (signed byte) 0 Finalized unsigned number type (word) $8000 Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (word) $ffff Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (word) $3e8 @@ -3002,16 +3022,17 @@ Inferred type updated to byte in (unumber~) make_plasma_charset::$12 ← (word) Inferred type updated to byte in (unumber~) make_plasma_charset::$7 ← (byte~) make_plasma_charset::$6 & (byte) $ff Inferred type updated to word in (unumber~) make_plasma_charset::$10 ← (word) make_plasma_charset::c#5 * (byte) 8 Inferred type updated to word in (unumber~) make_plasma_charset::$11 ← (word~) make_plasma_charset::$10 + (byte) make_plasma_charset::i#3 -Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0 -Inversing boolean not [44] (bool~) bsearch16u::$10 ← (signed word) bsearch16u::result#0 != (signed byte) 0 from [43] (bool~) bsearch16u::$9 ← (signed word) bsearch16u::result#0 == (signed byte) 0 -Inversing boolean not [51] (bool~) bsearch16u::$12 ← (signed word) bsearch16u::result#1 <= (signed byte) 0 from [50] (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#1 > (signed byte) 0 -Inversing boolean not [147] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [146] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0 -Inversing boolean not [156] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [155] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0 -Inversing boolean not [167] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [166] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4 -Inversing boolean not [191] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [190] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0 +Inversing boolean not [9] (bool~) memset::$1 ← (word) memset::num#2 <= (byte) 0 from [8] (bool~) memset::$0 ← (word) memset::num#2 > (byte) 0 +Inversing boolean not [51] (bool~) bsearch16u::$10 ← (signed word) bsearch16u::result#0 != (signed byte) 0 from [50] (bool~) bsearch16u::$9 ← (signed word) bsearch16u::result#0 == (signed byte) 0 +Inversing boolean not [58] (bool~) bsearch16u::$12 ← (signed word) bsearch16u::result#1 <= (signed byte) 0 from [57] (bool~) bsearch16u::$11 ← (signed word) bsearch16u::result#1 > (signed byte) 0 +Inversing boolean not [154] (bool~) atan2_16::$17 ← (signed word) atan2_16::yi#3 != (signed byte) 0 from [153] (bool~) atan2_16::$16 ← (signed word) atan2_16::yi#3 == (signed byte) 0 +Inversing boolean not [163] (bool~) atan2_16::$11 ← (signed word) atan2_16::x#4 >= (signed byte) 0 from [162] (bool~) atan2_16::$10 ← (signed word) atan2_16::x#4 < (signed byte) 0 +Inversing boolean not [174] (bool~) atan2_16::$19 ← (byte) 0 == (byte) atan2_16::shift#4 from [173] (bool~) atan2_16::$24 ← (byte) 0 != (byte) atan2_16::shift#4 +Inversing boolean not [198] (bool~) atan2_16::$14 ← (signed word) atan2_16::y#4 >= (signed byte) 0 from [197] (bool~) atan2_16::$13 ← (signed word) atan2_16::y#4 < (signed byte) 0 Inversing boolean not [507] (bool~) make_plasma_charset::$14 ← (byte~) make_plasma_charset::$12 != (byte) 0 from [506] (bool~) make_plasma_charset::$13 ← (byte~) make_plasma_charset::$12 == (byte) 0 Inversing boolean not [519] (bool~) make_plasma_charset::$9 ← (byte~) make_plasma_charset::$7 <= (byte) make_plasma_charset::s#1 from [518] (bool~) make_plasma_charset::$8 ← (byte~) make_plasma_charset::$7 > (byte) make_plasma_charset::s#1 Successful SSA optimization Pass2UnaryNotSimplification +Alias sid_rnd::return#0 = sid_rnd::return#3 sid_rnd::return#1 Alias memset::return#0 = memset::str#2 memset::return#4 memset::return#1 Alias memset::str#3 = memset::str#4 Alias memset::num#2 = memset::num#3 @@ -3091,7 +3112,6 @@ Alias SQUARES#0 = SQUARES#47 SQUARES#45 SQUARES#42 SQUARES#37 SQUARES#34 SQUARES Alias print_line_cursor#0 = print_screen#0 print_char_cursor#0 print_line_cursor#34 print_char_cursor#41 print_screen#12 print_line_cursor#30 print_char_cursor#37 print_screen#11 print_line_cursor#27 print_char_cursor#35 print_screen#10 print_line_cursor#24 print_char_cursor#32 print_screen#9 print_line_cursor#18 print_char_cursor#25 print_screen#8 Alias print_char_cursor#1 = print_char_cursor#12 print_char_cursor#2 Alias print_line_cursor#1 = print_screen#2 print_screen#1 print_char_cursor#3 print_line_cursor#8 print_char_cursor#13 print_line_cursor#2 print_char_cursor#4 -Alias sid_rnd::return#0 = sid_rnd::return#3 sid_rnd::return#1 Alias malloc::return#3 = malloc::return#7 Alias heap_head#16 = heap_head#5 Alias malloc::return#4 = malloc::return#8 @@ -3398,22 +3418,22 @@ Successful SSA optimization Pass2IdenticalPhiElimination Identical Phi Values (byte*) print_line_cursor#12 (byte*) print_line_cursor#0 Identical Phi Values (byte*) make_plasma_charset::charset#10 (byte*) make_plasma_charset::charset#0 Successful SSA optimization Pass2IdenticalPhiElimination -Simple Condition (bool~) memset::$1 [2] if((word) memset::num#2<=(byte) 0) goto memset::@1 -Simple Condition (bool~) memset::$3 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4 -Simple Condition (bool~) bsearch16u::$5 [22] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@5 -Simple Condition (bool~) bsearch16u::$10 [30] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@7 -Simple Condition (bool~) bsearch16u::$0 [32] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@1 -Simple Condition (bool~) bsearch16u::$12 [34] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@8 -Simple Condition (bool~) init_squares::$2 [59] if((byte) init_squares::i#2<(byte) NUM_SQUARES#3) goto init_squares::@2 -Simple Condition (bool~) atan2_16::$0 [84] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 -Simple Condition (bool~) atan2_16::$5 [88] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 -Simple Condition (bool~) atan2_16::$17 [95] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 -Simple Condition (bool~) atan2_16::$11 [99] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 -Simple Condition (bool~) atan2_16::$18 [102] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 -Simple Condition (bool~) atan2_16::$19 [107] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 -Simple Condition (bool~) atan2_16::$20 [110] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 -Simple Condition (bool~) atan2_16::$21 [124] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@10 -Simple Condition (bool~) atan2_16::$14 [127] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 +Simple Condition (bool~) memset::$1 [7] if((word) memset::num#2<=(byte) 0) goto memset::@1 +Simple Condition (bool~) memset::$3 [14] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4 +Simple Condition (bool~) bsearch16u::$5 [27] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@5 +Simple Condition (bool~) bsearch16u::$10 [35] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@7 +Simple Condition (bool~) bsearch16u::$0 [37] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@1 +Simple Condition (bool~) bsearch16u::$12 [39] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@8 +Simple Condition (bool~) init_squares::$2 [64] if((byte) init_squares::i#2<(byte) NUM_SQUARES#3) goto init_squares::@2 +Simple Condition (bool~) atan2_16::$0 [89] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@1 +Simple Condition (bool~) atan2_16::$5 [93] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@4 +Simple Condition (bool~) atan2_16::$17 [100] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 +Simple Condition (bool~) atan2_16::$11 [104] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 +Simple Condition (bool~) atan2_16::$18 [107] if((byte) atan2_16::shift#2>=(byte) 2) goto atan2_16::@14 +Simple Condition (bool~) atan2_16::$19 [112] if((byte) 0==(byte) atan2_16::shift#2) goto atan2_16::@17 +Simple Condition (bool~) atan2_16::$20 [115] if((signed word) atan2_16::yi#3>=(signed byte) 0) goto atan2_16::@18 +Simple Condition (bool~) atan2_16::$21 [129] if((byte) atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@10 +Simple Condition (bool~) atan2_16::$14 [132] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 Simple Condition (bool~) doplasma::$3 [221] if((byte) doplasma::x#1!=rangelast(0,$27)) goto doplasma::@2 Simple Condition (bool~) doplasma::$4 [227] if((byte) doplasma::y#1!=rangelast(0,$19)) goto doplasma::@1 Simple Condition (bool~) init_angle_screen::$2 [240] if((byte) init_angle_screen::x#2<=(byte) $13) goto init_angle_screen::@3 @@ -3428,10 +3448,10 @@ Simple Condition (bool~) make_plasma_charset::$14 [337] if((byte~) make_plasma_c Simple Condition (bool~) make_plasma_charset::$5 [340] if((byte) make_plasma_charset::ii#2<(byte) 8) goto make_plasma_charset::@7 Simple Condition (bool~) make_plasma_charset::$9 [346] if((byte~) make_plasma_charset::$7<=(byte) make_plasma_charset::s#0) goto make_plasma_charset::@9 Successful SSA optimization Pass2ConditionalJumpSimplification -Negating conditional jump and destination [124] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12 +Negating conditional jump and destination [129] if((byte) atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12 Successful SSA optimization Pass2ConditionalJumpSequenceImprovement -Constant right-side identified [39] (byte~) bsearch16u::$15 ← (byte) 1 * (const byte) SIZEOF_WORD -Constant right-side identified [42] (byte~) bsearch16u::$16 ← (byte) 1 * (const byte) SIZEOF_WORD +Constant right-side identified [44] (byte~) bsearch16u::$15 ← (byte) 1 * (const byte) SIZEOF_WORD +Constant right-side identified [47] (byte~) bsearch16u::$16 ← (byte) 1 * (const byte) SIZEOF_WORD Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte*) heap_head#0 = HEAP_TOP Constant (const byte) bsearch16u::$15 = 1*SIZEOF_WORD @@ -3484,8 +3504,8 @@ Constant value identified (word)main::toD0182_gfx#0 in [200] (byte~) main::toD01 Successful SSA optimization Pass2ConstantValues if() condition always true - replacing block destination [176] if(true) goto main::@2 Successful SSA optimization Pass2ConstantIfs -Resolved ranged next value [122] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ -Resolved ranged comparison value [124] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12 to (const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1 +Resolved ranged next value [127] atan2_16::i#1 ← ++ atan2_16::i#2 to ++ +Resolved ranged comparison value [129] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12 to (const nomodify byte) CORDIC_ITERATIONS_16-(byte) 1+(number) 1 Resolved ranged next value [219] doplasma::x#1 ← ++ doplasma::x#2 to ++ Resolved ranged comparison value [221] if(doplasma::x#1!=rangelast(0,$27)) goto doplasma::@2 to (number) $28 Resolved ranged next value [225] doplasma::y#1 ← ++ doplasma::y#4 to ++ @@ -3498,7 +3518,7 @@ Rewriting conditional comparison [240] if((byte) init_angle_screen::x#2<=(byte) Rewriting conditional comparison [291] if((byte) init_dist_screen::x#2<=(byte) $13) goto init_dist_screen::@6 De-inlining pointer[w] to *(pointer+w) [349] *((const byte*) make_plasma_charset::charset#0 + (word~) make_plasma_charset::$11) ← (byte) make_plasma_charset::b#2 Successful SSA optimization Pass2DeInlineWordDerefIdx -Eliminating unused variable (void*) memset::return#2 and assignment [104] (void*) memset::return#2 ← (void*) memset::str#3 +Eliminating unused variable (void*) memset::return#2 and assignment [109] (void*) memset::return#2 ← (void*) memset::str#3 Eliminating unused variable (void*) memset::return#3 and assignment [125] (void*) memset::return#3 ← (void*) memset::str#3 Eliminating unused constant (const byte) NUM_SQUARES#0 Eliminating unused constant (const word*) SQUARES#0 @@ -3537,7 +3557,7 @@ Finalized unsigned number type (byte) $d Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $d Successful SSA optimization PassNFinalizeNumberTypeConversions -Constant right-side identified [34] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD +Constant right-side identified [39] (word) malloc::size#0 ← (const byte) NUM_SQUARES#3 * (const byte) SIZEOF_WORD Constant right-side identified [126] (word~) main::toD0181_$0 ← (const word) main::toD0181_$7 & (word) $3fff Constant right-side identified [129] (byte~) main::toD0181_$3 ← > (word)(const byte*) main::toD0181_gfx#0 Constant right-side identified [135] (word~) main::toD0182_$0 ← (const word) main::toD0182_$7 & (word) $3fff @@ -3575,29 +3595,29 @@ Successful SSA optimization Pass2ConstantRValueConsolidation Constant (const byte) main::toD0181_return#0 = main::toD0181_$2|main::toD0181_$5 Constant (const byte) main::toD0182_return#0 = main::toD0182_$2|main::toD0182_$5 Successful SSA optimization Pass2ConstantIdentification -Inlining Noop Cast [2] (byte*~) memset::$4 ← (byte*)(void*) memset::str#3 keeping memset::str#3 -Inlining Noop Cast [4] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 -Inlining Noop Cast [13] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 -Inlining Noop Cast [20] (signed word~) bsearch16u::$17 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0 -Inlining Noop Cast [21] (signed word~) bsearch16u::$18 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0) +Inlining Noop Cast [7] (byte*~) memset::$4 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [9] (byte*) memset::dst#0 ← (byte*)(void*) memset::str#3 keeping memset::str#3 +Inlining Noop Cast [18] (void*) malloc::return#0 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [25] (signed word~) bsearch16u::$17 ← (signed word)(word) bsearch16u::key#0 keeping bsearch16u::key#0 +Inlining Noop Cast [26] (signed word~) bsearch16u::$18 ← (signed word)*((word*) bsearch16u::pivot#0) keeping *(bsearch16u::pivot#0) Successful SSA optimization Pass2NopCastInlining -Inlining Noop Cast [35] (void*) malloc::return#2 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 +Inlining Noop Cast [40] (void*) malloc::return#2 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Inlining Noop Cast [110] (void*) malloc::return#3 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Inlining Noop Cast [114] (void*) malloc::return#4 ← (void*)(byte*) malloc::mem#0 keeping malloc::mem#0 Successful SSA optimization Pass2NopCastInlining -Inlining Noop Cast [37] (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 keeping SQUARES#1 +Inlining Noop Cast [42] (word*) SQUARES#1 ← (word*)(void*~) init_squares::$1 keeping SQUARES#1 Inlining Noop Cast [112] (byte*) SCREEN_DIST#0 ← (byte*)(void*~) $0 keeping SCREEN_DIST#0 Inlining Noop Cast [116] (byte*) SCREEN_ANGLE#0 ← (byte*)(void*~) $1 keeping SCREEN_ANGLE#0 Inlining Noop Cast [155] (signed word) init_angle_screen::xw#0 ← (signed word)(word~) init_angle_screen::$13 keeping init_angle_screen::xw#0 Inlining Noop Cast [158] (signed word) init_angle_screen::yw#0 ← (signed word)(word~) init_angle_screen::$14 keeping init_angle_screen::yw#0 Successful SSA optimization Pass2NopCastInlining -Rewriting multiplication to use shift [18] (byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [43] (byte~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2 -Rewriting multiplication to use shift [49] (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD -Rewriting division to use shift [58] (word~) sqrt::$1 ← (word~) sqrt::$2 / (const byte) SIZEOF_WORD -Rewriting division to use shift [70] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 -Rewriting multiplication to use shift [84] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD -Rewriting multiplication to use shift [88] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [23] (byte~) bsearch16u::$14 ← (byte~) bsearch16u::$6 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [48] (byte~) init_squares::$3 ← (byte) init_squares::i#2 * (byte) 2 +Rewriting multiplication to use shift [54] (byte~) sqr::$0 ← (byte) sqr::val#2 * (const byte) SIZEOF_WORD +Rewriting division to use shift [63] (word~) sqrt::$1 ← (word~) sqrt::$2 / (const byte) SIZEOF_WORD +Rewriting division to use shift [75] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 / (byte) 2 +Rewriting multiplication to use shift [89] (byte~) atan2_16::$22 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD +Rewriting multiplication to use shift [93] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 * (const byte) SIZEOF_WORD Rewriting multiplication to use shift [152] (byte~) init_angle_screen::$3 ← (byte) init_angle_screen::x#2 * (byte) 2 Rewriting multiplication to use shift [156] (byte~) init_angle_screen::$5 ← (byte) init_angle_screen::y#5 * (byte) 2 Rewriting multiplication to use shift [183] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 * (byte) 2 @@ -3690,7 +3710,7 @@ Constant inlined heap_head#0 = (const byte*) HEAP_TOP Successful SSA optimization Pass2ConstantInlining Identical Phi Values (word) memset::num#2 (word) $3e8 Successful SSA optimization Pass2IdenticalPhiElimination -if() condition always false - eliminating [1] if((word) $3e8<=(byte) 0) goto memset::@1 +if() condition always false - eliminating [6] if((word) $3e8<=(byte) 0) goto memset::@1 Successful SSA optimization Pass2ConstantIfs Added new block during phi lifting bsearch16u::@11(between bsearch16u::@7 and bsearch16u::@8) Added new block during phi lifting atan2_16::@22(between atan2_16::@19 and atan2_16::@10) @@ -4101,7 +4121,7 @@ make_plasma_charset::@8: scope:[make_plasma_charset] from make_plasma_charset:: (byte()) sid_rnd() sid_rnd: scope:[sid_rnd] from make_plasma_charset::@6 - [85] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) + [85] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) to:sid_rnd::@return sid_rnd::@return: scope:[sid_rnd] from sid_rnd [86] return @@ -4127,8 +4147,8 @@ print_cls::@return: scope:[print_cls] from print_cls (void()) sid_rnd_init() sid_rnd_init: scope:[sid_rnd_init] from make_plasma_charset - [93] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff - [94] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE + [93] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff + [94] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE to:sid_rnd_init::@return sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init [95] return @@ -4486,6 +4506,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) NUM_SQUARES (byte*) SCREEN_ANGLE (void*) SCREEN_ANGLE#0 0.05405405405405406 @@ -5099,25 +5142,27 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const SIZEOF_WORD = 2 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b // Plasma charset .label CHARSET = $2000 // Plasma screen 1 .label SCREEN1 = $2800 // Plasma screen 2 .label SCREEN2 = $2c00 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b // Top of the heap used by malloc() .label HEAP_TOP = $a000 .label print_line_cursor = $400 @@ -5724,8 +5769,8 @@ make_plasma_charset: { sid_rnd: { .label return = $5c .label return_1 = $59 - // [85] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuz1=_deref_pbuc1 - lda SID_VOICE3_OSC + // [85] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuz1=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC sta.z return jmp __breturn // sid_rnd::@return @@ -5776,14 +5821,14 @@ print_cls: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [93] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [93] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // [94] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // [94] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL jmp __breturn // sid_rnd_init::@return __breturn: @@ -6999,8 +7044,8 @@ Removing always clobbered register reg byte y as potential for zp[1]:21 [ make_p Statement [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const to_nomodify byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2) [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] { } ) always clobbers reg byte a Removing always clobbered register reg byte a as potential for zp[1]:22 [ make_plasma_charset::ii#2 make_plasma_charset::ii#1 ] Statement [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:7::make_plasma_charset:14::print_char:66 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] { } ) always clobbers reg byte a reg byte y -Statement [93] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a -Statement [94] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a +Statement [93] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a +Statement [94] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] { } ) always clobbers reg byte a Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] { } ) always clobbers reg byte a Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a @@ -7138,8 +7183,8 @@ Statement [73] (byte*~) make_plasma_charset::$16 ← (const nomodify byte*) CHAR Statement [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] { } ) always clobbers reg byte a reg byte y Statement [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const to_nomodify byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2) [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] { } ) always clobbers reg byte a Statement [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:7::make_plasma_charset:14::print_char:66 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] { } ) always clobbers reg byte a reg byte y -Statement [93] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a -Statement [94] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a +Statement [93] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a +Statement [94] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] { } ) always clobbers reg byte a Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] { } ) always clobbers reg byte a Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a @@ -7262,8 +7307,8 @@ Statement [73] (byte*~) make_plasma_charset::$16 ← (const nomodify byte*) CHAR Statement [74] *((byte*~) make_plasma_charset::$16) ← (byte) make_plasma_charset::b#2 [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 ] { } ) always clobbers reg byte a reg byte y Statement [82] (byte) make_plasma_charset::b#1 ← (byte) make_plasma_charset::b#2 | *((const to_nomodify byte*) make_plasma_charset::bittab + (byte) make_plasma_charset::ii#2) [ make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] ( main:7::make_plasma_charset:14 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 make_plasma_charset::s#0 make_plasma_charset::i#2 make_plasma_charset::ii#2 make_plasma_charset::b#1 ] { } ) always clobbers reg byte a Statement [87] *((byte*) print_char_cursor#18) ← (const byte) print_char::ch#0 [ print_char_cursor#18 ] ( main:7::make_plasma_charset:14::print_char:66 [ SCREEN_DIST#0 SCREEN_ANGLE#0 make_plasma_charset::c#2 print_char_cursor#18 ] { } ) always clobbers reg byte a reg byte y -Statement [93] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a -Statement [94] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a +Statement [93] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a +Statement [94] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE [ ] ( main:7::make_plasma_charset:14::sid_rnd_init:53 [ SCREEN_DIST#0 SCREEN_ANGLE#0 ] { } ) always clobbers reg byte a Statement [96] (byte*) init_angle_screen::screen_topline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen#0 init_angle_screen::screen_topline#0 ] { } ) always clobbers reg byte a Statement [97] (byte*) init_angle_screen::screen_bottomline#0 ← (byte*) init_angle_screen::screen#0 + (word)(number) $28*(number) $c [ init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::screen_topline#0 init_angle_screen::screen_bottomline#0 ] { } ) always clobbers reg byte a Statement [101] (byte*) init_angle_screen::screen_topline#1 ← (byte*) init_angle_screen::screen_topline#6 - (byte) $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:12 [ SCREEN_DIST#0 SCREEN_ANGLE#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a @@ -7474,10 +7519,11 @@ Uplift Scope [init_squares] 25,716.86: zp[1]:58 [ init_squares::i#2 init_squares Uplift Scope [] 12,104.4: zp[2]:63 [ heap_head#12 heap_head#1 ] 6,015.14: zp[2]:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] 381.02: zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] 372.42: zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] 16.15: zp[2]:152 [ SQUARES#1 ] 0.05: zp[2]:69 [ SCREEN_ANGLE#0 ] 0.05: zp[2]:67 [ SCREEN_DIST#0 ] Uplift Scope [malloc] 10,001: zp[2]:65 [ malloc::size#3 ] 3,333.67: zp[2]:156 [ malloc::mem#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] +Uplift Scope [sid_rnd_init] Uplift Scope [RADIX] Uplift Scope [print_char] Uplift Scope [print_cls] -Uplift Scope [sid_rnd_init] Uplift Scope [main] Uplifting [bsearch16u] best 1510221 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp[2]:54 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$14 ] zp[2]:147 [ bsearch16u::result#0 ] zp[2]:145 [ bsearch16u::pivot#0 ] zp[2]:134 [ bsearch16u::return#3 ] zp[2]:132 [ bsearch16u::key#0 ] @@ -7498,10 +7544,11 @@ Uplifting [init_squares] best 1346862 combination reg byte x [ init_squares::i#2 Uplifting [] best 1346862 combination zp[2]:63 [ heap_head#12 heap_head#1 ] zp[2]:19 [ print_char_cursor#18 print_char_cursor#30 print_char_cursor#1 ] zp[1]:3 [ sin_offset_y#10 sin_offset_y#14 sin_offset_y#12 ] zp[1]:2 [ sin_offset_x#10 sin_offset_x#14 sin_offset_x#12 ] zp[2]:152 [ SQUARES#1 ] zp[2]:69 [ SCREEN_ANGLE#0 ] zp[2]:67 [ SCREEN_DIST#0 ] Uplifting [malloc] best 1346862 combination zp[2]:65 [ malloc::size#3 ] zp[2]:156 [ malloc::mem#0 ] Uplifting [MOS6526_CIA] best 1346862 combination +Uplifting [MOS6581_SID] best 1346862 combination +Uplifting [sid_rnd_init] best 1346862 combination Uplifting [RADIX] best 1346862 combination Uplifting [print_char] best 1346862 combination Uplifting [print_cls] best 1346862 combination -Uplifting [sid_rnd_init] best 1346862 combination Uplifting [main] best 1346862 combination Attempting to uplift remaining variables inzp[1]:91 [ make_plasma_charset::$7 ] Uplifting [make_plasma_charset] best 1346862 combination zp[1]:91 [ make_plasma_charset::$7 ] @@ -7617,25 +7664,27 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const SIZEOF_WORD = 2 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b // Plasma charset .label CHARSET = $2000 // Plasma screen 1 .label SCREEN1 = $2800 // Plasma screen 2 .label SCREEN2 = $2c00 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b // Top of the heap used by malloc() .label HEAP_TOP = $a000 .label print_line_cursor = $400 @@ -8212,8 +8261,8 @@ make_plasma_charset: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // [85] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // [85] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuaa=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC jmp __breturn // sid_rnd::@return __breturn: @@ -8262,14 +8311,14 @@ print_cls: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // [93] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // [93] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // [94] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // [94] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL jmp __breturn // sid_rnd_init::@return __breturn: @@ -9584,9 +9633,9 @@ Removing instruction jmp __b2 Removing instruction jmp __b1 Removing instruction jmp __b1 Succesful ASM optimization Pass5NextJumpElimination -Fixing long branch [581] beq __b12 to bne -Fixing long branch [475] bpl __b1 to bmi -Fixing long branch [487] bpl __b4 to bmi +Fixing long branch [583] beq __b12 to bne +Fixing long branch [477] bpl __b1 to bmi +Fixing long branch [489] bpl __b4 to bmi FINAL SYMBOL TABLE (label) @1 @@ -9618,8 +9667,34 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -9630,10 +9705,8 @@ FINAL SYMBOL TABLE (void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp[2]:18 0.05405405405405406 (byte*) SCREEN_DIST (void*) SCREEN_DIST#0 SCREEN_DIST zp[2]:16 0.05128205128205128 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*) 54272 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*) 54290 -(const nomodify word*) SID_VOICE3_FREQ = (word*) 54286 -(const nomodify byte*) SID_VOICE3_OSC = (byte*) 54299 (const to_nomodify byte*) SINTABLE[(number) $200] = kickasm {{ .for(var i=0;i<$200;i++) .byte round(127.5+127.5*sin(2*PI*i/256)) }} @@ -10095,25 +10168,27 @@ Score: 1210189 :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // SID Channel Control Register Noise Waveform + .const SID_CONTROL_NOISE = $80 .label D018 = $d018 // Color Ram .label COLS = $d800 + // The SID MOD 6581/8580 + .label SID = $d400 // The colors of the C64 .const BLACK = 0 .const SIZEOF_WORD = 2 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f - // SID registers for random number generation - .label SID_VOICE3_FREQ = $d40e - .label SID_VOICE3_CONTROL = $d412 - .const SID_CONTROL_NOISE = $80 - .label SID_VOICE3_OSC = $d41b // Plasma charset .label CHARSET = $2000 // Plasma screen 1 .label SCREEN1 = $2800 // Plasma screen 2 .label SCREEN2 = $2c00 + .const OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = $e + .const OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = $12 + .const OFFSET_STRUCT_MOS6581_SID_CH3_OSC = $1b // Top of the heap used by malloc() .label HEAP_TOP = $a000 .label print_line_cursor = $400 @@ -10642,9 +10717,9 @@ make_plasma_charset: { // Get a random number from the SID voice 3, // Must be initialized with sid_rnd_init() sid_rnd: { - // return *SID_VOICE3_OSC; - // [85] (byte) sid_rnd::return#0 ← *((const nomodify byte*) SID_VOICE3_OSC) -- vbuaa=_deref_pbuc1 - lda SID_VOICE3_OSC + // return SID->CH3_OSC; + // [85] (byte) sid_rnd::return#0 ← *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC) -- vbuaa=_deref_pbuc1 + lda SID+OFFSET_STRUCT_MOS6581_SID_CH3_OSC // sid_rnd::@return // } // [86] return @@ -10692,16 +10767,16 @@ print_cls: { // sid_rnd_init // Initialize SID voice 3 for random number generation sid_rnd_init: { - // *SID_VOICE3_FREQ = $ffff - // [93] *((const nomodify word*) SID_VOICE3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 + // SID->CH3_FREQ = 0xffff + // [93] *((word*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ) ← (word) $ffff -- _deref_pwuc1=vwuc2 lda #<$ffff - sta SID_VOICE3_FREQ + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ lda #>$ffff - sta SID_VOICE3_FREQ+1 - // *SID_VOICE3_CONTROL = SID_CONTROL_NOISE - // [94] *((const nomodify byte*) SID_VOICE3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_FREQ+1 + // SID->CH3_CONTROL = SID_CONTROL_NOISE + // [94] *((byte*)(const nomodify struct MOS6581_SID*) SID+(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL) ← (const nomodify byte) SID_CONTROL_NOISE -- _deref_pbuc1=vbuc2 lda #SID_CONTROL_NOISE - sta SID_VOICE3_CONTROL + sta SID+OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL // sid_rnd_init::@return // } // [95] return diff --git a/src/test/ref/plasma-center.sym b/src/test/ref/plasma-center.sym index 6826e2653..e3d544b68 100644 --- a/src/test/ref/plasma-center.sym +++ b/src/test/ref/plasma-center.sym @@ -27,8 +27,34 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_CONTROL = (byte) $12 +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_FREQ = (byte) $e +(const byte) OFFSET_STRUCT_MOS6581_SID_CH3_OSC = (byte) $1b (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -39,10 +65,8 @@ (void*) SCREEN_ANGLE#0 SCREEN_ANGLE zp[2]:18 0.05405405405405406 (byte*) SCREEN_DIST (void*) SCREEN_DIST#0 SCREEN_DIST zp[2]:16 0.05128205128205128 +(const nomodify struct MOS6581_SID*) SID = (struct MOS6581_SID*) 54272 (const nomodify byte) SID_CONTROL_NOISE = (byte) $80 -(const nomodify byte*) SID_VOICE3_CONTROL = (byte*) 54290 -(const nomodify word*) SID_VOICE3_FREQ = (word*) 54286 -(const nomodify byte*) SID_VOICE3_OSC = (byte*) 54299 (const to_nomodify byte*) SINTABLE[(number) $200] = kickasm {{ .for(var i=0;i<$200;i++) .byte round(127.5+127.5*sin(2*PI*i/256)) }} diff --git a/src/test/ref/printf-1.log b/src/test/ref/printf-1.log index 4f45a9079..49f2c35e1 100644 --- a/src/test/ref/printf-1.log +++ b/src/test/ref/printf-1.log @@ -6,127 +6,6 @@ Added struct type cast to parameter value list (void~) main::$1 ← call printf_ Added struct type cast to parameter value list (void~) main::$3 ← call printf_string (byte*) "rules" (struct printf_format_string){ (number) $a, (number) 0 } Added struct type cast to parameter value list (void~) main::$5 ← call printf_string (byte*) "cml" (struct printf_format_string){ (number) $a, (number) 1 } Added struct type cast to parameter value list (void~) main::$7 ← call printf_string (byte*) "rules" (struct printf_format_string){ (number) $a, (number) 1 } -Created struct value member variable (byte) printf_slong::format_min_length -Created struct value member variable (byte) printf_slong::format_justify_left -Created struct value member variable (byte) printf_slong::format_sign_always -Created struct value member variable (byte) printf_slong::format_zero_padding -Created struct value member variable (byte) printf_slong::format_upper_case -Created struct value member variable (byte) printf_slong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_slong::format -Created struct value member variable (byte) printf_ulong::format_min_length -Created struct value member variable (byte) printf_ulong::format_justify_left -Created struct value member variable (byte) printf_ulong::format_sign_always -Created struct value member variable (byte) printf_ulong::format_zero_padding -Created struct value member variable (byte) printf_ulong::format_upper_case -Created struct value member variable (byte) printf_ulong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_ulong::format -Created struct value member variable (byte) printf_sint::format_min_length -Created struct value member variable (byte) printf_sint::format_justify_left -Created struct value member variable (byte) printf_sint::format_sign_always -Created struct value member variable (byte) printf_sint::format_zero_padding -Created struct value member variable (byte) printf_sint::format_upper_case -Created struct value member variable (byte) printf_sint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_sint::format -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Created struct value member variable (byte) printf_schar::format_min_length -Created struct value member variable (byte) printf_schar::format_justify_left -Created struct value member variable (byte) printf_schar::format_sign_always -Created struct value member variable (byte) printf_schar::format_zero_padding -Created struct value member variable (byte) printf_schar::format_upper_case -Created struct value member variable (byte) printf_schar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_schar::format -Created struct value member variable (byte) printf_uchar::format_min_length -Created struct value member variable (byte) printf_uchar::format_justify_left -Created struct value member variable (byte) printf_uchar::format_sign_always -Created struct value member variable (byte) printf_uchar::format_zero_padding -Created struct value member variable (byte) printf_uchar::format_upper_case -Created struct value member variable (byte) printf_uchar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uchar::format -Created struct value member variable (byte) printf_number_buffer::buffer_sign -Created struct value member variable (byte*) printf_number_buffer::buffer_digits -Converted struct value to member variables (struct printf_buffer_number) printf_number_buffer::buffer -Created struct value member variable (byte) printf_number_buffer::format_min_length -Created struct value member variable (byte) printf_number_buffer::format_justify_left -Created struct value member variable (byte) printf_number_buffer::format_sign_always -Created struct value member variable (byte) printf_number_buffer::format_zero_padding -Created struct value member variable (byte) printf_number_buffer::format_upper_case -Created struct value member variable (byte) printf_number_buffer::format_radix -Converted struct value to member variables (struct printf_format_number) printf_number_buffer::format -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_schar((signed byte) printf_schar::value , (byte) printf_schar::format_min_length , (byte) printf_schar::format_justify_left , (byte) printf_schar::format_sign_always , (byte) printf_schar::format_zero_padding , (byte) printf_schar::format_upper_case , (byte) printf_schar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix -Converted call struct value parameter to member unwinding (void~) main::$1 ← call printf_string (byte*) "cml" (number) $a (number) 0 -Converted call struct value parameter to member unwinding (void~) main::$3 ← call printf_string (byte*) "rules" (number) $a (number) 0 -Converted call struct value parameter to member unwinding (void~) main::$5 ← call printf_string (byte*) "cml" (number) $a (number) 1 -Converted call struct value parameter to member unwinding (void~) main::$7 ← call printf_string (byte*) "rules" (number) $a (number) 1 -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_slong::format.sign_always with member unwinding reference (byte) printf_slong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_slong::format.radix with member unwinding reference (byte) printf_slong::format_radix -Replacing struct member reference (struct printf_format_number) printf_ulong::format.sign_always with member unwinding reference (byte) printf_ulong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_ulong::format.radix with member unwinding reference (byte) printf_ulong::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_sint::format.sign_always with member unwinding reference (byte) printf_sint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_sint::format.radix with member unwinding reference (byte) printf_sint::format_radix -Replacing struct member reference (struct printf_format_number) printf_uint::format.sign_always with member unwinding reference (byte) printf_uint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uint::format.radix with member unwinding reference (byte) printf_uint::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_schar::format.sign_always with member unwinding reference (byte) printf_schar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_schar::format.radix with member unwinding reference (byte) printf_schar::format_radix -Replacing struct member reference (struct printf_format_number) printf_uchar::format.sign_always with member unwinding reference (byte) printf_uchar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uchar::format.radix with member unwinding reference (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.upper_case with member unwinding reference (byte) printf_number_buffer::format_upper_case -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left Eliminating unused variable with no statement (struct printf_buffer_number) printf_buffer CONTROL FLOW GRAPH SSA diff --git a/src/test/ref/printf-10.log b/src/test/ref/printf-10.log index 30c76021c..efcc097ed 100644 --- a/src/test/ref/printf-10.log +++ b/src/test/ref/printf-10.log @@ -1,9 +1,4 @@ Added struct type cast to parameter value list call printf_string (byte*) main::name (struct printf_format_string){ (byte) 0, (byte) 0 } -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted call struct value parameter to member unwinding call printf_string (byte*) main::name (byte) 0 (byte) 0 Eliminating unused variable with no statement (void~) main::$0 CONTROL FLOW GRAPH SSA diff --git a/src/test/ref/printf-11.log b/src/test/ref/printf-11.log index 05f9de836..faad5053f 100644 --- a/src/test/ref/printf-11.log +++ b/src/test/ref/printf-11.log @@ -1,13 +1,4 @@ Added struct type cast to parameter value list call printf_uint (word) main::pct (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) HEXADECIMAL } -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted call struct value parameter to member unwinding call printf_uint (word) main::pct (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL Eliminating unused variable with no statement (void~) main::$0 CONTROL FLOW GRAPH SSA diff --git a/src/test/ref/printf-12.log b/src/test/ref/printf-12.log index 7863d9081..9e1b9d7bd 100644 --- a/src/test/ref/printf-12.log +++ b/src/test/ref/printf-12.log @@ -10,130 +10,6 @@ Added struct type cast to parameter value list call printf_sint (signed word) ma Added struct type cast to parameter value list call printf_uint (word) main::ui (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } Added struct type cast to parameter value list call printf_slong (signed dword) main::sl (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } Added struct type cast to parameter value list call printf_ulong (dword) main::ul (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } -Created struct value member variable (byte) printf_slong::format_min_length -Created struct value member variable (byte) printf_slong::format_justify_left -Created struct value member variable (byte) printf_slong::format_sign_always -Created struct value member variable (byte) printf_slong::format_zero_padding -Created struct value member variable (byte) printf_slong::format_upper_case -Created struct value member variable (byte) printf_slong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_slong::format -Created struct value member variable (byte) printf_ulong::format_min_length -Created struct value member variable (byte) printf_ulong::format_justify_left -Created struct value member variable (byte) printf_ulong::format_sign_always -Created struct value member variable (byte) printf_ulong::format_zero_padding -Created struct value member variable (byte) printf_ulong::format_upper_case -Created struct value member variable (byte) printf_ulong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_ulong::format -Created struct value member variable (byte) printf_sint::format_min_length -Created struct value member variable (byte) printf_sint::format_justify_left -Created struct value member variable (byte) printf_sint::format_sign_always -Created struct value member variable (byte) printf_sint::format_zero_padding -Created struct value member variable (byte) printf_sint::format_upper_case -Created struct value member variable (byte) printf_sint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_sint::format -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Created struct value member variable (byte) printf_schar::format_min_length -Created struct value member variable (byte) printf_schar::format_justify_left -Created struct value member variable (byte) printf_schar::format_sign_always -Created struct value member variable (byte) printf_schar::format_zero_padding -Created struct value member variable (byte) printf_schar::format_upper_case -Created struct value member variable (byte) printf_schar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_schar::format -Created struct value member variable (byte) printf_uchar::format_min_length -Created struct value member variable (byte) printf_uchar::format_justify_left -Created struct value member variable (byte) printf_uchar::format_sign_always -Created struct value member variable (byte) printf_uchar::format_zero_padding -Created struct value member variable (byte) printf_uchar::format_upper_case -Created struct value member variable (byte) printf_uchar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uchar::format -Created struct value member variable (byte) printf_number_buffer::buffer_sign -Created struct value member variable (byte*) printf_number_buffer::buffer_digits -Converted struct value to member variables (struct printf_buffer_number) printf_number_buffer::buffer -Created struct value member variable (byte) printf_number_buffer::format_min_length -Created struct value member variable (byte) printf_number_buffer::format_justify_left -Created struct value member variable (byte) printf_number_buffer::format_sign_always -Created struct value member variable (byte) printf_number_buffer::format_zero_padding -Created struct value member variable (byte) printf_number_buffer::format_upper_case -Created struct value member variable (byte) printf_number_buffer::format_radix -Converted struct value to member variables (struct printf_format_number) printf_number_buffer::format -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_schar((signed byte) printf_schar::value , (byte) printf_schar::format_min_length , (byte) printf_schar::format_justify_left , (byte) printf_schar::format_sign_always , (byte) printf_schar::format_zero_padding , (byte) printf_schar::format_upper_case , (byte) printf_schar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix -Converted call struct value parameter to member unwinding call printf_uint (word)&(volatile byte) main::c (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL -Converted call struct value parameter to member unwinding call printf_schar (signed byte) main::sc (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_uchar (byte) main::uc (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (signed word) main::si (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_uint (word) main::ui (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_slong (signed dword) main::sl (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_ulong (dword) main::ul (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_slong::format.sign_always with member unwinding reference (byte) printf_slong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_slong::format.radix with member unwinding reference (byte) printf_slong::format_radix -Replacing struct member reference (struct printf_format_number) printf_ulong::format.sign_always with member unwinding reference (byte) printf_ulong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_ulong::format.radix with member unwinding reference (byte) printf_ulong::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_sint::format.sign_always with member unwinding reference (byte) printf_sint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_sint::format.radix with member unwinding reference (byte) printf_sint::format_radix -Replacing struct member reference (struct printf_format_number) printf_uint::format.sign_always with member unwinding reference (byte) printf_uint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uint::format.radix with member unwinding reference (byte) printf_uint::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_schar::format.sign_always with member unwinding reference (byte) printf_schar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_schar::format.radix with member unwinding reference (byte) printf_schar::format_radix -Replacing struct member reference (struct printf_format_number) printf_uchar::format.sign_always with member unwinding reference (byte) printf_uchar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uchar::format.radix with member unwinding reference (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.upper_case with member unwinding reference (byte) printf_number_buffer::format_upper_case -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left Eliminating unused variable with no statement (void~) main::$1 Eliminating unused variable with no statement (void~) main::$2 Eliminating unused variable with no statement (void~) main::$3 diff --git a/src/test/ref/printf-13.log b/src/test/ref/printf-13.log index 34b907062..0c1b280c4 100644 --- a/src/test/ref/printf-13.log +++ b/src/test/ref/printf-13.log @@ -38,159 +38,6 @@ Added struct type cast to parameter value list call printf_uint (number) 1 (stru Added struct type cast to parameter value list call printf_uint (number) $b (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (const byte) HEXADECIMAL } Added struct type cast to parameter value list call printf_uint (number) $6f (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (const byte) HEXADECIMAL } Added struct type cast to parameter value list call printf_uint (number) $457 (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 1, (const byte) HEXADECIMAL } -Created struct value member variable (byte) printf_slong::format_min_length -Created struct value member variable (byte) printf_slong::format_justify_left -Created struct value member variable (byte) printf_slong::format_sign_always -Created struct value member variable (byte) printf_slong::format_zero_padding -Created struct value member variable (byte) printf_slong::format_upper_case -Created struct value member variable (byte) printf_slong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_slong::format -Created struct value member variable (byte) printf_ulong::format_min_length -Created struct value member variable (byte) printf_ulong::format_justify_left -Created struct value member variable (byte) printf_ulong::format_sign_always -Created struct value member variable (byte) printf_ulong::format_zero_padding -Created struct value member variable (byte) printf_ulong::format_upper_case -Created struct value member variable (byte) printf_ulong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_ulong::format -Created struct value member variable (byte) printf_sint::format_min_length -Created struct value member variable (byte) printf_sint::format_justify_left -Created struct value member variable (byte) printf_sint::format_sign_always -Created struct value member variable (byte) printf_sint::format_zero_padding -Created struct value member variable (byte) printf_sint::format_upper_case -Created struct value member variable (byte) printf_sint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_sint::format -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Created struct value member variable (byte) printf_schar::format_min_length -Created struct value member variable (byte) printf_schar::format_justify_left -Created struct value member variable (byte) printf_schar::format_sign_always -Created struct value member variable (byte) printf_schar::format_zero_padding -Created struct value member variable (byte) printf_schar::format_upper_case -Created struct value member variable (byte) printf_schar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_schar::format -Created struct value member variable (byte) printf_uchar::format_min_length -Created struct value member variable (byte) printf_uchar::format_justify_left -Created struct value member variable (byte) printf_uchar::format_sign_always -Created struct value member variable (byte) printf_uchar::format_zero_padding -Created struct value member variable (byte) printf_uchar::format_upper_case -Created struct value member variable (byte) printf_uchar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uchar::format -Created struct value member variable (byte) printf_number_buffer::buffer_sign -Created struct value member variable (byte*) printf_number_buffer::buffer_digits -Converted struct value to member variables (struct printf_buffer_number) printf_number_buffer::buffer -Created struct value member variable (byte) printf_number_buffer::format_min_length -Created struct value member variable (byte) printf_number_buffer::format_justify_left -Created struct value member variable (byte) printf_number_buffer::format_sign_always -Created struct value member variable (byte) printf_number_buffer::format_zero_padding -Created struct value member variable (byte) printf_number_buffer::format_upper_case -Created struct value member variable (byte) printf_number_buffer::format_radix -Converted struct value to member variables (struct printf_format_number) printf_number_buffer::format -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_schar((signed byte) printf_schar::value , (byte) printf_schar::format_min_length , (byte) printf_schar::format_justify_left , (byte) printf_schar::format_sign_always , (byte) printf_schar::format_zero_padding , (byte) printf_schar::format_upper_case , (byte) printf_schar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix -Converted call struct value parameter to member unwinding call printf_string (byte*) "x" (byte) 3 (byte) 0 -Converted call struct value parameter to member unwinding call printf_string (byte*) "xx" (byte) 3 (byte) 0 -Converted call struct value parameter to member unwinding call printf_string (byte*) "xxx" (byte) 3 (byte) 0 -Converted call struct value parameter to member unwinding call printf_string (byte*) "xxxx" (byte) 3 (byte) 0 -Converted call struct value parameter to member unwinding call printf_string (byte*) "x" (byte) 3 (byte) 1 -Converted call struct value parameter to member unwinding call printf_string (byte*) "xx" (byte) 3 (byte) 1 -Converted call struct value parameter to member unwinding call printf_string (byte*) "xxx" (byte) 3 (byte) 1 -Converted call struct value parameter to member unwinding call printf_string (byte*) "xxxx" (byte) 3 (byte) 1 -Converted call struct value parameter to member unwinding call printf_sint (number) 1 (byte) 3 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) $b (byte) 3 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) $6f (byte) 3 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) $457 (byte) 3 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) -2 (byte) 3 (byte) 1 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) -$16 (byte) 3 (byte) 1 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) -$de (byte) 3 (byte) 1 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) -$8ae (byte) 3 (byte) 1 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 3 (byte) 3 (byte) 0 (byte) 1 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) -$2c (byte) 3 (byte) 0 (byte) 1 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) $22b (byte) 3 (byte) 0 (byte) 1 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) -$1a0a (byte) 3 (byte) 0 (byte) 1 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 1 (byte) 3 (byte) 0 (byte) 0 (byte) 1 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) $b (byte) 3 (byte) 0 (byte) 0 (byte) 1 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) $6f (byte) 3 (byte) 0 (byte) 0 (byte) 1 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) $457 (byte) 3 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_uint (number) 1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) OCTAL -Converted call struct value parameter to member unwinding call printf_uint (number) $b (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) OCTAL -Converted call struct value parameter to member unwinding call printf_uint (number) $6f (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) OCTAL -Converted call struct value parameter to member unwinding call printf_uint (number) $457 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) OCTAL -Converted call struct value parameter to member unwinding call printf_uint (number) 1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL -Converted call struct value parameter to member unwinding call printf_uint (number) $b (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL -Converted call struct value parameter to member unwinding call printf_uint (number) $6f (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL -Converted call struct value parameter to member unwinding call printf_uint (number) $457 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) HEXADECIMAL -Converted call struct value parameter to member unwinding call printf_uint (number) 1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 1 (const byte) HEXADECIMAL -Converted call struct value parameter to member unwinding call printf_uint (number) $b (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 1 (const byte) HEXADECIMAL -Converted call struct value parameter to member unwinding call printf_uint (number) $6f (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 1 (const byte) HEXADECIMAL -Converted call struct value parameter to member unwinding call printf_uint (number) $457 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 1 (const byte) HEXADECIMAL -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_slong::format.sign_always with member unwinding reference (byte) printf_slong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_slong::format.radix with member unwinding reference (byte) printf_slong::format_radix -Replacing struct member reference (struct printf_format_number) printf_ulong::format.sign_always with member unwinding reference (byte) printf_ulong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_ulong::format.radix with member unwinding reference (byte) printf_ulong::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_sint::format.sign_always with member unwinding reference (byte) printf_sint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_sint::format.radix with member unwinding reference (byte) printf_sint::format_radix -Replacing struct member reference (struct printf_format_number) printf_uint::format.sign_always with member unwinding reference (byte) printf_uint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uint::format.radix with member unwinding reference (byte) printf_uint::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_schar::format.sign_always with member unwinding reference (byte) printf_schar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_schar::format.radix with member unwinding reference (byte) printf_schar::format_radix -Replacing struct member reference (struct printf_format_number) printf_uchar::format.sign_always with member unwinding reference (byte) printf_uchar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uchar::format.radix with member unwinding reference (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.upper_case with member unwinding reference (byte) printf_number_buffer::format_upper_case -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left Eliminating unused variable with no statement (void~) main::$1 Eliminating unused variable with no statement (void~) main::$2 Eliminating unused variable with no statement (void~) main::$3 diff --git a/src/test/ref/printf-14.log b/src/test/ref/printf-14.log index 76a33e513..3330883a3 100644 --- a/src/test/ref/printf-14.log +++ b/src/test/ref/printf-14.log @@ -3,124 +3,6 @@ Fixing struct type size struct printf_buffer_number to 12 Fixing struct type SIZE_OF struct printf_buffer_number to 12 Fixing struct type SIZE_OF struct printf_buffer_number to 12 Added struct type cast to parameter value list call printf_uchar (byte) main::c (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } -Created struct value member variable (byte) printf_slong::format_min_length -Created struct value member variable (byte) printf_slong::format_justify_left -Created struct value member variable (byte) printf_slong::format_sign_always -Created struct value member variable (byte) printf_slong::format_zero_padding -Created struct value member variable (byte) printf_slong::format_upper_case -Created struct value member variable (byte) printf_slong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_slong::format -Created struct value member variable (byte) printf_ulong::format_min_length -Created struct value member variable (byte) printf_ulong::format_justify_left -Created struct value member variable (byte) printf_ulong::format_sign_always -Created struct value member variable (byte) printf_ulong::format_zero_padding -Created struct value member variable (byte) printf_ulong::format_upper_case -Created struct value member variable (byte) printf_ulong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_ulong::format -Created struct value member variable (byte) printf_sint::format_min_length -Created struct value member variable (byte) printf_sint::format_justify_left -Created struct value member variable (byte) printf_sint::format_sign_always -Created struct value member variable (byte) printf_sint::format_zero_padding -Created struct value member variable (byte) printf_sint::format_upper_case -Created struct value member variable (byte) printf_sint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_sint::format -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Created struct value member variable (byte) printf_schar::format_min_length -Created struct value member variable (byte) printf_schar::format_justify_left -Created struct value member variable (byte) printf_schar::format_sign_always -Created struct value member variable (byte) printf_schar::format_zero_padding -Created struct value member variable (byte) printf_schar::format_upper_case -Created struct value member variable (byte) printf_schar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_schar::format -Created struct value member variable (byte) printf_uchar::format_min_length -Created struct value member variable (byte) printf_uchar::format_justify_left -Created struct value member variable (byte) printf_uchar::format_sign_always -Created struct value member variable (byte) printf_uchar::format_zero_padding -Created struct value member variable (byte) printf_uchar::format_upper_case -Created struct value member variable (byte) printf_uchar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uchar::format -Created struct value member variable (byte) printf_number_buffer::buffer_sign -Created struct value member variable (byte*) printf_number_buffer::buffer_digits -Converted struct value to member variables (struct printf_buffer_number) printf_number_buffer::buffer -Created struct value member variable (byte) printf_number_buffer::format_min_length -Created struct value member variable (byte) printf_number_buffer::format_justify_left -Created struct value member variable (byte) printf_number_buffer::format_sign_always -Created struct value member variable (byte) printf_number_buffer::format_zero_padding -Created struct value member variable (byte) printf_number_buffer::format_upper_case -Created struct value member variable (byte) printf_number_buffer::format_radix -Converted struct value to member variables (struct printf_format_number) printf_number_buffer::format -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_schar((signed byte) printf_schar::value , (byte) printf_schar::format_min_length , (byte) printf_schar::format_justify_left , (byte) printf_schar::format_sign_always , (byte) printf_schar::format_zero_padding , (byte) printf_schar::format_upper_case , (byte) printf_schar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix -Converted call struct value parameter to member unwinding call printf_uchar (byte) main::c (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_slong::format.sign_always with member unwinding reference (byte) printf_slong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_slong::format.radix with member unwinding reference (byte) printf_slong::format_radix -Replacing struct member reference (struct printf_format_number) printf_ulong::format.sign_always with member unwinding reference (byte) printf_ulong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_ulong::format.radix with member unwinding reference (byte) printf_ulong::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_sint::format.sign_always with member unwinding reference (byte) printf_sint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_sint::format.radix with member unwinding reference (byte) printf_sint::format_radix -Replacing struct member reference (struct printf_format_number) printf_uint::format.sign_always with member unwinding reference (byte) printf_uint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uint::format.radix with member unwinding reference (byte) printf_uint::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_schar::format.sign_always with member unwinding reference (byte) printf_schar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_schar::format.radix with member unwinding reference (byte) printf_schar::format_radix -Replacing struct member reference (struct printf_format_number) printf_uchar::format.sign_always with member unwinding reference (byte) printf_uchar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uchar::format.radix with member unwinding reference (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.upper_case with member unwinding reference (byte) printf_number_buffer::format_upper_case -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left Eliminating unused variable with no statement (void~) main::$1 CONTROL FLOW GRAPH SSA diff --git a/src/test/ref/printf-15.log b/src/test/ref/printf-15.log index 7dd4459f7..d8a28b704 100644 --- a/src/test/ref/printf-15.log +++ b/src/test/ref/printf-15.log @@ -2,123 +2,6 @@ Fixing struct type size struct printf_buffer_number to 12 Fixing struct type size struct printf_buffer_number to 12 Fixing struct type SIZE_OF struct printf_buffer_number to 12 Fixing struct type SIZE_OF struct printf_buffer_number to 12 -Created struct value member variable (byte) printf_slong::format_min_length -Created struct value member variable (byte) printf_slong::format_justify_left -Created struct value member variable (byte) printf_slong::format_sign_always -Created struct value member variable (byte) printf_slong::format_zero_padding -Created struct value member variable (byte) printf_slong::format_upper_case -Created struct value member variable (byte) printf_slong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_slong::format -Created struct value member variable (byte) printf_ulong::format_min_length -Created struct value member variable (byte) printf_ulong::format_justify_left -Created struct value member variable (byte) printf_ulong::format_sign_always -Created struct value member variable (byte) printf_ulong::format_zero_padding -Created struct value member variable (byte) printf_ulong::format_upper_case -Created struct value member variable (byte) printf_ulong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_ulong::format -Created struct value member variable (byte) printf_sint::format_min_length -Created struct value member variable (byte) printf_sint::format_justify_left -Created struct value member variable (byte) printf_sint::format_sign_always -Created struct value member variable (byte) printf_sint::format_zero_padding -Created struct value member variable (byte) printf_sint::format_upper_case -Created struct value member variable (byte) printf_sint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_sint::format -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Created struct value member variable (byte) printf_schar::format_min_length -Created struct value member variable (byte) printf_schar::format_justify_left -Created struct value member variable (byte) printf_schar::format_sign_always -Created struct value member variable (byte) printf_schar::format_zero_padding -Created struct value member variable (byte) printf_schar::format_upper_case -Created struct value member variable (byte) printf_schar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_schar::format -Created struct value member variable (byte) printf_uchar::format_min_length -Created struct value member variable (byte) printf_uchar::format_justify_left -Created struct value member variable (byte) printf_uchar::format_sign_always -Created struct value member variable (byte) printf_uchar::format_zero_padding -Created struct value member variable (byte) printf_uchar::format_upper_case -Created struct value member variable (byte) printf_uchar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uchar::format -Created struct value member variable (byte) printf_number_buffer::buffer_sign -Created struct value member variable (byte*) printf_number_buffer::buffer_digits -Converted struct value to member variables (struct printf_buffer_number) printf_number_buffer::buffer -Created struct value member variable (byte) printf_number_buffer::format_min_length -Created struct value member variable (byte) printf_number_buffer::format_justify_left -Created struct value member variable (byte) printf_number_buffer::format_sign_always -Created struct value member variable (byte) printf_number_buffer::format_zero_padding -Created struct value member variable (byte) printf_number_buffer::format_upper_case -Created struct value member variable (byte) printf_number_buffer::format_radix -Converted struct value to member variables (struct printf_format_number) printf_number_buffer::format -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_schar((signed byte) printf_schar::value , (byte) printf_schar::format_min_length , (byte) printf_schar::format_justify_left , (byte) printf_schar::format_sign_always , (byte) printf_schar::format_zero_padding , (byte) printf_schar::format_upper_case , (byte) printf_schar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_slong::format.sign_always with member unwinding reference (byte) printf_slong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_slong::format.radix with member unwinding reference (byte) printf_slong::format_radix -Replacing struct member reference (struct printf_format_number) printf_ulong::format.sign_always with member unwinding reference (byte) printf_ulong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_ulong::format.radix with member unwinding reference (byte) printf_ulong::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_sint::format.sign_always with member unwinding reference (byte) printf_sint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_sint::format.radix with member unwinding reference (byte) printf_sint::format_radix -Replacing struct member reference (struct printf_format_number) printf_uint::format.sign_always with member unwinding reference (byte) printf_uint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uint::format.radix with member unwinding reference (byte) printf_uint::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_schar::format.sign_always with member unwinding reference (byte) printf_schar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_schar::format.radix with member unwinding reference (byte) printf_schar::format_radix -Replacing struct member reference (struct printf_format_number) printf_uchar::format.sign_always with member unwinding reference (byte) printf_uchar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uchar::format.radix with member unwinding reference (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.upper_case with member unwinding reference (byte) printf_number_buffer::format_upper_case -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left Eliminating unused variable with no statement (struct printf_buffer_number) printf_buffer Eliminating unused variable with no statement (void~) main::$1 Eliminating unused variable with no statement (void~) main::$2 diff --git a/src/test/ref/printf-16.log b/src/test/ref/printf-16.log index 71f9c23b7..df70d4ba7 100644 --- a/src/test/ref/printf-16.log +++ b/src/test/ref/printf-16.log @@ -12,133 +12,6 @@ Added struct type cast to parameter value list call printf_sint (number) 2 (stru Added struct type cast to parameter value list call printf_sint (number) 2 (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } Added struct type cast to parameter value list call printf_sint (number) 2 (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } Added struct type cast to parameter value list call printf_sint (number) 1 (struct printf_format_number){ (byte) 0, (byte) 0, (byte) 0, (byte) 0, (byte) 0, (const byte) DECIMAL } -Created struct value member variable (byte) printf_slong::format_min_length -Created struct value member variable (byte) printf_slong::format_justify_left -Created struct value member variable (byte) printf_slong::format_sign_always -Created struct value member variable (byte) printf_slong::format_zero_padding -Created struct value member variable (byte) printf_slong::format_upper_case -Created struct value member variable (byte) printf_slong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_slong::format -Created struct value member variable (byte) printf_ulong::format_min_length -Created struct value member variable (byte) printf_ulong::format_justify_left -Created struct value member variable (byte) printf_ulong::format_sign_always -Created struct value member variable (byte) printf_ulong::format_zero_padding -Created struct value member variable (byte) printf_ulong::format_upper_case -Created struct value member variable (byte) printf_ulong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_ulong::format -Created struct value member variable (byte) printf_sint::format_min_length -Created struct value member variable (byte) printf_sint::format_justify_left -Created struct value member variable (byte) printf_sint::format_sign_always -Created struct value member variable (byte) printf_sint::format_zero_padding -Created struct value member variable (byte) printf_sint::format_upper_case -Created struct value member variable (byte) printf_sint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_sint::format -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Created struct value member variable (byte) printf_schar::format_min_length -Created struct value member variable (byte) printf_schar::format_justify_left -Created struct value member variable (byte) printf_schar::format_sign_always -Created struct value member variable (byte) printf_schar::format_zero_padding -Created struct value member variable (byte) printf_schar::format_upper_case -Created struct value member variable (byte) printf_schar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_schar::format -Created struct value member variable (byte) printf_uchar::format_min_length -Created struct value member variable (byte) printf_uchar::format_justify_left -Created struct value member variable (byte) printf_uchar::format_sign_always -Created struct value member variable (byte) printf_uchar::format_zero_padding -Created struct value member variable (byte) printf_uchar::format_upper_case -Created struct value member variable (byte) printf_uchar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uchar::format -Created struct value member variable (byte) printf_number_buffer::buffer_sign -Created struct value member variable (byte*) printf_number_buffer::buffer_digits -Converted struct value to member variables (struct printf_buffer_number) printf_number_buffer::buffer -Created struct value member variable (byte) printf_number_buffer::format_min_length -Created struct value member variable (byte) printf_number_buffer::format_justify_left -Created struct value member variable (byte) printf_number_buffer::format_sign_always -Created struct value member variable (byte) printf_number_buffer::format_zero_padding -Created struct value member variable (byte) printf_number_buffer::format_upper_case -Created struct value member variable (byte) printf_number_buffer::format_radix -Converted struct value to member variables (struct printf_format_number) printf_number_buffer::format -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_schar((signed byte) printf_schar::value , (byte) printf_schar::format_min_length , (byte) printf_schar::format_justify_left , (byte) printf_schar::format_sign_always , (byte) printf_schar::format_zero_padding , (byte) printf_schar::format_upper_case , (byte) printf_schar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix -Converted call struct value parameter to member unwinding call printf_sint (number) 1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 2 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 2 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 2 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 2 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 2 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding call printf_sint (number) 1 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (byte) 0 (const byte) DECIMAL -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_slong::format.sign_always with member unwinding reference (byte) printf_slong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_slong::format.radix with member unwinding reference (byte) printf_slong::format_radix -Replacing struct member reference (struct printf_format_number) printf_ulong::format.sign_always with member unwinding reference (byte) printf_ulong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_ulong::format.radix with member unwinding reference (byte) printf_ulong::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_sint::format.sign_always with member unwinding reference (byte) printf_sint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_sint::format.radix with member unwinding reference (byte) printf_sint::format_radix -Replacing struct member reference (struct printf_format_number) printf_uint::format.sign_always with member unwinding reference (byte) printf_uint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uint::format.radix with member unwinding reference (byte) printf_uint::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_schar::format.sign_always with member unwinding reference (byte) printf_schar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_schar::format.radix with member unwinding reference (byte) printf_schar::format_radix -Replacing struct member reference (struct printf_format_number) printf_uchar::format.sign_always with member unwinding reference (byte) printf_uchar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uchar::format.radix with member unwinding reference (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.upper_case with member unwinding reference (byte) printf_number_buffer::format_upper_case -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left Eliminating unused variable with no statement (void~) main::$1 Eliminating unused variable with no statement (void~) main::$2 Eliminating unused variable with no statement (void~) main::$3 diff --git a/src/test/ref/printf-2.log b/src/test/ref/printf-2.log index 29772887d..3f23a4c2f 100644 --- a/src/test/ref/printf-2.log +++ b/src/test/ref/printf-2.log @@ -5,126 +5,6 @@ Fixing struct type SIZE_OF struct printf_buffer_number to 12 Added struct type cast to parameter value list (void~) main::$1 ← call printf_schar (number) -$4d (struct printf_format_number){ (number) 6, (number) 0, (number) 0, (number) 0, (number) 0, (const byte) DECIMAL } Added struct type cast to parameter value list (void~) main::$3 ← call printf_schar (number) $63 (struct printf_format_number){ (number) 6, (number) 0, (number) 1, (number) 1, (number) 0, (const byte) OCTAL } Added struct type cast to parameter value list (void~) main::$5 ← call printf_uint (number) $d80 (struct printf_format_number){ (number) $a, (number) 1, (number) 0, (number) 0, (number) 1, (const byte) HEXADECIMAL } -Created struct value member variable (byte) printf_slong::format_min_length -Created struct value member variable (byte) printf_slong::format_justify_left -Created struct value member variable (byte) printf_slong::format_sign_always -Created struct value member variable (byte) printf_slong::format_zero_padding -Created struct value member variable (byte) printf_slong::format_upper_case -Created struct value member variable (byte) printf_slong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_slong::format -Created struct value member variable (byte) printf_ulong::format_min_length -Created struct value member variable (byte) printf_ulong::format_justify_left -Created struct value member variable (byte) printf_ulong::format_sign_always -Created struct value member variable (byte) printf_ulong::format_zero_padding -Created struct value member variable (byte) printf_ulong::format_upper_case -Created struct value member variable (byte) printf_ulong::format_radix -Converted struct value to member variables (struct printf_format_number) printf_ulong::format -Created struct value member variable (byte) printf_sint::format_min_length -Created struct value member variable (byte) printf_sint::format_justify_left -Created struct value member variable (byte) printf_sint::format_sign_always -Created struct value member variable (byte) printf_sint::format_zero_padding -Created struct value member variable (byte) printf_sint::format_upper_case -Created struct value member variable (byte) printf_sint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_sint::format -Created struct value member variable (byte) printf_uint::format_min_length -Created struct value member variable (byte) printf_uint::format_justify_left -Created struct value member variable (byte) printf_uint::format_sign_always -Created struct value member variable (byte) printf_uint::format_zero_padding -Created struct value member variable (byte) printf_uint::format_upper_case -Created struct value member variable (byte) printf_uint::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uint::format -Created struct value member variable (byte) printf_schar::format_min_length -Created struct value member variable (byte) printf_schar::format_justify_left -Created struct value member variable (byte) printf_schar::format_sign_always -Created struct value member variable (byte) printf_schar::format_zero_padding -Created struct value member variable (byte) printf_schar::format_upper_case -Created struct value member variable (byte) printf_schar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_schar::format -Created struct value member variable (byte) printf_uchar::format_min_length -Created struct value member variable (byte) printf_uchar::format_justify_left -Created struct value member variable (byte) printf_uchar::format_sign_always -Created struct value member variable (byte) printf_uchar::format_zero_padding -Created struct value member variable (byte) printf_uchar::format_upper_case -Created struct value member variable (byte) printf_uchar::format_radix -Converted struct value to member variables (struct printf_format_number) printf_uchar::format -Created struct value member variable (byte) printf_number_buffer::buffer_sign -Created struct value member variable (byte*) printf_number_buffer::buffer_digits -Converted struct value to member variables (struct printf_buffer_number) printf_number_buffer::buffer -Created struct value member variable (byte) printf_number_buffer::format_min_length -Created struct value member variable (byte) printf_number_buffer::format_justify_left -Created struct value member variable (byte) printf_number_buffer::format_sign_always -Created struct value member variable (byte) printf_number_buffer::format_zero_padding -Created struct value member variable (byte) printf_number_buffer::format_upper_case -Created struct value member variable (byte) printf_number_buffer::format_radix -Converted struct value to member variables (struct printf_format_number) printf_number_buffer::format -Created struct value member variable (byte) printf_string::format_min_length -Created struct value member variable (byte) printf_string::format_justify_left -Converted struct value to member variables (struct printf_format_string) printf_string::format -Converted procedure struct value parameter to member unwinding (void()) printf_slong((signed dword) printf_slong::value , (byte) printf_slong::format_min_length , (byte) printf_slong::format_justify_left , (byte) printf_slong::format_sign_always , (byte) printf_slong::format_zero_padding , (byte) printf_slong::format_upper_case , (byte) printf_slong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_ulong((dword) printf_ulong::uvalue , (byte) printf_ulong::format_min_length , (byte) printf_ulong::format_justify_left , (byte) printf_ulong::format_sign_always , (byte) printf_ulong::format_zero_padding , (byte) printf_ulong::format_upper_case , (byte) printf_ulong::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_sint((signed word) printf_sint::value , (byte) printf_sint::format_min_length , (byte) printf_sint::format_justify_left , (byte) printf_sint::format_sign_always , (byte) printf_sint::format_zero_padding , (byte) printf_sint::format_upper_case , (byte) printf_sint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uint((word) printf_uint::uvalue , (byte) printf_uint::format_min_length , (byte) printf_uint::format_justify_left , (byte) printf_uint::format_sign_always , (byte) printf_uint::format_zero_padding , (byte) printf_uint::format_upper_case , (byte) printf_uint::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_schar((signed byte) printf_schar::value , (byte) printf_schar::format_min_length , (byte) printf_schar::format_justify_left , (byte) printf_schar::format_sign_always , (byte) printf_schar::format_zero_padding , (byte) printf_schar::format_upper_case , (byte) printf_schar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_uchar((byte) printf_uchar::uvalue , (byte) printf_uchar::format_min_length , (byte) printf_uchar::format_justify_left , (byte) printf_uchar::format_sign_always , (byte) printf_uchar::format_zero_padding , (byte) printf_uchar::format_upper_case , (byte) printf_uchar::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_number_buffer((byte) printf_number_buffer::buffer_sign , (byte*) printf_number_buffer::buffer_digits , (byte) printf_number_buffer::format_min_length , (byte) printf_number_buffer::format_justify_left , (byte) printf_number_buffer::format_sign_always , (byte) printf_number_buffer::format_zero_padding , (byte) printf_number_buffer::format_upper_case , (byte) printf_number_buffer::format_radix) -Converted procedure struct value parameter to member unwinding (void()) printf_string((byte*) printf_string::str , (byte) printf_string::format_min_length , (byte) printf_string::format_justify_left) -Converted call struct value parameter to member unwinding (void~) printf_slong::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_slong::format_min_length (byte) printf_slong::format_justify_left (byte) printf_slong::format_sign_always (byte) printf_slong::format_zero_padding (byte) printf_slong::format_upper_case (byte) printf_slong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_ulong::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_ulong::format_min_length (byte) printf_ulong::format_justify_left (byte) printf_ulong::format_sign_always (byte) printf_ulong::format_zero_padding (byte) printf_ulong::format_upper_case (byte) printf_ulong::format_radix -Converted call struct value parameter to member unwinding (void~) printf_sint::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_sint::format_min_length (byte) printf_sint::format_justify_left (byte) printf_sint::format_sign_always (byte) printf_sint::format_zero_padding (byte) printf_sint::format_upper_case (byte) printf_sint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uint::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uint::format_min_length (byte) printf_uint::format_justify_left (byte) printf_uint::format_sign_always (byte) printf_uint::format_zero_padding (byte) printf_uint::format_upper_case (byte) printf_uint::format_radix -Converted call struct value parameter to member unwinding (void~) printf_schar::$2 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_schar::format_min_length (byte) printf_schar::format_justify_left (byte) printf_schar::format_sign_always (byte) printf_schar::format_zero_padding (byte) printf_schar::format_upper_case (byte) printf_schar::format_radix -Converted call struct value parameter to member unwinding (void~) printf_uchar::$4 ← call printf_number_buffer *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS (byte) printf_uchar::format_min_length (byte) printf_uchar::format_justify_left (byte) printf_uchar::format_sign_always (byte) printf_uchar::format_zero_padding (byte) printf_uchar::format_upper_case (byte) printf_uchar::format_radix -Converted call struct value parameter to member unwinding (void~) main::$1 ← call printf_schar (number) -$4d (number) 6 (number) 0 (number) 0 (number) 0 (number) 0 (const byte) DECIMAL -Converted call struct value parameter to member unwinding (void~) main::$3 ← call printf_schar (number) $63 (number) 6 (number) 0 (number) 1 (number) 1 (number) 0 (const byte) OCTAL -Converted call struct value parameter to member unwinding (void~) main::$5 ← call printf_uint (number) $d80 (number) $a (number) 1 (number) 0 (number) 0 (number) 1 (const byte) HEXADECIMAL -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_slong::format.sign_always with member unwinding reference (byte) printf_slong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_slong::format.radix with member unwinding reference (byte) printf_slong::format_radix -Replacing struct member reference (struct printf_format_number) printf_ulong::format.sign_always with member unwinding reference (byte) printf_ulong::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_ulong::format.radix with member unwinding reference (byte) printf_ulong::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_sint::format.sign_always with member unwinding reference (byte) printf_sint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_sint::format.radix with member unwinding reference (byte) printf_sint::format_radix -Replacing struct member reference (struct printf_format_number) printf_uint::format.sign_always with member unwinding reference (byte) printf_uint::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uint::format.radix with member unwinding reference (byte) printf_uint::format_radix -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_format_number) printf_schar::format.sign_always with member unwinding reference (byte) printf_schar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_schar::format.radix with member unwinding reference (byte) printf_schar::format_radix -Replacing struct member reference (struct printf_format_number) printf_uchar::format.sign_always with member unwinding reference (byte) printf_uchar::format_sign_always -Replacing struct member reference (struct printf_buffer_number) printf_buffer.sign with member unwinding reference *((byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_SIGN) -Replacing struct member reference (struct printf_buffer_number) printf_buffer.digits with member unwinding reference (byte*)&(struct printf_buffer_number) printf_buffer+(const byte) OFFSET_STRUCT_PRINTF_BUFFER_NUMBER_DIGITS -Replacing struct member reference (struct printf_format_number) printf_uchar::format.radix with member unwinding reference (byte) printf_uchar::format_radix -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.min_length with member unwinding reference (byte) printf_number_buffer::format_min_length -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.sign with member unwinding reference (byte) printf_number_buffer::buffer_sign -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.upper_case with member unwinding reference (byte) printf_number_buffer::format_upper_case -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.zero_padding with member unwinding reference (byte) printf_number_buffer::format_zero_padding -Replacing struct member reference (struct printf_format_number) printf_number_buffer::format.justify_left with member unwinding reference (byte) printf_number_buffer::format_justify_left -Replacing struct member reference (struct printf_buffer_number) printf_number_buffer::buffer.digits with member unwinding reference (byte*) printf_number_buffer::buffer_digits -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left -Replacing struct member reference (struct printf_format_string) printf_string::format.min_length with member unwinding reference (byte) printf_string::format_min_length -Replacing struct member reference (struct printf_format_string) printf_string::format.justify_left with member unwinding reference (byte) printf_string::format_justify_left CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/problem-struct-inline-parameter-1.log b/src/test/ref/problem-struct-inline-parameter-1.log index 9e3076ade..0bb1ae450 100644 --- a/src/test/ref/problem-struct-inline-parameter-1.log +++ b/src/test/ref/problem-struct-inline-parameter-1.log @@ -1,11 +1,4 @@ Added struct type cast to parameter value list (void~) main::$0 ← call print (byte) 'c' (struct format){ (byte) '-', (byte) '-' } -Created struct value member variable (byte) print::fmt_prefix -Created struct value member variable (byte) print::fmt_postfix -Converted struct value to member variables (struct format) print::fmt -Converted procedure struct value parameter to member unwinding (void()) print((byte) print::c , (byte) print::fmt_prefix , (byte) print::fmt_postfix) -Converted call struct value parameter to member unwinding (void~) main::$0 ← call print (byte) 'c' (byte) '-' (byte) '-' -Replacing struct member reference (struct format) print::fmt.prefix with member unwinding reference (byte) print::fmt_prefix -Replacing struct member reference (struct format) print::fmt.postfix with member unwinding reference (byte) print::fmt_postfix CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/problem-struct-inline-parameter.log b/src/test/ref/problem-struct-inline-parameter.log index 47f09f8df..59b0bf7a4 100644 --- a/src/test/ref/problem-struct-inline-parameter.log +++ b/src/test/ref/problem-struct-inline-parameter.log @@ -1,10 +1,3 @@ -Created struct value member variable (byte) print::fmt_prefix -Created struct value member variable (byte) print::fmt_postfix -Converted struct value to member variables (struct format) print::fmt -Converted procedure struct value parameter to member unwinding (void()) print((byte) print::c , (byte) print::fmt_prefix , (byte) print::fmt_postfix) -Converted call struct value parameter to member unwinding (void~) main::$0 ← call print (byte) 'c' (byte) '-' (byte) '-' -Replacing struct member reference (struct format) print::fmt.prefix with member unwinding reference (byte) print::fmt_prefix -Replacing struct member reference (struct format) print::fmt.postfix with member unwinding reference (byte) print::fmt_postfix CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/procedure-callingconvention-stack-10.log b/src/test/ref/procedure-callingconvention-stack-10.log index 2d27e3dab..b6556233f 100644 --- a/src/test/ref/procedure-callingconvention-stack-10.log +++ b/src/test/ref/procedure-callingconvention-stack-10.log @@ -1,36 +1,3 @@ -Created struct value member variable (byte) main::p_x -Created struct value member variable (byte) main::p_y -Converted struct value to member variables (struct Point) main::p -Created struct value member variable (byte~) main::$1_x -Created struct value member variable (byte~) main::$1_y -Converted struct value to member variables (struct Point~) main::$1 -Created struct value member variable (byte) get::return_x -Created struct value member variable (byte) get::return_y -Converted struct value to member variables (struct Point) get::return -Created struct value member variable (byte) get::p_x -Created struct value member variable (byte) get::p_y -Converted struct value to member variables (struct Point) get::p -Created struct value member variable (byte) print::p_x -Created struct value member variable (byte) print::p_y -Converted struct value to member variables (struct Point) print::p -Converted procedure struct value parameter to member unwinding __stackcall (void()) print((byte) print::p_x , (byte) print::p_y) -Converted procedure call LValue to member unwinding { (byte~) main::$1_x, (byte~) main::$1_y } ← call get (byte) main::i -Unwinding value copy (struct Point) main::p ← (struct Point~) main::$1 -Adding value simple copy (byte) main::p_x ← (byte~) main::$1_x -Adding value simple copy (byte) main::p_y ← (byte~) main::$1_y -Converted call struct value parameter to member unwinding (void~) main::$2 ← call print (byte) main::p_x (byte) main::p_y -Unwinding value copy (struct Point) get::p ← (struct Point){ (byte) get::i, (number~) get::$0 } -Adding value simple copy (byte) get::p_x ← (byte) get::i -Adding value simple copy (byte) get::p_y ← (number~) get::$0 -Unwinding value copy (struct Point) get::return ← (struct Point) get::p -Adding value simple copy (byte) get::return_x ← (byte) get::p_x -Adding value simple copy (byte) get::return_y ← (byte) get::p_y -Converted procedure struct return value to member unwinding return { (byte) get::return_x, (byte) get::return_y } -Unwinding value copy (struct Point) print::p ← param((struct Point) print::p) -Adding value simple copy (byte) print::p_x ← param((byte) print::p_x) -Adding value simple copy (byte) print::p_y ← param((byte) print::p_y) -Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x -Replacing struct member reference (struct Point) print::p.y with member unwinding reference (byte) print::p_y Eliminating unused variable with no statement (struct Point~) main::$1 Converting PHI-variable modified inside __stackcall procedure main() to load/store (byte) idx Calling convention STACK_CALL adding prepare/execute/finalize for { (byte~) main::$1_x, (byte~) main::$1_y } ← call get (byte) main::i diff --git a/src/test/ref/procedure-callingconvention-stack-11.log b/src/test/ref/procedure-callingconvention-stack-11.log index 6ccced653..ee7892321 100644 --- a/src/test/ref/procedure-callingconvention-stack-11.log +++ b/src/test/ref/procedure-callingconvention-stack-11.log @@ -1,86 +1,3 @@ -Created struct value member variable (struct Point) main::v_p1 -Created struct value member variable (struct Point) main::v_p2 -Converted struct value to member variables (struct Vector) main::v -Created struct value member variable (struct Point~) main::$1_p1 -Created struct value member variable (struct Point~) main::$1_p2 -Converted struct value to member variables (struct Vector~) main::$1 -Created struct value member variable (struct Point) get::return_p1 -Created struct value member variable (struct Point) get::return_p2 -Converted struct value to member variables (struct Vector) get::return -Created struct value member variable (struct Point) get::v_p1 -Created struct value member variable (struct Point) get::v_p2 -Converted struct value to member variables (struct Vector) get::v -Created struct value member variable (struct Point) print::v_p1 -Created struct value member variable (struct Point) print::v_p2 -Converted struct value to member variables (struct Vector) print::v -Created struct value member variable (byte) main::v_p1_x -Created struct value member variable (byte) main::v_p1_y -Converted struct value to member variables (struct Point) main::v_p1 -Created struct value member variable (byte) main::v_p2_x -Created struct value member variable (byte) main::v_p2_y -Converted struct value to member variables (struct Point) main::v_p2 -Created struct value member variable (byte~) main::$1_p1_x -Created struct value member variable (byte~) main::$1_p1_y -Converted struct value to member variables (struct Point~) main::$1_p1 -Created struct value member variable (byte~) main::$1_p2_x -Created struct value member variable (byte~) main::$1_p2_y -Converted struct value to member variables (struct Point~) main::$1_p2 -Created struct value member variable (byte) get::return_p1_x -Created struct value member variable (byte) get::return_p1_y -Converted struct value to member variables (struct Point) get::return_p1 -Created struct value member variable (byte) get::return_p2_x -Created struct value member variable (byte) get::return_p2_y -Converted struct value to member variables (struct Point) get::return_p2 -Created struct value member variable (byte) get::v_p1_x -Created struct value member variable (byte) get::v_p1_y -Converted struct value to member variables (struct Point) get::v_p1 -Created struct value member variable (byte) get::v_p2_x -Created struct value member variable (byte) get::v_p2_y -Converted struct value to member variables (struct Point) get::v_p2 -Created struct value member variable (byte) print::v_p1_x -Created struct value member variable (byte) print::v_p1_y -Converted struct value to member variables (struct Point) print::v_p1 -Created struct value member variable (byte) print::v_p2_x -Created struct value member variable (byte) print::v_p2_y -Converted struct value to member variables (struct Point) print::v_p2 -Converted procedure struct value parameter to member unwinding __stackcall (void()) print((struct Point) print::v_p1 , (struct Point) print::v_p2) -Converted procedure call LValue to member unwinding { { (byte~) main::$1_p1_x, (byte~) main::$1_p1_y }, { (byte~) main::$1_p2_x, (byte~) main::$1_p2_y } } ← call get (byte) main::i -Unwinding value copy (struct Vector) main::v ← (struct Vector~) main::$1 -Unwinding value copy (struct Vector) main::v ← (struct Vector~) main::$1 -Adding value simple copy (byte) main::v_p1_x ← (byte~) main::$1_p1_x -Adding value simple copy (byte) main::v_p1_y ← (byte~) main::$1_p1_y -Unwinding value copy (struct Vector) main::v ← (struct Vector~) main::$1 -Adding value simple copy (byte) main::v_p2_x ← (byte~) main::$1_p2_x -Adding value simple copy (byte) main::v_p2_y ← (byte~) main::$1_p2_y -Converted call struct value parameter to member unwinding (void~) main::$2 ← call print (struct Point) main::v_p1 (struct Point) main::v_p2 -Unwinding value copy (struct Vector) get::v ← (struct Vector){ (struct Point){ (byte) get::i, (number~) get::$0 }, (struct Point){ (number~) get::$1, (number~) get::$2 } } -Unwinding value copy (struct Vector) get::v ← (struct Vector){ (struct Point){ (byte) get::i, (number~) get::$0 }, (struct Point){ (number~) get::$1, (number~) get::$2 } } -Adding value simple copy (byte) get::v_p1_x ← (byte) get::i -Adding value simple copy (byte) get::v_p1_y ← (number~) get::$0 -Unwinding value copy (struct Vector) get::v ← (struct Vector){ (struct Point){ (byte) get::i, (number~) get::$0 }, (struct Point){ (number~) get::$1, (number~) get::$2 } } -Adding value simple copy (byte) get::v_p2_x ← (number~) get::$1 -Adding value simple copy (byte) get::v_p2_y ← (number~) get::$2 -Unwinding value copy (struct Vector) get::return ← (struct Vector) get::v -Unwinding value copy (struct Vector) get::return ← (struct Vector) get::v -Adding value simple copy (byte) get::return_p1_x ← (byte) get::v_p1_x -Adding value simple copy (byte) get::return_p1_y ← (byte) get::v_p1_y -Unwinding value copy (struct Vector) get::return ← (struct Vector) get::v -Adding value simple copy (byte) get::return_p2_x ← (byte) get::v_p2_x -Adding value simple copy (byte) get::return_p2_y ← (byte) get::v_p2_y -Converted procedure struct return value to member unwinding return { { (byte) get::return_p1_x, (byte) get::return_p1_y }, { (byte) get::return_p2_x, (byte) get::return_p2_y } } -Unwinding value copy (struct Vector) print::v ← param((struct Vector) print::v) -Unwinding value copy (struct Vector) print::v ← param((struct Vector) print::v) -Adding value simple copy (byte) print::v_p1_x ← param((byte) print::v_p1_x) -Adding value simple copy (byte) print::v_p1_y ← param((byte) print::v_p1_y) -Unwinding value copy (struct Vector) print::v ← param((struct Vector) print::v) -Adding value simple copy (byte) print::v_p2_x ← param((byte) print::v_p2_x) -Adding value simple copy (byte) print::v_p2_y ← param((byte) print::v_p2_y) -Replacing struct member reference (struct Vector) print::v.p1.x with member unwinding reference (byte) print::v_p1_x -Replacing struct member reference (struct Vector) print::v.p1.y with member unwinding reference (byte) print::v_p1_y -Replacing struct member reference (struct Vector) print::v.p2.x with member unwinding reference (byte) print::v_p2_x -Replacing struct member reference (struct Vector) print::v.p2.y with member unwinding reference (byte) print::v_p2_y -Converted procedure struct value parameter to member unwinding __stackcall (void()) print((byte) print::v_p1_x , (byte) print::v_p1_y , (byte) print::v_p2_x , (byte) print::v_p2_y) -Converted call struct value parameter to member unwinding (void~) main::$2 ← call print (byte) main::v_p1_x (byte) main::v_p1_y (byte) main::v_p2_x (byte) main::v_p2_y Eliminating unused variable with no statement (struct Vector~) main::$1 Eliminating unused variable with no statement (struct Point~) main::$1_p1 Eliminating unused variable with no statement (struct Point~) main::$1_p2 diff --git a/src/test/ref/processor-port-test.log b/src/test/ref/processor-port-test.log index f05623cc8..72f8f06a1 100644 --- a/src/test/ref/processor-port-test.log +++ b/src/test/ref/processor-port-test.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -642,6 +640,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*)(number) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte*) PROCPORT_DDR = (byte*)(number) 0 @@ -2336,6 +2357,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num) (byte) memset::c @@ -3513,6 +3557,7 @@ Uplift Scope [print_str] 31,254.25: zp[2]:11 [ print_str::str#10 print_str::str# Uplift Scope [print_uchar] 2,318.5: zp[1]:7 [ print_uchar::b#8 print_uchar::b#0 print_uchar::b#5 print_uchar::b#6 print_uchar::b#7 print_uchar::b#1 print_uchar::b#2 print_uchar::b#3 print_uchar::b#4 ] 2,002: zp[1]:15 [ print_uchar::$0 ] 2,002: zp[1]:16 [ print_uchar::$2 ] Uplift Scope [testProcport] 25.25: zp[1]:2 [ testProcport::ddr#23 ] 16.83: zp[1]:3 [ testProcport::port#23 ] 12.62: zp[1]:4 [ testProcport::ddr2#23 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -3525,6 +3570,7 @@ Uplifting [print_str] best 2651 combination zp[2]:11 [ print_str::str#10 print_s Uplifting [print_uchar] best 2615 combination reg byte x [ print_uchar::b#8 print_uchar::b#0 print_uchar::b#5 print_uchar::b#6 print_uchar::b#7 print_uchar::b#1 print_uchar::b#2 print_uchar::b#3 print_uchar::b#4 ] reg byte a [ print_uchar::$0 ] reg byte x [ print_uchar::$2 ] Uplifting [testProcport] best 2540 combination reg byte x [ testProcport::ddr#23 ] zp[1]:3 [ testProcport::port#23 ] zp[1]:4 [ testProcport::ddr2#23 ] Uplifting [MOS6526_CIA] best 2540 combination +Uplifting [MOS6581_SID] best 2540 combination Uplifting [RADIX] best 2540 combination Uplifting [print_ln] best 2540 combination Uplifting [print_cls] best 2540 combination @@ -4753,6 +4799,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/processor-port-test.sym b/src/test/ref/processor-port-test.sym index 1fdab6131..8945c6802 100644 --- a/src/test/ref/processor-port-test.sym +++ b/src/test/ref/processor-port-test.sym @@ -18,6 +18,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) PROCPORT = (byte*) 1 (const nomodify byte) PROCPORT_BASIC_KERNEL_IO = (byte) 7 (const nomodify byte*) PROCPORT_DDR = (byte*) 0 diff --git a/src/test/ref/roll-sprite-msb.log b/src/test/ref/roll-sprite-msb.log index 438fd3da3..7f3767cea 100644 --- a/src/test/ref/roll-sprite-msb.log +++ b/src/test/ref/roll-sprite-msb.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -84,6 +82,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SPRITES_XMSB = (byte*)(number) $d010 (const nomodify byte*) SPRITES_XPOS = (byte*)(number) $d000 (const nomodify byte*) SPRITES_YPOS = (byte*)(number) $d001 @@ -290,6 +311,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte) main::s (byte) main::s#1 151.5 @@ -542,12 +586,14 @@ REGISTER UPLIFT SCOPES Uplift Scope [position_sprite] 2,002: zp[1]:9 [ position_sprite::$2 ] 2,002: zp[1]:10 [ position_sprite::$4 ] 2,002: zp[1]:11 [ position_sprite::$5 ] 2,002: zp[1]:12 [ position_sprite::$6 ] 1,001: zp[1]:8 [ position_sprite::$1 ] 443.43: zp[1]:5 [ position_sprite::spriteno#0 ] 420.6: zp[2]:6 [ position_sprite::x#0 ] Uplift Scope [main] 212.1: zp[1]:2 [ main::s#2 main::s#1 ] 143.08: zp[2]:3 [ main::xpos#2 main::xpos#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [position_sprite] best 937 combination reg byte a [ position_sprite::$2 ] reg byte a [ position_sprite::$4 ] reg byte a [ position_sprite::$5 ] reg byte a [ position_sprite::$6 ] zp[1]:8 [ position_sprite::$1 ] zp[1]:5 [ position_sprite::spriteno#0 ] zp[2]:6 [ position_sprite::x#0 ] Limited combination testing to 100 combinations of 2304 possible. Uplifting [main] best 817 combination reg byte x [ main::s#2 main::s#1 ] zp[2]:3 [ main::xpos#2 main::xpos#1 ] Uplifting [MOS6526_CIA] best 817 combination +Uplifting [MOS6581_SID] best 817 combination Uplifting [] best 817 combination Attempting to uplift remaining variables inzp[1]:8 [ position_sprite::$1 ] Uplifting [position_sprite] best 810 combination reg byte y [ position_sprite::$1 ] @@ -749,6 +795,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SPRITES_XMSB = (byte*) 53264 (const nomodify byte*) SPRITES_XPOS = (byte*) 53248 (const nomodify byte*) SPRITES_YPOS = (byte*) 53249 diff --git a/src/test/ref/roll-sprite-msb.sym b/src/test/ref/roll-sprite-msb.sym index 132256c45..8624ccbca 100644 --- a/src/test/ref/roll-sprite-msb.sym +++ b/src/test/ref/roll-sprite-msb.sym @@ -15,6 +15,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SPRITES_XMSB = (byte*) 53264 (const nomodify byte*) SPRITES_XPOS = (byte*) 53248 (const nomodify byte*) SPRITES_YPOS = (byte*) 53249 diff --git a/src/test/ref/scan-desire-problem.log b/src/test/ref/scan-desire-problem.log index 83dc85315..ae766d951 100644 --- a/src/test/ref/scan-desire-problem.log +++ b/src/test/ref/scan-desire-problem.log @@ -1,11 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) init::$3 ← call toD018 (const nomodify byte*) screen (const nomodify byte*) charset @@ -301,6 +293,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) RED = (byte) 2 (const nomodify byte*) SPRITES_COLS = (byte*)(number) $d027 (const nomodify byte*) SPRITES_ENABLE = (byte*)(number) $d015 @@ -1067,6 +1082,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) draw_block((byte) draw_block::tileno , (byte) draw_block::x , (byte) draw_block::y , (byte) draw_block::color) (byte*~) draw_block::$11 20002.0 (byte*~) draw_block::$12 20002.0 @@ -1898,6 +1936,7 @@ Uplift Scope [draw_block] 20,002: zp[1]:22 [ draw_block::y#1 ] 20,002: zp[2]:25 Uplift Scope [memset] 35,672.33: zp[2]:12 [ memset::dst#2 memset::dst#4 memset::dst#1 ] 1,833.67: zp[2]:47 [ memset::end#0 ] 1,428.71: zp[1]:11 [ memset::c#4 ] 0: zp[2]:9 [ memset::str#3 ] Uplift Scope [main] 2,627.62: zp[1]:3 [ main::y#2 main::y#1 ] 2,002: zp[1]:14 [ main::z#0 ] 2,002: zp[1]:15 [ main::tile#0 ] 411.55: zp[1]:2 [ main::x#2 main::x#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [init] Uplift Scope [init_sprites] Uplift Scope [] @@ -1908,6 +1947,7 @@ Limited combination testing to 100 combinations of 1296 possible. Uplifting [memset] best 92270 combination zp[2]:12 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:47 [ memset::end#0 ] reg byte x [ memset::c#4 ] zp[2]:9 [ memset::str#3 ] Uplifting [main] best 91270 combination zp[1]:3 [ main::y#2 main::y#1 ] reg byte a [ main::z#0 ] reg byte y [ main::tile#0 ] zp[1]:2 [ main::x#2 main::x#1 ] Uplifting [MOS6526_CIA] best 91270 combination +Uplifting [MOS6581_SID] best 91270 combination Uplifting [init] best 91270 combination Uplifting [init_sprites] best 91270 combination Uplifting [] best 91270 combination @@ -2549,6 +2589,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) RED = (byte) 2 (const nomodify byte*) SPRITES_COLS = (byte*) 53287 (const nomodify byte*) SPRITES_ENABLE = (byte*) 53269 diff --git a/src/test/ref/scan-desire-problem.sym b/src/test/ref/scan-desire-problem.sym index 0dd507956..d2d2161fc 100644 --- a/src/test/ref/scan-desire-problem.sym +++ b/src/test/ref/scan-desire-problem.sym @@ -24,6 +24,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) RED = (byte) 2 (const nomodify byte*) SPRITES_COLS = (byte*) 53287 (const nomodify byte*) SPRITES_ENABLE = (byte*) 53269 diff --git a/src/test/ref/screen-center-angle.asm b/src/test/ref/screen-center-angle.asm index 46c9b55ca..f29019cd8 100644 --- a/src/test/ref/screen-center-angle.asm +++ b/src/test/ref/screen-center-angle.asm @@ -3,15 +3,15 @@ .pc = $801 "Basic" :BasicUpstart(main) .pc = $80d "Program" + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. diff --git a/src/test/ref/screen-center-angle.log b/src/test/ref/screen-center-angle.log index bfec6a65d..2b9b1c8d9 100644 --- a/src/test/ref/screen-center-angle.log +++ b/src/test/ref/screen-center-angle.log @@ -1,11 +1,5 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET Inlined call (byte~) main::$7 ← call toD018 (const byte*) main::BASE_SCREEN (const byte*) main::BASE_CHARSET @@ -597,6 +591,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 @@ -2055,6 +2072,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (signed word~) atan2_16::$2 200002.0 (byte~) atan2_16::$22 2.00000002E8 @@ -2388,15 +2428,15 @@ Target platform is c64basic / MOS6502X :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. @@ -3690,6 +3730,7 @@ Uplift Scope [clock] 37.33: zp[4]:61 [ clock::return#0 ] 22: zp[4]:43 [ clock::r Uplift Scope [main] 22: zp[4]:47 [ main::$4 ] 22: zp[4]:51 [ main::cyclecount#0 ] Uplift Scope [RADIX] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [clock_start] Uplift Scope [] @@ -3707,6 +3748,7 @@ Uplifting [clock] best 1139156 combination zp[4]:61 [ clock::return#0 ] zp[4]:43 Uplifting [main] best 1139156 combination zp[4]:47 [ main::$4 ] zp[4]:51 [ main::cyclecount#0 ] Uplifting [RADIX] best 1139156 combination Uplifting [MOS6526_CIA] best 1139156 combination +Uplifting [MOS6581_SID] best 1139156 combination Uplifting [clock_start] best 1139156 combination Uplifting [] best 1139156 combination Attempting to uplift remaining variables inzp[1]:42 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -3781,15 +3823,15 @@ ASSEMBLER BEFORE OPTIMIZATION :BasicUpstart(__bbegin) .pc = $80d "Program" // Global Constants & labels + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. @@ -4945,6 +4987,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 @@ -5213,15 +5278,15 @@ Score: 1044967 :BasicUpstart(main) .pc = $80d "Program" // Global Constants & labels + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 // The number of iterations performed during 16-bit CORDIC atan2 calculation .const CORDIC_ITERATIONS_16 = $f // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. diff --git a/src/test/ref/screen-center-angle.sym b/src/test/ref/screen-center-angle.sym index a12a5a42e..e17d3d7a7 100644 --- a/src/test/ref/screen-center-angle.sym +++ b/src/test/ref/screen-center-angle.sym @@ -27,6 +27,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 diff --git a/src/test/ref/screen-center-distance.asm b/src/test/ref/screen-center-distance.asm index df9770ac2..54315d11c 100644 --- a/src/test/ref/screen-center-distance.asm +++ b/src/test/ref/screen-center-distance.asm @@ -3,15 +3,15 @@ :BasicUpstart(main) .pc = $80d "Program" .const SIZEOF_WORD = 2 + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 diff --git a/src/test/ref/screen-center-distance.log b/src/test/ref/screen-center-distance.log index 8751e085d..45e3e990b 100644 --- a/src/test/ref/screen-center-distance.log +++ b/src/test/ref/screen-center-distance.log @@ -1,11 +1,5 @@ Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO Resolved forward reference FONT_HEX_PROTO to (const byte*) FONT_HEX_PROTO -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$1 ← call toD018 (const nomodify byte*) SCREEN (const nomodify byte*) CHARSET Inlined call (byte~) main::$7 ← call toD018 (const byte*) main::BASE_SCREEN (const byte*) main::BASE_CHARSET @@ -777,6 +771,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) NUM_SQUARES (byte) NUM_SQUARES#0 (byte) NUM_SQUARES#1 @@ -2545,6 +2562,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) NUM_SQUARES (word*) SQUARES (word*()) bsearch16u((word) bsearch16u::key , (word*) bsearch16u::items , (byte) bsearch16u::num) @@ -2916,15 +2956,15 @@ Target platform is c64basic / MOS6502X .pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 @@ -4338,6 +4378,7 @@ Uplift Scope [main] 22: zp[4]:46 [ main::$4 ] 22: zp[4]:50 [ main::cyclecount#0 Uplift Scope [RADIX] Uplift Scope [malloc] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [clock_start] Uplift Scope [] @@ -4358,6 +4399,7 @@ Uplifting [main] best 239596 combination zp[4]:46 [ main::$4 ] zp[4]:50 [ main:: Uplifting [RADIX] best 239596 combination Uplifting [malloc] best 239596 combination Uplifting [MOS6526_CIA] best 239596 combination +Uplifting [MOS6581_SID] best 239596 combination Uplifting [clock_start] best 239596 combination Uplifting [] best 239596 combination Attempting to uplift remaining variables inzp[1]:41 [ init_font_hex::idx#5 init_font_hex::idx#2 ] @@ -4431,15 +4473,15 @@ ASSEMBLER BEFORE OPTIMIZATION .pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 @@ -5622,6 +5664,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e @@ -5916,15 +5981,15 @@ Score: 203667 .pc = $80d "Program" // Global Constants & labels .const SIZEOF_WORD = 2 + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 diff --git a/src/test/ref/screen-center-distance.sym b/src/test/ref/screen-center-distance.sym index 9542d3bc9..6feb7126c 100644 --- a/src/test/ref/screen-center-distance.sym +++ b/src/test/ref/screen-center-distance.sym @@ -24,6 +24,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e diff --git a/src/test/ref/screen-show-spiral-buckets.log b/src/test/ref/screen-show-spiral-buckets.log index c2f1f3aad..ffd54391c 100644 --- a/src/test/ref/screen-show-spiral-buckets.log +++ b/src/test/ref/screen-show-spiral-buckets.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -1322,6 +1320,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NUM_BUCKETS = (byte) $30 (byte) NUM_SQUARES (byte) NUM_SQUARES#0 @@ -3944,6 +3965,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) NUM_SQUARES (byte*) SCREEN_ANGLE (void*) SCREEN_ANGLE#0 0.046511627906976744 @@ -6980,6 +7024,7 @@ Uplift Scope [main] 6,673.33: zp[2]:7 [ main::min_offset#5 main::min_offset#9 ma Uplift Scope [malloc] 13,004: zp[2]:23 [ malloc::size#7 malloc::size#6 ] 2,000.2: zp[2]:109 [ malloc::mem#0 ] Uplift Scope [] 12,140.15: zp[2]:21 [ heap_head#18 heap_head#1 ] 16.15: zp[2]:170 [ SQUARES#1 ] 0.13: zp[2]:64 [ SCREEN_DIST#0 ] 0.05: zp[2]:66 [ SCREEN_ANGLE#0 ] 0.04: zp[2]:72 [ BUCKET_IDX#0 ] 0.03: zp[2]:70 [ BUCKETS#0 ] 0.02: zp[2]:68 [ BUCKET_SIZES#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplifting [bsearch16u] best 1348976 combination reg byte x [ bsearch16u::num#5 bsearch16u::num#1 bsearch16u::num#3 bsearch16u::num#0 ] zp[2]:55 [ bsearch16u::return#1 bsearch16u::return#2 bsearch16u::items#2 bsearch16u::items#1 bsearch16u::items#8 bsearch16u::$2 bsearch16u::return#7 bsearch16u::items#0 ] reg byte a [ bsearch16u::$6 ] reg byte a [ bsearch16u::$14 ] zp[2]:165 [ bsearch16u::result#0 ] zp[2]:163 [ bsearch16u::pivot#0 ] zp[2]:152 [ bsearch16u::return#3 ] zp[2]:150 [ bsearch16u::key#0 ] @@ -6998,6 +7043,7 @@ Limited combination testing to 100 combinations of 256 possible. Uplifting [malloc] best 1227016 combination zp[2]:23 [ malloc::size#7 malloc::size#6 ] zp[2]:109 [ malloc::mem#0 ] Uplifting [] best 1227016 combination zp[2]:21 [ heap_head#18 heap_head#1 ] zp[2]:170 [ SQUARES#1 ] zp[2]:64 [ SCREEN_DIST#0 ] zp[2]:66 [ SCREEN_ANGLE#0 ] zp[2]:72 [ BUCKET_IDX#0 ] zp[2]:70 [ BUCKETS#0 ] zp[2]:68 [ BUCKET_SIZES#0 ] Uplifting [MOS6526_CIA] best 1227016 combination +Uplifting [MOS6581_SID] best 1227016 combination Uplifting [RADIX] best 1227016 combination Attempting to uplift remaining variables inzp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] Uplifting [init_dist_screen] best 1227016 combination zp[1]:53 [ init_dist_screen::xb#2 init_dist_screen::xb#1 ] @@ -9126,6 +9172,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NUM_BUCKETS = (byte) $30 (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 diff --git a/src/test/ref/screen-show-spiral-buckets.sym b/src/test/ref/screen-show-spiral-buckets.sym index 2bd922d17..1e4f90569 100644 --- a/src/test/ref/screen-show-spiral-buckets.sym +++ b/src/test/ref/screen-show-spiral-buckets.sym @@ -35,6 +35,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NUM_BUCKETS = (byte) $30 (byte) NUM_SQUARES (const byte) NUM_SQUARES#3 NUM_SQUARES = (byte) $30 diff --git a/src/test/ref/semi-struct-2.log b/src/test/ref/semi-struct-2.log index 7a9613a15..62fc158e3 100644 --- a/src/test/ref/semi-struct-2.log +++ b/src/test/ref/semi-struct-2.log @@ -1,11 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte*~) main::$1 ← call fileEntry (number) 1 Inlined call (byte*~) main::$2 ← call fileEntry (number) 2 @@ -1571,6 +1563,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 @@ -4557,6 +4572,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) initEntry((byte*) initEntry::entry , (byte) initEntry::n) (word~) initEntry::$1 101.0 (byte~) initEntry::$11 202.0 @@ -7001,6 +7039,7 @@ Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [keyboard_init] Uplifting [print_char] best 5987 combination reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 print_char::ch#2 ] @@ -7021,6 +7060,7 @@ Uplifting [RADIX] best 5528 combination Uplifting [print_ln] best 5528 combination Uplifting [print_cls] best 5528 combination Uplifting [MOS6526_CIA] best 5528 combination +Uplifting [MOS6581_SID] best 5528 combination Uplifting [keyboard_init] best 5528 combination Attempting to uplift remaining variables inzp[1]:62 [ initEntry::$19 ] Uplifting [initEntry] best 5524 combination reg byte a [ initEntry::$19 ] @@ -9202,6 +9242,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 diff --git a/src/test/ref/semi-struct-2.sym b/src/test/ref/semi-struct-2.sym index 96ac9c2e0..617dec16c 100644 --- a/src/test/ref/semi-struct-2.sym +++ b/src/test/ref/semi-struct-2.sym @@ -18,6 +18,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 diff --git a/src/test/ref/sieve-min.log b/src/test/ref/sieve-min.log index 19d9ec567..2ed231c0d 100644 --- a/src/test/ref/sieve-min.log +++ b/src/test/ref/sieve-min.log @@ -1,9 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -275,6 +269,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -861,6 +878,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) main() (byte*~) main::$16 202.0 (word) main::i @@ -1398,6 +1438,7 @@ Uplift Scope [main] 2,929.5: zp[2]:8 [ main::j#2 main::j#1 main::j#0 ] 2,237.67: Uplift Scope [memset] 3,336.67: zp[2]:16 [ memset::dst#2 memset::dst#1 ] Uplift Scope [print_uint] 701: zp[2]:20 [ print_uint::w#0 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplifting [print_char] best 10797 combination reg byte a [ print_char::ch#3 print_char::ch#0 print_char::ch#1 ] @@ -1407,6 +1448,7 @@ Uplifting [main] best 10779 combination zp[2]:8 [ main::j#2 main::j#1 main::j#0 Uplifting [memset] best 10779 combination zp[2]:16 [ memset::dst#2 memset::dst#1 ] Uplifting [print_uint] best 10779 combination zp[2]:20 [ print_uint::w#0 ] Uplifting [MOS6526_CIA] best 10779 combination +Uplifting [MOS6581_SID] best 10779 combination Uplifting [RADIX] best 10779 combination Coalescing zero page register [ zp[2]:6 [ main::i#10 main::i#3 ] ] with [ zp[2]:20 [ print_uint::w#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:13 [ print_char_cursor#19 print_char_cursor#27 print_char_cursor#33 print_char_cursor#20 print_char_cursor#26 ] ] with [ zp[2]:2 [ main::i#12 main::i#2 ] ] @@ -1865,6 +1907,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/sieve-min.sym b/src/test/ref/sieve-min.sym index b0aad99c1..e20129647 100644 --- a/src/test/ref/sieve-min.sym +++ b/src/test/ref/sieve-min.sym @@ -16,6 +16,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/sieve.asm b/src/test/ref/sieve.asm index 76f3460dd..41841182d 100644 --- a/src/test/ref/sieve.asm +++ b/src/test/ref/sieve.asm @@ -10,15 +10,15 @@ // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SCREEN = $400 .const COUNT = $4000 /* Up to what number? */ diff --git a/src/test/ref/sieve.log b/src/test/ref/sieve.log index a0303f878..53fc67be1 100644 --- a/src/test/ref/sieve.log +++ b/src/test/ref/sieve.log @@ -1,9 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) main::$0 ← call toD018 (const nomodify byte*) SCREEN (byte*)(number) $1800 @@ -1092,6 +1086,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OCTAL = (number) 8 (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f @@ -3415,6 +3432,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (dword()) clock() (dword) clock::return (dword) clock::return#0 37.33333333333333 @@ -3827,15 +3867,15 @@ Target platform is c64basic / MOS6502X // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SCREEN = $400 .const COUNT = $4000 /* Up to what number? */ @@ -5678,6 +5718,7 @@ Uplift Scope [div32u16u] 202: zp[2]:125 [ div32u16u::quotient_lo#0 ] 42.6: zp[4] Uplift Scope [print_ulong_decimal] 112: zp[4]:83 [ print_ulong_decimal::w#0 ] Uplift Scope [clock] 37.33: zp[4]:135 [ clock::return#0 ] 22: zp[4]:57 [ clock::return#2 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [clock_start] Uplift Scope [RADIX] Uplift Scope [print_ln] @@ -5698,6 +5739,7 @@ Uplifting [div32u16u] best 100257 combination zp[2]:125 [ div32u16u::quotient_lo Uplifting [print_ulong_decimal] best 100257 combination zp[4]:83 [ print_ulong_decimal::w#0 ] Uplifting [clock] best 100257 combination zp[4]:135 [ clock::return#0 ] zp[4]:57 [ clock::return#2 ] Uplifting [MOS6526_CIA] best 100257 combination +Uplifting [MOS6581_SID] best 100257 combination Uplifting [clock_start] best 100257 combination Uplifting [RADIX] best 100257 combination Uplifting [print_ln] best 100257 combination @@ -5773,15 +5815,15 @@ ASSEMBLER BEFORE OPTIMIZATION // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SCREEN = $400 .const COUNT = $4000 /* Up to what number? */ @@ -7422,6 +7464,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 @@ -7776,15 +7841,15 @@ Score: 82397 // Clock cycles used to start & read the cycle clock by calling clock_start() and clock() once. Can be subtracted when calculating the number of cycles used by a routine. // To make precise cycle measurements interrupts and the display must be disabled so neither steals any cycles from the code. .const CLOCKS_PER_INIT = $12 + // Timer Control - Start/stop timer (0:stop, 1: start) + .const CIA_TIMER_CONTROL_START = 1 + // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) + .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label D018 = $d018 // The CIA#2: Serial bus, RS-232, VIC memory bank .label CIA2 = $dd00 // CIA#2 timer A&B as one single 32-bit value .label CIA2_TIMER_AB = $dd04 - // Timer Control - Start/stop timer (0:stop, 1: start) - .const CIA_TIMER_CONTROL_START = 1 - // Timer B Control - Timer counts (00:system cycles, 01: CNT pulses, 10: timer A underflow, 11: time A underflow while CNT is high) - .const CIA_TIMER_CONTROL_B_COUNT_UNDERFLOW_A = $40 .label SCREEN = $400 .const COUNT = $4000 /* Up to what number? */ diff --git a/src/test/ref/sieve.sym b/src/test/ref/sieve.sym index f936b6ef5..5cd8644dd 100644 --- a/src/test/ref/sieve.sym +++ b/src/test/ref/sieve.sym @@ -26,6 +26,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) RADIX::BINARY = (number) 2 diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index 568ef527e..e1f868f9e 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -223,6 +221,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*)(number) $d012 (const nomodify byte*) SCREEN = (byte*)(number) $400 (const nomodify byte*) SPRITE = (byte*)(number) $2000 @@ -789,6 +810,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) anim() (signed word~) anim::$5 2002.0 (signed word~) anim::$7 2002.0 @@ -1306,12 +1350,14 @@ Uplift Scope [] 5,942.77: zp[2]:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] 3,473.71: z Uplift Scope [anim] 2,002: zp[2]:15 [ anim::$5 ] 2,002: zp[2]:19 [ anim::$7 ] 2,002: zp[1]:23 [ anim::$9 ] 500.5: zp[2]:21 [ anim::sprite_y#0 ] 400.4: zp[2]:17 [ anim::sprite_x#0 ] Uplift Scope [init] 3,336.67: zp[2]:12 [ init::sc#2 init::sc#1 ] 3,003: zp[1]:14 [ init::i#2 init::i#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplifting [] best 7892 combination zp[2]:6 [ yvel#9 yvel#12 yvel#10 yvel#21 ] zp[2]:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] zp[2]:8 [ xpos#9 xpos#12 xpos#10 ] zp[2]:10 [ ypos#10 ypos#13 ypos#11 ] zp[2]:2 [ xvel#12 xvel#10 xvel#14 ] Uplifting [anim] best 7886 combination zp[2]:15 [ anim::$5 ] zp[2]:19 [ anim::$7 ] reg byte a [ anim::$9 ] zp[2]:21 [ anim::sprite_y#0 ] zp[2]:17 [ anim::sprite_x#0 ] Uplifting [init] best 7766 combination zp[2]:12 [ init::sc#2 init::sc#1 ] reg byte x [ init::i#2 init::i#1 ] Uplifting [MOS6526_CIA] best 7766 combination +Uplifting [MOS6581_SID] best 7766 combination Uplifting [main] best 7766 combination Coalescing zero page register [ zp[2]:15 [ anim::$5 ] ] with [ zp[2]:17 [ anim::sprite_x#0 ] ] - score: 1 Coalescing zero page register [ zp[2]:19 [ anim::$7 ] ] with [ zp[2]:21 [ anim::sprite_y#0 ] ] - score: 1 @@ -1762,6 +1808,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte*) SPRITE = (byte*) 8192 diff --git a/src/test/ref/signed-words.sym b/src/test/ref/signed-words.sym index c5e8cc460..51e4e56c3 100644 --- a/src/test/ref/signed-words.sym +++ b/src/test/ref/signed-words.sym @@ -15,6 +15,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) RASTER = (byte*) 53266 (const nomodify byte*) SCREEN = (byte*) 1024 (const nomodify byte*) SPRITE = (byte*) 8192 diff --git a/src/test/ref/sizeof-struct.log b/src/test/ref/sizeof-struct.log index d451f3085..4521c91ea 100644 --- a/src/test/ref/sizeof-struct.log +++ b/src/test/ref/sizeof-struct.log @@ -1,22 +1,5 @@ Resolving sizeof() (byte~) main::$0 ← sizeof (struct Point) main::p Resolving sizeof() (byte~) main::$2 ← sizeof (struct Circle) main::c -Created struct value member variable (byte) main::p_x -Created struct value member variable (byte) main::p_y -Converted struct value to member variables (struct Point) main::p -Created struct value member variable (struct Point) main::c_center -Created struct value member variable (byte) main::c_radius -Converted struct value to member variables (struct Circle) main::c -Created struct value member variable (byte) main::c_center_x -Created struct value member variable (byte) main::c_center_y -Converted struct value to member variables (struct Point) main::c_center -Unwinding value copy (struct Point) main::p ← {} -Adding value simple copy (byte) main::p_x ← (byte) 0 -Adding value simple copy (byte) main::p_y ← (byte) 0 -Unwinding value copy (struct Circle) main::c ← {} -Unwinding value copy (struct Circle) main::c ← {} -Adding value simple copy (byte) main::c_center_x ← (byte) 0 -Adding value simple copy (byte) main::c_center_y ← (byte) 0 -Adding value simple copy (byte) main::c_radius ← (byte) 0 CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-0.log b/src/test/ref/struct-0.log index 35f9df9cb..f364e17c1 100644 --- a/src/test/ref/struct-0.log +++ b/src/test/ref/struct-0.log @@ -1,7 +1,3 @@ -Replacing struct member reference (struct Point) point.x with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point.y with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) point.x with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point.y with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-1.log b/src/test/ref/struct-1.log index e57f28231..d70d7f97a 100644 --- a/src/test/ref/struct-1.log +++ b/src/test/ref/struct-1.log @@ -1,11 +1,3 @@ -Replacing struct member reference (struct Point) point1.x with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point1.y with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) point1.y with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) point2.x with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point1.x with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point2.y with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) point2.x with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point2.y with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-10.log b/src/test/ref/struct-10.log index 823ea79e4..06d9e23eb 100644 --- a/src/test/ref/struct-10.log +++ b/src/test/ref/struct-10.log @@ -1,8 +1,3 @@ -Created struct value member variable (word*) main::info_values -Converted struct value to member variables (struct RadixInfo) main::info -Unwinding value copy (struct RadixInfo) main::info ← { values: (const word*) RADIX_DECIMAL_VALUES } -Adding value simple copy (word*) main::info_values ← (const word*) RADIX_DECIMAL_VALUES -Replacing struct member reference (struct RadixInfo) main::info.values with member unwinding reference (word*) main::info_values CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-11.log b/src/test/ref/struct-11.log index a8927e17b..32389a5bb 100644 --- a/src/test/ref/struct-11.log +++ b/src/test/ref/struct-11.log @@ -3,15 +3,6 @@ Fixing struct type size struct Person to 65 Fixing struct type size struct Person to 65 Fixing struct type SIZE_OF struct Person to 65 Fixing struct type SIZE_OF struct Person to 65 -Created struct value member variable (byte) print_person::person_id -Created struct value member variable (byte*) print_person::person_name -Converted struct value to member variables (struct Person) print_person::person -Converted procedure struct value parameter to member unwinding (void()) print_person((byte) print_person::person_id , (byte*) print_person::person_name) -Converted call struct value parameter to member unwinding (void~) main::$0 ← call print_person *((byte*)&(struct Person) jesper+(const byte) OFFSET_STRUCT_PERSON_ID) (byte*)&(struct Person) jesper+(const byte) OFFSET_STRUCT_PERSON_NAME -Converted call struct value parameter to member unwinding (void~) main::$1 ← call print_person *((byte*)&(struct Person) henriette+(const byte) OFFSET_STRUCT_PERSON_ID) (byte*)&(struct Person) henriette+(const byte) OFFSET_STRUCT_PERSON_NAME -Replacing struct member reference (struct Person) print_person::person.id with member unwinding reference (byte) print_person::person_id -Replacing struct member reference (struct Person) print_person::person.name with member unwinding reference (byte*) print_person::person_name -Replacing struct member reference (struct Person) print_person::person.name with member unwinding reference (byte*) print_person::person_name CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-12.log b/src/test/ref/struct-12.log index d2ae21d7b..f0171ea97 100644 --- a/src/test/ref/struct-12.log +++ b/src/test/ref/struct-12.log @@ -3,27 +3,6 @@ Fixing struct type size struct Person to 65 Fixing struct type size struct Person to 65 Fixing struct type SIZE_OF struct Person to 65 Fixing struct type SIZE_OF struct Person to 65 -Created struct value member variable (byte) main::jesper_id -Created struct value member variable (const byte*) main::jesper_name -Converted struct value to member variables (struct Person) main::jesper -Created struct value member variable (byte) main::henriette_id -Created struct value member variable (const byte*) main::henriette_name -Converted struct value to member variables (struct Person) main::henriette -Created struct value member variable (byte) print_person::person_id -Created struct value member variable (byte*) print_person::person_name -Converted struct value to member variables (struct Person) print_person::person -Converted procedure struct value parameter to member unwinding (void()) print_person((byte) print_person::person_id , (byte*) print_person::person_name) -Unwinding value copy (struct Person) main::jesper ← { id: (byte) 4, name: (byte*) "jesper" } -Adding value simple copy (byte) main::jesper_id ← (byte) 4 -Adding value bulk copy *((const byte*) main::jesper_name) ← memcpy(*(&(const byte*) $0), byte, (number) $40) -Converted call struct value parameter to member unwinding (void~) main::$0 ← call print_person (byte) main::jesper_id (const byte*) main::jesper_name -Unwinding value copy (struct Person) main::henriette ← { id: (byte) 7, name: (byte*) "henriette" } -Adding value simple copy (byte) main::henriette_id ← (byte) 7 -Adding value bulk copy *((const byte*) main::henriette_name) ← memcpy(*(&(const byte*) $1), byte, (number) $40) -Converted call struct value parameter to member unwinding (void~) main::$1 ← call print_person (byte) main::henriette_id (const byte*) main::henriette_name -Replacing struct member reference (struct Person) print_person::person.id with member unwinding reference (byte) print_person::person_id -Replacing struct member reference (struct Person) print_person::person.name with member unwinding reference (byte*) print_person::person_name -Replacing struct member reference (struct Person) print_person::person.name with member unwinding reference (byte*) print_person::person_name CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-13.log b/src/test/ref/struct-13.log index 0329eba06..391f7c935 100644 --- a/src/test/ref/struct-13.log +++ b/src/test/ref/struct-13.log @@ -1,7 +1,3 @@ -Replacing struct member reference (struct Point) point.x with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point.y with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) point.x with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point.y with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-14.log b/src/test/ref/struct-14.log index 8a9ef1e68..bc86f5160 100644 --- a/src/test/ref/struct-14.log +++ b/src/test/ref/struct-14.log @@ -1,7 +1,3 @@ -Replacing struct member reference *((const struct Point*) points + (number~) main::$0).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (number~) main::$0) -Replacing struct member reference *((const struct Point*) points + (number~) main::$1).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (number~) main::$1) -Replacing struct member reference *((const struct Point*) points + (number~) main::$2).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (number~) main::$2) -Replacing struct member reference *((const struct Point*) points + (number~) main::$3).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (number~) main::$3) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-15.log b/src/test/ref/struct-15.log index b3be2e4f6..ccc2dbc57 100644 --- a/src/test/ref/struct-15.log +++ b/src/test/ref/struct-15.log @@ -1,9 +1,3 @@ -Adding value bulk copy *(&(struct Point) main::point1) ← memset(struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *(&(struct Point) main::point2) ← memcpy(*(&(struct Point) main::point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point1.y with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) main::point2.x with member unwinding reference *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point2.y with member unwinding reference *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-16.log b/src/test/ref/struct-16.log index 0f1a52611..df3a908f0 100644 --- a/src/test/ref/struct-16.log +++ b/src/test/ref/struct-16.log @@ -1,6 +1,3 @@ -Adding value bulk copy *(&(struct Point) main::point1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point1.y with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-17.log b/src/test/ref/struct-17.log index ce6a2b193..71ecd13c7 100644 --- a/src/test/ref/struct-17.log +++ b/src/test/ref/struct-17.log @@ -1,12 +1,3 @@ -Adding value bulk copy *(&(struct Vector) main::v) ← memset(struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) -Replacing struct member reference (struct Vector) main::v.p.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v.p.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v.q.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v.q.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v.p.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v.p.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v.q.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v.q.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-18.log b/src/test/ref/struct-18.log index 6ff28e2a4..405eaee6f 100644 --- a/src/test/ref/struct-18.log +++ b/src/test/ref/struct-18.log @@ -1,8 +1,3 @@ -Adding value bulk copy *(&(struct Vector) main::v) ← memcpy(*(&(const struct Vector) $0), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) -Replacing struct member reference (struct Vector) main::v.p.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v.p.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v.q.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v.q.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-19.log b/src/test/ref/struct-19.log index bc09730e7..c7dacf198 100644 --- a/src/test/ref/struct-19.log +++ b/src/test/ref/struct-19.log @@ -1,12 +1,3 @@ -Adding value bulk copy *(&(struct Vector) main::v) ← memset(struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) -Adding value bulk copy *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Vector) main::v.p.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v.p.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v.q.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v.q.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-2.log b/src/test/ref/struct-2.log index 23ad9ed9c..2a3bea2b5 100644 --- a/src/test/ref/struct-2.log +++ b/src/test/ref/struct-2.log @@ -1,11 +1,3 @@ -Adding value bulk copy *(&(struct Point) point2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Point) point1.x with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point1.y with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) point2.x with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point1.x with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point1.y with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) point2.x with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point2.y with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-20.log b/src/test/ref/struct-20.log index 788820ab0..5a2d24692 100644 --- a/src/test/ref/struct-20.log +++ b/src/test/ref/struct-20.log @@ -1,12 +1,3 @@ -Adding value bulk copy *(&(struct Point) main::p1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *(&(struct Point) main::p2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Unwinding value copy (struct Vector) main::v ← (struct Vector){ (struct Point) main::p1, (struct Point) main::p2 } -Adding value bulk copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*(&(struct Point) main::p1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(struct Point) main::p2), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Vector) main::v.p.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v.p.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v.q.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v.q.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-21.log b/src/test/ref/struct-21.log index 463fd4ea3..96a0cb908 100644 --- a/src/test/ref/struct-21.log +++ b/src/test/ref/struct-21.log @@ -1,7 +1,4 @@ Setting struct to load/store in variable affected by address-of (struct Point*) main::ptr ← &(struct Point) main::point1 -Adding value bulk copy *(&(struct Point) main::point1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference *((struct Point*) main::ptr).x with member unwinding reference *((byte*~) main::$0) -Replacing struct member reference *((struct Point*) main::ptr).y with member unwinding reference *((byte*~) main::$1) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-22.log b/src/test/ref/struct-22.log index 4ce260093..c20fcf882 100644 --- a/src/test/ref/struct-22.log +++ b/src/test/ref/struct-22.log @@ -1,13 +1,3 @@ -Created struct value member variable (byte) print::p_x -Created struct value member variable (byte) print::p_y -Converted struct value to member variables (struct Point) print::p -Converted procedure struct value parameter to member unwinding (void()) print((byte) print::p_x , (byte) print::p_y) -Adding value bulk copy *(&(struct Point) main::point1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *(&(struct Point) main::point2) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Converted call struct value parameter to member unwinding (void~) main::$0 ← call print *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) -Converted call struct value parameter to member unwinding (void~) main::$1 ← call print *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x -Replacing struct member reference (struct Point) print::p.y with member unwinding reference (byte) print::p_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-23.log b/src/test/ref/struct-23.log index b54c3415b..ac1cf753c 100644 --- a/src/test/ref/struct-23.log +++ b/src/test/ref/struct-23.log @@ -1,37 +1,3 @@ -Created struct value member variable (byte~) main::$0_x -Created struct value member variable (byte~) main::$0_y -Converted struct value to member variables (struct Point~) main::$0 -Created struct value member variable (byte~) main::$1_x -Created struct value member variable (byte~) main::$1_y -Converted struct value to member variables (struct Point~) main::$1 -Created struct value member variable (byte) getPoint::return_x -Created struct value member variable (byte) getPoint::return_y -Converted struct value to member variables (struct Point) getPoint::return -Created struct value member variable (byte) getPoint::p_x -Created struct value member variable (byte) getPoint::p_y -Converted struct value to member variables (struct Point) getPoint::p -Converted procedure call LValue to member unwinding { (byte~) main::$0_x, (byte~) main::$0_y } ← call getPoint (number) 2 (number) 3 -Unwinding value copy (struct Point) main::point1 ← (struct Point~) main::$0 -Adding value simple copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) ← (byte~) main::$0_x -Adding value simple copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte~) main::$0_y -Converted procedure call LValue to member unwinding { (byte~) main::$1_x, (byte~) main::$1_y } ← call getPoint (number) 4 (number) 5 -Unwinding value copy (struct Point) main::point2 ← (struct Point~) main::$1 -Adding value simple copy *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) ← (byte~) main::$1_x -Adding value simple copy *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte~) main::$1_y -Unwinding value copy (struct Point) getPoint::p ← (struct Point){ (byte) getPoint::x, (byte) getPoint::y } -Adding value simple copy (byte) getPoint::p_x ← (byte) getPoint::x -Adding value simple copy (byte) getPoint::p_y ← (byte) getPoint::y -Unwinding value copy (struct Point) getPoint::return ← (struct Point) getPoint::p -Adding value simple copy (byte) getPoint::return_x ← (byte) getPoint::p_x -Adding value simple copy (byte) getPoint::return_y ← (byte) getPoint::p_y -Unwinding value copy (struct Point) getPoint::return ← (struct Point) getPoint::return -Adding value simple copy (byte) getPoint::return_x ← (byte) getPoint::return_x -Adding value simple copy (byte) getPoint::return_y ← (byte) getPoint::return_y -Converted procedure struct return value to member unwinding return { (byte) getPoint::return_x, (byte) getPoint::return_y } -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point1.y with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) main::point2.x with member unwinding reference *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point2.y with member unwinding reference *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y) Eliminating unused variable with no statement (struct Point~) main::$0 Eliminating unused variable with no statement (struct Point~) main::$1 Unwinding list assignment { (byte~) main::$0_x, (byte~) main::$0_y } ← { (byte) getPoint::return_x, (byte) getPoint::return_y } diff --git a/src/test/ref/struct-24.log b/src/test/ref/struct-24.log index 417f7ea24..0410bf4b9 100644 --- a/src/test/ref/struct-24.log +++ b/src/test/ref/struct-24.log @@ -1,13 +1,6 @@ Fixing struct type size struct Point to 3 Fixing struct type SIZE_OF struct Point to 3 Fixing struct type SIZE_OF struct Point to 3 -Adding value bulk copy *(&(struct Point) main::point1) ← memset(struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-26.log b/src/test/ref/struct-26.log index 9675de280..e7aca5192 100644 --- a/src/test/ref/struct-26.log +++ b/src/test/ref/struct-26.log @@ -2,14 +2,6 @@ Fixing struct type size struct Point to 3 Fixing struct type size struct Point to 3 Fixing struct type SIZE_OF struct Point to 3 Fixing struct type SIZE_OF struct Point to 3 -Adding value bulk copy *(&(struct Point) main::point1) ← memset(struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *(&(struct Point) main::point2) ← memcpy(*(&(struct Point) main::point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS -Replacing struct member reference (struct Point) main::point2.x with member unwinding reference *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point2.initials with member unwinding reference (byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_INITIALS -Replacing struct member reference (struct Point) main::point2.initials with member unwinding reference (byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_INITIALS CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-27.log b/src/test/ref/struct-27.log index 8b1dc03ef..6d2c4e042 100644 --- a/src/test/ref/struct-27.log +++ b/src/test/ref/struct-27.log @@ -1,10 +1,6 @@ Fixing struct type size struct Point to 4 Fixing struct type SIZE_OF struct Point to 4 Fixing struct type SIZE_OF struct Point to 4 -Adding value bulk copy *(&(struct Point) main::point1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-28.log b/src/test/ref/struct-28.log index f55bd0dc6..f36ed2677 100644 --- a/src/test/ref/struct-28.log +++ b/src/test/ref/struct-28.log @@ -1,10 +1,6 @@ Fixing struct type size struct Point to 3 Fixing struct type SIZE_OF struct Point to 3 Fixing struct type SIZE_OF struct Point to 3 -Adding value bulk copy *(&(struct Point) main::point1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-29.log b/src/test/ref/struct-29.log index e5b3444c2..6c3640432 100644 --- a/src/test/ref/struct-29.log +++ b/src/test/ref/struct-29.log @@ -1,9 +1,6 @@ Fixing struct type size struct Point to 3 Fixing struct type SIZE_OF struct Point to 3 Fixing struct type SIZE_OF struct Point to 3 -Replacing struct member reference (struct Point) point1.x with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point1.initials with member unwinding reference (byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_INITIALS -Replacing struct member reference (struct Point) point1.initials with member unwinding reference (byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_INITIALS CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-3.log b/src/test/ref/struct-3.log index b82a91797..73d1022d1 100644 --- a/src/test/ref/struct-3.log +++ b/src/test/ref/struct-3.log @@ -1,20 +1,3 @@ -Created struct value member variable (byte) main::p1_x -Created struct value member variable (byte) main::p1_y -Converted struct value to member variables (struct Point) main::p1 -Created struct value member variable (byte) print::p_x -Created struct value member variable (byte) print::p_y -Converted struct value to member variables (struct Point) print::p -Converted procedure struct value parameter to member unwinding (void()) print((byte) print::p_x , (byte) print::p_y) -Unwinding value copy (struct Point) main::p1 ← {} -Adding value simple copy (byte) main::p1_x ← (byte) 0 -Adding value simple copy (byte) main::p1_y ← (byte) 0 -Converted call struct value parameter to member unwinding (void~) main::$0 ← call print (byte) main::p1_x (byte) main::p1_y -Converted call struct value parameter to member unwinding (void~) main::$1 ← call print (byte) main::p1_x (byte) main::p1_y -Replacing struct member reference (struct Point) main::p1.x with member unwinding reference (byte) main::p1_x -Replacing struct member reference (struct Point) main::p1.y with member unwinding reference (byte) main::p1_y -Replacing struct member reference (struct Point) main::p1.x with member unwinding reference (byte) main::p1_x -Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x -Replacing struct member reference (struct Point) print::p.y with member unwinding reference (byte) print::p_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-30.log b/src/test/ref/struct-30.log index 13e2af997..9b17a6cee 100644 --- a/src/test/ref/struct-30.log +++ b/src/test/ref/struct-30.log @@ -1,15 +1,6 @@ Fixing struct type size struct Point to 4 Fixing struct type SIZE_OF struct Point to 4 Fixing struct type SIZE_OF struct Point to 4 -Created struct value member variable (byte) main::point1_x -Created struct value member variable (const byte*) main::point1_initials -Converted struct value to member variables (struct Point) main::point1 -Unwinding value copy (struct Point) main::point1 ← { x: (byte) 2, initials: (byte*) "jg" } -Adding value simple copy (byte) main::point1_x ← (byte) 2 -Adding value bulk copy *((const byte*) main::point1_initials) ← memcpy(*(&(const byte*) $0), byte, (number) 3) -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference (byte) main::point1_x -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (const byte*) main::point1_initials -Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (const byte*) main::point1_initials CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-31.log b/src/test/ref/struct-31.log index 6542d833c..2c7834c9b 100644 --- a/src/test/ref/struct-31.log +++ b/src/test/ref/struct-31.log @@ -1,11 +1,3 @@ -Created struct value member variable (byte) main::point1_x -Created struct value member variable (byte) main::point1_y -Converted struct value to member variables (struct Point) main::point1 -Unwinding value copy (struct Point) main::point1 ← { x: (byte) 2, y: (byte) 3 } -Adding value simple copy (byte) main::point1_x ← (byte) 2 -Adding value simple copy (byte) main::point1_y ← (byte) 3 -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference (byte) main::point1_x -Replacing struct member reference (struct Point) main::point1.y with member unwinding reference (byte) main::point1_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-32.log b/src/test/ref/struct-32.log index cf4d420d3..925a8942e 100644 --- a/src/test/ref/struct-32.log +++ b/src/test/ref/struct-32.log @@ -1,9 +1,3 @@ -Adding value bulk copy *(&(struct Point) main::point1) ← memset(struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *(&(struct Point) main::point2) ← memcpy(*(&(struct Point) main::point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point1.y with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) main::point2.x with member unwinding reference *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) main::point2.y with member unwinding reference *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-33.log b/src/test/ref/struct-33.log index 0329eba06..391f7c935 100644 --- a/src/test/ref/struct-33.log +++ b/src/test/ref/struct-33.log @@ -1,7 +1,3 @@ -Replacing struct member reference (struct Point) point.x with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point.y with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Point) point.x with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point.y with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-34.log b/src/test/ref/struct-34.log index e3d517527..c2bc48470 100644 --- a/src/test/ref/struct-34.log +++ b/src/test/ref/struct-34.log @@ -1,13 +1,3 @@ -Created struct value member variable (byte) point_x -Created struct value member variable (byte) point_y -Converted struct value to member variables (struct Point) point -Unwinding value copy (struct Point) point ← {} -Adding value simple copy (byte) point_x ← (byte) 0 -Adding value simple copy (byte) point_y ← (byte) 0 -Replacing struct member reference (struct Point) point.x with member unwinding reference (byte) point_x -Replacing struct member reference (struct Point) point.y with member unwinding reference (byte) point_y -Replacing struct member reference (struct Point) point.x with member unwinding reference (byte) point_x -Replacing struct member reference (struct Point) point.y with member unwinding reference (byte) point_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-35.log b/src/test/ref/struct-35.log index c0432a135..70fe399ba 100644 --- a/src/test/ref/struct-35.log +++ b/src/test/ref/struct-35.log @@ -1,7 +1,4 @@ Setting struct to load/store in variable affected by address-of (struct Point*) main::p2 ← &(struct Point) point2 -Adding value bulk copy *((struct Point*) main::p2) ← memcpy(*(&(struct Point) point1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference (struct Point) point2.x with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point2.y with member unwinding reference *((byte*)&(struct Point) point2+(const byte) OFFSET_STRUCT_POINT_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-36.log b/src/test/ref/struct-36.log index 9e3c658bd..088faefba 100644 --- a/src/test/ref/struct-36.log +++ b/src/test/ref/struct-36.log @@ -1,9 +1,6 @@ Fixing struct type size struct Point to 3 Fixing struct type SIZE_OF struct Point to 3 Fixing struct type SIZE_OF struct Point to 3 -Replacing struct member reference (struct Point) point1.x with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Point) point1.initials with member unwinding reference (byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_INITIALS -Replacing struct member reference (struct Point) point1.initials with member unwinding reference (byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_INITIALS CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-37.log b/src/test/ref/struct-37.log index 8b0bf9970..b5d99bc75 100644 --- a/src/test/ref/struct-37.log +++ b/src/test/ref/struct-37.log @@ -1,11 +1,3 @@ -Created struct value member variable (byte) main::to_x -Created struct value member variable (byte) main::to_y -Converted struct value to member variables (struct SplineVector16) main::to -Unwinding value copy (struct SplineVector16) main::to ← *((const struct Segment*) letter_c + (byte~) main::$1).to -Adding value simple copy (byte) main::to_x ← *((byte*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) main::$1) -Adding value simple copy (byte) main::to_y ← *((byte*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) main::$1) -Replacing struct member reference (struct SplineVector16) main::to.x with member unwinding reference (byte) main::to_x -Replacing struct member reference (struct SplineVector16) main::to.y with member unwinding reference (byte) main::to_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-38.log b/src/test/ref/struct-38.log index 948a8a356..2aa62fcec 100644 --- a/src/test/ref/struct-38.log +++ b/src/test/ref/struct-38.log @@ -1,11 +1,3 @@ -Created struct value member variable (signed word) main::to_x -Created struct value member variable (signed word) main::to_y -Converted struct value to member variables (struct SplineVector16) main::to -Unwinding value copy (struct SplineVector16) main::to ← *((const struct Segment*) letter_c + (byte~) main::$1).to -Adding value simple copy (signed word) main::to_x ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_X + (byte~) main::$1) -Adding value simple copy (signed word) main::to_y ← *((signed word*)(struct SplineVector16*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO+(const byte) OFFSET_STRUCT_SPLINEVECTOR16_Y + (byte~) main::$1) -Replacing struct member reference (struct SplineVector16) main::to.x with member unwinding reference (signed word) main::to_x -Replacing struct member reference (struct SplineVector16) main::to.y with member unwinding reference (signed word) main::to_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-39.log b/src/test/ref/struct-39.log index e9bd80ffc..f6673a71e 100644 --- a/src/test/ref/struct-39.log +++ b/src/test/ref/struct-39.log @@ -1,6 +1,3 @@ -Adding value bulk copy *(&(struct Vector) main::to) ← memcpy(*((struct Vector*)(const struct Segment*) letter_c+(const byte) OFFSET_STRUCT_SEGMENT_TO + (byte~) main::$1), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) -Replacing struct member reference (struct Vector) main::to.x with member unwinding reference *((signed word*)&(struct Vector) main::to+(const byte) OFFSET_STRUCT_VECTOR_X) -Replacing struct member reference (struct Vector) main::to.y with member unwinding reference *((signed word*)&(struct Vector) main::to+(const byte) OFFSET_STRUCT_VECTOR_Y) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-4.log b/src/test/ref/struct-4.log index f2c0e7a74..bd21f4bef 100644 --- a/src/test/ref/struct-4.log +++ b/src/test/ref/struct-4.log @@ -1,11 +1,3 @@ -Created struct value member variable (byte) main::p_x -Created struct value member variable (byte) main::p_y -Converted struct value to member variables (struct Point) main::p -Unwinding value copy (struct Point) main::p ← (struct Point){ (byte) main::x, (number~) main::$0 } -Adding value simple copy (byte) main::p_x ← (byte) main::x -Adding value simple copy (byte) main::p_y ← (number~) main::$0 -Replacing struct member reference (struct Point) main::p.x with member unwinding reference (byte) main::p_x -Replacing struct member reference (struct Point) main::p.y with member unwinding reference (byte) main::p_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-40.log b/src/test/ref/struct-40.log index 06fe8523f..8ac6351d7 100644 --- a/src/test/ref/struct-40.log +++ b/src/test/ref/struct-40.log @@ -1,83 +1,3 @@ -Created struct value member variable (struct Point) main::v1_p -Created struct value member variable (struct Point) main::v1_q -Converted struct value to member variables (struct Vector) main::v1 -Created struct value member variable (struct Point) main::v2_p -Created struct value member variable (struct Point) main::v2_q -Converted struct value to member variables (struct Vector) main::v2 -Created struct value member variable (struct Point) main::v3_p -Created struct value member variable (struct Point) main::v3_q -Converted struct value to member variables (struct Vector) main::v3 -Created struct value member variable (struct Point) main::v4_p -Created struct value member variable (struct Point) main::v4_q -Converted struct value to member variables (struct Vector) main::v4 -Created struct value member variable (byte) main::v1_p_x -Created struct value member variable (byte) main::v1_p_y -Converted struct value to member variables (struct Point) main::v1_p -Created struct value member variable (byte) main::v1_q_x -Created struct value member variable (byte) main::v1_q_y -Converted struct value to member variables (struct Point) main::v1_q -Created struct value member variable (byte) main::v2_p_x -Created struct value member variable (byte) main::v2_p_y -Converted struct value to member variables (struct Point) main::v2_p -Created struct value member variable (byte) main::v2_q_x -Created struct value member variable (byte) main::v2_q_y -Converted struct value to member variables (struct Point) main::v2_q -Created struct value member variable (byte) main::v3_p_x -Created struct value member variable (byte) main::v3_p_y -Converted struct value to member variables (struct Point) main::v3_p -Created struct value member variable (byte) main::v3_q_x -Created struct value member variable (byte) main::v3_q_y -Converted struct value to member variables (struct Point) main::v3_q -Created struct value member variable (byte) main::v4_p_x -Created struct value member variable (byte) main::v4_p_y -Converted struct value to member variables (struct Point) main::v4_p -Created struct value member variable (byte) main::v4_q_x -Created struct value member variable (byte) main::v4_q_y -Converted struct value to member variables (struct Point) main::v4_q -Unwinding value copy (struct Vector) main::v1 ← { p: { x: (byte) 2, y: (byte) 3 }, q: { x: (byte) 4, y: (byte) 5 } } -Unwinding value copy (struct Vector) main::v1 ← { p: { x: (byte) 2, y: (byte) 3 }, q: { x: (byte) 4, y: (byte) 5 } } -Adding value simple copy (byte) main::v1_p_x ← (byte) 2 -Adding value simple copy (byte) main::v1_p_y ← (byte) 3 -Unwinding value copy (struct Vector) main::v1 ← { p: { x: (byte) 2, y: (byte) 3 }, q: { x: (byte) 4, y: (byte) 5 } } -Adding value simple copy (byte) main::v1_q_x ← (byte) 4 -Adding value simple copy (byte) main::v1_q_y ← (byte) 5 -Unwinding value copy (struct Vector) main::v2 ← (struct Vector) main::v1 -Unwinding value copy (struct Vector) main::v2 ← (struct Vector) main::v1 -Adding value simple copy (byte) main::v2_p_x ← (byte) main::v1_p_x -Adding value simple copy (byte) main::v2_p_y ← (byte) main::v1_p_y -Unwinding value copy (struct Vector) main::v2 ← (struct Vector) main::v1 -Adding value simple copy (byte) main::v2_q_x ← (byte) main::v1_q_x -Adding value simple copy (byte) main::v2_q_y ← (byte) main::v1_q_y -Unwinding value copy (struct Vector) main::v3 ← (struct Vector){ (struct Vector) main::v1.p, { x: (byte) 6, y: (byte) 7 } } -Unwinding value copy (struct Vector) main::v3 ← (struct Vector){ (struct Vector) main::v1.p, { x: (byte) 6, y: (byte) 7 } } -Adding value simple copy (byte) main::v3_p_x ← (byte) main::v1_p_x -Adding value simple copy (byte) main::v3_p_y ← (byte) main::v1_p_y -Unwinding value copy (struct Vector) main::v3 ← (struct Vector){ (struct Vector) main::v1.p, { x: (byte) 6, y: (byte) 7 } } -Adding value simple copy (byte) main::v3_q_x ← (byte) 6 -Adding value simple copy (byte) main::v3_q_y ← (byte) 7 -Unwinding value copy (struct Vector) main::v4 ← (struct Vector){ (struct Point){ (struct Vector) main::v1.p.x, (struct Vector) main::v1.p.y }, { x: (byte) 8, y: (byte) 9 } } -Unwinding value copy (struct Vector) main::v4 ← (struct Vector){ (struct Point){ (struct Vector) main::v1.p.x, (struct Vector) main::v1.p.y }, { x: (byte) 8, y: (byte) 9 } } -Adding value simple copy (byte) main::v4_p_x ← (byte) main::v1_p_x -Adding value simple copy (byte) main::v4_p_y ← (byte) main::v1_p_y -Unwinding value copy (struct Vector) main::v4 ← (struct Vector){ (struct Point){ (struct Vector) main::v1.p.x, (struct Vector) main::v1.p.y }, { x: (byte) 8, y: (byte) 9 } } -Adding value simple copy (byte) main::v4_q_x ← (byte) 8 -Adding value simple copy (byte) main::v4_q_y ← (byte) 9 -Replacing struct member reference (struct Vector) main::v1.p.x with member unwinding reference (byte) main::v1_p_x -Replacing struct member reference (struct Vector) main::v1.p.y with member unwinding reference (byte) main::v1_p_y -Replacing struct member reference (struct Vector) main::v1.q.x with member unwinding reference (byte) main::v1_q_x -Replacing struct member reference (struct Vector) main::v1.q.y with member unwinding reference (byte) main::v1_q_y -Replacing struct member reference (struct Vector) main::v2.p.x with member unwinding reference (byte) main::v2_p_x -Replacing struct member reference (struct Vector) main::v2.p.y with member unwinding reference (byte) main::v2_p_y -Replacing struct member reference (struct Vector) main::v2.q.x with member unwinding reference (byte) main::v2_q_x -Replacing struct member reference (struct Vector) main::v2.q.y with member unwinding reference (byte) main::v2_q_y -Replacing struct member reference (struct Vector) main::v3.p.x with member unwinding reference (byte) main::v3_p_x -Replacing struct member reference (struct Vector) main::v3.p.y with member unwinding reference (byte) main::v3_p_y -Replacing struct member reference (struct Vector) main::v3.q.x with member unwinding reference (byte) main::v3_q_x -Replacing struct member reference (struct Vector) main::v3.q.y with member unwinding reference (byte) main::v3_q_y -Replacing struct member reference (struct Vector) main::v4.p.x with member unwinding reference (byte) main::v4_p_x -Replacing struct member reference (struct Vector) main::v4.p.y with member unwinding reference (byte) main::v4_p_y -Replacing struct member reference (struct Vector) main::v4.q.x with member unwinding reference (byte) main::v4_q_x -Replacing struct member reference (struct Vector) main::v4.q.y with member unwinding reference (byte) main::v4_q_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-41.log b/src/test/ref/struct-41.log index c9e318d82..df8a9b277 100644 --- a/src/test/ref/struct-41.log +++ b/src/test/ref/struct-41.log @@ -1,66 +1,3 @@ -Created struct value member variable (struct Point) main::v1_p -Created struct value member variable (struct Point) main::v1_q -Converted struct value to member variables (struct Vector) main::v1 -Created struct value member variable (struct Point) main::v5_p -Created struct value member variable (struct Point) main::v5_q -Converted struct value to member variables (struct Vector) main::v5 -Created struct value member variable (byte) main::v1_p_x -Created struct value member variable (byte) main::v1_p_y -Converted struct value to member variables (struct Point) main::v1_p -Created struct value member variable (byte) main::v1_q_x -Created struct value member variable (byte) main::v1_q_y -Converted struct value to member variables (struct Point) main::v1_q -Created struct value member variable (byte) main::v5_p_x -Created struct value member variable (byte) main::v5_p_y -Converted struct value to member variables (struct Point) main::v5_p -Created struct value member variable (byte) main::v5_q_x -Created struct value member variable (byte) main::v5_q_y -Converted struct value to member variables (struct Point) main::v5_q -Unwinding value copy (struct Vector) main::v1 ← { p: { x: (byte) 2, y: (byte) 3 }, q: { x: (byte) 4, y: (byte) 5 } } -Unwinding value copy (struct Vector) main::v1 ← { p: { x: (byte) 2, y: (byte) 3 }, q: { x: (byte) 4, y: (byte) 5 } } -Adding value simple copy (byte) main::v1_p_x ← (byte) 2 -Adding value simple copy (byte) main::v1_p_y ← (byte) 3 -Unwinding value copy (struct Vector) main::v1 ← { p: { x: (byte) 2, y: (byte) 3 }, q: { x: (byte) 4, y: (byte) 5 } } -Adding value simple copy (byte) main::v1_q_x ← (byte) 4 -Adding value simple copy (byte) main::v1_q_y ← (byte) 5 -Unwinding value copy (struct Vector) main::v2 ← (struct Vector) main::v1 -Unwinding value copy (struct Vector) main::v2 ← (struct Vector) main::v1 -Adding value simple copy *((byte*)(struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) main::v1_p_x -Adding value simple copy *((byte*)(struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) main::v1_p_y -Unwinding value copy (struct Vector) main::v2 ← (struct Vector) main::v1 -Adding value simple copy *((byte*)(struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_X) ← (byte) main::v1_q_x -Adding value simple copy *((byte*)(struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) main::v1_q_y -Unwinding value copy (struct Vector) main::v3 ← (struct Vector){ (struct Vector) main::v2.p, { x: (byte) 6, y: (byte) 7 } } -Adding value bulk copy *((struct Point*)&(struct Vector) main::v3+(const byte) OFFSET_STRUCT_VECTOR_P) ← memcpy(*((struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_P), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *((struct Point*)&(struct Vector) main::v3+(const byte) OFFSET_STRUCT_VECTOR_Q) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *(&(struct Vector) main::v4) ← memcpy(*(&(struct Vector) main::v3), struct Vector, (const byte) SIZEOF_STRUCT_VECTOR) -Unwinding value copy (struct Vector) main::v5 ← (struct Vector){ (struct Point){ (struct Vector) main::v4.p.x, (struct Vector) main::v4.p.y }, { x: (byte) 8, y: (byte) 9 } } -Unwinding value copy (struct Vector) main::v5 ← (struct Vector){ (struct Point){ (struct Vector) main::v4.p.x, (struct Vector) main::v4.p.y }, { x: (byte) 8, y: (byte) 9 } } -Adding value simple copy (byte) main::v5_p_x ← *((byte*)(struct Point*)&(struct Vector) main::v4+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_X) -Adding value simple copy (byte) main::v5_p_y ← *((byte*)(struct Point*)&(struct Vector) main::v4+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_Y) -Unwinding value copy (struct Vector) main::v5 ← (struct Vector){ (struct Point){ (struct Vector) main::v4.p.x, (struct Vector) main::v4.p.y }, { x: (byte) 8, y: (byte) 9 } } -Adding value simple copy (byte) main::v5_q_x ← (byte) 8 -Adding value simple copy (byte) main::v5_q_y ← (byte) 9 -Replacing struct member reference (struct Vector) main::v1.p.x with member unwinding reference (byte) main::v1_p_x -Replacing struct member reference (struct Vector) main::v1.p.y with member unwinding reference (byte) main::v1_p_y -Replacing struct member reference (struct Vector) main::v1.q.x with member unwinding reference (byte) main::v1_q_x -Replacing struct member reference (struct Vector) main::v1.q.y with member unwinding reference (byte) main::v1_q_y -Replacing struct member reference (struct Vector) main::v2.p.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v2.p.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v2.q.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v2.q.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v2+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v3.p.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v3+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v3.p.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v3+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v3.q.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v3+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v3.q.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v3+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v4.p.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v4+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v4.p.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v4+(const byte) OFFSET_STRUCT_VECTOR_P+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v4.q.x with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v4+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_X) -Replacing struct member reference (struct Vector) main::v4.q.y with member unwinding reference *((byte*)(struct Point*)&(struct Vector) main::v4+(const byte) OFFSET_STRUCT_VECTOR_Q+(const byte) OFFSET_STRUCT_POINT_Y) -Replacing struct member reference (struct Vector) main::v5.p.x with member unwinding reference (byte) main::v5_p_x -Replacing struct member reference (struct Vector) main::v5.p.y with member unwinding reference (byte) main::v5_p_y -Replacing struct member reference (struct Vector) main::v5.q.x with member unwinding reference (byte) main::v5_q_x -Replacing struct member reference (struct Vector) main::v5.q.y with member unwinding reference (byte) main::v5_q_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-42.log b/src/test/ref/struct-42.log index 7b0e27ae6..aa24a9a6e 100644 --- a/src/test/ref/struct-42.log +++ b/src/test/ref/struct-42.log @@ -1,7 +1,4 @@ Constantified RValue *((const struct Point*) points + (byte~) main::$1) ← { x: (byte) 2, y: (byte) 3 } -Adding value bulk copy *((const struct Point*) points + (byte~) main::$1) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference *((const struct Point*) points + (number~) main::$2).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (number~) main::$2) -Replacing struct member reference *((const struct Point*) points + (number~) main::$3).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (number~) main::$3) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-5.log b/src/test/ref/struct-5.log index c4fcd095c..026a23f64 100644 --- a/src/test/ref/struct-5.log +++ b/src/test/ref/struct-5.log @@ -1,34 +1,3 @@ -Created struct value member variable (byte) main::q_x -Created struct value member variable (byte) main::q_y -Converted struct value to member variables (struct Point) main::q -Created struct value member variable (byte~) main::$0_x -Created struct value member variable (byte~) main::$0_y -Converted struct value to member variables (struct Point~) main::$0 -Created struct value member variable (byte) point::return_x -Created struct value member variable (byte) point::return_y -Converted struct value to member variables (struct Point) point::return -Created struct value member variable (byte) point::p_x -Created struct value member variable (byte) point::p_y -Converted struct value to member variables (struct Point) point::p -Unwinding value copy (struct Point) main::q ← {} -Adding value simple copy (byte) main::q_x ← (byte) 0 -Adding value simple copy (byte) main::q_y ← (byte) 0 -Converted procedure call LValue to member unwinding { (byte~) main::$0_x, (byte~) main::$0_y } ← call point -Unwinding value copy (struct Point) main::q ← (struct Point~) main::$0 -Adding value simple copy (byte) main::q_x ← (byte~) main::$0_x -Adding value simple copy (byte) main::q_y ← (byte~) main::$0_y -Unwinding value copy (struct Point) point::p ← { x: (byte) 2, y: (byte) 3 } -Adding value simple copy (byte) point::p_x ← (byte) 2 -Adding value simple copy (byte) point::p_y ← (byte) 3 -Unwinding value copy (struct Point) point::return ← (struct Point) point::p -Adding value simple copy (byte) point::return_x ← (byte) point::p_x -Adding value simple copy (byte) point::return_y ← (byte) point::p_y -Unwinding value copy (struct Point) point::return ← (struct Point) point::return -Adding value simple copy (byte) point::return_x ← (byte) point::return_x -Adding value simple copy (byte) point::return_y ← (byte) point::return_y -Converted procedure struct return value to member unwinding return { (byte) point::return_x, (byte) point::return_y } -Replacing struct member reference (struct Point) main::q.x with member unwinding reference (byte) main::q_x -Replacing struct member reference (struct Point) main::q.y with member unwinding reference (byte) main::q_y Eliminating unused variable with no statement (struct Point~) main::$0 Unwinding list assignment { (byte~) main::$0_x, (byte~) main::$0_y } ← { (byte) point::return_x, (byte) point::return_y } Unwinding list assignment { (byte) point::return_x#0, (byte) point::return_y#0 } ← { (byte) point::return_x#2, (byte) point::return_y#2 } diff --git a/src/test/ref/struct-6.log b/src/test/ref/struct-6.log index a3e2a6122..899544fe0 100644 --- a/src/test/ref/struct-6.log +++ b/src/test/ref/struct-6.log @@ -1,23 +1,3 @@ -Created struct value member variable (byte) main::p_x -Created struct value member variable (byte) main::p_y -Converted struct value to member variables (struct Point) main::p -Created struct value member variable (struct Point) main::c_center -Created struct value member variable (byte) main::c_radius -Converted struct value to member variables (struct Circle) main::c -Created struct value member variable (byte) main::c_center_x -Created struct value member variable (byte) main::c_center_y -Converted struct value to member variables (struct Point) main::c_center -Unwinding value copy (struct Point) main::p ← { x: (byte) $a, y: (byte) $a } -Adding value simple copy (byte) main::p_x ← (byte) $a -Adding value simple copy (byte) main::p_y ← (byte) $a -Unwinding value copy (struct Circle) main::c ← (struct Circle){ (struct Point) main::p, (byte) 5 } -Unwinding value copy (struct Circle) main::c ← (struct Circle){ (struct Point) main::p, (byte) 5 } -Adding value simple copy (byte) main::c_center_x ← (byte) main::p_x -Adding value simple copy (byte) main::c_center_y ← (byte) main::p_y -Adding value simple copy (byte) main::c_radius ← (byte) 5 -Replacing struct member reference (struct Circle) main::c.center.x with member unwinding reference (byte) main::c_center_x -Replacing struct member reference (struct Circle) main::c.center.y with member unwinding reference (byte) main::c_center_y -Replacing struct member reference (struct Circle) main::c.radius with member unwinding reference (byte) main::c_radius CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-7.log b/src/test/ref/struct-7.log index 564edf675..ba63c9251 100644 --- a/src/test/ref/struct-7.log +++ b/src/test/ref/struct-7.log @@ -1,35 +1,3 @@ -Created struct value member variable (struct Circle) main::t_c1 -Created struct value member variable (struct Circle) main::t_c2 -Converted struct value to member variables (struct TwoCircles) main::t -Created struct value member variable (struct Point) main::t_c1_center -Created struct value member variable (byte) main::t_c1_radius -Converted struct value to member variables (struct Circle) main::t_c1 -Created struct value member variable (struct Point) main::t_c2_center -Created struct value member variable (byte) main::t_c2_radius -Converted struct value to member variables (struct Circle) main::t_c2 -Created struct value member variable (byte) main::t_c1_center_x -Created struct value member variable (byte) main::t_c1_center_y -Converted struct value to member variables (struct Point) main::t_c1_center -Created struct value member variable (byte) main::t_c2_center_x -Created struct value member variable (byte) main::t_c2_center_y -Converted struct value to member variables (struct Point) main::t_c2_center -Unwinding value copy (struct TwoCircles) main::t ← { c1: { center: { x: (byte) 1, y: (byte) 2 }, radius: (byte) 3 }, c2: { center: { x: (byte) 4, y: (byte) 5 }, radius: (byte) 6 } } -Unwinding value copy (struct TwoCircles) main::t ← { c1: { center: { x: (byte) 1, y: (byte) 2 }, radius: (byte) 3 }, c2: { center: { x: (byte) 4, y: (byte) 5 }, radius: (byte) 6 } } -Unwinding value copy (struct TwoCircles) main::t ← { c1: { center: { x: (byte) 1, y: (byte) 2 }, radius: (byte) 3 }, c2: { center: { x: (byte) 4, y: (byte) 5 }, radius: (byte) 6 } } -Adding value simple copy (byte) main::t_c1_center_x ← (byte) 1 -Adding value simple copy (byte) main::t_c1_center_y ← (byte) 2 -Adding value simple copy (byte) main::t_c1_radius ← (byte) 3 -Unwinding value copy (struct TwoCircles) main::t ← { c1: { center: { x: (byte) 1, y: (byte) 2 }, radius: (byte) 3 }, c2: { center: { x: (byte) 4, y: (byte) 5 }, radius: (byte) 6 } } -Unwinding value copy (struct TwoCircles) main::t ← { c1: { center: { x: (byte) 1, y: (byte) 2 }, radius: (byte) 3 }, c2: { center: { x: (byte) 4, y: (byte) 5 }, radius: (byte) 6 } } -Adding value simple copy (byte) main::t_c2_center_x ← (byte) 4 -Adding value simple copy (byte) main::t_c2_center_y ← (byte) 5 -Adding value simple copy (byte) main::t_c2_radius ← (byte) 6 -Replacing struct member reference (struct TwoCircles) main::t.c1.center.x with member unwinding reference (byte) main::t_c1_center_x -Replacing struct member reference (struct TwoCircles) main::t.c1.center.y with member unwinding reference (byte) main::t_c1_center_y -Replacing struct member reference (struct TwoCircles) main::t.c1.radius with member unwinding reference (byte) main::t_c1_radius -Replacing struct member reference (struct TwoCircles) main::t.c2.center.x with member unwinding reference (byte) main::t_c2_center_x -Replacing struct member reference (struct TwoCircles) main::t.c2.center.y with member unwinding reference (byte) main::t_c2_center_y -Replacing struct member reference (struct TwoCircles) main::t.c2.radius with member unwinding reference (byte) main::t_c2_radius CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-8.log b/src/test/ref/struct-8.log index a11590727..b4dea2cda 100644 --- a/src/test/ref/struct-8.log +++ b/src/test/ref/struct-8.log @@ -1,29 +1,3 @@ -Created struct value member variable (byte) main::p_x -Created struct value member variable (byte) main::p_y -Converted struct value to member variables (struct Point) main::p -Created struct value member variable (struct Point) main::c_center -Created struct value member variable (byte) main::c_radius -Converted struct value to member variables (struct Circle) main::c -Created struct value member variable (byte) main::point_x -Created struct value member variable (byte) main::point_y -Converted struct value to member variables (struct Point) main::point -Created struct value member variable (byte) main::c_center_x -Created struct value member variable (byte) main::c_center_y -Converted struct value to member variables (struct Point) main::c_center -Unwinding value copy (struct Point) main::p ← { x: (byte) $a, y: (byte) $a } -Adding value simple copy (byte) main::p_x ← (byte) $a -Adding value simple copy (byte) main::p_y ← (byte) $a -Unwinding value copy (struct Circle) main::c ← (struct Circle){ (struct Point) main::p, (byte) 5 } -Unwinding value copy (struct Circle) main::c ← (struct Circle){ (struct Point) main::p, (byte) 5 } -Adding value simple copy (byte) main::c_center_x ← (byte) main::p_x -Adding value simple copy (byte) main::c_center_y ← (byte) main::p_y -Adding value simple copy (byte) main::c_radius ← (byte) 5 -Unwinding value copy (struct Point) main::point ← (struct Circle) main::c.center -Adding value simple copy (byte) main::point_x ← (byte) main::c_center_x -Adding value simple copy (byte) main::point_y ← (byte) main::c_center_y -Replacing struct member reference (struct Point) main::point.x with member unwinding reference (byte) main::point_x -Replacing struct member reference (struct Point) main::point.y with member unwinding reference (byte) main::point_y -Replacing struct member reference (struct Circle) main::c.radius with member unwinding reference (byte) main::c_radius CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-9.log b/src/test/ref/struct-9.log index 664acb7ae..a18290126 100644 --- a/src/test/ref/struct-9.log +++ b/src/test/ref/struct-9.log @@ -1,27 +1,3 @@ -Created struct value member variable (byte) main::p_x -Created struct value member variable (byte) main::p_y -Converted struct value to member variables (struct Point) main::p -Created struct value member variable (struct Point) main::c_center -Created struct value member variable (byte) main::c_radius -Converted struct value to member variables (struct Circle) main::c -Created struct value member variable (byte) main::c_center_x -Created struct value member variable (byte) main::c_center_y -Converted struct value to member variables (struct Point) main::c_center -Unwinding value copy (struct Point) main::p ← { x: (byte) $a, y: (byte) $a } -Adding value simple copy (byte) main::p_x ← (byte) $a -Adding value simple copy (byte) main::p_y ← (byte) $a -Unwinding value copy (struct Circle) main::c ← {} -Unwinding value copy (struct Circle) main::c ← {} -Adding value simple copy (byte) main::c_center_x ← (byte) 0 -Adding value simple copy (byte) main::c_center_y ← (byte) 0 -Adding value simple copy (byte) main::c_radius ← (byte) 0 -Unwinding value copy (struct Circle) main::c.center ← (struct Point) main::p -Adding value simple copy (byte) main::c_center_x ← (byte) main::p_x -Adding value simple copy (byte) main::c_center_y ← (byte) main::p_y -Replacing struct member reference (struct Circle) main::c.radius with member unwinding reference (byte) main::c_radius -Replacing struct member reference (struct Circle) main::c.center.x with member unwinding reference (byte) main::c_center_x -Replacing struct member reference (struct Circle) main::c.center.y with member unwinding reference (byte) main::c_center_y -Replacing struct member reference (struct Circle) main::c.radius with member unwinding reference (byte) main::c_radius CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-directives.log b/src/test/ref/struct-directives.log index 5faab6671..6035bd411 100644 --- a/src/test/ref/struct-directives.log +++ b/src/test/ref/struct-directives.log @@ -1,5 +1,3 @@ -Replacing struct member reference (volatile struct $0) y.x with member unwinding reference *((byte*)&(volatile struct $0) y+(const byte) OFFSET_STRUCT_$0_X) -Replacing struct member reference (volatile struct $0) y.z with member unwinding reference *((byte*)&(volatile struct $0) y+(const byte) OFFSET_STRUCT_$0_Z) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-pos-fill.log b/src/test/ref/struct-pos-fill.log index abc625167..fe99b9073 100644 --- a/src/test/ref/struct-pos-fill.log +++ b/src/test/ref/struct-pos-fill.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const struct pos*) p + (byte~) main::$2).y with member unwinding reference *((byte*)(const struct pos*) p+(const byte) OFFSET_STRUCT_POS_Y + (byte~) main::$2) -Replacing struct member reference *((const struct pos*) p + (byte~) main::$3).x with member unwinding reference *((byte*)(const struct pos*) p+(const byte) OFFSET_STRUCT_POS_X + (byte~) main::$3) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-0.log b/src/test/ref/struct-ptr-0.log index e7ebc6179..cfe3dc5d9 100644 --- a/src/test/ref/struct-ptr-0.log +++ b/src/test/ref/struct-ptr-0.log @@ -1,7 +1,3 @@ -Replacing struct member reference *((const struct Point*) points + (byte~) main::$3).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$3) -Replacing struct member reference *((const struct Point*) points + (byte~) main::$4).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) -Replacing struct member reference *((const struct Point*) points + (byte~) main::$5).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$5) -Replacing struct member reference *((const struct Point*) points + (byte~) main::$6).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$6) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-10.log b/src/test/ref/struct-ptr-10.log index bc1e6bab5..fd53f25e0 100644 --- a/src/test/ref/struct-ptr-10.log +++ b/src/test/ref/struct-ptr-10.log @@ -1,8 +1,4 @@ Constantified RValue *((const struct Point*) points + (word~) main::$2) ← (struct Point){ (byte) 2, (byte)(word) main::i } -Unwinding value copy *((const struct Point*) points + (word~) main::$2) ← (struct Point){ (byte) 2, (byte)(word) main::i } -Adding value simple copy *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (word~) main::$2) ← (byte) 2 -Adding value simple copy *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (word~) main::$2) ← (byte)(word) main::i -Adding value bulk copy *((const nomodify struct Point*) main::SCREEN + (word~) main::$3) ← memcpy(*((const struct Point*) points + (word~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-11.log b/src/test/ref/struct-ptr-11.log index 2ab13e6f7..23f32cf90 100644 --- a/src/test/ref/struct-ptr-11.log +++ b/src/test/ref/struct-ptr-11.log @@ -1,9 +1,4 @@ Constantified RValue *((const struct Point*) points + (byte~) main::$3) ← (struct Point){ (signed byte)(byte) main::i, (signed byte~) main::$0, (signed byte)(byte) main::i } -Unwinding value copy *((const struct Point*) points + (byte~) main::$3) ← (struct Point){ (signed byte)(byte) main::i, (signed byte~) main::$0, (signed byte)(byte) main::i } -Adding value simple copy *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$3) ← (signed byte)(byte) main::i -Adding value simple copy *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) ← (signed byte~) main::$0 -Adding value simple copy *((signed byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Z + (byte~) main::$3) ← (signed byte)(byte) main::i -Adding value bulk copy *((const nomodify struct Point*) main::SCREEN + (byte~) main::$4) ← memcpy(*((const struct Point*) points + (byte~) main::$4), struct Point, (const byte) SIZEOF_STRUCT_POINT) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-12.log b/src/test/ref/struct-ptr-12.log index 876345859..fc7260b4a 100644 --- a/src/test/ref/struct-ptr-12.log +++ b/src/test/ref/struct-ptr-12.log @@ -1,7 +1,4 @@ Setting struct to load/store in variable affected by address-of (struct Point*) main::q ← &(volatile struct Point) main::p -Adding value bulk copy *(&(volatile struct Point) main::p) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference *((struct Point*) main::q).x with member unwinding reference *((byte*~) main::$0) -Replacing struct member reference *((struct Point*) main::q).y with member unwinding reference *((byte*~) main::$1) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-13.log b/src/test/ref/struct-ptr-13.log index 3b72afa00..c6adf4f5d 100644 --- a/src/test/ref/struct-ptr-13.log +++ b/src/test/ref/struct-ptr-13.log @@ -1,9 +1,3 @@ -Replacing struct member reference *((struct Point*) points).x with member unwinding reference *((byte*~) main::$0) -Replacing struct member reference *((struct Point*) points).x with member unwinding reference *((byte*~) main::$1) -Replacing struct member reference *((struct Point*) points).y with member unwinding reference *((byte*~) main::$2) -Replacing struct member reference *((struct Point*) points).y with member unwinding reference *((byte*~) main::$3) -Replacing struct member reference *((struct Point*) points).x with member unwinding reference *((byte*~) main::$4) -Replacing struct member reference *((struct Point*) points).y with member unwinding reference *((byte*~) main::$5) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-14.log b/src/test/ref/struct-ptr-14.log index 73a7cbfc3..d1e3771aa 100644 --- a/src/test/ref/struct-ptr-14.log +++ b/src/test/ref/struct-ptr-14.log @@ -1,9 +1,4 @@ Setting struct to load/store in variable affected by address-of (struct Point*) main::q ← &(volatile struct Point) main::p -Adding value bulk copy *(&(volatile struct Point) main::p) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Replacing struct member reference *((struct Point*) main::q).x with member unwinding reference *((byte*~) main::$1) -Replacing struct member reference *((struct Point*) main::q).y with member unwinding reference *((byte*~) main::$2) -Replacing struct member reference *((struct Point*) set::ptr).x with member unwinding reference *((byte*~) set::$0) -Replacing struct member reference *((struct Point*) set::ptr).y with member unwinding reference *((byte*~) set::$1) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-15.log b/src/test/ref/struct-ptr-15.log index 75fbf7449..07eec0ddd 100644 --- a/src/test/ref/struct-ptr-15.log +++ b/src/test/ref/struct-ptr-15.log @@ -1,11 +1,3 @@ -Replacing struct member reference *((const struct Circle*) circles + (number~) main::$1).center.x with member unwinding reference *((byte*)(struct Point*)(const struct Circle*) circles+(const byte) OFFSET_STRUCT_CIRCLE_CENTER+(const byte) OFFSET_STRUCT_POINT_X + (number~) main::$1) -Replacing struct member reference *((const struct Circle*) circles + (number~) main::$2).center.y with member unwinding reference *((byte*)(struct Point*)(const struct Circle*) circles+(const byte) OFFSET_STRUCT_CIRCLE_CENTER+(const byte) OFFSET_STRUCT_POINT_Y + (number~) main::$2) -Replacing struct member reference *((const struct Circle*) circles + (number~) main::$3).radius with member unwinding reference *((byte*)(const struct Circle*) circles+(const byte) OFFSET_STRUCT_CIRCLE_RADIUS + (number~) main::$3) -Replacing struct member reference *((const struct Circle*) circles + (number~) main::$4).center.x with member unwinding reference *((byte*)(struct Point*)(const struct Circle*) circles+(const byte) OFFSET_STRUCT_CIRCLE_CENTER+(const byte) OFFSET_STRUCT_POINT_X + (number~) main::$4) -Replacing struct member reference *((const struct Circle*) circles + (number~) main::$5).center.y with member unwinding reference *((byte*)(struct Point*)(const struct Circle*) circles+(const byte) OFFSET_STRUCT_CIRCLE_CENTER+(const byte) OFFSET_STRUCT_POINT_Y + (number~) main::$5) -Replacing struct member reference *((const struct Circle*) circles + (number~) main::$6).radius with member unwinding reference *((byte*)(const struct Circle*) circles+(const byte) OFFSET_STRUCT_CIRCLE_RADIUS + (number~) main::$6) -Replacing struct member reference *((struct Circle*) main::ptr).center.x with member unwinding reference *((byte*~) main::$8) -Replacing struct member reference *((struct Circle*) main::ptr).center.y with member unwinding reference *((byte*~) main::$10) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-16.log b/src/test/ref/struct-ptr-16.log index 53631408b..3e5860956 100644 --- a/src/test/ref/struct-ptr-16.log +++ b/src/test/ref/struct-ptr-16.log @@ -1,33 +1,3 @@ -Created struct value member variable (byte~) main::$0_x -Created struct value member variable (byte~) main::$0_y -Converted struct value to member variables (struct Point~) main::$0 -Created struct value member variable (byte~) main::$1_x -Created struct value member variable (byte~) main::$1_y -Converted struct value to member variables (struct Point~) main::$1 -Created struct value member variable (byte) get::return_x -Created struct value member variable (byte) get::return_y -Converted struct value to member variables (struct Point) get::return -Converted procedure call LValue to member unwinding { (byte~) main::$0_x, (byte~) main::$0_y } ← call get (number) 0 -Unwinding value copy *((const nomodify struct Point*) SCREEN) ← (struct Point~) main::$0 -Adding value simple copy *((byte*)(const nomodify struct Point*) SCREEN+(const byte) OFFSET_STRUCT_POINT_X) ← (byte~) main::$0_x -Adding value simple copy *((byte*)(const nomodify struct Point*) SCREEN+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte~) main::$0_y -Converted procedure call LValue to member unwinding { (byte~) main::$1_x, (byte~) main::$1_y } ← call get (byte) main::i -Unwinding value copy *((const nomodify struct Point*) SCREEN + (byte~) main::$3) ← (struct Point~) main::$1 -Adding value simple copy *((byte*)(const nomodify struct Point*) SCREEN+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$3) ← (byte~) main::$1_x -Adding value simple copy *((byte*)(const nomodify struct Point*) SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) ← (byte~) main::$1_y -Unwinding value copy (struct Point) get::return ← *((struct Point*) p0) -Adding value simple copy (byte) get::return_x ← *((byte*~) get::$2) -Adding value simple copy (byte) get::return_y ← *((byte*~) get::$3) -Unwinding value copy (struct Point) get::return ← *((struct Point*) p1) -Adding value simple copy (byte) get::return_x ← *((byte*~) get::$4) -Adding value simple copy (byte) get::return_y ← *((byte*~) get::$5) -Unwinding value copy (struct Point) get::return ← *((struct Point*) p2) -Adding value simple copy (byte) get::return_x ← *((byte*~) get::$6) -Adding value simple copy (byte) get::return_y ← *((byte*~) get::$7) -Unwinding value copy (struct Point) get::return ← (struct Point) get::return -Adding value simple copy (byte) get::return_x ← (byte) get::return_x -Adding value simple copy (byte) get::return_y ← (byte) get::return_y -Converted procedure struct return value to member unwinding return { (byte) get::return_x, (byte) get::return_y } Eliminating unused variable with no statement (struct Point~) main::$0 Eliminating unused variable with no statement (struct Point~) main::$1 Unwinding list assignment { (byte~) main::$0_x, (byte~) main::$0_y } ← { (byte) get::return_x, (byte) get::return_y } diff --git a/src/test/ref/struct-ptr-17.log b/src/test/ref/struct-ptr-17.log index e7cb5c57c..ac2dfe6c8 100644 --- a/src/test/ref/struct-ptr-17.log +++ b/src/test/ref/struct-ptr-17.log @@ -1,33 +1,3 @@ -Created struct value member variable (byte~) main::$0_x -Created struct value member variable (byte~) main::$0_y -Converted struct value to member variables (struct Point~) main::$0 -Created struct value member variable (byte~) main::$1_x -Created struct value member variable (byte~) main::$1_y -Converted struct value to member variables (struct Point~) main::$1 -Created struct value member variable (byte) get::return_x -Created struct value member variable (byte) get::return_y -Converted struct value to member variables (struct Point) get::return -Created struct value member variable (byte) get::p_x -Created struct value member variable (byte) get::p_y -Converted struct value to member variables (struct Point) get::p -Converted procedure call LValue to member unwinding { (byte~) main::$0_x, (byte~) main::$0_y } ← call get (number) 0 -Unwinding value copy *((const nomodify struct Point*) SCREEN) ← (struct Point~) main::$0 -Adding value simple copy *((byte*)(const nomodify struct Point*) SCREEN+(const byte) OFFSET_STRUCT_POINT_X) ← (byte~) main::$0_x -Adding value simple copy *((byte*)(const nomodify struct Point*) SCREEN+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte~) main::$0_y -Converted procedure call LValue to member unwinding { (byte~) main::$1_x, (byte~) main::$1_y } ← call get (byte) main::i -Unwinding value copy *((const nomodify struct Point*) SCREEN + (byte~) main::$3) ← (struct Point~) main::$1 -Adding value simple copy *((byte*)(const nomodify struct Point*) SCREEN+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$3) ← (byte~) main::$1_x -Adding value simple copy *((byte*)(const nomodify struct Point*) SCREEN+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$3) ← (byte~) main::$1_y -Unwinding value copy (struct Point) get::p ← (struct Point){ (byte) get::i, (byte) 7 } -Adding value simple copy (byte) get::p_x ← (byte) get::i -Adding value simple copy (byte) get::p_y ← (byte) 7 -Unwinding value copy (struct Point) get::return ← (struct Point) get::p -Adding value simple copy (byte) get::return_x ← (byte) get::p_x -Adding value simple copy (byte) get::return_y ← (byte) get::p_y -Unwinding value copy (struct Point) get::return ← (struct Point) get::return -Adding value simple copy (byte) get::return_x ← (byte) get::return_x -Adding value simple copy (byte) get::return_y ← (byte) get::return_y -Converted procedure struct return value to member unwinding return { (byte) get::return_x, (byte) get::return_y } Eliminating unused variable with no statement (struct Point~) main::$0 Eliminating unused variable with no statement (struct Point~) main::$1 Unwinding list assignment { (byte~) main::$0_x, (byte~) main::$0_y } ← { (byte) get::return_x, (byte) get::return_y } diff --git a/src/test/ref/struct-ptr-18.log b/src/test/ref/struct-ptr-18.log index bfa9ea8c0..04c9c96fe 100644 --- a/src/test/ref/struct-ptr-18.log +++ b/src/test/ref/struct-ptr-18.log @@ -1,14 +1,5 @@ Constantified RValue *((const struct Point*) points + (number~) main::$2) ← { x: (byte) 1, y: (byte) 2 } Constantified RValue *((const struct Point*) points + (number~) main::$3) ← { x: (byte) 3, y: (byte) 4 } -Created struct value member variable (byte) print::p_x -Created struct value member variable (byte) print::p_y -Converted struct value to member variables (struct Point) print::p -Converted procedure struct value parameter to member unwinding (void()) print((byte) print::p_x , (byte) print::p_y) -Adding value bulk copy *((const struct Point*) points + (number~) main::$2) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Adding value bulk copy *((const struct Point*) points + (number~) main::$3) ← memcpy(*(&(const struct Point) $1), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Converted call struct value parameter to member unwinding (void~) main::$0 ← call print *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$4) *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$4) -Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x -Replacing struct member reference (struct Point) print::p.y with member unwinding reference (byte) print::p_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-19.log b/src/test/ref/struct-ptr-19.log index 6fe078e3a..2eb0d15cd 100644 --- a/src/test/ref/struct-ptr-19.log +++ b/src/test/ref/struct-ptr-19.log @@ -1,13 +1,4 @@ Setting struct to load/store in variable affected by address-of (struct Point*) main::ptr ← &(struct Point) main::point -Created struct value member variable (byte) print::p_x -Created struct value member variable (byte) print::p_y -Converted struct value to member variables (struct Point) print::p -Converted procedure struct value parameter to member unwinding (void()) print((byte) print::p_x , (byte) print::p_y) -Adding value bulk copy *(&(struct Point) main::point) ← memcpy(*(&(const struct Point) $0), struct Point, (const byte) SIZEOF_STRUCT_POINT) -Converted call struct value parameter to member unwinding (void~) main::$0 ← call print *((byte*)&(struct Point) main::point+(const byte) OFFSET_STRUCT_POINT_X) *((byte*)&(struct Point) main::point+(const byte) OFFSET_STRUCT_POINT_Y) -Converted call struct value parameter to member unwinding (void~) main::$1 ← call print *((byte*~) main::$2) *((byte*~) main::$3) -Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x -Replacing struct member reference (struct Point) print::p.y with member unwinding reference (byte) print::p_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-20.log b/src/test/ref/struct-ptr-20.log index 542b5ea5f..795b9e2a7 100644 --- a/src/test/ref/struct-ptr-20.log +++ b/src/test/ref/struct-ptr-20.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((struct Setting*) main::setting).off with member unwinding reference *((byte*~) main::$7) -Replacing struct member reference *((struct Setting*) main::setting).id with member unwinding reference *((byte*~) main::$8) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-21.log b/src/test/ref/struct-ptr-21.log index 3d5f3cb01..ac8f887e6 100644 --- a/src/test/ref/struct-ptr-21.log +++ b/src/test/ref/struct-ptr-21.log @@ -1,7 +1,5 @@ Fixing constant pointer addition (const word*) seq+(number) 0 Fixing constant pointer addition (const struct Setting*) settings+(number) 0 -Replacing struct member reference *((struct Setting*) main::setting).len with member unwinding reference *((byte*~) main::$2) -Replacing struct member reference *((struct Setting*) main::setting).buf with member unwinding reference *((word**~) main::$3) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-22.log b/src/test/ref/struct-ptr-22.log index 5950c52d6..790ce2c87 100644 --- a/src/test/ref/struct-ptr-22.log +++ b/src/test/ref/struct-ptr-22.log @@ -1,6 +1,3 @@ -Replacing struct member reference *((struct fileentry*) file).bufEdit with member unwinding reference *((byte**~) main::$7) -Replacing struct member reference *((struct fileentry*) file).bufEdit with member unwinding reference *((byte**~) main::$8) -Replacing struct member reference *((struct fileentry*) file).bufEdit with member unwinding reference *((byte**~) main::$9) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-23.log b/src/test/ref/struct-ptr-23.log index 373759973..90934dad8 100644 --- a/src/test/ref/struct-ptr-23.log +++ b/src/test/ref/struct-ptr-23.log @@ -3,10 +3,6 @@ Fixing struct type size struct Person to 5 Fixing struct type size struct Person to 5 Fixing struct type SIZE_OF struct Person to 5 Fixing struct type SIZE_OF struct Person to 5 -Replacing struct member reference *((struct Person*) print_person::person).id with member unwinding reference *((byte*~) print_person::$1) -Replacing struct member reference *((struct Person*) print_person::person).initials with member unwinding reference (byte*~) print_person::$2 -Replacing struct member reference *((struct Person*) print_person::person).initials with member unwinding reference (byte*~) print_person::$3 -Replacing struct member reference *((struct Person*) print_person::person).initials with member unwinding reference (byte*~) print_person::$4 CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-26.log b/src/test/ref/struct-ptr-26.log index 8adb4b6b2..6ef83b75a 100644 --- a/src/test/ref/struct-ptr-26.log +++ b/src/test/ref/struct-ptr-26.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((struct fileentry*) main::file).bufEdit with member unwinding reference *((byte**~) main::$2) -Replacing struct member reference *((struct fileentry*) main::file).bufEdit with member unwinding reference *((byte**~) main::$3) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-28.log b/src/test/ref/struct-ptr-28.log index 8ee1261ce..4cda83e2e 100644 --- a/src/test/ref/struct-ptr-28.log +++ b/src/test/ref/struct-ptr-28.log @@ -5,11 +5,6 @@ Fixing struct type SIZE_OF struct Person to 17 Fixing struct type SIZE_OF struct Person to 17 Setting struct to load/store in variable affected by address-of (void~) main::$0 ← call print_person &(struct Person) main::jesper Setting struct to load/store in variable affected by address-of (void~) main::$1 ← call print_person &(struct Person) main::henriette -Adding value bulk copy *(&(struct Person) main::jesper) ← memcpy(*(&(const struct Person) $0), struct Person, (const byte) SIZEOF_STRUCT_PERSON) -Adding value bulk copy *(&(struct Person) main::henriette) ← memcpy(*(&(const struct Person) $1), struct Person, (const byte) SIZEOF_STRUCT_PERSON) -Replacing struct member reference *((struct Person*) print_person::person).id with member unwinding reference *((byte*~) print_person::$0) -Replacing struct member reference *((struct Person*) print_person::person).name with member unwinding reference (byte*~) print_person::$1 -Replacing struct member reference *((struct Person*) print_person::person).name with member unwinding reference (byte*~) print_person::$2 CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-3.log b/src/test/ref/struct-ptr-3.log index 5959f3f09..6bffe234c 100644 --- a/src/test/ref/struct-ptr-3.log +++ b/src/test/ref/struct-ptr-3.log @@ -1,7 +1,3 @@ -Replacing struct member reference *((struct Point*) points).x with member unwinding reference *((byte*~) main::$0) -Replacing struct member reference *((struct Point*) points).y with member unwinding reference *((byte*~) main::$1) -Replacing struct member reference *((struct Point*) points).x with member unwinding reference *((byte*~) main::$2) -Replacing struct member reference *((struct Point*) points).y with member unwinding reference *((byte*~) main::$3) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-30.log b/src/test/ref/struct-ptr-30.log index cd996387e..41d1d72a9 100644 --- a/src/test/ref/struct-ptr-30.log +++ b/src/test/ref/struct-ptr-30.log @@ -1,11 +1,3 @@ -Created struct value member variable (byte) print::p_x -Created struct value member variable (signed word) print::p_y -Converted struct value to member variables (struct Point) print::p -Converted procedure struct value parameter to member unwinding (void()) print((byte) print::p_x , (signed word) print::p_y) -Converted call struct value parameter to member unwinding (void~) main::$0 ← call print *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$2) *((signed word*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$2) -Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x -Replacing struct member reference (struct Point) print::p.y with member unwinding reference (signed word) print::p_y -Replacing struct member reference (struct Point) print::p.y with member unwinding reference (signed word) print::p_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-31.log b/src/test/ref/struct-ptr-31.log index 2fa55a5f1..4b251472b 100644 --- a/src/test/ref/struct-ptr-31.log +++ b/src/test/ref/struct-ptr-31.log @@ -3,9 +3,6 @@ Fixing struct type size struct Person to 17 Fixing struct type SIZE_OF struct Person to 17 Fixing struct type SIZE_OF struct Person to 17 Fixing constant pointer addition (const struct Person*) persons+(number) 1 -Replacing struct member reference *((struct Person*) print_person::person).id with member unwinding reference *((byte*~) print_person::$0) -Replacing struct member reference *((struct Person*) print_person::person).name with member unwinding reference (byte*~) print_person::$1 -Replacing struct member reference *((struct Person*) print_person::person).name with member unwinding reference (byte*~) print_person::$2 CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-32.log b/src/test/ref/struct-ptr-32.log index 1f6075c81..7f426e2ea 100644 --- a/src/test/ref/struct-ptr-32.log +++ b/src/test/ref/struct-ptr-32.log @@ -2,14 +2,6 @@ Fixing struct type size struct Person to 16 Fixing struct type size struct Person to 16 Fixing struct type SIZE_OF struct Person to 16 Fixing struct type SIZE_OF struct Person to 16 -Replacing struct member reference *((const struct Person*) persons + (number~) main::$0).id with member unwinding reference *((byte*)(const struct Person*) persons+(const byte) OFFSET_STRUCT_PERSON_ID + (number~) main::$0) -Replacing struct member reference *((const struct Person*) persons + (number~) main::$1).id with member unwinding reference *((byte*)(const struct Person*) persons+(const byte) OFFSET_STRUCT_PERSON_ID + (number~) main::$1) -Replacing struct member reference *((const struct Person*) persons + (number~) main::$2).name with member unwinding reference (byte*~) main::$6 -Replacing struct member reference *((const struct Person*) persons + (number~) main::$3).name with member unwinding reference (byte*~) main::$7 -Replacing struct member reference *((const struct Person*) persons + (number~) main::$4).age with member unwinding reference *((word*)(const struct Person*) persons+(const byte) OFFSET_STRUCT_PERSON_AGE + (number~) main::$4) -Replacing struct member reference *((const struct Person*) persons + (number~) main::$5).age with member unwinding reference *((word*)(const struct Person*) persons+(const byte) OFFSET_STRUCT_PERSON_AGE + (number~) main::$5) -Replacing struct member reference *((struct Person*) main::person).name with member unwinding reference (byte*~) main::$8 -Replacing struct member reference *((struct Person*) main::person).name with member unwinding reference (byte*~) main::$9 CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-33.log b/src/test/ref/struct-ptr-33.log index 4f9d80d56..16e83fd6d 100644 --- a/src/test/ref/struct-ptr-33.log +++ b/src/test/ref/struct-ptr-33.log @@ -2,8 +2,6 @@ Fixing struct type size struct Person to 16 Fixing struct type size struct Person to 16 Fixing struct type SIZE_OF struct Person to 16 Fixing struct type SIZE_OF struct Person to 16 -Replacing struct member reference *((struct Person*) main::person).name with member unwinding reference (byte*~) main::$0 -Replacing struct member reference *((struct Person*) main::person).name with member unwinding reference (byte*~) main::$1 CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-34.log b/src/test/ref/struct-ptr-34.log index cc40d9d00..6cb29a697 100644 --- a/src/test/ref/struct-ptr-34.log +++ b/src/test/ref/struct-ptr-34.log @@ -3,27 +3,6 @@ Fixing struct type size struct Person to 17 Fixing struct type size struct Person to 17 Fixing struct type SIZE_OF struct Person to 17 Fixing struct type SIZE_OF struct Person to 17 -Created struct value member variable (byte) main::jesper_id -Created struct value member variable (const byte*) main::jesper_name -Converted struct value to member variables (struct Person) main::jesper -Created struct value member variable (byte) main::henriette_id -Created struct value member variable (const byte*) main::henriette_name -Converted struct value to member variables (struct Person) main::henriette -Created struct value member variable (byte) print_person::person_id -Created struct value member variable (byte*) print_person::person_name -Converted struct value to member variables (struct Person) print_person::person -Converted procedure struct value parameter to member unwinding (void()) print_person((byte) print_person::person_id , (byte*) print_person::person_name) -Unwinding value copy (struct Person) main::jesper ← { id: (byte) 4, name: (byte*) "jesper" } -Adding value simple copy (byte) main::jesper_id ← (byte) 4 -Adding value bulk copy *((const byte*) main::jesper_name) ← memcpy(*(&(const byte*) $0), byte, (number) $10) -Converted call struct value parameter to member unwinding (void~) main::$0 ← call print_person (byte) main::jesper_id (const byte*) main::jesper_name -Unwinding value copy (struct Person) main::henriette ← { id: (byte) 7, name: (byte*) "henriette" } -Adding value simple copy (byte) main::henriette_id ← (byte) 7 -Adding value bulk copy *((const byte*) main::henriette_name) ← memcpy(*(&(const byte*) $1), byte, (number) $10) -Converted call struct value parameter to member unwinding (void~) main::$1 ← call print_person (byte) main::henriette_id (const byte*) main::henriette_name -Replacing struct member reference (struct Person) print_person::person.id with member unwinding reference (byte) print_person::person_id -Replacing struct member reference (struct Person) print_person::person.name with member unwinding reference (byte*) print_person::person_name -Replacing struct member reference (struct Person) print_person::person.name with member unwinding reference (byte*) print_person::person_name CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-4.log b/src/test/ref/struct-ptr-4.log index a690056bf..7d74bea27 100644 --- a/src/test/ref/struct-ptr-4.log +++ b/src/test/ref/struct-ptr-4.log @@ -1,7 +1,3 @@ -Replacing struct member reference *((struct Point*) main::points).x with member unwinding reference *((byte*~) main::$3) -Replacing struct member reference *((struct Point*) main::points).y with member unwinding reference *((byte*~) main::$4) -Replacing struct member reference *((struct Point*) main::points).x with member unwinding reference *((byte*~) main::$5) -Replacing struct member reference *((struct Point*) main::points).y with member unwinding reference *((byte*~) main::$6) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-5.log b/src/test/ref/struct-ptr-5.log index b4868fda6..15d1dec49 100644 --- a/src/test/ref/struct-ptr-5.log +++ b/src/test/ref/struct-ptr-5.log @@ -1,14 +1,4 @@ Fixing struct type size struct Entry to 3 -Replacing struct member reference *((struct Entry*) main::entry0).next with member unwinding reference *((struct Entry**~) main::$7) -Replacing struct member reference *((struct Entry*) main::entry0).value with member unwinding reference *((byte*~) main::$8) -Replacing struct member reference *((struct Entry*) main::entry2).next with member unwinding reference *((struct Entry**~) main::$9) -Replacing struct member reference *((struct Entry*) main::entry2).value with member unwinding reference *((byte*~) main::$10) -Replacing struct member reference *((struct Entry*) main::entry1).next with member unwinding reference *((struct Entry**~) main::$11) -Replacing struct member reference *((struct Entry*) main::entry1).value with member unwinding reference *((byte*~) main::$12) -Replacing struct member reference *((struct Entry*) main::entry).value with member unwinding reference *((byte*~) main::$13) -Replacing struct member reference *((struct Entry*) main::entry).next with member unwinding reference *((struct Entry**~) main::$14) -Replacing struct member reference *((struct Entry*) main::entry).next with member unwinding reference *((struct Entry**~) main::$15) -Replacing struct member reference *((struct Entry*) main::entry).next with member unwinding reference *((struct Entry**~) main::$16) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-6.log b/src/test/ref/struct-ptr-6.log index d58ecf86f..1bca8d8bd 100644 --- a/src/test/ref/struct-ptr-6.log +++ b/src/test/ref/struct-ptr-6.log @@ -1,7 +1,3 @@ -Replacing struct member reference *((struct Point*) points).x with member unwinding reference *((byte*~) main::$0) -Replacing struct member reference *((struct Point*) points).y with member unwinding reference *((byte*~) main::$1) -Replacing struct member reference *((struct Point*) points).x with member unwinding reference *((byte*~) main::$2) -Replacing struct member reference *((struct Point*) points).y with member unwinding reference *((byte*~) main::$3) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-7.log b/src/test/ref/struct-ptr-7.log index f5ca2163f..647f7116f 100644 --- a/src/test/ref/struct-ptr-7.log +++ b/src/test/ref/struct-ptr-7.log @@ -1,11 +1,3 @@ -Replacing struct member reference *((const struct Point*) points + (number~) main::$0).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (number~) main::$0) -Replacing struct member reference *((const struct Point*) points + (number~) main::$1).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (number~) main::$1) -Replacing struct member reference *((const struct Point*) points + (number~) main::$2).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (number~) main::$2) -Replacing struct member reference *((const struct Point*) points + (number~) main::$3).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (number~) main::$3) -Replacing struct member reference *((const struct Point*) points + (number~) main::$4).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (number~) main::$4) -Replacing struct member reference *((const struct Point*) points + (number~) main::$5).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (number~) main::$5) -Replacing struct member reference *((const struct Point*) points + (number~) main::$6).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (number~) main::$6) -Replacing struct member reference *((const struct Point*) points + (number~) main::$7).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (number~) main::$7) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-8.log b/src/test/ref/struct-ptr-8.log index 277a09113..427c3854e 100644 --- a/src/test/ref/struct-ptr-8.log +++ b/src/test/ref/struct-ptr-8.log @@ -1,7 +1,3 @@ -Replacing struct member reference *((const struct Point*) points + (byte~) main::$4).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$4) -Replacing struct member reference *((const struct Point*) points + (byte~) main::$5).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$5) -Replacing struct member reference *((const struct Point*) points + (byte~) main::$6).x with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$6) -Replacing struct member reference *((const struct Point*) points + (byte~) main::$7).y with member unwinding reference *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$7) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/struct-ptr-9.log b/src/test/ref/struct-ptr-9.log index edc7c5948..0782fb71c 100644 --- a/src/test/ref/struct-ptr-9.log +++ b/src/test/ref/struct-ptr-9.log @@ -1,8 +1,4 @@ Constantified RValue *((const struct Point*) points + (byte~) main::$2) ← (struct Point){ (byte) 2, (byte) main::i } -Unwinding value copy *((const struct Point*) points + (byte~) main::$2) ← (struct Point){ (byte) 2, (byte) main::i } -Adding value simple copy *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_X + (byte~) main::$2) ← (byte) 2 -Adding value simple copy *((byte*)(const struct Point*) points+(const byte) OFFSET_STRUCT_POINT_Y + (byte~) main::$2) ← (byte) main::i -Adding value bulk copy *((const nomodify struct Point*) main::SCREEN + (byte~) main::$3) ← memcpy(*((const struct Point*) points + (byte~) main::$3), struct Point, (const byte) SIZEOF_STRUCT_POINT) CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index e060fc466..2051bd7ba 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -652,6 +650,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NE = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a @@ -1926,6 +1947,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) compare((signed word) compare::w1 , (signed word) compare::w2 , (byte) compare::op) (byte) compare::op (byte) compare::op#0 101667.83333333331 @@ -3090,6 +3134,7 @@ Uplift Scope [compare] 700,007: zp[1]:10 [ compare::r#10 compare::r#12 compare:: Uplift Scope [main] 22,985.29: zp[1]:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] 17,729.05: zp[1]:4 [ main::op#2 main::op#1 ] 2,002: zp[1]:24 [ main::$9 ] 1,689.19: zp[1]:3 [ main::j#2 main::j#1 ] 785.86: zp[2]:25 [ main::w2#0 ] 531.68: zp[2]:22 [ main::w1#0 ] 202: zp[1]:21 [ main::$8 ] 165.93: zp[1]:2 [ main::i#2 main::i#1 ] Uplift Scope [memset] 33,336.67: zp[2]:19 [ memset::dst#2 memset::dst#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -3105,6 +3150,7 @@ Uplifting [main] best 947880 combination zp[1]:5 [ main::s#3 main::s#5 main::s#7 Limited combination testing to 100 combinations of 256 possible. Uplifting [memset] best 947880 combination zp[2]:19 [ memset::dst#2 memset::dst#1 ] Uplifting [MOS6526_CIA] best 947880 combination +Uplifting [MOS6581_SID] best 947880 combination Uplifting [RADIX] best 947880 combination Uplifting [print_ln] best 947880 combination Uplifting [print_cls] best 947880 combination @@ -4185,6 +4231,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NE = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/test-comparisons-sword.sym b/src/test/ref/test-comparisons-sword.sym index 1071d9a09..0e710cb0e 100644 --- a/src/test/ref/test-comparisons-sword.sym +++ b/src/test/ref/test-comparisons-sword.sym @@ -21,6 +21,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte) NE = (byte) 5 (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index 65d2e24c6..428edebcf 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -606,6 +604,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 @@ -1824,6 +1845,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) compare((word) compare::w1 , (word) compare::w2 , (byte) compare::op) (byte) compare::op (byte) compare::op#0 101667.83333333331 @@ -2913,6 +2957,7 @@ Uplift Scope [compare] 700,007: zp[1]:10 [ compare::r#10 compare::r#12 compare:: Uplift Scope [main] 22,985.29: zp[1]:5 [ main::s#3 main::s#5 main::s#7 main::s#10 main::s#1 ] 17,729.05: zp[1]:4 [ main::op#2 main::op#1 ] 2,002: zp[1]:24 [ main::$9 ] 1,689.19: zp[1]:3 [ main::j#2 main::j#1 ] 785.86: zp[2]:25 [ main::w2#0 ] 531.68: zp[2]:22 [ main::w1#0 ] 202: zp[1]:21 [ main::$8 ] 165.93: zp[1]:2 [ main::i#2 main::i#1 ] Uplift Scope [memset] 33,336.67: zp[2]:19 [ memset::dst#2 memset::dst#1 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [RADIX] Uplift Scope [print_ln] Uplift Scope [print_cls] @@ -2927,6 +2972,7 @@ Uplifting [main] best 947810 combination zp[1]:5 [ main::s#3 main::s#5 main::s#7 Limited combination testing to 100 combinations of 256 possible. Uplifting [memset] best 947810 combination zp[2]:19 [ memset::dst#2 memset::dst#1 ] Uplifting [MOS6526_CIA] best 947810 combination +Uplifting [MOS6581_SID] best 947810 combination Uplifting [RADIX] best 947810 combination Uplifting [print_ln] best 947810 combination Uplifting [print_cls] best 947810 combination @@ -3934,6 +3980,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/test-comparisons-word.sym b/src/test/ref/test-comparisons-word.sym index 9344078a2..2dab0985d 100644 --- a/src/test/ref/test-comparisons-word.sym +++ b/src/test/ref/test-comparisons-word.sym @@ -16,6 +16,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) RADIX::BINARY = (number) 2 (const byte) RADIX::DECIMAL = (number) $a (const byte) RADIX::HEXADECIMAL = (number) $10 diff --git a/src/test/ref/test-keyboard-space.log b/src/test/ref/test-keyboard-space.log index 61a29845b..032fd3ee9 100644 --- a/src/test/ref/test-keyboard-space.log +++ b/src/test/ref/test-keyboard-space.log @@ -1,11 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -123,6 +115,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 @@ -360,6 +375,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) keyboard_init() (byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key) (byte~) keyboard_key_pressed::$2 2002.0 @@ -579,6 +617,7 @@ Uplift Scope [keyboard_matrix_read] 3,667.33: zp[1]:7 [ keyboard_matrix_read::re Uplift Scope [keyboard_key_pressed] 2,002: zp[1]:5 [ keyboard_key_pressed::$2 ] 367.33: zp[1]:6 [ keyboard_key_pressed::return#0 ] 202: zp[1]:2 [ keyboard_key_pressed::return#2 ] Uplift Scope [main] 202: zp[1]:3 [ main::$2 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [keyboard_init] Uplift Scope [] @@ -586,6 +625,7 @@ Uplifting [keyboard_matrix_read] best 1417 combination reg byte a [ keyboard_mat Uplifting [keyboard_key_pressed] best 1318 combination reg byte a [ keyboard_key_pressed::$2 ] reg byte a [ keyboard_key_pressed::return#0 ] reg byte a [ keyboard_key_pressed::return#2 ] Uplifting [main] best 1258 combination reg byte a [ main::$2 ] Uplifting [MOS6526_CIA] best 1258 combination +Uplifting [MOS6581_SID] best 1258 combination Uplifting [keyboard_init] best 1258 combination Uplifting [] best 1258 combination @@ -787,6 +827,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 diff --git a/src/test/ref/test-keyboard-space.sym b/src/test/ref/test-keyboard-space.sym index b072f3d61..15bc26a61 100644 --- a/src/test/ref/test-keyboard-space.sym +++ b/src/test/ref/test-keyboard-space.sym @@ -20,6 +20,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index bc2a1e1d3..648c06623 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -1,11 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).PORT_B with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -306,6 +298,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A = (byte) 0 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 @@ -868,6 +883,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch) (byte) keyboard_get_keycode::ch (byte) keyboard_get_keycode::ch#0 11002.0 @@ -1546,6 +1584,7 @@ Uplift Scope [main] 21,668.83: zp[1]:8 [ main::col#2 main::col#1 ] 20,002: zp[1] Uplift Scope [keyboard_key_pressed] 20,002: zp[1]:23 [ keyboard_key_pressed::rowidx#0 ] 20,002: zp[1]:25 [ keyboard_key_pressed::$2 ] 10,501.5: zp[1]:19 [ keyboard_key_pressed::key#0 ] 3,667.33: zp[1]:26 [ keyboard_key_pressed::return#0 ] 3,333.67: zp[1]:22 [ keyboard_key_pressed::colidx#0 ] 2,002: zp[1]:20 [ keyboard_key_pressed::return#2 ] Uplift Scope [keyboard_get_keycode] 11,002: zp[1]:16 [ keyboard_get_keycode::ch#0 ] 3,667.33: zp[1]:28 [ keyboard_get_keycode::return#0 ] 2,002: zp[1]:17 [ keyboard_get_keycode::return#2 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [keyboard_init] Uplift Scope [] @@ -1557,6 +1596,7 @@ Uplifting [keyboard_key_pressed] best 79629 combination reg byte a [ keyboard_ke Limited combination testing to 100 combinations of 3072 possible. Uplifting [keyboard_get_keycode] best 78423 combination reg byte x [ keyboard_get_keycode::ch#0 ] reg byte a [ keyboard_get_keycode::return#0 ] reg byte a [ keyboard_get_keycode::return#2 ] Uplifting [MOS6526_CIA] best 78423 combination +Uplifting [MOS6581_SID] best 78423 combination Uplifting [keyboard_init] best 78423 combination Uplifting [] best 78423 combination Attempting to uplift remaining variables inzp[1]:25 [ keyboard_key_pressed::$2 ] @@ -2156,6 +2196,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 diff --git a/src/test/ref/test-keyboard.sym b/src/test/ref/test-keyboard.sym index 3736ca94e..2d3f8152a 100644 --- a/src/test/ref/test-keyboard.sym +++ b/src/test/ref/test-keyboard.sym @@ -66,6 +66,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR = (byte) 2 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B = (byte) 1 (const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_B_DDR = (byte) 3 diff --git a/src/test/ref/textbox.log b/src/test/ref/textbox.log index 6e99b72c5..b88e2cb8d 100644 --- a/src/test/ref/textbox.log +++ b/src/test/ref/textbox.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -446,6 +444,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) (number~) draw_window::$0 (number~) draw_window::$1 @@ -1617,6 +1638,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) (word~) draw_window::$14 2000002.0 (word~) draw_window::$15 2000002.0 @@ -3201,6 +3245,7 @@ Uplift Scope [draw_window] 30,200,005: zp[1]:21 [ draw_window::x3#2 draw_window: Uplift Scope [textbox] 2,566,671.33: zp[1]:12 [ textbox::ls#2 textbox::ls#0 textbox::ls#1 ] 2,314,288.29: zp[1]:13 [ textbox::c#2 textbox::c#1 ] 769,555.81: zp[1]:14 [ textbox::x#5 textbox::x#10 textbox::x#0 textbox::x#7 textbox::x#17 textbox::x#1 textbox::x#12 ] 579,316.05: zp[2]:16 [ textbox::z#5 textbox::z#3 textbox::z#0 textbox::z#4 textbox::z#1 textbox::z#2 ] 460,446.71: zp[1]:15 [ textbox::y#5 textbox::y#12 textbox::y#0 textbox::y#11 textbox::y#1 textbox::y#2 ] 200,002: zp[2]:33 [ textbox::$8 ] 200,002: zp[2]:35 [ textbox::$32 ] 200,002: zp[1]:39 [ textbox::$39 ] 200,002: zp[1]:40 [ textbox::$40 ] 200,002: zp[1]:41 [ textbox::$36 ] 200,002: zp[1]:42 [ textbox::$37 ] 100,001: zp[1]:37 [ textbox::$15 ] 100,001: zp[1]:38 [ textbox::$17 ] 50,000.5: zp[1]:11 [ textbox::i#2 textbox::i#1 ] 48,936.28: zp[2]:9 [ textbox::text#12 ] 6,528.79: zp[1]:5 [ textbox::x1#4 textbox::x1#0 ] 6,478.29: zp[1]:7 [ textbox::x2#4 textbox::x2#0 ] 4,367.44: zp[1]:8 [ textbox::y2#4 textbox::y2#0 ] 2,002: zp[2]:29 [ textbox::$33 ] 2,002: zp[2]:31 [ textbox::$34 ] 1,501.5: zp[2]:27 [ textbox::$31 ] 552.5: zp[1]:6 [ textbox::y1#4 textbox::y1#0 ] Uplift Scope [main] 3,503.5: zp[2]:3 [ main::wait#2 main::wait#1 ] 275.45: zp[1]:2 [ main::x#2 main::x#1 ] 202: zp[1]:22 [ main::$4 ] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [] Uplifting [draw_window] best 192545 combination reg byte x [ draw_window::x3#2 draw_window::x3#1 draw_window::x3#0 ] zp[2]:73 [ draw_window::$26 ] zp[2]:75 [ draw_window::$35 ] reg byte x [ draw_window::x#2 draw_window::x#0 draw_window::x#1 ] reg byte x [ draw_window::y#2 draw_window::y#0 draw_window::y#1 ] zp[1]:20 [ draw_window::y3#2 draw_window::y3#1 draw_window::y3#0 ] reg byte a [ draw_window::$45 ] reg byte a [ draw_window::$46 ] zp[1]:77 [ draw_window::$42 ] zp[1]:78 [ draw_window::$43 ] zp[2]:81 [ draw_window::$19 ] zp[2]:83 [ draw_window::$31 ] zp[2]:85 [ draw_window::$20 ] zp[2]:87 [ draw_window::$32 ] zp[2]:89 [ draw_window::$14 ] zp[2]:91 [ draw_window::$27 ] zp[2]:93 [ draw_window::$15 ] zp[2]:95 [ draw_window::$28 ] zp[2]:71 [ draw_window::z#2 ] zp[2]:79 [ draw_window::z#1 ] zp[1]:25 [ draw_window::x2#0 ] zp[2]:45 [ draw_window::z#0 ] zp[1]:26 [ draw_window::y2#0 ] zp[1]:23 [ draw_window::x1#0 ] zp[2]:49 [ draw_window::q#0 ] zp[1]:43 [ draw_window::$36 ] zp[1]:44 [ draw_window::$37 ] zp[1]:47 [ draw_window::$39 ] zp[1]:48 [ draw_window::$40 ] zp[2]:51 [ draw_window::$2 ] zp[2]:53 [ draw_window::$29 ] zp[2]:55 [ draw_window::$3 ] zp[2]:57 [ draw_window::$30 ] zp[2]:59 [ draw_window::$4 ] zp[2]:61 [ draw_window::$33 ] zp[2]:63 [ draw_window::$5 ] zp[2]:65 [ draw_window::$34 ] zp[1]:67 [ draw_window::$6 ] zp[1]:68 [ draw_window::$8 ] zp[1]:24 [ draw_window::y1#0 ] @@ -3209,6 +3254,7 @@ Uplifting [textbox] best 176245 combination reg byte y [ textbox::ls#2 textbox:: Limited combination testing to 100 combinations of 1769472 possible. Uplifting [main] best 176205 combination zp[2]:3 [ main::wait#2 main::wait#1 ] zp[1]:2 [ main::x#2 main::x#1 ] reg byte a [ main::$4 ] Uplifting [MOS6526_CIA] best 176205 combination +Uplifting [MOS6581_SID] best 176205 combination Uplifting [] best 176205 combination Attempting to uplift remaining variables inzp[1]:20 [ draw_window::y3#2 draw_window::y3#1 draw_window::y3#0 ] Uplifting [draw_window] best 176205 combination zp[1]:20 [ draw_window::y3#2 draw_window::y3#1 draw_window::y3#0 ] @@ -4323,6 +4369,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) (word~) draw_window::$14 zp[2]:35 2000002.0 (word~) draw_window::$15 zp[2]:37 2000002.0 diff --git a/src/test/ref/textbox.sym b/src/test/ref/textbox.sym index 58cdd58cc..21c78a873 100644 --- a/src/test/ref/textbox.sym +++ b/src/test/ref/textbox.sym @@ -15,6 +15,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) draw_window((byte) draw_window::x1 , (byte) draw_window::y1 , (byte) draw_window::x2 , (byte) draw_window::y2) (word~) draw_window::$14 zp[2]:35 2000002.0 (word~) draw_window::$15 zp[2]:37 2000002.0 diff --git a/src/test/ref/tod-1.log b/src/test/ref/tod-1.log index eae4ea3af..9c45654c6 100644 --- a/src/test/ref/tod-1.log +++ b/src/test/ref/tod-1.log @@ -1,75 +1,3 @@ -Created struct value member variable (byte) tod_init::tod_TENTHS -Created struct value member variable (byte) tod_init::tod_SEC -Created struct value member variable (byte) tod_init::tod_MIN -Created struct value member variable (byte) tod_init::tod_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_init::tod -Created struct value member variable (byte) tod_read::return_TENTHS -Created struct value member variable (byte) tod_read::return_SEC -Created struct value member variable (byte) tod_read::return_MIN -Created struct value member variable (byte) tod_read::return_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_read::return -Created struct value member variable (byte) tod_read::tod_TENTHS -Created struct value member variable (byte) tod_read::tod_SEC -Created struct value member variable (byte) tod_read::tod_MIN -Created struct value member variable (byte) tod_read::tod_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_read::tod -Created struct value member variable (byte) tod_str::tod_TENTHS -Created struct value member variable (byte) tod_str::tod_SEC -Created struct value member variable (byte) tod_str::tod_MIN -Created struct value member variable (byte) tod_str::tod_HOURS -Converted struct value to member variables (struct TIME_OF_DAY) tod_str::tod -Created struct value member variable (byte~) main::$2_TENTHS -Created struct value member variable (byte~) main::$2_SEC -Created struct value member variable (byte~) main::$2_MIN -Created struct value member variable (byte~) main::$2_HOURS -Converted struct value to member variables (struct TIME_OF_DAY~) main::$2 -Converted procedure struct value parameter to member unwinding (void()) tod_init((byte) tod_init::tod_TENTHS , (byte) tod_init::tod_SEC , (byte) tod_init::tod_MIN , (byte) tod_init::tod_HOURS) -Converted procedure struct value parameter to member unwinding (byte*()) tod_str((byte) tod_str::tod_TENTHS , (byte) tod_str::tod_SEC , (byte) tod_str::tod_MIN , (byte) tod_str::tod_HOURS) -Unwinding value copy (struct TIME_OF_DAY) tod_read::tod ← (struct TIME_OF_DAY){ (byte) tod_read::tenths, (byte) tod_read::secs, (byte) tod_read::mins, (byte) tod_read::hours } -Adding value simple copy (byte) tod_read::tod_TENTHS ← (byte) tod_read::tenths -Adding value simple copy (byte) tod_read::tod_SEC ← (byte) tod_read::secs -Adding value simple copy (byte) tod_read::tod_MIN ← (byte) tod_read::mins -Adding value simple copy (byte) tod_read::tod_HOURS ← (byte) tod_read::hours -Unwinding value copy (struct TIME_OF_DAY) tod_read::return ← (struct TIME_OF_DAY) tod_read::tod -Adding value simple copy (byte) tod_read::return_TENTHS ← (byte) tod_read::tod_TENTHS -Adding value simple copy (byte) tod_read::return_SEC ← (byte) tod_read::tod_SEC -Adding value simple copy (byte) tod_read::return_MIN ← (byte) tod_read::tod_MIN -Adding value simple copy (byte) tod_read::return_HOURS ← (byte) tod_read::tod_HOURS -Unwinding value copy (struct TIME_OF_DAY) tod_read::return ← (struct TIME_OF_DAY) tod_read::return -Adding value simple copy (byte) tod_read::return_TENTHS ← (byte) tod_read::return_TENTHS -Adding value simple copy (byte) tod_read::return_SEC ← (byte) tod_read::return_SEC -Adding value simple copy (byte) tod_read::return_MIN ← (byte) tod_read::return_MIN -Adding value simple copy (byte) tod_read::return_HOURS ← (byte) tod_read::return_HOURS -Converted procedure struct return value to member unwinding return { (byte) tod_read::return_TENTHS, (byte) tod_read::return_SEC, (byte) tod_read::return_MIN, (byte) tod_read::return_HOURS } -Converted call struct value parameter to member unwinding (void~) main::$0 ← call tod_init *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_TENTHS) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_SEC) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_MIN) *((byte*)&(struct TIME_OF_DAY) TOD_ZERO+(const byte) OFFSET_STRUCT_TIME_OF_DAY_HOURS) -Converted procedure call LValue to member unwinding { (byte~) main::$2_TENTHS, (byte~) main::$2_SEC, (byte~) main::$2_MIN, (byte~) main::$2_HOURS } ← call tod_read -Converted call struct value parameter to member unwinding (byte*~) main::$3 ← call tod_str (byte~) main::$2_TENTHS (byte~) main::$2_SEC (byte~) main::$2_MIN (byte~) main::$2_HOURS -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_A_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TIMER_B_CONTROL with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.HOURS with member unwinding reference (byte) tod_init::tod_HOURS -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_HOURS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.MIN with member unwinding reference (byte) tod_init::tod_MIN -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_MIN with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.SEC with member unwinding reference (byte) tod_init::tod_SEC -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_SEC with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -Replacing struct member reference (struct TIME_OF_DAY) tod_init::tod.TENTHS with member unwinding reference (byte) tod_init::tod_TENTHS -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_10THS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_HOURS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_HOURS) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_MIN with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_MIN) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_SEC with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_SEC) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA1).TOD_10THS with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA1+(const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS) -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.HOURS with member unwinding reference (byte) tod_str::tod_HOURS -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.HOURS with member unwinding reference (byte) tod_str::tod_HOURS -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.MIN with member unwinding reference (byte) tod_str::tod_MIN -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.MIN with member unwinding reference (byte) tod_str::tod_MIN -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.SEC with member unwinding reference (byte) tod_str::tod_SEC -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.SEC with member unwinding reference (byte) tod_str::tod_SEC -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.TENTHS with member unwinding reference (byte) tod_str::tod_TENTHS -Replacing struct member reference (struct TIME_OF_DAY) tod_str::tod.TENTHS with member unwinding reference (byte) tod_str::tod_TENTHS Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Eliminating unused variable with no statement (struct TIME_OF_DAY~) main::$2 Unwinding list assignment { (byte~) main::$2_TENTHS, (byte~) main::$2_SEC, (byte~) main::$2_MIN, (byte~) main::$2_HOURS } ← { (byte) tod_read::return_TENTHS, (byte) tod_read::return_SEC, (byte) tod_read::return_MIN, (byte) tod_read::return_HOURS } @@ -517,6 +445,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 @@ -1518,6 +1469,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (byte) TIME_OF_DAY::HOURS (byte) TIME_OF_DAY::MIN (byte) TIME_OF_DAY::SEC @@ -2443,6 +2417,7 @@ Uplift Scope [tod_read] 367.33: zp[1]:52 [ tod_read::return_TENTHS#0 ] 220.4: zp Uplift Scope [tod_init] 37.33: zp[1]:14 [ tod_init::tod_HOURS#0 ] 22.4: zp[1]:13 [ tod_init::tod_MIN#0 ] 16: zp[1]:12 [ tod_init::tod_SEC#0 ] 12.44: zp[1]:11 [ tod_init::tod_TENTHS#0 ] Uplift Scope [TIME_OF_DAY] Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplifting [gotoxy] best 8059 combination zp[2]:27 [ gotoxy::$9 ] zp[2]:29 [ gotoxy::$10 ] reg byte a [ gotoxy::y#5 gotoxy::y#4 gotoxy::y#1 ] zp[2]:25 [ gotoxy::$8 ] zp[2]:31 [ gotoxy::offset#0 ] @@ -2454,6 +2429,7 @@ Limited combination testing to 100 combinations of 65536 possible. Uplifting [tod_init] best 6433 combination reg byte y [ tod_init::tod_HOURS#0 ] reg byte x [ tod_init::tod_MIN#0 ] zp[1]:12 [ tod_init::tod_SEC#0 ] zp[1]:11 [ tod_init::tod_TENTHS#0 ] Uplifting [TIME_OF_DAY] best 6433 combination Uplifting [MOS6526_CIA] best 6433 combination +Uplifting [MOS6581_SID] best 6433 combination Uplifting [main] best 6433 combination Attempting to uplift remaining variables inzp[1]:5 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] Uplifting [] best 6433 combination zp[1]:5 [ conio_cursor_y#20 conio_cursor_y#1 conio_cursor_y#18 conio_cursor_y#27 ] @@ -3105,6 +3081,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 diff --git a/src/test/ref/tod-1.sym b/src/test/ref/tod-1.sym index 38bf65724..673df42eb 100644 --- a/src/test/ref/tod-1.sym +++ b/src/test/ref/tod-1.sym @@ -21,6 +21,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_A_CONTROL = (byte) $e (const byte) OFFSET_STRUCT_MOS6526_CIA_TIMER_B_CONTROL = (byte) $f (const byte) OFFSET_STRUCT_MOS6526_CIA_TOD_10THS = (byte) 8 diff --git a/src/test/ref/typedef-1.log b/src/test/ref/typedef-1.log index 655c69020..24027fb22 100644 --- a/src/test/ref/typedef-1.log +++ b/src/test/ref/typedef-1.log @@ -1,12 +1,3 @@ -Created struct value member variable (byte) main::p_x -Created struct value member variable (byte) main::p_y -Converted struct value to member variables (struct PointDef) main::p -Unwinding value copy (struct PointDef) main::p ← { x: (byte) 4, y: (byte) 7 } -Adding value simple copy (byte) main::p_x ← (byte) 4 -Adding value simple copy (byte) main::p_y ← (byte) 7 -Unwinding value copy *((struct PointDef*) main::SCREEN) ← (struct PointDef) main::p -Adding value simple copy *((byte*~) main::$0) ← (byte) main::p_x -Adding value simple copy *((byte*~) main::$1) ← (byte) main::p_y CONTROL FLOW GRAPH SSA @begin: scope:[] from diff --git a/src/test/ref/zeropage-sinus.log b/src/test/ref/zeropage-sinus.log index f872857b9..18d4e8b3d 100644 --- a/src/test/ref/zeropage-sinus.log +++ b/src/test/ref/zeropage-sinus.log @@ -1,5 +1,3 @@ -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A_DDR with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A_DDR) -Replacing struct member reference *((const nomodify struct MOS6526_CIA*) CIA2).PORT_A with member unwinding reference *((byte*)(const nomodify struct MOS6526_CIA*) CIA2+(const byte) OFFSET_STRUCT_MOS6526_CIA_PORT_A) Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx CONTROL FLOW GRAPH SSA @@ -107,6 +105,29 @@ SYMBOL TABLE SSA (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*)(number) $400 (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*cos(toRadians(360*i/256))) @@ -291,6 +312,29 @@ VARIABLE REGISTER WEIGHTS (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (void()) animSprite() (void()) main() (void()) restoreZeropage() @@ -482,6 +526,7 @@ Statement asm { ldx#0 !: lda$00,x staZP_STORAGE,x inx bne!- } always clobbers r REGISTER UPLIFT SCOPES Uplift Scope [MOS6526_CIA] +Uplift Scope [MOS6581_SID] Uplift Scope [main] Uplift Scope [saveZeropage] Uplift Scope [restoreZeropage] @@ -490,6 +535,7 @@ Uplift Scope [animSprite] Uplift Scope [] Uplifting [MOS6526_CIA] best 417 combination +Uplifting [MOS6581_SID] best 417 combination Uplifting [main] best 417 combination Uplifting [saveZeropage] best 417 combination Uplifting [restoreZeropage] best 417 combination @@ -722,6 +768,29 @@ FINAL SYMBOL TABLE (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*cos(toRadians(360*i/256))) diff --git a/src/test/ref/zeropage-sinus.sym b/src/test/ref/zeropage-sinus.sym index 126427526..2245c4e55 100644 --- a/src/test/ref/zeropage-sinus.sym +++ b/src/test/ref/zeropage-sinus.sym @@ -15,6 +15,29 @@ (byte) MOS6526_CIA::TOD_HOURS (byte) MOS6526_CIA::TOD_MIN (byte) MOS6526_CIA::TOD_SEC +(byte) MOS6581_SID::CH1_ATTACK_DECAY +(byte) MOS6581_SID::CH1_CONTROL +(word) MOS6581_SID::CH1_FREQ +(word) MOS6581_SID::CH1_PULSE_WIDTH +(byte) MOS6581_SID::CH1_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH2_ATTACK_DECAY +(byte) MOS6581_SID::CH2_CONTROL +(word) MOS6581_SID::CH2_FREQ +(word) MOS6581_SID::CH2_PULSE_WIDTH +(byte) MOS6581_SID::CH2_SUSTAIN_RELEASE +(byte) MOS6581_SID::CH3_ATTACK_DECAY +(byte) MOS6581_SID::CH3_CONTROL +(byte) MOS6581_SID::CH3_ENV +(word) MOS6581_SID::CH3_FREQ +(byte) MOS6581_SID::CH3_OSC +(word) MOS6581_SID::CH3_PULSE_WIDTH +(byte) MOS6581_SID::CH3_SUSTAIN_RELEASE +(byte) MOS6581_SID::FILTER_CUTOFF_HIGH +(byte) MOS6581_SID::FILTER_CUTOFF_LOW +(byte) MOS6581_SID::FILTER_SETUP +(byte) MOS6581_SID::POT_X +(byte) MOS6581_SID::POT_Y +(byte) MOS6581_SID::VOLUME_FILTER_MODE (const nomodify byte*) SCREEN = (byte*) 1024 (const to_nomodify byte*) SINTABLE[(number) $100] = kickasm {{ .for(var i=0;i<$100;i++) .byte round(127.5+127.5*cos(toRadians(360*i/256)))