1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-16 08:37:47 +00:00

Fixed several compiler issues with volatiles.

This commit is contained in:
jespergravgaard 2018-12-24 02:27:12 +01:00
parent fae4eb9e6c
commit 8ef005e64d
207 changed files with 47409 additions and 21561 deletions
src
main
test
java/dk/camelot64/kickc/test
kc
ref
bitmap-plotter.cfgbitmap-plotter.logbitmap-plotter.symc64dtv-8bppcharstretch.cfgc64dtv-8bppcharstretch.logc64dtv-8bppcharstretch.symc64dtv-8bppchunkystretch.cfgc64dtv-8bppchunkystretch.logc64dtv-8bppchunkystretch.symc64dtv-blittermin.cfgc64dtv-blittermin.logc64dtv-blittermin.symc64dtv-color.cfgc64dtv-color.logc64dtv-color.symc64dtv-gfxexplorer.asmc64dtv-gfxexplorer.cfgc64dtv-gfxexplorer.logc64dtv-gfxexplorer.symc64dtv-gfxmodes.cfgc64dtv-gfxmodes.logc64dtv-gfxmodes.symconstants.cfgconstants.logconstants.symemptyblock-error.asmemptyblock-error.cfgemptyblock-error.logemptyblock-error.sym
examples
halfscii.loghalfscii.symimmzero.asm

@ -12,10 +12,7 @@ import dk.camelot64.kickc.model.statements.StatementPhiBlock;
import dk.camelot64.kickc.model.symbols.*;
import dk.camelot64.kickc.model.types.SymbolType;
import dk.camelot64.kickc.model.types.SymbolTypeArray;
import dk.camelot64.kickc.model.values.LValue;
import dk.camelot64.kickc.model.values.LabelRef;
import dk.camelot64.kickc.model.values.RValue;
import dk.camelot64.kickc.model.values.VariableRef;
import dk.camelot64.kickc.model.values.*;
import java.util.Collection;
import java.util.LinkedHashMap;
@ -241,7 +238,7 @@ public class Pass1GenerateSingleStaticAssignmentForm extends Pass1Base {
}
/**
* Get all predecessros for a control flow block.
* Get all predecessors for a control flow block.
* If the block is the start of an interrupt the @begin is included as a predecessor.
* @param block The block to examine
* @return All predecessor blocks
@ -251,7 +248,14 @@ public class Pass1GenerateSingleStaticAssignmentForm extends Pass1Base {
Symbol symbol = getScope().getSymbol(block.getLabel());
if(symbol instanceof Procedure) {
if(((Procedure) symbol).getInterruptType()!=null) {
predecessors.add(getGraph().getFirstBlock());
// Find all root-level predecessors to the main block
ControlFlowBlock mainBlock = getGraph().getBlock(new LabelRef("main"));
List<ControlFlowBlock> mainPredecessors = getGraph().getPredecessors(mainBlock);
for(ControlFlowBlock mainPredecessor : mainPredecessors) {
if(mainPredecessor.getScope().equals(ScopeRef.ROOT)) {
predecessors.add(mainPredecessor);
}
}
}
}
return predecessors;

@ -39,6 +39,7 @@ public class Pass2AliasElimination extends Pass2SsaOptimization {
public static Aliases findAliases(Program program) {
Aliases candidates = findAliasesCandidates(program);
cleanupCandidates(candidates, program);
cleanupCandidateVolatiles(candidates, program);
return candidates;
}
@ -58,7 +59,7 @@ public class Pass2AliasElimination extends Pass2SsaOptimization {
for(StatementPhiBlock.PhiRValue phiRValue : phiVariable.getValues()) {
RValue rValue = phiRValue.getrValue();
if(aliasSet.contains(rValue)) {
program.getLog().append("Alias candidate removed " + rValue.toString(program));
program.getLog().append("Alias candidate removed (phi-usage) " + rValue.toString(program));
aliasSet.remove(rValue);
break;
}
@ -76,12 +77,41 @@ public class Pass2AliasElimination extends Pass2SsaOptimization {
while(aliasSetListIterator.hasNext()) {
AliasSet aliasSet = aliasSetListIterator.next();
if(aliasSet.getVars().size() <= 1) {
program.getLog().append("Alias candidate removed " + aliasSet.toString(program));
program.getLog().append("Alias candidate removed (solo) " + aliasSet.toString(program));
aliasSetListIterator.remove();
}
}
}
// Remove all candidates that are volatile and not assigned to the same variable
private static void cleanupCandidateVolatiles(Aliases candidates, Program program) {
ListIterator<AliasSet> aliasSetListIterator = candidates.getAliasSets().listIterator();
while(aliasSetListIterator.hasNext()) {
AliasSet aliasSet = aliasSetListIterator.next();
ProgramScope programScope = program.getScope();
// Examine if any volatile variables are in the alias
boolean anyVolatile = false;
boolean sameBaseVar = true;
String unversionedFullName = null;
for(VariableRef variableRef : aliasSet.getVars()) {
Variable variable = programScope.getVariable(variableRef);
if(variable.isDeclaredVolatile()) {
anyVolatile = true;
}
if(unversionedFullName == null) {
unversionedFullName = variableRef.getFullNameUnversioned();
} else if(!unversionedFullName.equals(variableRef.getFullNameUnversioned())) {
sameBaseVar = false;
}
}
if(anyVolatile & !sameBaseVar) {
program.getLog().append("Alias candidate removed (volatile)" + aliasSet.toString(program));
aliasSetListIterator.remove();
}
}
}
/**
* Find variables which are aliases of other variables.
*

@ -133,11 +133,12 @@ public class Pass5FixLongBranches extends Pass5AsmOptimization {
getLog().append("Fixing long branch [" + idx + "] " + asmLine.toString() + " to " + inverseType.getMnemnonic());
String branchDest = asmInstruction.getParameter();
asmInstruction.setType(inverseType);
asmInstruction.setParameter("!" + branchDest + "+");
String newLabel = ("!" + branchDest).replace("$","_");
asmInstruction.setParameter(newLabel+"+");
AsmInstructionType jmpType = AsmInstructionSet.getInstructionType("jmp", AsmAddressingMode.ABS, false);
AsmInstruction jmpInstruction = new AsmInstruction(jmpType, branchDest);
asmSegment.addLineAfter(asmInstruction, jmpInstruction);
asmSegment.addLineAfter(jmpInstruction, new AsmLabel("!" + branchDest));
asmSegment.addLineAfter(jmpInstruction, new AsmLabel(newLabel));
return true;
}
}

@ -1,14 +1,16 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.*;
import dk.camelot64.kickc.model.statements.StatementPhiBlock;
import dk.camelot64.kickc.model.values.LValue;
import dk.camelot64.kickc.model.values.VariableRef;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.VariableReferenceInfos;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.statements.StatementAssignment;
import dk.camelot64.kickc.model.statements.StatementCall;
import dk.camelot64.kickc.model.statements.StatementPhiBlock;
import dk.camelot64.kickc.model.symbols.ConstantVar;
import dk.camelot64.kickc.model.symbols.Variable;
import dk.camelot64.kickc.model.values.LValue;
import dk.camelot64.kickc.model.values.VariableRef;
import java.util.Collection;
import java.util.ListIterator;
@ -35,26 +37,28 @@ public class PassNEliminateUnusedVars extends Pass2SsaOptimization {
if(statement instanceof StatementAssignment) {
StatementAssignment assignment = (StatementAssignment) statement;
LValue lValue = assignment.getlValue();
if(lValue instanceof VariableRef && referenceInfos.isUnused((VariableRef) lValue) && !Pass2ConstantIdentification.isAddressOfUsed((VariableRef) lValue, getProgram())) {
if(getLog().isVerbosePass1CreateSsa()||getLog().isVerboseSSAOptimize()) {
getLog().append("Eliminating unused variable " + lValue.toString(getProgram()) + " and assignment " + assignment.toString(getProgram(), false));
}
stmtIt.remove();
if(lValue instanceof VariableRef && referenceInfos.isUnused((VariableRef) lValue) && Pass2ConstantIdentification.isAddressOfUsed((VariableRef) lValue, getProgram())) {
Variable variable = getScope().getVariable((VariableRef) lValue);
if(variable!=null) {
variable.getScope().remove(variable);
if(variable==null || !variable.isDeclaredVolatile()) {
if(getLog().isVerbosePass1CreateSsa() || getLog().isVerboseSSAOptimize()) {
getLog().append("Eliminating unused variable " + lValue.toString(getProgram()) + " and assignment " + assignment.toString(getProgram(), false));
}
stmtIt.remove();
if(variable != null) {
variable.getScope().remove(variable);
}
modified = true;
}
modified = true;
}
} else if(statement instanceof StatementCall) {
StatementCall call = (StatementCall) statement;
LValue lValue = call.getlValue();
if(lValue instanceof VariableRef && referenceInfos.isUnused((VariableRef) lValue) && !Pass2ConstantIdentification.isAddressOfUsed((VariableRef) lValue, getProgram())) {
if(getLog().isVerbosePass1CreateSsa()||getLog().isVerboseSSAOptimize()) {
if(getLog().isVerbosePass1CreateSsa() || getLog().isVerboseSSAOptimize()) {
getLog().append("Eliminating unused variable - keeping the call " + lValue.toString(getProgram()));
}
Variable variable = getScope().getVariable((VariableRef) lValue);
if(variable!=null) {
if(variable != null) {
variable.getScope().remove(variable);
}
call.setlValue(null);
@ -67,11 +71,11 @@ public class PassNEliminateUnusedVars extends Pass2SsaOptimization {
StatementPhiBlock.PhiVariable phiVariable = phiVarIt.next();
VariableRef variableRef = phiVariable.getVariable();
if(referenceInfos.isUnused(variableRef) && !Pass2ConstantIdentification.isAddressOfUsed(variableRef, getProgram())) {
if(getLog().isVerbosePass1CreateSsa()||getLog().isVerboseSSAOptimize()) {
if(getLog().isVerbosePass1CreateSsa() || getLog().isVerboseSSAOptimize()) {
getLog().append("Eliminating unused variable - keeping the phi block " + variableRef.toString(getProgram()));
}
Variable variable = getScope().getVariable(variableRef);
if(variable!=null) {
if(variable != null) {
variable.getScope().remove(variable);
}
phiVarIt.remove();
@ -85,7 +89,7 @@ public class PassNEliminateUnusedVars extends Pass2SsaOptimization {
Collection<ConstantVar> allConstants = getScope().getAllConstants(true);
for(ConstantVar constant : allConstants) {
if(referenceInfos.isUnused(constant.getRef())) {
if(getLog().isVerbosePass1CreateSsa()||getLog().isVerboseSSAOptimize()) {
if(getLog().isVerbosePass1CreateSsa() || getLog().isVerboseSSAOptimize()) {
getLog().append("Eliminating unused constant " + constant.toString(getProgram()));
}
constant.getScope().remove(constant);

@ -18,8 +18,12 @@ const byte PROCPORT_KERNEL_IO = %00110110;
// BASIC in $A000, I/O in $D000, KERNEL in $E000
const byte PROCPORT_BASIC_KERNEL_IO = %00110111;
// The address of the CHARGEN character set
const byte* CHARGEN = $d000;
// The offset of the sprite pointers from the screen start address
const word SPRITE_PTRS = $3f8;
const byte* SPRITES_XPOS = $d000;
const byte* SPRITES_YPOS = $d001;
const byte* SPRITES_XMSB = $d010;
@ -101,6 +105,7 @@ const void()** KERNEL_IRQ = $0314;
// The vector used when the HARDWARE serves IRQ interrupts
const void()** HARDWARE_IRQ = $fffe;
// The colors of the C64
const byte BLACK = $0;
const byte WHITE = $1;
const byte RED = $2;
@ -130,6 +135,13 @@ inline byte toDd00(byte* gfx) {
return %00000011 ^ (>((word)gfx))>>6;
}
// 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 (byte)(sprite_addr/64)
// The sprite pointers are stored SCREEN+$3f8+sprite_id to set the pointer of each sprite
inline byte toSpritePtr(byte* sprite) {
return (byte)(((word)sprite)>>6);
}
// Select a specific VIC graphics bank by setting the CIA 2 port A ($dd00) as needed
inline void vicSelectGfxBank(byte* gfx) {
*CIA2_PORT_A_DDR = %00000011;

@ -44,35 +44,50 @@ public class TestPrograms {
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
}
@Test
public void testInterruptVolatileWrite() throws IOException, URISyntaxException {
compileAndCompare("test-interrupt-volatile-write");
}
@Test
public void testLongbranchInterruptProblem() throws IOException, URISyntaxException {
compileAndCompare("longbranch-interrupt-problem");
}
@Test
public void testTetrisSprites() throws IOException, URISyntaxException {
compileAndCompare("examples/tetris/test-sprites");
}
@Test
public void testTetris() throws IOException, URISyntaxException {
compileAndCompare("examples/tetris/tetris");
}
/*
@Test
public void testVarInitProblem() throws IOException, URISyntaxException {
compileAndCompare("var-init-problem");
}
/*
@Test
public void testVarInitProblem() throws IOException, URISyntaxException {
compileAndCompare("var-init-problem");
}
@Test
public void testConstIfProblem() throws IOException, URISyntaxException {
compileAndCompare("const-if-problem");
}
@Test
public void testConstIfProblem() throws IOException, URISyntaxException {
compileAndCompare("const-if-problem");
}
@Test
public void testTetrisNullPointer() throws IOException, URISyntaxException {
compileAndCompare("tetris-npe");
}
@Test
public void testTetrisNullPointer() throws IOException, URISyntaxException {
compileAndCompare("tetris-npe");
}
//@Test
//public void testUnrollCall() throws IOException, URISyntaxException {
// compileAndCompare("unroll-call");
//}
//@Test
//public void testUnrollCall() throws IOException, URISyntaxException {
// compileAndCompare("unroll-call");
//}
*/
*/
@Test
public void testFastMultiply8() throws IOException, URISyntaxException {
compileAndCompare("examples/fastmultiply/fastmultiply8.kc");

Binary file not shown.

Binary file not shown.

Before

(image error) Size: 7.3 KiB

After

(image error) Size: 4.3 KiB

@ -0,0 +1 @@
xí<>M<EFBFBD>5ÇŸÉl§[4"E\zBR<>Û²mwBu9”+G.¤QVB¤Í*iy; >âÆ™oÃWàËàÇö¼…™(‰Ú®~&c{<ÿ¿Ç󳣕âg<C3A2>DäØïcòúÕb5Ϧ¯ä¾)>ŸL¿þúòr¶\5˦…œ˜ât6Ÿ¯^N®ìµéb¾X®¾ûef/½˜\Ùü}yh޶nñÃly9_üh W“¥;›ûÌõ‡òÈ +øH>•39ÕŠÕtiZœš6<C5A1>ˆ)Ïf/+«Ÿlî±i"ò³Í?0÷ë•7˜t0%7)T(Ï<>J˜¬B°JîD$Æs‰•&q<>&ðî¼Õ:û¿stй¦ó"ºk¶®ÆZç#}ïH¬>BîMå¡BâŸ*ôáJ Ñ*øy"3,ÇG†B2lêì?S‡k:IfÓÎçu<C3A7>,Ñ”í|FgG?þ»ž‡ðƒüÀüÀüÀüÀüÀ:ðÃ{‡ø<>ø<>øA~xïð?èÀüÀüÀüÀüÀüÀÏ5à'ŽN¤ßuGù<47>y¤ß½Gû~¤}±ö)DJ9‰t<E280B0>Ò‡†i=¾ýRä79²Œ&š’ê)(01ågáóI]]D2ÔÒŸ×ú{Ö¦r¶wwRQŒ¬Ht!¡)YŸ¸EcVÇ[)R·þ„÷wP­ˆ…_#Ÿù®>‰3i¹HŽ£<ó‘;<3B>ËRR v°~RQÙx…£šnšœ‡Öµcq^ô®$r³¾;< 6oÖÔ±u†Pg8±6 Ž 6 Ž 6 Ž 6 Ž 6 Ž 6 Ž ¨3œØ€:É ¨3œØ€:o <>¨w^9È&×ÈÛq°qx}orÔ<72>ÏiÜmÙ_I1) ýn??Ö<>ÑqU[H3¯IcR}=2ä3[|Ooõå>1ÇqKÎO#<17>à¬Rü@•òžÛ#; ³Ž^œTý¼ÓÓÏ{U{=-î¬u]ÛÞíi{·R;éiq»jqÖÓÂå>ÒÚž"ߘãÏ[™¤6}¡+Å@—<>²<EFBFBD>È ñ—núF[díh<C3AD>šãŸ[©+»0°ì©Q˺3T÷üuºí=ßÐ{šz4h<34>èqá{4¸Eh ÐcNv#FD!]9ËÏÂ穪‹àôPC”„Õjˆ•}Ÿ7EÅÈŠ<C388>DÇšc<C5A1>‰[4fu¼•Â.<qÖ°rE,üùÌwõ‰÷R…ÒrKá™<C3A1>Üi\ì8Û<38>±¾¸R*­Ñ¿5‡å0”hõ¹6\MUîÜ<C3AE>:®èß`>ŒëzÖ})ohÐÝd㣘úlykš$¥M»Á¦ìÖ6Ym“Φˆ4Åf“M­ÝcÓÙ +Ûg³êûd·G=(‹Í;j³5É ƒ êØ€:¨cê Ž ¨ƒ:6 êØ€:p`êÀ<C3AA> ¨¨ƒ: :¨cê Ž ¨ƒ:6 êØ€:¨cê Ž ¨6 Þ½÷î°o-û_l2lÞVÔ;¯d“käí¸Ø8¼¾79êÆç4î¶l Г“H© §¬Õ 2u¾ 'ß%@O-á§Г·ôäI#šA-ÑÐÓÕÏv€ž®}zºÚ¶ôtµhèéjÑÐÓÕ¢ÐãVo<56>É“i€ýư Г¸RõU²!ëeZzÌÅ '™<õj™v€žíîqwÈ §

Binary file not shown.

After

(image error) Size: 753 B

@ -0,0 +1,16 @@
.label PLAYFIELD_SPRITES = $3000
.pc = PLAYFIELD_SPRITES "PLayfield Sprites"
.var charset = LoadPicture("nes-playfield.png", List().add($010101, $000000))
.for(var sy=0;sy<10;sy++) {
.for(var sx=0;sx<3;sx++) {
.for (var y=0;y<21; y++) {
.for (var c=0; c<3; c++) {
.byte charset.getSinglecolorByte(sx*3+c,sy*21+y)
}
}
.byte 0
}
}

@ -0,0 +1,102 @@
import "c64"
byte* PLAYFIELD_SPRITES = $2000;
byte* PLAYFIELD_CHARSET = $1000;
byte* PLAYFIELD_SCREEN = $0400;
void main() {
init_sprites();
init_irq();
}
// Setup the sprites
void init_sprites() {
vicSelectGfxBank(PLAYFIELD_SCREEN);
*D018 = toD018(PLAYFIELD_SCREEN, PLAYFIELD_CHARSET);
*SPRITES_ENABLE = %00001111;
*SPRITES_EXPAND_X = *SPRITES_EXPAND_Y = *SPRITES_MC = 0;
byte* sprites_ptr = PLAYFIELD_SCREEN+SPRITE_PTRS;
byte xpos = 24+14*8;
byte ypos = 50;
byte ptr = toSpritePtr(PLAYFIELD_SPRITES);
for(byte s:0..3) {
byte s2 = s<<1;
SPRITES_XPOS[s2] = xpos;
SPRITES_YPOS[s2] = ypos;
SPRITES_COLS[s] = BLACK;
sprites_ptr[s] = ptr;
xpos = xpos+24;
ptr++;
}
}
// The line of the first IRQ - $30 is 2 lines before the start of the screen
const byte IRQ_RASTER_FIRST = $30;
// The raster line of the next IRQ
volatile byte irq_raster_next = IRQ_RASTER_FIRST;
// Counting the 10 IRQs
volatile byte irq_cnt = 0;
// Y-pos of the sprites on the next IRQ
volatile byte irq_sprite_ypos = 50;
// Setup the IRQ
void init_irq() {
asm { sei }
// Disable CIA 1 Timer IRQ
*CIA1_INTERRUPT = CIA_INTERRUPT_CLEAR;
// Set raster line
*VIC_CONTROL &=$7f;
*RASTER = IRQ_RASTER_FIRST;
// Enable Raster Interrupt
*IRQ_ENABLE = IRQ_RASTER;
// Set the IRQ routine
*KERNEL_IRQ = &irq;
asm { cli }
}
// Raster Interrupt Routine - sets up the sprites covering the playfield
// Repeats 10 timers every 21 lines from line IRQ_RASTER_FIRST
interrupt(kernel_min) void irq() {
*BORDERCOL = *BGCOL = WHITE;
// Place the sprites
SPRITES_YPOS[0] = irq_sprite_ypos;
SPRITES_YPOS[2] = irq_sprite_ypos;
SPRITES_YPOS[4] = irq_sprite_ypos;
SPRITES_YPOS[6] = irq_sprite_ypos;
// Find next raster line / sprite positions
if(++irq_cnt==10) {
irq_cnt = 0;
irq_raster_next = IRQ_RASTER_FIRST;
irq_sprite_ypos = 50;
} else {
irq_raster_next += 21;
irq_sprite_ypos += 21;
}
// Acknowledge the IRQ and setup the next one
*RASTER = irq_raster_next;
*IRQ_STATUS = IRQ_RASTER;
*BORDERCOL = BLACK;
*BGCOL = BLUE;
}
kickasm(pc PLAYFIELD_SPRITES, resource "nes-playfield.png") {{
.var sprites = LoadPicture("nes-playfield.png", List().add($010101, $000000))
.for(var sy=0;sy<10;sy++) {
.for(var sx=0;sx<3;sx++) {
.for (var y=0;y<21; y++) {
.for (var c=0; c<3; c++) {
.byte sprites.getSinglecolorByte(sx*3+c,sy*21+y)
}
}
.byte 0
}
}
}}

@ -290,8 +290,9 @@ byte*[PLAYFIELD_LINES+3] screen_lines;
// Initialize rendering
void render_init() {
*BGCOL = BLACK;
// Clear the screen
fill(SCREEN,1000,$a0);
fill(SCREEN,1000,$d0);
fill(COLS,1000,BLACK);
// Initialize the screen line pointers;
byte* li = COLS + 40 + 15;

@ -0,0 +1,24 @@
// Tests that long branch fixing works with interrupt exits (to $ea81)
const void()** KERNEL_IRQ = $0314;
const byte* BGCOL = $d020;
volatile byte col = 0;
void main() {
*KERNEL_IRQ = &irq;
while(true) {
if(col>10) {
col = 0;
}
}
}
interrupt(kernel_min) void irq() {
asm {
lda $dc0d
}
*BGCOL = col;
if(col!=0) {
col++;
}
}

@ -0,0 +1,27 @@
// Tests that volatile variables can be both read & written inside & outside interrupts
// Currently fails because the modification is optimized away
const void()** KERNEL_IRQ = $0314;
const byte* BGCOL = $d020;
volatile byte col = 0;
void main() {
*KERNEL_IRQ = &irq;
while(true) {
if(col>10) {
col = 0;
}
}
}
interrupt(kernel_min) void irq() {
asm {
lda $dc0d
}
*BGCOL = col;
if(col!=0) {
col++;
} else {
col += 2;
}
}

@ -47,78 +47,80 @@ plots::@return: scope:[plots] from plots::@3
plot: scope:[plot] from plots::@1
[23] (byte~) plot::$6 ← *((const byte[256]) plot_xhi#0 + (byte) plot::x#0)
[24] (byte*) plot::plotter_x#1 ← ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0 hi= (byte~) plot::$6
[25] (byte~) plot::$7 ← *((const byte[256]) plot_xlo#0 + (byte) plot::x#0)
[26] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7
[27] (byte~) plot::$8 ← *((const byte[256]) plot_yhi#0 + (byte) plot::y#0)
[28] (word) plot::plotter_y#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 hi= (byte~) plot::$8
[29] (byte~) plot::$9 ← *((const byte[256]) plot_ylo#0 + (byte) plot::y#0)
[30] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9
[31] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2
[32] (byte~) plot::$5 ← *((byte*) plot::plotter#0) | *((const byte[256]) plot_bit#0 + (byte) plot::x#0)
[33] *((byte*) plot::plotter#0) ← (byte~) plot::$5
[25] (byte~) plot::$1 ← < (byte*) plot::plotter_x#1
[26] (byte~) plot::$7 ← *((const byte[256]) plot_xlo#0 + (byte) plot::x#0)
[27] (byte*) plot::plotter_x#2 ← (byte*) plot::plotter_x#1 lo= (byte~) plot::$7
[28] (byte~) plot::$8 ← *((const byte[256]) plot_yhi#0 + (byte) plot::y#0)
[29] (word) plot::plotter_y#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0 hi= (byte~) plot::$8
[30] (byte~) plot::$3 ← < (word) plot::plotter_y#1
[31] (byte~) plot::$9 ← *((const byte[256]) plot_ylo#0 + (byte) plot::y#0)
[32] (word) plot::plotter_y#2 ← (word) plot::plotter_y#1 lo= (byte~) plot::$9
[33] (byte*) plot::plotter#0 ← (byte*) plot::plotter_x#2 + (word) plot::plotter_y#2
[34] (byte~) plot::$5 ← *((byte*) plot::plotter#0) | *((const byte[256]) plot_bit#0 + (byte) plot::x#0)
[35] *((byte*) plot::plotter#0) ← (byte~) plot::$5
to:plot::@return
plot::@return: scope:[plot] from plot
[34] return
[36] return
to:@return
init_plot_tables: scope:[init_plot_tables] from main::@5
[35] phi()
[37] phi()
to:init_plot_tables::@1
init_plot_tables::@1: scope:[init_plot_tables] from init_plot_tables init_plot_tables::@2
[36] (byte) init_plot_tables::bits#3 ← phi( init_plot_tables/(byte/word/signed word/dword/signed dword) 128 init_plot_tables::@2/(byte) init_plot_tables::bits#4 )
[36] (byte) init_plot_tables::x#2 ← phi( init_plot_tables/(byte/signed byte/word/signed word/dword/signed dword) 0 init_plot_tables::@2/(byte) init_plot_tables::x#1 )
[37] (byte~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (byte/word/signed word/dword/signed dword) 248
[38] *((const byte[256]) plot_xlo#0 + (byte) init_plot_tables::x#2) ← (byte~) init_plot_tables::$0
[39] *((const byte[256]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0
[40] *((const byte[256]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3
[41] (byte) init_plot_tables::bits#1 ← (byte) init_plot_tables::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[42] if((byte) init_plot_tables::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@10
[38] (byte) init_plot_tables::bits#3 ← phi( init_plot_tables/(byte/word/signed word/dword/signed dword) 128 init_plot_tables::@2/(byte) init_plot_tables::bits#4 )
[38] (byte) init_plot_tables::x#2 ← phi( init_plot_tables/(byte/signed byte/word/signed word/dword/signed dword) 0 init_plot_tables::@2/(byte) init_plot_tables::x#1 )
[39] (byte~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (byte/word/signed word/dword/signed dword) 248
[40] *((const byte[256]) plot_xlo#0 + (byte) init_plot_tables::x#2) ← (byte~) init_plot_tables::$0
[41] *((const byte[256]) plot_xhi#0 + (byte) init_plot_tables::x#2) ← >(const byte*) BITMAP#0
[42] *((const byte[256]) plot_bit#0 + (byte) init_plot_tables::x#2) ← (byte) init_plot_tables::bits#3
[43] (byte) init_plot_tables::bits#1 ← (byte) init_plot_tables::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[44] if((byte) init_plot_tables::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@10
to:init_plot_tables::@2
init_plot_tables::@2: scope:[init_plot_tables] from init_plot_tables::@1 init_plot_tables::@10
[43] (byte) init_plot_tables::bits#4 ← phi( init_plot_tables::@10/(byte) init_plot_tables::bits#1 init_plot_tables::@1/(byte/word/signed word/dword/signed dword) 128 )
[44] (byte) init_plot_tables::x#1 ← ++ (byte) init_plot_tables::x#2
[45] if((byte) init_plot_tables::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@1
[45] (byte) init_plot_tables::bits#4 ← phi( init_plot_tables::@10/(byte) init_plot_tables::bits#1 init_plot_tables::@1/(byte/word/signed word/dword/signed dword) 128 )
[46] (byte) init_plot_tables::x#1 ← ++ (byte) init_plot_tables::x#2
[47] if((byte) init_plot_tables::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@1
to:init_plot_tables::@3
init_plot_tables::@3: scope:[init_plot_tables] from init_plot_tables::@2 init_plot_tables::@4
[46] (byte*) init_plot_tables::yoffs#2 ← phi( init_plot_tables::@4/(byte*) init_plot_tables::yoffs#4 init_plot_tables::@2/((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0 )
[46] (byte) init_plot_tables::y#2 ← phi( init_plot_tables::@4/(byte) init_plot_tables::y#1 init_plot_tables::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[47] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[48] (byte~) init_plot_tables::$7 ← < (byte*) init_plot_tables::yoffs#2
[49] (byte~) init_plot_tables::$8 ← (byte~) init_plot_tables::$6 | (byte~) init_plot_tables::$7
[50] *((const byte[256]) plot_ylo#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$8
[51] (byte~) init_plot_tables::$9 ← > (byte*) init_plot_tables::yoffs#2
[52] *((const byte[256]) plot_yhi#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$9
[53] (byte~) init_plot_tables::$10 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[54] if((byte~) init_plot_tables::$10!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto init_plot_tables::@4
[48] (byte*) init_plot_tables::yoffs#2 ← phi( init_plot_tables::@4/(byte*) init_plot_tables::yoffs#4 init_plot_tables::@2/((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0 )
[48] (byte) init_plot_tables::y#2 ← phi( init_plot_tables::@4/(byte) init_plot_tables::y#1 init_plot_tables::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[49] (byte~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[50] (byte~) init_plot_tables::$7 ← < (byte*) init_plot_tables::yoffs#2
[51] (byte~) init_plot_tables::$8 ← (byte~) init_plot_tables::$6 | (byte~) init_plot_tables::$7
[52] *((const byte[256]) plot_ylo#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$8
[53] (byte~) init_plot_tables::$9 ← > (byte*) init_plot_tables::yoffs#2
[54] *((const byte[256]) plot_yhi#0 + (byte) init_plot_tables::y#2) ← (byte~) init_plot_tables::$9
[55] (byte~) init_plot_tables::$10 ← (byte) init_plot_tables::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[56] if((byte~) init_plot_tables::$10!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto init_plot_tables::@4
to:init_plot_tables::@7
init_plot_tables::@7: scope:[init_plot_tables] from init_plot_tables::@3
[55] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8
[57] (byte*) init_plot_tables::yoffs#1 ← (byte*) init_plot_tables::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8
to:init_plot_tables::@4
init_plot_tables::@4: scope:[init_plot_tables] from init_plot_tables::@3 init_plot_tables::@7
[56] (byte*) init_plot_tables::yoffs#4 ← phi( init_plot_tables::@3/(byte*) init_plot_tables::yoffs#2 init_plot_tables::@7/(byte*) init_plot_tables::yoffs#1 )
[57] (byte) init_plot_tables::y#1 ← ++ (byte) init_plot_tables::y#2
[58] if((byte) init_plot_tables::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@3
[58] (byte*) init_plot_tables::yoffs#4 ← phi( init_plot_tables::@3/(byte*) init_plot_tables::yoffs#2 init_plot_tables::@7/(byte*) init_plot_tables::yoffs#1 )
[59] (byte) init_plot_tables::y#1 ← ++ (byte) init_plot_tables::y#2
[60] if((byte) init_plot_tables::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@3
to:init_plot_tables::@return
init_plot_tables::@return: scope:[init_plot_tables] from init_plot_tables::@4
[59] return
[61] return
to:@return
init_plot_tables::@10: scope:[init_plot_tables] from init_plot_tables::@1
[60] phi()
[62] phi()
to:init_plot_tables::@2
init_screen: scope:[init_screen] from main
[61] phi()
[63] phi()
to:init_screen::@1
init_screen::@1: scope:[init_screen] from init_screen init_screen::@1
[62] (byte*) init_screen::b#2 ← phi( init_screen/(const byte*) BITMAP#0 init_screen::@1/(byte*) init_screen::b#1 )
[63] *((byte*) init_screen::b#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[64] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2
[65] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word/signed word/dword/signed dword) 8192) goto init_screen::@1
[64] (byte*) init_screen::b#2 ← phi( init_screen/(const byte*) BITMAP#0 init_screen::@1/(byte*) init_screen::b#1 )
[65] *((byte*) init_screen::b#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[66] (byte*) init_screen::b#1 ← ++ (byte*) init_screen::b#2
[67] if((byte*) init_screen::b#1!=(const byte*) BITMAP#0+(word/signed word/dword/signed dword) 8192) goto init_screen::@1
to:init_screen::@2
init_screen::@2: scope:[init_screen] from init_screen::@1 init_screen::@2
[66] (byte*) init_screen::c#2 ← phi( init_screen::@2/(byte*) init_screen::c#1 init_screen::@1/(const byte*) SCREEN#0 )
[67] *((byte*) init_screen::c#2) ← (byte/signed byte/word/signed word/dword/signed dword) 20
[68] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2
[69] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1024) goto init_screen::@2
[68] (byte*) init_screen::c#2 ← phi( init_screen::@2/(byte*) init_screen::c#1 init_screen::@1/(const byte*) SCREEN#0 )
[69] *((byte*) init_screen::c#2) ← (byte/signed byte/word/signed word/dword/signed dword) 20
[70] (byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#2
[71] if((byte*) init_screen::c#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1024) goto init_screen::@2
to:init_screen::@return
init_screen::@return: scope:[init_screen] from init_screen::@2
[70] return
[72] return
to:@return

File diff suppressed because it is too large Load Diff

@ -7,18 +7,24 @@
(const byte*) BITMAP#0 BITMAP = ((byte*))(word/signed word/dword/signed dword) 8192
(byte) BMM
(const byte) BMM#0 BMM = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte*) COLS
(byte) CSEL
(byte*) D011
(const byte*) D011#0 D011 = ((byte*))(word/dword/signed dword) 53265
(byte*) D016
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) 53272
(byte) DEN
(const byte) DEN#0 DEN = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) ECM
(byte*) FGCOL
(const byte*) FGCOL#0 FGCOL = ((byte*))(word/dword/signed dword) 53281
(byte) MCM
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RSEL
(const byte) RSEL#0 RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) RST8
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(void()) init_plot_tables()
@ -65,6 +71,8 @@
(label) main::@5
(label) main::@7
(void()) plot((byte) plot::x , (byte) plot::y)
(byte~) plot::$1 reg byte a 20.0
(byte~) plot::$3 reg byte a 20.0
(byte~) plot::$5 reg byte a 4.0
(byte~) plot::$6 reg byte a 4.0
(byte~) plot::$7 reg byte a 4.0
@ -75,14 +83,14 @@
(byte*) plot::plotter#0 plotter zp ZP_WORD:2 3.0
(byte*) plot::plotter_x
(byte*) plot::plotter_x#1 plotter_x zp ZP_WORD:2 2.0
(byte*) plot::plotter_x#2 plotter_x zp ZP_WORD:2 0.8
(byte*) plot::plotter_x#2 plotter_x zp ZP_WORD:2 0.6666666666666666
(word) plot::plotter_y
(word) plot::plotter_y#1 plotter_y zp ZP_WORD:6 2.0
(word) plot::plotter_y#2 plotter_y zp ZP_WORD:6 4.0
(byte) plot::x
(byte) plot::x#0 x zp ZP_BYTE:4 9.727272727272727
(byte) plot::x#0 x zp ZP_BYTE:4 8.23076923076923
(byte) plot::y
(byte) plot::y#0 y zp ZP_BYTE:5 15.000000000000002
(byte) plot::y#0 y zp ZP_BYTE:5 11.666666666666664
(byte[256]) plot_bit
(const byte[256]) plot_bit#0 plot_bit = { fill( 256, 0) }
(byte[256]) plot_xhi
@ -115,9 +123,11 @@ zp ZP_WORD:2 [ init_plot_tables::yoffs#2 init_plot_tables::yoffs#4 init_plot_tab
zp ZP_BYTE:4 [ plot::x#0 init_plot_tables::$6 ]
zp ZP_BYTE:5 [ plot::y#0 ]
reg byte a [ plot::$6 ]
reg byte a [ plot::$1 ]
reg byte a [ plot::$7 ]
reg byte a [ plot::$8 ]
zp ZP_WORD:6 [ plot::plotter_y#1 plot::plotter_y#2 ]
reg byte a [ plot::$3 ]
reg byte a [ plot::$9 ]
reg byte a [ plot::$5 ]
reg byte a [ init_plot_tables::$0 ]

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@8
@8: scope:[] from @begin
to:@9
@9: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @8
@end: scope:[] from @9
[3] phi()
main: scope:[main] from @8
main: scope:[main] from @9
asm { sei }
[5] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[6] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0

File diff suppressed because it is too large Load Diff

@ -1,32 +1,129 @@
(label) @8
(label) @9
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word/dword/signed dword) 53248
(byte*) CHARSET8
(const byte*) CHARSET8#0 CHARSET8 = ((byte*))(word/dword/signed dword) 32768
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(const byte*) CIA2_PORT_A#0 CIA2_PORT_A = ((byte*))(word/dword/signed dword) 56576
(byte*) CIA2_PORT_A_DDR
(const byte*) CIA2_PORT_A_DDR#0 CIA2_PORT_A_DDR = ((byte*))(word/dword/signed dword) 56578
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) DTV_BADLINE_OFF
(const byte) DTV_BADLINE_OFF#0 DTV_BADLINE_OFF = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte*) DTV_BLITTER_ALU
(byte*) DTV_BLITTER_CONTROL
(byte*) DTV_BLITTER_CONTROL2
(byte*) DTV_BLITTER_DEST_HI
(byte*) DTV_BLITTER_DEST_LIN_HI
(byte*) DTV_BLITTER_DEST_LIN_LO
(byte*) DTV_BLITTER_DEST_LO
(byte*) DTV_BLITTER_DEST_MI
(byte*) DTV_BLITTER_DEST_MOD_HI
(byte*) DTV_BLITTER_DEST_MOD_LO
(byte*) DTV_BLITTER_DEST_STEP
(byte*) DTV_BLITTER_LEN_HI
(byte*) DTV_BLITTER_LEN_LO
(byte*) DTV_BLITTER_SRCA_HI
(byte*) DTV_BLITTER_SRCA_LIN_HI
(byte*) DTV_BLITTER_SRCA_LIN_LO
(byte*) DTV_BLITTER_SRCA_LO
(byte*) DTV_BLITTER_SRCA_MI
(byte*) DTV_BLITTER_SRCA_MOD_HI
(byte*) DTV_BLITTER_SRCA_MOD_LO
(byte*) DTV_BLITTER_SRCA_STEP
(byte*) DTV_BLITTER_SRCB_HI
(byte*) DTV_BLITTER_SRCB_LIN_HI
(byte*) DTV_BLITTER_SRCB_LIN_LO
(byte*) DTV_BLITTER_SRCB_LO
(byte*) DTV_BLITTER_SRCB_MI
(byte*) DTV_BLITTER_SRCB_MOD_HI
(byte*) DTV_BLITTER_SRCB_MOD_LO
(byte*) DTV_BLITTER_SRCB_STEP
(byte*) DTV_BLITTER_TRANSPARANCY
(byte) DTV_BLIT_ADD
(byte) DTV_BLIT_AND
(byte) DTV_BLIT_CIA_IRQ
(byte) DTV_BLIT_CLEAR_IRQ
(byte) DTV_BLIT_DEST_CONT
(byte) DTV_BLIT_DEST_FWD
(byte) DTV_BLIT_DISABLE_B
(byte) DTV_BLIT_FORCE_START
(byte) DTV_BLIT_IRQ_EN
(byte) DTV_BLIT_NAND
(byte) DTV_BLIT_NOR
(byte) DTV_BLIT_OR
(byte) DTV_BLIT_SHIFT0
(byte) DTV_BLIT_SHIFT1
(byte) DTV_BLIT_SHIFT2
(byte) DTV_BLIT_SHIFT3
(byte) DTV_BLIT_SHIFT4
(byte) DTV_BLIT_SHIFT5
(byte) DTV_BLIT_SHIFT6
(byte) DTV_BLIT_SHIFT7
(byte) DTV_BLIT_SRCA_CONT
(byte) DTV_BLIT_SRCA_FWD
(byte) DTV_BLIT_SRCB_CONT
(byte) DTV_BLIT_SRCB_FWD
(byte) DTV_BLIT_STATUS_BUSY
(byte) DTV_BLIT_STATUS_IRQ
(byte) DTV_BLIT_SUB
(byte) DTV_BLIT_TRANSPARANCY_NONE
(byte) DTV_BLIT_VBLANK
(byte) DTV_BLIT_VIC_IRQ
(byte) DTV_BLIT_WRITE_NONTRANSPARENT
(byte) DTV_BLIT_WRITE_TRANSPARENT
(byte) DTV_BLIT_XNOR
(byte) DTV_BLIT_XOR
(byte) DTV_BORDER_OFF
(byte) DTV_CHUNKY
(const byte) DTV_CHUNKY#0 DTV_CHUNKY = (byte/signed byte/word/signed word/dword/signed dword) 64
(byte) DTV_COLORRAM_OFF
(dword) DTV_COLOR_BANK_DEFAULT
(byte*) DTV_COLOR_BANK_HI
(byte*) DTV_COLOR_BANK_LO
(byte*) DTV_CONTROL
(const byte*) DTV_CONTROL#0 DTV_CONTROL = ((byte*))(word/dword/signed dword) 53308
(byte*) DTV_FEATURE
(const byte*) DTV_FEATURE#0 DTV_FEATURE = ((byte*))(word/dword/signed dword) 53311
(byte) DTV_FEATURE_DISABLE_TIL_RESET
(byte) DTV_FEATURE_ENABLE
(const byte) DTV_FEATURE_ENABLE#0 DTV_FEATURE_ENABLE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) DTV_GRAPHICS_HICOL_BANK
(byte*) DTV_GRAPHICS_VIC_BANK
(byte) DTV_HIGHCOLOR
(const byte) DTV_HIGHCOLOR#0 DTV_HIGHCOLOR = (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) DTV_LINEAR
(const byte) DTV_LINEAR#0 DTV_LINEAR = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) DTV_OVERSCAN
(byte*) DTV_PALETTE
(const byte*) DTV_PALETTE#0 DTV_PALETTE = ((byte*))(word/dword/signed dword) 53760
(byte[16]) DTV_PALETTE_DEFAULT
(byte*) DTV_PLANEA_MODULO_HI
(const byte*) DTV_PLANEA_MODULO_HI#0 DTV_PLANEA_MODULO_HI = ((byte*))(word/dword/signed dword) 53305
(byte*) DTV_PLANEA_MODULO_LO
@ -51,20 +148,56 @@
(const byte*) DTV_PLANEB_START_MI#0 DTV_PLANEB_START_MI = ((byte*))(word/dword/signed dword) 53322
(byte*) DTV_PLANEB_STEP
(const byte*) DTV_PLANEB_STEP#0 DTV_PLANEB_STEP = ((byte*))(word/dword/signed dword) 53324
(byte*) DTV_SPRITE_BANK
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(const byte) PROCPORT_RAM_CHARROM#0 PROCPORT_RAM_CHARROM = (byte/signed byte/word/signed word/dword/signed dword) 49
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 31744
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = ((byte*))(word/dword/signed dword) 53265
(byte*) VIC_CONTROL2
@ -81,6 +214,9 @@
(const byte*) VIC_MEMORY#0 VIC_MEMORY = ((byte*))(word/dword/signed dword) 53272
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx)
(label) dtvSetCpuBankSegment1::@return
(byte*) dtvSetCpuBankSegment1::cpuBank

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@6
@6: scope:[] from @begin
to:@7
@7: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @6
@end: scope:[] from @7
[3] phi()
main: scope:[main] from @6
main: scope:[main] from @7
asm { sei }
[5] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[6] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0

File diff suppressed because it is too large Load Diff

@ -1,32 +1,135 @@
(label) @6
(label) @7
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CHUNKY
(const byte*) CHUNKY#0 CHUNKY = ((byte*))(word/dword/signed dword) 32768
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(const byte*) CIA2_PORT_A#0 CIA2_PORT_A = ((byte*))(word/dword/signed dword) 56576
(byte*) CIA2_PORT_A_DDR
(const byte*) CIA2_PORT_A_DDR#0 CIA2_PORT_A_DDR = ((byte*))(word/dword/signed dword) 56578
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) DTV_BADLINE_OFF
(const byte) DTV_BADLINE_OFF#0 DTV_BADLINE_OFF = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte*) DTV_BLITTER_ALU
(byte*) DTV_BLITTER_CONTROL
(byte*) DTV_BLITTER_CONTROL2
(byte*) DTV_BLITTER_DEST_HI
(byte*) DTV_BLITTER_DEST_LIN_HI
(byte*) DTV_BLITTER_DEST_LIN_LO
(byte*) DTV_BLITTER_DEST_LO
(byte*) DTV_BLITTER_DEST_MI
(byte*) DTV_BLITTER_DEST_MOD_HI
(byte*) DTV_BLITTER_DEST_MOD_LO
(byte*) DTV_BLITTER_DEST_STEP
(byte*) DTV_BLITTER_LEN_HI
(byte*) DTV_BLITTER_LEN_LO
(byte*) DTV_BLITTER_SRCA_HI
(byte*) DTV_BLITTER_SRCA_LIN_HI
(byte*) DTV_BLITTER_SRCA_LIN_LO
(byte*) DTV_BLITTER_SRCA_LO
(byte*) DTV_BLITTER_SRCA_MI
(byte*) DTV_BLITTER_SRCA_MOD_HI
(byte*) DTV_BLITTER_SRCA_MOD_LO
(byte*) DTV_BLITTER_SRCA_STEP
(byte*) DTV_BLITTER_SRCB_HI
(byte*) DTV_BLITTER_SRCB_LIN_HI
(byte*) DTV_BLITTER_SRCB_LIN_LO
(byte*) DTV_BLITTER_SRCB_LO
(byte*) DTV_BLITTER_SRCB_MI
(byte*) DTV_BLITTER_SRCB_MOD_HI
(byte*) DTV_BLITTER_SRCB_MOD_LO
(byte*) DTV_BLITTER_SRCB_STEP
(byte*) DTV_BLITTER_TRANSPARANCY
(byte) DTV_BLIT_ADD
(byte) DTV_BLIT_AND
(byte) DTV_BLIT_CIA_IRQ
(byte) DTV_BLIT_CLEAR_IRQ
(byte) DTV_BLIT_DEST_CONT
(byte) DTV_BLIT_DEST_FWD
(byte) DTV_BLIT_DISABLE_B
(byte) DTV_BLIT_FORCE_START
(byte) DTV_BLIT_IRQ_EN
(byte) DTV_BLIT_NAND
(byte) DTV_BLIT_NOR
(byte) DTV_BLIT_OR
(byte) DTV_BLIT_SHIFT0
(byte) DTV_BLIT_SHIFT1
(byte) DTV_BLIT_SHIFT2
(byte) DTV_BLIT_SHIFT3
(byte) DTV_BLIT_SHIFT4
(byte) DTV_BLIT_SHIFT5
(byte) DTV_BLIT_SHIFT6
(byte) DTV_BLIT_SHIFT7
(byte) DTV_BLIT_SRCA_CONT
(byte) DTV_BLIT_SRCA_FWD
(byte) DTV_BLIT_SRCB_CONT
(byte) DTV_BLIT_SRCB_FWD
(byte) DTV_BLIT_STATUS_BUSY
(byte) DTV_BLIT_STATUS_IRQ
(byte) DTV_BLIT_SUB
(byte) DTV_BLIT_TRANSPARANCY_NONE
(byte) DTV_BLIT_VBLANK
(byte) DTV_BLIT_VIC_IRQ
(byte) DTV_BLIT_WRITE_NONTRANSPARENT
(byte) DTV_BLIT_WRITE_TRANSPARENT
(byte) DTV_BLIT_XNOR
(byte) DTV_BLIT_XOR
(byte) DTV_BORDER_OFF
(byte) DTV_CHUNKY
(const byte) DTV_CHUNKY#0 DTV_CHUNKY = (byte/signed byte/word/signed word/dword/signed dword) 64
(byte) DTV_COLORRAM_OFF
(const byte) DTV_COLORRAM_OFF#0 DTV_COLORRAM_OFF = (byte/signed byte/word/signed word/dword/signed dword) 16
(dword) DTV_COLOR_BANK_DEFAULT
(byte*) DTV_COLOR_BANK_HI
(byte*) DTV_COLOR_BANK_LO
(byte*) DTV_CONTROL
(const byte*) DTV_CONTROL#0 DTV_CONTROL = ((byte*))(word/dword/signed dword) 53308
(byte*) DTV_FEATURE
(const byte*) DTV_FEATURE#0 DTV_FEATURE = ((byte*))(word/dword/signed dword) 53311
(byte) DTV_FEATURE_DISABLE_TIL_RESET
(byte) DTV_FEATURE_ENABLE
(const byte) DTV_FEATURE_ENABLE#0 DTV_FEATURE_ENABLE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) DTV_GRAPHICS_HICOL_BANK
(byte*) DTV_GRAPHICS_VIC_BANK
(byte) DTV_HIGHCOLOR
(const byte) DTV_HIGHCOLOR#0 DTV_HIGHCOLOR = (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) DTV_LINEAR
(const byte) DTV_LINEAR#0 DTV_LINEAR = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) DTV_OVERSCAN
(byte*) DTV_PALETTE
(const byte*) DTV_PALETTE#0 DTV_PALETTE = ((byte*))(word/dword/signed dword) 53760
(byte[16]) DTV_PALETTE_DEFAULT
(byte*) DTV_PLANEA_MODULO_HI
(byte*) DTV_PLANEA_MODULO_LO
(byte*) DTV_PLANEA_START_HI
(byte*) DTV_PLANEA_START_LO
(byte*) DTV_PLANEA_START_MI
(byte*) DTV_PLANEA_STEP
(byte*) DTV_PLANEB_MODULO_HI
(const byte*) DTV_PLANEB_MODULO_HI#0 DTV_PLANEB_MODULO_HI = ((byte*))(word/dword/signed dword) 53320
(byte*) DTV_PLANEB_MODULO_LO
@ -39,16 +142,53 @@
(const byte*) DTV_PLANEB_START_MI#0 DTV_PLANEB_START_MI = ((byte*))(word/dword/signed dword) 53322
(byte*) DTV_PLANEB_STEP
(const byte*) DTV_PLANEB_STEP#0 DTV_PLANEB_STEP = ((byte*))(word/dword/signed dword) 53324
(byte*) DTV_SPRITE_BANK
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = ((byte*))(word/dword/signed dword) 53265
(byte*) VIC_CONTROL2
@ -65,6 +205,9 @@
(const byte*) VIC_MEMORY#0 VIC_MEMORY = ((byte*))(word/dword/signed dword) 53272
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx)
(label) dtvSetCpuBankSegment1::@return
(byte*) dtvSetCpuBankSegment1::cpuBank

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@5
@5: scope:[] from @begin
to:@6
@6: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @5
@end: scope:[] from @6
[3] phi()
main: scope:[main] from @5
main: scope:[main] from @6
[4] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0
[5] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_CLEAR_IRQ#0
[6] *((const byte*) DTV_BLITTER_SRCA_LO#0) ← <(const byte[]) SRCA#0

File diff suppressed because it is too large Load Diff

@ -1,6 +1,34 @@
(label) @5
(label) @6
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) DTV_BADLINE_OFF
(byte*) DTV_BLITTER_ALU
(const byte*) DTV_BLITTER_ALU#0 DTV_BLITTER_ALU = ((byte*))(word/dword/signed dword) 54078
(byte*) DTV_BLITTER_CONTROL
@ -63,34 +91,139 @@
(const byte*) DTV_BLITTER_TRANSPARANCY#0 DTV_BLITTER_TRANSPARANCY = ((byte*))(word/dword/signed dword) 54075
(byte) DTV_BLIT_ADD
(const byte) DTV_BLIT_ADD#0 DTV_BLIT_ADD = (byte/signed byte/word/signed word/dword/signed dword) 48
(byte) DTV_BLIT_AND
(byte) DTV_BLIT_CIA_IRQ
(byte) DTV_BLIT_CLEAR_IRQ
(const byte) DTV_BLIT_CLEAR_IRQ#0 DTV_BLIT_CLEAR_IRQ = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) DTV_BLIT_DEST_CONT
(const byte) DTV_BLIT_DEST_CONT#0 DTV_BLIT_DEST_CONT = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) DTV_BLIT_DEST_FWD
(const byte) DTV_BLIT_DEST_FWD#0 DTV_BLIT_DEST_FWD = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) DTV_BLIT_DISABLE_B
(byte) DTV_BLIT_FORCE_START
(const byte) DTV_BLIT_FORCE_START#0 DTV_BLIT_FORCE_START = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) DTV_BLIT_IRQ_EN
(byte) DTV_BLIT_NAND
(byte) DTV_BLIT_NOR
(byte) DTV_BLIT_OR
(byte) DTV_BLIT_SHIFT0
(byte) DTV_BLIT_SHIFT1
(byte) DTV_BLIT_SHIFT2
(byte) DTV_BLIT_SHIFT3
(byte) DTV_BLIT_SHIFT4
(byte) DTV_BLIT_SHIFT5
(byte) DTV_BLIT_SHIFT6
(byte) DTV_BLIT_SHIFT7
(byte) DTV_BLIT_SRCA_CONT
(byte) DTV_BLIT_SRCA_FWD
(const byte) DTV_BLIT_SRCA_FWD#0 DTV_BLIT_SRCA_FWD = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) DTV_BLIT_SRCB_CONT
(byte) DTV_BLIT_SRCB_FWD
(const byte) DTV_BLIT_SRCB_FWD#0 DTV_BLIT_SRCB_FWD = (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) DTV_BLIT_STATUS_BUSY
(const byte) DTV_BLIT_STATUS_BUSY#0 DTV_BLIT_STATUS_BUSY = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) DTV_BLIT_STATUS_IRQ
(byte) DTV_BLIT_SUB
(byte) DTV_BLIT_TRANSPARANCY_NONE
(const byte) DTV_BLIT_TRANSPARANCY_NONE#0 DTV_BLIT_TRANSPARANCY_NONE = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) DTV_BLIT_VBLANK
(byte) DTV_BLIT_VIC_IRQ
(byte) DTV_BLIT_WRITE_NONTRANSPARENT
(byte) DTV_BLIT_WRITE_TRANSPARENT
(byte) DTV_BLIT_XNOR
(byte) DTV_BLIT_XOR
(byte) DTV_BORDER_OFF
(byte) DTV_CHUNKY
(byte) DTV_COLORRAM_OFF
(dword) DTV_COLOR_BANK_DEFAULT
(byte*) DTV_COLOR_BANK_HI
(byte*) DTV_COLOR_BANK_LO
(byte*) DTV_CONTROL
(byte*) DTV_FEATURE
(const byte*) DTV_FEATURE#0 DTV_FEATURE = ((byte*))(word/dword/signed dword) 53311
(byte) DTV_FEATURE_DISABLE_TIL_RESET
(byte) DTV_FEATURE_ENABLE
(const byte) DTV_FEATURE_ENABLE#0 DTV_FEATURE_ENABLE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) DTV_GRAPHICS_HICOL_BANK
(byte*) DTV_GRAPHICS_VIC_BANK
(byte) DTV_HIGHCOLOR
(byte) DTV_LINEAR
(byte) DTV_OVERSCAN
(byte*) DTV_PALETTE
(byte[16]) DTV_PALETTE_DEFAULT
(byte*) DTV_PLANEA_MODULO_HI
(byte*) DTV_PLANEA_MODULO_LO
(byte*) DTV_PLANEA_START_HI
(byte*) DTV_PLANEA_START_LO
(byte*) DTV_PLANEA_START_MI
(byte*) DTV_PLANEA_STEP
(byte*) DTV_PLANEB_MODULO_HI
(byte*) DTV_PLANEB_MODULO_LO
(byte*) DTV_PLANEB_START_HI
(byte*) DTV_PLANEB_START_LO
(byte*) DTV_PLANEB_START_MI
(byte*) DTV_PLANEB_STEP
(byte*) DTV_SPRITE_BANK
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte[]) SRCA
(const byte[]) SRCA#0 SRCA = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' }
(byte) SRCA_LEN
(const byte) SRCA_LEN#0 SRCA_LEN = (byte/signed byte/word/signed word/dword/signed dword) 9
(byte[]) SRCB
(const byte[]) SRCB#0 SRCB = { (byte/word/signed word/dword/signed dword) 128 }
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) main()
(byte~) main::$15 reg byte a 202.0
(label) main::@2

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@5
@5: scope:[] from @begin
to:@6
@6: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @5
@end: scope:[] from @6
[3] phi()
main: scope:[main] from @5
main: scope:[main] from @6
asm { sei }
[5] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0
[6] *((const byte*) DTV_CONTROL#0) ← (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_BORDER_OFF#0|(const byte) DTV_BADLINE_OFF#0

File diff suppressed because it is too large Load Diff

@ -1,24 +1,189 @@
(label) @5
(label) @6
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) DTV_BADLINE_OFF
(const byte) DTV_BADLINE_OFF#0 DTV_BADLINE_OFF = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte*) DTV_BLITTER_ALU
(byte*) DTV_BLITTER_CONTROL
(byte*) DTV_BLITTER_CONTROL2
(byte*) DTV_BLITTER_DEST_HI
(byte*) DTV_BLITTER_DEST_LIN_HI
(byte*) DTV_BLITTER_DEST_LIN_LO
(byte*) DTV_BLITTER_DEST_LO
(byte*) DTV_BLITTER_DEST_MI
(byte*) DTV_BLITTER_DEST_MOD_HI
(byte*) DTV_BLITTER_DEST_MOD_LO
(byte*) DTV_BLITTER_DEST_STEP
(byte*) DTV_BLITTER_LEN_HI
(byte*) DTV_BLITTER_LEN_LO
(byte*) DTV_BLITTER_SRCA_HI
(byte*) DTV_BLITTER_SRCA_LIN_HI
(byte*) DTV_BLITTER_SRCA_LIN_LO
(byte*) DTV_BLITTER_SRCA_LO
(byte*) DTV_BLITTER_SRCA_MI
(byte*) DTV_BLITTER_SRCA_MOD_HI
(byte*) DTV_BLITTER_SRCA_MOD_LO
(byte*) DTV_BLITTER_SRCA_STEP
(byte*) DTV_BLITTER_SRCB_HI
(byte*) DTV_BLITTER_SRCB_LIN_HI
(byte*) DTV_BLITTER_SRCB_LIN_LO
(byte*) DTV_BLITTER_SRCB_LO
(byte*) DTV_BLITTER_SRCB_MI
(byte*) DTV_BLITTER_SRCB_MOD_HI
(byte*) DTV_BLITTER_SRCB_MOD_LO
(byte*) DTV_BLITTER_SRCB_STEP
(byte*) DTV_BLITTER_TRANSPARANCY
(byte) DTV_BLIT_ADD
(byte) DTV_BLIT_AND
(byte) DTV_BLIT_CIA_IRQ
(byte) DTV_BLIT_CLEAR_IRQ
(byte) DTV_BLIT_DEST_CONT
(byte) DTV_BLIT_DEST_FWD
(byte) DTV_BLIT_DISABLE_B
(byte) DTV_BLIT_FORCE_START
(byte) DTV_BLIT_IRQ_EN
(byte) DTV_BLIT_NAND
(byte) DTV_BLIT_NOR
(byte) DTV_BLIT_OR
(byte) DTV_BLIT_SHIFT0
(byte) DTV_BLIT_SHIFT1
(byte) DTV_BLIT_SHIFT2
(byte) DTV_BLIT_SHIFT3
(byte) DTV_BLIT_SHIFT4
(byte) DTV_BLIT_SHIFT5
(byte) DTV_BLIT_SHIFT6
(byte) DTV_BLIT_SHIFT7
(byte) DTV_BLIT_SRCA_CONT
(byte) DTV_BLIT_SRCA_FWD
(byte) DTV_BLIT_SRCB_CONT
(byte) DTV_BLIT_SRCB_FWD
(byte) DTV_BLIT_STATUS_BUSY
(byte) DTV_BLIT_STATUS_IRQ
(byte) DTV_BLIT_SUB
(byte) DTV_BLIT_TRANSPARANCY_NONE
(byte) DTV_BLIT_VBLANK
(byte) DTV_BLIT_VIC_IRQ
(byte) DTV_BLIT_WRITE_NONTRANSPARENT
(byte) DTV_BLIT_WRITE_TRANSPARENT
(byte) DTV_BLIT_XNOR
(byte) DTV_BLIT_XOR
(byte) DTV_BORDER_OFF
(const byte) DTV_BORDER_OFF#0 DTV_BORDER_OFF = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) DTV_CHUNKY
(byte) DTV_COLORRAM_OFF
(dword) DTV_COLOR_BANK_DEFAULT
(byte*) DTV_COLOR_BANK_HI
(byte*) DTV_COLOR_BANK_LO
(byte*) DTV_CONTROL
(const byte*) DTV_CONTROL#0 DTV_CONTROL = ((byte*))(word/dword/signed dword) 53308
(byte*) DTV_FEATURE
(const byte*) DTV_FEATURE#0 DTV_FEATURE = ((byte*))(word/dword/signed dword) 53311
(byte) DTV_FEATURE_DISABLE_TIL_RESET
(byte) DTV_FEATURE_ENABLE
(const byte) DTV_FEATURE_ENABLE#0 DTV_FEATURE_ENABLE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) DTV_GRAPHICS_HICOL_BANK
(byte*) DTV_GRAPHICS_VIC_BANK
(byte) DTV_HIGHCOLOR
(const byte) DTV_HIGHCOLOR#0 DTV_HIGHCOLOR = (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) DTV_LINEAR
(byte) DTV_OVERSCAN
(byte*) DTV_PALETTE
(const byte*) DTV_PALETTE#0 DTV_PALETTE = ((byte*))(word/dword/signed dword) 53760
(byte[16]) DTV_PALETTE_DEFAULT
(byte*) DTV_PLANEA_MODULO_HI
(byte*) DTV_PLANEA_MODULO_LO
(byte*) DTV_PLANEA_START_HI
(byte*) DTV_PLANEA_START_LO
(byte*) DTV_PLANEA_START_MI
(byte*) DTV_PLANEA_STEP
(byte*) DTV_PLANEB_MODULO_HI
(byte*) DTV_PLANEB_MODULO_LO
(byte*) DTV_PLANEB_START_HI
(byte*) DTV_PLANEB_START_LO
(byte*) DTV_PLANEB_START_MI
(byte*) DTV_PLANEB_STEP
(byte*) DTV_SPRITE_BANK
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) main()
(label) main::@4
(label) main::@6

@ -1503,7 +1503,10 @@ gfx_init_plane_fill: {
lda _0+3
sta _1+1
lda _1
tax
txa
jsr dtvSetCpuBankSegment1
inx
lda plane_addr
sta _4
lda plane_addr+1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -1,4 +1,4 @@
(label) @67
(label) @68
(label) @begin
(label) @end
(byte*) BGCOL
@ -11,10 +11,14 @@
(const byte*) BGCOL3#0 BGCOL3 = ((byte*))(word/dword/signed dword) 53283
(byte*) BGCOL4
(const byte*) BGCOL4#0 BGCOL4 = ((byte*))(word/dword/signed dword) 53284
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word/dword/signed dword) 53248
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(const byte*) CIA1_PORT_A#0 CIA1_PORT_A = ((byte*))(word/dword/signed dword) 56320
(byte*) CIA1_PORT_A_DDR
@ -23,12 +27,86 @@
(const byte*) CIA1_PORT_B#0 CIA1_PORT_B = ((byte*))(word/dword/signed dword) 56321
(byte*) CIA1_PORT_B_DDR
(const byte*) CIA1_PORT_B_DDR#0 CIA1_PORT_B_DDR = ((byte*))(word/dword/signed dword) 56323
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(const byte*) CIA2_PORT_A#0 CIA2_PORT_A = ((byte*))(word/dword/signed dword) 56576
(byte*) CIA2_PORT_A_DDR
(const byte*) CIA2_PORT_A_DDR#0 CIA2_PORT_A_DDR = ((byte*))(word/dword/signed dword) 56578
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) 55296
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) DTV_BADLINE_OFF
(byte*) DTV_BLITTER_ALU
(byte*) DTV_BLITTER_CONTROL
(byte*) DTV_BLITTER_CONTROL2
(byte*) DTV_BLITTER_DEST_HI
(byte*) DTV_BLITTER_DEST_LIN_HI
(byte*) DTV_BLITTER_DEST_LIN_LO
(byte*) DTV_BLITTER_DEST_LO
(byte*) DTV_BLITTER_DEST_MI
(byte*) DTV_BLITTER_DEST_MOD_HI
(byte*) DTV_BLITTER_DEST_MOD_LO
(byte*) DTV_BLITTER_DEST_STEP
(byte*) DTV_BLITTER_LEN_HI
(byte*) DTV_BLITTER_LEN_LO
(byte*) DTV_BLITTER_SRCA_HI
(byte*) DTV_BLITTER_SRCA_LIN_HI
(byte*) DTV_BLITTER_SRCA_LIN_LO
(byte*) DTV_BLITTER_SRCA_LO
(byte*) DTV_BLITTER_SRCA_MI
(byte*) DTV_BLITTER_SRCA_MOD_HI
(byte*) DTV_BLITTER_SRCA_MOD_LO
(byte*) DTV_BLITTER_SRCA_STEP
(byte*) DTV_BLITTER_SRCB_HI
(byte*) DTV_BLITTER_SRCB_LIN_HI
(byte*) DTV_BLITTER_SRCB_LIN_LO
(byte*) DTV_BLITTER_SRCB_LO
(byte*) DTV_BLITTER_SRCB_MI
(byte*) DTV_BLITTER_SRCB_MOD_HI
(byte*) DTV_BLITTER_SRCB_MOD_LO
(byte*) DTV_BLITTER_SRCB_STEP
(byte*) DTV_BLITTER_TRANSPARANCY
(byte) DTV_BLIT_ADD
(byte) DTV_BLIT_AND
(byte) DTV_BLIT_CIA_IRQ
(byte) DTV_BLIT_CLEAR_IRQ
(byte) DTV_BLIT_DEST_CONT
(byte) DTV_BLIT_DEST_FWD
(byte) DTV_BLIT_DISABLE_B
(byte) DTV_BLIT_FORCE_START
(byte) DTV_BLIT_IRQ_EN
(byte) DTV_BLIT_NAND
(byte) DTV_BLIT_NOR
(byte) DTV_BLIT_OR
(byte) DTV_BLIT_SHIFT0
(byte) DTV_BLIT_SHIFT1
(byte) DTV_BLIT_SHIFT2
(byte) DTV_BLIT_SHIFT3
(byte) DTV_BLIT_SHIFT4
(byte) DTV_BLIT_SHIFT5
(byte) DTV_BLIT_SHIFT6
(byte) DTV_BLIT_SHIFT7
(byte) DTV_BLIT_SRCA_CONT
(byte) DTV_BLIT_SRCA_FWD
(byte) DTV_BLIT_SRCB_CONT
(byte) DTV_BLIT_SRCB_FWD
(byte) DTV_BLIT_STATUS_BUSY
(byte) DTV_BLIT_STATUS_IRQ
(byte) DTV_BLIT_SUB
(byte) DTV_BLIT_TRANSPARANCY_NONE
(byte) DTV_BLIT_VBLANK
(byte) DTV_BLIT_VIC_IRQ
(byte) DTV_BLIT_WRITE_NONTRANSPARENT
(byte) DTV_BLIT_WRITE_TRANSPARENT
(byte) DTV_BLIT_XNOR
(byte) DTV_BLIT_XOR
(byte) DTV_BORDER_OFF
(const byte) DTV_BORDER_OFF#0 DTV_BORDER_OFF = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) DTV_CHUNKY
@ -45,8 +123,10 @@
(const byte*) DTV_CONTROL#0 DTV_CONTROL = ((byte*))(word/dword/signed dword) 53308
(byte*) DTV_FEATURE
(const byte*) DTV_FEATURE#0 DTV_FEATURE = ((byte*))(word/dword/signed dword) 53311
(byte) DTV_FEATURE_DISABLE_TIL_RESET
(byte) DTV_FEATURE_ENABLE
(const byte) DTV_FEATURE_ENABLE#0 DTV_FEATURE_ENABLE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) DTV_GRAPHICS_HICOL_BANK
(byte*) DTV_GRAPHICS_VIC_BANK
(const byte*) DTV_GRAPHICS_VIC_BANK#0 DTV_GRAPHICS_VIC_BANK = ((byte*))(word/dword/signed dword) 53309
(byte) DTV_HIGHCOLOR
@ -83,6 +163,7 @@
(const byte*) DTV_PLANEB_START_MI#0 DTV_PLANEB_START_MI = ((byte*))(word/dword/signed dword) 53322
(byte*) DTV_PLANEB_STEP
(const byte*) DTV_PLANEB_STEP#0 DTV_PLANEB_STEP = ((byte*))(word/dword/signed dword) 53324
(byte*) DTV_SPRITE_BANK
(byte*) FORM_CHARSET
(const byte*) FORM_CHARSET#0 FORM_CHARSET = ((byte*))(word/signed word/dword/signed dword) 6144
(byte[]) FORM_COLS
@ -93,6 +174,35 @@
(const byte*) FORM_SCREEN#0 FORM_SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[]) FORM_TEXT
(const byte[]) FORM_TEXT#0 FORM_TEXT = (string) " C64 DTV Graphics Mode Explorer @"+(string) " @"+(string) " PRESET 0 Standard Charset @"+(string) " @"+(string) " CONTROL PLANE A VIC II @"+(string) " bmm 0 pattern p0 screen s0 @"+(string) " mcm 0 start 00 gfx g0 @"+(string) " ecm 0 step 00 colors c0 @"+(string) " hicolor 0 modulo 00 @"+(string) " linear 0 COLORS @"+(string) " color off 0 PLANE B palet 0 @"+(string) " chunky 0 pattern p0 bgcol0 00 @"+(string) " border off 0 start 00 bgcol1 00 @"+(string) " overscan 0 step 00 bgcol2 00 @"+(string) " modulo 00 bgcol3 00 @"+(string) "@"
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte) KEY_0
(byte) KEY_1
(byte) KEY_2
(byte) KEY_3
(byte) KEY_4
(byte) KEY_5
(byte) KEY_6
(byte) KEY_7
(byte) KEY_8
(byte) KEY_9
(byte) KEY_A
(byte) KEY_ARROW_LEFT
(byte) KEY_ARROW_UP
(byte) KEY_ASTERISK
(byte) KEY_AT
(byte) KEY_B
(byte) KEY_C
(byte) KEY_COLON
(byte) KEY_COMMA
(byte) KEY_COMMODORE
(const byte) KEY_COMMODORE#0 KEY_COMMODORE = (byte/signed byte/word/signed word/dword/signed dword) 61
(byte) KEY_CRSR_DOWN
@ -101,8 +211,27 @@
(const byte) KEY_CRSR_RIGHT#0 KEY_CRSR_RIGHT = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) KEY_CTRL
(const byte) KEY_CTRL#0 KEY_CTRL = (byte/signed byte/word/signed word/dword/signed dword) 58
(byte) KEY_D
(byte) KEY_DEL
(byte) KEY_DOT
(byte) KEY_E
(byte) KEY_EQUALS
(byte) KEY_F
(byte) KEY_F1
(byte) KEY_F3
(byte) KEY_F5
(byte) KEY_F7
(byte) KEY_G
(byte) KEY_H
(byte) KEY_HOME
(byte) KEY_I
(byte) KEY_J
(byte) KEY_K
(byte) KEY_L
(byte) KEY_LSHIFT
(const byte) KEY_LSHIFT#0 KEY_LSHIFT = (byte/signed byte/word/signed word/dword/signed dword) 15
(byte) KEY_M
(byte) KEY_MINUS
(byte) KEY_MODIFIER_COMMODORE
(const byte) KEY_MODIFIER_COMMODORE#0 KEY_MODIFIER_COMMODORE = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) KEY_MODIFIER_CTRL
@ -113,10 +242,36 @@
(const byte) KEY_MODIFIER_RSHIFT#0 KEY_MODIFIER_RSHIFT = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) KEY_MODIFIER_SHIFT
(const byte) KEY_MODIFIER_SHIFT#0 KEY_MODIFIER_SHIFT = (const byte) KEY_MODIFIER_LSHIFT#0|(const byte) KEY_MODIFIER_RSHIFT#0
(byte) KEY_N
(byte) KEY_O
(byte) KEY_P
(byte) KEY_PLUS
(byte) KEY_POUND
(byte) KEY_Q
(byte) KEY_R
(byte) KEY_RETURN
(byte) KEY_RSHIFT
(const byte) KEY_RSHIFT#0 KEY_RSHIFT = (byte/signed byte/word/signed word/dword/signed dword) 52
(byte) KEY_RUNSTOP
(byte) KEY_S
(byte) KEY_SEMICOLON
(byte) KEY_SLASH
(byte) KEY_SPACE
(const byte) KEY_SPACE#0 KEY_SPACE = (byte/signed byte/word/signed word/dword/signed dword) 60
(byte) KEY_T
(byte) KEY_U
(byte) KEY_V
(byte) KEY_W
(byte) KEY_X
(byte) KEY_Y
(byte) KEY_Z
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(dword) PLANE_8BPP_CHUNKY
(const dword) PLANE_8BPP_CHUNKY#0 PLANE_8BPP_CHUNKY = (dword/signed dword) 131072
(dword) PLANE_BLANK
@ -135,16 +290,33 @@
(const dword) PLANE_VERTICAL2#0 PLANE_VERTICAL2 = (dword/signed dword) 221184
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(const byte) PROCPORT_RAM_CHARROM#0 PROCPORT_RAM_CHARROM = (byte/signed byte/word/signed word/dword/signed dword) 49
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte*) VIC_BITMAP
(const byte*) VIC_BITMAP#0 VIC_BITMAP = ((byte*))(word/signed word/dword/signed dword) 24576
(byte) VIC_BMM
@ -167,6 +339,7 @@
(const byte*) VIC_MEMORY#0 VIC_MEMORY = ((byte*))(word/dword/signed dword) 53272
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(byte*) VIC_SCREEN0
(const byte*) VIC_SCREEN0#0 VIC_SCREEN0 = ((byte*))(word/signed word/dword/signed dword) 16384
(byte*) VIC_SCREEN1
@ -177,6 +350,8 @@
(const byte*) VIC_SCREEN3#0 VIC_SCREEN3 = ((byte*))(word/signed word/dword/signed dword) 19456
(byte*) VIC_SCREEN4
(const byte*) VIC_SCREEN4#0 VIC_SCREEN4 = ((byte*))(word/signed word/dword/signed dword) 20480
(byte) WHITE
(byte) YELLOW
(void()) apply_preset((byte) apply_preset::idx)
(label) apply_preset::@22
(label) apply_preset::@23
@ -847,16 +1022,17 @@
(byte) gfx_init_plane_fill::by#1 by zp ZP_BYTE:7 16.5
(byte) gfx_init_plane_fill::by#4 by zp ZP_BYTE:7 3.6666666666666665
(byte) gfx_init_plane_fill::fill
(byte) gfx_init_plane_fill::fill#6 fill zp ZP_BYTE:2 5.611111111111111
(byte) gfx_init_plane_fill::fill#6 fill zp ZP_BYTE:2 5.315789473684211
(byte*) gfx_init_plane_fill::gfxb
(byte*) gfx_init_plane_fill::gfxb#1 gfxb zp ZP_WORD:3 42.599999999999994
(byte*) gfx_init_plane_fill::gfxb#2 gfxb zp ZP_WORD:3 157.0
(byte*) gfx_init_plane_fill::gfxb#3 gfxb zp ZP_WORD:3 24.0
(byte*~) gfx_init_plane_fill::gfxb#6 gfxb zp ZP_WORD:3 4.0
(byte) gfx_init_plane_fill::gfxbCpuBank
(byte) gfx_init_plane_fill::gfxbCpuBank#0 reg byte a 4.0
(byte) gfx_init_plane_fill::gfxbCpuBank#0 reg byte x 2.0
(byte) gfx_init_plane_fill::gfxbCpuBank#1 reg byte x 20.0
(dword) gfx_init_plane_fill::plane_addr
(dword) gfx_init_plane_fill::plane_addr#3 plane_addr zp ZP_DWORD:10 0.6666666666666666
(dword) gfx_init_plane_fill::plane_addr#3 plane_addr zp ZP_DWORD:10 0.5714285714285714
(void()) gfx_init_plane_full()
(label) gfx_init_plane_full::@return
(void()) gfx_init_plane_horisontal()
@ -1157,6 +1333,7 @@
(byte) gfx_mode::vic_control#5 reg byte y 2.0
(byte) gfx_mode::vic_control2
(byte) gfx_mode::vic_control2#2 reg byte a 2.0
(byte[]) keyboard_char_keycodes
(byte()) keyboard_event_get()
(label) keyboard_event_get::@3
(label) keyboard_event_get::@return
@ -1492,7 +1669,8 @@ reg byte a [ form_set_screen::$0 ]
reg byte a [ form_set_screen::$1 ]
reg byte a [ print_str_lines::ch#0 ]
zp ZP_DWORD:19 [ gfx_init_plane_fill::$0 ]
reg byte a [ gfx_init_plane_fill::gfxbCpuBank#0 ]
reg byte x [ gfx_init_plane_fill::gfxbCpuBank#0 ]
reg byte x [ gfx_init_plane_fill::gfxbCpuBank#1 ]
reg byte a [ gfx_init_plane_horisontal2::$5 ]
reg byte a [ gfx_init_plane_horisontal2::row#0 ]
reg byte a [ gfx_init_plane_horisontal::$5 ]

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@53
@53: scope:[] from @begin
to:@54
@54: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @53
@end: scope:[] from @54
[3] phi()
main: scope:[main] from @53
main: scope:[main] from @54
asm { sei }
[5] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[6] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
@ -1502,7 +1502,7 @@ print_str_lines: scope:[print_str_lines] from menu::@48
to:print_str_lines::@1
print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lines::@9
[866] (byte*) print_line_cursor#17 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*) print_line_cursor#19 )
[866] (byte*) print_char_cursor#19 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*~) print_char_cursor#101 )
[866] (byte*) print_char_cursor#19 ← phi( print_str_lines/(const byte*) menu::SCREEN#0 print_str_lines::@9/(byte*~) print_char_cursor#103 )
[866] (byte*) print_str_lines::str#2 ← phi( print_str_lines/(const byte[]) MENU_TEXT#0 print_str_lines::@9/(byte*) print_str_lines::str#0 )
[867] if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@4
to:print_str_lines::@return
@ -1527,7 +1527,7 @@ print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@4 print_str
print_str_lines::@9: scope:[print_str_lines] from print_str_lines::@5
[877] phi()
[878] call print_ln
[879] (byte*~) print_char_cursor#101 ← (byte*) print_line_cursor#19
[879] (byte*~) print_char_cursor#103 ← (byte*) print_line_cursor#19
to:print_str_lines::@1
print_ln: scope:[print_ln] from print_str_lines::@9
[880] phi()

File diff suppressed because it is too large Load Diff

@ -1,4 +1,4 @@
(label) @53
(label) @54
(label) @begin
(label) @end
(byte*) BGCOL
@ -17,16 +17,95 @@
(const byte) BLUE#0 BLUE = (byte/signed byte/word/signed word/dword/signed dword) 6
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(const byte*) CIA1_PORT_A#0 CIA1_PORT_A = ((byte*))(word/dword/signed dword) 56320
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(const byte*) CIA1_PORT_B#0 CIA1_PORT_B = ((byte*))(word/dword/signed dword) 56321
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(const byte*) CIA2_PORT_A#0 CIA2_PORT_A = ((byte*))(word/dword/signed dword) 56576
(byte*) CIA2_PORT_A_DDR
(const byte*) CIA2_PORT_A_DDR#0 CIA2_PORT_A_DDR = ((byte*))(word/dword/signed dword) 56578
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) 55296
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) DTV_BADLINE_OFF
(byte*) DTV_BLITTER_ALU
(byte*) DTV_BLITTER_CONTROL
(byte*) DTV_BLITTER_CONTROL2
(byte*) DTV_BLITTER_DEST_HI
(byte*) DTV_BLITTER_DEST_LIN_HI
(byte*) DTV_BLITTER_DEST_LIN_LO
(byte*) DTV_BLITTER_DEST_LO
(byte*) DTV_BLITTER_DEST_MI
(byte*) DTV_BLITTER_DEST_MOD_HI
(byte*) DTV_BLITTER_DEST_MOD_LO
(byte*) DTV_BLITTER_DEST_STEP
(byte*) DTV_BLITTER_LEN_HI
(byte*) DTV_BLITTER_LEN_LO
(byte*) DTV_BLITTER_SRCA_HI
(byte*) DTV_BLITTER_SRCA_LIN_HI
(byte*) DTV_BLITTER_SRCA_LIN_LO
(byte*) DTV_BLITTER_SRCA_LO
(byte*) DTV_BLITTER_SRCA_MI
(byte*) DTV_BLITTER_SRCA_MOD_HI
(byte*) DTV_BLITTER_SRCA_MOD_LO
(byte*) DTV_BLITTER_SRCA_STEP
(byte*) DTV_BLITTER_SRCB_HI
(byte*) DTV_BLITTER_SRCB_LIN_HI
(byte*) DTV_BLITTER_SRCB_LIN_LO
(byte*) DTV_BLITTER_SRCB_LO
(byte*) DTV_BLITTER_SRCB_MI
(byte*) DTV_BLITTER_SRCB_MOD_HI
(byte*) DTV_BLITTER_SRCB_MOD_LO
(byte*) DTV_BLITTER_SRCB_STEP
(byte*) DTV_BLITTER_TRANSPARANCY
(byte) DTV_BLIT_ADD
(byte) DTV_BLIT_AND
(byte) DTV_BLIT_CIA_IRQ
(byte) DTV_BLIT_CLEAR_IRQ
(byte) DTV_BLIT_DEST_CONT
(byte) DTV_BLIT_DEST_FWD
(byte) DTV_BLIT_DISABLE_B
(byte) DTV_BLIT_FORCE_START
(byte) DTV_BLIT_IRQ_EN
(byte) DTV_BLIT_NAND
(byte) DTV_BLIT_NOR
(byte) DTV_BLIT_OR
(byte) DTV_BLIT_SHIFT0
(byte) DTV_BLIT_SHIFT1
(byte) DTV_BLIT_SHIFT2
(byte) DTV_BLIT_SHIFT3
(byte) DTV_BLIT_SHIFT4
(byte) DTV_BLIT_SHIFT5
(byte) DTV_BLIT_SHIFT6
(byte) DTV_BLIT_SHIFT7
(byte) DTV_BLIT_SRCA_CONT
(byte) DTV_BLIT_SRCA_FWD
(byte) DTV_BLIT_SRCB_CONT
(byte) DTV_BLIT_SRCB_FWD
(byte) DTV_BLIT_STATUS_BUSY
(byte) DTV_BLIT_STATUS_IRQ
(byte) DTV_BLIT_SUB
(byte) DTV_BLIT_TRANSPARANCY_NONE
(byte) DTV_BLIT_VBLANK
(byte) DTV_BLIT_VIC_IRQ
(byte) DTV_BLIT_WRITE_NONTRANSPARENT
(byte) DTV_BLIT_WRITE_TRANSPARENT
(byte) DTV_BLIT_XNOR
(byte) DTV_BLIT_XOR
(byte) DTV_BORDER_OFF
(const byte) DTV_BORDER_OFF#0 DTV_BORDER_OFF = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) DTV_CHUNKY
@ -43,8 +122,10 @@
(const byte*) DTV_CONTROL#0 DTV_CONTROL = ((byte*))(word/dword/signed dword) 53308
(byte*) DTV_FEATURE
(const byte*) DTV_FEATURE#0 DTV_FEATURE = ((byte*))(word/dword/signed dword) 53311
(byte) DTV_FEATURE_DISABLE_TIL_RESET
(byte) DTV_FEATURE_ENABLE
(const byte) DTV_FEATURE_ENABLE#0 DTV_FEATURE_ENABLE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) DTV_GRAPHICS_HICOL_BANK
(byte*) DTV_GRAPHICS_VIC_BANK
(const byte*) DTV_GRAPHICS_VIC_BANK#0 DTV_GRAPHICS_VIC_BANK = ((byte*))(word/dword/signed dword) 53309
(byte) DTV_HIGHCOLOR
@ -81,8 +162,18 @@
(const byte*) DTV_PLANEB_START_MI#0 DTV_PLANEB_START_MI = ((byte*))(word/dword/signed dword) 53322
(byte*) DTV_PLANEB_STEP
(const byte*) DTV_PLANEB_STEP#0 DTV_PLANEB_STEP = ((byte*))(word/dword/signed dword) 53324
(byte*) DTV_SPRITE_BANK
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte) KEY_0
(const byte) KEY_0#0 KEY_0 = (byte/signed byte/word/signed word/dword/signed dword) 35
(byte) KEY_1
@ -93,48 +184,122 @@
(const byte) KEY_3#0 KEY_3 = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) KEY_4
(const byte) KEY_4#0 KEY_4 = (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) KEY_5
(byte) KEY_6
(const byte) KEY_6#0 KEY_6 = (byte/signed byte/word/signed word/dword/signed dword) 19
(byte) KEY_7
(const byte) KEY_7#0 KEY_7 = (byte/signed byte/word/signed word/dword/signed dword) 24
(byte) KEY_8
(const byte) KEY_8#0 KEY_8 = (byte/signed byte/word/signed word/dword/signed dword) 27
(byte) KEY_9
(byte) KEY_A
(const byte) KEY_A#0 KEY_A = (byte/signed byte/word/signed word/dword/signed dword) 10
(byte) KEY_ARROW_LEFT
(byte) KEY_ARROW_UP
(byte) KEY_ASTERISK
(byte) KEY_AT
(byte) KEY_B
(const byte) KEY_B#0 KEY_B = (byte/signed byte/word/signed word/dword/signed dword) 28
(byte) KEY_C
(const byte) KEY_C#0 KEY_C = (byte/signed byte/word/signed word/dword/signed dword) 20
(byte) KEY_COLON
(byte) KEY_COMMA
(byte) KEY_COMMODORE
(byte) KEY_CRSR_DOWN
(byte) KEY_CRSR_RIGHT
(byte) KEY_CTRL
(byte) KEY_D
(const byte) KEY_D#0 KEY_D = (byte/signed byte/word/signed word/dword/signed dword) 18
(byte) KEY_DEL
(byte) KEY_DOT
(byte) KEY_E
(const byte) KEY_E#0 KEY_E = (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) KEY_EQUALS
(byte) KEY_F
(byte) KEY_F1
(byte) KEY_F3
(byte) KEY_F5
(byte) KEY_F7
(byte) KEY_G
(byte) KEY_H
(const byte) KEY_H#0 KEY_H = (byte/signed byte/word/signed word/dword/signed dword) 29
(byte) KEY_HOME
(byte) KEY_I
(byte) KEY_J
(byte) KEY_K
(byte) KEY_L
(const byte) KEY_L#0 KEY_L = (byte/signed byte/word/signed word/dword/signed dword) 42
(byte) KEY_LSHIFT
(byte) KEY_M
(byte) KEY_MINUS
(byte) KEY_MODIFIER_COMMODORE
(byte) KEY_MODIFIER_CTRL
(byte) KEY_MODIFIER_LSHIFT
(byte) KEY_MODIFIER_RSHIFT
(byte) KEY_MODIFIER_SHIFT
(byte) KEY_N
(byte) KEY_O
(const byte) KEY_O#0 KEY_O = (byte/signed byte/word/signed word/dword/signed dword) 38
(byte) KEY_P
(byte) KEY_PLUS
(byte) KEY_POUND
(byte) KEY_Q
(byte) KEY_R
(byte) KEY_RETURN
(byte) KEY_RSHIFT
(byte) KEY_RUNSTOP
(byte) KEY_S
(byte) KEY_SEMICOLON
(byte) KEY_SLASH
(byte) KEY_SPACE
(const byte) KEY_SPACE#0 KEY_SPACE = (byte/signed byte/word/signed word/dword/signed dword) 60
(byte) KEY_T
(byte) KEY_U
(const byte) KEY_U#0 KEY_U = (byte/signed byte/word/signed word/dword/signed dword) 30
(byte) KEY_V
(byte) KEY_W
(byte) KEY_X
(byte) KEY_Y
(byte) KEY_Z
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(const byte) LIGHT_GREEN#0 LIGHT_GREEN = (byte/signed byte/word/signed word/dword/signed dword) 13
(byte) LIGHT_GREY
(byte[]) MENU_TEXT
(const byte[]) MENU_TEXT#0 MENU_TEXT = (string) "C64DTV Graphics Modes CCLHBME@"+(string) " OHIIMCC@"+(string) " LUNCMMM@"+(string) "----------------------------------------@"+(string) "1. Standard Char (V) 0000000@"+(string) "2. Extended Color Char (V) 0000001@"+(string) "3. Multicolor Char (V) 0000010@"+(string) "4. Standard Bitmap (V) 0000100@"+(string) "5. Multicolor Bitmap (V) 0000110@"+(string) "6. High Color Standard Char (H) 0001000@"+(string) "7. High Extended Color Char (H) 0001001@"+(string) "8. High Multicolor Char (H) 0001010@"+(string) "9. High Multicolor Bitmap (H) 0001110@"+(string) "a. Sixs Fred 2 (D) 0010111@"+(string) "b. Two Plane Bitmap (D) 0011101@"+(string) "c. Sixs Fred (2 Plane MC BM) (D) 0011111@"+(string) "d. 8bpp Pixel Cell (D) 0111011@"+(string) "e. Chunky 8bpp Bitmap (D) 1111011@"+(string) "----------------------------------------@"+(string) " (V) vicII (H) vicII+hicol (D) c64dtv@"+(string) "@"
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(const byte) PROCPORT_RAM_CHARROM#0 PROCPORT_RAM_CHARROM = (byte/signed byte/word/signed word/dword/signed dword) 49
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(const byte) VIC_BMM#0 VIC_BMM = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte*) VIC_CONTROL
@ -153,6 +318,9 @@
(const byte*) VIC_MEMORY#0 VIC_MEMORY = ((byte*))(word/dword/signed dword) 53272
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) bitmap_clear()
(word~) bitmap_clear::$3 $3 zp ZP_WORD:2 2.0
(label) bitmap_clear::@1
@ -425,6 +593,9 @@
(byte) dtv_control#114 dtv_control zp ZP_BYTE:4 42.099999999999994
(byte) dtv_control#145 dtv_control zp ZP_BYTE:4 2.0
(byte) dtv_control#17 dtv_control zp ZP_BYTE:4 67.33333333333333
(byte[]) keyboard_char_keycodes
(byte[8]) keyboard_events
(byte) keyboard_events_size
(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
(byte~) keyboard_key_pressed::$2 reg byte a 4.0
(label) keyboard_key_pressed::@2
@ -469,6 +640,8 @@
(byte) keyboard_matrix_read::rowid#0 reg byte y 4.0
(byte[8]) keyboard_matrix_row_bitmask
(const byte[8]) keyboard_matrix_row_bitmask#0 keyboard_matrix_row_bitmask = { (byte/word/signed word/dword/signed dword) 254, (byte/word/signed word/dword/signed dword) 253, (byte/word/signed word/dword/signed dword) 251, (byte/word/signed word/dword/signed dword) 247, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 191, (byte/signed byte/word/signed word/dword/signed dword) 127 }
(byte) keyboard_modifiers
(byte[8]) keyboard_scan_values
(void()) main()
(label) main::@2
(void()) menu()
@ -1143,7 +1316,7 @@
(byte) mode_twoplanebitmap::i#2 reg byte x 202.0
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:5 2002.0
(byte*~) print_char_cursor#101 print_char_cursor zp ZP_WORD:5 202.0
(byte*~) print_char_cursor#103 print_char_cursor zp ZP_WORD:5 202.0
(byte*) print_char_cursor#17 print_char_cursor zp ZP_WORD:5 821.0
(byte*) print_char_cursor#19 print_char_cursor zp ZP_WORD:5 101.0
(byte*) print_char_cursor#32 print_char_cursor zp ZP_WORD:5 572.0
@ -1153,6 +1326,7 @@
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 151.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 151.5
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_line_cursor#17 print_line_cursor zp ZP_WORD:13 8.583333333333332
(byte*) print_line_cursor#18 print_line_cursor zp ZP_WORD:13 2004.0
@ -1183,7 +1357,7 @@ zp ZP_WORD:2 [ menu::c#2 menu::c#1 mode_8bppchunkybmm::x#2 mode_8bppchunkybmm::x
reg byte x [ mode_8bppchunkybmm::i#2 mode_8bppchunkybmm::i#1 ]
zp ZP_BYTE:4 [ mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 dtv_control#114 dtv_control#145 dtv_control#17 mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 mode_sixsfred::cy#4 mode_sixsfred::cy#1 mode_sixsfred::ay#4 mode_sixsfred::ay#1 mode_sixsfred::by#4 mode_sixsfred::by#1 mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 mode_twoplanebitmap::ay#4 mode_twoplanebitmap::ay#1 mode_twoplanebitmap::by#4 mode_twoplanebitmap::by#1 mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 mode_sixsfred2::by#4 mode_sixsfred2::by#1 mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 mode_stdbitmap::l#2 mode_stdbitmap::l#1 bitmap_clear::y#4 bitmap_clear::y#1 mode_mcchar::cy#4 mode_mcchar::cy#1 mode_ecmchar::cy#4 mode_ecmchar::cy#1 mode_stdchar::cy#4 mode_stdchar::cy#1 bitmap_init::$6 ]
reg byte x [ mode_8bppchunkybmm::gfxbCpuBank#4 mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::gfxbCpuBank#8 mode_8bppchunkybmm::gfxbCpuBank#2 ]
zp ZP_WORD:5 [ mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 print_char_cursor#17 print_char_cursor#19 print_char_cursor#101 print_char_cursor#32 print_char_cursor#1 bitmap_plot::plotter_y#0 ]
zp ZP_WORD:5 [ mode_8bppchunkybmm::gfxb#4 mode_8bppchunkybmm::gfxb#3 mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::gfxb#1 mode_8bpppixelcell::gfxb#2 mode_8bpppixelcell::gfxb#5 mode_8bpppixelcell::gfxb#7 mode_8bpppixelcell::gfxb#1 mode_hicolmcchar::ch#2 mode_hicolmcchar::ch#3 mode_hicolmcchar::ch#1 mode_hicolecmchar::ch#2 mode_hicolecmchar::ch#3 mode_hicolecmchar::ch#1 mode_hicolstdchar::ch#2 mode_hicolstdchar::ch#3 mode_hicolstdchar::ch#1 mode_mcchar::ch#2 mode_mcchar::ch#3 mode_mcchar::ch#1 mode_ecmchar::ch#2 mode_ecmchar::ch#3 mode_ecmchar::ch#1 mode_stdchar::ch#2 mode_stdchar::ch#3 mode_stdchar::ch#1 print_char_cursor#17 print_char_cursor#19 print_char_cursor#103 print_char_cursor#32 print_char_cursor#1 bitmap_plot::plotter_y#0 ]
reg byte x [ mode_ctrl::ctrl#14 mode_ctrl::ctrl#22 mode_ctrl::ctrl#6 mode_ctrl::ctrl#13 mode_ctrl::ctrl#5 mode_ctrl::ctrl#12 mode_ctrl::ctrl#4 mode_ctrl::ctrl#11 mode_ctrl::ctrl#3 mode_ctrl::ctrl#10 mode_ctrl::ctrl#2 mode_ctrl::ctrl#17 mode_ctrl::ctrl#1 mode_ctrl::ctrl#0 ]
reg byte y [ keyboard_key_pressed::key#20 ]
reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]

@ -50,7 +50,7 @@ assert_sbyte: scope:[assert_sbyte] from test_sbytes test_sbytes::@1 test_sbytes
[22] (signed byte) assert_sbyte::b#5 ← phi( test_sbytes/(const signed byte) test_sbytes::bb#0 test_sbytes::@1/(const signed byte) test_sbytes::bc#0 test_sbytes::@2/(const signed byte) test_sbytes::bd#0 test_sbytes::@3/(const signed byte) test_sbytes::be#0 test_sbytes::@4/(const signed byte) test_sbytes::bf#0 )
[22] (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(const string) test_sbytes::msg test_sbytes::@1/(const string) test_sbytes::msg1 test_sbytes::@2/(const string) test_sbytes::msg2 test_sbytes::@3/(const string) test_sbytes::msg3 test_sbytes::@4/(const string) test_sbytes::msg4 )
[23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
[24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1
[24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1
[25] call print_str
to:assert_sbyte::@5
assert_sbyte::@5: scope:[assert_sbyte] from assert_sbyte
@ -76,7 +76,7 @@ assert_sbyte::@1: scope:[assert_sbyte] from assert_sbyte::@6
[35] call print_str
to:assert_sbyte::@2
print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
[36] (byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#2 assert_byte::@3/(byte*) print_char_cursor#2 assert_byte::@5/(byte*) print_char_cursor#2 assert_sbyte/(byte*~) print_char_cursor#86 assert_sbyte::@1/(byte*) print_char_cursor#2 assert_sbyte::@3/(byte*) print_char_cursor#2 assert_sbyte::@5/(byte*) print_char_cursor#2 )
[36] (byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#2 assert_byte::@3/(byte*) print_char_cursor#2 assert_byte::@5/(byte*) print_char_cursor#2 assert_sbyte/(byte*~) print_char_cursor#87 assert_sbyte::@1/(byte*) print_char_cursor#2 assert_sbyte::@3/(byte*) print_char_cursor#2 assert_sbyte::@5/(byte*) print_char_cursor#2 )
[36] (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(const string) assert_byte::str1 assert_byte::@3/(const string) assert_byte::str2 assert_byte::@5/(const string) assert_byte::str assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(const string) assert_sbyte::str1 assert_sbyte::@3/(const string) assert_sbyte::str2 assert_sbyte::@5/(const string) assert_sbyte::str )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
@ -108,11 +108,11 @@ test_bytes: scope:[test_bytes] from main::@1
[49] call assert_byte
to:test_bytes::@1
test_bytes::@1: scope:[test_bytes] from test_bytes
[50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1
[50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1
[51] call assert_byte
to:test_bytes::@2
test_bytes::@2: scope:[test_bytes] from test_bytes::@1
[52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1
[52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1
[53] call assert_byte
to:test_bytes::@return
test_bytes::@return: scope:[test_bytes] from test_bytes::@2
@ -122,7 +122,7 @@ assert_byte: scope:[assert_byte] from test_bytes test_bytes::@1 test_bytes::@2
[55] (byte*) print_line_cursor#50 ← phi( test_bytes/((byte*))(word/signed word/dword/signed dword) 1024 test_bytes::@1/(byte*) print_line_cursor#1 test_bytes::@2/(byte*) print_line_cursor#1 )
[55] (byte) assert_byte::c#3 ← phi( test_bytes/(byte/signed byte/word/signed word/dword/signed dword) 0 test_bytes::@1/(byte/signed byte/word/signed word/dword/signed dword) 2 test_bytes::@2/(byte/word/signed word/dword/signed dword) 254 )
[55] (byte) assert_byte::b#3 ← phi( test_bytes/(const byte) test_bytes::bb#0 test_bytes::@1/(const byte) test_bytes::bc#0 test_bytes::@2/(const byte) test_bytes::bd#0 )
[55] (byte*) print_char_cursor#70 ← phi( test_bytes/((byte*))(word/signed word/dword/signed dword) 1024 test_bytes::@1/(byte*~) print_char_cursor#92 test_bytes::@2/(byte*~) print_char_cursor#93 )
[55] (byte*) print_char_cursor#70 ← phi( test_bytes/((byte*))(word/signed word/dword/signed dword) 1024 test_bytes::@1/(byte*~) print_char_cursor#93 test_bytes::@2/(byte*~) print_char_cursor#94 )
[55] (byte*) assert_byte::msg#3 ← phi( test_bytes/(const string) test_bytes::msg test_bytes::@1/(const string) test_bytes::msg1 test_bytes::@2/(const string) test_bytes::msg2 )
[56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
[57] call print_str

@ -4,7 +4,7 @@ CONTROL FLOW GRAPH SSA
(byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) print_line_cursor#0 ← (byte*) print_screen#0
(byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
to:@19
to:@12
print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
(byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#71 assert_byte::@3/(byte*) print_char_cursor#72 assert_byte::@5/(byte*) print_char_cursor#15 assert_sbyte/(byte*) print_char_cursor#75 assert_sbyte::@1/(byte*) print_char_cursor#76 assert_sbyte::@3/(byte*) print_char_cursor#77 assert_sbyte::@5/(byte*) print_char_cursor#27 )
(byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(byte*) print_str::str#3 assert_byte::@3/(byte*) print_str::str#4 assert_byte::@5/(byte*) print_str::str#2 assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(byte*) print_str::str#7 assert_sbyte::@3/(byte*) print_str::str#8 assert_sbyte::@5/(byte*) print_str::str#6 )
@ -50,6 +50,12 @@ print_ln::@return: scope:[print_ln] from print_ln::@2
(byte*) print_char_cursor#4 ← (byte*) print_char_cursor#37
return
to:@return
@12: scope:[] from @begin
(byte*) print_screen#7 ← phi( @begin/(byte*) print_screen#0 )
(byte*) print_char_cursor#82 ← phi( @begin/(byte*) print_char_cursor#0 )
(byte*) print_line_cursor#59 ← phi( @begin/(byte*) print_line_cursor#0 )
(byte[]) print_hextab#0 ← (const string) $0
to:@19
print_cls: scope:[print_cls] from main
(byte*) print_screen#1 ← phi( main/(byte*) print_screen#4 )
(byte*) print_cls::sc#0 ← (byte*) print_screen#1
@ -75,10 +81,10 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) print_char_cursor#6 ← (byte*) print_char_cursor#38
return
to:@return
@19: scope:[] from @begin
(byte*) print_screen#6 ← phi( @begin/(byte*) print_screen#0 )
(byte*) print_char_cursor#81 ← phi( @begin/(byte*) print_char_cursor#0 )
(byte*) print_line_cursor#58 ← phi( @begin/(byte*) print_line_cursor#0 )
@19: scope:[] from @12
(byte*) print_screen#6 ← phi( @12/(byte*) print_screen#7 )
(byte*) print_char_cursor#81 ← phi( @12/(byte*) print_char_cursor#82 )
(byte*) print_line_cursor#58 ← phi( @12/(byte*) print_line_cursor#59 )
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
@ -168,7 +174,7 @@ test_bytes::@return: scope:[test_bytes] from test_bytes::@3
return
to:@return
assert_byte: scope:[assert_byte] from test_bytes test_bytes::@1 test_bytes::@2
(byte*) print_line_cursor#67 ← phi( test_bytes/(byte*) print_line_cursor#49 test_bytes::@1/(byte*) print_line_cursor#9 test_bytes::@2/(byte*) print_line_cursor#10 )
(byte*) print_line_cursor#68 ← phi( test_bytes/(byte*) print_line_cursor#49 test_bytes::@1/(byte*) print_line_cursor#9 test_bytes::@2/(byte*) print_line_cursor#10 )
(byte) assert_byte::c#5 ← phi( test_bytes/(byte) assert_byte::c#0 test_bytes::@1/(byte) assert_byte::c#1 test_bytes::@2/(byte) assert_byte::c#2 )
(byte) assert_byte::b#5 ← phi( test_bytes/(byte) assert_byte::b#0 test_bytes::@1/(byte) assert_byte::b#1 test_bytes::@2/(byte) assert_byte::b#2 )
(byte*) print_char_cursor#70 ← phi( test_bytes/(byte*) print_char_cursor#69 test_bytes::@1/(byte*) print_char_cursor#11 test_bytes::@2/(byte*) print_char_cursor#12 )
@ -177,7 +183,7 @@ assert_byte: scope:[assert_byte] from test_bytes test_bytes::@1 test_bytes::@2
call print_str
to:assert_byte::@5
assert_byte::@5: scope:[assert_byte] from assert_byte
(byte*) print_line_cursor#65 ← phi( assert_byte/(byte*) print_line_cursor#67 )
(byte*) print_line_cursor#66 ← phi( assert_byte/(byte*) print_line_cursor#68 )
(byte) assert_byte::c#4 ← phi( assert_byte/(byte) assert_byte::c#5 )
(byte) assert_byte::b#4 ← phi( assert_byte/(byte) assert_byte::b#5 )
(byte*) print_char_cursor#47 ← phi( assert_byte/(byte*) print_char_cursor#2 )
@ -186,7 +192,7 @@ assert_byte::@5: scope:[assert_byte] from assert_byte
call print_str
to:assert_byte::@6
assert_byte::@6: scope:[assert_byte] from assert_byte::@5
(byte*) print_line_cursor#63 ← phi( assert_byte::@5/(byte*) print_line_cursor#65 )
(byte*) print_line_cursor#64 ← phi( assert_byte::@5/(byte*) print_line_cursor#66 )
(byte) assert_byte::c#3 ← phi( assert_byte::@5/(byte) assert_byte::c#4 )
(byte) assert_byte::b#3 ← phi( assert_byte::@5/(byte) assert_byte::b#4 )
(byte*) print_char_cursor#48 ← phi( assert_byte::@5/(byte*) print_char_cursor#2 )
@ -195,25 +201,25 @@ assert_byte::@6: scope:[assert_byte] from assert_byte::@5
if((bool~) assert_byte::$2) goto assert_byte::@1
to:assert_byte::@3
assert_byte::@1: scope:[assert_byte] from assert_byte::@6
(byte*) print_line_cursor#59 ← phi( assert_byte::@6/(byte*) print_line_cursor#63 )
(byte*) print_line_cursor#60 ← phi( assert_byte::@6/(byte*) print_line_cursor#64 )
(byte*) print_char_cursor#71 ← phi( assert_byte::@6/(byte*) print_char_cursor#16 )
*((byte*) BGCOL#0) ← (byte) RED#0
(byte*) print_str::str#3 ← (const string) assert_byte::str1
call print_str
to:assert_byte::@7
assert_byte::@7: scope:[assert_byte] from assert_byte::@1
(byte*) print_line_cursor#54 ← phi( assert_byte::@1/(byte*) print_line_cursor#59 )
(byte*) print_line_cursor#54 ← phi( assert_byte::@1/(byte*) print_line_cursor#60 )
(byte*) print_char_cursor#49 ← phi( assert_byte::@1/(byte*) print_char_cursor#2 )
(byte*) print_char_cursor#17 ← (byte*) print_char_cursor#49
to:assert_byte::@2
assert_byte::@3: scope:[assert_byte] from assert_byte::@6
(byte*) print_line_cursor#60 ← phi( assert_byte::@6/(byte*) print_line_cursor#63 )
(byte*) print_line_cursor#61 ← phi( assert_byte::@6/(byte*) print_line_cursor#64 )
(byte*) print_char_cursor#72 ← phi( assert_byte::@6/(byte*) print_char_cursor#16 )
(byte*) print_str::str#4 ← (const string) assert_byte::str2
call print_str
to:assert_byte::@8
assert_byte::@8: scope:[assert_byte] from assert_byte::@3
(byte*) print_line_cursor#55 ← phi( assert_byte::@3/(byte*) print_line_cursor#60 )
(byte*) print_line_cursor#55 ← phi( assert_byte::@3/(byte*) print_line_cursor#61 )
(byte*) print_char_cursor#50 ← phi( assert_byte::@3/(byte*) print_char_cursor#2 )
(byte*) print_char_cursor#18 ← (byte*) print_char_cursor#50
to:assert_byte::@2
@ -312,7 +318,7 @@ test_sbytes::@return: scope:[test_sbytes] from test_sbytes::@5
return
to:@return
assert_sbyte: scope:[assert_sbyte] from test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
(byte*) print_line_cursor#68 ← phi( test_sbytes/(byte*) print_line_cursor#51 test_sbytes::@1/(byte*) print_line_cursor#15 test_sbytes::@2/(byte*) print_line_cursor#16 test_sbytes::@3/(byte*) print_line_cursor#17 test_sbytes::@4/(byte*) print_line_cursor#18 )
(byte*) print_line_cursor#69 ← phi( test_sbytes/(byte*) print_line_cursor#51 test_sbytes::@1/(byte*) print_line_cursor#15 test_sbytes::@2/(byte*) print_line_cursor#16 test_sbytes::@3/(byte*) print_line_cursor#17 test_sbytes::@4/(byte*) print_line_cursor#18 )
(signed byte) assert_sbyte::c#7 ← phi( test_sbytes/(signed byte) assert_sbyte::c#0 test_sbytes::@1/(signed byte) assert_sbyte::c#1 test_sbytes::@2/(signed byte) assert_sbyte::c#2 test_sbytes::@3/(signed byte) assert_sbyte::c#3 test_sbytes::@4/(signed byte) assert_sbyte::c#4 )
(signed byte) assert_sbyte::b#7 ← phi( test_sbytes/(signed byte) assert_sbyte::b#0 test_sbytes::@1/(signed byte) assert_sbyte::b#1 test_sbytes::@2/(signed byte) assert_sbyte::b#2 test_sbytes::@3/(signed byte) assert_sbyte::b#3 test_sbytes::@4/(signed byte) assert_sbyte::b#4 )
(byte*) print_char_cursor#75 ← phi( test_sbytes/(byte*) print_char_cursor#74 test_sbytes::@1/(byte*) print_char_cursor#21 test_sbytes::@2/(byte*) print_char_cursor#22 test_sbytes::@3/(byte*) print_char_cursor#23 test_sbytes::@4/(byte*) print_char_cursor#24 )
@ -321,7 +327,7 @@ assert_sbyte: scope:[assert_sbyte] from test_sbytes test_sbytes::@1 test_sbytes
call print_str
to:assert_sbyte::@5
assert_sbyte::@5: scope:[assert_sbyte] from assert_sbyte
(byte*) print_line_cursor#66 ← phi( assert_sbyte/(byte*) print_line_cursor#68 )
(byte*) print_line_cursor#67 ← phi( assert_sbyte/(byte*) print_line_cursor#69 )
(signed byte) assert_sbyte::c#6 ← phi( assert_sbyte/(signed byte) assert_sbyte::c#7 )
(signed byte) assert_sbyte::b#6 ← phi( assert_sbyte/(signed byte) assert_sbyte::b#7 )
(byte*) print_char_cursor#59 ← phi( assert_sbyte/(byte*) print_char_cursor#2 )
@ -330,7 +336,7 @@ assert_sbyte::@5: scope:[assert_sbyte] from assert_sbyte
call print_str
to:assert_sbyte::@6
assert_sbyte::@6: scope:[assert_sbyte] from assert_sbyte::@5
(byte*) print_line_cursor#64 ← phi( assert_sbyte::@5/(byte*) print_line_cursor#66 )
(byte*) print_line_cursor#65 ← phi( assert_sbyte::@5/(byte*) print_line_cursor#67 )
(signed byte) assert_sbyte::c#5 ← phi( assert_sbyte::@5/(signed byte) assert_sbyte::c#6 )
(signed byte) assert_sbyte::b#5 ← phi( assert_sbyte::@5/(signed byte) assert_sbyte::b#6 )
(byte*) print_char_cursor#60 ← phi( assert_sbyte::@5/(byte*) print_char_cursor#2 )
@ -339,25 +345,25 @@ assert_sbyte::@6: scope:[assert_sbyte] from assert_sbyte::@5
if((bool~) assert_sbyte::$2) goto assert_sbyte::@1
to:assert_sbyte::@3
assert_sbyte::@1: scope:[assert_sbyte] from assert_sbyte::@6
(byte*) print_line_cursor#61 ← phi( assert_sbyte::@6/(byte*) print_line_cursor#64 )
(byte*) print_line_cursor#62 ← phi( assert_sbyte::@6/(byte*) print_line_cursor#65 )
(byte*) print_char_cursor#76 ← phi( assert_sbyte::@6/(byte*) print_char_cursor#28 )
*((byte*) BGCOL#0) ← (byte) RED#0
(byte*) print_str::str#7 ← (const string) assert_sbyte::str1
call print_str
to:assert_sbyte::@7
assert_sbyte::@7: scope:[assert_sbyte] from assert_sbyte::@1
(byte*) print_line_cursor#56 ← phi( assert_sbyte::@1/(byte*) print_line_cursor#61 )
(byte*) print_line_cursor#56 ← phi( assert_sbyte::@1/(byte*) print_line_cursor#62 )
(byte*) print_char_cursor#61 ← phi( assert_sbyte::@1/(byte*) print_char_cursor#2 )
(byte*) print_char_cursor#29 ← (byte*) print_char_cursor#61
to:assert_sbyte::@2
assert_sbyte::@3: scope:[assert_sbyte] from assert_sbyte::@6
(byte*) print_line_cursor#62 ← phi( assert_sbyte::@6/(byte*) print_line_cursor#64 )
(byte*) print_line_cursor#63 ← phi( assert_sbyte::@6/(byte*) print_line_cursor#65 )
(byte*) print_char_cursor#77 ← phi( assert_sbyte::@6/(byte*) print_char_cursor#28 )
(byte*) print_str::str#8 ← (const string) assert_sbyte::str2
call print_str
to:assert_sbyte::@8
assert_sbyte::@8: scope:[assert_sbyte] from assert_sbyte::@3
(byte*) print_line_cursor#57 ← phi( assert_sbyte::@3/(byte*) print_line_cursor#62 )
(byte*) print_line_cursor#57 ← phi( assert_sbyte::@3/(byte*) print_line_cursor#63 )
(byte*) print_char_cursor#62 ← phi( assert_sbyte::@3/(byte*) print_char_cursor#2 )
(byte*) print_char_cursor#30 ← (byte*) print_char_cursor#62
to:assert_sbyte::@2
@ -394,6 +400,8 @@ assert_sbyte::@return: scope:[assert_sbyte] from assert_sbyte::@9
@end: scope:[] from @25
SYMBOL TABLE SSA
(const string) $0 = (string) "0123456789abcdef"
(label) @12
(label) @19
(label) @24
(label) @25
@ -564,6 +572,7 @@ SYMBOL TABLE SSA
(byte*) print_char_cursor#8
(byte*) print_char_cursor#80
(byte*) print_char_cursor#81
(byte*) print_char_cursor#82
(byte*) print_char_cursor#9
(void()) print_cls()
(byte*~) print_cls::$0
@ -575,6 +584,8 @@ SYMBOL TABLE SSA
(byte*) print_cls::sc#0
(byte*) print_cls::sc#1
(byte*) print_cls::sc#2
(byte[]) print_hextab
(byte[]) print_hextab#0
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_line_cursor#1
@ -642,6 +653,7 @@ SYMBOL TABLE SSA
(byte*) print_line_cursor#66
(byte*) print_line_cursor#67
(byte*) print_line_cursor#68
(byte*) print_line_cursor#69
(byte*) print_line_cursor#7
(byte*) print_line_cursor#8
(byte*) print_line_cursor#9
@ -659,6 +671,7 @@ SYMBOL TABLE SSA
(byte*) print_screen#4
(byte*) print_screen#5
(byte*) print_screen#6
(byte*) print_screen#7
(void()) print_str((byte*) print_str::str)
(bool~) print_str::$0
(label) print_str::@1
@ -730,7 +743,7 @@ SYMBOL TABLE SSA
(const string) test_sbytes::msg3 = (string) "-(0+2-4)=2@"
(const string) test_sbytes::msg4 = (string) "-127-127=2@"
Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#58 (byte*) print_char_cursor#81 (byte*) print_screen#6 (byte*) print_line_cursor#53 (byte*) print_char_cursor#79 (byte*) print_screen#5
Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#59 (byte*) print_char_cursor#82 (byte*) print_screen#7 (byte*) print_line_cursor#58 (byte*) print_char_cursor#81 (byte*) print_screen#6 (byte*) print_line_cursor#53 (byte*) print_char_cursor#79 (byte*) print_screen#5
Alias (byte*) print_str::str#10 = (byte*) print_str::str#9
Alias (byte*) print_char_cursor#2 = (byte*) print_char_cursor#34 (byte*) print_char_cursor#66 (byte*) print_char_cursor#35
Alias (byte*) print_line_cursor#1 = (byte*~) print_ln::$0 (byte*) print_line_cursor#25 (byte*) print_char_cursor#3 (byte*) print_line_cursor#26 (byte*) print_char_cursor#37 (byte*) print_line_cursor#2 (byte*) print_char_cursor#4
@ -752,7 +765,7 @@ Alias (byte*) print_char_cursor#13 = (byte*) print_char_cursor#45 (byte*) print_
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#34 (byte*) print_line_cursor#35 (byte*) print_line_cursor#12
Alias (byte) assert_byte::b#3 = (byte) assert_byte::b#4 (byte) assert_byte::b#5
Alias (byte) assert_byte::c#3 = (byte) assert_byte::c#4 (byte) assert_byte::c#5
Alias (byte*) print_line_cursor#54 = (byte*) print_line_cursor#65 (byte*) print_line_cursor#67 (byte*) print_line_cursor#63 (byte*) print_line_cursor#59 (byte*) print_line_cursor#60 (byte*) print_line_cursor#55
Alias (byte*) print_line_cursor#54 = (byte*) print_line_cursor#66 (byte*) print_line_cursor#68 (byte*) print_line_cursor#64 (byte*) print_line_cursor#60 (byte*) print_line_cursor#61 (byte*) print_line_cursor#55
Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#47
Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#48 (byte*) print_char_cursor#71 (byte*) print_char_cursor#72
Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#49
@ -777,7 +790,7 @@ Alias (byte*) print_char_cursor#25 = (byte*) print_char_cursor#57 (byte*) print_
Alias (byte*) print_line_cursor#19 = (byte*) print_line_cursor#42 (byte*) print_line_cursor#43 (byte*) print_line_cursor#20
Alias (signed byte) assert_sbyte::b#5 = (signed byte) assert_sbyte::b#6 (signed byte) assert_sbyte::b#7
Alias (signed byte) assert_sbyte::c#5 = (signed byte) assert_sbyte::c#6 (signed byte) assert_sbyte::c#7
Alias (byte*) print_line_cursor#56 = (byte*) print_line_cursor#66 (byte*) print_line_cursor#68 (byte*) print_line_cursor#64 (byte*) print_line_cursor#61 (byte*) print_line_cursor#62 (byte*) print_line_cursor#57
Alias (byte*) print_line_cursor#56 = (byte*) print_line_cursor#67 (byte*) print_line_cursor#69 (byte*) print_line_cursor#65 (byte*) print_line_cursor#62 (byte*) print_line_cursor#63 (byte*) print_line_cursor#57
Alias (byte*) print_char_cursor#27 = (byte*) print_char_cursor#59
Alias (byte*) print_char_cursor#28 = (byte*) print_char_cursor#60 (byte*) print_char_cursor#76 (byte*) print_char_cursor#77
Alias (byte*) print_char_cursor#29 = (byte*) print_char_cursor#61
@ -854,6 +867,7 @@ Simple Condition (bool~) assert_byte::$2 if((byte) assert_byte::b#3!=(byte) asse
Simple Condition (bool~) assert_sbyte::$2 if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_line_cursor#0 = ((byte*))1024
Constant (const byte[]) print_hextab#0 = $0
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte) GREEN#0 = 5
Constant (const byte) RED#0 = 2
@ -907,7 +921,10 @@ Constant (const signed byte) assert_sbyte::b#3 = test_sbytes::be#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) assert_byte::b#2 = test_bytes::bd#0
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) @12
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @19
Culled Empty Block (label) main::@3
@ -1015,27 +1032,27 @@ Calls in [assert_byte] to print_str:69 print_str:71 print_str:74 print_ln:76 pri
Created 15 initial phi equivalence classes
Coalesced [24] print_str::str#13 ← print_str::str#5
Not coalescing [25] print_char_cursor#86 ← print_line_cursor#1
Coalesced [27] print_char_cursor#89 ← print_char_cursor#2
Coalesced (already) [30] print_char_cursor#88 ← print_char_cursor#2
Coalesced [32] print_line_cursor#70 ← print_line_cursor#1
Coalesced (already) [36] print_char_cursor#87 ← print_char_cursor#2
Not coalescing [25] print_char_cursor#87 ← print_line_cursor#1
Coalesced [27] print_char_cursor#90 ← print_char_cursor#2
Coalesced (already) [30] print_char_cursor#89 ← print_char_cursor#2
Coalesced [32] print_line_cursor#71 ← print_line_cursor#1
Coalesced (already) [36] print_char_cursor#88 ← print_char_cursor#2
Coalesced [39] print_str::str#14 ← print_str::str#11
Coalesced (already) [40] print_char_cursor#90 ← print_char_cursor#80
Coalesced (already) [40] print_char_cursor#91 ← print_char_cursor#80
Coalesced [47] print_str::str#15 ← print_str::str#0
Coalesced [48] print_char_cursor#91 ← print_char_cursor#1
Coalesced [50] print_line_cursor#71 ← print_line_cursor#47
Coalesced (already) [55] print_line_cursor#72 ← print_line_cursor#1
Not coalescing [58] print_char_cursor#92 ← print_line_cursor#1
Coalesced [59] print_line_cursor#73 ← print_line_cursor#1
Not coalescing [61] print_char_cursor#93 ← print_line_cursor#1
Coalesced (already) [62] print_line_cursor#74 ← print_line_cursor#1
Coalesced [48] print_char_cursor#92 ← print_char_cursor#1
Coalesced [50] print_line_cursor#72 ← print_line_cursor#47
Coalesced (already) [55] print_line_cursor#73 ← print_line_cursor#1
Not coalescing [58] print_char_cursor#93 ← print_line_cursor#1
Coalesced [59] print_line_cursor#74 ← print_line_cursor#1
Not coalescing [61] print_char_cursor#94 ← print_line_cursor#1
Coalesced (already) [62] print_line_cursor#75 ← print_line_cursor#1
Coalesced [67] print_str::str#12 ← print_str::str#1
Coalesced [68] print_char_cursor#82 ← print_char_cursor#70
Coalesced (already) [70] print_char_cursor#85 ← print_char_cursor#2
Coalesced (already) [73] print_char_cursor#84 ← print_char_cursor#2
Coalesced (already) [75] print_line_cursor#69 ← print_line_cursor#50
Coalesced (already) [79] print_char_cursor#83 ← print_char_cursor#2
Coalesced [68] print_char_cursor#83 ← print_char_cursor#70
Coalesced (already) [70] print_char_cursor#86 ← print_char_cursor#2
Coalesced (already) [73] print_char_cursor#85 ← print_char_cursor#2
Coalesced (already) [75] print_line_cursor#70 ← print_line_cursor#50
Coalesced (already) [79] print_char_cursor#84 ← print_char_cursor#2
Coalesced [87] print_cls::sc#3 ← print_cls::sc#1
Coalesced down to 10 phi equivalence classes
Culled Empty Block (label) print_ln::@3
@ -1112,7 +1129,7 @@ assert_sbyte: scope:[assert_sbyte] from test_sbytes test_sbytes::@1 test_sbytes
[22] (signed byte) assert_sbyte::b#5 ← phi( test_sbytes/(const signed byte) test_sbytes::bb#0 test_sbytes::@1/(const signed byte) test_sbytes::bc#0 test_sbytes::@2/(const signed byte) test_sbytes::bd#0 test_sbytes::@3/(const signed byte) test_sbytes::be#0 test_sbytes::@4/(const signed byte) test_sbytes::bf#0 )
[22] (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(const string) test_sbytes::msg test_sbytes::@1/(const string) test_sbytes::msg1 test_sbytes::@2/(const string) test_sbytes::msg2 test_sbytes::@3/(const string) test_sbytes::msg3 test_sbytes::@4/(const string) test_sbytes::msg4 )
[23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
[24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1
[24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1
[25] call print_str
to:assert_sbyte::@5
assert_sbyte::@5: scope:[assert_sbyte] from assert_sbyte
@ -1138,7 +1155,7 @@ assert_sbyte::@1: scope:[assert_sbyte] from assert_sbyte::@6
[35] call print_str
to:assert_sbyte::@2
print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
[36] (byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#2 assert_byte::@3/(byte*) print_char_cursor#2 assert_byte::@5/(byte*) print_char_cursor#2 assert_sbyte/(byte*~) print_char_cursor#86 assert_sbyte::@1/(byte*) print_char_cursor#2 assert_sbyte::@3/(byte*) print_char_cursor#2 assert_sbyte::@5/(byte*) print_char_cursor#2 )
[36] (byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#2 assert_byte::@3/(byte*) print_char_cursor#2 assert_byte::@5/(byte*) print_char_cursor#2 assert_sbyte/(byte*~) print_char_cursor#87 assert_sbyte::@1/(byte*) print_char_cursor#2 assert_sbyte::@3/(byte*) print_char_cursor#2 assert_sbyte::@5/(byte*) print_char_cursor#2 )
[36] (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(const string) assert_byte::str1 assert_byte::@3/(const string) assert_byte::str2 assert_byte::@5/(const string) assert_byte::str assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(const string) assert_sbyte::str1 assert_sbyte::@3/(const string) assert_sbyte::str2 assert_sbyte::@5/(const string) assert_sbyte::str )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@2
@ -1170,11 +1187,11 @@ test_bytes: scope:[test_bytes] from main::@1
[49] call assert_byte
to:test_bytes::@1
test_bytes::@1: scope:[test_bytes] from test_bytes
[50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1
[50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1
[51] call assert_byte
to:test_bytes::@2
test_bytes::@2: scope:[test_bytes] from test_bytes::@1
[52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1
[52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1
[53] call assert_byte
to:test_bytes::@return
test_bytes::@return: scope:[test_bytes] from test_bytes::@2
@ -1184,7 +1201,7 @@ assert_byte: scope:[assert_byte] from test_bytes test_bytes::@1 test_bytes::@2
[55] (byte*) print_line_cursor#50 ← phi( test_bytes/((byte*))(word/signed word/dword/signed dword) 1024 test_bytes::@1/(byte*) print_line_cursor#1 test_bytes::@2/(byte*) print_line_cursor#1 )
[55] (byte) assert_byte::c#3 ← phi( test_bytes/(byte/signed byte/word/signed word/dword/signed dword) 0 test_bytes::@1/(byte/signed byte/word/signed word/dword/signed dword) 2 test_bytes::@2/(byte/word/signed word/dword/signed dword) 254 )
[55] (byte) assert_byte::b#3 ← phi( test_bytes/(const byte) test_bytes::bb#0 test_bytes::@1/(const byte) test_bytes::bc#0 test_bytes::@2/(const byte) test_bytes::bd#0 )
[55] (byte*) print_char_cursor#70 ← phi( test_bytes/((byte*))(word/signed word/dword/signed dword) 1024 test_bytes::@1/(byte*~) print_char_cursor#92 test_bytes::@2/(byte*~) print_char_cursor#93 )
[55] (byte*) print_char_cursor#70 ← phi( test_bytes/((byte*))(word/signed word/dword/signed dword) 1024 test_bytes::@1/(byte*~) print_char_cursor#93 test_bytes::@2/(byte*~) print_char_cursor#94 )
[55] (byte*) assert_byte::msg#3 ← phi( test_bytes/(const string) test_bytes::msg test_bytes::@1/(const string) test_bytes::msg1 test_bytes::@2/(const string) test_bytes::msg2 )
[56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
[57] call print_str
@ -1249,13 +1266,14 @@ VARIABLE REGISTER WEIGHTS
(byte*) print_char_cursor#2 2.230769230769231
(byte*) print_char_cursor#70 3.0
(byte*) print_char_cursor#80 18.0
(byte*~) print_char_cursor#86 4.0
(byte*~) print_char_cursor#92 4.0
(byte*~) print_char_cursor#87 4.0
(byte*~) print_char_cursor#93 4.0
(byte*~) print_char_cursor#94 4.0
(void()) print_cls()
(byte*) print_cls::sc
(byte*) print_cls::sc#1 16.5
(byte*) print_cls::sc#2 16.5
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_line_cursor#1 1.2500000000000002
(byte*) print_line_cursor#24 24.0
@ -1285,7 +1303,7 @@ Initial phi equivalence classes
[ assert_sbyte::msg#5 ]
[ assert_sbyte::b#5 ]
[ assert_sbyte::c#5 ]
[ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
[ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
[ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
[ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
[ assert_byte::msg#3 ]
@ -1296,7 +1314,7 @@ Complete equivalence classes
[ assert_sbyte::msg#5 ]
[ assert_sbyte::b#5 ]
[ assert_sbyte::c#5 ]
[ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
[ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
[ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
[ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
[ assert_byte::msg#3 ]
@ -1306,7 +1324,7 @@ Complete equivalence classes
Allocated zp ZP_WORD:2 [ assert_sbyte::msg#5 ]
Allocated zp ZP_BYTE:4 [ assert_sbyte::b#5 ]
Allocated zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Allocated zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
Allocated zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
Allocated zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
Allocated zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
Allocated zp ZP_WORD:12 [ assert_byte::msg#3 ]
@ -1495,7 +1513,7 @@ assert_sbyte: {
sta print_str.str
lda msg+1
sta print_str.str+1
//SEG60 [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
//SEG60 [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
@ -1503,7 +1521,7 @@ assert_sbyte: {
//SEG61 [25] call print_str
//SEG62 [36] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str]
print_str_from_assert_sbyte:
//SEG63 [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#86 [phi:assert_sbyte->print_str#0] -- register_copy
//SEG63 [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#87 [phi:assert_sbyte->print_str#0] -- register_copy
//SEG64 [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy
jsr print_str
//SEG65 [26] phi from assert_sbyte to assert_sbyte::@5 [phi:assert_sbyte->assert_sbyte::@5]
@ -1684,7 +1702,7 @@ test_bytes: {
jmp b1
//SEG120 test_bytes::@1
b1:
//SEG121 [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
//SEG121 [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
@ -1699,7 +1717,7 @@ test_bytes: {
//SEG126 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuz1=vbuc1
lda #bc
sta assert_byte.b
//SEG127 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#92 [phi:test_bytes::@1->assert_byte#3] -- register_copy
//SEG127 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@1->assert_byte#3] -- register_copy
//SEG128 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1
lda #<msg1
sta assert_byte.msg
@ -1709,7 +1727,7 @@ test_bytes: {
jmp b2
//SEG129 test_bytes::@2
b2:
//SEG130 [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
//SEG130 [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
@ -1724,7 +1742,7 @@ test_bytes: {
//SEG135 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuz1=vbuc1
lda #bd
sta assert_byte.b
//SEG136 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@2->assert_byte#3] -- register_copy
//SEG136 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#94 [phi:test_bytes::@2->assert_byte#3] -- register_copy
//SEG137 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1
lda #<msg2
sta assert_byte.msg
@ -1874,7 +1892,7 @@ Statement [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 [ ] ( main:2 [ ]
Statement [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ assert_sbyte::b#5 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Statement [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ assert_sbyte::b#5 ]
@ -1886,22 +1904,22 @@ Removing always clobbered register reg byte y as potential for zp ZP_BYTE:15 [ a
Statement [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#92 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#92 ] ) always clobbers reg byte a
Statement [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#93 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#93 ] ) always clobbers reg byte a
Statement [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#93 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#93 ] ) always clobbers reg byte a
Statement [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#94 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#94 ] ) always clobbers reg byte a
Statement [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ) always clobbers reg byte a
Statement [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_char_cursor#2 print_line_cursor#50 ] ( main:2::test_bytes:7::assert_byte:49 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:51 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:53 [ print_char_cursor#2 print_line_cursor#50 ] ) always clobbers reg byte a
Statement [70] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y
Statement [72] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/signed dword) 1024+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a
Statement [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a
Statement [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#87 print_line_cursor#1 ] ) always clobbers reg byte a
Statement [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y
Statement [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a
Statement [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#92 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#92 ] ) always clobbers reg byte a
Statement [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#93 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#93 ] ) always clobbers reg byte a
Statement [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#93 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#93 ] ) always clobbers reg byte a
Statement [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#94 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#94 ] ) always clobbers reg byte a
Statement [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ) always clobbers reg byte a
Statement [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_char_cursor#2 print_line_cursor#50 ] ( main:2::test_bytes:7::assert_byte:49 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:51 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:53 [ print_char_cursor#2 print_line_cursor#50 ] ) always clobbers reg byte a
Statement [70] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y
@ -1909,7 +1927,7 @@ Statement [72] if((byte*) print_cls::sc#1!=((byte*))(word/signed word/dword/sign
Potential registers zp ZP_WORD:2 [ assert_sbyte::msg#5 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_BYTE:4 [ assert_sbyte::b#5 ] : zp ZP_BYTE:4 , reg byte x ,
Potential registers zp ZP_BYTE:5 [ assert_sbyte::c#5 ] : zp ZP_BYTE:5 , reg byte x ,
Potential registers zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ] : zp ZP_WORD:6 ,
Potential registers zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ] : zp ZP_WORD:6 ,
Potential registers zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] : zp ZP_WORD:8 ,
Potential registers zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ] : zp ZP_WORD:10 ,
Potential registers zp ZP_WORD:12 [ assert_byte::msg#3 ] : zp ZP_WORD:12 ,
@ -1918,7 +1936,7 @@ Potential registers zp ZP_BYTE:15 [ assert_byte::c#3 ] : zp ZP_BYTE:15 , reg byt
Potential registers zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:16 ,
REGISTER UPLIFT SCOPES
Uplift Scope [] 46.23: zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ] 31.8: zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
Uplift Scope [] 46.23: zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ] 31.8: zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
Uplift Scope [print_str] 45.5: zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
Uplift Scope [print_cls] 33: zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ]
Uplift Scope [assert_byte] 2: zp ZP_WORD:12 [ assert_byte::msg#3 ] 0.4: zp ZP_BYTE:14 [ assert_byte::b#3 ] 0.4: zp ZP_BYTE:15 [ assert_byte::c#3 ]
@ -1928,7 +1946,7 @@ Uplift Scope [main]
Uplift Scope [test_bytes]
Uplift Scope [test_sbytes]
Uplifting [] best 2199 combination zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ] zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
Uplifting [] best 2199 combination zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ] zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
Uplifting [print_str] best 2199 combination zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
Uplifting [print_cls] best 2199 combination zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [assert_byte] best 2187 combination zp ZP_WORD:12 [ assert_byte::msg#3 ] reg byte x [ assert_byte::b#3 ] zp ZP_BYTE:15 [ assert_byte::c#3 ]
@ -1946,7 +1964,7 @@ Coalescing zero page register with common assignment [ zp ZP_WORD:2 [ assert_sby
Coalescing zero page register [ zp ZP_WORD:2 [ assert_sbyte::msg#5 print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 assert_byte::msg#3 ] ] with [ zp ZP_WORD:16 [ print_cls::sc#2 print_cls::sc#1 ] ]
Coalescing zero page register [ zp ZP_BYTE:5 [ assert_sbyte::c#5 ] ] with [ zp ZP_BYTE:15 [ assert_byte::c#3 ] ]
Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ assert_sbyte::c#5 assert_byte::c#3 ]
Allocated (was zp ZP_WORD:6) zp ZP_WORD:5 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
Allocated (was zp ZP_WORD:6) zp ZP_WORD:5 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
Allocated (was zp ZP_WORD:10) zp ZP_WORD:7 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
ASSEMBLER BEFORE OPTIMIZATION
@ -2121,7 +2139,7 @@ assert_sbyte: {
.label c = 4
//SEG59 [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
// (byte*) print_str::str#5 = (byte*) assert_sbyte::msg#5 // register copy zp ZP_WORD:2
//SEG60 [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
//SEG60 [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
@ -2129,7 +2147,7 @@ assert_sbyte: {
//SEG61 [25] call print_str
//SEG62 [36] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str]
print_str_from_assert_sbyte:
//SEG63 [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#86 [phi:assert_sbyte->print_str#0] -- register_copy
//SEG63 [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#87 [phi:assert_sbyte->print_str#0] -- register_copy
//SEG64 [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy
jsr print_str
//SEG65 [26] phi from assert_sbyte to assert_sbyte::@5 [phi:assert_sbyte->assert_sbyte::@5]
@ -2308,7 +2326,7 @@ test_bytes: {
jmp b1
//SEG120 test_bytes::@1
b1:
//SEG121 [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
//SEG121 [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
@ -2322,7 +2340,7 @@ test_bytes: {
sta assert_byte.c
//SEG126 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1
ldx #bc
//SEG127 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#92 [phi:test_bytes::@1->assert_byte#3] -- register_copy
//SEG127 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@1->assert_byte#3] -- register_copy
//SEG128 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1
lda #<msg1
sta assert_byte.msg
@ -2332,7 +2350,7 @@ test_bytes: {
jmp b2
//SEG129 test_bytes::@2
b2:
//SEG130 [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
//SEG130 [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
@ -2346,7 +2364,7 @@ test_bytes: {
sta assert_byte.c
//SEG135 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1
ldx #bd
//SEG136 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@2->assert_byte#3] -- register_copy
//SEG136 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#94 [phi:test_bytes::@2->assert_byte#3] -- register_copy
//SEG137 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1
lda #<msg2
sta assert_byte.msg
@ -2650,15 +2668,16 @@ FINAL SYMBOL TABLE
(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:5 2.230769230769231
(byte*) print_char_cursor#70 print_char_cursor zp ZP_WORD:5 3.0
(byte*) print_char_cursor#80 print_char_cursor zp ZP_WORD:5 18.0
(byte*~) print_char_cursor#86 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#92 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#87 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#93 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#94 print_char_cursor zp ZP_WORD:5 4.0
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:7 1.2500000000000002
(byte*) print_line_cursor#24 print_line_cursor zp ZP_WORD:7 24.0
@ -2716,7 +2735,7 @@ FINAL SYMBOL TABLE
zp ZP_WORD:2 [ assert_sbyte::msg#5 print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 assert_byte::msg#3 print_cls::sc#2 print_cls::sc#1 ]
reg byte x [ assert_sbyte::b#5 ]
zp ZP_BYTE:4 [ assert_sbyte::c#5 assert_byte::c#3 ]
zp ZP_WORD:5 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
zp ZP_WORD:5 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
zp ZP_WORD:7 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
reg byte x [ assert_byte::b#3 ]
@ -2858,14 +2877,14 @@ assert_sbyte: {
.label c = 4
//SEG59 [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
// (byte*) print_str::str#5 = (byte*) assert_sbyte::msg#5 // register copy zp ZP_WORD:2
//SEG60 [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
//SEG60 [24] (byte*~) print_char_cursor#87 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
sta print_char_cursor+1
//SEG61 [25] call print_str
//SEG62 [36] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str]
//SEG63 [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#86 [phi:assert_sbyte->print_str#0] -- register_copy
//SEG63 [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#87 [phi:assert_sbyte->print_str#0] -- register_copy
//SEG64 [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy
jsr print_str
//SEG65 [26] phi from assert_sbyte to assert_sbyte::@5 [phi:assert_sbyte->assert_sbyte::@5]
@ -3013,7 +3032,7 @@ test_bytes: {
sta assert_byte.msg+1
jsr assert_byte
//SEG120 test_bytes::@1
//SEG121 [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
//SEG121 [50] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
@ -3026,7 +3045,7 @@ test_bytes: {
sta assert_byte.c
//SEG126 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1
ldx #bc
//SEG127 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#92 [phi:test_bytes::@1->assert_byte#3] -- register_copy
//SEG127 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@1->assert_byte#3] -- register_copy
//SEG128 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1
lda #<msg1
sta assert_byte.msg
@ -3034,7 +3053,7 @@ test_bytes: {
sta assert_byte.msg+1
jsr assert_byte
//SEG129 test_bytes::@2
//SEG130 [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
//SEG130 [52] (byte*~) print_char_cursor#94 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
@ -3047,7 +3066,7 @@ test_bytes: {
sta assert_byte.c
//SEG135 [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1
ldx #bd
//SEG136 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@2->assert_byte#3] -- register_copy
//SEG136 [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#94 [phi:test_bytes::@2->assert_byte#3] -- register_copy
//SEG137 [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1
lda #<msg2
sta assert_byte.msg

@ -48,15 +48,16 @@
(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:5 2.230769230769231
(byte*) print_char_cursor#70 print_char_cursor zp ZP_WORD:5 3.0
(byte*) print_char_cursor#80 print_char_cursor zp ZP_WORD:5 18.0
(byte*~) print_char_cursor#86 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#92 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#87 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#93 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#94 print_char_cursor zp ZP_WORD:5 4.0
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:7 1.2500000000000002
(byte*) print_line_cursor#24 print_line_cursor zp ZP_WORD:7 24.0
@ -114,6 +115,6 @@
zp ZP_WORD:2 [ assert_sbyte::msg#5 print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 assert_byte::msg#3 print_cls::sc#2 print_cls::sc#1 ]
reg byte x [ assert_sbyte::b#5 ]
zp ZP_BYTE:4 [ assert_sbyte::c#5 assert_byte::c#3 ]
zp ZP_WORD:5 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
zp ZP_WORD:5 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#87 print_char_cursor#1 print_char_cursor#93 print_char_cursor#94 ]
zp ZP_WORD:7 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
reg byte x [ assert_byte::b#3 ]

@ -4,6 +4,7 @@
.label B = $1000
jsr main
main: {
lda #0
b2:
jsr menu
jmp b2

@ -9,27 +9,33 @@
[3] phi()
main: scope:[main] from @3
[4] phi()
to:main::@1
main::@1: scope:[main] from main main::@2
[5] (byte) a#1 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) a#12 )
to:main::@2
main::@2: scope:[main] from main main::@2
[5] phi()
[6] call menu
to:main::@2
main::@2: scope:[main] from main::@1
[6] phi()
[7] call menu
to:main::@1
menu: scope:[menu] from main::@2
[7] phi()
[8] phi()
to:menu::@2
menu::@2: scope:[menu] from menu
[8] phi()
[9] call mode
[9] phi()
[10] call mode
to:menu::@return
menu::@return: scope:[menu] from menu::@2
[10] return
[11] return
to:@return
mode: scope:[mode] from menu::@2
[11] phi()
to:mode::@2
mode::@2: scope:[mode] from mode mode::@2 mode::@4
[12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4
to:mode::@2
mode::@4: scope:[mode] from mode::@2
[13] phi()
[12] phi()
to:mode::@1
mode::@1: scope:[mode] from mode mode::@2 mode::@7
[13] (byte) a#12 ← phi( mode/(byte) a#1 mode::@7/(byte) a#5 )
to:mode::@2
mode::@2: scope:[mode] from mode::@1
[14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1
to:mode::@7
mode::@7: scope:[mode] from mode::@2
[15] (byte) a#5 ← *((const byte*) B#0)
to:mode::@1

@ -3,65 +3,93 @@ CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@2
main: scope:[main] from @3
(byte*) B#10 ← phi( @3/(byte*) B#12 )
(byte*) B#11 ← phi( @3/(byte*) B#13 )
(byte) a#20 ← phi( @3/(byte) a#19 )
to:main::@1
main::@1: scope:[main] from main main::@7
(byte*) B#9 ← phi( main/(byte*) B#10 main::@7/(byte*) B#11 )
(byte*) B#10 ← phi( main/(byte*) B#11 main::@7/(byte*) B#12 )
(byte) a#15 ← phi( main/(byte) a#20 main::@7/(byte) a#0 )
if(true) goto main::@2
to:main::@return
main::@2: scope:[main] from main::@1
(byte*) B#8 ← phi( main::@1/(byte*) B#9 )
(byte*) B#9 ← phi( main::@1/(byte*) B#10 )
(byte) a#14 ← phi( main::@1/(byte) a#15 )
call menu
to:main::@7
main::@7: scope:[main] from main::@2
(byte*) B#11 ← phi( main::@2/(byte*) B#8 )
(byte*) B#12 ← phi( main::@2/(byte*) B#9 )
(byte) a#8 ← phi( main::@2/(byte) a#3 )
(byte) a#0 ← (byte) a#8
to:main::@1
main::@return: scope:[main] from main::@1
(byte) a#9 ← phi( main::@1/(byte) a#15 )
(byte) a#1 ← (byte) a#9
return
to:@return
menu: scope:[menu] from main::@2
(byte*) B#7 ← phi( main::@2/(byte*) B#8 )
(byte*) B#8 ← phi( main::@2/(byte*) B#9 )
(byte) a#21 ← phi( main::@2/(byte) a#14 )
to:menu::@1
menu::@1: scope:[menu] from menu
(byte*) B#6 ← phi( menu/(byte*) B#7 )
(byte*) B#7 ← phi( menu/(byte*) B#8 )
(byte) a#17 ← phi( menu/(byte) a#21 )
if(true) goto menu::@2
to:menu::@return
menu::@2: scope:[menu] from menu::@1
(byte*) B#5 ← phi( menu::@1/(byte*) B#6 )
(byte*) B#6 ← phi( menu::@1/(byte*) B#7 )
(byte) a#16 ← phi( menu::@1/(byte) a#17 )
call mode
to:menu::@8
menu::@8: scope:[menu] from menu::@2
(byte) a#10 ← phi( menu::@2/(byte) a#6 )
(byte) a#2 ← (byte) a#10
to:menu::@return
menu::@return: scope:[menu] from menu::@1 menu::@8
(byte) a#11 ← phi( menu::@1/(byte) a#17 menu::@8/(byte) a#2 )
(byte) a#3 ← (byte) a#11
return
to:@return
@2: scope:[] from @begin
(byte) a#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte*) B#0 ← ((byte*)) (word/signed word/dword/signed dword) 4096
to:@3
mode: scope:[mode] from menu::@2
(byte*) B#3 ← phi( menu::@2/(byte*) B#5 )
(byte) a#22 ← phi( menu::@2/(byte) a#16 )
(byte*) B#4 ← phi( menu::@2/(byte*) B#6 )
to:mode::@1
mode::@1: scope:[mode] from mode mode::@2 mode::@4
(byte*) B#2 ← phi( mode/(byte*) B#3 mode::@2/(byte*) B#1 mode::@4/(byte*) B#4 )
mode::@1: scope:[mode] from mode mode::@4 mode::@7
(byte) a#18 ← phi( mode/(byte) a#22 mode::@4/(byte) a#23 mode::@7/(byte) a#5 )
(byte*) B#3 ← phi( mode/(byte*) B#4 mode::@4/(byte*) B#5 mode::@7/(byte*) B#2 )
if(true) goto mode::@2
to:mode::@return
mode::@2: scope:[mode] from mode::@1
(byte*) B#1 ← phi( mode::@1/(byte*) B#2 )
(byte) a#24 ← phi( mode::@1/(byte) a#18 )
(byte*) B#1 ← phi( mode::@1/(byte*) B#3 )
(bool~) mode::$0 ← *((byte*) B#1) == (byte/signed byte/word/signed word/dword/signed dword) 0
(bool~) mode::$1 ← ! (bool~) mode::$0
if((bool~) mode::$1) goto mode::@4
to:mode::@1
to:mode::@7
mode::@4: scope:[mode] from mode::@2
(byte*) B#4 ← phi( mode::@2/(byte*) B#1 )
(byte) a#23 ← phi( mode::@2/(byte) a#24 )
(byte*) B#5 ← phi( mode::@2/(byte*) B#1 )
to:mode::@1
mode::@7: scope:[mode] from mode::@2
(byte*) B#2 ← phi( mode::@2/(byte*) B#1 )
(byte) a#5 ← *((byte*) B#2)
to:mode::@1
mode::@return: scope:[mode] from mode::@1
(byte) a#12 ← phi( mode::@1/(byte) a#18 )
(byte) a#6 ← (byte) a#12
return
to:@return
@3: scope:[] from @2
(byte*) B#12 ← phi( @2/(byte*) B#0 )
(byte*) B#13 ← phi( @2/(byte*) B#0 )
(byte) a#19 ← phi( @2/(byte) a#4 )
call main
to:@4
@4: scope:[] from @3
(byte) a#13 ← phi( @3/(byte) a#1 )
(byte) a#7 ← (byte) a#13
to:@end
@end: scope:[] from @4
@ -77,6 +105,7 @@ SYMBOL TABLE SSA
(byte*) B#10
(byte*) B#11
(byte*) B#12
(byte*) B#13
(byte*) B#2
(byte*) B#3
(byte*) B#4
@ -85,6 +114,32 @@ SYMBOL TABLE SSA
(byte*) B#7
(byte*) B#8
(byte*) B#9
(byte) a
(byte) a#0
(byte) a#1
(byte) a#10
(byte) a#11
(byte) a#12
(byte) a#13
(byte) a#14
(byte) a#15
(byte) a#16
(byte) a#17
(byte) a#18
(byte) a#19
(byte) a#2
(byte) a#20
(byte) a#21
(byte) a#22
(byte) a#23
(byte) a#24
(byte) a#3
(byte) a#4
(byte) a#5
(byte) a#6
(byte) a#7
(byte) a#8
(byte) a#9
(void()) main()
(label) main::@1
(label) main::@2
@ -101,45 +156,66 @@ SYMBOL TABLE SSA
(label) mode::@1
(label) mode::@2
(label) mode::@4
(label) mode::@7
(label) mode::@return
Culled Empty Block (label) menu::@8
Culled Empty Block (label) @4
Successful SSA optimization Pass2CullEmptyBlocks
Inversing boolean not (bool~) mode::$1 ← *((byte*) B#1) != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) mode::$0 ← *((byte*) B#1) == (byte/signed byte/word/signed word/dword/signed dword) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) B#11 = (byte*) B#8 (byte*) B#9
Alias (byte*) B#5 = (byte*) B#6 (byte*) B#7
Alias (byte*) B#1 = (byte*) B#2 (byte*) B#4
Alias (byte*) B#0 = (byte*) B#12
Alias (byte) a#1 = (byte) a#14 (byte) a#15 (byte) a#9
Alias (byte*) B#10 = (byte*) B#9 (byte*) B#12
Alias (byte) a#0 = (byte) a#8
Alias (byte) a#16 = (byte) a#17 (byte) a#21
Alias (byte*) B#6 = (byte*) B#7 (byte*) B#8
Alias (byte) a#10 = (byte) a#2
Alias (byte) a#11 = (byte) a#3
Alias (byte*) B#1 = (byte*) B#3 (byte*) B#5 (byte*) B#2
Alias (byte) a#12 = (byte) a#24 (byte) a#18 (byte) a#23 (byte) a#6
Alias (byte) a#19 = (byte) a#4
Alias (byte*) B#0 = (byte*) B#13
Alias (byte) a#13 = (byte) a#7
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte*) B#11
Self Phi Eliminated (byte*) B#10
Self Phi Eliminated (byte*) B#1
Self Phi Eliminated (byte*) B#1
Self Phi Eliminated (byte) a#12
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) B#10 (byte*) B#0
Redundant Phi (byte*) B#11 (byte*) B#10
Redundant Phi (byte*) B#5 (byte*) B#11
Redundant Phi (byte*) B#3 (byte*) B#5
Redundant Phi (byte*) B#1 (byte*) B#3
Redundant Phi (byte) a#20 (byte) a#19
Redundant Phi (byte*) B#11 (byte*) B#0
Redundant Phi (byte*) B#10 (byte*) B#11
Redundant Phi (byte) a#0 (byte) a#11
Redundant Phi (byte) a#16 (byte) a#1
Redundant Phi (byte*) B#6 (byte*) B#10
Redundant Phi (byte) a#10 (byte) a#12
Redundant Phi (byte*) B#4 (byte*) B#6
Redundant Phi (byte) a#22 (byte) a#16
Redundant Phi (byte*) B#1 (byte*) B#4
Redundant Phi (byte) a#13 (byte) a#1
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) mode::$1 if(*((byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) a#19 = 0
Constant (const byte*) B#0 = ((byte*))4096
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination if(true) goto main::@2
Removing PHI-reference to removed block (menu::@1) in block menu::@return
if() condition always true - replacing block destination if(true) goto menu::@2
if() condition always true - replacing block destination if(true) goto mode::@2
Successful SSA optimization Pass2ConstantIfs
Removing unused block main::@return
Removing unused block mode::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::@7
Culled Empty Block (label) menu::@1
Culled Empty Block (label) menu::@8
Culled Empty Block (label) @2
Culled Empty Block (label) mode::@1
Culled Empty Block (label) mode::@4
Culled Empty Block (label) @4
Successful SSA optimization Pass2CullEmptyBlocks
Redundant Phi (byte) a#11 (byte) a#12
Successful SSA optimization Pass2RedundantPhiElimination
Inlining constant with var siblings (const byte) a#19
Constant inlined a#19 = (byte/signed byte/word/signed word/dword/signed dword) 0
Successful SSA optimization Pass2ConstantInlining
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
@ -147,15 +223,16 @@ Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of menu
Adding NOP phi() at start of menu::@2
Adding NOP phi() at start of mode
Adding NOP phi() at start of mode::@4
CALL GRAPH
Calls in [] to main:2
Calls in [main] to menu:6
Calls in [menu] to mode:9
Calls in [main] to menu:7
Calls in [menu] to mode:11
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Created 2 initial phi equivalence classes
Coalesced [8] a#25 ← a#12
Coalesced (already) [13] a#26 ← a#1
Coalesced [17] a#27 ← a#5
Coalesced down to 1 phi equivalence classes
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
@ -164,7 +241,6 @@ Adding NOP phi() at start of main::@2
Adding NOP phi() at start of menu
Adding NOP phi() at start of menu::@2
Adding NOP phi() at start of mode
Adding NOP phi() at start of mode::@4
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
@ -178,40 +254,53 @@ FINAL CONTROL FLOW GRAPH
[3] phi()
main: scope:[main] from @3
[4] phi()
to:main::@1
main::@1: scope:[main] from main main::@2
[5] (byte) a#1 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@2/(byte) a#12 )
to:main::@2
main::@2: scope:[main] from main main::@2
[5] phi()
[6] call menu
to:main::@2
main::@2: scope:[main] from main::@1
[6] phi()
[7] call menu
to:main::@1
menu: scope:[menu] from main::@2
[7] phi()
[8] phi()
to:menu::@2
menu::@2: scope:[menu] from menu
[8] phi()
[9] call mode
[9] phi()
[10] call mode
to:menu::@return
menu::@return: scope:[menu] from menu::@2
[10] return
[11] return
to:@return
mode: scope:[mode] from menu::@2
[11] phi()
to:mode::@2
mode::@2: scope:[mode] from mode mode::@2 mode::@4
[12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4
to:mode::@2
mode::@4: scope:[mode] from mode::@2
[13] phi()
[12] phi()
to:mode::@1
mode::@1: scope:[mode] from mode mode::@2 mode::@7
[13] (byte) a#12 ← phi( mode/(byte) a#1 mode::@7/(byte) a#5 )
to:mode::@2
mode::@2: scope:[mode] from mode::@1
[14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1
to:mode::@7
mode::@7: scope:[mode] from mode::@2
[15] (byte) a#5 ← *((const byte*) B#0)
to:mode::@1
VARIABLE REGISTER WEIGHTS
(byte*) B
(byte) a
(byte) a#1 2.6
(byte) a#12 38.0
(byte) a#5 202.0
(void()) main()
(void()) menu()
(void()) mode()
Initial phi equivalence classes
[ a#1 a#12 a#5 ]
Complete equivalence classes
[ a#1 a#12 a#5 ]
Allocated zp ZP_BYTE:2 [ a#1 a#12 a#5 ]
INITIAL ASM
//SEG0 Basic Upstart
@ -220,6 +309,7 @@ INITIAL ASM
.pc = $80d "Program"
//SEG1 Global Constants & labels
.label B = $1000
.label a = 2
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @3 [phi:@begin->@3]
@ -238,66 +328,87 @@ bend_from_b3:
bend:
//SEG9 main
main: {
//SEG10 [5] phi from main main::@2 to main::@2 [phi:main/main::@2->main::@2]
b2_from_main:
b2_from_b2:
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (byte) a#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #0
sta a
jmp b1
//SEG12 main::@1
b1:
//SEG13 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
jmp b2
//SEG11 main::@2
//SEG14 main::@2
b2:
//SEG12 [6] call menu
//SEG13 [7] phi from main::@2 to menu [phi:main::@2->menu]
//SEG15 [7] call menu
//SEG16 [8] phi from main::@2 to menu [phi:main::@2->menu]
menu_from_b2:
jsr menu
jmp b2_from_b2
//SEG17 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
b1_from_b2:
//SEG18 [5] phi (byte) a#1 = (byte) a#12 [phi:main::@2->main::@1#0] -- register_copy
jmp b1
}
//SEG14 menu
//SEG19 menu
menu: {
//SEG15 [8] phi from menu to menu::@2 [phi:menu->menu::@2]
//SEG20 [9] phi from menu to menu::@2 [phi:menu->menu::@2]
b2_from_menu:
jmp b2
//SEG16 menu::@2
//SEG21 menu::@2
b2:
//SEG17 [9] call mode
//SEG18 [11] phi from menu::@2 to mode [phi:menu::@2->mode]
//SEG22 [10] call mode
//SEG23 [12] phi from menu::@2 to mode [phi:menu::@2->mode]
mode_from_b2:
jsr mode
jmp breturn
//SEG19 menu::@return
//SEG24 menu::@return
breturn:
//SEG20 [10] return
//SEG25 [11] return
rts
}
//SEG21 mode
//SEG26 mode
mode: {
//SEG27 [13] phi from mode mode::@7 to mode::@1 [phi:mode/mode::@7->mode::@1]
b1_from_mode:
b1_from_b7:
//SEG28 [13] phi (byte) a#12 = (byte) a#1 [phi:mode/mode::@7->mode::@1#0] -- register_copy
jmp b1
//SEG29 [13] phi from mode::@2 to mode::@1 [phi:mode::@2->mode::@1]
b1_from_b2:
jmp b1
//SEG30 mode::@1
b1:
jmp b2
//SEG22 mode::@2
//SEG31 mode::@2
b2:
//SEG23 [12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 -- _deref_pbuc1_neq_0_then_la1
//SEG32 [14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1 -- _deref_pbuc1_neq_0_then_la1
lda B
cmp #0
bne b4_from_b2
jmp b2
//SEG24 [13] phi from mode::@2 to mode::@4 [phi:mode::@2->mode::@4]
b4_from_b2:
jmp b4
//SEG25 mode::@4
b4:
jmp b2
bne b1_from_b2
jmp b7
//SEG33 mode::@7
b7:
//SEG34 [15] (byte) a#5 ← *((const byte*) B#0) -- vbuz1=_deref_pbuc1
lda B
sta a
jmp b1_from_b7
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 [ ] ( main:2::menu:6::mode:9 [ ] ) always clobbers reg byte a
Statement [14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1 [ ] ( main:2::menu:7::mode:10 [ ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ a#1 a#12 a#5 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [] 242.6: zp ZP_BYTE:2 [ a#1 a#12 a#5 ]
Uplift Scope [main]
Uplift Scope [menu]
Uplift Scope [mode]
Uplift Scope []
Uplifting [main] best 11929 combination
Uplifting [menu] best 11929 combination
Uplifting [mode] best 11929 combination
Uplifting [] best 11929 combination
Uplifting [] best 18376 combination reg byte a [ a#1 a#12 a#5 ]
Uplifting [main] best 18376 combination
Uplifting [menu] best 18376 combination
Uplifting [mode] best 18376 combination
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
@ -324,86 +435,116 @@ bend_from_b3:
bend:
//SEG9 main
main: {
//SEG10 [5] phi from main main::@2 to main::@2 [phi:main/main::@2->main::@2]
b2_from_main:
b2_from_b2:
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (byte) a#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1
lda #0
jmp b1
//SEG12 main::@1
b1:
//SEG13 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
jmp b2
//SEG11 main::@2
//SEG14 main::@2
b2:
//SEG12 [6] call menu
//SEG13 [7] phi from main::@2 to menu [phi:main::@2->menu]
//SEG15 [7] call menu
//SEG16 [8] phi from main::@2 to menu [phi:main::@2->menu]
menu_from_b2:
jsr menu
jmp b2_from_b2
//SEG17 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
b1_from_b2:
//SEG18 [5] phi (byte) a#1 = (byte) a#12 [phi:main::@2->main::@1#0] -- register_copy
jmp b1
}
//SEG14 menu
//SEG19 menu
menu: {
//SEG15 [8] phi from menu to menu::@2 [phi:menu->menu::@2]
//SEG20 [9] phi from menu to menu::@2 [phi:menu->menu::@2]
b2_from_menu:
jmp b2
//SEG16 menu::@2
//SEG21 menu::@2
b2:
//SEG17 [9] call mode
//SEG18 [11] phi from menu::@2 to mode [phi:menu::@2->mode]
//SEG22 [10] call mode
//SEG23 [12] phi from menu::@2 to mode [phi:menu::@2->mode]
mode_from_b2:
jsr mode
jmp breturn
//SEG19 menu::@return
//SEG24 menu::@return
breturn:
//SEG20 [10] return
//SEG25 [11] return
rts
}
//SEG21 mode
//SEG26 mode
mode: {
//SEG27 [13] phi from mode mode::@7 to mode::@1 [phi:mode/mode::@7->mode::@1]
b1_from_mode:
b1_from_b7:
//SEG28 [13] phi (byte) a#12 = (byte) a#1 [phi:mode/mode::@7->mode::@1#0] -- register_copy
jmp b1
//SEG29 [13] phi from mode::@2 to mode::@1 [phi:mode::@2->mode::@1]
b1_from_b2:
jmp b1
//SEG30 mode::@1
b1:
jmp b2
//SEG22 mode::@2
//SEG31 mode::@2
b2:
//SEG23 [12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 -- _deref_pbuc1_neq_0_then_la1
//SEG32 [14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1 -- _deref_pbuc1_neq_0_then_la1
lda B
cmp #0
bne b4_from_b2
jmp b2
//SEG24 [13] phi from mode::@2 to mode::@4 [phi:mode::@2->mode::@4]
b4_from_b2:
jmp b4
//SEG25 mode::@4
b4:
jmp b2
bne b1_from_b2
jmp b7
//SEG33 mode::@7
b7:
//SEG34 [15] (byte) a#5 ← *((const byte*) B#0) -- vbuaa=_deref_pbuc1
lda B
jmp b1_from_b7
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b3
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b4
Removing instruction jmp b7
Succesful ASM optimization Pass5NextJumpElimination
Replacing label b2_from_b2 with b2
Replacing label b4_from_b2 with b4
Replacing label b1 with b2
Replacing label b1 with b2
Replacing label b1_from_b2 with b2
Removing instruction bbegin:
Removing instruction b3_from_bbegin:
Removing instruction main_from_b3:
Removing instruction bend_from_b3:
Removing instruction b2_from_main:
Removing instruction b2_from_b2:
Removing instruction b1:
Removing instruction b2_from_b1:
Removing instruction menu_from_b2:
Removing instruction b2_from_menu:
Removing instruction mode_from_b2:
Removing instruction b4_from_b2:
Removing instruction b1_from_mode:
Removing instruction b1_from_b2:
Removing instruction b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b3:
Removing instruction bend:
Removing instruction b1_from_main:
Removing instruction b1_from_b2:
Removing instruction b2:
Removing instruction breturn:
Removing instruction b7:
Succesful ASM optimization Pass5UnusedLabelElimination
Skipping double jump to b2 in bne b4
Skipping double jump to b2 in jmp b1_from_b7
Succesful ASM optimization Pass5DoubleJumpElimination
Removing instruction b4:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing unreachable instruction jmp b2
Succesful ASM optimization Pass5UnreachableCodeElimination
Relabelling long label b1_from_b7 to b1
Succesful ASM optimization Pass5RelabelLongLabels
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda B
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction b1:
Succesful ASM optimization Pass5RedundantLabelElimination
FINAL SYMBOL TABLE
(label) @3
@ -411,19 +552,26 @@ FINAL SYMBOL TABLE
(label) @end
(byte*) B
(const byte*) B#0 B = ((byte*))(word/signed word/dword/signed dword) 4096
(byte) a
(byte) a#1 reg byte a 2.6
(byte) a#12 reg byte a 38.0
(byte) a#5 reg byte a 202.0
(void()) main()
(label) main::@1
(label) main::@2
(void()) menu()
(label) menu::@2
(label) menu::@return
(void()) mode()
(label) mode::@1
(label) mode::@2
(label) mode::@4
(label) mode::@7
reg byte a [ a#1 a#12 a#5 ]
FINAL ASSEMBLER
Score: 11527
Score: 8874
//SEG0 Basic Upstart
.pc = $801 "Basic"
@ -441,35 +589,45 @@ Score: 11527
//SEG8 @end
//SEG9 main
main: {
//SEG10 [5] phi from main main::@2 to main::@2 [phi:main/main::@2->main::@2]
//SEG11 main::@2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
//SEG11 [5] phi (byte) a#1 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@1#0] -- vbuaa=vbuc1
lda #0
//SEG12 main::@1
//SEG13 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
//SEG14 main::@2
b2:
//SEG12 [6] call menu
//SEG13 [7] phi from main::@2 to menu [phi:main::@2->menu]
//SEG15 [7] call menu
//SEG16 [8] phi from main::@2 to menu [phi:main::@2->menu]
jsr menu
//SEG17 [5] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
//SEG18 [5] phi (byte) a#1 = (byte) a#12 [phi:main::@2->main::@1#0] -- register_copy
jmp b2
}
//SEG14 menu
//SEG19 menu
menu: {
//SEG15 [8] phi from menu to menu::@2 [phi:menu->menu::@2]
//SEG16 menu::@2
//SEG17 [9] call mode
//SEG18 [11] phi from menu::@2 to mode [phi:menu::@2->mode]
//SEG20 [9] phi from menu to menu::@2 [phi:menu->menu::@2]
//SEG21 menu::@2
//SEG22 [10] call mode
//SEG23 [12] phi from menu::@2 to mode [phi:menu::@2->mode]
jsr mode
//SEG19 menu::@return
//SEG20 [10] return
//SEG24 menu::@return
//SEG25 [11] return
rts
}
//SEG21 mode
//SEG26 mode
mode: {
//SEG22 mode::@2
//SEG27 [13] phi from mode mode::@7 to mode::@1 [phi:mode/mode::@7->mode::@1]
//SEG28 [13] phi (byte) a#12 = (byte) a#1 [phi:mode/mode::@7->mode::@1#0] -- register_copy
//SEG29 [13] phi from mode::@2 to mode::@1 [phi:mode::@2->mode::@1]
//SEG30 mode::@1
//SEG31 mode::@2
b2:
//SEG23 [12] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 -- _deref_pbuc1_neq_0_then_la1
//SEG32 [14] if(*((const byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@1 -- _deref_pbuc1_neq_0_then_la1
lda B
cmp #0
bne b2
//SEG33 mode::@7
//SEG34 [15] (byte) a#5 ← *((const byte*) B#0) -- vbuaa=_deref_pbuc1
jmp b2
//SEG24 [13] phi from mode::@2 to mode::@4 [phi:mode::@2->mode::@4]
//SEG25 mode::@4
}

@ -3,12 +3,19 @@
(label) @end
(byte*) B
(const byte*) B#0 B = ((byte*))(word/signed word/dword/signed dword) 4096
(byte) a
(byte) a#1 reg byte a 2.6
(byte) a#12 reg byte a 38.0
(byte) a#5 reg byte a 202.0
(void()) main()
(label) main::@1
(label) main::@2
(void()) menu()
(label) menu::@2
(label) menu::@return
(void()) mode()
(label) mode::@1
(label) mode::@2
(label) mode::@4
(label) mode::@7
reg byte a [ a#1 a#12 a#5 ]

@ -10,7 +10,7 @@
.const GREEN = 5
.const LIGHT_BLUE = $e
.const LIGHT_GREY = $f
.label print_screen = $400
.label print_line_cursor = $400
.label xr = $f0
.label yr = $f1
.label zr = $f2
@ -154,77 +154,77 @@ debug_print: {
.label c = 4
.label i = 5
ldx sx
lda #<print_screen+print_sbyte_pos1_row*$28+print_sbyte_pos1_col
lda #<print_line_cursor+print_sbyte_pos1_row*$28+print_sbyte_pos1_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos1_row*$28+print_sbyte_pos1_col
lda #>print_line_cursor+print_sbyte_pos1_row*$28+print_sbyte_pos1_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
lda sy
tax
lda #<print_screen+print_sbyte_pos2_row*$28+print_sbyte_pos2_col
lda #<print_line_cursor+print_sbyte_pos2_row*$28+print_sbyte_pos2_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos2_row*$28+print_sbyte_pos2_col
lda #>print_line_cursor+print_sbyte_pos2_row*$28+print_sbyte_pos2_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
lda #<print_screen+print_sbyte_pos3_row*$28+print_sbyte_pos3_col
lda #<print_line_cursor+print_sbyte_pos3_row*$28+print_sbyte_pos3_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos3_row*$28+print_sbyte_pos3_col
lda #>print_line_cursor+print_sbyte_pos3_row*$28+print_sbyte_pos3_col
sta print_sbyte_at.at+1
ldx #sz
jsr print_sbyte_at
lda rotation_matrix
tax
lda #<print_screen+print_sbyte_pos4_row*$28+print_sbyte_pos4_col
lda #<print_line_cursor+print_sbyte_pos4_row*$28+print_sbyte_pos4_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos4_row*$28+print_sbyte_pos4_col
lda #>print_line_cursor+print_sbyte_pos4_row*$28+print_sbyte_pos4_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
ldx rotation_matrix+1
lda #<print_screen+print_sbyte_pos5_row*$28+print_sbyte_pos5_col
lda #<print_line_cursor+print_sbyte_pos5_row*$28+print_sbyte_pos5_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos5_row*$28+print_sbyte_pos5_col
lda #>print_line_cursor+print_sbyte_pos5_row*$28+print_sbyte_pos5_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
ldx rotation_matrix+2
lda #<print_screen+print_sbyte_pos6_row*$28+print_sbyte_pos6_col
lda #<print_line_cursor+print_sbyte_pos6_row*$28+print_sbyte_pos6_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos6_row*$28+print_sbyte_pos6_col
lda #>print_line_cursor+print_sbyte_pos6_row*$28+print_sbyte_pos6_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
ldx rotation_matrix+3
lda #<print_screen+print_sbyte_pos7_row*$28+print_sbyte_pos7_col
lda #<print_line_cursor+print_sbyte_pos7_row*$28+print_sbyte_pos7_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos7_row*$28+print_sbyte_pos7_col
lda #>print_line_cursor+print_sbyte_pos7_row*$28+print_sbyte_pos7_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
ldx rotation_matrix+4
lda #<print_screen+print_sbyte_pos8_row*$28+print_sbyte_pos8_col
lda #<print_line_cursor+print_sbyte_pos8_row*$28+print_sbyte_pos8_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos8_row*$28+print_sbyte_pos8_col
lda #>print_line_cursor+print_sbyte_pos8_row*$28+print_sbyte_pos8_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
ldx rotation_matrix+5
lda #<print_screen+print_sbyte_pos9_row*$28+print_sbyte_pos9_col
lda #<print_line_cursor+print_sbyte_pos9_row*$28+print_sbyte_pos9_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos9_row*$28+print_sbyte_pos9_col
lda #>print_line_cursor+print_sbyte_pos9_row*$28+print_sbyte_pos9_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
ldx rotation_matrix+6
lda #<print_screen+print_sbyte_pos10_row*$28+print_sbyte_pos10_col
lda #<print_line_cursor+print_sbyte_pos10_row*$28+print_sbyte_pos10_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos10_row*$28+print_sbyte_pos10_col
lda #>print_line_cursor+print_sbyte_pos10_row*$28+print_sbyte_pos10_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
ldx rotation_matrix+7
lda #<print_screen+print_sbyte_pos11_row*$28+print_sbyte_pos11_col
lda #<print_line_cursor+print_sbyte_pos11_row*$28+print_sbyte_pos11_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos11_row*$28+print_sbyte_pos11_col
lda #>print_line_cursor+print_sbyte_pos11_row*$28+print_sbyte_pos11_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
ldx rotation_matrix+8
lda #<print_screen+print_sbyte_pos12_row*$28+print_sbyte_pos12_col
lda #<print_line_cursor+print_sbyte_pos12_row*$28+print_sbyte_pos12_col
sta print_sbyte_at.at
lda #>print_screen+print_sbyte_pos12_row*$28+print_sbyte_pos12_col
lda #>print_line_cursor+print_sbyte_pos12_row*$28+print_sbyte_pos12_col
sta print_sbyte_at.at+1
jsr print_sbyte_at
lda #0
@ -1025,9 +1025,9 @@ print_str_at: {
}
print_cls: {
.label sc = 6
lda #<print_screen
lda #<print_line_cursor
sta sc
lda #>print_screen
lda #>print_line_cursor
sta sc+1
b1:
lda #' '
@ -1038,10 +1038,10 @@ print_cls: {
inc sc+1
!:
lda sc+1
cmp #>print_screen+$3e8
cmp #>print_line_cursor+$3e8
bne b1
lda sc
cmp #<print_screen+$3e8
cmp #<print_line_cursor+$3e8
bne b1
rts
}

@ -1,7 +1,7 @@
@begin: scope:[] from
[0] phi()
to:@32
@32: scope:[] from @begin
to:@33
@33: scope:[] from @begin
kickasm(location (const byte*) mulf_sqr1#0) {{ .for(var i=0;i<$200;i++) {
.if(i<=159) { .byte round((i*i)/256) }
.if(i>159 && i<=351 ) { .byte round(((i-256)*(i-256))/256) }
@ -94,9 +94,9 @@
}}
[11] call main
to:@end
@end: scope:[] from @32
@end: scope:[] from @33
[12] phi()
main: scope:[main] from @32
main: scope:[main] from @33
asm { sei }
[14] call sprites_init
to:main::@1
@ -292,7 +292,7 @@ debug_print::@return: scope:[debug_print] from debug_print::@32
[113] return
to:@return
print_sbyte_at: scope:[print_sbyte_at] from debug_print::@1 debug_print::@27 debug_print::@28 debug_print::@29 debug_print::@30 debug_print::@31 debug_print::print_sbyte_pos1 debug_print::print_sbyte_pos10 debug_print::print_sbyte_pos11 debug_print::print_sbyte_pos12 debug_print::print_sbyte_pos2 debug_print::print_sbyte_pos3 debug_print::print_sbyte_pos4 debug_print::print_sbyte_pos5 debug_print::print_sbyte_pos6 debug_print::print_sbyte_pos7 debug_print::print_sbyte_pos8 debug_print::print_sbyte_pos9 debug_print_init::@1 debug_print_init::@18 debug_print_init::@19
[114] (byte*) print_sbyte_at::at#21 ← phi( debug_print::@1/(byte*) print_sbyte_at::at#15 debug_print::@27/(byte*) print_sbyte_at::at#16 debug_print::@28/(byte*) print_sbyte_at::at#17 debug_print::@29/(byte*) print_sbyte_at::at#18 debug_print::@30/(byte*) print_sbyte_at::at#19 debug_print::@31/(byte*) print_sbyte_at::at#20 debug_print::print_sbyte_pos1/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos1_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos1_col#0 debug_print::print_sbyte_pos10/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos10_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos10_col#0 debug_print::print_sbyte_pos11/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos11_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos11_col#0 debug_print::print_sbyte_pos12/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos12_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos12_col#0 debug_print::print_sbyte_pos2/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos2_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos2_col#0 debug_print::print_sbyte_pos3/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos3_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos3_col#0 debug_print::print_sbyte_pos4/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos4_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos4_col#0 debug_print::print_sbyte_pos5/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos5_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos5_col#0 debug_print::print_sbyte_pos6/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos6_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos6_col#0 debug_print::print_sbyte_pos7/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos7_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos7_col#0 debug_print::print_sbyte_pos8/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos8_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos8_col#0 debug_print::print_sbyte_pos9/(const byte*) print_screen#0+(const byte) debug_print::print_sbyte_pos9_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos9_col#0 debug_print_init::@1/(byte*) print_sbyte_at::at#0 debug_print_init::@18/(byte*) print_sbyte_at::at#1 debug_print_init::@19/(byte*) print_sbyte_at::at#2 )
[114] (byte*) print_sbyte_at::at#21 ← phi( debug_print::@1/(byte*) print_sbyte_at::at#15 debug_print::@27/(byte*) print_sbyte_at::at#16 debug_print::@28/(byte*) print_sbyte_at::at#17 debug_print::@29/(byte*) print_sbyte_at::at#18 debug_print::@30/(byte*) print_sbyte_at::at#19 debug_print::@31/(byte*) print_sbyte_at::at#20 debug_print::print_sbyte_pos1/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos1_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos1_col#0 debug_print::print_sbyte_pos10/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos10_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos10_col#0 debug_print::print_sbyte_pos11/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos11_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos11_col#0 debug_print::print_sbyte_pos12/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos12_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos12_col#0 debug_print::print_sbyte_pos2/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos2_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos2_col#0 debug_print::print_sbyte_pos3/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos3_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos3_col#0 debug_print::print_sbyte_pos4/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos4_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos4_col#0 debug_print::print_sbyte_pos5/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos5_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos5_col#0 debug_print::print_sbyte_pos6/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos6_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos6_col#0 debug_print::print_sbyte_pos7/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos7_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos7_col#0 debug_print::print_sbyte_pos8/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos8_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos8_col#0 debug_print::print_sbyte_pos9/(const byte*) print_line_cursor#0+(const byte) debug_print::print_sbyte_pos9_row#0*(byte/signed byte/word/signed word/dword/signed dword) 40+(const byte) debug_print::print_sbyte_pos9_col#0 debug_print_init::@1/(byte*) print_sbyte_at::at#0 debug_print_init::@18/(byte*) print_sbyte_at::at#1 debug_print_init::@19/(byte*) print_sbyte_at::at#2 )
[114] (signed byte) print_sbyte_at::b#22 ← phi( debug_print::@1/(signed byte) print_sbyte_at::b#16 debug_print::@27/(signed byte) print_sbyte_at::b#17 debug_print::@28/(signed byte) print_sbyte_at::b#18 debug_print::@29/(signed byte) print_sbyte_at::b#19 debug_print::@30/(signed byte) print_sbyte_at::b#20 debug_print::@31/(signed byte) print_sbyte_at::b#21 debug_print::print_sbyte_pos1/(signed byte) print_sbyte_at::b#4 debug_print::print_sbyte_pos10/(signed byte) print_sbyte_at::b#13 debug_print::print_sbyte_pos11/(signed byte) print_sbyte_at::b#14 debug_print::print_sbyte_pos12/(signed byte) print_sbyte_at::b#15 debug_print::print_sbyte_pos2/(signed byte) print_sbyte_at::b#5 debug_print::print_sbyte_pos3/(const signed byte) sz#0 debug_print::print_sbyte_pos4/(signed byte) print_sbyte_at::b#7 debug_print::print_sbyte_pos5/(signed byte) print_sbyte_at::b#8 debug_print::print_sbyte_pos6/(signed byte) print_sbyte_at::b#9 debug_print::print_sbyte_pos7/(signed byte) print_sbyte_at::b#10 debug_print::print_sbyte_pos8/(signed byte) print_sbyte_at::b#11 debug_print::print_sbyte_pos9/(signed byte) print_sbyte_at::b#12 debug_print_init::@1/(signed byte) print_sbyte_at::b#1 debug_print_init::@18/(signed byte) print_sbyte_at::b#2 debug_print_init::@19/(signed byte) print_sbyte_at::b#3 )
[115] if((signed byte) print_sbyte_at::b#22<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte_at::@1
to:print_sbyte_at::@3
@ -533,10 +533,10 @@ print_cls: scope:[print_cls] from debug_print_init
[267] phi()
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[268] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_screen#0 print_cls::@1/(byte*) print_cls::sc#1 )
[268] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_line_cursor#0 print_cls::@1/(byte*) print_cls::sc#1 )
[269] *((byte*) print_cls::sc#2) ← (byte) ' '
[270] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[271] if((byte*) print_cls::sc#1!=(const byte*) print_screen#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
[271] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[272] return

File diff suppressed because it is too large Load Diff

@ -1,22 +1,76 @@
(label) @32
(label) @33
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(signed byte*) COSH
(const signed byte*) COSH#0 COSH = (const signed byte*) SINH#0+(byte/signed byte/word/signed word/dword/signed dword) 64
(byte*) COSH_HI
(byte*) COSH_LO
(signed byte*) COSQ
(const signed byte*) COSQ#0 COSQ = (const signed byte*) SINQ#0+(byte/signed byte/word/signed word/dword/signed dword) 64
(byte*) COSQ_HI
(byte*) COSQ_LO
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(const byte) LIGHT_BLUE#0 LIGHT_BLUE = (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(const byte) LIGHT_GREY#0 LIGHT_GREY = (byte/signed byte/word/signed word/dword/signed dword) 15
(byte) ORANGE
(signed byte*) PERSP_Z
(const signed byte*) PERSP_Z#0 PERSP_Z = ((signed byte*))(word/signed word/dword/signed dword) 10240
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(signed byte*) SINH
@ -37,10 +91,30 @@
(const byte*) SPRITES_COLS#0 SPRITES_COLS = ((byte*))(word/dword/signed dword) 53287
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = ((byte*))(word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) 53249
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) anim()
(byte/word/signed word/dword/signed dword~) anim::$10 reg byte a 202.0
(byte/word/signed word/dword/signed dword~) anim::$8 reg byte a 202.0
@ -355,6 +429,7 @@
(byte) print_char_at::ch#2 ch zp ZP_BYTE:8 2.0
(byte) print_char_at::ch#3 ch zp ZP_BYTE:8 4.0
(byte) print_char_at::ch#4 ch zp ZP_BYTE:8 6.0
(byte*) print_char_cursor
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
@ -363,6 +438,8 @@
(byte*) print_cls::sc#2 sc zp ZP_WORD:6 16.5
(byte[]) print_hextab
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor
(const byte*) print_line_cursor#0 print_line_cursor = ((byte*))(word/signed word/dword/signed dword) 1024
(void()) print_sbyte_at((signed byte) print_sbyte_at::b , (byte*) print_sbyte_at::at)
(label) print_sbyte_at::@1
(label) print_sbyte_at::@2
@ -405,7 +482,6 @@
(signed byte) print_sbyte_at::b#8 reg byte x 4.0
(signed byte) print_sbyte_at::b#9 reg byte x 4.0
(byte*) print_screen
(const byte*) print_screen#0 print_screen = ((byte*))(word/signed word/dword/signed dword) 1024
(void()) print_str_at((byte*) print_str_at::str , (byte*) print_str_at::at)
(label) print_str_at::@1
(label) print_str_at::@2

@ -1,7 +1,7 @@
@begin: scope:[] from
[0] phi()
to:@26
@26: scope:[] from @begin
to:@27
@27: scope:[] from @begin
kickasm(location (const signed byte*) PERSP_Z#0) {{ {
.var d = 256.0
.var z0 = 5.0
@ -16,9 +16,9 @@
}}
[2] call main
to:@end
@end: scope:[] from @26
@end: scope:[] from @27
[3] phi()
main: scope:[main] from @26
main: scope:[main] from @27
asm { sei }
[5] call mulf_init
to:main::@1

@ -4,12 +4,91 @@ Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBa
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@3
@3: scope:[] from @begin
(byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
(byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49
(byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54
(byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55
(byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
(word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) 1016
(byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248
(byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249
(byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264
(byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
(byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) 53271
(byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) 53275
(byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) 53276
(byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
(byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) 53282
(byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) 53283
(byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) 53284
(byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) 53285
(byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) 53286
(byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
(byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) 128
(byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
(byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
(byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte*) D016#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) 53267
(byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) 53268
(byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) 53273
(byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53274
(byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
(byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320
(byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321
(byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56322
(byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56323
(byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56333
(byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 127
(byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576
(byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56577
(byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578
(byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56579
(byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56589
(void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) 788
(void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) 65534
(byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
(byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
(byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
(byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
(byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13
(byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15
to:@4
@4: scope:[] from @begin
(byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) print_line_cursor#0 ← (byte*) print_screen#0
(byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
to:@15
to:@16
print_str: scope:[print_str] from do_perspective do_perspective::@11 do_perspective::@2 do_perspective::@4 do_perspective::@6 do_perspective::@9
(byte*) print_char_cursor#74 ← phi( do_perspective/(byte*) print_char_cursor#71 do_perspective::@11/(byte*) print_char_cursor#28 do_perspective::@2/(byte*) print_char_cursor#20 do_perspective::@4/(byte*) print_char_cursor#22 do_perspective::@6/(byte*) print_char_cursor#24 do_perspective::@9/(byte*) print_char_cursor#26 )
(byte*) print_str::str#9 ← phi( do_perspective/(byte*) print_str::str#1 do_perspective::@11/(byte*) print_str::str#6 do_perspective::@2/(byte*) print_str::str#2 do_perspective::@4/(byte*) print_str::str#3 do_perspective::@6/(byte*) print_str::str#4 do_perspective::@9/(byte*) print_str::str#5 )
@ -101,12 +180,12 @@ print_sbyte::@return: scope:[print_sbyte] from print_sbyte::@7
(byte*) print_char_cursor#8 ← (byte*) print_char_cursor#40
return
to:@return
@15: scope:[] from @3
(byte*) print_screen#9 ← phi( @3/(byte*) print_screen#0 )
(byte*) print_char_cursor#79 ← phi( @3/(byte*) print_char_cursor#0 )
(byte*) print_line_cursor#30 ← phi( @3/(byte*) print_line_cursor#0 )
@16: scope:[] from @4
(byte*) print_screen#9 ← phi( @4/(byte*) print_screen#0 )
(byte*) print_char_cursor#79 ← phi( @4/(byte*) print_char_cursor#0 )
(byte*) print_line_cursor#30 ← phi( @4/(byte*) print_line_cursor#0 )
(byte[]) print_hextab#0 ← (const string) $0
to:@22
to:@23
print_byte: scope:[print_byte] from do_perspective::@10 do_perspective::@8 print_sbyte::@2
(byte*) print_char_cursor#69 ← phi( do_perspective::@10/(byte*) print_char_cursor#27 do_perspective::@8/(byte*) print_char_cursor#72 print_sbyte::@2/(byte*) print_char_cursor#68 )
(byte) print_byte::b#3 ← phi( do_perspective::@10/(byte) print_byte::b#2 do_perspective::@8/(byte) print_byte::b#1 print_sbyte::@2/(byte) print_byte::b#0 )
@ -167,25 +246,25 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) print_char_cursor#15 ← (byte*) print_char_cursor#46
return
to:@return
@22: scope:[] from @15
(byte*) print_screen#8 ← phi( @15/(byte*) print_screen#9 )
(byte*) print_char_cursor#78 ← phi( @15/(byte*) print_char_cursor#79 )
(byte*) print_line_cursor#29 ← phi( @15/(byte*) print_line_cursor#30 )
@23: scope:[] from @16
(byte*) print_screen#8 ← phi( @16/(byte*) print_screen#9 )
(byte*) print_char_cursor#78 ← phi( @16/(byte*) print_char_cursor#79 )
(byte*) print_line_cursor#29 ← phi( @16/(byte*) print_line_cursor#30 )
(signed byte*) xr#0 ← ((signed byte*)) (byte/word/signed word/dword/signed dword) 240
(signed byte*) yr#0 ← ((signed byte*)) (byte/word/signed word/dword/signed dword) 241
(signed byte*) zr#0 ← ((signed byte*)) (byte/word/signed word/dword/signed dword) 242
(word*) psp1#0 ← ((word*)) (byte/word/signed word/dword/signed dword) 243
(word*) psp2#0 ← ((word*)) (byte/word/signed word/dword/signed dword) 245
to:@25
main: scope:[main] from @26
(signed byte*) zr#12 ← phi( @26/(signed byte*) zr#13 )
(signed byte*) yr#15 ← phi( @26/(signed byte*) yr#16 )
(signed byte*) xr#13 ← phi( @26/(signed byte*) xr#14 )
(byte*) print_char_cursor#76 ← phi( @26/(byte*) print_char_cursor#73 )
(byte*) print_line_cursor#25 ← phi( @26/(byte*) print_line_cursor#24 )
(byte*) print_screen#5 ← phi( @26/(byte*) print_screen#6 )
(word*) psp2#2 ← phi( @26/(word*) psp2#3 )
(word*) psp1#2 ← phi( @26/(word*) psp1#3 )
to:@26
main: scope:[main] from @27
(signed byte*) zr#12 ← phi( @27/(signed byte*) zr#13 )
(signed byte*) yr#15 ← phi( @27/(signed byte*) yr#16 )
(signed byte*) xr#13 ← phi( @27/(signed byte*) xr#14 )
(byte*) print_char_cursor#76 ← phi( @27/(byte*) print_char_cursor#73 )
(byte*) print_line_cursor#25 ← phi( @27/(byte*) print_line_cursor#24 )
(byte*) print_screen#5 ← phi( @27/(byte*) print_screen#6 )
(word*) psp2#2 ← phi( @27/(word*) psp2#3 )
(word*) psp1#2 ← phi( @27/(word*) psp1#3 )
asm { sei }
call mulf_init
to:main::@1
@ -403,18 +482,18 @@ perspective: scope:[perspective] from do_perspective::@7
perspective::@return: scope:[perspective] from perspective
return
to:@return
@25: scope:[] from @22
(signed byte*) zr#14 ← phi( @22/(signed byte*) zr#0 )
(signed byte*) yr#17 ← phi( @22/(signed byte*) yr#0 )
(signed byte*) xr#15 ← phi( @22/(signed byte*) xr#0 )
(byte*) print_screen#7 ← phi( @22/(byte*) print_screen#8 )
(word*) psp2#4 ← phi( @22/(word*) psp2#0 )
(word*) psp1#4 ← phi( @22/(word*) psp1#0 )
(byte*) print_char_cursor#77 ← phi( @22/(byte*) print_char_cursor#78 )
(byte*) print_line_cursor#27 ← phi( @22/(byte*) print_line_cursor#29 )
@26: scope:[] from @23
(signed byte*) zr#14 ← phi( @23/(signed byte*) zr#0 )
(signed byte*) yr#17 ← phi( @23/(signed byte*) yr#0 )
(signed byte*) xr#15 ← phi( @23/(signed byte*) xr#0 )
(byte*) print_screen#7 ← phi( @23/(byte*) print_screen#8 )
(word*) psp2#4 ← phi( @23/(word*) psp2#0 )
(word*) psp1#4 ← phi( @23/(word*) psp1#0 )
(byte*) print_char_cursor#77 ← phi( @23/(byte*) print_char_cursor#78 )
(byte*) print_line_cursor#27 ← phi( @23/(byte*) print_line_cursor#29 )
(byte[512]) mulf_sqr1#0 ← { fill( 512, 0) }
(byte[512]) mulf_sqr2#0 ← { fill( 512, 0) }
to:@26
to:@27
mulf_init: scope:[mulf_init] from main
(signed word) mulf_init::sqr#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(signed word) mulf_init::add#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
@ -453,15 +532,15 @@ mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@1
mulf_init::@return: scope:[mulf_init] from mulf_init::@1
return
to:@return
@26: scope:[] from @25
(signed byte*) zr#13 ← phi( @25/(signed byte*) zr#14 )
(signed byte*) yr#16 ← phi( @25/(signed byte*) yr#17 )
(signed byte*) xr#14 ← phi( @25/(signed byte*) xr#15 )
(byte*) print_screen#6 ← phi( @25/(byte*) print_screen#7 )
(word*) psp2#3 ← phi( @25/(word*) psp2#4 )
(word*) psp1#3 ← phi( @25/(word*) psp1#4 )
(byte*) print_char_cursor#73 ← phi( @25/(byte*) print_char_cursor#77 )
(byte*) print_line_cursor#24 ← phi( @25/(byte*) print_line_cursor#27 )
@27: scope:[] from @26
(signed byte*) zr#13 ← phi( @26/(signed byte*) zr#14 )
(signed byte*) yr#16 ← phi( @26/(signed byte*) yr#17 )
(signed byte*) xr#14 ← phi( @26/(signed byte*) xr#15 )
(byte*) print_screen#6 ← phi( @26/(byte*) print_screen#7 )
(word*) psp2#3 ← phi( @26/(word*) psp2#4 )
(word*) psp1#3 ← phi( @26/(word*) psp1#4 )
(byte*) print_char_cursor#73 ← phi( @26/(byte*) print_char_cursor#77 )
(byte*) print_line_cursor#24 ← phi( @26/(byte*) print_line_cursor#27 )
(signed byte*) PERSP_Z#0 ← ((signed byte*)) (word/signed word/dword/signed dword) 9216
kickasm(location (signed byte*) PERSP_Z#0) {{ {
.var d = 256.0
@ -476,27 +555,185 @@ mulf_init::@return: scope:[mulf_init] from mulf_init::@1
}
}}
call main
to:@27
@27: scope:[] from @26
(byte*) print_char_cursor#63 ← phi( @26/(byte*) print_char_cursor#18 )
(byte*) print_line_cursor#20 ← phi( @26/(byte*) print_line_cursor#7 )
to:@28
@28: scope:[] from @27
(byte*) print_char_cursor#63 ← phi( @27/(byte*) print_char_cursor#18 )
(byte*) print_line_cursor#20 ← phi( @27/(byte*) print_line_cursor#7 )
(byte*) print_line_cursor#10 ← (byte*) print_line_cursor#20
(byte*) print_char_cursor#32 ← (byte*) print_char_cursor#63
to:@end
@end: scope:[] from @27
@end: scope:[] from @28
SYMBOL TABLE SSA
(const string) $0 = (string) "0123456789abcdef"
(label) @15
(label) @22
(label) @25
(label) @16
(label) @23
(label) @26
(label) @27
(label) @3
(label) @28
(label) @4
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BROWN
(byte) BROWN#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_A_DDR#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA1_PORT_B_DDR
(byte*) CIA1_PORT_B_DDR#0
(byte*) CIA2_INTERRUPT
(byte*) CIA2_INTERRUPT#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B#0
(byte*) CIA2_PORT_B_DDR
(byte*) CIA2_PORT_B_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D016
(byte*) D016#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_BG#0
(byte) IRQ_COLLISION_SPRITE
(byte) IRQ_COLLISION_SPRITE#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_LIGHTPEN
(byte) IRQ_LIGHTPEN#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(void()**) KERNEL_IRQ
(void()**) KERNEL_IRQ#0
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_X#0
(byte*) LIGHTPEN_Y
(byte*) LIGHTPEN_Y#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte) LIGHT_GREY
(byte) LIGHT_GREY#0
(byte) ORANGE
(byte) ORANGE#0
(signed byte*) PERSP_Z
(signed byte*) PERSP_Z#0
(byte) PINK
(byte) PINK#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte) PROCPORT_BASIC_KERNEL_IO
(byte) PROCPORT_BASIC_KERNEL_IO#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_KERNEL_IO#0
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_ALL#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(byte*) SPRITES_COLS
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_MC1
(byte*) SPRITES_MC1#0
(byte*) SPRITES_MC2
(byte*) SPRITES_MC2#0
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PRIORITY#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte) VIC_BMM
(byte) VIC_BMM#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte*) VIC_CONTROL2
(byte*) VIC_CONTROL2#0
(byte) VIC_CSEL
(byte) VIC_CSEL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_MCM
(byte) VIC_MCM#0
(byte*) VIC_MEMORY
(byte*) VIC_MEMORY#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) VIC_RST8
(byte) VIC_RST8#0
(byte) WHITE
(byte) WHITE#0
(byte) YELLOW
(byte) YELLOW#0
(void()) do_perspective((signed byte) do_perspective::x , (signed byte) do_perspective::y , (signed byte) do_perspective::z)
(byte~) do_perspective::$11
(byte~) do_perspective::$8
@ -1001,6 +1238,85 @@ Simple Condition (bool~) print_sbyte::$0 if((signed byte) print_sbyte::b#4<(byte
Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1
Simple Condition (bool~) mulf_init::$11 if((byte) mulf_init::i#1!=rangelast(0,128)) goto mulf_init::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte) PROCPORT_RAM_ALL#0 = 48
Constant (const byte) PROCPORT_RAM_IO#0 = 53
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 49
Constant (const byte) PROCPORT_KERNEL_IO#0 = 54
Constant (const byte) PROCPORT_BASIC_KERNEL_IO#0 = 55
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const word) SPRITE_PTRS#0 = 1016
Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248
Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249
Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = ((byte*))53271
Constant (const byte*) SPRITES_PRIORITY#0 = ((byte*))53275
Constant (const byte*) SPRITES_MC#0 = ((byte*))53276
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte*) BGCOL1#0 = ((byte*))53281
Constant (const byte*) BGCOL2#0 = ((byte*))53282
Constant (const byte*) BGCOL3#0 = ((byte*))53283
Constant (const byte*) BGCOL4#0 = ((byte*))53284
Constant (const byte*) SPRITES_MC1#0 = ((byte*))53285
Constant (const byte*) SPRITES_MC2#0 = ((byte*))53286
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265
Constant (const byte*) D011#0 = ((byte*))53265
Constant (const byte) VIC_RST8#0 = 128
Constant (const byte) VIC_ECM#0 = 64
Constant (const byte) VIC_BMM#0 = 32
Constant (const byte) VIC_DEN#0 = 16
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) VIC_CONTROL2#0 = ((byte*))53270
Constant (const byte*) D016#0 = ((byte*))53270
Constant (const byte) VIC_MCM#0 = 16
Constant (const byte) VIC_CSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))53272
Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272
Constant (const byte*) LIGHTPEN_X#0 = ((byte*))53267
Constant (const byte*) LIGHTPEN_Y#0 = ((byte*))53268
Constant (const byte*) IRQ_STATUS#0 = ((byte*))53273
Constant (const byte*) IRQ_ENABLE#0 = ((byte*))53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte) IRQ_COLLISION_BG#0 = 2
Constant (const byte) IRQ_COLLISION_SPRITE#0 = 4
Constant (const byte) IRQ_LIGHTPEN#0 = 8
Constant (const byte*) COLS#0 = ((byte*))55296
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321
Constant (const byte*) CIA1_PORT_A_DDR#0 = ((byte*))56322
Constant (const byte*) CIA1_PORT_B_DDR#0 = ((byte*))56323
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576
Constant (const byte*) CIA2_PORT_B#0 = ((byte*))56577
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578
Constant (const byte*) CIA2_PORT_B_DDR#0 = ((byte*))56579
Constant (const byte*) CIA2_INTERRUPT#0 = ((byte*))56589
Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534
Constant (const byte) BLACK#0 = 0
Constant (const byte) WHITE#0 = 1
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) YELLOW#0 = 7
Constant (const byte) ORANGE#0 = 8
Constant (const byte) BROWN#0 = 9
Constant (const byte) PINK#0 = 10
Constant (const byte) DARK_GREY#0 = 11
Constant (const byte) GREY#0 = 12
Constant (const byte) LIGHT_GREEN#0 = 13
Constant (const byte) LIGHT_BLUE#0 = 14
Constant (const byte) LIGHT_GREY#0 = 15
Constant (const byte*) print_line_cursor#0 = ((byte*))1024
Constant (const byte) print_char::ch#0 = '-'
Constant (const byte) print_char::ch#1 = ' '
@ -1046,24 +1362,25 @@ Consolidated array index constant in assignment *(mulf_init::$6+1 + mulf_init::$
Successful SSA optimization Pass2ConstantAdditionElimination
Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) mulf_init::$5 ← (byte) mulf_init::i#2
Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) mulf_init::$7 ← (byte) mulf_init::i#2
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte) print_byte::b#0 ← ((byte)) (signed byte) print_sbyte::b#6
Eliminating Noop Cast (byte) print_byte::b#1 ← ((byte)) *((const signed byte*) xr#0)
Eliminating Noop Cast (byte) print_byte::b#2 ← ((byte)) *((const signed byte*) yr#0)
Successful SSA optimization Pass2NopCastElimination
Resolved ranged next value mulf_init::i#1 ← ++ mulf_init::i#2 to ++
Resolved ranged comparison value if(mulf_init::i#1!=rangelast(0,128)) goto mulf_init::@1 to (byte/word/signed word/dword/signed dword) 129
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_sbyte::@6
Culled Empty Block (label) print_sbyte::@7
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) print_byte::@2
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @22
Culled Empty Block (label) @23
Culled Empty Block (label) main::@3
Culled Empty Block (label) do_perspective::@13
Culled Empty Block (label) @25
Culled Empty Block (label) @27
Culled Empty Block (label) @26
Culled Empty Block (label) @28
Successful SSA optimization Pass2CullEmptyBlocks
Alias (byte) mulf_init::i#2 = (byte~) mulf_init::$5 (byte~) mulf_init::$7
Successful SSA optimization Pass2AliasElimination
@ -1186,8 +1503,8 @@ Adding NOP phi() at start of mulf_init
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@26
@26: scope:[] from @begin
to:@27
@27: scope:[] from @begin
kickasm(location (const signed byte*) PERSP_Z#0) {{ {
.var d = 256.0
.var z0 = 5.0
@ -1202,9 +1519,9 @@ FINAL CONTROL FLOW GRAPH
}}
[2] call main
to:@end
@end: scope:[] from @26
@end: scope:[] from @27
[3] phi()
main: scope:[main] from @26
main: scope:[main] from @27
asm { sei }
[5] call mulf_init
to:main::@1
@ -1402,7 +1719,86 @@ mulf_init::@return: scope:[mulf_init] from mulf_init::@1
VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(signed byte*) PERSP_Z
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(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
@ -1546,14 +1942,14 @@ INITIAL ASM
.label print_line_cursor = 2
//SEG2 @begin
bbegin:
jmp b26
//SEG3 @26
b26:
jmp b27
//SEG3 @27
b27:
//SEG4 kickasm(location (const signed byte*) PERSP_Z#0) {{ { .var d = 256.0 .var z0 = 5.0 .for(var z=0;z<$100;z++) { .if(z>127) { .byte round(d / (z0 - ((z - 256) / 64.0))); } else { .byte round(d / (z0 - (z / 64.0))); } } } }}
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @26 to @end [phi:@26->@end]
bend_from_b26:
//SEG6 [3] phi from @27 to @end [phi:@27->@end]
bend_from_b27:
jmp bend
//SEG7 @end
bend:
@ -2335,14 +2731,14 @@ ASSEMBLER BEFORE OPTIMIZATION
.label print_line_cursor = 2
//SEG2 @begin
bbegin:
jmp b26
//SEG3 @26
b26:
jmp b27
//SEG3 @27
b27:
//SEG4 kickasm(location (const signed byte*) PERSP_Z#0) {{ { .var d = 256.0 .var z0 = 5.0 .for(var z=0;z<$100;z++) { .if(z>127) { .byte round(d / (z0 - ((z - 256) / 64.0))); } else { .byte round(d / (z0 - (z / 64.0))); } } } }}
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @26 to @end [phi:@26->@end]
bend_from_b26:
//SEG6 [3] phi from @27 to @end [phi:@27->@end]
bend_from_b27:
jmp bend
//SEG7 @end
bend:
@ -2958,7 +3354,7 @@ mulf_init: {
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b26
Removing instruction jmp b27
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
@ -3013,7 +3409,7 @@ Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction bend_from_b26:
Removing instruction bend_from_b27:
Removing instruction b2_from_b1:
Removing instruction do_perspective_from_b2:
Removing instruction b1_from_do_perspective:
@ -3047,7 +3443,7 @@ Removing instruction print_char_from_b1:
Removing instruction b1_from_b1:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b26:
Removing instruction b27:
Removing instruction bend:
Removing instruction mulf_init_from_main:
Removing instruction b1:
@ -3094,11 +3490,90 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @26
(label) @27
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(signed byte*) PERSP_Z
(const signed byte*) PERSP_Z#0 PERSP_Z = ((signed byte*))(word/signed word/dword/signed dword) 9216
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) do_perspective((signed byte) do_perspective::x , (signed byte) do_perspective::y , (signed byte) do_perspective::z)
(label) do_perspective::@1
(label) do_perspective::@10
@ -3255,11 +3730,11 @@ Score: 3787
.label print_char_cursor = 4
.label print_line_cursor = 2
//SEG2 @begin
//SEG3 @26
//SEG3 @27
//SEG4 kickasm(location (const signed byte*) PERSP_Z#0) {{ { .var d = 256.0 .var z0 = 5.0 .for(var z=0;z<$100;z++) { .if(z>127) { .byte round(d / (z0 - ((z - 256) / 64.0))); } else { .byte round(d / (z0 - (z / 64.0))); } } } }}
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @26 to @end [phi:@26->@end]
//SEG6 [3] phi from @27 to @end [phi:@27->@end]
//SEG7 @end
//SEG8 main
main: {

@ -1,8 +1,87 @@
(label) @26
(label) @27
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(signed byte*) PERSP_Z
(const signed byte*) PERSP_Z#0 PERSP_Z = ((signed byte*))(word/signed word/dword/signed dword) 9216
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) do_perspective((signed byte) do_perspective::x , (signed byte) do_perspective::y , (signed byte) do_perspective::z)
(label) do_perspective::@1
(label) do_perspective::@10

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@14
@14: scope:[] from @begin
to:@15
@15: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @14
@end: scope:[] from @15
[3] phi()
main: scope:[main] from @14
main: scope:[main] from @15
[4] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[5] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[6] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3

@ -2,21 +2,93 @@ Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBa
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
(byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49
(byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54
(byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55
(byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
(word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) 1016
(byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248
(byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249
(byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264
(byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
(byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) 53271
(byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) 53275
(byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) 53276
(byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
(byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) 53282
(byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) 53283
(byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) 53284
(byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) 53285
(byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) 53286
(byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
(byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) 128
(byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
(byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
(byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte*) D016#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) 53272
to:@3
@3: scope:[] from @begin
(byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) 53267
(byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) 53268
(byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) 53273
(byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53274
(byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
(byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320
(byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321
(byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56322
(byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56323
(byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56333
(byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 127
(byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576
(byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56577
(byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578
(byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56579
(byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56589
(void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) 788
(void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) 65534
(byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
(byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
(byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
(byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
(byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13
(byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15
to:@4
@4: scope:[] from @begin
(byte[256]) bitmap_plot_xlo#0 ← { fill( 256, 0) }
(byte[256]) bitmap_plot_xhi#0 ← { fill( 256, 0) }
(byte[256]) bitmap_plot_ylo#0 ← { fill( 256, 0) }
(byte[256]) bitmap_plot_yhi#0 ← { fill( 256, 0) }
(byte[256]) bitmap_plot_bit#0 ← { fill( 256, 0) }
to:@11
to:@12
bitmap_init: scope:[bitmap_init] from main
(byte*) bitmap_init::bitmap#2 ← phi( main/(byte*) bitmap_init::bitmap#0 )
(byte) bitmap_init::bits#0 ← (byte/word/signed word/dword/signed dword) 128
@ -560,15 +632,15 @@ bitmap_line_ydxd::@3: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@5
bitmap_line_ydxd::@return: scope:[bitmap_line_ydxd] from bitmap_line_ydxd::@2
return
to:@return
@11: scope:[] from @3
@12: scope:[] from @4
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) BITMAP#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
(byte[]) lines_x#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 60, (byte/signed byte/word/signed word/dword/signed dword) 80, (byte/signed byte/word/signed word/dword/signed dword) 110, (byte/signed byte/word/signed word/dword/signed dword) 80, (byte/signed byte/word/signed word/dword/signed dword) 60, (byte/signed byte/word/signed word/dword/signed dword) 40, (byte/signed byte/word/signed word/dword/signed dword) 10, (byte/signed byte/word/signed word/dword/signed dword) 40, (byte/signed byte/word/signed word/dword/signed dword) 60 }
(byte[]) lines_y#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 10, (byte/signed byte/word/signed word/dword/signed dword) 40, (byte/signed byte/word/signed word/dword/signed dword) 60, (byte/signed byte/word/signed word/dword/signed dword) 80, (byte/signed byte/word/signed word/dword/signed dword) 110, (byte/signed byte/word/signed word/dword/signed dword) 80, (byte/signed byte/word/signed word/dword/signed dword) 60, (byte/signed byte/word/signed word/dword/signed dword) 40, (byte/signed byte/word/signed word/dword/signed dword) 10 }
(byte) lines_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
to:@14
main: scope:[main] from @14
(byte) lines_cnt#9 ← phi( @14/(byte) lines_cnt#10 )
to:@15
main: scope:[main] from @15
(byte) lines_cnt#9 ← phi( @15/(byte) lines_cnt#10 )
*((byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
*((byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte~) main::$0 ← (byte) VIC_BMM#0 | (byte) VIC_DEN#0
@ -648,39 +720,183 @@ init_screen::@1: scope:[init_screen] from init_screen init_screen::@1
init_screen::@return: scope:[init_screen] from init_screen::@1
return
to:@return
@14: scope:[] from @11
(byte) lines_cnt#10 ← phi( @11/(byte) lines_cnt#0 )
@15: scope:[] from @12
(byte) lines_cnt#10 ← phi( @12/(byte) lines_cnt#0 )
call main
to:@15
@15: scope:[] from @14
to:@16
@16: scope:[] from @15
to:@end
@end: scope:[] from @15
@end: scope:[] from @16
SYMBOL TABLE SSA
(label) @11
(label) @14
(label) @12
(label) @15
(label) @3
(label) @16
(label) @4
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte*) BITMAP
(byte*) BITMAP#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BROWN
(byte) BROWN#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_A_DDR#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA1_PORT_B_DDR
(byte*) CIA1_PORT_B_DDR#0
(byte*) CIA2_INTERRUPT
(byte*) CIA2_INTERRUPT#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B#0
(byte*) CIA2_PORT_B_DDR
(byte*) CIA2_PORT_B_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D016
(byte*) D016#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_BG#0
(byte) IRQ_COLLISION_SPRITE
(byte) IRQ_COLLISION_SPRITE#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_LIGHTPEN
(byte) IRQ_LIGHTPEN#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(void()**) KERNEL_IRQ
(void()**) KERNEL_IRQ#0
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_X#0
(byte*) LIGHTPEN_Y
(byte*) LIGHTPEN_Y#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte) LIGHT_GREY
(byte) LIGHT_GREY#0
(byte) ORANGE
(byte) ORANGE#0
(byte) PINK
(byte) PINK#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte) PROCPORT_BASIC_KERNEL_IO
(byte) PROCPORT_BASIC_KERNEL_IO#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_KERNEL_IO#0
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_ALL#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(byte*) SCREEN
(byte*) SCREEN#0
(byte*) SPRITES_COLS
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_MC1
(byte*) SPRITES_MC1#0
(byte*) SPRITES_MC2
(byte*) SPRITES_MC2#0
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PRIORITY#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte) VIC_BMM
(byte) VIC_BMM#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte*) VIC_CONTROL2
(byte*) VIC_CONTROL2#0
(byte) VIC_CSEL
(byte) VIC_CSEL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_MCM
(byte) VIC_MCM#0
(byte*) VIC_MEMORY
(byte*) VIC_MEMORY#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) VIC_RST8
(byte) VIC_RST8#0
(byte) WHITE
(byte) WHITE#0
(byte) YELLOW
(byte) YELLOW#0
(void()) bitmap_clear()
(byte*~) bitmap_clear::$0
(bool~) bitmap_clear::$1
@ -1234,7 +1450,7 @@ Culled Empty Block (label) bitmap_line::@33
Culled Empty Block (label) bitmap_line::@34
Culled Empty Block (label) bitmap_line::@35
Culled Empty Block (label) bitmap_line::@36
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Successful SSA optimization Pass2CullEmptyBlocks
Inversing boolean not (bool~) bitmap_init::$4 ← (byte) bitmap_init::bits#1 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) bitmap_init::$3 ← (byte) bitmap_init::bits#1 == (byte/signed byte/word/signed word/dword/signed dword) 0
Inversing boolean not (bool~) bitmap_init::$12 ← (byte~) bitmap_init::$10 != (byte/signed byte/word/signed word/dword/signed dword) 7 from (bool~) bitmap_init::$11 ← (byte~) bitmap_init::$10 == (byte/signed byte/word/signed word/dword/signed dword) 7
@ -1393,13 +1609,85 @@ Simple Condition (bool~) bitmap_line_ydxd::$7 if((byte) bitmap_line_ydxd::y#3!=(
Simple Condition (bool~) lines::$3 if((byte) lines::l#1<(byte) lines_cnt#0) goto lines::@1
Simple Condition (bool~) init_screen::$1 if((byte*) init_screen::c#1!=(byte*~) init_screen::$0) goto init_screen::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte) PROCPORT_RAM_ALL#0 = 48
Constant (const byte) PROCPORT_RAM_IO#0 = 53
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 49
Constant (const byte) PROCPORT_KERNEL_IO#0 = 54
Constant (const byte) PROCPORT_BASIC_KERNEL_IO#0 = 55
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const word) SPRITE_PTRS#0 = 1016
Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248
Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249
Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = ((byte*))53271
Constant (const byte*) SPRITES_PRIORITY#0 = ((byte*))53275
Constant (const byte*) SPRITES_MC#0 = ((byte*))53276
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte*) BGCOL1#0 = ((byte*))53281
Constant (const byte*) BGCOL2#0 = ((byte*))53282
Constant (const byte*) BGCOL3#0 = ((byte*))53283
Constant (const byte*) BGCOL4#0 = ((byte*))53284
Constant (const byte*) SPRITES_MC1#0 = ((byte*))53285
Constant (const byte*) SPRITES_MC2#0 = ((byte*))53286
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265
Constant (const byte*) D011#0 = ((byte*))53265
Constant (const byte) VIC_RST8#0 = 128
Constant (const byte) VIC_ECM#0 = 64
Constant (const byte) VIC_BMM#0 = 32
Constant (const byte) VIC_DEN#0 = 16
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) VIC_CONTROL2#0 = ((byte*))53270
Constant (const byte*) D016#0 = ((byte*))53270
Constant (const byte) VIC_MCM#0 = 16
Constant (const byte) VIC_CSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))53272
Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272
Constant (const byte*) LIGHTPEN_X#0 = ((byte*))53267
Constant (const byte*) LIGHTPEN_Y#0 = ((byte*))53268
Constant (const byte*) IRQ_STATUS#0 = ((byte*))53273
Constant (const byte*) IRQ_ENABLE#0 = ((byte*))53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte) IRQ_COLLISION_BG#0 = 2
Constant (const byte) IRQ_COLLISION_SPRITE#0 = 4
Constant (const byte) IRQ_LIGHTPEN#0 = 8
Constant (const byte*) COLS#0 = ((byte*))55296
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321
Constant (const byte*) CIA1_PORT_A_DDR#0 = ((byte*))56322
Constant (const byte*) CIA1_PORT_B_DDR#0 = ((byte*))56323
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576
Constant (const byte*) CIA2_PORT_B#0 = ((byte*))56577
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578
Constant (const byte*) CIA2_PORT_B_DDR#0 = ((byte*))56579
Constant (const byte*) CIA2_INTERRUPT#0 = ((byte*))56589
Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534
Constant (const byte) BLACK#0 = 0
Constant (const byte) WHITE#0 = 1
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) YELLOW#0 = 7
Constant (const byte) ORANGE#0 = 8
Constant (const byte) BROWN#0 = 9
Constant (const byte) PINK#0 = 10
Constant (const byte) DARK_GREY#0 = 11
Constant (const byte) GREY#0 = 12
Constant (const byte) LIGHT_GREEN#0 = 13
Constant (const byte) LIGHT_BLUE#0 = 14
Constant (const byte) LIGHT_GREY#0 = 15
Constant (const byte[256]) bitmap_plot_xlo#0 = { fill( 256, 0) }
Constant (const byte[256]) bitmap_plot_xhi#0 = { fill( 256, 0) }
Constant (const byte[256]) bitmap_plot_ylo#0 = { fill( 256, 0) }
@ -1451,6 +1739,7 @@ Fixing inline constructor with bitmap_plot::$3 ← *(bitmap_plot_yhi#0 + bitmap_
Successful SSA optimization Pass2FixInlineConstructors
Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) lines::$0 ← (byte) lines::l#2
Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) lines::$1 ← (byte) lines::l#2
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte*) bitmap_clear::bitmap#0 ← ((byte*)) (word~) bitmap_clear::$3
Eliminating Noop Cast (byte*) bitmap_plot::plotter#0 ← ((byte*)) (word~) bitmap_plot::$0
Successful SSA optimization Pass2NopCastElimination
@ -1464,9 +1753,9 @@ Resolved ranged next value bitmap_clear::x#1 ← ++ bitmap_clear::x#2 to ++
Resolved ranged comparison value if(bitmap_clear::x#1!=rangelast(0,199)) goto bitmap_clear::@2 to (byte/word/signed word/dword/signed dword) 200
Resolved ranged next value bitmap_clear::y#1 ← ++ bitmap_clear::y#4 to ++
Resolved ranged comparison value if(bitmap_clear::y#1!=rangelast(0,39)) goto bitmap_clear::@1 to (byte/signed byte/word/signed word/dword/signed dword) 40
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) bitmap_init::@6
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Successful SSA optimization Pass2CullEmptyBlocks
@ -1530,7 +1819,7 @@ Added new block during phi lifting bitmap_init::@10(between bitmap_init::@1 and
Added new block during phi lifting bitmap_init::@11(between bitmap_init::@4 and bitmap_init::@3)
Added new block during phi lifting bitmap_init::@12(between bitmap_init::@3 and bitmap_init::@4)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @14
Adding NOP phi() at start of @15
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@4
@ -1670,7 +1959,7 @@ Culled Empty Block (label) bitmap_init::@11
Culled Empty Block (label) bitmap_init::@12
Culled Empty Block (label) bitmap_init::@9
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @14
Adding NOP phi() at start of @15
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@4
@ -1683,14 +1972,14 @@ Adding NOP phi() at start of bitmap_init::@10
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@14
@14: scope:[] from @begin
to:@15
@15: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @14
@end: scope:[] from @15
[3] phi()
main: scope:[main] from @14
main: scope:[main] from @15
[4] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[5] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[6] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3
@ -2052,14 +2341,86 @@ bitmap_init::@10: scope:[bitmap_init] from bitmap_init::@1
VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte*) BITMAP
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) bitmap_clear()
(word~) bitmap_clear::$3 2.0
(byte*) bitmap_clear::bitmap
@ -2483,15 +2844,15 @@ INITIAL ASM
.const lines_cnt = 8
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @14 [phi:@begin->@14]
b14_from_bbegin:
jmp b14
//SEG4 @14
b14:
//SEG3 [1] phi from @begin to @15 [phi:@begin->@15]
b15_from_bbegin:
jmp b15
//SEG4 @15
b15:
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @14 to @end [phi:@14->@end]
bend_from_b14:
//SEG6 [3] phi from @15 to @end [phi:@15->@end]
bend_from_b15:
jmp bend
//SEG7 @end
bend:
@ -3903,15 +4264,15 @@ ASSEMBLER BEFORE OPTIMIZATION
.const lines_cnt = 8
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @14 [phi:@begin->@14]
b14_from_bbegin:
jmp b14
//SEG4 @14
b14:
//SEG3 [1] phi from @begin to @15 [phi:@begin->@15]
b15_from_bbegin:
jmp b15
//SEG4 @15
b15:
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @14 to @end [phi:@14->@end]
bend_from_b14:
//SEG6 [3] phi from @15 to @end [phi:@15->@end]
bend_from_b15:
jmp bend
//SEG7 @end
bend:
@ -4858,7 +5219,7 @@ bitmap_init: {
lines_y: .byte $a, $28, $3c, $50, $6e, $50, $3c, $28, $a
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b14
Removing instruction jmp b15
Removing instruction jmp bend
Removing instruction jmp b3
Removing instruction jmp b4
@ -4940,8 +5301,8 @@ Replacing label b1_from_b2 with b1
Replacing label b4_from_b3 with b4
Replacing label b3_from_b4 with b3
Removing instruction bbegin:
Removing instruction b14_from_bbegin:
Removing instruction bend_from_b14:
Removing instruction b15_from_bbegin:
Removing instruction bend_from_b15:
Removing instruction b3_from_main:
Removing instruction b4_from_b3:
Removing instruction init_screen_from_b4:
@ -4976,7 +5337,7 @@ Removing instruction b4_from_b7:
Removing instruction b10_from_b1:
Removing instruction b2_from_b10:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b14:
Removing instruction b15:
Removing instruction bend:
Removing instruction bitmap_init_from_main:
Removing instruction b3:
@ -5044,27 +5405,99 @@ Removing unreachable instruction jmp b2
Succesful ASM optimization Pass5UnreachableCodeElimination
FINAL SYMBOL TABLE
(label) @14
(label) @15
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte*) BITMAP
(const byte*) BITMAP#0 BITMAP = ((byte*))(word/signed word/dword/signed dword) 8192
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(const byte*) D011#0 D011 = ((byte*))(word/dword/signed dword) 53265
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(const byte) VIC_BMM#0 VIC_BMM = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(const byte) VIC_DEN#0 VIC_DEN = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(const byte*) VIC_MEMORY#0 VIC_MEMORY = ((byte*))(word/dword/signed dword) 53272
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) bitmap_clear()
(word~) bitmap_clear::$3 $3 zp ZP_WORD:9 2.0
(label) bitmap_clear::@1
@ -5399,11 +5832,11 @@ Score: 221049
.label BITMAP = $2000
.const lines_cnt = 8
//SEG2 @begin
//SEG3 [1] phi from @begin to @14 [phi:@begin->@14]
//SEG4 @14
//SEG3 [1] phi from @begin to @15 [phi:@begin->@15]
//SEG4 @15
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @14 to @end [phi:@14->@end]
//SEG6 [3] phi from @15 to @end [phi:@15->@end]
//SEG7 @end
//SEG8 main
main: {

@ -1,24 +1,96 @@
(label) @14
(label) @15
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte*) BITMAP
(const byte*) BITMAP#0 BITMAP = ((byte*))(word/signed word/dword/signed dword) 8192
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(const byte*) D011#0 D011 = ((byte*))(word/dword/signed dword) 53265
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(const byte) VIC_BMM#0 VIC_BMM = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(const byte) VIC_DEN#0 VIC_DEN = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(const byte*) VIC_MEMORY#0 VIC_MEMORY = ((byte*))(word/dword/signed dword) 53272
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) bitmap_clear()
(word~) bitmap_clear::$3 $3 zp ZP_WORD:9 2.0
(label) bitmap_clear::@1

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@18
@18: scope:[] from @begin
to:@19
@19: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @18
@end: scope:[] from @19
[3] phi()
main: scope:[main] from @18
main: scope:[main] from @19
[4] phi()
to:main::@1
main::@1: scope:[main] from main main::@1

File diff suppressed because it is too large Load Diff

@ -1,12 +1,46 @@
(label) @18
(label) @19
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word/dword/signed dword) 53248
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(const byte*) CIA1_PORT_A#0 CIA1_PORT_A = ((byte*))(word/dword/signed dword) 56320
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(const byte*) CIA1_PORT_B#0 CIA1_PORT_B = ((byte*))(word/dword/signed dword) 56321
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte) KEY_0
(const byte) KEY_0#0 KEY_0 = (byte/signed byte/word/signed word/dword/signed dword) 35
(byte) KEY_1
@ -45,8 +79,13 @@
(const byte) KEY_COLON#0 KEY_COLON = (byte/signed byte/word/signed word/dword/signed dword) 45
(byte) KEY_COMMA
(const byte) KEY_COMMA#0 KEY_COMMA = (byte/signed byte/word/signed word/dword/signed dword) 47
(byte) KEY_COMMODORE
(byte) KEY_CRSR_DOWN
(byte) KEY_CRSR_RIGHT
(byte) KEY_CTRL
(byte) KEY_D
(const byte) KEY_D#0 KEY_D = (byte/signed byte/word/signed word/dword/signed dword) 18
(byte) KEY_DEL
(byte) KEY_DOT
(const byte) KEY_DOT#0 KEY_DOT = (byte/signed byte/word/signed word/dword/signed dword) 44
(byte) KEY_E
@ -67,6 +106,7 @@
(const byte) KEY_G#0 KEY_G = (byte/signed byte/word/signed word/dword/signed dword) 26
(byte) KEY_H
(const byte) KEY_H#0 KEY_H = (byte/signed byte/word/signed word/dword/signed dword) 29
(byte) KEY_HOME
(byte) KEY_I
(const byte) KEY_I#0 KEY_I = (byte/signed byte/word/signed word/dword/signed dword) 33
(byte) KEY_J
@ -81,6 +121,11 @@
(const byte) KEY_M#0 KEY_M = (byte/signed byte/word/signed word/dword/signed dword) 36
(byte) KEY_MINUS
(const byte) KEY_MINUS#0 KEY_MINUS = (byte/signed byte/word/signed word/dword/signed dword) 43
(byte) KEY_MODIFIER_COMMODORE
(byte) KEY_MODIFIER_CTRL
(byte) KEY_MODIFIER_LSHIFT
(byte) KEY_MODIFIER_RSHIFT
(byte) KEY_MODIFIER_SHIFT
(byte) KEY_N
(const byte) KEY_N#0 KEY_N = (byte/signed byte/word/signed word/dword/signed dword) 39
(byte) KEY_O
@ -95,6 +140,9 @@
(const byte) KEY_Q#0 KEY_Q = (byte/signed byte/word/signed word/dword/signed dword) 62
(byte) KEY_R
(const byte) KEY_R#0 KEY_R = (byte/signed byte/word/signed word/dword/signed dword) 17
(byte) KEY_RETURN
(byte) KEY_RSHIFT
(byte) KEY_RUNSTOP
(byte) KEY_S
(const byte) KEY_S#0 KEY_S = (byte/signed byte/word/signed word/dword/signed dword) 13
(byte) KEY_SEMICOLON
@ -117,12 +165,55 @@
(const byte) KEY_Y#0 KEY_Y = (byte/signed byte/word/signed word/dword/signed dword) 25
(byte) KEY_Z
(const byte) KEY_Z#0 KEY_Z = (byte/signed byte/word/signed word/dword/signed dword) 12
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(byte[]) keyboard_char_keycodes
(const byte[]) keyboard_char_keycodes#0 keyboard_char_keycodes = { (const byte) KEY_AT#0, (const byte) KEY_A#0, (const byte) KEY_B#0, (const byte) KEY_C#0, (const byte) KEY_D#0, (const byte) KEY_E#0, (const byte) KEY_F#0, (const byte) KEY_G#0, (const byte) KEY_H#0, (const byte) KEY_I#0, (const byte) KEY_J#0, (const byte) KEY_K#0, (const byte) KEY_L#0, (const byte) KEY_M#0, (const byte) KEY_N#0, (const byte) KEY_O#0, (const byte) KEY_P#0, (const byte) KEY_Q#0, (const byte) KEY_R#0, (const byte) KEY_S#0, (const byte) KEY_T#0, (const byte) KEY_U#0, (const byte) KEY_V#0, (const byte) KEY_W#0, (const byte) KEY_X#0, (const byte) KEY_Y#0, (const byte) KEY_Z#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_POUND#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_ARROW_UP#0, (const byte) KEY_ARROW_LEFT#0, (const byte) KEY_SPACE#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_ASTERISK#0, (const byte) KEY_PLUS#0, (const byte) KEY_COMMA#0, (const byte) KEY_MINUS#0, (const byte) KEY_DOT#0, (const byte) KEY_SLASH#0, (const byte) KEY_0#0, (const byte) KEY_1#0, (const byte) KEY_2#0, (const byte) KEY_3#0, (const byte) KEY_4#0, (const byte) KEY_5#0, (const byte) KEY_6#0, (const byte) KEY_7#0, (const byte) KEY_8#0, (const byte) KEY_9#0, (const byte) KEY_COLON#0, (const byte) KEY_SEMICOLON#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (const byte) KEY_EQUALS#0, (byte/signed byte/word/signed word/dword/signed dword) 63, (byte/signed byte/word/signed word/dword/signed dword) 63 }
(byte[8]) keyboard_events
(byte) keyboard_events_size
(byte()) keyboard_get_keycode((byte) keyboard_get_keycode::ch)
(label) keyboard_get_keycode::@return
(byte) keyboard_get_keycode::ch
@ -161,6 +252,8 @@
(byte) keyboard_matrix_read::rowid#0 reg byte x 4.0
(byte[8]) keyboard_matrix_row_bitmask
(const byte[8]) keyboard_matrix_row_bitmask#0 keyboard_matrix_row_bitmask = { (byte/word/signed word/dword/signed dword) 254, (byte/word/signed word/dword/signed dword) 253, (byte/word/signed word/dword/signed dword) 251, (byte/word/signed word/dword/signed dword) 247, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 191, (byte/signed byte/word/signed word/dword/signed dword) 127 }
(byte) keyboard_modifiers
(byte[8]) keyboard_scan_values
(void()) main()
(byte~) main::$15 reg byte a 22.0
(byte~) main::$18 reg byte a 22.0

@ -1,7 +1,7 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.label print_screen = $400
.label print_line_cursor = $400
.label ap = $fd
.label bp = $fe
.label cp = $ff
@ -211,9 +211,9 @@ init_screen: {
}
print_cls: {
.label sc = 2
lda #<print_screen
lda #<print_line_cursor
sta sc
lda #>print_screen
lda #>print_line_cursor
sta sc+1
b1:
lda #' '
@ -224,10 +224,10 @@ print_cls: {
inc sc+1
!:
lda sc+1
cmp #>print_screen+$3e8
cmp #>print_line_cursor+$3e8
bne b1
lda sc
cmp #<print_screen+$3e8
cmp #<print_line_cursor+$3e8
bne b1
rts
}

@ -153,10 +153,10 @@ print_cls: scope:[print_cls] from init_screen
[78] phi()
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[79] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_screen#0 print_cls::@1/(byte*) print_cls::sc#1 )
[79] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_line_cursor#0 print_cls::@1/(byte*) print_cls::sc#1 )
[80] *((byte*) print_cls::sc#2) ← (byte) ' '
[81] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[82] if((byte*) print_cls::sc#1!=(const byte*) print_screen#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
[82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[83] return

@ -2,6 +2,8 @@
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) print_line_cursor#0 ← (byte*) print_screen#0
(byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
to:@12
print_sbyte_at: scope:[print_sbyte_at] from main::@1 main::@10 main::@2
(byte*) print_sbyte_at::at#6 ← phi( main::@1/(byte*) print_sbyte_at::at#0 main::@10/(byte*) print_sbyte_at::at#2 main::@2/(byte*) print_sbyte_at::at#1 )
@ -48,7 +50,9 @@ print_sbyte_at::@return: scope:[print_sbyte_at] from print_sbyte_at::@7
return
to:@return
@12: scope:[] from @begin
(byte*) print_screen#8 ← phi( @begin/(byte*) print_screen#0 )
(byte*) print_screen#9 ← phi( @begin/(byte*) print_screen#0 )
(byte*) print_char_cursor#25 ← phi( @begin/(byte*) print_char_cursor#0 )
(byte*) print_line_cursor#25 ← phi( @begin/(byte*) print_line_cursor#0 )
(byte[]) print_hextab#0 ← (const string) $4
to:@19
print_byte_at: scope:[print_byte_at] from print_sbyte_at::@2
@ -82,7 +86,7 @@ print_char_at::@return: scope:[print_char_at] from print_char_at
return
to:@return
print_cls: scope:[print_cls] from init_screen
(byte*) print_screen#1 ← phi( init_screen/(byte*) print_screen#3 )
(byte*) print_screen#1 ← phi( init_screen/(byte*) print_screen#4 )
(byte*) print_cls::sc#0 ← (byte*) print_screen#1
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
@ -93,12 +97,23 @@ print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
(byte*~) print_cls::$0 ← (byte*) print_screen#2 + (word/signed word/dword/signed dword) 1000
(bool~) print_cls::$1 ← (byte*) print_cls::sc#1 != (byte*~) print_cls::$0
if((bool~) print_cls::$1) goto print_cls::@1
to:print_cls::@2
print_cls::@2: scope:[print_cls] from print_cls::@1
(byte*) print_screen#3 ← phi( print_cls::@1/(byte*) print_screen#2 )
(byte*) print_line_cursor#1 ← (byte*) print_screen#3
(byte*) print_char_cursor#1 ← (byte*) print_line_cursor#1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) print_char_cursor#8 ← phi( print_cls::@2/(byte*) print_char_cursor#1 )
(byte*) print_line_cursor#8 ← phi( print_cls::@2/(byte*) print_line_cursor#1 )
(byte*) print_line_cursor#2 ← (byte*) print_line_cursor#8
(byte*) print_char_cursor#2 ← (byte*) print_char_cursor#8
return
to:@return
@19: scope:[] from @12
(byte*) print_screen#7 ← phi( @12/(byte*) print_screen#8 )
(byte*) print_screen#8 ← phi( @12/(byte*) print_screen#9 )
(byte*) print_char_cursor#24 ← phi( @12/(byte*) print_char_cursor#25 )
(byte*) print_line_cursor#24 ← phi( @12/(byte*) print_line_cursor#25 )
(signed byte/signed word/signed dword~) $0 ← - (byte/signed byte/word/signed word/dword/signed dword) 95
(signed byte/signed word/signed dword~) $1 ← - (byte/signed byte/word/signed word/dword/signed dword) 64
(signed byte/signed word/signed dword~) $2 ← - (byte/signed byte/word/signed word/dword/signed dword) 32
@ -109,19 +124,27 @@ main: scope:[main] from @22
(signed byte*) cp#12 ← phi( @22/(signed byte*) cp#13 )
(signed byte*) bp#12 ← phi( @22/(signed byte*) bp#13 )
(signed byte*) ap#12 ← phi( @22/(signed byte*) ap#13 )
(byte*) print_screen#4 ← phi( @22/(byte*) print_screen#5 )
(byte*) print_screen#5 ← phi( @22/(byte*) print_screen#6 )
(byte*) print_char_cursor#14 ← phi( @22/(byte*) print_char_cursor#18 )
(byte*) print_line_cursor#14 ← phi( @22/(byte*) print_line_cursor#18 )
call init_screen
to:main::@7
main::@7: scope:[main] from main
(signed byte*) cp#11 ← phi( main/(signed byte*) cp#12 )
(signed byte*) bp#11 ← phi( main/(signed byte*) bp#12 )
(signed byte*) ap#11 ← phi( main/(signed byte*) ap#12 )
(byte*) print_char_cursor#9 ← phi( main/(byte*) print_char_cursor#6 )
(byte*) print_line_cursor#9 ← phi( main/(byte*) print_line_cursor#6 )
(byte*) print_line_cursor#3 ← (byte*) print_line_cursor#9
(byte*) print_char_cursor#3 ← (byte*) print_char_cursor#9
(byte*) main::at_line#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*~) main::$1 ← (byte*) main::at_line#0 + (byte/signed byte/word/signed word/dword/signed dword) 4
(byte*) main::at#0 ← (byte*~) main::$1
(byte) main::k#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@1
main::@1: scope:[main] from main::@7 main::@8
(byte*) print_char_cursor#31 ← phi( main::@7/(byte*) print_char_cursor#3 main::@8/(byte*) print_char_cursor#30 )
(byte*) print_line_cursor#31 ← phi( main::@7/(byte*) print_line_cursor#3 main::@8/(byte*) print_line_cursor#30 )
(signed byte*) cp#10 ← phi( main::@7/(signed byte*) cp#11 main::@8/(signed byte*) cp#9 )
(signed byte*) bp#10 ← phi( main::@7/(signed byte*) bp#11 main::@8/(signed byte*) bp#9 )
(signed byte*) ap#10 ← phi( main::@7/(signed byte*) ap#11 main::@8/(signed byte*) ap#9 )
@ -133,6 +156,8 @@ main::@1: scope:[main] from main::@7 main::@8
call print_sbyte_at
to:main::@8
main::@8: scope:[main] from main::@1
(byte*) print_char_cursor#30 ← phi( main::@1/(byte*) print_char_cursor#31 )
(byte*) print_line_cursor#30 ← phi( main::@1/(byte*) print_line_cursor#31 )
(signed byte*) cp#9 ← phi( main::@1/(signed byte*) cp#10 )
(signed byte*) bp#9 ← phi( main::@1/(signed byte*) bp#10 )
(signed byte*) ap#9 ← phi( main::@1/(signed byte*) ap#10 )
@ -145,6 +170,8 @@ main::@8: scope:[main] from main::@1
if((bool~) main::$3) goto main::@1
to:main::@4
main::@4: scope:[main] from main::@8
(byte*) print_char_cursor#29 ← phi( main::@8/(byte*) print_char_cursor#30 )
(byte*) print_line_cursor#29 ← phi( main::@8/(byte*) print_line_cursor#30 )
(signed byte*) cp#7 ← phi( main::@8/(signed byte*) cp#9 )
(signed byte*) bp#7 ← phi( main::@8/(signed byte*) bp#9 )
(signed byte*) ap#7 ← phi( main::@8/(signed byte*) ap#9 )
@ -152,6 +179,8 @@ main::@4: scope:[main] from main::@8
(byte) main::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@2
main::@2: scope:[main] from main::@4 main::@5
(byte*) print_char_cursor#28 ← phi( main::@4/(byte*) print_char_cursor#29 main::@5/(byte*) print_char_cursor#15 )
(byte*) print_line_cursor#28 ← phi( main::@4/(byte*) print_line_cursor#29 main::@5/(byte*) print_line_cursor#15 )
(signed byte*) cp#5 ← phi( main::@4/(signed byte*) cp#7 main::@5/(signed byte*) cp#8 )
(signed byte*) bp#5 ← phi( main::@4/(signed byte*) bp#7 main::@5/(signed byte*) bp#8 )
(signed byte*) ap#5 ← phi( main::@4/(signed byte*) ap#7 main::@5/(signed byte*) ap#8 )
@ -164,6 +193,8 @@ main::@2: scope:[main] from main::@4 main::@5
call print_sbyte_at
to:main::@9
main::@9: scope:[main] from main::@2
(byte*) print_char_cursor#27 ← phi( main::@2/(byte*) print_char_cursor#28 )
(byte*) print_line_cursor#27 ← phi( main::@2/(byte*) print_line_cursor#28 )
(byte*) main::at_line#10 ← phi( main::@2/(byte*) main::at_line#1 )
(signed byte*) cp#4 ← phi( main::@2/(signed byte*) cp#5 )
(signed byte*) bp#4 ← phi( main::@2/(signed byte*) bp#5 )
@ -173,6 +204,8 @@ main::@9: scope:[main] from main::@2
(byte) main::j#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:main::@3
main::@3: scope:[main] from main::@11 main::@9
(byte*) print_char_cursor#26 ← phi( main::@11/(byte*) print_char_cursor#19 main::@9/(byte*) print_char_cursor#27 )
(byte*) print_line_cursor#26 ← phi( main::@11/(byte*) print_line_cursor#19 main::@9/(byte*) print_line_cursor#27 )
(byte*) main::at_line#9 ← phi( main::@11/(byte*) main::at_line#6 main::@9/(byte*) main::at_line#10 )
(signed byte*) cp#2 ← phi( main::@11/(signed byte*) cp#3 main::@9/(signed byte*) cp#4 )
(signed byte*) bp#2 ← phi( main::@11/(signed byte*) bp#3 main::@9/(signed byte*) bp#4 )
@ -187,6 +220,8 @@ main::@3: scope:[main] from main::@11 main::@9
(signed byte) fmul8::return#0 ← (signed byte) fmul8::return#2
to:main::@10
main::@10: scope:[main] from main::@3
(byte*) print_char_cursor#22 ← phi( main::@3/(byte*) print_char_cursor#26 )
(byte*) print_line_cursor#22 ← phi( main::@3/(byte*) print_line_cursor#26 )
(byte*) main::at_line#8 ← phi( main::@3/(byte*) main::at_line#9 )
(signed byte*) cp#6 ← phi( main::@3/(signed byte*) cp#2 )
(signed byte*) bp#6 ← phi( main::@3/(signed byte*) bp#2 )
@ -202,6 +237,8 @@ main::@10: scope:[main] from main::@3
call print_sbyte_at
to:main::@11
main::@11: scope:[main] from main::@10
(byte*) print_char_cursor#19 ← phi( main::@10/(byte*) print_char_cursor#22 )
(byte*) print_line_cursor#19 ← phi( main::@10/(byte*) print_line_cursor#22 )
(byte*) main::at_line#6 ← phi( main::@10/(byte*) main::at_line#8 )
(signed byte*) cp#3 ← phi( main::@10/(signed byte*) cp#6 )
(signed byte*) bp#3 ← phi( main::@10/(signed byte*) bp#6 )
@ -217,6 +254,8 @@ main::@5: scope:[main] from main::@11
(signed byte*) cp#8 ← phi( main::@11/(signed byte*) cp#3 )
(signed byte*) bp#8 ← phi( main::@11/(signed byte*) bp#3 )
(signed byte*) ap#8 ← phi( main::@11/(signed byte*) ap#3 )
(byte*) print_char_cursor#15 ← phi( main::@11/(byte*) print_char_cursor#19 )
(byte*) print_line_cursor#15 ← phi( main::@11/(byte*) print_line_cursor#19 )
(byte*) main::at_line#4 ← phi( main::@11/(byte*) main::at_line#6 )
(byte) main::i#4 ← phi( main::@11/(byte) main::i#5 )
(byte) main::i#1 ← (byte) main::i#4 + rangenext(0,8)
@ -224,18 +263,30 @@ main::@5: scope:[main] from main::@11
if((bool~) main::$8) goto main::@2
to:main::@return
main::@return: scope:[main] from main::@5
(byte*) print_char_cursor#10 ← phi( main::@5/(byte*) print_char_cursor#15 )
(byte*) print_line_cursor#10 ← phi( main::@5/(byte*) print_line_cursor#15 )
(byte*) print_line_cursor#4 ← (byte*) print_line_cursor#10
(byte*) print_char_cursor#4 ← (byte*) print_char_cursor#10
return
to:@return
init_screen: scope:[init_screen] from main
(byte*) print_screen#3 ← phi( main/(byte*) print_screen#4 )
(byte*) print_char_cursor#16 ← phi( main/(byte*) print_char_cursor#14 )
(byte*) print_line_cursor#16 ← phi( main/(byte*) print_line_cursor#14 )
(byte*) print_screen#4 ← phi( main/(byte*) print_screen#5 )
call print_cls
to:init_screen::@5
init_screen::@5: scope:[init_screen] from init_screen
(byte*) print_char_cursor#11 ← phi( init_screen/(byte*) print_char_cursor#2 )
(byte*) print_line_cursor#11 ← phi( init_screen/(byte*) print_line_cursor#2 )
(byte*) print_line_cursor#5 ← (byte*) print_line_cursor#11
(byte*) print_char_cursor#5 ← (byte*) print_char_cursor#11
(byte*) init_screen::COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
(byte) init_screen::WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) init_screen::l#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:init_screen::@1
init_screen::@1: scope:[init_screen] from init_screen::@1 init_screen::@5
(byte*) print_char_cursor#23 ← phi( init_screen::@1/(byte*) print_char_cursor#23 init_screen::@5/(byte*) print_char_cursor#5 )
(byte*) print_line_cursor#23 ← phi( init_screen::@1/(byte*) print_line_cursor#23 init_screen::@5/(byte*) print_line_cursor#5 )
(byte) init_screen::l#2 ← phi( init_screen::@1/(byte) init_screen::l#1 init_screen::@5/(byte) init_screen::l#0 )
(byte*) init_screen::COLS#2 ← phi( init_screen::@1/(byte*) init_screen::COLS#2 init_screen::@5/(byte*) init_screen::COLS#0 )
(byte) init_screen::WHITE#1 ← phi( init_screen::@1/(byte) init_screen::WHITE#1 init_screen::@5/(byte) init_screen::WHITE#0 )
@ -245,11 +296,15 @@ init_screen::@1: scope:[init_screen] from init_screen::@1 init_screen::@5
if((bool~) init_screen::$1) goto init_screen::@1
to:init_screen::@3
init_screen::@3: scope:[init_screen] from init_screen::@1
(byte*) print_char_cursor#20 ← phi( init_screen::@1/(byte*) print_char_cursor#23 )
(byte*) print_line_cursor#20 ← phi( init_screen::@1/(byte*) print_line_cursor#23 )
(byte*) init_screen::COLS#4 ← phi( init_screen::@1/(byte*) init_screen::COLS#2 )
(byte) init_screen::WHITE#3 ← phi( init_screen::@1/(byte) init_screen::WHITE#1 )
(byte) init_screen::m#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:init_screen::@2
init_screen::@2: scope:[init_screen] from init_screen::@2 init_screen::@3
(byte*) print_char_cursor#17 ← phi( init_screen::@2/(byte*) print_char_cursor#17 init_screen::@3/(byte*) print_char_cursor#20 )
(byte*) print_line_cursor#17 ← phi( init_screen::@2/(byte*) print_line_cursor#17 init_screen::@3/(byte*) print_line_cursor#20 )
(byte) init_screen::m#2 ← phi( init_screen::@2/(byte) init_screen::m#1 init_screen::@3/(byte) init_screen::m#0 )
(byte*) init_screen::COLS#3 ← phi( init_screen::@2/(byte*) init_screen::COLS#1 init_screen::@3/(byte*) init_screen::COLS#4 )
(byte) init_screen::WHITE#2 ← phi( init_screen::@2/(byte) init_screen::WHITE#2 init_screen::@3/(byte) init_screen::WHITE#3 )
@ -263,10 +318,16 @@ init_screen::@2: scope:[init_screen] from init_screen::@2 init_screen::@3
if((bool~) init_screen::$2) goto init_screen::@2
to:init_screen::@return
init_screen::@return: scope:[init_screen] from init_screen::@2
(byte*) print_char_cursor#12 ← phi( init_screen::@2/(byte*) print_char_cursor#17 )
(byte*) print_line_cursor#12 ← phi( init_screen::@2/(byte*) print_line_cursor#17 )
(byte*) print_line_cursor#6 ← (byte*) print_line_cursor#12
(byte*) print_char_cursor#6 ← (byte*) print_char_cursor#12
return
to:@return
@21: scope:[] from @19
(byte*) print_screen#6 ← phi( @19/(byte*) print_screen#7 )
(byte*) print_screen#7 ← phi( @19/(byte*) print_screen#8 )
(byte*) print_char_cursor#21 ← phi( @19/(byte*) print_char_cursor#24 )
(byte*) print_line_cursor#21 ← phi( @19/(byte*) print_line_cursor#24 )
(signed byte*) ap#0 ← ((signed byte*)) (byte/word/signed word/dword/signed dword) 253
(signed byte*) bp#0 ← ((signed byte*)) (byte/word/signed word/dword/signed dword) 254
(signed byte*) cp#0 ← ((signed byte*)) (byte/word/signed word/dword/signed dword) 255
@ -291,7 +352,9 @@ fmul8::@return: scope:[fmul8] from fmul8
(signed byte*) cp#13 ← phi( @21/(signed byte*) cp#0 )
(signed byte*) bp#13 ← phi( @21/(signed byte*) bp#0 )
(signed byte*) ap#13 ← phi( @21/(signed byte*) ap#0 )
(byte*) print_screen#5 ← phi( @21/(byte*) print_screen#6 )
(byte*) print_screen#6 ← phi( @21/(byte*) print_screen#7 )
(byte*) print_char_cursor#18 ← phi( @21/(byte*) print_char_cursor#21 )
(byte*) print_line_cursor#18 ← phi( @21/(byte*) print_line_cursor#21 )
(byte*) mulf_sqr1#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
(byte*) mulf_sqr2#0 ← ((byte*)) (word/signed word/dword/signed dword) 8704
kickasm(location (byte*) mulf_sqr1#0) {{ .for(var i=0;i<$200;i++) {
@ -309,6 +372,10 @@ fmul8::@return: scope:[fmul8] from fmul8
call main
to:@23
@23: scope:[] from @22
(byte*) print_char_cursor#13 ← phi( @22/(byte*) print_char_cursor#4 )
(byte*) print_line_cursor#13 ← phi( @22/(byte*) print_line_cursor#4 )
(byte*) print_line_cursor#7 ← (byte*) print_line_cursor#13
(byte*) print_char_cursor#7 ← (byte*) print_char_cursor#13
to:@end
@end: scope:[] from @23
@ -506,10 +573,44 @@ SYMBOL TABLE SSA
(byte) print_char_at::ch#2
(byte) print_char_at::ch#3
(byte) print_char_at::ch#4
(byte*) print_char_cursor
(byte*) print_char_cursor#0
(byte*) print_char_cursor#1
(byte*) print_char_cursor#10
(byte*) print_char_cursor#11
(byte*) print_char_cursor#12
(byte*) print_char_cursor#13
(byte*) print_char_cursor#14
(byte*) print_char_cursor#15
(byte*) print_char_cursor#16
(byte*) print_char_cursor#17
(byte*) print_char_cursor#18
(byte*) print_char_cursor#19
(byte*) print_char_cursor#2
(byte*) print_char_cursor#20
(byte*) print_char_cursor#21
(byte*) print_char_cursor#22
(byte*) print_char_cursor#23
(byte*) print_char_cursor#24
(byte*) print_char_cursor#25
(byte*) print_char_cursor#26
(byte*) print_char_cursor#27
(byte*) print_char_cursor#28
(byte*) print_char_cursor#29
(byte*) print_char_cursor#3
(byte*) print_char_cursor#30
(byte*) print_char_cursor#31
(byte*) print_char_cursor#4
(byte*) print_char_cursor#5
(byte*) print_char_cursor#6
(byte*) print_char_cursor#7
(byte*) print_char_cursor#8
(byte*) print_char_cursor#9
(void()) print_cls()
(byte*~) print_cls::$0
(bool~) print_cls::$1
(label) print_cls::@1
(label) print_cls::@2
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#0
@ -517,6 +618,39 @@ SYMBOL TABLE SSA
(byte*) print_cls::sc#2
(byte[]) print_hextab
(byte[]) print_hextab#0
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_line_cursor#1
(byte*) print_line_cursor#10
(byte*) print_line_cursor#11
(byte*) print_line_cursor#12
(byte*) print_line_cursor#13
(byte*) print_line_cursor#14
(byte*) print_line_cursor#15
(byte*) print_line_cursor#16
(byte*) print_line_cursor#17
(byte*) print_line_cursor#18
(byte*) print_line_cursor#19
(byte*) print_line_cursor#2
(byte*) print_line_cursor#20
(byte*) print_line_cursor#21
(byte*) print_line_cursor#22
(byte*) print_line_cursor#23
(byte*) print_line_cursor#24
(byte*) print_line_cursor#25
(byte*) print_line_cursor#26
(byte*) print_line_cursor#27
(byte*) print_line_cursor#28
(byte*) print_line_cursor#29
(byte*) print_line_cursor#3
(byte*) print_line_cursor#30
(byte*) print_line_cursor#31
(byte*) print_line_cursor#4
(byte*) print_line_cursor#5
(byte*) print_line_cursor#6
(byte*) print_line_cursor#7
(byte*) print_line_cursor#8
(byte*) print_line_cursor#9
(void()) print_sbyte_at((signed byte) print_sbyte_at::b , (byte*) print_sbyte_at::at)
(bool~) print_sbyte_at::$0
(signed byte~) print_sbyte_at::$3
@ -560,25 +694,28 @@ SYMBOL TABLE SSA
(byte*) print_screen#6
(byte*) print_screen#7
(byte*) print_screen#8
(byte*) print_screen#9
(signed byte[]) vals
(signed byte[]) vals#0
Culled Empty Block (label) print_sbyte_at::@7
Culled Empty Block (label) print_byte_at::@2
Culled Empty Block (label) @23
Successful SSA optimization Pass2CullEmptyBlocks
Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#25 (byte*) print_char_cursor#25 (byte*) print_screen#9 (byte*) print_line_cursor#24 (byte*) print_char_cursor#24 (byte*) print_screen#8 (byte*) print_line_cursor#21 (byte*) print_char_cursor#21 (byte*) print_screen#7 (byte*) print_line_cursor#18 (byte*) print_char_cursor#18 (byte*) print_screen#6
Alias (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#6 (byte*) print_sbyte_at::at#7 (byte*) print_sbyte_at::at#4 (byte*) print_sbyte_at::at#8
Alias (signed byte) print_sbyte_at::b#4 = (signed byte) print_sbyte_at::b#7 (signed byte) print_sbyte_at::b#5 (signed byte) print_sbyte_at::b#9 (signed byte) print_sbyte_at::b#8
Alias (signed byte) print_sbyte_at::b#0 = (signed byte~) print_sbyte_at::$3
Alias (byte) print_byte_at::b#0 = (byte~) print_sbyte_at::$4
Alias (byte*) print_byte_at::at#0 = (byte*~) print_sbyte_at::$5
Alias (byte*) print_screen#0 = (byte*) print_screen#8 (byte*) print_screen#7 (byte*) print_screen#6 (byte*) print_screen#5
Alias (byte) print_byte_at::b#1 = (byte) print_byte_at::b#2
Alias (byte*) print_byte_at::at#1 = (byte*) print_byte_at::at#2
Alias (byte*) print_char_at::at#3 = (byte*~) print_byte_at::$3
Alias (byte*) print_line_cursor#1 = (byte*) print_screen#3 (byte*) print_screen#2 (byte*) print_char_cursor#1 (byte*) print_line_cursor#8 (byte*) print_char_cursor#8 (byte*) print_line_cursor#2 (byte*) print_char_cursor#2
Alias (signed byte*) ap#11 = (signed byte*) ap#12
Alias (signed byte*) bp#11 = (signed byte*) bp#12
Alias (signed byte*) cp#11 = (signed byte*) cp#12
Alias (byte*) print_line_cursor#3 = (byte*) print_line_cursor#9
Alias (byte*) print_char_cursor#3 = (byte*) print_char_cursor#9
Alias (byte*) main::at#0 = (byte*~) main::$1
Alias (byte*) main::at#4 = (byte*) main::at#5
Alias (byte) main::k#2 = (byte) main::k#3
@ -586,11 +723,15 @@ Alias (byte*) main::at_line#3 = (byte*) main::at_line#5 (byte*) main::at_line#7
Alias (signed byte*) ap#10 = (signed byte*) ap#9 (signed byte*) ap#7
Alias (signed byte*) bp#10 = (signed byte*) bp#9 (signed byte*) bp#7
Alias (signed byte*) cp#10 = (signed byte*) cp#9 (signed byte*) cp#7
Alias (byte*) print_line_cursor#29 = (byte*) print_line_cursor#30 (byte*) print_line_cursor#31
Alias (byte*) print_char_cursor#29 = (byte*) print_char_cursor#30 (byte*) print_char_cursor#31
Alias (byte*) main::at#2 = (byte*) main::at_line#1 (byte*) main::at#9 (byte*) main::at_line#10
Alias (byte) main::i#2 = (byte) main::i#6
Alias (signed byte*) ap#4 = (signed byte*) ap#5
Alias (signed byte*) bp#4 = (signed byte*) bp#5
Alias (signed byte*) cp#4 = (signed byte*) cp#5
Alias (byte*) print_line_cursor#27 = (byte*) print_line_cursor#28
Alias (byte*) print_char_cursor#27 = (byte*) print_char_cursor#28
Alias (signed byte) fmul8::return#0 = (signed byte) fmul8::return#3
Alias (byte*) main::at#3 = (byte*) main::at#7 (byte*) main::at#8
Alias (byte) main::j#2 = (byte) main::j#4 (byte) main::j#3
@ -599,56 +740,92 @@ Alias (signed byte*) ap#2 = (signed byte*) ap#6 (signed byte*) ap#3 (signed byte
Alias (signed byte*) bp#2 = (signed byte*) bp#6 (signed byte*) bp#3 (signed byte*) bp#8
Alias (signed byte*) cp#2 = (signed byte*) cp#6 (signed byte*) cp#3 (signed byte*) cp#8
Alias (byte*) main::at_line#4 = (byte*) main::at_line#8 (byte*) main::at_line#9 (byte*) main::at_line#6
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#22 (byte*) print_line_cursor#26 (byte*) print_line_cursor#19 (byte*) print_line_cursor#15 (byte*) print_line_cursor#4
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#22 (byte*) print_char_cursor#26 (byte*) print_char_cursor#19 (byte*) print_char_cursor#15 (byte*) print_char_cursor#4
Alias (signed byte) main::r#0 = (signed byte~) main::$5
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5
Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#5
Alias (byte) init_screen::WHITE#1 = (byte) init_screen::WHITE#3
Alias (byte*) init_screen::COLS#2 = (byte*) init_screen::COLS#4
Alias (byte*) print_line_cursor#20 = (byte*) print_line_cursor#23
Alias (byte*) print_char_cursor#20 = (byte*) print_char_cursor#23
Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#17 (byte*) print_line_cursor#6
Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#17 (byte*) print_char_cursor#6
Alias (signed byte) fmul8::return#1 = (signed byte) fmul8::return#4 (signed byte) fmul8::return#2
Alias (signed byte*) ap#0 = (signed byte*) ap#13
Alias (signed byte*) bp#0 = (signed byte*) bp#13
Alias (signed byte*) cp#0 = (signed byte*) cp#13
Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#7
Alias (byte*) print_char_cursor#13 = (byte*) print_char_cursor#7
Successful SSA optimization Pass2AliasElimination
Alias (byte*) print_sbyte_at::at#3 = (byte*) print_sbyte_at::at#5
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte*) print_screen#2
Self Phi Eliminated (byte*) print_line_cursor#1
Self Phi Eliminated (byte*) main::at_line#3
Self Phi Eliminated (signed byte*) ap#10
Self Phi Eliminated (signed byte*) bp#10
Self Phi Eliminated (signed byte*) cp#10
Self Phi Eliminated (byte*) print_line_cursor#29
Self Phi Eliminated (byte*) print_char_cursor#29
Self Phi Eliminated (byte) main::i#3
Self Phi Eliminated (signed byte*) ap#2
Self Phi Eliminated (signed byte*) bp#2
Self Phi Eliminated (signed byte*) cp#2
Self Phi Eliminated (byte*) main::at_line#4
Self Phi Eliminated (byte*) print_line_cursor#10
Self Phi Eliminated (byte*) print_char_cursor#10
Self Phi Eliminated (byte) init_screen::WHITE#1
Self Phi Eliminated (byte*) init_screen::COLS#2
Self Phi Eliminated (byte*) print_line_cursor#20
Self Phi Eliminated (byte*) print_char_cursor#20
Self Phi Eliminated (byte) init_screen::WHITE#2
Self Phi Eliminated (byte*) print_line_cursor#12
Self Phi Eliminated (byte*) print_char_cursor#12
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) print_byte_at::b#1 (byte) print_byte_at::b#0
Redundant Phi (byte*) print_byte_at::at#1 (byte*) print_byte_at::at#0
Redundant Phi (byte*) print_screen#1 (byte*) print_screen#3
Redundant Phi (byte*) print_screen#2 (byte*) print_screen#1
Redundant Phi (byte*) print_screen#4 (byte*) print_screen#0
Redundant Phi (byte*) print_screen#1 (byte*) print_screen#4
Redundant Phi (byte*) print_line_cursor#1 (byte*) print_screen#1
Redundant Phi (byte*) print_line_cursor#14 (byte*) print_line_cursor#0
Redundant Phi (byte*) print_char_cursor#14 (byte*) print_line_cursor#0
Redundant Phi (byte*) print_screen#5 (byte*) print_line_cursor#0
Redundant Phi (signed byte*) ap#11 (signed byte*) ap#0
Redundant Phi (signed byte*) bp#11 (signed byte*) bp#0
Redundant Phi (signed byte*) cp#11 (signed byte*) cp#0
Redundant Phi (byte*) print_line_cursor#3 (byte*) print_line_cursor#12
Redundant Phi (byte*) print_char_cursor#3 (byte*) print_char_cursor#12
Redundant Phi (byte*) main::at_line#3 (byte*) main::at_line#0
Redundant Phi (signed byte*) ap#10 (signed byte*) ap#11
Redundant Phi (signed byte*) bp#10 (signed byte*) bp#11
Redundant Phi (signed byte*) cp#10 (signed byte*) cp#11
Redundant Phi (byte*) print_line_cursor#29 (byte*) print_line_cursor#3
Redundant Phi (byte*) print_char_cursor#29 (byte*) print_char_cursor#3
Redundant Phi (byte) main::i#3 (byte) main::i#2
Redundant Phi (signed byte*) ap#2 (signed byte*) ap#4
Redundant Phi (signed byte*) bp#2 (signed byte*) bp#4
Redundant Phi (signed byte*) cp#2 (signed byte*) cp#4
Redundant Phi (byte*) main::at_line#4 (byte*) main::at#2
Redundant Phi (byte*) print_screen#3 (byte*) print_screen#4
Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#27
Redundant Phi (byte*) print_char_cursor#10 (byte*) print_char_cursor#27
Redundant Phi (byte*) print_screen#4 (byte*) print_screen#5
Redundant Phi (byte*) print_line_cursor#16 (byte*) print_line_cursor#14
Redundant Phi (byte*) print_char_cursor#16 (byte*) print_char_cursor#14
Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#1
Redundant Phi (byte*) print_char_cursor#11 (byte*) print_line_cursor#1
Redundant Phi (byte) init_screen::WHITE#1 (byte) init_screen::WHITE#0
Redundant Phi (byte*) init_screen::COLS#2 (byte*) init_screen::COLS#0
Redundant Phi (byte*) print_line_cursor#20 (byte*) print_line_cursor#11
Redundant Phi (byte*) print_char_cursor#20 (byte*) print_char_cursor#11
Redundant Phi (byte) init_screen::WHITE#2 (byte) init_screen::WHITE#1
Redundant Phi (byte*) print_line_cursor#12 (byte*) print_line_cursor#20
Redundant Phi (byte*) print_char_cursor#12 (byte*) print_char_cursor#20
Redundant Phi (signed byte) fmul8::a#1 (signed byte) fmul8::a#0
Redundant Phi (signed byte*) ap#1 (signed byte*) ap#2
Redundant Phi (signed byte) fmul8::b#1 (signed byte) fmul8::b#0
Redundant Phi (signed byte*) bp#1 (signed byte*) bp#2
Redundant Phi (signed byte*) cp#1 (signed byte*) cp#2
Redundant Phi (byte*) print_line_cursor#13 (byte*) print_line_cursor#10
Redundant Phi (byte*) print_char_cursor#13 (byte*) print_char_cursor#10
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) print_sbyte_at::$0 if((signed byte) print_sbyte_at::b#4<(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte_at::@1
Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1
@ -658,7 +835,7 @@ Simple Condition (bool~) main::$8 if((byte) main::i#1!=rangelast(0,8)) goto main
Simple Condition (bool~) init_screen::$1 if((byte) init_screen::l#1!=rangelast(0,39)) goto init_screen::@1
Simple Condition (bool~) init_screen::$2 if((byte) init_screen::m#1!=rangelast(0,24)) goto init_screen::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_screen#0 = ((byte*))1024
Constant (const byte*) print_line_cursor#0 = ((byte*))1024
Constant (const byte) print_char_at::ch#0 = '-'
Constant (const byte) print_char_at::ch#1 = ' '
Constant (const byte[]) print_hextab#0 = $4
@ -680,11 +857,12 @@ Constant (const signed byte*) cp#0 = ((signed byte*))255
Constant (const byte*) mulf_sqr1#0 = ((byte*))8192
Constant (const byte*) mulf_sqr2#0 = ((byte*))8704
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = print_screen#0
Constant (const byte*) print_cls::$0 = print_screen#0+1000
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000
Constant (const signed byte[]) vals#0 = { $0, $1, $2, $3, 0, 16, 32, 64, 95 }
Constant (const byte*) main::at#0 = main::at_line#0+4
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte) print_byte_at::b#0 ← ((byte)) (signed byte) print_sbyte_at::b#6
Successful SSA optimization Pass2NopCastElimination
Resolved ranged next value main::k#1 ← ++ main::k#2 to ++
@ -699,6 +877,7 @@ Resolved ranged next value init_screen::m#1 ← ++ init_screen::m#2 to ++
Resolved ranged comparison value if(init_screen::m#1!=rangelast(0,24)) goto init_screen::@2 to (byte/signed byte/word/signed word/dword/signed dword) 25
Culled Empty Block (label) print_sbyte_at::@6
Culled Empty Block (label) @12
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @19
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@4
@ -706,6 +885,7 @@ Culled Empty Block (label) main::@9
Culled Empty Block (label) init_screen::@5
Culled Empty Block (label) init_screen::@3
Culled Empty Block (label) @21
Culled Empty Block (label) @23
Successful SSA optimization Pass2CullEmptyBlocks
Self Phi Eliminated (signed byte*) ap#4
Self Phi Eliminated (signed byte*) bp#4
@ -726,9 +906,9 @@ Inlining constant with var siblings (const byte*) main::at#0
Inlining constant with var siblings (const byte*) init_screen::COLS#0
Inlining constant with var siblings (const byte) init_screen::l#0
Inlining constant with var siblings (const byte) init_screen::m#0
Constant inlined print_cls::$0 = (const byte*) print_screen#0+(word/signed word/dword/signed dword) 1000
Constant inlined print_cls::$0 = (const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000
Constant inlined $0 = -(byte/signed byte/word/signed word/dword/signed dword) 95
Constant inlined print_cls::sc#0 = (const byte*) print_screen#0
Constant inlined print_cls::sc#0 = (const byte*) print_line_cursor#0
Constant inlined $1 = -(byte/signed byte/word/signed word/dword/signed dword) 64
Constant inlined main::at#0 = ((byte*))(word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 4
Constant inlined $2 = -(byte/signed byte/word/signed word/dword/signed dword) 32
@ -957,10 +1137,10 @@ print_cls: scope:[print_cls] from init_screen
[78] phi()
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[79] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_screen#0 print_cls::@1/(byte*) print_cls::sc#1 )
[79] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_line_cursor#0 print_cls::@1/(byte*) print_cls::sc#1 )
[80] *((byte*) print_cls::sc#2) ← (byte) ' '
[81] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[82] if((byte*) print_cls::sc#1!=(const byte*) print_screen#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
[82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[83] return
@ -1030,11 +1210,13 @@ VARIABLE REGISTER WEIGHTS
(byte) print_char_at::ch#2 2.0
(byte) print_char_at::ch#3 4.0
(byte) print_char_at::ch#4 6.0
(byte*) print_char_cursor
(void()) print_cls()
(byte*) print_cls::sc
(byte*) print_cls::sc#1 16.5
(byte*) print_cls::sc#2 16.5
(byte[]) print_hextab
(byte*) print_line_cursor
(void()) print_sbyte_at((signed byte) print_sbyte_at::b , (byte*) print_sbyte_at::at)
(byte*) print_sbyte_at::at
(byte*) print_sbyte_at::at#0 22.0
@ -1126,7 +1308,7 @@ INITIAL ASM
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.label print_screen = $400
.label print_line_cursor = $400
.label ap = $fd
.label bp = $fe
.label cp = $ff
@ -1606,10 +1788,10 @@ print_cls: {
.label sc = $15
//SEG153 [79] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
b1_from_print_cls:
//SEG154 [79] phi (byte*) print_cls::sc#2 = (const byte*) print_screen#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1
lda #<print_screen
//SEG154 [79] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1
lda #<print_line_cursor
sta sc
lda #>print_screen
lda #>print_line_cursor
sta sc+1
jmp b1
//SEG155 [79] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
@ -1627,12 +1809,12 @@ print_cls: {
bne !+
inc sc+1
!:
//SEG160 [82] if((byte*) print_cls::sc#1!=(const byte*) print_screen#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1
//SEG160 [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1
lda sc+1
cmp #>print_screen+$3e8
cmp #>print_line_cursor+$3e8
bne b1_from_b1
lda sc
cmp #<print_screen+$3e8
cmp #<print_line_cursor+$3e8
bne b1_from_b1
jmp breturn
//SEG161 print_cls::@return
@ -1697,7 +1879,7 @@ Statement [72] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed wor
Statement [73] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (const byte) init_screen::WHITE#0 [ init_screen::COLS#3 init_screen::m#2 ] ( main:3::init_screen:6 [ init_screen::COLS#3 init_screen::m#2 ] ) always clobbers reg byte a reg byte y
Statement [74] (byte*) init_screen::COLS#1 ← (byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ init_screen::m#2 init_screen::COLS#1 ] ( main:3::init_screen:6 [ init_screen::m#2 init_screen::COLS#1 ] ) always clobbers reg byte a
Statement [80] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:3::init_screen:6::print_cls:64 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y
Statement [82] if((byte*) print_cls::sc#1!=(const byte*) print_screen#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:3::init_screen:6::print_cls:64 [ print_cls::sc#1 ] ) always clobbers reg byte a
Statement [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:3::init_screen:6::print_cls:64 [ print_cls::sc#1 ] ) always clobbers reg byte a
Statement [8] (signed byte) print_sbyte_at::b#1 ← *((const signed byte[]) vals#0 + (byte) main::k#2) [ main::k#2 main::at#4 print_sbyte_at::b#1 ] ( main:3 [ main::k#2 main::at#4 print_sbyte_at::b#1 ] ) always clobbers reg byte a
Statement [9] (byte*) print_sbyte_at::at#0 ← (byte*) main::at#4 [ main::k#2 main::at#4 print_sbyte_at::b#1 print_sbyte_at::at#0 ] ( main:3 [ main::k#2 main::at#4 print_sbyte_at::b#1 print_sbyte_at::at#0 ] ) always clobbers reg byte a
Statement [11] (byte*) main::at#1 ← (byte*) main::at#4 + (byte/signed byte/word/signed word/dword/signed dword) 4 [ main::k#2 main::at#1 ] ( main:3 [ main::k#2 main::at#1 ] ) always clobbers reg byte a
@ -1726,7 +1908,7 @@ Statement [72] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed wor
Statement [73] *((byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (const byte) init_screen::WHITE#0 [ init_screen::COLS#3 init_screen::m#2 ] ( main:3::init_screen:6 [ init_screen::COLS#3 init_screen::m#2 ] ) always clobbers reg byte a reg byte y
Statement [74] (byte*) init_screen::COLS#1 ← (byte*) init_screen::COLS#3 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ init_screen::m#2 init_screen::COLS#1 ] ( main:3::init_screen:6 [ init_screen::m#2 init_screen::COLS#1 ] ) always clobbers reg byte a
Statement [80] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:3::init_screen:6::print_cls:64 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y
Statement [82] if((byte*) print_cls::sc#1!=(const byte*) print_screen#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:3::init_screen:6::print_cls:64 [ print_cls::sc#1 ] ) always clobbers reg byte a
Statement [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:3::init_screen:6::print_cls:64 [ print_cls::sc#1 ] ) always clobbers reg byte a
Potential registers zp ZP_BYTE:2 [ main::k#2 main::k#1 ] : zp ZP_BYTE:2 , reg byte x ,
Potential registers zp ZP_WORD:3 [ main::at#4 main::at#1 ] : zp ZP_WORD:3 ,
Potential registers zp ZP_WORD:5 [ main::at_line#2 main::at#2 ] : zp ZP_WORD:5 ,
@ -1798,7 +1980,7 @@ ASSEMBLER BEFORE OPTIMIZATION
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.label print_screen = $400
.label print_line_cursor = $400
.label ap = $fd
.label bp = $fe
.label cp = $ff
@ -2235,10 +2417,10 @@ print_cls: {
.label sc = 2
//SEG153 [79] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
b1_from_print_cls:
//SEG154 [79] phi (byte*) print_cls::sc#2 = (const byte*) print_screen#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1
lda #<print_screen
//SEG154 [79] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1
lda #<print_line_cursor
sta sc
lda #>print_screen
lda #>print_line_cursor
sta sc+1
jmp b1
//SEG155 [79] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
@ -2256,12 +2438,12 @@ print_cls: {
bne !+
inc sc+1
!:
//SEG160 [82] if((byte*) print_cls::sc#1!=(const byte*) print_screen#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1
//SEG160 [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1
lda sc+1
cmp #>print_screen+$3e8
cmp #>print_line_cursor+$3e8
bne b1_from_b1
lda sc
cmp #<print_screen+$3e8
cmp #<print_line_cursor+$3e8
bne b1_from_b1
jmp breturn
//SEG161 print_cls::@return
@ -2463,6 +2645,7 @@ FINAL SYMBOL TABLE
(byte) print_char_at::ch#2 ch zp ZP_BYTE:11 2.0
(byte) print_char_at::ch#3 ch zp ZP_BYTE:11 4.0
(byte) print_char_at::ch#4 ch zp ZP_BYTE:11 6.0
(byte*) print_char_cursor
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
@ -2471,6 +2654,8 @@ FINAL SYMBOL TABLE
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5
(byte[]) print_hextab
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor
(const byte*) print_line_cursor#0 print_line_cursor = ((byte*))(word/signed word/dword/signed dword) 1024
(void()) print_sbyte_at((signed byte) print_sbyte_at::b , (byte*) print_sbyte_at::at)
(label) print_sbyte_at::@1
(label) print_sbyte_at::@2
@ -2490,7 +2675,6 @@ FINAL SYMBOL TABLE
(signed byte) print_sbyte_at::b#4 b zp ZP_BYTE:10 21.499999999999993
(signed byte) print_sbyte_at::b#6 b zp ZP_BYTE:10 0.6666666666666666
(byte*) print_screen
(const byte*) print_screen#0 print_screen = ((byte*))(word/signed word/dword/signed dword) 1024
(signed byte[]) vals
(const signed byte[]) vals#0 vals = { -(byte/signed byte/word/signed word/dword/signed dword) 95, -(byte/signed byte/word/signed word/dword/signed dword) 64, -(byte/signed byte/word/signed word/dword/signed dword) 32, -(byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/signed byte/word/signed word/dword/signed dword) 95 }
@ -2521,7 +2705,7 @@ Score: 10542
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.label print_screen = $400
.label print_line_cursor = $400
.label ap = $fd
.label bp = $fe
.label cp = $ff
@ -2888,10 +3072,10 @@ init_screen: {
print_cls: {
.label sc = 2
//SEG153 [79] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
//SEG154 [79] phi (byte*) print_cls::sc#2 = (const byte*) print_screen#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1
lda #<print_screen
//SEG154 [79] phi (byte*) print_cls::sc#2 = (const byte*) print_line_cursor#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1
lda #<print_line_cursor
sta sc
lda #>print_screen
lda #>print_line_cursor
sta sc+1
//SEG155 [79] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
//SEG156 [79] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy
@ -2906,12 +3090,12 @@ print_cls: {
bne !+
inc sc+1
!:
//SEG160 [82] if((byte*) print_cls::sc#1!=(const byte*) print_screen#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1
//SEG160 [82] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1
lda sc+1
cmp #>print_screen+$3e8
cmp #>print_line_cursor+$3e8
bne b1
lda sc
cmp #<print_screen+$3e8
cmp #<print_line_cursor+$3e8
bne b1
//SEG161 print_cls::@return
//SEG162 [83] return

@ -84,6 +84,7 @@
(byte) print_char_at::ch#2 ch zp ZP_BYTE:11 2.0
(byte) print_char_at::ch#3 ch zp ZP_BYTE:11 4.0
(byte) print_char_at::ch#4 ch zp ZP_BYTE:11 6.0
(byte*) print_char_cursor
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
@ -92,6 +93,8 @@
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5
(byte[]) print_hextab
(const byte[]) print_hextab#0 print_hextab = (string) "0123456789abcdef"
(byte*) print_line_cursor
(const byte*) print_line_cursor#0 print_line_cursor = ((byte*))(word/signed word/dword/signed dword) 1024
(void()) print_sbyte_at((signed byte) print_sbyte_at::b , (byte*) print_sbyte_at::at)
(label) print_sbyte_at::@1
(label) print_sbyte_at::@2
@ -111,7 +114,6 @@
(signed byte) print_sbyte_at::b#4 b zp ZP_BYTE:10 21.499999999999993
(signed byte) print_sbyte_at::b#6 b zp ZP_BYTE:10 0.6666666666666666
(byte*) print_screen
(const byte*) print_screen#0 print_screen = ((byte*))(word/signed word/dword/signed dword) 1024
(signed byte[]) vals
(const signed byte[]) vals#0 vals = { -(byte/signed byte/word/signed word/dword/signed dword) 95, -(byte/signed byte/word/signed word/dword/signed dword) 64, -(byte/signed byte/word/signed word/dword/signed dword) 32, -(byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 16, (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 64, (byte/signed byte/word/signed word/dword/signed dword) 95 }

@ -4,7 +4,7 @@ CONTROL FLOW GRAPH SSA
(byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) print_line_cursor#0 ← (byte*) print_screen#0
(byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
to:@20
to:@12
print_str: scope:[print_str] from main
(byte*) print_char_cursor#21 ← phi( main/(byte*) print_char_cursor#19 )
(byte*) print_str::str#4 ← phi( main/(byte*) print_str::str#1 )
@ -50,6 +50,11 @@ print_ln::@return: scope:[print_ln] from print_ln::@2
(byte*) print_char_cursor#4 ← (byte*) print_char_cursor#12
return
to:@return
@12: scope:[] from @begin
(byte*) print_line_cursor#16 ← phi( @begin/(byte*) print_line_cursor#0 )
(byte*) print_char_cursor#22 ← phi( @begin/(byte*) print_char_cursor#0 )
(byte[]) print_hextab#0 ← (const string) $0
to:@20
main: scope:[main] from @20
(byte*) print_line_cursor#15 ← phi( @20/(byte*) print_line_cursor#14 )
(byte*) print_char_cursor#19 ← phi( @20/(byte*) print_char_cursor#20 )
@ -75,9 +80,9 @@ main::@return: scope:[main] from main::@2
(byte*) print_line_cursor#4 ← (byte*) print_line_cursor#10
return
to:@return
@20: scope:[] from @begin
(byte*) print_line_cursor#14 ← phi( @begin/(byte*) print_line_cursor#0 )
(byte*) print_char_cursor#20 ← phi( @begin/(byte*) print_char_cursor#0 )
@20: scope:[] from @12
(byte*) print_line_cursor#14 ← phi( @12/(byte*) print_line_cursor#16 )
(byte*) print_char_cursor#20 ← phi( @12/(byte*) print_char_cursor#22 )
call main
to:@21
@21: scope:[] from @20
@ -89,6 +94,8 @@ main::@return: scope:[main] from main::@2
@end: scope:[] from @21
SYMBOL TABLE SSA
(const string) $0 = (string) "0123456789abcdef"
(label) @12
(label) @20
(label) @21
(label) @begin
@ -114,6 +121,7 @@ SYMBOL TABLE SSA
(byte*) print_char_cursor#2
(byte*) print_char_cursor#20
(byte*) print_char_cursor#21
(byte*) print_char_cursor#22
(byte*) print_char_cursor#3
(byte*) print_char_cursor#4
(byte*) print_char_cursor#5
@ -121,6 +129,8 @@ SYMBOL TABLE SSA
(byte*) print_char_cursor#7
(byte*) print_char_cursor#8
(byte*) print_char_cursor#9
(byte[]) print_hextab
(byte[]) print_hextab#0
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_line_cursor#1
@ -130,6 +140,7 @@ SYMBOL TABLE SSA
(byte*) print_line_cursor#13
(byte*) print_line_cursor#14
(byte*) print_line_cursor#15
(byte*) print_line_cursor#16
(byte*) print_line_cursor#2
(byte*) print_line_cursor#3
(byte*) print_line_cursor#4
@ -158,7 +169,7 @@ SYMBOL TABLE SSA
(byte*) print_str::str#3
(byte*) print_str::str#4
Alias (byte*) print_char_cursor#0 = (byte*) print_line_cursor#0 (byte*) print_screen#0 (byte*) print_char_cursor#20 (byte*) print_line_cursor#14
Alias (byte*) print_char_cursor#0 = (byte*) print_line_cursor#0 (byte*) print_screen#0 (byte*) print_char_cursor#22 (byte*) print_line_cursor#16 (byte*) print_char_cursor#20 (byte*) print_line_cursor#14
Alias (byte*) print_str::str#2 = (byte*) print_str::str#3
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#9 (byte*) print_char_cursor#17 (byte*) print_char_cursor#2
Alias (byte*) print_line_cursor#1 = (byte*~) print_ln::$0 (byte*) print_line_cursor#7 (byte*) print_char_cursor#3 (byte*) print_line_cursor#8 (byte*) print_char_cursor#12 (byte*) print_line_cursor#2 (byte*) print_char_cursor#4
@ -188,9 +199,13 @@ Simple Condition (bool~) print_str::$0 if(*((byte*) print_str::str#2)!=(byte) '@
Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) print_char_cursor#0 = ((byte*))1024
Constant (const byte[]) print_hextab#0 = $0
Constant (const byte*) print_str::str#1 = main::str
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) @12
Culled Empty Block (label) main::@2
Culled Empty Block (label) @21
Successful SSA optimization Pass2CullEmptyBlocks
@ -212,9 +227,9 @@ Calls in [] to main:2
Calls in [main] to print_str:5 print_ln:7
Created 3 initial phi equivalence classes
Coalesced [14] print_line_cursor#16 ← print_line_cursor#1
Coalesced [14] print_line_cursor#17 ← print_line_cursor#1
Coalesced [22] print_str::str#5 ← print_str::str#0
Coalesced [23] print_char_cursor#22 ← print_char_cursor#1
Coalesced [23] print_char_cursor#23 ← print_char_cursor#1
Coalesced down to 3 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Adding NOP phi() at start of @begin
@ -280,6 +295,7 @@ VARIABLE REGISTER WEIGHTS
(byte*) print_char_cursor
(byte*) print_char_cursor#1 11.0
(byte*) print_char_cursor#10 4.4
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_line_cursor#1 16.5
(byte*) print_line_cursor#6 22.0
@ -645,6 +661,7 @@ FINAL SYMBOL TABLE
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:4 11.0
(byte*) print_char_cursor#10 print_char_cursor zp ZP_WORD:4 4.4
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:2 16.5
(byte*) print_line_cursor#6 print_line_cursor zp ZP_WORD:2 22.0

@ -8,6 +8,7 @@
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:4 11.0
(byte*) print_char_cursor#10 print_char_cursor zp ZP_WORD:4 4.4
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:2 16.5
(byte*) print_line_cursor#6 print_line_cursor zp ZP_WORD:2 22.0

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@6
@6: scope:[] from @begin
to:@7
@7: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @6
@end: scope:[] from @7
[3] phi()
main: scope:[main] from @6
main: scope:[main] from @7
[4] *((const byte*) GHOST_BYTE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
asm { sei }
[6] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0

@ -4,23 +4,90 @@ Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBa
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
(byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49
(byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54
(byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55
(byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
(word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) 1016
(byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248
(byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249
(byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264
(byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
(byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) 53271
(byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) 53275
(byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) 53276
(byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
(byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) 53282
(byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) 53283
(byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) 53284
(byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) 53285
(byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) 53286
(byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
(byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) 128
(byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
(byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
(byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte*) D016#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) 53267
(byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) 53268
(byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) 53273
(byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53274
(byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
(byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320
(byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321
(byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56322
(byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56323
(byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56333
(byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 127
(byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576
(byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56577
(byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578
(byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56579
(byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56589
(void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) 788
(void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) 65534
(byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
to:@3
@3: scope:[] from @begin
(byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
(byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
(byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
(byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
(byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13
(byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15
to:@4
@4: scope:[] from @begin
(byte*) GHOST_BYTE#0 ← ((byte*)) (word/signed word/dword/signed dword) 16383
to:@6
main: scope:[main] from @6
to:@7
main: scope:[main] from @7
*((byte*) GHOST_BYTE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
asm { sei }
*((byte*) CIA1_INTERRUPT#0) ← (byte) CIA_INTERRUPT_CLEAR#0
@ -59,45 +126,179 @@ irq_bottom_2: scope:[irq_bottom_2] from
irq_bottom_2::@return: scope:[irq_bottom_2] from irq_bottom_2
return
to:@return
@6: scope:[] from @3
@7: scope:[] from @4
call main
to:@7
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@end
@end: scope:[] from @7
@end: scope:[] from @8
SYMBOL TABLE SSA
(label) @3
(label) @6
(label) @4
(label) @7
(label) @8
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BROWN
(byte) BROWN#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_A_DDR#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA1_PORT_B_DDR
(byte*) CIA1_PORT_B_DDR#0
(byte*) CIA2_INTERRUPT
(byte*) CIA2_INTERRUPT#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B#0
(byte*) CIA2_PORT_B_DDR
(byte*) CIA2_PORT_B_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D016
(byte*) D016#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte*) GHOST_BYTE
(byte*) GHOST_BYTE#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_BG#0
(byte) IRQ_COLLISION_SPRITE
(byte) IRQ_COLLISION_SPRITE#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_LIGHTPEN
(byte) IRQ_LIGHTPEN#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(void()**) KERNEL_IRQ
(void()**) KERNEL_IRQ#0
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_X#0
(byte*) LIGHTPEN_Y
(byte*) LIGHTPEN_Y#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte) LIGHT_GREY
(byte) LIGHT_GREY#0
(byte) ORANGE
(byte) ORANGE#0
(byte) PINK
(byte) PINK#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte) PROCPORT_BASIC_KERNEL_IO
(byte) PROCPORT_BASIC_KERNEL_IO#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_KERNEL_IO#0
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_ALL#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(byte*) SPRITES_COLS
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_MC1
(byte*) SPRITES_MC1#0
(byte*) SPRITES_MC2
(byte*) SPRITES_MC2#0
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PRIORITY#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte) VIC_BMM
(byte) VIC_BMM#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte*) VIC_CONTROL2
(byte*) VIC_CONTROL2#0
(byte) VIC_CSEL
(byte) VIC_CSEL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_MCM
(byte) VIC_MCM#0
(byte*) VIC_MEMORY
(byte*) VIC_MEMORY#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) VIC_RST8
(byte) VIC_RST8#0
(byte) WHITE
(byte) WHITE#0
(byte) YELLOW
(byte) YELLOW#0
interrupt(KERNEL_MIN)(void()) irq_bottom_1()
(byte/word/dword~) irq_bottom_1::$0
(void()*~) irq_bottom_1::$1
@ -109,20 +310,87 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(void()*~) main::$0
(label) main::@return
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Successful SSA optimization Pass2CullEmptyBlocks
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte) PROCPORT_RAM_ALL#0 = 48
Constant (const byte) PROCPORT_RAM_IO#0 = 53
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 49
Constant (const byte) PROCPORT_KERNEL_IO#0 = 54
Constant (const byte) PROCPORT_BASIC_KERNEL_IO#0 = 55
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const word) SPRITE_PTRS#0 = 1016
Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248
Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249
Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = ((byte*))53271
Constant (const byte*) SPRITES_PRIORITY#0 = ((byte*))53275
Constant (const byte*) SPRITES_MC#0 = ((byte*))53276
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte*) BGCOL1#0 = ((byte*))53281
Constant (const byte*) BGCOL2#0 = ((byte*))53282
Constant (const byte*) BGCOL3#0 = ((byte*))53283
Constant (const byte*) BGCOL4#0 = ((byte*))53284
Constant (const byte*) SPRITES_MC1#0 = ((byte*))53285
Constant (const byte*) SPRITES_MC2#0 = ((byte*))53286
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265
Constant (const byte*) D011#0 = ((byte*))53265
Constant (const byte) VIC_RST8#0 = 128
Constant (const byte) VIC_ECM#0 = 64
Constant (const byte) VIC_BMM#0 = 32
Constant (const byte) VIC_DEN#0 = 16
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) VIC_CONTROL2#0 = ((byte*))53270
Constant (const byte*) D016#0 = ((byte*))53270
Constant (const byte) VIC_MCM#0 = 16
Constant (const byte) VIC_CSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))53272
Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272
Constant (const byte*) LIGHTPEN_X#0 = ((byte*))53267
Constant (const byte*) LIGHTPEN_Y#0 = ((byte*))53268
Constant (const byte*) IRQ_STATUS#0 = ((byte*))53273
Constant (const byte*) IRQ_ENABLE#0 = ((byte*))53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte) IRQ_COLLISION_BG#0 = 2
Constant (const byte) IRQ_COLLISION_SPRITE#0 = 4
Constant (const byte) IRQ_LIGHTPEN#0 = 8
Constant (const byte*) COLS#0 = ((byte*))55296
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321
Constant (const byte*) CIA1_PORT_A_DDR#0 = ((byte*))56322
Constant (const byte*) CIA1_PORT_B_DDR#0 = ((byte*))56323
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576
Constant (const byte*) CIA2_PORT_B#0 = ((byte*))56577
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578
Constant (const byte*) CIA2_PORT_B_DDR#0 = ((byte*))56579
Constant (const byte*) CIA2_INTERRUPT#0 = ((byte*))56589
Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534
Constant (const byte) BLACK#0 = 0
Constant (const byte) WHITE#0 = 1
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) YELLOW#0 = 7
Constant (const byte) ORANGE#0 = 8
Constant (const byte) BROWN#0 = 9
Constant (const byte) PINK#0 = 10
Constant (const byte) DARK_GREY#0 = 11
Constant (const byte) GREY#0 = 12
Constant (const byte) LIGHT_GREEN#0 = 13
Constant (const byte) LIGHT_BLUE#0 = 14
Constant (const byte) LIGHT_GREY#0 = 15
Constant (const byte*) GHOST_BYTE#0 = ((byte*))16383
Constant (const void()*) main::$0 = &irq_bottom_1
Constant (const void()*) irq_bottom_1::$1 = &irq_bottom_2
@ -130,7 +398,8 @@ Constant (const void()*) irq_bottom_2::$0 = &irq_bottom_1
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte/word/dword) irq_bottom_1::$0 = 255^VIC_RSEL#0
Successful SSA optimization Pass2ConstantIdentification
Culled Empty Block (label) @3
Successful SSA optimization PassNEliminateUnusedVars
Culled Empty Block (label) @4
Successful SSA optimization Pass2CullEmptyBlocks
Constant inlined irq_bottom_2::$0 = &interrupt(KERNEL_MIN)(void()) irq_bottom_1()
Constant inlined irq_bottom_1::$0 = (byte/word/signed word/dword/signed dword) 255^(const byte) VIC_RSEL#0
@ -138,7 +407,7 @@ Constant inlined main::$0 = &interrupt(KERNEL_MIN)(void()) irq_bottom_1()
Constant inlined irq_bottom_1::$1 = &interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
Successful SSA optimization Pass2ConstantInlining
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @6
Adding NOP phi() at start of @7
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:2
@ -146,20 +415,20 @@ Calls in [] to main:2
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @6
Adding NOP phi() at start of @7
Adding NOP phi() at start of @end
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@6
@6: scope:[] from @begin
to:@7
@7: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @6
@end: scope:[] from @7
[3] phi()
main: scope:[main] from @6
main: scope:[main] from @7
[4] *((const byte*) GHOST_BYTE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
asm { sei }
[6] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
@ -197,19 +466,86 @@ irq_bottom_1::@return: scope:[irq_bottom_1] from irq_bottom_1
VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte*) GHOST_BYTE
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
interrupt(KERNEL_MIN)(void()) irq_bottom_1()
interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
(void()) main()
@ -238,15 +574,15 @@ INITIAL ASM
.label GHOST_BYTE = $3fff
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
b6_from_bbegin:
jmp b6
//SEG4 @6
b6:
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
b7_from_bbegin:
jmp b7
//SEG4 @7
b7:
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @6 to @end [phi:@6->@end]
bend_from_b6:
//SEG6 [3] phi from @7 to @end [phi:@7->@end]
bend_from_b7:
jmp bend
//SEG7 @end
bend:
@ -396,15 +732,15 @@ ASSEMBLER BEFORE OPTIMIZATION
.label GHOST_BYTE = $3fff
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
b6_from_bbegin:
jmp b6
//SEG4 @6
b6:
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
b7_from_bbegin:
jmp b7
//SEG4 @7
b7:
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @6 to @end [phi:@6->@end]
bend_from_b6:
//SEG6 [3] phi from @7 to @end [phi:@7->@end]
bend_from_b7:
jmp bend
//SEG7 @end
bend:
@ -503,17 +839,17 @@ irq_bottom_1: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b6
Removing instruction jmp b7
Removing instruction jmp bend
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction bbegin:
Removing instruction b6_from_bbegin:
Removing instruction bend_from_b6:
Removing instruction b7_from_bbegin:
Removing instruction bend_from_b7:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b6:
Removing instruction b7:
Removing instruction bend:
Removing instruction breturn:
Removing instruction breturn:
@ -521,35 +857,102 @@ Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
FINAL SYMBOL TABLE
(label) @6
(label) @7
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(const byte*) CIA1_INTERRUPT#0 CIA1_INTERRUPT = ((byte*))(word/dword/signed dword) 56333
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(const byte) CIA_INTERRUPT_CLEAR#0 CIA_INTERRUPT_CLEAR = (byte/signed byte/word/signed word/dword/signed dword) 127
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte*) GHOST_BYTE
(const byte*) GHOST_BYTE#0 GHOST_BYTE = ((byte*))(word/signed word/dword/signed dword) 16383
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(const byte*) IRQ_ENABLE#0 IRQ_ENABLE = ((byte*))(word/dword/signed dword) 53274
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(const byte) IRQ_RASTER#0 IRQ_RASTER = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) IRQ_STATUS
(const byte*) IRQ_STATUS#0 IRQ_STATUS = ((byte*))(word/dword/signed dword) 53273
(void()**) KERNEL_IRQ
(const void()**) KERNEL_IRQ#0 KERNEL_IRQ = ((void()**))(word/signed word/dword/signed dword) 788
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(const byte) RED#0 RED = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = ((byte*))(word/dword/signed dword) 53265
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) YELLOW
interrupt(KERNEL_MIN)(void()) irq_bottom_1()
(label) irq_bottom_1::@return
interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()
@ -581,11 +984,11 @@ Score: 160
.const RED = 2
.label GHOST_BYTE = $3fff
//SEG2 @begin
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
//SEG4 @6
//SEG3 [1] phi from @begin to @7 [phi:@begin->@7]
//SEG4 @7
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @6 to @end [phi:@6->@end]
//SEG6 [3] phi from @7 to @end [phi:@7->@end]
//SEG7 @end
//SEG8 main
main: {

@ -1,32 +1,99 @@
(label) @6
(label) @7
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(const byte*) CIA1_INTERRUPT#0 CIA1_INTERRUPT = ((byte*))(word/dword/signed dword) 56333
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(const byte) CIA_INTERRUPT_CLEAR#0 CIA_INTERRUPT_CLEAR = (byte/signed byte/word/signed word/dword/signed dword) 127
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte*) GHOST_BYTE
(const byte*) GHOST_BYTE#0 GHOST_BYTE = ((byte*))(word/signed word/dword/signed dword) 16383
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(const byte*) IRQ_ENABLE#0 IRQ_ENABLE = ((byte*))(word/dword/signed dword) 53274
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(const byte) IRQ_RASTER#0 IRQ_RASTER = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) IRQ_STATUS
(const byte*) IRQ_STATUS#0 IRQ_STATUS = ((byte*))(word/dword/signed dword) 53273
(void()**) KERNEL_IRQ
(const void()**) KERNEL_IRQ#0 KERNEL_IRQ = ((void()**))(word/signed word/dword/signed dword) 788
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(const byte) RED#0 RED = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = ((byte*))(word/dword/signed dword) 53265
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) YELLOW
interrupt(KERNEL_MIN)(void()) irq_bottom_1()
(label) irq_bottom_1::@return
interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2()

@ -1,7 +1,7 @@
@begin: scope:[] from
[0] phi()
to:@11
@11: scope:[] from @begin
to:@12
@12: scope:[] from @begin
kickasm(location (const byte*) YSIN#0) {{ .var min = 50
.var max = 250-21
.var ampl = max-min;
@ -13,14 +13,14 @@
.for (var x=0;x<3; x++)
.byte pic.getSinglecolorByte(x,y)
}}
to:@14
@14: scope:[] from @11
to:@15
@15: scope:[] from @12
[3] phi()
[4] call main
to:@end
@end: scope:[] from @14
@end: scope:[] from @15
[5] phi()
main: scope:[main] from @14
main: scope:[main] from @15
asm { sei }
[7] call init
to:main::@1

@ -6,21 +6,87 @@ Inlined call (byte~) loop::$7 ← call plexFreeNextYpos
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
(byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49
(byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54
(byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55
(byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
(word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) 1016
(byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248
(byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249
(byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264
(byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
(byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) 53271
(byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) 53275
(byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) 53276
(byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
(byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) 53282
(byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) 53283
(byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) 53284
(byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) 53285
(byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) 53286
(byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
(byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) 128
(byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
(byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
(byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte*) D016#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) 53267
(byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) 53268
(byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) 53273
(byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53274
(byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
(byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320
(byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321
(byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56322
(byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56323
(byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56333
(byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 127
(byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576
(byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56577
(byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578
(byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56579
(byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56589
(void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) 788
(void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) 65534
(byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
to:@3
@3: scope:[] from @begin
(byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
(byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
(byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
(byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
(byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13
(byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15
to:@4
@4: scope:[] from @begin
(byte) PLEX_COUNT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
(word[PLEX_COUNT#0]) PLEX_XPOS#0 ← { fill( PLEX_COUNT#0, 0) }
(byte[PLEX_COUNT#0]) PLEX_YPOS#0 ← { fill( PLEX_COUNT#0, 0) }
@ -31,7 +97,7 @@ CONTROL FLOW GRAPH SSA
(byte) plex_show_idx#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) plex_sprite_idx#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) plex_sprite_msb#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
to:@8
to:@9
plexInit: scope:[plexInit] from init
(byte*) plexInit::screen#1 ← phi( init/(byte*) plexInit::screen#0 )
(byte*) plexInit::plexSetScreen1_screen#0 ← (byte*) plexInit::screen#1
@ -236,20 +302,20 @@ plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@3 plexSho
(byte) plex_sprite_msb#5 ← (byte) plex_sprite_msb#16
return
to:@return
@8: scope:[] from @3
(byte) plex_sprite_msb#41 ← phi( @3/(byte) plex_sprite_msb#0 )
(byte) plex_sprite_idx#41 ← phi( @3/(byte) plex_sprite_idx#0 )
(byte) plex_show_idx#41 ← phi( @3/(byte) plex_show_idx#0 )
(byte*) PLEX_SCREEN_PTR#27 ← phi( @3/(byte*) PLEX_SCREEN_PTR#0 )
@9: scope:[] from @4
(byte) plex_sprite_msb#41 ← phi( @4/(byte) plex_sprite_msb#0 )
(byte) plex_sprite_idx#41 ← phi( @4/(byte) plex_sprite_idx#0 )
(byte) plex_show_idx#41 ← phi( @4/(byte) plex_show_idx#0 )
(byte*) PLEX_SCREEN_PTR#27 ← phi( @4/(byte*) PLEX_SCREEN_PTR#0 )
(byte[8]) PLEX_FREE_YPOS#0 ← { fill( 8, 0) }
(byte) plex_free_next#4 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@11
@11: scope:[] from @8
(byte) plex_free_next#37 ← phi( @8/(byte) plex_free_next#4 )
(byte) plex_sprite_msb#38 ← phi( @8/(byte) plex_sprite_msb#41 )
(byte) plex_sprite_idx#39 ← phi( @8/(byte) plex_sprite_idx#41 )
(byte) plex_show_idx#39 ← phi( @8/(byte) plex_show_idx#41 )
(byte*) PLEX_SCREEN_PTR#25 ← phi( @8/(byte*) PLEX_SCREEN_PTR#27 )
to:@12
@12: scope:[] from @9
(byte) plex_free_next#37 ← phi( @9/(byte) plex_free_next#4 )
(byte) plex_sprite_msb#38 ← phi( @9/(byte) plex_sprite_msb#41 )
(byte) plex_sprite_idx#39 ← phi( @9/(byte) plex_sprite_idx#41 )
(byte) plex_show_idx#39 ← phi( @9/(byte) plex_show_idx#41 )
(byte*) PLEX_SCREEN_PTR#25 ← phi( @9/(byte*) PLEX_SCREEN_PTR#27 )
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) SPRITE#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
(byte*) YSIN#0 ← ((byte*)) (word/signed word/dword/signed dword) 8448
@ -264,16 +330,16 @@ plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@3 plexSho
.for (var x=0;x<3; x++)
.byte pic.getSinglecolorByte(x,y)
}}
to:@14
main: scope:[main] from @14
(byte*) YSIN#11 ← phi( @14/(byte*) YSIN#13 )
(byte*) SPRITE#4 ← phi( @14/(byte*) SPRITE#5 )
(byte) plex_free_next#31 ← phi( @14/(byte) plex_free_next#29 )
(byte) plex_sprite_msb#33 ← phi( @14/(byte) plex_sprite_msb#30 )
(byte) plex_sprite_idx#34 ← phi( @14/(byte) plex_sprite_idx#32 )
(byte) plex_show_idx#34 ← phi( @14/(byte) plex_show_idx#32 )
(byte*) SCREEN#2 ← phi( @14/(byte*) SCREEN#3 )
(byte*) PLEX_SCREEN_PTR#17 ← phi( @14/(byte*) PLEX_SCREEN_PTR#21 )
to:@15
main: scope:[main] from @15
(byte*) YSIN#11 ← phi( @15/(byte*) YSIN#13 )
(byte*) SPRITE#4 ← phi( @15/(byte*) SPRITE#5 )
(byte) plex_free_next#31 ← phi( @15/(byte) plex_free_next#29 )
(byte) plex_sprite_msb#33 ← phi( @15/(byte) plex_sprite_msb#30 )
(byte) plex_sprite_idx#34 ← phi( @15/(byte) plex_sprite_idx#32 )
(byte) plex_show_idx#34 ← phi( @15/(byte) plex_show_idx#32 )
(byte*) SCREEN#2 ← phi( @15/(byte*) SCREEN#3 )
(byte*) PLEX_SCREEN_PTR#17 ← phi( @15/(byte*) PLEX_SCREEN_PTR#21 )
asm { sei }
call init
to:main::@1
@ -618,48 +684,128 @@ loop::@return: scope:[loop] from loop::@1
(byte) plex_free_next#9 ← (byte) plex_free_next#19
return
to:@return
@14: scope:[] from @11
(byte*) YSIN#13 ← phi( @11/(byte*) YSIN#0 )
(byte*) SPRITE#5 ← phi( @11/(byte*) SPRITE#0 )
(byte*) SCREEN#3 ← phi( @11/(byte*) SCREEN#0 )
(byte) plex_free_next#29 ← phi( @11/(byte) plex_free_next#37 )
(byte) plex_sprite_msb#30 ← phi( @11/(byte) plex_sprite_msb#38 )
(byte) plex_sprite_idx#32 ← phi( @11/(byte) plex_sprite_idx#39 )
(byte) plex_show_idx#32 ← phi( @11/(byte) plex_show_idx#39 )
(byte*) PLEX_SCREEN_PTR#21 ← phi( @11/(byte*) PLEX_SCREEN_PTR#25 )
@15: scope:[] from @12
(byte*) YSIN#13 ← phi( @12/(byte*) YSIN#0 )
(byte*) SPRITE#5 ← phi( @12/(byte*) SPRITE#0 )
(byte*) SCREEN#3 ← phi( @12/(byte*) SCREEN#0 )
(byte) plex_free_next#29 ← phi( @12/(byte) plex_free_next#37 )
(byte) plex_sprite_msb#30 ← phi( @12/(byte) plex_sprite_msb#38 )
(byte) plex_sprite_idx#32 ← phi( @12/(byte) plex_sprite_idx#39 )
(byte) plex_show_idx#32 ← phi( @12/(byte) plex_show_idx#39 )
(byte*) PLEX_SCREEN_PTR#21 ← phi( @12/(byte*) PLEX_SCREEN_PTR#25 )
call main
to:@15
@15: scope:[] from @14
(byte) plex_free_next#20 ← phi( @14/(byte) plex_free_next#6 )
(byte) plex_sprite_msb#22 ← phi( @14/(byte) plex_sprite_msb#7 )
(byte) plex_sprite_idx#21 ← phi( @14/(byte) plex_sprite_idx#6 )
(byte) plex_show_idx#21 ← phi( @14/(byte) plex_show_idx#6 )
(byte*) PLEX_SCREEN_PTR#14 ← phi( @14/(byte*) PLEX_SCREEN_PTR#4 )
to:@16
@16: scope:[] from @15
(byte) plex_free_next#20 ← phi( @15/(byte) plex_free_next#6 )
(byte) plex_sprite_msb#22 ← phi( @15/(byte) plex_sprite_msb#7 )
(byte) plex_sprite_idx#21 ← phi( @15/(byte) plex_sprite_idx#6 )
(byte) plex_show_idx#21 ← phi( @15/(byte) plex_show_idx#6 )
(byte*) PLEX_SCREEN_PTR#14 ← phi( @15/(byte*) PLEX_SCREEN_PTR#4 )
(byte*) PLEX_SCREEN_PTR#7 ← (byte*) PLEX_SCREEN_PTR#14
(byte) plex_show_idx#10 ← (byte) plex_show_idx#21
(byte) plex_sprite_idx#10 ← (byte) plex_sprite_idx#21
(byte) plex_sprite_msb#11 ← (byte) plex_sprite_msb#22
(byte) plex_free_next#10 ← (byte) plex_free_next#20
to:@end
@end: scope:[] from @15
@end: scope:[] from @16
SYMBOL TABLE SSA
(word/signed word/dword/signed dword~) $0
(label) @11
(label) @14
(label) @12
(label) @15
(label) @3
(label) @8
(label) @16
(label) @4
(label) @9
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BROWN
(byte) BROWN#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_A_DDR#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA1_PORT_B_DDR
(byte*) CIA1_PORT_B_DDR#0
(byte*) CIA2_INTERRUPT
(byte*) CIA2_INTERRUPT#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B#0
(byte*) CIA2_PORT_B_DDR
(byte*) CIA2_PORT_B_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D016
(byte*) D016#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_BG#0
(byte) IRQ_COLLISION_SPRITE
(byte) IRQ_COLLISION_SPRITE#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_LIGHTPEN
(byte) IRQ_LIGHTPEN#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(void()**) KERNEL_IRQ
(void()**) KERNEL_IRQ#0
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_X#0
(byte*) LIGHTPEN_Y
(byte*) LIGHTPEN_Y#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte) LIGHT_GREY
(byte) LIGHT_GREY#0
(byte) ORANGE
(byte) ORANGE#0
(byte) PINK
(byte) PINK#0
(byte) PLEX_COUNT
(byte) PLEX_COUNT#0
(byte[8]) PLEX_FREE_YPOS
@ -722,8 +868,28 @@ SYMBOL TABLE SSA
(word[PLEX_COUNT#0]) PLEX_XPOS#0
(byte[PLEX_COUNT#0]) PLEX_YPOS
(byte[PLEX_COUNT#0]) PLEX_YPOS#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte) PROCPORT_BASIC_KERNEL_IO
(byte) PROCPORT_BASIC_KERNEL_IO#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_KERNEL_IO#0
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_ALL#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(byte*) SCREEN
(byte*) SCREEN#0
(byte*) SCREEN#1
@ -740,18 +906,50 @@ SYMBOL TABLE SSA
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_MC1
(byte*) SPRITES_MC1#0
(byte*) SPRITES_MC2
(byte*) SPRITES_MC2#0
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PRIORITY#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte) VIC_BMM
(byte) VIC_BMM#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte*) VIC_CONTROL2
(byte*) VIC_CONTROL2#0
(byte) VIC_CSEL
(byte) VIC_CSEL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_MCM
(byte) VIC_MCM#0
(byte*) VIC_MEMORY
(byte*) VIC_MEMORY#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) VIC_RST8
(byte) VIC_RST8#0
(byte) WHITE
(byte) WHITE#0
(byte) YELLOW
(byte) YELLOW#0
(byte*) YSIN
(byte*) YSIN#0
(byte*) YSIN#1
@ -1479,19 +1677,85 @@ Simple Condition (bool~) loop::$10 if((byte) loop::ss#1!=rangelast(0,loop::$6))
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting && if()-condition to two if()s (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6
Successful SSA optimization Pass2ConditionalAndOrRewriting
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte) PROCPORT_RAM_ALL#0 = 48
Constant (const byte) PROCPORT_RAM_IO#0 = 53
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 49
Constant (const byte) PROCPORT_KERNEL_IO#0 = 54
Constant (const byte) PROCPORT_BASIC_KERNEL_IO#0 = 55
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const word) SPRITE_PTRS#0 = 1016
Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248
Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249
Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = ((byte*))53271
Constant (const byte*) SPRITES_PRIORITY#0 = ((byte*))53275
Constant (const byte*) SPRITES_MC#0 = ((byte*))53276
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte*) BGCOL1#0 = ((byte*))53281
Constant (const byte*) BGCOL2#0 = ((byte*))53282
Constant (const byte*) BGCOL3#0 = ((byte*))53283
Constant (const byte*) BGCOL4#0 = ((byte*))53284
Constant (const byte*) SPRITES_MC1#0 = ((byte*))53285
Constant (const byte*) SPRITES_MC2#0 = ((byte*))53286
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265
Constant (const byte*) D011#0 = ((byte*))53265
Constant (const byte) VIC_RST8#0 = 128
Constant (const byte) VIC_ECM#0 = 64
Constant (const byte) VIC_BMM#0 = 32
Constant (const byte) VIC_DEN#0 = 16
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) VIC_CONTROL2#0 = ((byte*))53270
Constant (const byte*) D016#0 = ((byte*))53270
Constant (const byte) VIC_MCM#0 = 16
Constant (const byte) VIC_CSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))53272
Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272
Constant (const byte*) LIGHTPEN_X#0 = ((byte*))53267
Constant (const byte*) LIGHTPEN_Y#0 = ((byte*))53268
Constant (const byte*) IRQ_STATUS#0 = ((byte*))53273
Constant (const byte*) IRQ_ENABLE#0 = ((byte*))53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte) IRQ_COLLISION_BG#0 = 2
Constant (const byte) IRQ_COLLISION_SPRITE#0 = 4
Constant (const byte) IRQ_LIGHTPEN#0 = 8
Constant (const byte*) COLS#0 = ((byte*))55296
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321
Constant (const byte*) CIA1_PORT_A_DDR#0 = ((byte*))56322
Constant (const byte*) CIA1_PORT_B_DDR#0 = ((byte*))56323
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576
Constant (const byte*) CIA2_PORT_B#0 = ((byte*))56577
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578
Constant (const byte*) CIA2_PORT_B_DDR#0 = ((byte*))56579
Constant (const byte*) CIA2_INTERRUPT#0 = ((byte*))56589
Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534
Constant (const byte) BLACK#0 = 0
Constant (const byte) WHITE#0 = 1
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) YELLOW#0 = 7
Constant (const byte) ORANGE#0 = 8
Constant (const byte) BROWN#0 = 9
Constant (const byte) PINK#0 = 10
Constant (const byte) DARK_GREY#0 = 11
Constant (const byte) GREY#0 = 12
Constant (const byte) LIGHT_GREEN#0 = 13
Constant (const byte) LIGHT_BLUE#0 = 14
Constant (const byte) LIGHT_GREY#0 = 15
Constant (const byte) PLEX_COUNT#0 = 32
Constant (const word/signed word/dword/signed dword) $0 = 1024+1016
Constant (const byte) plex_show_idx#0 = 0
@ -1560,13 +1824,13 @@ Resolved ranged next value loop::sy#1 ← ++ loop::sy#2 to ++
Resolved ranged comparison value if(loop::sy#1!=rangelast(0,loop::$1)) goto loop::@7 to (const byte/signed word/word/dword/signed dword) loop::$1+(byte/signed byte/word/signed word/dword/signed dword) 1
Resolved ranged next value loop::ss#1 ← ++ loop::ss#6 to ++
Resolved ranged comparison value if(loop::ss#1!=rangelast(0,loop::$6)) goto loop::@11 to (const byte/signed word/word/dword/signed dword) loop::$6+(byte/signed byte/word/signed word/dword/signed dword) 1
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) plexInit::@3
Culled Empty Block (label) plexSort::@4
Culled Empty Block (label) plexSort::@6
Culled Empty Block (label) plexSort::plexFreePrepare1_@2
Culled Empty Block (label) plexShowSprite::@3
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) main::@2
Culled Empty Block (label) init::@5
Culled Empty Block (label) loop::@2
@ -1576,7 +1840,7 @@ Culled Empty Block (label) loop::@10
Culled Empty Block (label) loop::plexFreeNextYpos1_@return
Culled Empty Block (label) loop::@29
Culled Empty Block (label) loop::@13
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Successful SSA optimization Pass2CullEmptyBlocks
Alias (byte) plexSort::m#2 = (byte~) plexSort::$1
Alias (byte) plexSort::s#3 = (byte~) plexSort::$4
@ -1648,7 +1912,7 @@ Added new block during phi lifting init::@6(between init::@1 and init::@1)
Added new block during phi lifting init::@7(between init::@2 and init::@2)
Added new block during phi lifting plexInit::@4(between plexInit::@1 and plexInit::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @14
Adding NOP phi() at start of @15
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of loop
@ -1693,7 +1957,7 @@ Culled Empty Block (label) init::@7
Culled Empty Block (label) init::@6
Culled Empty Block (label) plexInit::@4
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @14
Adding NOP phi() at start of @15
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of loop
@ -1706,8 +1970,8 @@ Adding NOP phi() at start of plexInit::plexSetScreen1
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@11
@11: scope:[] from @begin
to:@12
@12: scope:[] from @begin
kickasm(location (const byte*) YSIN#0) {{ .var min = 50
.var max = 250-21
.var ampl = max-min;
@ -1719,14 +1983,14 @@ FINAL CONTROL FLOW GRAPH
.for (var x=0;x<3; x++)
.byte pic.getSinglecolorByte(x,y)
}}
to:@14
@14: scope:[] from @11
to:@15
@15: scope:[] from @12
[3] phi()
[4] call main
to:@end
@end: scope:[] from @14
@end: scope:[] from @15
[5] phi()
main: scope:[main] from @14
main: scope:[main] from @15
asm { sei }
[7] call init
to:main::@1
@ -1920,10 +2184,50 @@ plexInit::@return: scope:[plexInit] from plexInit::@1
VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte) PLEX_COUNT
(byte[8]) PLEX_FREE_YPOS
(byte[PLEX_COUNT#0]) PLEX_PTR
@ -1931,17 +2235,43 @@ VARIABLE REGISTER WEIGHTS
(byte[PLEX_COUNT#0]) PLEX_SORTED_IDX
(word[PLEX_COUNT#0]) PLEX_XPOS
(byte[PLEX_COUNT#0]) PLEX_YPOS
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(byte*) SPRITE
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(byte*) YSIN
(void()) init()
(byte~) init::$6 22.0
@ -2151,20 +2481,20 @@ INITIAL ASM
.label plex_sprite_msb = 8
//SEG2 @begin
bbegin:
jmp b11
//SEG3 @11
b11:
jmp b12
//SEG3 @12
b12:
//SEG4 kickasm(location (const byte*) YSIN#0) {{ .var min = 50 .var max = 250-21 .var ampl = max-min; .for(var i=0;i<256;i++) .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) }}
//SEG5 kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) .for (var x=0;x<3; x++) .byte pic.getSinglecolorByte(x,y) }}
//SEG6 [3] phi from @11 to @14 [phi:@11->@14]
b14_from_b11:
jmp b14
//SEG7 @14
b14:
//SEG6 [3] phi from @12 to @15 [phi:@12->@15]
b15_from_b12:
jmp b15
//SEG7 @15
b15:
//SEG8 [4] call main
jsr main
//SEG9 [5] phi from @14 to @end [phi:@14->@end]
bend_from_b14:
//SEG9 [5] phi from @15 to @end [phi:@15->@end]
bend_from_b15:
jmp bend
//SEG10 @end
bend:
@ -2964,20 +3294,20 @@ ASSEMBLER BEFORE OPTIMIZATION
.label plex_sprite_msb = 5
//SEG2 @begin
bbegin:
jmp b11
//SEG3 @11
b11:
jmp b12
//SEG3 @12
b12:
//SEG4 kickasm(location (const byte*) YSIN#0) {{ .var min = 50 .var max = 250-21 .var ampl = max-min; .for(var i=0;i<256;i++) .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) }}
//SEG5 kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) .for (var x=0;x<3; x++) .byte pic.getSinglecolorByte(x,y) }}
//SEG6 [3] phi from @11 to @14 [phi:@11->@14]
b14_from_b11:
jmp b14
//SEG7 @14
b14:
//SEG6 [3] phi from @12 to @15 [phi:@12->@15]
b15_from_b12:
jmp b15
//SEG7 @15
b15:
//SEG8 [4] call main
jsr main
//SEG9 [5] phi from @14 to @end [phi:@14->@end]
bend_from_b14:
//SEG9 [5] phi from @15 to @end [phi:@15->@end]
bend_from_b15:
jmp bend
//SEG10 @end
bend:
@ -3504,8 +3834,8 @@ plexInit: {
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b11
Removing instruction jmp b14
Removing instruction jmp b12
Removing instruction jmp b15
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp breturn
@ -3562,9 +3892,9 @@ Replacing label b1_from_b1 with b1
Replacing label b2_from_b2 with b2
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b11:
Removing instruction b14_from_b11:
Removing instruction bend_from_b14:
Removing instruction b12:
Removing instruction b15_from_b12:
Removing instruction bend_from_b15:
Removing instruction b1_from_main:
Removing instruction loop_from_b1:
Removing instruction b1:
@ -3584,7 +3914,7 @@ Removing instruction plexSetScreen1_from_plexInit:
Removing instruction b1_from_plexSetScreen1:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b14:
Removing instruction b15:
Removing instruction bend:
Removing instruction b1:
Removing instruction breturn:
@ -3634,18 +3964,58 @@ Removing unreachable instruction jmp breturn
Succesful ASM optimization Pass5UnreachableCodeElimination
FINAL SYMBOL TABLE
(label) @11
(label) @14
(label) @12
(label) @15
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(const byte*) D011#0 D011 = ((byte*))(word/dword/signed dword) 53265
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte) PLEX_COUNT
(const byte) PLEX_COUNT#0 PLEX_COUNT = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte[8]) PLEX_FREE_YPOS
@ -3660,8 +4030,18 @@ FINAL SYMBOL TABLE
(const word[PLEX_COUNT#0]) PLEX_XPOS#0 PLEX_XPOS = { fill( PLEX_COUNT#0, 0) }
(byte[PLEX_COUNT#0]) PLEX_YPOS
(const byte[PLEX_COUNT#0]) PLEX_YPOS#0 PLEX_YPOS = { fill( PLEX_COUNT#0, 0) }
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITE
@ -3670,18 +4050,34 @@ FINAL SYMBOL TABLE
(const byte*) SPRITES_COLS#0 SPRITES_COLS = ((byte*))(word/dword/signed dword) 53287
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = ((byte*))(word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = ((byte*))(word/dword/signed dword) 53264
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) 53249
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(const byte) VIC_DEN#0 VIC_DEN = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(const byte) VIC_RST8#0 VIC_RST8 = (byte/word/signed word/dword/signed dword) 128
(byte) WHITE
(byte) YELLOW
(byte*) YSIN
(const byte*) YSIN#0 YSIN = ((byte*))(word/signed word/dword/signed dword) 8448
(void()) init()
@ -3865,14 +4261,14 @@ Score: 63466
.label plex_show_idx = 4
.label plex_sprite_msb = 5
//SEG2 @begin
//SEG3 @11
//SEG3 @12
//SEG4 kickasm(location (const byte*) YSIN#0) {{ .var min = 50 .var max = 250-21 .var ampl = max-min; .for(var i=0;i<256;i++) .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) }}
//SEG5 kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .for (var y=0; y<21; y++) .for (var x=0;x<3; x++) .byte pic.getSinglecolorByte(x,y) }}
//SEG6 [3] phi from @11 to @14 [phi:@11->@14]
//SEG7 @14
//SEG6 [3] phi from @12 to @15 [phi:@12->@15]
//SEG7 @15
//SEG8 [4] call main
jsr main
//SEG9 [5] phi from @14 to @end [phi:@14->@end]
//SEG9 [5] phi from @15 to @end [phi:@15->@end]
//SEG10 @end
//SEG11 main
main: {

@ -1,15 +1,55 @@
(label) @11
(label) @14
(label) @12
(label) @15
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(const byte*) D011#0 D011 = ((byte*))(word/dword/signed dword) 53265
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte) PLEX_COUNT
(const byte) PLEX_COUNT#0 PLEX_COUNT = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte[8]) PLEX_FREE_YPOS
@ -24,8 +64,18 @@
(const word[PLEX_COUNT#0]) PLEX_XPOS#0 PLEX_XPOS = { fill( PLEX_COUNT#0, 0) }
(byte[PLEX_COUNT#0]) PLEX_YPOS
(const byte[PLEX_COUNT#0]) PLEX_YPOS#0 PLEX_YPOS = { fill( PLEX_COUNT#0, 0) }
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITE
@ -34,18 +84,34 @@
(const byte*) SPRITES_COLS#0 SPRITES_COLS = ((byte*))(word/dword/signed dword) 53287
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = ((byte*))(word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = ((byte*))(word/dword/signed dword) 53264
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) 53249
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(const byte) VIC_DEN#0 VIC_DEN = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(const byte) VIC_RST8#0 VIC_RST8 = (byte/word/signed word/dword/signed dword) 128
(byte) WHITE
(byte) YELLOW
(byte*) YSIN
(const byte*) YSIN#0 YSIN = ((byte*))(word/signed word/dword/signed dword) 8448
(void()) init()

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@5
@5: scope:[] from @begin
to:@6
@6: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @5
@end: scope:[] from @6
[3] phi()
main: scope:[main] from @5
main: scope:[main] from @6
asm { sei }
to:main::@2
main::@2: scope:[main] from main main::@2 main::@5

@ -2,11 +2,87 @@ Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBa
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
(byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49
(byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54
(byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55
(byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
(word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) 1016
(byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248
(byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249
(byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264
(byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
(byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) 53271
(byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) 53275
(byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) 53276
(byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
(byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
to:@4
main: scope:[main] from @5
(byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) 53282
(byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) 53283
(byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) 53284
(byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) 53285
(byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) 53286
(byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
(byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) 128
(byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
(byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
(byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte*) D016#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) 53267
(byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) 53268
(byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) 53273
(byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53274
(byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
(byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320
(byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321
(byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56322
(byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56323
(byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56333
(byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 127
(byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576
(byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56577
(byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578
(byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56579
(byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56589
(void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) 788
(void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) 65534
(byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
(byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
(byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
(byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
(byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13
(byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15
to:@5
main: scope:[main] from @6
asm { sei }
to:main::@2
main::@1: scope:[main] from main::@7
@ -28,9 +104,9 @@ main::@7: scope:[main] from main::@5
main::@return: scope:[main] from main::@7
return
to:@return
@4: scope:[] from @begin
@5: scope:[] from @begin
(byte[]) rastercols#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 12, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 12, (byte/signed byte/word/signed word/dword/signed dword) 12, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 12, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 12, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 12, (byte/signed byte/word/signed word/dword/signed dword) 12, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 12, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/word/signed word/dword/signed dword) 255 }
to:@5
to:@6
raster: scope:[raster] from main::@5
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
(byte) raster::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -50,25 +126,177 @@ raster::@1: scope:[raster] from raster raster::@1
raster::@return: scope:[raster] from raster::@1
return
to:@return
@5: scope:[] from @4
call main
to:@6
@6: scope:[] from @5
call main
to:@7
@7: scope:[] from @6
to:@end
@end: scope:[] from @6
@end: scope:[] from @7
SYMBOL TABLE SSA
(label) @4
(label) @5
(label) @6
(label) @7
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BROWN
(byte) BROWN#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_A_DDR#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA1_PORT_B_DDR
(byte*) CIA1_PORT_B_DDR#0
(byte*) CIA2_INTERRUPT
(byte*) CIA2_INTERRUPT#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B#0
(byte*) CIA2_PORT_B_DDR
(byte*) CIA2_PORT_B_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D016
(byte*) D016#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_BG#0
(byte) IRQ_COLLISION_SPRITE
(byte) IRQ_COLLISION_SPRITE#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_LIGHTPEN
(byte) IRQ_LIGHTPEN#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(void()**) KERNEL_IRQ
(void()**) KERNEL_IRQ#0
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_X#0
(byte*) LIGHTPEN_Y
(byte*) LIGHTPEN_Y#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte) LIGHT_GREY
(byte) LIGHT_GREY#0
(byte) ORANGE
(byte) ORANGE#0
(byte) PINK
(byte) PINK#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte) PROCPORT_BASIC_KERNEL_IO
(byte) PROCPORT_BASIC_KERNEL_IO#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_KERNEL_IO#0
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_ALL#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(byte*) SPRITES_COLS
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_MC1
(byte*) SPRITES_MC1#0
(byte*) SPRITES_MC2
(byte*) SPRITES_MC2#0
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PRIORITY#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte) VIC_BMM
(byte) VIC_BMM#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte*) VIC_CONTROL2
(byte*) VIC_CONTROL2#0
(byte) VIC_CSEL
(byte) VIC_CSEL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_MCM
(byte) VIC_MCM#0
(byte*) VIC_MEMORY
(byte*) VIC_MEMORY#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) VIC_RST8
(byte) VIC_RST8#0
(byte) WHITE
(byte) WHITE#0
(byte) YELLOW
(byte) YELLOW#0
(void()) main()
(bool~) main::$0
(bool~) main::$1
@ -94,15 +322,91 @@ SYMBOL TABLE SSA
(byte[]) rastercols#0
Culled Empty Block (label) main::@1
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Successful SSA optimization Pass2CullEmptyBlocks
Simple Condition (bool~) main::$0 if(*((byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@2
Simple Condition (bool~) main::$1 if(*((byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@3
Simple Condition (bool~) raster::$0 if((byte) raster::col#1!=(byte/word/signed word/dword/signed dword) 255) goto raster::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte) PROCPORT_RAM_ALL#0 = 48
Constant (const byte) PROCPORT_RAM_IO#0 = 53
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 49
Constant (const byte) PROCPORT_KERNEL_IO#0 = 54
Constant (const byte) PROCPORT_BASIC_KERNEL_IO#0 = 55
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const word) SPRITE_PTRS#0 = 1016
Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248
Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249
Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = ((byte*))53271
Constant (const byte*) SPRITES_PRIORITY#0 = ((byte*))53275
Constant (const byte*) SPRITES_MC#0 = ((byte*))53276
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte*) BGCOL1#0 = ((byte*))53281
Constant (const byte*) BGCOL2#0 = ((byte*))53282
Constant (const byte*) BGCOL3#0 = ((byte*))53283
Constant (const byte*) BGCOL4#0 = ((byte*))53284
Constant (const byte*) SPRITES_MC1#0 = ((byte*))53285
Constant (const byte*) SPRITES_MC2#0 = ((byte*))53286
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265
Constant (const byte*) D011#0 = ((byte*))53265
Constant (const byte) VIC_RST8#0 = 128
Constant (const byte) VIC_ECM#0 = 64
Constant (const byte) VIC_BMM#0 = 32
Constant (const byte) VIC_DEN#0 = 16
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) VIC_CONTROL2#0 = ((byte*))53270
Constant (const byte*) D016#0 = ((byte*))53270
Constant (const byte) VIC_MCM#0 = 16
Constant (const byte) VIC_CSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))53272
Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272
Constant (const byte*) LIGHTPEN_X#0 = ((byte*))53267
Constant (const byte*) LIGHTPEN_Y#0 = ((byte*))53268
Constant (const byte*) IRQ_STATUS#0 = ((byte*))53273
Constant (const byte*) IRQ_ENABLE#0 = ((byte*))53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte) IRQ_COLLISION_BG#0 = 2
Constant (const byte) IRQ_COLLISION_SPRITE#0 = 4
Constant (const byte) IRQ_LIGHTPEN#0 = 8
Constant (const byte*) COLS#0 = ((byte*))55296
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321
Constant (const byte*) CIA1_PORT_A_DDR#0 = ((byte*))56322
Constant (const byte*) CIA1_PORT_B_DDR#0 = ((byte*))56323
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576
Constant (const byte*) CIA2_PORT_B#0 = ((byte*))56577
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578
Constant (const byte*) CIA2_PORT_B_DDR#0 = ((byte*))56579
Constant (const byte*) CIA2_INTERRUPT#0 = ((byte*))56589
Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534
Constant (const byte) BLACK#0 = 0
Constant (const byte) WHITE#0 = 1
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) YELLOW#0 = 7
Constant (const byte) ORANGE#0 = 8
Constant (const byte) BROWN#0 = 9
Constant (const byte) PINK#0 = 10
Constant (const byte) DARK_GREY#0 = 11
Constant (const byte) GREY#0 = 12
Constant (const byte) LIGHT_GREEN#0 = 13
Constant (const byte) LIGHT_BLUE#0 = 14
Constant (const byte) LIGHT_GREY#0 = 15
Constant (const byte[]) rastercols#0 = { 11, 0, 11, 11, 12, 11, 12, 12, 15, 12, 15, 15, 1, 15, 1, 1, 15, 1, 15, 15, 12, 15, 12, 12, 11, 12, 11, 11, 0, 11, 0, 255 }
Constant (const byte) raster::i#0 = 0
Successful SSA optimization Pass2ConstantIdentification
@ -110,10 +414,11 @@ Consolidated array index constant in *(rastercols#0+raster::i#0)
Successful SSA optimization Pass2ConstantAdditionElimination
if() condition always true - replacing block destination if(true) goto main::@2
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Culled Empty Block (label) main::@7
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Successful SSA optimization Pass2CullEmptyBlocks
Inlining constant with var siblings (const byte) raster::i#0
Constant inlined raster::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
@ -121,7 +426,7 @@ Successful SSA optimization Pass2ConstantInlining
Simplifying constant plus zero rastercols#0+0
Added new block during phi lifting raster::@3(between raster::@1 and raster::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @5
Adding NOP phi() at start of @6
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@5
CALL GRAPH
@ -135,21 +440,21 @@ Coalesced [21] raster::i#3 ← raster::i#1
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) raster::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @5
Adding NOP phi() at start of @6
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@5
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@5
@5: scope:[] from @begin
to:@6
@6: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @5
@end: scope:[] from @6
[3] phi()
main: scope:[main] from @5
main: scope:[main] from @6
asm { sei }
to:main::@2
main::@2: scope:[main] from main main::@2 main::@5
@ -183,8 +488,84 @@ raster::@return: scope:[raster] from raster::@1
VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) main()
(void()) raster()
(byte) raster::col
@ -216,15 +597,15 @@ INITIAL ASM
.label BGCOL = $d021
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
b5_from_bbegin:
jmp b5
//SEG4 @5
b5:
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
b6_from_bbegin:
jmp b6
//SEG4 @6
b6:
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @5 to @end [phi:@5->@end]
bend_from_b5:
//SEG6 [3] phi from @6 to @end [phi:@6->@end]
bend_from_b6:
jmp bend
//SEG7 @end
bend:
@ -369,15 +750,15 @@ ASSEMBLER BEFORE OPTIMIZATION
.label BGCOL = $d021
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
b5_from_bbegin:
jmp b5
//SEG4 @5
b5:
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
b6_from_bbegin:
jmp b6
//SEG4 @6
b6:
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @5 to @end [phi:@5->@end]
bend_from_b5:
//SEG6 [3] phi from @6 to @end [phi:@6->@end]
bend_from_b6:
jmp bend
//SEG7 @end
bend:
@ -488,7 +869,7 @@ raster: {
rastercols: .byte $b, 0, $b, $b, $c, $b, $c, $c, $f, $c, $f, $f, 1, $f, 1, 1, $f, 1, $f, $f, $c, $f, $c, $c, $b, $c, $b, $b, 0, $b, 0, $ff
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b5
Removing instruction jmp b6
Removing instruction jmp bend
Removing instruction jmp b2
Removing instruction jmp b3
@ -498,12 +879,12 @@ Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b5_from_bbegin:
Removing instruction bend_from_b5:
Removing instruction b6_from_bbegin:
Removing instruction bend_from_b6:
Removing instruction b5_from_b3:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b5:
Removing instruction b6:
Removing instruction bend:
Removing instruction b5:
Removing instruction b1_from_raster:
@ -513,15 +894,91 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @5
(label) @6
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) main()
(label) main::@2
(label) main::@3
@ -555,11 +1012,11 @@ Score: 8346
.label BORDERCOL = $d020
.label BGCOL = $d021
//SEG2 @begin
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
//SEG4 @5
//SEG3 [1] phi from @begin to @6 [phi:@begin->@6]
//SEG4 @6
//SEG5 [2] call main
jsr main
//SEG6 [3] phi from @5 to @end [phi:@5->@end]
//SEG6 [3] phi from @6 to @end [phi:@6->@end]
//SEG7 @end
//SEG8 main
main: {

@ -1,12 +1,88 @@
(label) @5
(label) @6
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) main()
(label) main::@2
(label) main::@3

@ -1,7 +1,7 @@
@begin: scope:[] from
[0] phi()
to:@12
@12: scope:[] from @begin
to:@13
@13: scope:[] from @begin
kickasm(location (const byte*) COS#0) {{ {
.var min = -$7fff
.var max = $7fff
@ -12,8 +12,8 @@
}
}
}}
to:@15
@15: scope:[] from @12
to:@16
@16: scope:[] from @13
kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++)
.for (var x=0;x<3; x++)
@ -21,9 +21,9 @@
}}
[3] call main
to:@end
@end: scope:[] from @15
@end: scope:[] from @16
[4] phi()
main: scope:[main] from @15
main: scope:[main] from @16
asm { sei }
[6] call init
to:main::@1
@ -129,110 +129,112 @@ mulf8s_prepared::@6: scope:[mulf8s_prepared] from mulf8s_prepared
[66] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@1
to:mulf8s_prepared::@3
mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@6
[67] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0
[68] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#4
[69] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15
[67] (byte~) mulf8s_prepared::$4 ← > (word) mulf8s_prepared::m#0
[68] (byte~) mulf8s_prepared::$5 ← > (word) mulf8s_prepared::m#0
[69] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$5 - (byte)(signed byte) mulf8s_prepared::b#4
[70] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15
to:mulf8s_prepared::@1
mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@6
[70] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 )
[71] if((signed byte) mulf8s_prepared::b#4>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2
[71] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@6/(word) mulf8s_prepared::m#0 )
[72] if((signed byte) mulf8s_prepared::b#4>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf8s_prepared::@2
to:mulf8s_prepared::@4
mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1
[72] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5
[73] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0)
[74] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16
[73] (byte~) mulf8s_prepared::$10 ← > (word) mulf8s_prepared::m#5
[74] (byte~) mulf8s_prepared::$11 ← > (word) mulf8s_prepared::m#5
[75] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$11 - (byte)*((const signed byte*) mulf8s_prepared::memA#0)
[76] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16
to:mulf8s_prepared::@2
mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4
[75] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 )
[77] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 )
to:mulf8s_prepared::@return
mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2
[76] return
[78] return
to:@return
mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared
[77] *((const byte*) mulf8u_prepared::memB#0) ← (byte)(signed byte) mulf8s_prepared::b#4
[79] *((const byte*) mulf8u_prepared::memB#0) ← (byte)(signed byte) mulf8s_prepared::b#4
asm { ldxmemB sec sm1: ldamulf_sqr1_lo,x sm2: sbcmulf_sqr2_lo,x staresL sm3: ldamulf_sqr1_hi,x sm4: sbcmulf_sqr2_hi,x stamemB }
[79] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0)
[81] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0)
to:mulf8u_prepared::@return
mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared
[80] return
[82] return
to:@return
mulf8u_prepare: scope:[mulf8u_prepare] from anim::mulf8s_prepare1 anim::mulf8s_prepare2
[81] (byte) mulf8u_prepare::a#2 ← phi( anim::mulf8s_prepare1/(byte~) mulf8u_prepare::a#3 anim::mulf8s_prepare2/(byte~) mulf8u_prepare::a#4 )
[82] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2
[83] (byte) mulf8u_prepare::a#2 ← phi( anim::mulf8s_prepare1/(byte~) mulf8u_prepare::a#3 anim::mulf8s_prepare2/(byte~) mulf8u_prepare::a#4 )
[84] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2
asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 }
to:mulf8u_prepare::@return
mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare
[84] return
[86] return
to:@return
init: scope:[init] from main
[85] phi()
[86] call mulf_init
[87] phi()
[88] call mulf_init
to:init::@3
init::@3: scope:[init] from init
[87] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255
[89] *((const byte*) SPRITES_ENABLE#0) ← (byte/word/signed word/dword/signed dword) 255
to:init::@1
init::@1: scope:[init] from init::@1 init::@3
[88] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[89] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64
[90] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0
[91] (byte) init::i#1 ← ++ (byte) init::i#2
[92] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@1
[90] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@3/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[91] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← ((byte))(const byte*) SPRITE#0/(byte/signed byte/word/signed word/dword/signed dword) 64
[92] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0
[93] (byte) init::i#1 ← ++ (byte) init::i#2
[94] if((byte) init::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto init::@1
to:init::@return
init::@return: scope:[init] from init::@1
[93] return
[95] return
to:@return
mulf_init: scope:[mulf_init] from init
[94] phi()
[96] phi()
to:mulf_init::@1
mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@2
[95] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::x_2#2 )
[95] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
[95] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
[95] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(word) mulf_init::sqr#1 )
[95] (byte) mulf_init::c#2 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::c#1 )
[96] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[97] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
[98] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2
[97] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::x_2#2 )
[97] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_hi#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
[97] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[512]) mulf_sqr1_lo#0+(byte/signed byte/word/signed word/dword/signed dword) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
[97] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(word) mulf_init::sqr#1 )
[97] (byte) mulf_init::c#2 ← phi( mulf_init/(byte/signed byte/word/signed word/dword/signed dword) 0 mulf_init::@2/(byte) mulf_init::c#1 )
[98] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[99] (byte~) mulf_init::$2 ← (byte) mulf_init::c#1 & (byte/signed byte/word/signed word/dword/signed dword) 1
[100] if((byte~) mulf_init::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@2
to:mulf_init::@5
mulf_init::@5: scope:[mulf_init] from mulf_init::@1
[99] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[100] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
[101] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[102] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
to:mulf_init::@2
mulf_init::@2: scope:[mulf_init] from mulf_init::@1 mulf_init::@5
[101] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@5/(byte) mulf_init::x_2#1 )
[101] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@5/(word) mulf_init::sqr#2 )
[102] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3
[103] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5
[104] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3
[105] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6
[106] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[107] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[108] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
[109] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1
[103] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@5/(byte) mulf_init::x_2#1 )
[103] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@5/(word) mulf_init::sqr#2 )
[104] (byte~) mulf_init::$5 ← < (word) mulf_init::sqr#3
[105] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$5
[106] (byte~) mulf_init::$6 ← > (word) mulf_init::sqr#3
[107] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$6
[108] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[109] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[110] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
[111] if((byte*) mulf_init::sqr1_lo#1!=(const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512) goto mulf_init::@1
to:mulf_init::@3
mulf_init::@3: scope:[mulf_init] from mulf_init::@2 mulf_init::@4
[110] (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@2/(byte/word/signed word/dword/signed dword) 255 )
[110] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#1 mulf_init::@2/(const byte[512]) mulf_sqr2_hi#0 )
[110] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@2/(const byte[512]) mulf_sqr2_lo#0 )
[110] (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#1 mulf_init::@2/((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 )
[111] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
[112] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
[113] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[114] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[115] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12
[112] (byte) mulf_init::dir#2 ← phi( mulf_init::@4/(byte) mulf_init::dir#3 mulf_init::@2/(byte/word/signed word/dword/signed dword) 255 )
[112] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_hi#1 mulf_init::@2/(const byte[512]) mulf_sqr2_hi#0 )
[112] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@4/(byte*) mulf_init::sqr2_lo#1 mulf_init::@2/(const byte[512]) mulf_sqr2_lo#0 )
[112] (byte) mulf_init::x_255#2 ← phi( mulf_init::@4/(byte) mulf_init::x_255#1 mulf_init::@2/((byte))-(byte/signed byte/word/signed word/dword/signed dword) 1 )
[113] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[512]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
[114] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[512]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
[115] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[116] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[117] if((byte) mulf_init::x_255#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mulf_init::@12
to:mulf_init::@4
mulf_init::@4: scope:[mulf_init] from mulf_init::@12 mulf_init::@3
[116] (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#2 mulf_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[117] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
[118] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3
[118] (byte) mulf_init::dir#3 ← phi( mulf_init::@12/(byte) mulf_init::dir#2 mulf_init::@3/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[119] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
[120] if((byte*) mulf_init::sqr2_lo#1!=(const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) goto mulf_init::@3
to:mulf_init::@8
mulf_init::@8: scope:[mulf_init] from mulf_init::@4
[119] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256)
[120] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256)
[121] *((const byte[512]) mulf_sqr2_lo#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 256)
[122] *((const byte[512]) mulf_sqr2_hi#0+(word/signed word/dword/signed dword) 511) ← *((const byte[512]) mulf_sqr1_hi#0+(word/signed word/dword/signed dword) 256)
to:mulf_init::@return
mulf_init::@return: scope:[mulf_init] from mulf_init::@8
[121] return
[123] return
to:@return
mulf_init::@12: scope:[mulf_init] from mulf_init::@3
[122] phi()
[124] phi()
to:mulf_init::@4

File diff suppressed because it is too large Load Diff

@ -1,17 +1,68 @@
(label) @12
(label) @15
(label) @13
(label) @16
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte*) COS
(const byte*) COS#0 COS = ((byte*))(word/signed word/dword/signed dword) 8192
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(const byte) LIGHT_BLUE#0 LIGHT_BLUE = (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SIN
@ -22,12 +73,31 @@
(const byte*) SPRITES_COLS#0 SPRITES_COLS = ((byte*))(word/dword/signed dword) 53287
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = ((byte*))(word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = ((byte*))(word/dword/signed dword) 53264
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) 53249
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) anim()
(signed word~) anim::$10 $10 zp ZP_WORD:5 202.0
(signed word~) anim::$11 $11 zp ZP_WORD:5 202.0
@ -101,9 +171,11 @@
(label) main::@1
(label) main::@return
(signed word()) mulf8s_prepared((signed byte) mulf8s_prepared::b)
(byte~) mulf8s_prepared::$10 reg byte a 20.0
(byte~) mulf8s_prepared::$11 reg byte a 4.0
(byte~) mulf8s_prepared::$15 reg byte a 4.0
(byte~) mulf8s_prepared::$16 reg byte a 4.0
(byte~) mulf8s_prepared::$4 reg byte a 20.0
(byte~) mulf8s_prepared::$5 reg byte a 4.0
(label) mulf8s_prepared::@1
(label) mulf8s_prepared::@2
@ -116,13 +188,13 @@
(signed byte) mulf8s_prepared::b#1 reg byte y 202.0
(signed byte) mulf8s_prepared::b#2 reg byte y 202.0
(signed byte) mulf8s_prepared::b#3 reg byte y 202.0
(signed byte) mulf8s_prepared::b#4 reg byte y 31.23076923076923
(signed byte) mulf8s_prepared::b#4 reg byte y 29.0
(word) mulf8s_prepared::m
(word) mulf8s_prepared::m#0 m zp ZP_WORD:5 2.0
(word) mulf8s_prepared::m#1 m zp ZP_WORD:5 4.0
(word) mulf8s_prepared::m#2 m zp ZP_WORD:5 4.0
(word) mulf8s_prepared::m#4 m zp ZP_WORD:5 0.6666666666666666
(word) mulf8s_prepared::m#5 m zp ZP_WORD:5 2.5
(word) mulf8s_prepared::m#5 m zp ZP_WORD:5 2.4
(signed byte*) mulf8s_prepared::memA
(const signed byte*) mulf8s_prepared::memA#0 memA = ((signed byte*))(byte/word/signed word/dword/signed dword) 253
(signed word) mulf8s_prepared::return
@ -223,8 +295,10 @@ reg byte a [ anim::$22 ]
reg byte y [ anim::ypos#0 ]
reg byte x [ anim::i2#0 ]
reg byte a [ anim::$25 ]
reg byte a [ mulf8s_prepared::$4 ]
reg byte a [ mulf8s_prepared::$5 ]
reg byte a [ mulf8s_prepared::$15 ]
reg byte a [ mulf8s_prepared::$10 ]
reg byte a [ mulf8s_prepared::$11 ]
reg byte a [ mulf8s_prepared::$16 ]
reg byte a [ mulf_init::$2 ]

@ -317,6 +317,7 @@ sin16s_gen2: {
rts
}
mul16s: {
.label _5 = 2
.label _6 = $e
.label _16 = $e
.label m = $a
@ -334,6 +335,10 @@ mul16s: {
lda a+1
bpl b2
lda m+2
sta _5
lda m+3
sta _5+1
lda m+2
sta _6
lda m+3
sta _6+1

@ -1,21 +1,21 @@
@begin: scope:[] from
[0] phi()
to:@24
@24: scope:[] from @begin
to:@25
@25: scope:[] from @begin
kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
.byte logoPic.getMulticolorByte(x,cp+y*8)
}}
to:@27
@27: scope:[] from @24
to:@28
@28: scope:[] from @25
[2] phi()
[3] call main
to:@end
@end: scope:[] from @27
@end: scope:[] from @28
[4] phi()
main: scope:[main] from @27
main: scope:[main] from @28
asm { sei }
[6] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[7] *((const byte*) BGCOL2#0) ← (const byte) DARK_GREY#0
@ -254,199 +254,200 @@ mul16s::@6: scope:[mul16s] from mul16s
[122] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1
to:mul16s::@3
mul16s::@3: scope:[mul16s] from mul16s::@6
[123] (word~) mul16s::$6 ← > (dword) mul16s::m#0
[124] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0
[125] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
[123] (word~) mul16s::$5 ← > (dword) mul16s::m#0
[124] (word~) mul16s::$6 ← > (dword) mul16s::m#0
[125] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0
[126] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
to:mul16s::@1
mul16s::@1: scope:[mul16s] from mul16s::@3 mul16s::@6
[126] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
[127] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
to:mul16s::@2
mul16s::@2: scope:[mul16s] from mul16s::@1
[127] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
[128] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
to:mul16s::@return
mul16s::@return: scope:[mul16s] from mul16s::@2
[128] return
[129] return
to:@return
mul16u: scope:[mul16u] from mul16s mulu16_sel
[129] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
[129] (word) mul16u::b#2 ← phi( mul16s/((word))(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 )
[130] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
[130] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
[130] (word) mul16u::b#2 ← phi( mul16s/((word))(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 )
[131] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
to:mul16u::@1
mul16u::@1: scope:[mul16u] from mul16u mul16u::@4
[131] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
[131] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
[131] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
[132] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
[132] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
[132] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
[132] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
[133] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
to:mul16u::@return
mul16u::@return: scope:[mul16u] from mul16u::@1
[133] return
[134] return
to:@return
mul16u::@2: scope:[mul16u] from mul16u::@1
[134] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[135] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
[135] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[136] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
to:mul16u::@7
mul16u::@7: scope:[mul16u] from mul16u::@2
[136] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
[137] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
to:mul16u::@4
mul16u::@4: scope:[mul16u] from mul16u::@2 mul16u::@7
[137] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
[138] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[139] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[138] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
[139] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[140] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:mul16u::@1
sin16s: scope:[sin16s] from sin16s_gen2::@1
[140] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
[141] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
to:sin16s::@4
sin16s::@4: scope:[sin16s] from sin16s
[141] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
[142] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
to:sin16s::@1
sin16s::@1: scope:[sin16s] from sin16s sin16s::@4
[142] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[142] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
[143] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
[143] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[143] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
[144] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
to:sin16s::@5
sin16s::@5: scope:[sin16s] from sin16s::@1
[144] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
[145] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
to:sin16s::@2
sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5
[145] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
[146] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
[147] (word) sin16s::x1#0 ← > (dword~) sin16s::$6
[148] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
[149] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
[150] call mulu16_sel
[151] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
[146] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
[147] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
[148] (word) sin16s::x1#0 ← > (dword~) sin16s::$6
[149] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
[150] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
[151] call mulu16_sel
[152] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
to:sin16s::@8
sin16s::@8: scope:[sin16s] from sin16s::@2
[152] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
[153] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
[154] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
[155] call mulu16_sel
[156] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
[153] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
[154] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
[155] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
[156] call mulu16_sel
[157] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
to:sin16s::@9
sin16s::@9: scope:[sin16s] from sin16s::@8
[157] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
[158] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
[159] call mulu16_sel
[160] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
[158] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
[159] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
[160] call mulu16_sel
[161] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
to:sin16s::@10
sin16s::@10: scope:[sin16s] from sin16s::@9
[161] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
[162] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
[163] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
[164] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
[165] call mulu16_sel
[166] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
[162] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
[163] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
[164] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
[165] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
[166] call mulu16_sel
[167] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
to:sin16s::@11
sin16s::@11: scope:[sin16s] from sin16s::@10
[167] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
[168] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
[169] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
[170] call mulu16_sel
[171] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
[168] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
[169] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
[170] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
[171] call mulu16_sel
[172] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
to:sin16s::@12
sin16s::@12: scope:[sin16s] from sin16s::@11
[172] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
[173] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[174] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
[175] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15
[173] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
[174] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[175] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
[176] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15
to:sin16s::@6
sin16s::@6: scope:[sin16s] from sin16s::@12
[176] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
[177] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
to:sin16s::@3
sin16s::@3: scope:[sin16s] from sin16s::@15 sin16s::@6
[177] (signed word) sin16s::return#1 ← phi( sin16s::@15/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
[178] (signed word) sin16s::return#1 ← phi( sin16s::@15/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
to:sin16s::@return
sin16s::@return: scope:[sin16s] from sin16s::@3
[178] return
[179] return
to:@return
sin16s::@15: scope:[sin16s] from sin16s::@12
[179] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
[180] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
to:sin16s::@3
mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@11 sin16s::@2 sin16s::@8 sin16s::@9
[180] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@11/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 sin16s::@9/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[180] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 )
[180] (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#3 sin16s::@11/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@8/(word) mulu16_sel::v1#1 sin16s::@9/(word) mulu16_sel::v1#2 )
[181] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[182] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[183] call mul16u
[184] (dword) mul16u::return#3 ← (dword) mul16u::res#2
[181] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@11/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 sin16s::@9/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[181] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 )
[181] (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#3 sin16s::@11/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@8/(word) mulu16_sel::v1#1 sin16s::@9/(word) mulu16_sel::v1#2 )
[182] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[183] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[184] call mul16u
[185] (dword) mul16u::return#3 ← (dword) mul16u::res#2
to:mulu16_sel::@2
mulu16_sel::@2: scope:[mulu16_sel] from mulu16_sel
[185] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
[186] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
[187] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
[186] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
[187] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
[188] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
to:mulu16_sel::@return
mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@2
[188] return
[189] return
to:@return
div32u16u: scope:[div32u16u] from sin16s_gen2
[189] phi()
[190] call divr16u
[191] (word) divr16u::return#2 ← (word) divr16u::return#0
[190] phi()
[191] call divr16u
[192] (word) divr16u::return#2 ← (word) divr16u::return#0
to:div32u16u::@2
div32u16u::@2: scope:[div32u16u] from div32u16u
[192] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
[193] (word) divr16u::rem#4 ← (word) rem16u#1
[194] call divr16u
[195] (word) divr16u::return#3 ← (word) divr16u::return#0
[193] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
[194] (word) divr16u::rem#4 ← (word) rem16u#1
[195] call divr16u
[196] (word) divr16u::return#3 ← (word) divr16u::return#0
to:div32u16u::@3
div32u16u::@3: scope:[div32u16u] from div32u16u::@2
[196] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
[197] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
[197] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
[198] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
to:div32u16u::@return
div32u16u::@return: scope:[div32u16u] from div32u16u::@3
[198] return
[199] return
to:@return
divr16u: scope:[divr16u] from div32u16u div32u16u::@2
[199] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@2/<(const dword) PI2_u4f28#0 )
[199] (word) divr16u::rem#10 ← phi( div32u16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div32u16u::@2/(word) divr16u::rem#4 )
[200] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@2/<(const dword) PI2_u4f28#0 )
[200] (word) divr16u::rem#10 ← phi( div32u16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div32u16u::@2/(word) divr16u::rem#4 )
to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[200] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[200] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[200] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[200] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[201] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
[202] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[203] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
[204] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
[201] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[201] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[201] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[201] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[202] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
[203] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[204] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
[205] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1
[205] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
[206] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[206] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[207] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[208] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[209] if((word) divr16u::rem#6<(const word) XSIN_SIZE#0) goto divr16u::@3
[207] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[208] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[209] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[210] if((word) divr16u::rem#6<(const word) XSIN_SIZE#0) goto divr16u::@3
to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2
[210] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[211] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE#0
[211] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[212] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) XSIN_SIZE#0
to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[212] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[212] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[213] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[214] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
[213] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[213] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[214] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[215] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
to:divr16u::@6
divr16u::@6: scope:[divr16u] from divr16u::@3
[215] (word) rem16u#1 ← (word) divr16u::rem#11
[216] (word) rem16u#1 ← (word) divr16u::rem#11
to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@6
[216] return
[217] return
to:@return
fill: scope:[fill] from main::@3 main::@4
[217] (byte) fill::val#3 ← phi( main::@3/(const byte) BLACK#0 main::@4/(const byte) WHITE#0|(byte/signed byte/word/signed word/dword/signed dword) 8 )
[217] (byte*) fill::addr#0 ← phi( main::@3/(const byte*) SCREEN#0 main::@4/(const byte*) COLS#0 )
[218] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
[218] (byte) fill::val#3 ← phi( main::@3/(const byte) BLACK#0 main::@4/(const byte) WHITE#0|(byte/signed byte/word/signed word/dword/signed dword) 8 )
[218] (byte*) fill::addr#0 ← phi( main::@3/(const byte*) SCREEN#0 main::@4/(const byte*) COLS#0 )
[219] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
to:fill::@1
fill::@1: scope:[fill] from fill fill::@1
[219] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
[220] *((byte*) fill::addr#2) ← (byte) fill::val#3
[221] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[222] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
[220] (byte*) fill::addr#2 ← phi( fill/(byte*) fill::addr#0 fill::@1/(byte*) fill::addr#1 )
[221] *((byte*) fill::addr#2) ← (byte) fill::val#3
[222] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[223] if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
to:fill::@return
fill::@return: scope:[fill] from fill::@1
[223] return
[224] return
to:@return

File diff suppressed because it is too large Load Diff

@ -1,43 +1,113 @@
(label) @24
(label) @27
(label) @25
(label) @28
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(const byte*) BGCOL2#0 BGCOL2 = ((byte*))(word/dword/signed dword) 53282
(byte*) BGCOL3
(const byte*) BGCOL3#0 BGCOL3 = ((byte*))(word/dword/signed dword) 53283
(byte*) BGCOL4
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) 55296
(byte) CYAN
(byte*) D011
(byte*) D016
(const byte*) D016#0 D016 = ((byte*))(word/dword/signed dword) 53270
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) 53272
(byte) DARK_GREY
(const byte) DARK_GREY#0 DARK_GREY = (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte*) LOGO
(const byte*) LOGO#0 LOGO = ((byte*))(word/signed word/dword/signed dword) 8192
(byte) ORANGE
(word) PI2_u4f12
(dword) PI2_u4f28
(const dword) PI2_u4f28#0 PI2_u4f28 = (dword/signed dword) 1686629713
(byte) PINK
(word) PI_HALF_u4f12
(dword) PI_HALF_u4f28
(const dword) PI_HALF_u4f28#0 PI_HALF_u4f28 = (dword/signed dword) 421657428
(word) PI_u4f12
(dword) PI_u4f28
(const dword) PI_u4f28#0 PI_u4f28 = (dword/signed dword) 843314857
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(const byte) VIC_MCM#0 VIC_MCM = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(word) XSIN_SIZE
(const word) XSIN_SIZE#0 XSIN_SIZE = (word/signed word/dword/signed dword) 512
(byte) YELLOW
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(label) div32u16u::@2
(label) div32u16u::@3
@ -136,6 +206,7 @@
(byte*) main::toD0181_screen
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 $16 zp ZP_WORD:14 4.0
(word~) mul16s::$5 $5 zp ZP_WORD:2 20.0
(word~) mul16s::$6 $6 zp ZP_WORD:14 4.0
(label) mul16s::@1
(label) mul16s::@2
@ -206,8 +277,11 @@
(word) mulu16_sel::v2#3 v2 zp ZP_WORD:14 4.0
(word) mulu16_sel::v2#4 v2 zp ZP_WORD:14 4.0
(word) mulu16_sel::v2#5 v2 zp ZP_WORD:14 5.0
(signed word) rem16s
(word) rem16u
(word) rem16u#1 rem16u zp ZP_WORD:2 0.8
(signed byte) rem8s
(byte) rem8u
(void()) render_logo((signed word) render_logo::xpos)
(byte~) render_logo::$0 reg byte a 4.0
(byte~) render_logo::$1 reg byte a 4.0
@ -364,7 +438,7 @@
(word) xsin_idx#3 xsin_idx zp ZP_WORD:2 11.0
reg byte x [ main::ch#2 main::ch#1 ]
zp ZP_WORD:2 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 fill::addr#2 fill::addr#0 fill::addr#1 ]
zp ZP_WORD:2 [ xsin_idx#11 xsin_idx#19 xsin_idx#3 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 fill::addr#2 fill::addr#0 fill::addr#1 mul16s::$5 ]
reg byte x [ render_logo::screen_idx#19 render_logo::screen_idx#3 render_logo::screen_idx#17 render_logo::screen_idx#2 ]
reg byte y [ render_logo::logo_idx#11 render_logo::logo_idx#2 ]
reg byte y [ render_logo::logo_idx#10 render_logo::logo_idx#13 render_logo::logo_idx#3 ]

@ -1,21 +1,21 @@
@begin: scope:[] from
[0] phi()
to:@3
@3: scope:[] from @begin
to:@4
@4: scope:[] from @begin
kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
.byte logoPic.getMulticolorByte(x,cp+y*8)
}}
to:@5
@5: scope:[] from @3
to:@6
@6: scope:[] from @4
[2] phi()
[3] call main
to:@end
@end: scope:[] from @5
@end: scope:[] from @6
[4] phi()
main: scope:[main] from @5
main: scope:[main] from @6
[5] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[6] *((const byte*) BGCOL2#0) ← (const byte) DARK_GREY#0
[7] *((const byte*) BGCOL#0) ← *((const byte*) BGCOL2#0)

@ -3,20 +3,87 @@ Inlined call (byte~) main::$0 ← call toD018 (byte*) SCREEN (byte*) LOGO
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
(byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49
(byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54
(byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55
(byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
(word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) 1016
(byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248
(byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249
(byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264
(byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
(byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) 53271
(byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) 53275
(byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) 53276
(byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
(byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) 53282
(byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) 53283
(byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) 53284
(byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) 53285
(byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) 53286
(byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
(byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) 128
(byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
(byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
(byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte*) D016#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) 53267
(byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) 53268
(byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) 53273
(byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53274
(byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
(byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320
(byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321
(byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56322
(byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56323
(byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56333
(byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 127
(byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576
(byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56577
(byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578
(byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56579
(byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56589
(void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) 788
(void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) 65534
(byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
(byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
(byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
(byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11
to:@3
@3: scope:[] from @begin
(byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
(byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13
(byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15
to:@4
@4: scope:[] from @begin
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) LOGO#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
(byte/word/signed word/dword/signed dword~) $0 ← (byte/signed byte/word/signed word/dword/signed dword) 6 * (byte/signed byte/word/signed word/dword/signed dword) 40
@ -27,10 +94,10 @@ CONTROL FLOW GRAPH SSA
.for(var cp=0; cp<8; cp++)
.byte logoPic.getMulticolorByte(x,cp+y*8)
}}
to:@5
main: scope:[main] from @5
(byte*) LOGO#1 ← phi( @5/(byte*) LOGO#2 )
(byte*) SCREEN#1 ← phi( @5/(byte*) SCREEN#5 )
to:@6
main: scope:[main] from @6
(byte*) LOGO#1 ← phi( @6/(byte*) LOGO#2 )
(byte*) SCREEN#1 ← phi( @6/(byte*) SCREEN#5 )
*((byte*) BORDERCOL#0) ← (byte) WHITE#0
*((byte*) BGCOL2#0) ← (byte) DARK_GREY#0
*((byte*) BGCOL#0) ← *((byte*) BGCOL2#0)
@ -98,6 +165,8 @@ main::@2: scope:[main] from main::@1 main::@3
to:main::@return
main::@3: scope:[main] from main::@2
(byte*) SCREEN#4 ← phi( main::@2/(byte*) SCREEN#8 )
(byte*~) main::$8 ← (byte*) SCREEN#4 + (word/signed word/dword/signed dword) 999
(byte*~) main::$9 ← (byte*) SCREEN#4 + (word/signed word/dword/signed dword) 999
(byte*~) main::$10 ← (byte*) SCREEN#4 + (word/signed word/dword/signed dword) 999
*((byte*~) main::$10) ← ++ *((byte*~) main::$10)
kickasm {{ inc $d020 }}
@ -125,45 +194,137 @@ fill::@1: scope:[fill] from fill fill::@1
fill::@return: scope:[fill] from fill::@1
return
to:@return
@5: scope:[] from @3
(byte*) LOGO#2 ← phi( @3/(byte*) LOGO#0 )
(byte*) SCREEN#5 ← phi( @3/(byte*) SCREEN#0 )
@6: scope:[] from @4
(byte*) LOGO#2 ← phi( @4/(byte*) LOGO#0 )
(byte*) SCREEN#5 ← phi( @4/(byte*) SCREEN#0 )
call main
to:@6
@6: scope:[] from @5
to:@7
@7: scope:[] from @6
to:@end
@end: scope:[] from @6
@end: scope:[] from @7
SYMBOL TABLE SSA
(byte/word/signed word/dword/signed dword~) $0
(byte/signed word/word/dword/signed dword~) $1
(label) @3
(label) @5
(label) @4
(label) @6
(label) @7
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BROWN
(byte) BROWN#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_A_DDR#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA1_PORT_B_DDR
(byte*) CIA1_PORT_B_DDR#0
(byte*) CIA2_INTERRUPT
(byte*) CIA2_INTERRUPT#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B#0
(byte*) CIA2_PORT_B_DDR
(byte*) CIA2_PORT_B_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D016
(byte*) D016#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_BG#0
(byte) IRQ_COLLISION_SPRITE
(byte) IRQ_COLLISION_SPRITE#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_LIGHTPEN
(byte) IRQ_LIGHTPEN#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(void()**) KERNEL_IRQ
(void()**) KERNEL_IRQ#0
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_X#0
(byte*) LIGHTPEN_Y
(byte*) LIGHTPEN_Y#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte) LIGHT_GREY
(byte) LIGHT_GREY#0
(byte*) LOGO
(byte*) LOGO#0
(byte*) LOGO#1
(byte*) LOGO#2
(byte) ORANGE
(byte) ORANGE#0
(byte) PINK
(byte) PINK#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte) PROCPORT_BASIC_KERNEL_IO
(byte) PROCPORT_BASIC_KERNEL_IO#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_KERNEL_IO#0
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_ALL#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(byte*) SCREEN
(byte*) SCREEN#0
(byte*) SCREEN#1
@ -176,12 +337,54 @@ SYMBOL TABLE SSA
(byte*) SCREEN#7
(byte*) SCREEN#8
(byte*) SCREEN#9
(byte*) SPRITES_COLS
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_MC1
(byte*) SPRITES_MC1#0
(byte*) SPRITES_MC2
(byte*) SPRITES_MC2#0
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PRIORITY#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte) VIC_BMM
(byte) VIC_BMM#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte*) VIC_CONTROL2
(byte*) VIC_CONTROL2#0
(byte) VIC_CSEL
(byte) VIC_CSEL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_MCM
(byte) VIC_MCM#0
(byte*) VIC_MEMORY
(byte*) VIC_MEMORY#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) VIC_RST8
(byte) VIC_RST8#0
(byte) WHITE
(byte) WHITE#0
(byte) YELLOW
(byte) YELLOW#0
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(byte*~) fill::$0
(bool~) fill::$1
@ -215,6 +418,8 @@ SYMBOL TABLE SSA
(word/signed word/dword/signed dword~) main::$4
(byte/word/dword~) main::$5
(bool~) main::$7
(byte*~) main::$8
(byte*~) main::$9
(label) main::@1
(label) main::@10
(label) main::@11
@ -258,7 +463,7 @@ SYMBOL TABLE SSA
(byte*) main::toD0181_screen#0
(byte*) main::toD0181_screen#1
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Successful SSA optimization Pass2CullEmptyBlocks
Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1
Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1
@ -288,18 +493,85 @@ Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) main::$7 if((byte) main::ch#1!=rangelast(0,239)) goto main::@1
Simple Condition (bool~) fill::$1 if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte) PROCPORT_RAM_ALL#0 = 48
Constant (const byte) PROCPORT_RAM_IO#0 = 53
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 49
Constant (const byte) PROCPORT_KERNEL_IO#0 = 54
Constant (const byte) PROCPORT_BASIC_KERNEL_IO#0 = 55
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const word) SPRITE_PTRS#0 = 1016
Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248
Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249
Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = ((byte*))53271
Constant (const byte*) SPRITES_PRIORITY#0 = ((byte*))53275
Constant (const byte*) SPRITES_MC#0 = ((byte*))53276
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte*) BGCOL1#0 = ((byte*))53281
Constant (const byte*) BGCOL2#0 = ((byte*))53282
Constant (const byte*) BGCOL3#0 = ((byte*))53283
Constant (const byte*) BGCOL4#0 = ((byte*))53284
Constant (const byte*) SPRITES_MC1#0 = ((byte*))53285
Constant (const byte*) SPRITES_MC2#0 = ((byte*))53286
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265
Constant (const byte*) D011#0 = ((byte*))53265
Constant (const byte) VIC_RST8#0 = 128
Constant (const byte) VIC_ECM#0 = 64
Constant (const byte) VIC_BMM#0 = 32
Constant (const byte) VIC_DEN#0 = 16
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) VIC_CONTROL2#0 = ((byte*))53270
Constant (const byte*) D016#0 = ((byte*))53270
Constant (const byte) VIC_MCM#0 = 16
Constant (const byte) VIC_CSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))53272
Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272
Constant (const byte*) LIGHTPEN_X#0 = ((byte*))53267
Constant (const byte*) LIGHTPEN_Y#0 = ((byte*))53268
Constant (const byte*) IRQ_STATUS#0 = ((byte*))53273
Constant (const byte*) IRQ_ENABLE#0 = ((byte*))53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte) IRQ_COLLISION_BG#0 = 2
Constant (const byte) IRQ_COLLISION_SPRITE#0 = 4
Constant (const byte) IRQ_LIGHTPEN#0 = 8
Constant (const byte*) COLS#0 = ((byte*))55296
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321
Constant (const byte*) CIA1_PORT_A_DDR#0 = ((byte*))56322
Constant (const byte*) CIA1_PORT_B_DDR#0 = ((byte*))56323
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576
Constant (const byte*) CIA2_PORT_B#0 = ((byte*))56577
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578
Constant (const byte*) CIA2_PORT_B_DDR#0 = ((byte*))56579
Constant (const byte*) CIA2_INTERRUPT#0 = ((byte*))56589
Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534
Constant (const byte) BLACK#0 = 0
Constant (const byte) WHITE#0 = 1
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) YELLOW#0 = 7
Constant (const byte) ORANGE#0 = 8
Constant (const byte) BROWN#0 = 9
Constant (const byte) PINK#0 = 10
Constant (const byte) DARK_GREY#0 = 11
Constant (const byte) GREY#0 = 12
Constant (const byte) LIGHT_GREEN#0 = 13
Constant (const byte) LIGHT_BLUE#0 = 14
Constant (const byte) LIGHT_GREY#0 = 15
Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const byte*) LOGO#0 = ((byte*))8192
Constant (const byte/word/signed word/dword/signed dword) $0 = 6*40
@ -315,6 +587,8 @@ Constant (const byte*) fill::start#0 = SCREEN#0
Constant (const byte) fill::val#0 = BLACK#0
Constant (const byte) fill::val#1 = WHITE#0|8
Constant (const byte*) fill::start#1 = COLS#0
Constant (const byte*) main::$8 = SCREEN#0+999
Constant (const byte*) main::$9 = SCREEN#0+999
Constant (const byte*) main::$10 = SCREEN#0+999
Successful SSA optimization Pass2ConstantIdentification
Constant (const word) main::toD0181_$0#0 = ((word))main::toD0181_screen#0
@ -333,6 +607,7 @@ Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination if(true) goto main::@3
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Resolved ranged next value main::ch#1 ← ++ main::ch#2 to ++
@ -371,7 +646,7 @@ Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@12(between main::@1 and main::@1)
Added new block during phi lifting fill::@3(between fill::@1 and fill::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @5
Adding NOP phi() at start of @6
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::@10
@ -387,7 +662,7 @@ Coalesced down to 4 phi equivalence classes
Culled Empty Block (label) main::@12
Culled Empty Block (label) fill::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @5
Adding NOP phi() at start of @6
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::@10
@ -395,22 +670,22 @@ Adding NOP phi() at start of main::@10
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@3
@3: scope:[] from @begin
to:@4
@4: scope:[] from @begin
kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff))
.for (var y=0; y<6 ; y++)
.for (var x=0;x<40; x++)
.for(var cp=0; cp<8; cp++)
.byte logoPic.getMulticolorByte(x,cp+y*8)
}}
to:@5
@5: scope:[] from @3
to:@6
@6: scope:[] from @4
[2] phi()
[3] call main
to:@end
@end: scope:[] from @5
@end: scope:[] from @6
[4] phi()
main: scope:[main] from @5
main: scope:[main] from @6
[5] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
[6] *((const byte*) BGCOL2#0) ← (const byte) DARK_GREY#0
[7] *((const byte*) BGCOL#0) ← *((const byte*) BGCOL2#0)
@ -457,19 +732,86 @@ fill::@return: scope:[fill] from fill::@1
VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte*) LOGO
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(byte*) fill::addr
(byte*) fill::addr#0 2.0
@ -539,19 +881,19 @@ INITIAL ASM
.label LOGO = $2000
//SEG2 @begin
bbegin:
jmp b3
//SEG3 @3
b3:
jmp b4
//SEG3 @4
b4:
//SEG4 kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG5 [2] phi from @3 to @5 [phi:@3->@5]
b5_from_b3:
jmp b5
//SEG6 @5
b5:
//SEG5 [2] phi from @4 to @6 [phi:@4->@6]
b6_from_b4:
jmp b6
//SEG6 @6
b6:
//SEG7 [3] call main
jsr main
//SEG8 [4] phi from @5 to @end [phi:@5->@end]
bend_from_b5:
//SEG8 [4] phi from @6 to @end [phi:@6->@end]
bend_from_b6:
jmp bend
//SEG9 @end
bend:
@ -767,19 +1109,19 @@ ASSEMBLER BEFORE OPTIMIZATION
.label LOGO = $2000
//SEG2 @begin
bbegin:
jmp b3
//SEG3 @3
b3:
jmp b4
//SEG3 @4
b4:
//SEG4 kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG5 [2] phi from @3 to @5 [phi:@3->@5]
b5_from_b3:
jmp b5
//SEG6 @5
b5:
//SEG5 [2] phi from @4 to @6 [phi:@4->@6]
b6_from_b4:
jmp b6
//SEG6 @6
b6:
//SEG7 [3] call main
jsr main
//SEG8 [4] phi from @5 to @end [phi:@5->@end]
bend_from_b5:
//SEG8 [4] phi from @6 to @end [phi:@6->@end]
bend_from_b6:
jmp bend
//SEG9 @end
bend:
@ -928,8 +1270,8 @@ fill: {
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b3
Removing instruction jmp b5
Removing instruction jmp b4
Removing instruction jmp b6
Removing instruction jmp bend
Removing instruction jmp toD0181
Removing instruction jmp b9
@ -945,9 +1287,9 @@ Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b3:
Removing instruction b5_from_b3:
Removing instruction bend_from_b5:
Removing instruction b4:
Removing instruction b6_from_b4:
Removing instruction bend_from_b6:
Removing instruction toD0181_from_main:
Removing instruction toD0181:
Removing instruction b10_from_b9:
@ -956,7 +1298,7 @@ Removing instruction b1_from_b1:
Removing instruction b1_from_fill:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b5:
Removing instruction b6:
Removing instruction bend:
Removing instruction b9:
Removing instruction fill_from_b9:
@ -968,38 +1310,105 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @3
(label) @5
(label) @4
(label) @6
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(const byte*) BGCOL2#0 BGCOL2 = ((byte*))(word/dword/signed dword) 53282
(byte*) BGCOL3
(const byte*) BGCOL3#0 BGCOL3 = ((byte*))(word/dword/signed dword) 53283
(byte*) BGCOL4
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) 55296
(byte) CYAN
(byte*) D011
(byte*) D016
(const byte*) D016#0 D016 = ((byte*))(word/dword/signed dword) 53270
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) 53272
(byte) DARK_GREY
(const byte) DARK_GREY#0 DARK_GREY = (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte*) LOGO
(const byte*) LOGO#0 LOGO = ((byte*))(word/signed word/dword/signed dword) 8192
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(const byte) VIC_CSEL#0 VIC_CSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(const byte) VIC_MCM#0 VIC_MCM = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) YELLOW
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(label) fill::@1
(label) fill::@return
@ -1066,13 +1475,13 @@ Score: 3578
.label SCREEN = $400
.label LOGO = $2000
//SEG2 @begin
//SEG3 @3
//SEG3 @4
//SEG4 kickasm(location (const byte*) LOGO#0) {{ .var logoPic = LoadPicture("logo.png", List().add($444444, $808080, $000000, $ffffff)) .for (var y=0; y<6 ; y++) .for (var x=0;x<40; x++) .for(var cp=0; cp<8; cp++) .byte logoPic.getMulticolorByte(x,cp+y*8) }}
//SEG5 [2] phi from @3 to @5 [phi:@3->@5]
//SEG6 @5
//SEG5 [2] phi from @4 to @6 [phi:@4->@6]
//SEG6 @6
//SEG7 [3] call main
jsr main
//SEG8 [4] phi from @5 to @end [phi:@5->@end]
//SEG8 [4] phi from @6 to @end [phi:@6->@end]
//SEG9 @end
//SEG10 main
main: {

@ -1,35 +1,102 @@
(label) @3
(label) @5
(label) @4
(label) @6
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(const byte*) BGCOL2#0 BGCOL2 = ((byte*))(word/dword/signed dword) 53282
(byte*) BGCOL3
(const byte*) BGCOL3#0 BGCOL3 = ((byte*))(word/dword/signed dword) 53283
(byte*) BGCOL4
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) 55296
(byte) CYAN
(byte*) D011
(byte*) D016
(const byte*) D016#0 D016 = ((byte*))(word/dword/signed dword) 53270
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) 53272
(byte) DARK_GREY
(const byte) DARK_GREY#0 DARK_GREY = (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte*) LOGO
(const byte*) LOGO#0 LOGO = ((byte*))(word/signed word/dword/signed dword) 8192
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(const byte) VIC_CSEL#0 VIC_CSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(const byte) VIC_MCM#0 VIC_MCM = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) YELLOW
(void()) fill((byte*) fill::start , (word) fill::size , (byte) fill::val)
(label) fill::@1
(label) fill::@return

@ -312,6 +312,7 @@ sin16s_gen2: {
rts
}
mul16s: {
.label _5 = 2
.label _6 = 6
.label _16 = 6
.label m = $c
@ -329,6 +330,10 @@ mul16s: {
lda a+1
bpl b2
lda m+2
sta _5
lda m+3
sta _5+1
lda m+2
sta _6
lda m+3
sta _6+1

@ -1,7 +1,7 @@
@begin: scope:[] from
[0] phi()
to:@28
@28: scope:[] from @begin
to:@29
@29: scope:[] from @begin
kickasm {{ .label pc_restore = *
.pc = $1400
.for(var i=0; i<512; i++) {
@ -9,14 +9,14 @@
}
.pc = pc_restore
}}
to:@31
@31: scope:[] from @28
to:@32
@32: scope:[] from @29
[2] phi()
[3] call main
to:@end
@end: scope:[] from @31
@end: scope:[] from @32
[4] phi()
main: scope:[main] from @31
main: scope:[main] from @32
asm { sei }
[6] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[7] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
@ -187,261 +187,262 @@ mul16s::@6: scope:[mul16s] from mul16s
[94] if((signed word) mul16s::a#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@1
to:mul16s::@3
mul16s::@3: scope:[mul16s] from mul16s::@6
[95] (word~) mul16s::$6 ← > (dword) mul16s::m#0
[96] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0
[97] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
[95] (word~) mul16s::$5 ← > (dword) mul16s::m#0
[96] (word~) mul16s::$6 ← > (dword) mul16s::m#0
[97] (word~) mul16s::$16 ← (word~) mul16s::$6 - ((word))(const signed word) sin16s_gen2::ampl#0
[98] (dword) mul16s::m#1 ← (dword) mul16s::m#0 hi= (word~) mul16s::$16
to:mul16s::@1
mul16s::@1: scope:[mul16s] from mul16s::@3 mul16s::@6
[98] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
[99] (dword) mul16s::m#4 ← phi( mul16s::@3/(dword) mul16s::m#1 mul16s::@6/(dword) mul16s::m#0 )
to:mul16s::@2
mul16s::@2: scope:[mul16s] from mul16s::@1
[99] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
[100] (signed dword) mul16s::return#0 ← ((signed dword)) (dword) mul16s::m#4
to:mul16s::@return
mul16s::@return: scope:[mul16s] from mul16s::@2
[100] return
[101] return
to:@return
mul16u: scope:[mul16u] from mul16s mulu16_sel
[101] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
[101] (word) mul16u::b#2 ← phi( mul16s/((word))(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 )
[102] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
[102] (word) mul16u::a#6 ← phi( mul16s/(word~) mul16u::a#8 mulu16_sel/(word) mul16u::a#2 )
[102] (word) mul16u::b#2 ← phi( mul16s/((word))(const signed word) sin16s_gen2::ampl#0 mulu16_sel/(word) mul16u::b#1 )
[103] (dword) mul16u::mb#0 ← ((dword)) (word) mul16u::b#2
to:mul16u::@1
mul16u::@1: scope:[mul16u] from mul16u mul16u::@4
[103] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
[103] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
[103] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
[104] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
[104] (dword) mul16u::mb#2 ← phi( mul16u/(dword) mul16u::mb#0 mul16u::@4/(dword) mul16u::mb#1 )
[104] (dword) mul16u::res#2 ← phi( mul16u/(byte/signed byte/word/signed word/dword/signed dword) 0 mul16u::@4/(dword) mul16u::res#6 )
[104] (word) mul16u::a#3 ← phi( mul16u/(word) mul16u::a#6 mul16u::@4/(word) mul16u::a#0 )
[105] if((word) mul16u::a#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@2
to:mul16u::@return
mul16u::@return: scope:[mul16u] from mul16u::@1
[105] return
[106] return
to:@return
mul16u::@2: scope:[mul16u] from mul16u::@1
[106] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[107] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
[107] (byte/word~) mul16u::$1 ← (word) mul16u::a#3 & (byte/signed byte/word/signed word/dword/signed dword) 1
[108] if((byte/word~) mul16u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16u::@4
to:mul16u::@7
mul16u::@7: scope:[mul16u] from mul16u::@2
[108] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
[109] (dword) mul16u::res#1 ← (dword) mul16u::res#2 + (dword) mul16u::mb#2
to:mul16u::@4
mul16u::@4: scope:[mul16u] from mul16u::@2 mul16u::@7
[109] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
[110] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[111] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[110] (dword) mul16u::res#6 ← phi( mul16u::@2/(dword) mul16u::res#2 mul16u::@7/(dword) mul16u::res#1 )
[111] (word) mul16u::a#0 ← (word) mul16u::a#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[112] (dword) mul16u::mb#1 ← (dword) mul16u::mb#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
to:mul16u::@1
sin16s: scope:[sin16s] from sin16s_gen2::@1
[112] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
[113] if((dword) sin16s::x#0<(const dword) PI_u4f28#0) goto sin16s::@1
to:sin16s::@4
sin16s::@4: scope:[sin16s] from sin16s
[113] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
[114] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28#0
to:sin16s::@1
sin16s::@1: scope:[sin16s] from sin16s sin16s::@4
[114] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[114] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
[115] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
[115] (byte) sin16s::isUpper#2 ← phi( sin16s/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@4/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[115] (dword) sin16s::x#4 ← phi( sin16s/(dword) sin16s::x#0 sin16s::@4/(dword) sin16s::x#1 )
[116] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28#0) goto sin16s::@2
to:sin16s::@5
sin16s::@5: scope:[sin16s] from sin16s::@1
[116] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
[117] (dword) sin16s::x#2 ← (const dword) PI_u4f28#0 - (dword) sin16s::x#4
to:sin16s::@2
sin16s::@2: scope:[sin16s] from sin16s::@1 sin16s::@5
[117] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
[118] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
[119] (word) sin16s::x1#0 ← > (dword~) sin16s::$6
[120] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
[121] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
[122] call mulu16_sel
[123] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
[118] (dword) sin16s::x#6 ← phi( sin16s::@1/(dword) sin16s::x#4 sin16s::@5/(dword) sin16s::x#2 )
[119] (dword~) sin16s::$6 ← (dword) sin16s::x#6 << (byte/signed byte/word/signed word/dword/signed dword) 3
[120] (word) sin16s::x1#0 ← > (dword~) sin16s::$6
[121] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0
[122] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0
[123] call mulu16_sel
[124] (word) mulu16_sel::return#0 ← (word) mulu16_sel::return#12
to:sin16s::@8
sin16s::@8: scope:[sin16s] from sin16s::@2
[124] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
[125] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
[126] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
[127] call mulu16_sel
[128] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
[125] (word) sin16s::x2#0 ← (word) mulu16_sel::return#0
[126] (word) mulu16_sel::v1#1 ← (word) sin16s::x2#0
[127] (word) mulu16_sel::v2#1 ← (word) sin16s::x1#0
[128] call mulu16_sel
[129] (word) mulu16_sel::return#1 ← (word) mulu16_sel::return#12
to:sin16s::@9
sin16s::@9: scope:[sin16s] from sin16s::@8
[129] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
[130] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
[131] call mulu16_sel
[132] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
[130] (word) sin16s::x3#0 ← (word) mulu16_sel::return#1
[131] (word) mulu16_sel::v1#2 ← (word) sin16s::x3#0
[132] call mulu16_sel
[133] (word) mulu16_sel::return#2 ← (word) mulu16_sel::return#12
to:sin16s::@10
sin16s::@10: scope:[sin16s] from sin16s::@9
[133] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
[134] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
[135] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
[136] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
[137] call mulu16_sel
[138] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
[134] (word) sin16s::x3_6#0 ← (word) mulu16_sel::return#2
[135] (word) sin16s::usinx#0 ← (word) sin16s::x1#0 - (word) sin16s::x3_6#0
[136] (word) mulu16_sel::v1#3 ← (word) sin16s::x3#0
[137] (word) mulu16_sel::v2#3 ← (word) sin16s::x1#0
[138] call mulu16_sel
[139] (word) mulu16_sel::return#10 ← (word) mulu16_sel::return#12
to:sin16s::@11
sin16s::@11: scope:[sin16s] from sin16s::@10
[139] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
[140] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
[141] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
[142] call mulu16_sel
[143] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
[140] (word) sin16s::x4#0 ← (word) mulu16_sel::return#10
[141] (word) mulu16_sel::v1#4 ← (word) sin16s::x4#0
[142] (word) mulu16_sel::v2#4 ← (word) sin16s::x1#0
[143] call mulu16_sel
[144] (word) mulu16_sel::return#11 ← (word) mulu16_sel::return#12
to:sin16s::@12
sin16s::@12: scope:[sin16s] from sin16s::@11
[144] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
[145] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[146] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
[147] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15
[145] (word) sin16s::x5#0 ← (word) mulu16_sel::return#11
[146] (word) sin16s::x5_128#0 ← (word) sin16s::x5#0 >> (byte/signed byte/word/signed word/dword/signed dword) 4
[147] (word) sin16s::usinx#1 ← (word) sin16s::usinx#0 + (word) sin16s::x5_128#0
[148] if((byte) sin16s::isUpper#2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto sin16s::@15
to:sin16s::@6
sin16s::@6: scope:[sin16s] from sin16s::@12
[148] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
[149] (signed word) sin16s::sinx#1 ← - (signed word)(word) sin16s::usinx#1
to:sin16s::@3
sin16s::@3: scope:[sin16s] from sin16s::@15 sin16s::@6
[149] (signed word) sin16s::return#1 ← phi( sin16s::@15/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
[150] (signed word) sin16s::return#1 ← phi( sin16s::@15/(signed word~) sin16s::return#5 sin16s::@6/(signed word) sin16s::sinx#1 )
to:sin16s::@return
sin16s::@return: scope:[sin16s] from sin16s::@3
[150] return
[151] return
to:@return
sin16s::@15: scope:[sin16s] from sin16s::@12
[151] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
[152] (signed word~) sin16s::return#5 ← (signed word)(word) sin16s::usinx#1
to:sin16s::@3
mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@11 sin16s::@2 sin16s::@8 sin16s::@9
[152] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@11/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 sin16s::@9/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[152] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 )
[152] (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#3 sin16s::@11/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@8/(word) mulu16_sel::v1#1 sin16s::@9/(word) mulu16_sel::v1#2 )
[153] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[154] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[155] call mul16u
[156] (dword) mul16u::return#3 ← (dword) mul16u::res#2
[153] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@11/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 sin16s::@8/(byte/signed byte/word/signed word/dword/signed dword) 1 sin16s::@9/(byte/signed byte/word/signed word/dword/signed dword) 1 )
[153] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#3 sin16s::@11/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@8/(word) mulu16_sel::v2#1 sin16s::@9/(dword/signed dword) 65536/(byte/signed byte/word/signed word/dword/signed dword) 6 )
[153] (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#3 sin16s::@11/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@8/(word) mulu16_sel::v1#1 sin16s::@9/(word) mulu16_sel::v1#2 )
[154] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[155] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[156] call mul16u
[157] (dword) mul16u::return#3 ← (dword) mul16u::res#2
to:mulu16_sel::@2
mulu16_sel::@2: scope:[mulu16_sel] from mulu16_sel
[157] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
[158] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
[159] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
[158] (dword~) mulu16_sel::$0 ← (dword) mul16u::return#3
[159] (dword~) mulu16_sel::$1 ← (dword~) mulu16_sel::$0 << (byte) mulu16_sel::select#5
[160] (word) mulu16_sel::return#12 ← > (dword~) mulu16_sel::$1
to:mulu16_sel::@return
mulu16_sel::@return: scope:[mulu16_sel] from mulu16_sel::@2
[160] return
[161] return
to:@return
div32u16u: scope:[div32u16u] from sin16s_gen2
[161] phi()
[162] call divr16u
[163] (word) divr16u::return#2 ← (word) divr16u::return#0
[162] phi()
[163] call divr16u
[164] (word) divr16u::return#2 ← (word) divr16u::return#0
to:div32u16u::@2
div32u16u::@2: scope:[div32u16u] from div32u16u
[164] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
[165] (word) divr16u::rem#4 ← (word) rem16u#1
[166] call divr16u
[167] (word) divr16u::return#3 ← (word) divr16u::return#0
[165] (word) div32u16u::quotient_hi#0 ← (word) divr16u::return#2
[166] (word) divr16u::rem#4 ← (word) rem16u#1
[167] call divr16u
[168] (word) divr16u::return#3 ← (word) divr16u::return#0
to:div32u16u::@3
div32u16u::@3: scope:[div32u16u] from div32u16u::@2
[168] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
[169] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
[169] (word) div32u16u::quotient_lo#0 ← (word) divr16u::return#3
[170] (dword) div32u16u::return#0 ← (word) div32u16u::quotient_hi#0 dw= (word) div32u16u::quotient_lo#0
to:div32u16u::@return
div32u16u::@return: scope:[div32u16u] from div32u16u::@3
[170] return
[171] return
to:@return
divr16u: scope:[divr16u] from div32u16u div32u16u::@2
[171] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@2/<(const dword) PI2_u4f28#0 )
[171] (word) divr16u::rem#10 ← phi( div32u16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div32u16u::@2/(word) divr16u::rem#4 )
[172] (word) divr16u::dividend#5 ← phi( div32u16u/>(const dword) PI2_u4f28#0 div32u16u::@2/<(const dword) PI2_u4f28#0 )
[172] (word) divr16u::rem#10 ← phi( div32u16u/(byte/signed byte/word/signed word/dword/signed dword) 0 div32u16u::@2/(word) divr16u::rem#4 )
to:divr16u::@1
divr16u::@1: scope:[divr16u] from divr16u divr16u::@3
[172] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[172] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[172] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[172] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[173] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
[174] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[175] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
[176] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
[173] (byte) divr16u::i#2 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(byte) divr16u::i#1 )
[173] (word) divr16u::quotient#3 ← phi( divr16u/(byte/signed byte/word/signed word/dword/signed dword) 0 divr16u::@3/(word) divr16u::return#0 )
[173] (word) divr16u::dividend#3 ← phi( divr16u/(word) divr16u::dividend#5 divr16u::@3/(word) divr16u::dividend#0 )
[173] (word) divr16u::rem#5 ← phi( divr16u/(word) divr16u::rem#10 divr16u::@3/(word) divr16u::rem#11 )
[174] (word) divr16u::rem#0 ← (word) divr16u::rem#5 << (byte/signed byte/word/signed word/dword/signed dword) 1
[175] (byte~) divr16u::$1 ← > (word) divr16u::dividend#3
[176] (byte~) divr16u::$2 ← (byte~) divr16u::$1 & (byte/word/signed word/dword/signed dword) 128
[177] if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2
to:divr16u::@4
divr16u::@4: scope:[divr16u] from divr16u::@1
[177] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
[178] (word) divr16u::rem#1 ← (word) divr16u::rem#0 | (byte/signed byte/word/signed word/dword/signed dword) 1
to:divr16u::@2
divr16u::@2: scope:[divr16u] from divr16u::@1 divr16u::@4
[178] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[179] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[180] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[181] if((word) divr16u::rem#6<(const word) SIN_SIZE#0) goto divr16u::@3
[179] (word) divr16u::rem#6 ← phi( divr16u::@1/(word) divr16u::rem#0 divr16u::@4/(word) divr16u::rem#1 )
[180] (word) divr16u::dividend#0 ← (word) divr16u::dividend#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[181] (word) divr16u::quotient#1 ← (word) divr16u::quotient#3 << (byte/signed byte/word/signed word/dword/signed dword) 1
[182] if((word) divr16u::rem#6<(const word) SIN_SIZE#0) goto divr16u::@3
to:divr16u::@5
divr16u::@5: scope:[divr16u] from divr16u::@2
[182] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[183] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE#0
[183] (word) divr16u::quotient#2 ← ++ (word) divr16u::quotient#1
[184] (word) divr16u::rem#2 ← (word) divr16u::rem#6 - (const word) SIN_SIZE#0
to:divr16u::@3
divr16u::@3: scope:[divr16u] from divr16u::@2 divr16u::@5
[184] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[184] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[185] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[186] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
[185] (word) divr16u::return#0 ← phi( divr16u::@2/(word) divr16u::quotient#1 divr16u::@5/(word) divr16u::quotient#2 )
[185] (word) divr16u::rem#11 ← phi( divr16u::@2/(word) divr16u::rem#6 divr16u::@5/(word) divr16u::rem#2 )
[186] (byte) divr16u::i#1 ← ++ (byte) divr16u::i#2
[187] if((byte) divr16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 16) goto divr16u::@1
to:divr16u::@6
divr16u::@6: scope:[divr16u] from divr16u::@3
[187] (word) rem16u#1 ← (word) divr16u::rem#11
[188] (word) rem16u#1 ← (word) divr16u::rem#11
to:divr16u::@return
divr16u::@return: scope:[divr16u] from divr16u::@6
[188] return
[189] return
to:@return
bitmap_clear: scope:[bitmap_clear] from main::@10
[189] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0) w= *((const byte[256]) bitmap_plot_ylo#0)
[190] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3
[190] (word~) bitmap_clear::$3 ← *((const byte[256]) bitmap_plot_yhi#0) w= *((const byte[256]) bitmap_plot_ylo#0)
[191] (byte*~) bitmap_clear::bitmap#5 ← (byte*)(word~) bitmap_clear::$3
to:bitmap_clear::@1
bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear bitmap_clear::@3
[191] (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@3/(byte) bitmap_clear::y#1 )
[191] (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*~) bitmap_clear::bitmap#5 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#1 )
[192] (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@3/(byte) bitmap_clear::y#1 )
[192] (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*~) bitmap_clear::bitmap#5 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#1 )
to:bitmap_clear::@2
bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 bitmap_clear::@2
[192] (byte) bitmap_clear::x#2 ← phi( bitmap_clear::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@2/(byte) bitmap_clear::x#1 )
[192] (byte*) bitmap_clear::bitmap#2 ← phi( bitmap_clear::@1/(byte*) bitmap_clear::bitmap#3 bitmap_clear::@2/(byte*) bitmap_clear::bitmap#1 )
[193] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[194] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2
[195] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2
[196] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2
[193] (byte) bitmap_clear::x#2 ← phi( bitmap_clear::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_clear::@2/(byte) bitmap_clear::x#1 )
[193] (byte*) bitmap_clear::bitmap#2 ← phi( bitmap_clear::@1/(byte*) bitmap_clear::bitmap#3 bitmap_clear::@2/(byte*) bitmap_clear::bitmap#1 )
[194] *((byte*) bitmap_clear::bitmap#2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[195] (byte*) bitmap_clear::bitmap#1 ← ++ (byte*) bitmap_clear::bitmap#2
[196] (byte) bitmap_clear::x#1 ← ++ (byte) bitmap_clear::x#2
[197] if((byte) bitmap_clear::x#1!=(byte/word/signed word/dword/signed dword) 200) goto bitmap_clear::@2
to:bitmap_clear::@3
bitmap_clear::@3: scope:[bitmap_clear] from bitmap_clear::@2
[197] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4
[198] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1
[198] (byte) bitmap_clear::y#1 ← ++ (byte) bitmap_clear::y#4
[199] if((byte) bitmap_clear::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto bitmap_clear::@1
to:bitmap_clear::@return
bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@3
[199] return
[200] return
to:@return
bitmap_init: scope:[bitmap_init] from main::@9
[200] phi()
[201] phi()
to:bitmap_init::@1
bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2
[201] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_init::@2/(byte) bitmap_init::x#1 )
[201] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte/word/signed word/dword/signed dword) 128 bitmap_init::@2/(byte) bitmap_init::bits#4 )
[202] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3
[203] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[204] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10
[202] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte/signed byte/word/signed word/dword/signed dword) 0 bitmap_init::@2/(byte) bitmap_init::x#1 )
[202] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte/word/signed word/dword/signed dword) 128 bitmap_init::@2/(byte) bitmap_init::bits#4 )
[203] *((const byte[256]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3
[204] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte/signed byte/word/signed word/dword/signed dword) 1
[205] if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@10
to:bitmap_init::@2
bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@10
[205] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@10/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte/word/signed word/dword/signed dword) 128 )
[206] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2
[207] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1
[206] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@10/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte/word/signed word/dword/signed dword) 128 )
[207] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2
[208] if((byte) bitmap_init::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@1
to:bitmap_init::@3
bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4
[208] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#4 bitmap_init::@2/(const byte*) BITMAP#0 )
[208] (byte) bitmap_init::y#2 ← phi( bitmap_init::@4/(byte) bitmap_init::y#1 bitmap_init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[209] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[210] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2
[211] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4
[212] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5
[213] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2
[214] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6
[215] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[216] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4
[209] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#4 bitmap_init::@2/(const byte*) BITMAP#0 )
[209] (byte) bitmap_init::y#2 ← phi( bitmap_init::@4/(byte) bitmap_init::y#1 bitmap_init::@2/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[210] (byte~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[211] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2
[212] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$3 | (byte~) bitmap_init::$4
[213] *((const byte[256]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5
[214] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2
[215] *((const byte[256]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6
[216] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte/signed byte/word/signed word/dword/signed dword) 7
[217] if((byte~) bitmap_init::$7!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4
to:bitmap_init::@7
bitmap_init::@7: scope:[bitmap_init] from bitmap_init::@3
[217] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8
[218] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8
to:bitmap_init::@4
bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@7
[218] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@7/(byte*) bitmap_init::yoffs#1 )
[219] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2
[220] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3
[219] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@7/(byte*) bitmap_init::yoffs#1 )
[220] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2
[221] if((byte) bitmap_init::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@3
to:bitmap_init::@return
bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4
[221] return
[222] return
to:@return
bitmap_init::@10: scope:[bitmap_init] from bitmap_init::@1
[222] phi()
[223] phi()
to:bitmap_init::@2
fill: scope:[fill] from main::@8
[223] phi()
[224] phi()
to:fill::@1
fill::@1: scope:[fill] from fill fill::@1
[224] (byte*) fill::addr#2 ← phi( fill/(const byte*) SCREEN#0 fill::@1/(byte*) fill::addr#1 )
[225] *((byte*) fill::addr#2) ← (const byte) WHITE#0
[226] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[227] if((byte*) fill::addr#1!=(const byte*) fill::end#0) goto fill::@1
[225] (byte*) fill::addr#2 ← phi( fill/(const byte*) SCREEN#0 fill::@1/(byte*) fill::addr#1 )
[226] *((byte*) fill::addr#2) ← (const byte) WHITE#0
[227] (byte*) fill::addr#1 ← ++ (byte*) fill::addr#2
[228] if((byte*) fill::addr#1!=(const byte*) fill::end#0) goto fill::@1
to:fill::@return
fill::@return: scope:[fill] from fill::@1
[228] return
[229] return
to:@return

File diff suppressed because it is too large Load Diff

@ -1,49 +1,116 @@
(label) @28
(label) @31
(label) @29
(label) @32
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte*) BITMAP
(const byte*) BITMAP#0 BITMAP = ((byte*))(word/signed word/dword/signed dword) 8192
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(const byte*) CIA2_PORT_A#0 CIA2_PORT_A = ((byte*))(word/dword/signed dword) 56576
(byte*) CIA2_PORT_A_DDR
(const byte*) CIA2_PORT_A_DDR#0 CIA2_PORT_A_DDR = ((byte*))(word/dword/signed dword) 56578
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(const byte*) D011#0 D011 = ((byte*))(word/dword/signed dword) 53265
(byte*) D016
(const byte*) D016#0 D016 = ((byte*))(word/dword/signed dword) 53270
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) 53272
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(word) PI2_u4f12
(dword) PI2_u4f28
(const dword) PI2_u4f28#0 PI2_u4f28 = (dword/signed dword) 1686629713
(byte) PINK
(word) PI_HALF_u4f12
(dword) PI_HALF_u4f28
(const dword) PI_HALF_u4f28#0 PI_HALF_u4f28 = (dword/signed dword) 421657428
(word) PI_u4f12
(dword) PI_u4f28
(const dword) PI_u4f28#0 PI_u4f28 = (dword/signed dword) 843314857
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(word) SIN_SIZE
(const word) SIN_SIZE#0 SIN_SIZE = (word/signed word/dword/signed dword) 512
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(const byte) VIC_BMM#0 VIC_BMM = (byte/signed byte/word/signed word/dword/signed dword) 32
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(const byte) VIC_CSEL#0 VIC_CSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_DEN
(const byte) VIC_DEN#0 VIC_DEN = (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) VIC_RST8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) YELLOW
(void()) bitmap_clear()
(word~) bitmap_clear::$3 $3 zp ZP_WORD:2 2.0
(label) bitmap_clear::@1
@ -207,6 +274,7 @@
(const byte) main::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte/signed byte/word/signed word/dword/signed dword) 3^>((word))(const byte*) SCREEN#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 $16 zp ZP_WORD:6 4.0
(word~) mul16s::$5 $5 zp ZP_WORD:2 20.0
(word~) mul16s::$6 $6 zp ZP_WORD:6 4.0
(label) mul16s::@1
(label) mul16s::@2
@ -277,8 +345,11 @@
(word) mulu16_sel::v2#3 v2 zp ZP_WORD:6 4.0
(word) mulu16_sel::v2#4 v2 zp ZP_WORD:6 4.0
(word) mulu16_sel::v2#5 v2 zp ZP_WORD:6 5.0
(signed word) rem16s
(word) rem16u
(word) rem16u#1 rem16u zp ZP_WORD:2 0.8
(signed byte) rem8s
(byte) rem8u
(void()) render_sine()
(word~) render_sine::$0 $0 zp ZP_WORD:6 22.0
(signed word*~) render_sine::$1 $1 zp ZP_WORD:6 22.0
@ -406,7 +477,7 @@
(signed word) wrap_y::y#6 y zp ZP_WORD:6 203.0
(signed word) wrap_y::y#9 y zp ZP_WORD:6 24.0
zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 fill::addr#2 fill::addr#1 ]
zp ZP_WORD:2 [ render_sine::sin_idx#2 render_sine::sin_idx#1 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::$3 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 fill::addr#2 fill::addr#1 mul16s::$5 ]
zp ZP_WORD:4 [ render_sine::xpos#3 render_sine::xpos#8 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 sin16s_gen2::i#2 sin16s_gen2::i#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ]
reg byte x [ bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ]
zp ZP_WORD:6 [ wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#0 wrap_y::y#1 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$0 render_sine::$1 render_sine::$4 render_sine::$5 mul16u::b#2 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 bitmap_plot::$3 bitmap_plot::plotter#1 sin16s_gen2::$6 sin16s_gen2::$8 mul16s::$6 mul16s::$16 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ]

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi()
to:@59
@59: scope:[] from @begin
to:@60
@60: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @59
@end: scope:[] from @60
[3] phi()
main: scope:[main] from @59
main: scope:[main] from @60
[4] phi()
[5] call init
to:main::@2

@ -2,23 +2,90 @@ Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBa
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
(byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53
(byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49
(byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54
(byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55
(byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
(word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) 1016
(byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248
(byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249
(byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264
(byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
(byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) 53271
(byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) 53275
(byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) 53276
(byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
(byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) 53282
(byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) 53283
(byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) 53284
(byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) 53285
(byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) 53286
(byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
(byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265
(byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) 128
(byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
(byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
(byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte*) D016#0 ← ((byte*)) (word/dword/signed dword) 53270
(byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
(byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) 53272
(byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) 53267
(byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) 53268
(byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) 53273
(byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53274
(byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
to:@3
@3: scope:[] from @begin
(byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320
(byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321
(byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56322
(byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56323
(byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56333
(byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 127
(byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576
(byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56577
(byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578
(byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56579
(byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56589
(void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) 788
(void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) 65534
(byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
(byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
(byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
(byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
(byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
(byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
(byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13
(byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
(byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15
to:@4
@4: scope:[] from @begin
(byte*) memLo#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 254
(byte*) memHi#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 255
to:@49
to:@31
prepareMEM: scope:[prepareMEM] from addMEMtoFAC divMEMbyFAC mulFACbyMEM setFAC setMEMtoFAC
(byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(byte*) prepareMEM::mem#2 divMEMbyFAC/(byte*) prepareMEM::mem#3 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 )
(byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5
@ -113,19 +180,27 @@ sinFAC: scope:[sinFAC] from gen_sintab::@18
sinFAC::@return: scope:[sinFAC] from sinFAC
return
to:@return
@49: scope:[] from @3
@31: scope:[] from @4
(byte*) print_screen#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) print_line_cursor#0 ← (byte*) print_screen#0
(byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
to:@43
@43: scope:[] from @31
(byte[]) print_hextab#0 ← (const string) $0
to:@50
@50: scope:[] from @43
(byte) sinlen_x#0 ← (byte/word/signed word/dword/signed dword) 221
(byte[221]) sintab_x#0 ← { fill( 221, 0) }
(byte) sinlen_y#0 ← (byte/word/signed word/dword/signed dword) 197
(byte[197]) sintab_y#0 ← { fill( 197, 0) }
(byte*) sprites#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@52
main: scope:[main] from @59
(byte) sin_idx_y#24 ← phi( @59/(byte) sin_idx_y#17 )
(byte) sin_idx_x#26 ← phi( @59/(byte) sin_idx_x#16 )
(byte) progress_idx#30 ← phi( @59/(byte) progress_idx#35 )
(byte*) progress_cursor#29 ← phi( @59/(byte*) progress_cursor#35 )
to:@53
main: scope:[main] from @60
(byte) sin_idx_y#24 ← phi( @60/(byte) sin_idx_y#17 )
(byte) sin_idx_x#26 ← phi( @60/(byte) sin_idx_x#16 )
(byte) progress_idx#30 ← phi( @60/(byte) progress_idx#35 )
(byte*) progress_cursor#29 ← phi( @60/(byte*) progress_cursor#35 )
call init
to:main::@5
main::@5: scope:[main] from main
@ -277,10 +352,10 @@ clear_screen::@1: scope:[clear_screen] from clear_screen clear_screen::@1
clear_screen::@return: scope:[clear_screen] from clear_screen::@1
return
to:@return
@52: scope:[] from @49
@53: scope:[] from @50
(byte*) progress_cursor#7 ← (byte*) SCREEN#0
(byte) progress_idx#7 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@54
to:@55
progress_init: scope:[progress_init] from init::@5 init::@7
(byte*) progress_init::line#2 ← phi( init::@5/(byte*) progress_init::line#0 init::@7/(byte*) progress_init::line#1 )
(byte*) progress_cursor#8 ← (byte*) progress_init::line#2
@ -320,12 +395,12 @@ progress_inc::@return: scope:[progress_inc] from progress_inc::@1
(byte*) progress_cursor#11 ← (byte*) progress_cursor#25
return
to:@return
@54: scope:[] from @52
(byte) progress_idx#39 ← phi( @52/(byte) progress_idx#7 )
(byte*) progress_cursor#39 ← phi( @52/(byte*) progress_cursor#7 )
@55: scope:[] from @53
(byte) progress_idx#39 ← phi( @53/(byte) progress_idx#7 )
(byte*) progress_cursor#39 ← phi( @53/(byte*) progress_cursor#7 )
(byte) sin_idx_x#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) sin_idx_y#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@59
to:@60
anim: scope:[anim] from main::@3
(byte) sin_idx_y#9 ← phi( main::@3/(byte) sin_idx_y#13 )
(byte) sin_idx_x#9 ← phi( main::@3/(byte) sin_idx_x#13 )
@ -885,44 +960,147 @@ gen_sintab::@return: scope:[gen_sintab] from gen_sintab::@23
(byte*) progress_cursor#13 ← (byte*) progress_cursor#27
return
to:@return
@59: scope:[] from @54
(byte) sin_idx_y#17 ← phi( @54/(byte) sin_idx_y#2 )
(byte) sin_idx_x#16 ← phi( @54/(byte) sin_idx_x#2 )
(byte) progress_idx#35 ← phi( @54/(byte) progress_idx#39 )
(byte*) progress_cursor#35 ← phi( @54/(byte*) progress_cursor#39 )
@60: scope:[] from @55
(byte) sin_idx_y#17 ← phi( @55/(byte) sin_idx_y#2 )
(byte) sin_idx_x#16 ← phi( @55/(byte) sin_idx_x#2 )
(byte) progress_idx#35 ← phi( @55/(byte) progress_idx#39 )
(byte*) progress_cursor#35 ← phi( @55/(byte*) progress_cursor#39 )
call main
to:@60
@60: scope:[] from @59
(byte) sin_idx_y#12 ← phi( @59/(byte) sin_idx_y#1 )
(byte) sin_idx_x#12 ← phi( @59/(byte) sin_idx_x#1 )
(byte) progress_idx#29 ← phi( @59/(byte) progress_idx#1 )
(byte*) progress_cursor#28 ← phi( @59/(byte*) progress_cursor#1 )
to:@61
@61: scope:[] from @60
(byte) sin_idx_y#12 ← phi( @60/(byte) sin_idx_y#1 )
(byte) sin_idx_x#12 ← phi( @60/(byte) sin_idx_x#1 )
(byte) progress_idx#29 ← phi( @60/(byte) progress_idx#1 )
(byte*) progress_cursor#28 ← phi( @60/(byte*) progress_cursor#1 )
(byte*) progress_cursor#14 ← (byte*) progress_cursor#28
(byte) progress_idx#15 ← (byte) progress_idx#29
(byte) sin_idx_x#6 ← (byte) sin_idx_x#12
(byte) sin_idx_y#6 ← (byte) sin_idx_y#12
to:@end
@end: scope:[] from @60
@end: scope:[] from @61
SYMBOL TABLE SSA
(label) @3
(label) @49
(label) @52
(label) @54
(label) @59
(const string) $0 = (string) "0123456789abcdef"
(label) @31
(label) @4
(label) @43
(label) @50
(label) @53
(label) @55
(label) @60
(label) @61
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BROWN
(byte) BROWN#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_A_DDR#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA1_PORT_B_DDR
(byte*) CIA1_PORT_B_DDR#0
(byte*) CIA2_INTERRUPT
(byte*) CIA2_INTERRUPT#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B#0
(byte*) CIA2_PORT_B_DDR
(byte*) CIA2_PORT_B_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D016
(byte*) D016#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_BG#0
(byte) IRQ_COLLISION_SPRITE
(byte) IRQ_COLLISION_SPRITE#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_LIGHTPEN
(byte) IRQ_LIGHTPEN#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(void()**) KERNEL_IRQ
(void()**) KERNEL_IRQ#0
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_X#0
(byte*) LIGHTPEN_Y
(byte*) LIGHTPEN_Y#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte) LIGHT_GREY
(byte) LIGHT_GREY#0
(byte) ORANGE
(byte) ORANGE#0
(byte) PINK
(byte) PINK#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte) PROCPORT_BASIC_KERNEL_IO
(byte) PROCPORT_BASIC_KERNEL_IO#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_KERNEL_IO#0
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_ALL#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(byte*) SCREEN
(byte*) SCREEN#0
(byte*) SPRITES_COLS
@ -933,12 +1111,46 @@ SYMBOL TABLE SSA
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_MC1
(byte*) SPRITES_MC1#0
(byte*) SPRITES_MC2
(byte*) SPRITES_MC2#0
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PRIORITY#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte) VIC_BMM
(byte) VIC_BMM#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte*) VIC_CONTROL2
(byte*) VIC_CONTROL2#0
(byte) VIC_CSEL
(byte) VIC_CSEL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_MCM
(byte) VIC_MCM#0
(byte*) VIC_MEMORY
(byte*) VIC_MEMORY#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) VIC_RST8
(byte) VIC_RST8#0
(byte) WHITE
(byte) WHITE#0
(byte) YELLOW
(byte) YELLOW#0
(void()) addMEMtoFAC((byte*) addMEMtoFAC::mem)
(label) addMEMtoFAC::@1
(label) addMEMtoFAC::@return
@ -1409,6 +1621,14 @@ SYMBOL TABLE SSA
(byte*) prepareMEM::mem#3
(byte*) prepareMEM::mem#4
(byte*) prepareMEM::mem#5
(byte*) print_char_cursor
(byte*) print_char_cursor#0
(byte[]) print_hextab
(byte[]) print_hextab#0
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_screen
(byte*) print_screen#0
(byte*) progress_cursor
(byte*) progress_cursor#0
(byte*) progress_cursor#1
@ -1661,6 +1881,7 @@ Inversing boolean not (bool~) gen_chargen_sprite::$9 ← (byte) gen_chargen_spri
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte*) prepareMEM::mem#0 = (byte*~) setFAC::$0
Alias (word) getFAC::return#0 = (word) getFAC::w#0 (word) getFAC::return#3 (word) getFAC::return#1
Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0
Alias (byte) sin_idx_x#23 = (byte) sin_idx_x#26
Alias (byte) sin_idx_y#21 = (byte) sin_idx_y#24
Alias (byte*) progress_cursor#0 = (byte*) progress_cursor#15
@ -1882,20 +2103,89 @@ Simple Condition (bool~) gen_chargen_sprite::$12 if((byte) gen_chargen_sprite::x
Simple Condition (bool~) gen_chargen_sprite::$14 if((byte) gen_chargen_sprite::y#1!=rangelast(0,7)) goto gen_chargen_sprite::@1
Simple Condition (bool~) gen_sintab::$26 if((byte) gen_sintab::i#1<(byte) gen_sintab::length#10) goto gen_sintab::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte) PROCPORT_RAM_ALL#0 = 48
Constant (const byte) PROCPORT_RAM_IO#0 = 53
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 49
Constant (const byte) PROCPORT_KERNEL_IO#0 = 54
Constant (const byte) PROCPORT_BASIC_KERNEL_IO#0 = 55
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const word) SPRITE_PTRS#0 = 1016
Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248
Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249
Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264
Constant (const byte*) RASTER#0 = ((byte*))53266
Constant (const byte*) SPRITES_ENABLE#0 = ((byte*))53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = ((byte*))53271
Constant (const byte*) SPRITES_PRIORITY#0 = ((byte*))53275
Constant (const byte*) SPRITES_MC#0 = ((byte*))53276
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte*) BGCOL1#0 = ((byte*))53281
Constant (const byte*) BGCOL2#0 = ((byte*))53282
Constant (const byte*) BGCOL3#0 = ((byte*))53283
Constant (const byte*) BGCOL4#0 = ((byte*))53284
Constant (const byte*) SPRITES_MC1#0 = ((byte*))53285
Constant (const byte*) SPRITES_MC2#0 = ((byte*))53286
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265
Constant (const byte*) D011#0 = ((byte*))53265
Constant (const byte) VIC_RST8#0 = 128
Constant (const byte) VIC_ECM#0 = 64
Constant (const byte) VIC_BMM#0 = 32
Constant (const byte) VIC_DEN#0 = 16
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) VIC_CONTROL2#0 = ((byte*))53270
Constant (const byte*) D016#0 = ((byte*))53270
Constant (const byte) VIC_MCM#0 = 16
Constant (const byte) VIC_CSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))53272
Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272
Constant (const byte*) LIGHTPEN_X#0 = ((byte*))53267
Constant (const byte*) LIGHTPEN_Y#0 = ((byte*))53268
Constant (const byte*) IRQ_STATUS#0 = ((byte*))53273
Constant (const byte*) IRQ_ENABLE#0 = ((byte*))53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte) IRQ_COLLISION_BG#0 = 2
Constant (const byte) IRQ_COLLISION_SPRITE#0 = 4
Constant (const byte) IRQ_LIGHTPEN#0 = 8
Constant (const byte*) COLS#0 = ((byte*))55296
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321
Constant (const byte*) CIA1_PORT_A_DDR#0 = ((byte*))56322
Constant (const byte*) CIA1_PORT_B_DDR#0 = ((byte*))56323
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576
Constant (const byte*) CIA2_PORT_B#0 = ((byte*))56577
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578
Constant (const byte*) CIA2_PORT_B_DDR#0 = ((byte*))56579
Constant (const byte*) CIA2_INTERRUPT#0 = ((byte*))56589
Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534
Constant (const byte) BLACK#0 = 0
Constant (const byte) WHITE#0 = 1
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) YELLOW#0 = 7
Constant (const byte) ORANGE#0 = 8
Constant (const byte) BROWN#0 = 9
Constant (const byte) PINK#0 = 10
Constant (const byte) DARK_GREY#0 = 11
Constant (const byte) GREY#0 = 12
Constant (const byte) LIGHT_GREEN#0 = 13
Constant (const byte) LIGHT_BLUE#0 = 14
Constant (const byte) LIGHT_GREY#0 = 15
Constant (const byte*) memLo#0 = ((byte*))254
Constant (const byte*) memHi#0 = ((byte*))255
Constant (const byte*) print_line_cursor#0 = ((byte*))1024
Constant (const byte[]) print_hextab#0 = $0
Constant (const byte) sinlen_x#0 = 221
Constant (const byte[221]) sintab_x#0 = { fill( 221, 0) }
Constant (const byte) sinlen_y#0 = 197
@ -1976,6 +2266,7 @@ Fixing inline constructor with getFAC::$0 ← *(memHi#0) w= *(memLo#0)
Successful SSA optimization Pass2FixInlineConstructors
Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) init::$1 ← (byte) init::i#2
Successful SSA optimization PassNEliminateUnusedVars
Successful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte*) prepareMEM::mem#0 ← ((byte*)) (word) setFAC::w#5
Successful SSA optimization Pass2NopCastElimination
Removing unused block main::@return
@ -1994,17 +2285,19 @@ Resolved ranged next value gen_chargen_sprite::x#1 ← ++ gen_chargen_sprite::x#
Resolved ranged comparison value if(gen_chargen_sprite::x#1!=rangelast(0,7)) goto gen_chargen_sprite::@2 to (byte/signed byte/word/signed word/dword/signed dword) 8
Resolved ranged next value gen_chargen_sprite::y#1 ← ++ gen_chargen_sprite::y#10 to ++
Resolved ranged comparison value if(gen_chargen_sprite::y#1!=rangelast(0,7)) goto gen_chargen_sprite::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
Culled Empty Block (label) @3
Culled Empty Block (label) @49
Culled Empty Block (label) @4
Culled Empty Block (label) @31
Culled Empty Block (label) @43
Culled Empty Block (label) @50
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::@6
Culled Empty Block (label) init::@3
Culled Empty Block (label) init::@10
Culled Empty Block (label) @52
Culled Empty Block (label) @54
Culled Empty Block (label) @53
Culled Empty Block (label) @55
Culled Empty Block (label) gen_sintab::@13
Culled Empty Block (label) @60
Culled Empty Block (label) @61
Successful SSA optimization Pass2CullEmptyBlocks
Alias (word) getFAC::return#0 = (word~) getFAC::$0
Alias (byte) init::i#2 = (byte~) init::$1
@ -2148,7 +2441,7 @@ Added new block during phi lifting gen_chargen_sprite::@13(between gen_chargen_s
Added new block during phi lifting gen_chargen_sprite::@14(between gen_chargen_sprite::@4 and gen_chargen_sprite::@5)
Added new block during phi lifting place_sprites::@3(between place_sprites::@1 and place_sprites::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @59
Adding NOP phi() at start of @60
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
@ -2272,7 +2565,7 @@ Culled Empty Block (label) gen_chargen_sprite::@13
Culled Empty Block (label) gen_chargen_sprite::@14
Culled Empty Block (label) place_sprites::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @59
Adding NOP phi() at start of @60
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
@ -2310,14 +2603,14 @@ Adding NOP phi() at start of gen_chargen_sprite::@6
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@59
@59: scope:[] from @begin
to:@60
@60: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @59
@end: scope:[] from @60
[3] phi()
main: scope:[main] from @59
main: scope:[main] from @60
[4] phi()
[5] call init
to:main::@2
@ -2772,19 +3065,86 @@ place_sprites::@return: scope:[place_sprites] from place_sprites::@1
VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) addMEMtoFAC((byte*) addMEMtoFAC::mem)
(byte*) addMEMtoFAC::mem
(void()) anim()
@ -2931,6 +3291,10 @@ VARIABLE REGISTER WEIGHTS
(byte*) prepareMEM::mem#4 4.0
(byte*) prepareMEM::mem#5 3.9999999999999996
(byte*~) prepareMEM::mem#8 4.0
(byte*) print_char_cursor
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_screen
(byte*) progress_cursor
(byte*) progress_cursor#10 4.0
(byte*) progress_cursor#11 2.8333333333333335
@ -3163,17 +3527,17 @@ INITIAL ASM
.label sin_idx_y = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @59 [phi:@begin->@59]
b59_from_bbegin:
jmp b59
//SEG4 @59
b59:
//SEG3 [1] phi from @begin to @60 [phi:@begin->@60]
b60_from_bbegin:
jmp b60
//SEG4 @60
b60:
//SEG5 [2] call main
//SEG6 [4] phi from @59 to main [phi:@59->main]
main_from_b59:
//SEG6 [4] phi from @60 to main [phi:@60->main]
main_from_b60:
jsr main
//SEG7 [3] phi from @59 to @end [phi:@59->@end]
bend_from_b59:
//SEG7 [3] phi from @60 to @end [phi:@60->@end]
bend_from_b60:
jmp bend
//SEG8 @end
bend:
@ -4892,17 +5256,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label sin_idx_y = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @59 [phi:@begin->@59]
b59_from_bbegin:
jmp b59
//SEG4 @59
b59:
//SEG3 [1] phi from @begin to @60 [phi:@begin->@60]
b60_from_bbegin:
jmp b60
//SEG4 @60
b60:
//SEG5 [2] call main
//SEG6 [4] phi from @59 to main [phi:@59->main]
main_from_b59:
//SEG6 [4] phi from @60 to main [phi:@60->main]
main_from_b60:
jsr main
//SEG7 [3] phi from @59 to @end [phi:@59->@end]
bend_from_b59:
//SEG7 [3] phi from @60 to @end [phi:@60->@end]
bend_from_b60:
jmp bend
//SEG8 @end
bend:
@ -6178,7 +6542,7 @@ place_sprites: {
sintab_y: .fill $c5, 0
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b59
Removing instruction jmp b60
Removing instruction jmp bend
Removing instruction jmp b2
Removing instruction jmp b3
@ -6296,9 +6660,9 @@ Replacing label b2_from_b8 with b2
Replacing label b1_from_b9 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b59_from_bbegin:
Removing instruction main_from_b59:
Removing instruction bend_from_b59:
Removing instruction b60_from_bbegin:
Removing instruction main_from_b60:
Removing instruction bend_from_b60:
Removing instruction b2_from_b2:
Removing instruction b3_from_b2:
Removing instruction b1_from_b3:
@ -6365,7 +6729,7 @@ Removing instruction b4_from_b5:
Removing instruction b5_from_b4:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b59:
Removing instruction b60:
Removing instruction bend:
Removing instruction init_from_main:
Removing instruction b2_from_main:
@ -6484,19 +6848,69 @@ Removing unreachable instruction jmp b4
Succesful ASM optimization Pass5UnreachableCodeElimination
FINAL SYMBOL TABLE
(label) @59
(label) @60
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word/dword/signed dword) 53248
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) 55296
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
@ -6507,12 +6921,29 @@ FINAL SYMBOL TABLE
(const byte*) SPRITES_EXPAND_X#0 SPRITES_EXPAND_X = ((byte*))(word/dword/signed dword) 53277
(byte*) SPRITES_EXPAND_Y
(const byte*) SPRITES_EXPAND_Y#0 SPRITES_EXPAND_Y = ((byte*))(word/dword/signed dword) 53271
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = ((byte*))(word/dword/signed dword) 53264
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) 53249
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) addMEMtoFAC((byte*) addMEMtoFAC::mem)
(label) addMEMtoFAC::@1
(label) addMEMtoFAC::@return
@ -6737,6 +7168,10 @@ FINAL SYMBOL TABLE
(byte*) prepareMEM::mem#4 mem zp ZP_WORD:12 4.0
(byte*) prepareMEM::mem#5 mem zp ZP_WORD:12 3.9999999999999996
(byte*~) prepareMEM::mem#8 mem zp ZP_WORD:12 4.0
(byte*) print_char_cursor
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_screen
(byte*) progress_cursor
(byte*) progress_cursor#10 progress_cursor zp ZP_WORD:10 4.0
(byte*) progress_cursor#11 progress_cursor zp ZP_WORD:10 2.8333333333333335
@ -6852,12 +7287,12 @@ Score: 768747
.label sin_idx_x = 2
.label sin_idx_y = 3
//SEG2 @begin
//SEG3 [1] phi from @begin to @59 [phi:@begin->@59]
//SEG4 @59
//SEG3 [1] phi from @begin to @60 [phi:@begin->@60]
//SEG4 @60
//SEG5 [2] call main
//SEG6 [4] phi from @59 to main [phi:@59->main]
//SEG6 [4] phi from @60 to main [phi:@60->main]
jsr main
//SEG7 [3] phi from @59 to @end [phi:@59->@end]
//SEG7 [3] phi from @60 to @end [phi:@60->@end]
//SEG8 @end
//SEG9 main
main: {

@ -1,16 +1,66 @@
(label) @59
(label) @60
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word/dword/signed dword) 53248
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) 55296
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = ((byte*))(byte/signed byte/word/signed word/dword/signed dword) 1
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
@ -21,12 +71,29 @@
(const byte*) SPRITES_EXPAND_X#0 SPRITES_EXPAND_X = ((byte*))(word/dword/signed dword) 53277
(byte*) SPRITES_EXPAND_Y
(const byte*) SPRITES_EXPAND_Y#0 SPRITES_EXPAND_Y = ((byte*))(word/dword/signed dword) 53271
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = ((byte*))(word/dword/signed dword) 53264
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) 53249
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) addMEMtoFAC((byte*) addMEMtoFAC::mem)
(label) addMEMtoFAC::@1
(label) addMEMtoFAC::@return
@ -251,6 +318,10 @@
(byte*) prepareMEM::mem#4 mem zp ZP_WORD:12 4.0
(byte*) prepareMEM::mem#5 mem zp ZP_WORD:12 3.9999999999999996
(byte*~) prepareMEM::mem#8 mem zp ZP_WORD:12 4.0
(byte*) print_char_cursor
(byte[]) print_hextab
(byte*) print_line_cursor
(byte*) print_screen
(byte*) progress_cursor
(byte*) progress_cursor#10 progress_cursor zp ZP_WORD:10 4.0
(byte*) progress_cursor#11 progress_cursor zp ZP_WORD:10 2.8333333333333335

@ -0,0 +1,167 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.const SPRITE_PTRS = $3f8
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label RASTER = $d012
.label SPRITES_ENABLE = $d015
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label BORDERCOL = $d020
.label BGCOL = $d021
.label SPRITES_COLS = $d027
.label VIC_CONTROL = $d011
.label D018 = $d018
.label IRQ_STATUS = $d019
.label IRQ_ENABLE = $d01a
.const IRQ_RASTER = 1
.label CIA1_INTERRUPT = $dc0d
.const CIA_INTERRUPT_CLEAR = $7f
.label CIA2_PORT_A = $dd00
.label CIA2_PORT_A_DDR = $dd02
.label KERNEL_IRQ = $314
.const BLACK = 0
.const WHITE = 1
.const BLUE = 6
.label PLAYFIELD_SPRITES = $2000
.label PLAYFIELD_CHARSET = $1000
.label PLAYFIELD_SCREEN = $400
.const IRQ_RASTER_FIRST = $30
.label irq_raster_next = 2
.label irq_cnt = 2
.label irq_sprite_ypos = 2
lda #IRQ_RASTER_FIRST
sta irq_raster_next
lda #0
sta irq_cnt
lda #$32
sta irq_sprite_ypos
jsr main
main: {
jsr init_sprites
jsr init_irq
rts
}
init_irq: {
sei
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
lda VIC_CONTROL
and #$7f
sta VIC_CONTROL
lda #IRQ_RASTER_FIRST
sta RASTER
lda #IRQ_RASTER
sta IRQ_ENABLE
lda #<irq
sta KERNEL_IRQ
lda #>irq
sta KERNEL_IRQ+1
cli
rts
}
init_sprites: {
.const ypos = $32
.label sprites_ptr = PLAYFIELD_SCREEN+SPRITE_PTRS
.const toSpritePtr1_return = PLAYFIELD_SPRITES>>6
.const vicSelectGfxBank1_toDd001_return = 3^(>PLAYFIELD_SCREEN)>>6
.const toD0181_return = (>(PLAYFIELD_SCREEN&$3fff)<<2)|(>PLAYFIELD_CHARSET)>>2&$f
.label xpos = 2
.label ptr = 3
lda #3
sta CIA2_PORT_A_DDR
lda #vicSelectGfxBank1_toDd001_return
sta CIA2_PORT_A
lda #toD0181_return
sta D018
lda #$f
sta SPRITES_ENABLE
lda #0
sta SPRITES_MC
sta SPRITES_EXPAND_Y
sta SPRITES_EXPAND_X
lda #toSpritePtr1_return
sta ptr
lda #$18+$e*8
sta xpos
ldy #0
b1:
tya
asl
tax
lda xpos
sta SPRITES_XPOS,x
lda #ypos
sta SPRITES_YPOS,x
lda #BLACK
sta SPRITES_COLS,y
lda ptr
sta sprites_ptr,y
lda #$18
clc
adc xpos
sta xpos
inc ptr
iny
cpy #4
bne b1
rts
}
irq: {
lda #WHITE
sta BGCOL
sta BORDERCOL
lda irq_sprite_ypos
sta SPRITES_YPOS
lda irq_sprite_ypos
sta SPRITES_YPOS+2
lda irq_sprite_ypos
sta SPRITES_YPOS+4
lda irq_sprite_ypos
sta SPRITES_YPOS+6
inc irq_cnt
lda irq_cnt
cmp #$a
beq b1
lda #$15
clc
adc irq_raster_next
sta irq_raster_next
lda #$15
clc
adc irq_sprite_ypos
sta irq_sprite_ypos
b2:
lda irq_raster_next
sta RASTER
lda #IRQ_RASTER
sta IRQ_STATUS
lda #BLACK
sta BORDERCOL
lda #BLUE
sta BGCOL
jmp $ea81
b1:
lda #0
sta irq_cnt
lda #IRQ_RASTER_FIRST
sta irq_raster_next
lda #$32
sta irq_sprite_ypos
jmp b2
}
.pc = PLAYFIELD_SPRITES "Inline"
.var sprites = LoadPicture("nes-playfield.png", List().add($010101, $000000))
.for(var sy=0;sy<10;sy++) {
.for(var sx=0;sx<3;sx++) {
.for (var y=0;y<21; y++) {
.for (var c=0; c<3; c++) {
.byte sprites.getSinglecolorByte(sx*3+c,sy*21+y)
}
}
.byte 0
}
}

@ -0,0 +1,119 @@
@begin: scope:[] from
[0] phi()
to:@6
@6: scope:[] from @begin
[1] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0
[2] (byte) irq_cnt#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
[3] (byte) irq_sprite_ypos#0 ← (byte/signed byte/word/signed word/dword/signed dword) 50
to:@8
@8: scope:[] from @6
kickasm(location (const byte*) PLAYFIELD_SPRITES#0) {{ .var sprites = LoadPicture("nes-playfield.png", List().add($010101, $000000))
.for(var sy=0;sy<10;sy++) {
.for(var sx=0;sx<3;sx++) {
.for (var y=0;y<21; y++) {
.for (var c=0; c<3; c++) {
.byte sprites.getSinglecolorByte(sx*3+c,sy*21+y)
}
}
.byte 0
}
}
}}
[5] call main
to:@end
@end: scope:[] from @8
[6] phi()
main: scope:[main] from @8
[7] phi()
[8] call init_sprites
to:main::@1
main::@1: scope:[main] from main
[9] phi()
[10] call init_irq
to:main::@return
main::@return: scope:[main] from main::@1
[11] return
to:@return
init_irq: scope:[init_irq] from main::@1
asm { sei }
[13] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[14] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte/signed byte/word/signed word/dword/signed dword) 127
[15] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0
[16] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[17] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq()
asm { cli }
to:init_irq::@return
init_irq::@return: scope:[init_irq] from init_irq
[19] return
to:@return
init_sprites: scope:[init_sprites] from main
[20] phi()
to:init_sprites::vicSelectGfxBank1
init_sprites::vicSelectGfxBank1: scope:[init_sprites] from init_sprites
[21] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
to:init_sprites::vicSelectGfxBank1_toDd001
init_sprites::vicSelectGfxBank1_toDd001: scope:[init_sprites] from init_sprites::vicSelectGfxBank1
[22] phi()
to:init_sprites::vicSelectGfxBank1_@1
init_sprites::vicSelectGfxBank1_@1: scope:[init_sprites] from init_sprites::vicSelectGfxBank1_toDd001
[23] *((const byte*) CIA2_PORT_A#0) ← (const byte) init_sprites::vicSelectGfxBank1_toDd001_return#0
to:init_sprites::toD0181
init_sprites::toD0181: scope:[init_sprites] from init_sprites::vicSelectGfxBank1_@1
[24] phi()
to:init_sprites::@4
init_sprites::@4: scope:[init_sprites] from init_sprites::toD0181
[25] *((const byte*) D018#0) ← (const byte) init_sprites::toD0181_return#0
[26] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word/dword/signed dword) 15
[27] *((const byte*) SPRITES_MC#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
[28] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0)
[29] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0)
to:init_sprites::toSpritePtr1
init_sprites::toSpritePtr1: scope:[init_sprites] from init_sprites::@4
[30] phi()
to:init_sprites::@1
init_sprites::@1: scope:[init_sprites] from init_sprites::@1 init_sprites::toSpritePtr1
[31] (byte) init_sprites::ptr#2 ← phi( init_sprites::@1/(byte) init_sprites::ptr#1 init_sprites::toSpritePtr1/(const byte) init_sprites::toSpritePtr1_return#0 )
[31] (byte) init_sprites::xpos#2 ← phi( init_sprites::@1/(byte) init_sprites::xpos#1 init_sprites::toSpritePtr1/(byte/signed byte/word/signed word/dword/signed dword) 24+(byte/signed byte/word/signed word/dword/signed dword) 14*(byte/signed byte/word/signed word/dword/signed dword) 8 )
[31] (byte) init_sprites::s#2 ← phi( init_sprites::@1/(byte) init_sprites::s#1 init_sprites::toSpritePtr1/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[32] (byte) init_sprites::s2#0 ← (byte) init_sprites::s#2 << (byte/signed byte/word/signed word/dword/signed dword) 1
[33] *((const byte*) SPRITES_XPOS#0 + (byte) init_sprites::s2#0) ← (byte) init_sprites::xpos#2
[34] *((const byte*) SPRITES_YPOS#0 + (byte) init_sprites::s2#0) ← (const byte) init_sprites::ypos#0
[35] *((const byte*) SPRITES_COLS#0 + (byte) init_sprites::s#2) ← (const byte) BLACK#0
[36] *((const byte*) init_sprites::sprites_ptr#0 + (byte) init_sprites::s#2) ← (byte) init_sprites::ptr#2
[37] (byte) init_sprites::xpos#1 ← (byte) init_sprites::xpos#2 + (byte/signed byte/word/signed word/dword/signed dword) 24
[38] (byte) init_sprites::ptr#1 ← ++ (byte) init_sprites::ptr#2
[39] (byte) init_sprites::s#1 ← ++ (byte) init_sprites::s#2
[40] if((byte) init_sprites::s#1!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto init_sprites::@1
to:init_sprites::@return
init_sprites::@return: scope:[init_sprites] from init_sprites::@1
[41] return
to:@return
irq: scope:[irq] from
[42] *((const byte*) BGCOL#0) ← (const byte) WHITE#0
[43] *((const byte*) BORDERCOL#0) ← *((const byte*) BGCOL#0)
[44] *((const byte*) SPRITES_YPOS#0) ← (byte) irq_sprite_ypos#0
[45] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte) irq_sprite_ypos#0
[46] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 4) ← (byte) irq_sprite_ypos#0
[47] *((const byte*) SPRITES_YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 6) ← (byte) irq_sprite_ypos#0
[48] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0
[49] if((byte) irq_cnt#1==(byte/signed byte/word/signed word/dword/signed dword) 10) goto irq::@1
to:irq::@3
irq::@3: scope:[irq] from irq
[50] (byte) irq_raster_next#2 ← (byte) irq_raster_next#0 + (byte/signed byte/word/signed word/dword/signed dword) 21
[51] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte/signed byte/word/signed word/dword/signed dword) 21
to:irq::@2
irq::@2: scope:[irq] from irq::@1 irq::@3
[52] (byte) irq_raster_next#3 ← phi( irq::@1/(byte) irq_raster_next#1 irq::@3/(byte) irq_raster_next#2 )
[53] *((const byte*) RASTER#0) ← (byte) irq_raster_next#3
[54] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[55] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
[56] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
to:irq::@return
irq::@return: scope:[irq] from irq::@2
[57] return
to:@return
irq::@1: scope:[irq] from irq
[58] (byte) irq_cnt#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
[59] (byte) irq_raster_next#1 ← (const byte) IRQ_RASTER_FIRST#0
[60] (byte) irq_sprite_ypos#1 ← (byte/signed byte/word/signed word/dword/signed dword) 50
to:irq::@2

File diff suppressed because it is too large Load Diff

@ -0,0 +1,195 @@
(label) @6
(label) @8
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(const byte) BLUE#0 BLUE = (byte/signed byte/word/signed word/dword/signed dword) 6
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(const byte*) CIA1_INTERRUPT#0 CIA1_INTERRUPT = ((byte*))(word/dword/signed dword) 56333
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(const byte*) CIA2_PORT_A#0 CIA2_PORT_A = ((byte*))(word/dword/signed dword) 56576
(byte*) CIA2_PORT_A_DDR
(const byte*) CIA2_PORT_A_DDR#0 CIA2_PORT_A_DDR = ((byte*))(word/dword/signed dword) 56578
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(const byte) CIA_INTERRUPT_CLEAR#0 CIA_INTERRUPT_CLEAR = (byte/signed byte/word/signed word/dword/signed dword) 127
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(const byte*) D018#0 D018 = ((byte*))(word/dword/signed dword) 53272
(byte) DARK_GREY
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(const byte*) IRQ_ENABLE#0 IRQ_ENABLE = ((byte*))(word/dword/signed dword) 53274
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(const byte) IRQ_RASTER#0 IRQ_RASTER = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) IRQ_RASTER_FIRST
(const byte) IRQ_RASTER_FIRST#0 IRQ_RASTER_FIRST = (byte/signed byte/word/signed word/dword/signed dword) 48
(byte*) IRQ_STATUS
(const byte*) IRQ_STATUS#0 IRQ_STATUS = ((byte*))(word/dword/signed dword) 53273
(void()**) KERNEL_IRQ
(const void()**) KERNEL_IRQ#0 KERNEL_IRQ = ((void()**))(word/signed word/dword/signed dword) 788
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PLAYFIELD_CHARSET
(const byte*) PLAYFIELD_CHARSET#0 PLAYFIELD_CHARSET = ((byte*))(word/signed word/dword/signed dword) 4096
(byte*) PLAYFIELD_SCREEN
(const byte*) PLAYFIELD_SCREEN#0 PLAYFIELD_SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) PLAYFIELD_SPRITES
(const byte*) PLAYFIELD_SPRITES#0 PLAYFIELD_SPRITES = ((byte*))(word/signed word/dword/signed dword) 8192
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SPRITES_COLS
(const byte*) SPRITES_COLS#0 SPRITES_COLS = ((byte*))(word/dword/signed dword) 53287
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = ((byte*))(word/dword/signed dword) 53269
(byte*) SPRITES_EXPAND_X
(const byte*) SPRITES_EXPAND_X#0 SPRITES_EXPAND_X = ((byte*))(word/dword/signed dword) 53277
(byte*) SPRITES_EXPAND_Y
(const byte*) SPRITES_EXPAND_Y#0 SPRITES_EXPAND_Y = ((byte*))(word/dword/signed dword) 53271
(byte*) SPRITES_MC
(const byte*) SPRITES_MC#0 SPRITES_MC = ((byte*))(word/dword/signed dword) 53276
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = ((byte*))(word/dword/signed dword) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = ((byte*))(word/dword/signed dword) 53249
(word) SPRITE_PTRS
(const word) SPRITE_PTRS#0 SPRITE_PTRS = (word/signed word/dword/signed dword) 1016
(byte) VIC_BMM
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = ((byte*))(word/dword/signed dword) 53265
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) YELLOW
(void()) init_irq()
(label) init_irq::@return
(void()) init_sprites()
(label) init_sprites::@1
(label) init_sprites::@4
(label) init_sprites::@return
(byte) init_sprites::ptr
(byte) init_sprites::ptr#1 ptr zp ZP_BYTE:3 7.333333333333333
(byte) init_sprites::ptr#2 ptr zp ZP_BYTE:3 4.714285714285714
(byte) init_sprites::s
(byte) init_sprites::s#1 reg byte y 16.5
(byte) init_sprites::s#2 reg byte y 6.875
(byte) init_sprites::s2
(byte) init_sprites::s2#0 reg byte x 16.5
(byte*) init_sprites::sprites_ptr
(const byte*) init_sprites::sprites_ptr#0 sprites_ptr = (const byte*) PLAYFIELD_SCREEN#0+(const word) SPRITE_PTRS#0
(label) init_sprites::toD0181
(word~) init_sprites::toD0181_$0
(word~) init_sprites::toD0181_$1
(word~) init_sprites::toD0181_$2
(byte~) init_sprites::toD0181_$3
(word~) init_sprites::toD0181_$4
(byte~) init_sprites::toD0181_$5
(byte~) init_sprites::toD0181_$6
(byte~) init_sprites::toD0181_$7
(byte~) init_sprites::toD0181_$8
(byte*) init_sprites::toD0181_gfx
(byte) init_sprites::toD0181_return
(const byte) init_sprites::toD0181_return#0 toD0181_return = >((word))(const byte*) PLAYFIELD_SCREEN#0&(word/signed word/dword/signed dword) 16383<<(byte/signed byte/word/signed word/dword/signed dword) 2|>((word))(const byte*) PLAYFIELD_CHARSET#0>>(byte/signed byte/word/signed word/dword/signed dword) 2&(byte/signed byte/word/signed word/dword/signed dword) 15
(byte*) init_sprites::toD0181_screen
(label) init_sprites::toSpritePtr1
(word~) init_sprites::toSpritePtr1_$0
(word~) init_sprites::toSpritePtr1_$1
(byte~) init_sprites::toSpritePtr1_$2
(byte) init_sprites::toSpritePtr1_return
(const byte) init_sprites::toSpritePtr1_return#0 toSpritePtr1_return = ((byte))((word))(const byte*) PLAYFIELD_SPRITES#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(byte*) init_sprites::toSpritePtr1_sprite
(label) init_sprites::vicSelectGfxBank1
(byte~) init_sprites::vicSelectGfxBank1_$0
(label) init_sprites::vicSelectGfxBank1_@1
(byte*) init_sprites::vicSelectGfxBank1_gfx
(label) init_sprites::vicSelectGfxBank1_toDd001
(word~) init_sprites::vicSelectGfxBank1_toDd001_$0
(byte~) init_sprites::vicSelectGfxBank1_toDd001_$1
(byte~) init_sprites::vicSelectGfxBank1_toDd001_$2
(byte/word/dword~) init_sprites::vicSelectGfxBank1_toDd001_$3
(byte*) init_sprites::vicSelectGfxBank1_toDd001_gfx
(byte) init_sprites::vicSelectGfxBank1_toDd001_return
(const byte) init_sprites::vicSelectGfxBank1_toDd001_return#0 vicSelectGfxBank1_toDd001_return = (byte/signed byte/word/signed word/dword/signed dword) 3^>((word))(const byte*) PLAYFIELD_SCREEN#0>>(byte/signed byte/word/signed word/dword/signed dword) 6
(byte) init_sprites::xpos
(byte) init_sprites::xpos#1 xpos zp ZP_BYTE:2 5.5
(byte) init_sprites::xpos#2 xpos zp ZP_BYTE:2 5.5
(byte) init_sprites::ypos
(const byte) init_sprites::ypos#0 ypos = (byte/signed byte/word/signed word/dword/signed dword) 50
interrupt(KERNEL_MIN)(void()) irq()
(label) irq::@1
(label) irq::@2
(label) irq::@3
(label) irq::@return
(byte) irq_cnt
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:2 0.6666666666666666
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:2 4.0
(byte) irq_cnt#2 irq_cnt zp ZP_BYTE:2 20.0
(byte) irq_raster_next
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:2 0.5
(byte) irq_raster_next#1 irq_raster_next zp ZP_BYTE:2 2.0
(byte) irq_raster_next#2 irq_raster_next zp ZP_BYTE:2 2.0
(byte) irq_raster_next#3 irq_raster_next zp ZP_BYTE:2 6.0
(byte) irq_sprite_ypos
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:2 1.3333333333333335
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:2 20.0
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:2 20.0
(void()) main()
(label) main::@1
(label) main::@return
reg byte y [ init_sprites::s#2 init_sprites::s#1 ]
zp ZP_BYTE:2 [ init_sprites::xpos#2 init_sprites::xpos#1 irq_raster_next#3 irq_raster_next#1 irq_raster_next#2 irq_raster_next#0 irq_cnt#0 irq_cnt#1 irq_sprite_ypos#0 irq_sprite_ypos#2 irq_cnt#2 irq_sprite_ypos#1 ]
zp ZP_BYTE:3 [ init_sprites::ptr#2 init_sprites::ptr#1 ]
reg byte x [ init_sprites::s2#0 ]

@ -3,6 +3,7 @@
.pc = $80d "Program"
.label RASTER = $d012
.label BORDERCOL = $d020
.label BGCOL = $d021
.label COLS = $d800
.label CIA1_PORT_A = $dc00
.label CIA1_PORT_B = $dc01
@ -20,6 +21,10 @@
.const KEY_CTRL = $3a
.const KEY_SPACE = $3c
.const KEY_COMMODORE = $3d
.const KEY_MODIFIER_LSHIFT = 1
.const KEY_MODIFIER_RSHIFT = 2
.const KEY_MODIFIER_CTRL = 4
.const KEY_MODIFIER_COMMODORE = 8
.label SID_VOICE3_FREQ = $d40e
.label SID_VOICE3_CONTROL = $d412
.const SID_CONTROL_NOISE = $80
@ -641,7 +646,7 @@ keyboard_event_scan: {
sta row_scan
ldy row
cmp keyboard_scan_values,y
bne b2
bne b6
lda #8
clc
adc keycode
@ -655,20 +660,40 @@ keyboard_event_scan: {
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
cmp #0
beq b2
ldx #0|KEY_MODIFIER_LSHIFT
jmp b9
b2:
ldx #0
b9:
lda #KEY_RSHIFT
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
cmp #0
beq b10
txa
ora #KEY_MODIFIER_RSHIFT
tax
b10:
lda #KEY_CTRL
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
cmp #0
beq b11
txa
ora #KEY_MODIFIER_CTRL
tax
b11:
lda #KEY_COMMODORE
sta keyboard_event_pressed.keycode
jsr keyboard_event_pressed
cmp #0
beq breturn
txa
ora #KEY_MODIFIER_COMMODORE
breturn:
rts
b2:
b6:
ldx #0
b4:
lda row_scan
@ -755,7 +780,9 @@ render_init: {
.label li = 5
.label line = 5
.label l = 2
ldx #$a0
lda #BLACK
sta BGCOL
ldx #$d0
lda #<SCREEN
sta fill.addr
lda #>SCREEN

@ -1,20 +1,20 @@
@begin: scope:[] from
[0] phi()
to:@22
@22: scope:[] from @begin
to:@23
@23: scope:[] from @begin
kickasm(location (const byte*) CHARSET#0) {{ .var charset = LoadPicture("charset.png", List().add($000000, $ffffff, $523fa0, $77c1c9))
.for (var c=0; c<16; c++)
.for (var y=0;y<8; y++)
.byte charset.getMulticolorByte(c,y)
}}
to:@25
@25: scope:[] from @22
to:@26
@26: scope:[] from @23
[2] phi()
[3] call main
to:@end
@end: scope:[] from @25
@end: scope:[] from @26
[4] phi()
main: scope:[main] from @25
main: scope:[main] from @26
[5] phi()
[6] call sid_rnd_init
to:main::@21
@ -565,7 +565,7 @@ keyboard_event_scan::@21: scope:[keyboard_event_scan] from keyboard_event_scan:
[264] phi()
to:keyboard_event_scan::@9
keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan::@21 keyboard_event_scan::@26
[265] phi()
[265] (byte) keyboard_modifiers#11 ← phi( keyboard_event_scan::@21/(byte/signed byte/word/signed word/dword/signed dword) 0|(const byte) KEY_MODIFIER_LSHIFT#0 keyboard_event_scan::@26/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[266] call keyboard_event_pressed
[267] (byte) keyboard_event_pressed::return#1 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@27
@ -574,10 +574,10 @@ keyboard_event_scan::@27: scope:[keyboard_event_scan] from keyboard_event_scan:
[269] if((byte~) keyboard_event_scan::$18==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@10
to:keyboard_event_scan::@22
keyboard_event_scan::@22: scope:[keyboard_event_scan] from keyboard_event_scan::@27
[270] phi()
[270] (byte) keyboard_modifiers#3 ← (byte) keyboard_modifiers#11 | (const byte) KEY_MODIFIER_RSHIFT#0
to:keyboard_event_scan::@10
keyboard_event_scan::@10: scope:[keyboard_event_scan] from keyboard_event_scan::@22 keyboard_event_scan::@27
[271] phi()
[271] (byte) keyboard_modifiers#12 ← phi( keyboard_event_scan::@22/(byte) keyboard_modifiers#3 keyboard_event_scan::@27/(byte) keyboard_modifiers#11 )
[272] call keyboard_event_pressed
[273] (byte) keyboard_event_pressed::return#2 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@28
@ -586,10 +586,10 @@ keyboard_event_scan::@28: scope:[keyboard_event_scan] from keyboard_event_scan:
[275] if((byte~) keyboard_event_scan::$22==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@11
to:keyboard_event_scan::@23
keyboard_event_scan::@23: scope:[keyboard_event_scan] from keyboard_event_scan::@28
[276] phi()
[276] (byte) keyboard_modifiers#4 ← (byte) keyboard_modifiers#12 | (const byte) KEY_MODIFIER_CTRL#0
to:keyboard_event_scan::@11
keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan::@23 keyboard_event_scan::@28
[277] phi()
[277] (byte) keyboard_modifiers#13 ← phi( keyboard_event_scan::@23/(byte) keyboard_modifiers#4 keyboard_event_scan::@28/(byte) keyboard_modifiers#12 )
[278] call keyboard_event_pressed
[279] (byte) keyboard_event_pressed::return#10 ← (byte) keyboard_event_pressed::return#11
to:keyboard_event_scan::@29
@ -598,7 +598,7 @@ keyboard_event_scan::@29: scope:[keyboard_event_scan] from keyboard_event_scan:
[281] if((byte~) keyboard_event_scan::$26==(byte/signed byte/word/signed word/dword/signed dword) 0) goto keyboard_event_scan::@return
to:keyboard_event_scan::@24
keyboard_event_scan::@24: scope:[keyboard_event_scan] from keyboard_event_scan::@29
[282] phi()
[282] (byte) keyboard_modifiers#5 ← (byte) keyboard_modifiers#13 | (const byte) KEY_MODIFIER_COMMODORE#0
to:keyboard_event_scan::@return
keyboard_event_scan::@return: scope:[keyboard_event_scan] from keyboard_event_scan::@24 keyboard_event_scan::@29
[283] return
@ -665,7 +665,7 @@ tables_init::@return: scope:[tables_init] from tables_init::@2
[314] return
to:@return
render_init: scope:[render_init] from main::@21
[315] phi()
[315] *((const byte*) BGCOL#0) ← (const byte) BLACK#0
[316] call fill
to:render_init::@7
render_init::@7: scope:[render_init] from render_init
@ -701,7 +701,7 @@ render_init::@return: scope:[render_init] from render_init::@5
[334] return
to:@return
fill: scope:[fill] from render_init render_init::@7
[335] (byte) fill::val#3 ← phi( render_init/(byte/word/signed word/dword/signed dword) 160 render_init::@7/(const byte) BLACK#0 )
[335] (byte) fill::val#3 ← phi( render_init/(byte/word/signed word/dword/signed dword) 208 render_init::@7/(const byte) BLACK#0 )
[335] (byte*) fill::addr#0 ← phi( render_init/(const byte*) SCREEN#0 render_init::@7/(const byte*) COLS#0 )
[336] (byte*) fill::end#0 ← (byte*) fill::addr#0 + (word/signed word/dword/signed dword) 1000
to:fill::@1

File diff suppressed because it is too large Load Diff

@ -1,17 +1,35 @@
(label) @22
(label) @25
(label) @23
(label) @26
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = ((byte*))(word/dword/signed dword) 53281
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(const byte) BLACK#0 BLACK = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) BLUE
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte) BROWN
(byte*) CHARGEN
(byte*) CHARSET
(const byte*) CHARSET#0 CHARSET = ((byte*))(word/signed word/dword/signed dword) 8192
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(const byte*) CIA1_PORT_A#0 CIA1_PORT_A = ((byte*))(word/dword/signed dword) 56320
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(const byte*) CIA1_PORT_B#0 CIA1_PORT_B = ((byte*))(word/dword/signed dword) 56321
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte) COLLISION_BOTTOM
(const byte) COLLISION_BOTTOM#0 COLLISION_BOTTOM = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) COLLISION_LEFT
@ -24,34 +42,112 @@
(const byte) COLLISION_RIGHT#0 COLLISION_RIGHT = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte*) COLS
(const byte*) COLS#0 COLS = ((byte*))(word/dword/signed dword) 55296
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(const byte) DARK_GREY#0 DARK_GREY = (byte/signed byte/word/signed word/dword/signed dword) 11
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte) KEY_0
(byte) KEY_1
(byte) KEY_2
(byte) KEY_3
(byte) KEY_4
(byte) KEY_5
(byte) KEY_6
(byte) KEY_7
(byte) KEY_8
(byte) KEY_9
(byte) KEY_A
(byte) KEY_ARROW_LEFT
(byte) KEY_ARROW_UP
(byte) KEY_ASTERISK
(byte) KEY_AT
(byte) KEY_B
(byte) KEY_C
(byte) KEY_COLON
(byte) KEY_COMMA
(const byte) KEY_COMMA#0 KEY_COMMA = (byte/signed byte/word/signed word/dword/signed dword) 47
(byte) KEY_COMMODORE
(const byte) KEY_COMMODORE#0 KEY_COMMODORE = (byte/signed byte/word/signed word/dword/signed dword) 61
(byte) KEY_CRSR_DOWN
(byte) KEY_CRSR_RIGHT
(byte) KEY_CTRL
(const byte) KEY_CTRL#0 KEY_CTRL = (byte/signed byte/word/signed word/dword/signed dword) 58
(byte) KEY_D
(byte) KEY_DEL
(byte) KEY_DOT
(const byte) KEY_DOT#0 KEY_DOT = (byte/signed byte/word/signed word/dword/signed dword) 44
(byte) KEY_E
(byte) KEY_EQUALS
(byte) KEY_F
(byte) KEY_F1
(byte) KEY_F3
(byte) KEY_F5
(byte) KEY_F7
(byte) KEY_G
(byte) KEY_H
(byte) KEY_HOME
(byte) KEY_I
(byte) KEY_J
(byte) KEY_K
(byte) KEY_L
(byte) KEY_LSHIFT
(const byte) KEY_LSHIFT#0 KEY_LSHIFT = (byte/signed byte/word/signed word/dword/signed dword) 15
(byte) KEY_M
(byte) KEY_MINUS
(byte) KEY_MODIFIER_COMMODORE
(const byte) KEY_MODIFIER_COMMODORE#0 KEY_MODIFIER_COMMODORE = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) KEY_MODIFIER_CTRL
(const byte) KEY_MODIFIER_CTRL#0 KEY_MODIFIER_CTRL = (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) KEY_MODIFIER_LSHIFT
(const byte) KEY_MODIFIER_LSHIFT#0 KEY_MODIFIER_LSHIFT = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) KEY_MODIFIER_RSHIFT
(const byte) KEY_MODIFIER_RSHIFT#0 KEY_MODIFIER_RSHIFT = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) KEY_MODIFIER_SHIFT
(byte) KEY_N
(byte) KEY_O
(byte) KEY_P
(byte) KEY_PLUS
(byte) KEY_POUND
(byte) KEY_Q
(byte) KEY_R
(byte) KEY_RETURN
(byte) KEY_RSHIFT
(const byte) KEY_RSHIFT#0 KEY_RSHIFT = (byte/signed byte/word/signed word/dword/signed dword) 52
(byte) KEY_RUNSTOP
(byte) KEY_S
(byte) KEY_SEMICOLON
(byte) KEY_SLASH
(byte) KEY_SPACE
(const byte) KEY_SPACE#0 KEY_SPACE = (byte/signed byte/word/signed word/dword/signed dword) 60
(byte) KEY_T
(byte) KEY_U
(byte) KEY_V
(byte) KEY_W
(byte) KEY_X
(const byte) KEY_X#0 KEY_X = (byte/signed byte/word/signed word/dword/signed dword) 23
(byte) KEY_Y
(byte) KEY_Z
(const byte) KEY_Z#0 KEY_Z = (byte/signed byte/word/signed word/dword/signed dword) 12
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(const byte) LIGHT_GREY#0 LIGHT_GREY = (byte/signed byte/word/signed word/dword/signed dword) 15
(byte) ORANGE
(word[]) PIECES
(const word[]) PIECES#0 PIECES = { ((word))(const byte[4*4*4]) PIECE_T#0, ((word))(const byte[4*4*4]) PIECE_S#0, ((word))(const byte[4*4*4]) PIECE_Z#0, ((word))(const byte[4*4*4]) PIECE_J#0, ((word))(const byte[4*4*4]) PIECE_O#0, ((word))(const byte[4*4*4]) PIECE_I#0, ((word))(const byte[4*4*4]) PIECE_L#0 }
(byte[]) PIECES_COLORS
@ -70,24 +166,67 @@
(const byte[4*4*4]) PIECE_T#0 PIECE_T = { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[4*4*4]) PIECE_Z
(const byte[4*4*4]) PIECE_Z#0 PIECE_Z = { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte) PINK
(byte) PLAYFIELD_COLS
(const byte) PLAYFIELD_COLS#0 PLAYFIELD_COLS = (byte/signed byte/word/signed word/dword/signed dword) 10
(byte) PLAYFIELD_LINES
(const byte) PLAYFIELD_LINES#0 PLAYFIELD_LINES = (byte/signed byte/word/signed word/dword/signed dword) 22
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(const byte*) RASTER#0 RASTER = ((byte*))(word/dword/signed dword) 53266
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte) SID_CONTROL_GATE
(byte) SID_CONTROL_NOISE
(const byte) SID_CONTROL_NOISE#0 SID_CONTROL_NOISE = (byte/word/signed word/dword/signed dword) 128
(byte) SID_CONTROL_PULSE
(byte) SID_CONTROL_RING
(byte) SID_CONTROL_SAWTOOTH
(byte) SID_CONTROL_SYNC
(byte) SID_CONTROL_TEST
(byte) SID_CONTROL_TRIANGLE
(byte*) SID_VOICE3_CONTROL
(const byte*) SID_VOICE3_CONTROL#0 SID_VOICE3_CONTROL = ((byte*))(word/dword/signed dword) 54290
(word*) SID_VOICE3_FREQ
(const word*) SID_VOICE3_FREQ#0 SID_VOICE3_FREQ = ((word*))(word/dword/signed dword) 54286
(byte*) SID_VOICE3_FREQ_HIGH
(byte*) SID_VOICE3_FREQ_LOW
(byte*) SID_VOICE3_OSC
(const byte*) SID_VOICE3_OSC#0 SID_VOICE3_OSC = ((byte*))(word/dword/signed dword) 54299
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) YELLOW
(byte()) collision((byte) collision::xpos , (byte) collision::ypos , (byte) collision::orientation)
(byte~) collision::$7 reg byte a 2002.0
(label) collision::@1
@ -221,6 +360,7 @@
(byte*) fill::start
(byte) fill::val
(byte) fill::val#3 reg byte x 1.8333333333333333
(byte[]) keyboard_char_keycodes
(byte()) keyboard_event_get()
(label) keyboard_event_get::@3
(label) keyboard_event_get::@return
@ -316,6 +456,12 @@
(byte[8]) keyboard_matrix_row_bitmask
(const byte[8]) keyboard_matrix_row_bitmask#0 keyboard_matrix_row_bitmask = { (byte/word/signed word/dword/signed dword) 254, (byte/word/signed word/dword/signed dword) 253, (byte/word/signed word/dword/signed dword) 251, (byte/word/signed word/dword/signed dword) 247, (byte/word/signed word/dword/signed dword) 239, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 191, (byte/signed byte/word/signed word/dword/signed dword) 127 }
(byte) keyboard_modifiers
(byte) keyboard_modifiers#11 reg byte x 0.8
(byte) keyboard_modifiers#12 reg byte x 1.6
(byte) keyboard_modifiers#13 reg byte x 1.2000000000000002
(byte) keyboard_modifiers#3 reg byte x 4.0
(byte) keyboard_modifiers#4 reg byte x 4.0
(byte) keyboard_modifiers#5 reg byte a 20.0
(byte[8]) keyboard_scan_values
(const byte[8]) keyboard_scan_values#0 keyboard_scan_values = { fill( 8, 0) }
(void()) lock_current()
@ -623,6 +769,7 @@ reg byte y [ remove_lines::r#2 remove_lines::r#3 remove_lines::r#1 ]
reg byte x [ remove_lines::w#6 remove_lines::w#4 remove_lines::w#12 remove_lines::w#11 remove_lines::w#1 remove_lines::w#2 remove_lines::w#3 ]
reg byte x [ lock_current::c#2 lock_current::c#1 ]
reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ]
reg byte x [ keyboard_modifiers#13 keyboard_modifiers#4 keyboard_modifiers#12 keyboard_modifiers#3 keyboard_modifiers#11 ]
reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
zp ZP_BYTE:19 [ keyboard_events_size#10 keyboard_events_size#29 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#30 keyboard_events_size#2 keyboard_events_size#1 ]
reg byte x [ tables_init::j#2 tables_init::j#1 ]
@ -675,6 +822,7 @@ reg byte a [ keyboard_event_pressed::return#2 ]
reg byte a [ keyboard_event_scan::$22 ]
reg byte a [ keyboard_event_pressed::return#10 ]
reg byte a [ keyboard_event_scan::$26 ]
reg byte a [ keyboard_modifiers#5 ]
reg byte a [ keyboard_event_scan::$3 ]
reg byte a [ keyboard_event_scan::$4 ]
reg byte a [ keyboard_event_scan::event_type#0 ]

@ -2,6 +2,7 @@
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) CHARSET#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
(byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
(byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
@ -221,6 +222,8 @@ SYMBOL TABLE SSA
(byte*) CHARGEN#7
(byte*) CHARGEN#8
(byte*) CHARGEN#9
(byte*) CHARSET
(byte*) CHARSET#0
(byte*) CHARSET4
(byte*) CHARSET4#0
(byte*) CHARSET4#1
@ -476,6 +479,7 @@ Simple Condition (bool~) main::$39 if((byte*) main::chargen#1<(byte*~) main::$38
Simple Condition (bool~) main::$40 if((byte) main::i#1!=rangelast(0,255)) goto main::@6
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const byte*) CHARSET#0 = ((byte*))8192
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const byte*) PROCPORT#0 = ((byte*))1
Constant (const byte*) D018#0 = ((byte*))53272
@ -489,6 +493,7 @@ Constant (const byte*) main::charset4#0 = CHARSET4#0
Constant (const byte) main::bits_gen#2 = main::bits_gen#0+1
Constant (const byte*) main::$38 = CHARGEN#0+2048
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization PassNEliminateUnusedVars
Resolved ranged next value main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value if(main::i#1!=rangelast(0,255)) goto main::@6 to (byte/signed byte/word/signed word/dword/signed dword) 0
Inlining constant with var siblings (const byte) main::bits_gen#0
@ -636,6 +641,7 @@ main::@return: scope:[main] from main::@12
VARIABLE REGISTER WEIGHTS
(byte*) CHARGEN
(byte*) CHARSET
(byte*) CHARSET4
(byte*) D018
(byte*) PROCPORT
@ -1685,6 +1691,7 @@ FINAL SYMBOL TABLE
(label) @end
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word/dword/signed dword) 53248
(byte*) CHARSET
(byte*) CHARSET4
(const byte*) CHARSET4#0 CHARSET4 = ((byte*))(word/signed word/dword/signed dword) 10240
(byte*) D018

@ -3,6 +3,7 @@
(label) @end
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = ((byte*))(word/dword/signed dword) 53248
(byte*) CHARSET
(byte*) CHARSET4
(const byte*) CHARSET4#0 CHARSET4 = ((byte*))(word/signed word/dword/signed dword) 10240
(byte*) D018

@ -4,10 +4,10 @@
jsr main
main: {
.label w = 2
ldx #0
txa
lda #<0
sta w
sta w+1
tax
b1:
txa
clc

Some files were not shown because too many files have changed in this diff Show More