1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-01-23 09:33:30 +00:00

Added a bresenham line routine to singlecolor bitmap bitmap2.kc

This commit is contained in:
jespergravgaard 2019-07-10 18:43:42 +02:00
parent 62d7ecbeff
commit fd63efafe2
12 changed files with 6635 additions and 127 deletions

View File

@ -1,4 +1,4 @@
// Simple Singlecolor Bitmap Routines
// Simple single-color (320x200) bitmap routines
import "string"
// The adddress of the bitmap screen (used for colors)
@ -48,3 +48,59 @@ void bitmap_plot(word x, byte y) {
plotter += ( x & $fff8 );
*plotter |= bitmap_plot_bit[<x];
}
// Draw a line on the bitmap using bresenhams algorithm
void bitmap_line(word x1, word y1, word x2, word y2) {
word x = x1;
word y = y1;
word dx = abs_u16(x2-x1);
word dy = abs_u16(y2-y1);
word sx = sgn_u16(x2-x1);
word sy = sgn_u16(y2-y1);
if(dx > dy) {
// X is the driver
word e = dy/2;
do {
bitmap_plot(x,(byte)y);
x += sx;
e += dy;
if(dx < e) {
y += sy;
e -= dx;
}
} while (x != x2);
} else {
// Y is the driver
word e = dx/2;
do {
bitmap_plot(x,(byte)y);
y += sy;
e += dx;
if(dy<e) {
x += sx;
e -= dy;
}
} while (y != y2);
}
bitmap_plot(x,(byte)y);
}
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
word abs_u16(word w) {
if(>w&0x80) {
return -w;
} else {
return w;
}
}
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
word sgn_u16(word w) {
if(>w&0x80) {
return 0xffff;
} else {
return 1;
}
}

View File

@ -19,5 +19,5 @@ while [[ "$#" -gt 0 ]]; do case $1 in
*) export PARAM="$PARAM $1"; shift;;
esac; done
echo java -jar $KICKC_JAR -I $KICKC_STDLIB_HOME -F $KICKC_FRAGMENT_HOME $PARAM
java -jar $KICKC_JAR -I $KICKC_STDLIB_HOME -F $KICKC_FRAGMENT_HOME $PARAM
echo java -jar $KICKC_JAR -F $KICKC_FRAGMENT_HOME $PARAM -I $KICKC_STDLIB_HOME
java -jar $KICKC_JAR -F $KICKC_FRAGMENT_HOME $PARAM -I $KICKC_STDLIB_HOME

View File

@ -136,6 +136,11 @@ public class TestPrograms {
compileAndCompare("memcpy-0");
}
@Test
public void testBitmapPlot3() throws IOException, URISyntaxException {
compileAndCompare("bitmap-plot-3");
}
@Test
public void testBitmapPlot2() throws IOException, URISyntaxException {
compileAndCompare("bitmap-plot-2");

View File

@ -0,0 +1,23 @@
// Tests the simple bitmap plotter
// Plots a few lines using the bresenham line algorithm
import "c64"
import "bitmap2"
import "print"
byte* BITMAP = 0x2000;
byte* SCREEN = 0x0400;
byte[0x180] align(0x100) SINTAB = kickasm {{ .fill $180, 99.5+99.5*sin(i*2*PI/256) }};
byte* COSTAB = SINTAB+0x40;
void main() {
bitmap_init(BITMAP, SCREEN);
bitmap_clear(BLACK, WHITE);
*D011 = VIC_BMM|VIC_DEN|VIC_RSEL|3;
*D018 = toD018(SCREEN, BITMAP);
for( byte i=0, a=0; i!=8; i++, a+=32) {
bitmap_line( (word)COSTAB[a]+120, (word)SINTAB[a], (word)COSTAB[a+32]+120, (word)SINTAB[a+32]);
}
while(true)
(*(SCREEN+999))++;
}

View File

@ -2,6 +2,8 @@ Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference frame_cnt to (byte) frame_cnt
Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq()
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition (number~) abs_u16::$1
Warning! Adding boolean cast to non-boolean condition (number~) sgn_u16::$1
Warning! Adding boolean cast to non-boolean sub-expression (byte) frame_cnt
Identified constant variable (byte*) BITMAP
Identified constant variable (byte*) SCREEN
@ -18,12 +20,15 @@ Culled Empty Block (label) @7
Culled Empty Block (label) bitmap_init::@8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Culled Empty Block (label) main::toD0181_@1
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@10
Culled Empty Block (label) @13
Culled Empty Block (label) @16
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -82,7 +87,7 @@ memset::@return: scope:[memset] from memset::@2
(byte[$100]) bitmap_plot_ylo#0 ← { fill( $100, 0) }
(byte[$100]) bitmap_plot_yhi#0 ← { fill( $100, 0) }
(byte[$100]) bitmap_plot_bit#0 ← { fill( $100, 0) }
to:@11
to:@14
bitmap_init: scope:[bitmap_init] from main
(byte*) bitmap_init::screen#1 ← phi( main/(byte*) bitmap_init::screen#0 )
(byte*) bitmap_init::gfx#1 ← phi( main/(byte*) bitmap_init::gfx#0 )
@ -207,17 +212,17 @@ bitmap_plot: scope:[bitmap_plot] from main::@2
bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
return
to:@return
@11: scope:[] from @8
@14: scope:[] from @8
(byte*) bitmap_screen#24 ← phi( @8/(byte*) bitmap_screen#0 )
(byte*) bitmap_gfx#25 ← phi( @8/(byte*) bitmap_gfx#0 )
(byte*) BITMAP#0 ← ((byte*)) (number) $2000
(byte*) SCREEN#0 ← ((byte*)) (number) $400
(byte[$100]) plots_per_frame#0 ← { fill( $100, 0) }
to:@12
main: scope:[main] from @14
(byte) frame_cnt#21 ← phi( @14/(byte) frame_cnt#9 )
(byte*) bitmap_screen#12 ← phi( @14/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#13 ← phi( @14/(byte*) bitmap_gfx#15 )
to:@15
main: scope:[main] from @17
(byte) frame_cnt#21 ← phi( @17/(byte) frame_cnt#9 )
(byte*) bitmap_screen#12 ← phi( @17/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#13 ← phi( @17/(byte*) bitmap_gfx#15 )
(byte*) bitmap_init::gfx#0 ← (byte*) BITMAP#0
(byte*) bitmap_init::screen#0 ← (byte*) SCREEN#0
call bitmap_init
@ -376,11 +381,11 @@ main::@return: scope:[main] from main::@1
(byte*) bitmap_screen#4 ← (byte*) bitmap_screen#9
return
to:@return
@12: scope:[] from @11
(byte*) bitmap_screen#19 ← phi( @11/(byte*) bitmap_screen#24 )
(byte*) bitmap_gfx#20 ← phi( @11/(byte*) bitmap_gfx#25 )
@15: scope:[] from @14
(byte*) bitmap_screen#19 ← phi( @14/(byte*) bitmap_screen#24 )
(byte*) bitmap_gfx#20 ← phi( @14/(byte*) bitmap_gfx#25 )
(byte) frame_cnt#0 ← (number) 1
to:@14
to:@17
init_irq: scope:[init_irq] from main::@11
asm { sei }
*((byte*) PROCPORT_DDR#0) ← (byte) PROCPORT_DDR_MEMORY_MASK#0
@ -397,7 +402,7 @@ init_irq::@return: scope:[init_irq] from init_irq
return
to:@return
irq: scope:[irq] from
(byte) frame_cnt#4 ← phi( @14/(byte) frame_cnt#9 )
(byte) frame_cnt#4 ← phi( @17/(byte) frame_cnt#9 )
*((byte*) BGCOL#0) ← (byte) WHITE#0
(bool~) irq::$1 ← (number) 0 != (byte) frame_cnt#4
(bool~) irq::$0 ← ! (bool~) irq::$1
@ -417,25 +422,25 @@ irq::@return: scope:[irq] from irq::@1
(byte) frame_cnt#2 ← (byte) frame_cnt#6
return
to:@return
@14: scope:[] from @12
(byte*) bitmap_screen#14 ← phi( @12/(byte*) bitmap_screen#19 )
(byte*) bitmap_gfx#15 ← phi( @12/(byte*) bitmap_gfx#20 )
(byte) frame_cnt#9 ← phi( @12/(byte) frame_cnt#0 )
@17: scope:[] from @15
(byte*) bitmap_screen#14 ← phi( @15/(byte*) bitmap_screen#19 )
(byte*) bitmap_gfx#15 ← phi( @15/(byte*) bitmap_gfx#20 )
(byte) frame_cnt#9 ← phi( @15/(byte) frame_cnt#0 )
call main
to:@15
@15: scope:[] from @14
(byte*) bitmap_screen#10 ← phi( @14/(byte*) bitmap_screen#4 )
(byte*) bitmap_gfx#10 ← phi( @14/(byte*) bitmap_gfx#4 )
to:@18
@18: scope:[] from @17
(byte*) bitmap_screen#10 ← phi( @17/(byte*) bitmap_screen#4 )
(byte*) bitmap_gfx#10 ← phi( @17/(byte*) bitmap_gfx#4 )
(byte*) bitmap_gfx#5 ← (byte*) bitmap_gfx#10
(byte*) bitmap_screen#5 ← (byte*) bitmap_screen#10
to:@end
@end: scope:[] from @15
@end: scope:[] from @18
SYMBOL TABLE SSA
(label) @11
(label) @12
(label) @14
(label) @15
(label) @17
(label) @18
(label) @8
(label) @begin
(label) @end
@ -1332,9 +1337,9 @@ Added new block during phi lifting main::@19(between main::@17 and main::@5)
Added new block during phi lifting irq::@3(between irq and irq::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @8
Adding NOP phi() at start of @11
Adding NOP phi() at start of @14
Adding NOP phi() at start of @15
Adding NOP phi() at start of @17
Adding NOP phi() at start of @18
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@12
@ -1374,8 +1379,8 @@ Coalesced [106] frame_cnt#23 ← frame_cnt#1
Coalesced [111] frame_cnt#22 ← frame_cnt#0
Coalesced down to 13 phi equivalence classes
Culled Empty Block (label) @8
Culled Empty Block (label) @11
Culled Empty Block (label) @15
Culled Empty Block (label) @14
Culled Empty Block (label) @18
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@14
Culled Empty Block (label) main::@19
@ -1389,8 +1394,8 @@ Culled Empty Block (label) bitmap_init::@11
Culled Empty Block (label) bitmap_init::@12
Culled Empty Block (label) bitmap_init::@9
Culled Empty Block (label) irq::@3
Renumbering block @12 to @1
Renumbering block @14 to @2
Renumbering block @15 to @1
Renumbering block @17 to @2
Renumbering block bitmap_init::@5 to bitmap_init::@3
Renumbering block bitmap_init::@6 to bitmap_init::@4
Renumbering block bitmap_init::@7 to bitmap_init::@5

View File

@ -6,6 +6,8 @@ Fixing pointer increment (signed word*) sin16s_gen2::sintab ← ++ (signed word*
Fixing pointer array-indexing *((signed word[$200]) SINUS + (word) main::idx_x)
Fixing pointer array-indexing *((signed word[$200]) SINUS + (word) main::idx_y)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition (number~) abs_u16::$1
Warning! Adding boolean cast to non-boolean condition (number~) sgn_u16::$1
Warning! Adding boolean cast to non-boolean sub-expression (byte) frame_cnt
Identified constant variable (byte*) BITMAP
Identified constant variable (byte*) SCREEN
@ -50,12 +52,15 @@ Culled Empty Block (label) @27
Culled Empty Block (label) bitmap_init::@8
Culled Empty Block (label) @29
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) @32
Culled Empty Block (label) @33
Culled Empty Block (label) main::toD0181_@1
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@10
Culled Empty Block (label) @33
Culled Empty Block (label) @36
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -576,7 +581,7 @@ memset::@return: scope:[memset] from memset::@2
(byte[$100]) bitmap_plot_ylo#0 ← { fill( $100, 0) }
(byte[$100]) bitmap_plot_yhi#0 ← { fill( $100, 0) }
(byte[$100]) bitmap_plot_bit#0 ← { fill( $100, 0) }
to:@31
to:@34
bitmap_init: scope:[bitmap_init] from main::@12
(byte*) bitmap_init::screen#1 ← phi( main::@12/(byte*) bitmap_init::screen#0 )
(byte*) bitmap_init::gfx#1 ← phi( main::@12/(byte*) bitmap_init::gfx#0 )
@ -701,7 +706,7 @@ bitmap_plot: scope:[bitmap_plot] from main::@17
bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
return
to:@return
@31: scope:[] from @28
@34: scope:[] from @28
(byte*) bitmap_screen#25 ← phi( @28/(byte*) bitmap_screen#0 )
(byte*) bitmap_gfx#26 ← phi( @28/(byte*) bitmap_gfx#0 )
(word) rem16u#34 ← phi( @28/(word) rem16u#35 )
@ -709,12 +714,12 @@ bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
(byte*) SCREEN#0 ← ((byte*)) (number) $400
(byte[$100]) plots_per_frame#0 ← { fill( $100, 0) }
(signed word[$200]) SINUS#0 ← { fill( $200, 0) }
to:@32
main: scope:[main] from @34
(byte) frame_cnt#24 ← phi( @34/(byte) frame_cnt#9 )
(byte*) bitmap_screen#17 ← phi( @34/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#18 ← phi( @34/(byte*) bitmap_gfx#15 )
(word) rem16u#23 ← phi( @34/(word) rem16u#25 )
to:@35
main: scope:[main] from @37
(byte) frame_cnt#24 ← phi( @37/(byte) frame_cnt#9 )
(byte*) bitmap_screen#17 ← phi( @37/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#18 ← phi( @37/(byte*) bitmap_gfx#15 )
(word) rem16u#23 ← phi( @37/(word) rem16u#25 )
(signed word*) sin16s_gen2::sintab#1 ← (signed word[$200]) SINUS#0
(word) sin16s_gen2::wavelength#0 ← (number) $200
(signed word) sin16s_gen2::min#0 ← (number) -$1001
@ -922,12 +927,12 @@ main::@return: scope:[main] from main::@1
(byte*) bitmap_screen#4 ← (byte*) bitmap_screen#9
return
to:@return
@32: scope:[] from @31
(byte*) bitmap_screen#20 ← phi( @31/(byte*) bitmap_screen#25 )
(byte*) bitmap_gfx#21 ← phi( @31/(byte*) bitmap_gfx#26 )
(word) rem16u#29 ← phi( @31/(word) rem16u#34 )
@35: scope:[] from @34
(byte*) bitmap_screen#20 ← phi( @34/(byte*) bitmap_screen#25 )
(byte*) bitmap_gfx#21 ← phi( @34/(byte*) bitmap_gfx#26 )
(word) rem16u#29 ← phi( @34/(word) rem16u#34 )
(byte) frame_cnt#0 ← (number) 1
to:@34
to:@37
init_irq: scope:[init_irq] from main::@11
asm { sei }
*((byte*) PROCPORT_DDR#0) ← (byte) PROCPORT_DDR_MEMORY_MASK#0
@ -944,7 +949,7 @@ init_irq::@return: scope:[init_irq] from init_irq
return
to:@return
irq: scope:[irq] from
(byte) frame_cnt#4 ← phi( @34/(byte) frame_cnt#9 )
(byte) frame_cnt#4 ← phi( @37/(byte) frame_cnt#9 )
*((byte*) BGCOL#0) ← (byte) WHITE#0
(bool~) irq::$1 ← (number) 0 != (byte) frame_cnt#4
(bool~) irq::$0 ← ! (bool~) irq::$1
@ -964,30 +969,30 @@ irq::@return: scope:[irq] from irq::@1
(byte) frame_cnt#2 ← (byte) frame_cnt#6
return
to:@return
@34: scope:[] from @32
(byte*) bitmap_screen#14 ← phi( @32/(byte*) bitmap_screen#20 )
(byte*) bitmap_gfx#15 ← phi( @32/(byte*) bitmap_gfx#21 )
(word) rem16u#25 ← phi( @32/(word) rem16u#29 )
(byte) frame_cnt#9 ← phi( @32/(byte) frame_cnt#0 )
@37: scope:[] from @35
(byte*) bitmap_screen#14 ← phi( @35/(byte*) bitmap_screen#20 )
(byte*) bitmap_gfx#15 ← phi( @35/(byte*) bitmap_gfx#21 )
(word) rem16u#25 ← phi( @35/(word) rem16u#29 )
(byte) frame_cnt#9 ← phi( @35/(byte) frame_cnt#0 )
call main
to:@35
@35: scope:[] from @34
(byte*) bitmap_screen#10 ← phi( @34/(byte*) bitmap_screen#4 )
(byte*) bitmap_gfx#10 ← phi( @34/(byte*) bitmap_gfx#4 )
(word) rem16u#19 ← phi( @34/(word) rem16u#9 )
to:@38
@38: scope:[] from @37
(byte*) bitmap_screen#10 ← phi( @37/(byte*) bitmap_screen#4 )
(byte*) bitmap_gfx#10 ← phi( @37/(byte*) bitmap_gfx#4 )
(word) rem16u#19 ← phi( @37/(word) rem16u#9 )
(word) rem16u#10 ← (word) rem16u#19
(byte*) bitmap_gfx#5 ← (byte*) bitmap_gfx#10
(byte*) bitmap_screen#5 ← (byte*) bitmap_screen#10
to:@end
@end: scope:[] from @35
@end: scope:[] from @38
SYMBOL TABLE SSA
(label) @17
(label) @28
(label) @31
(label) @32
(label) @34
(label) @35
(label) @37
(label) @38
(label) @6
(label) @begin
(label) @end
@ -2808,9 +2813,9 @@ Adding NOP phi() at start of @begin
Adding NOP phi() at start of @6
Adding NOP phi() at start of @17
Adding NOP phi() at start of @28
Adding NOP phi() at start of @31
Adding NOP phi() at start of @34
Adding NOP phi() at start of @35
Adding NOP phi() at start of @37
Adding NOP phi() at start of @38
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@12
@ -2907,8 +2912,8 @@ Coalesced down to 30 phi equivalence classes
Culled Empty Block (label) @6
Culled Empty Block (label) @17
Culled Empty Block (label) @28
Culled Empty Block (label) @31
Culled Empty Block (label) @35
Culled Empty Block (label) @34
Culled Empty Block (label) @38
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@15
Culled Empty Block (label) main::@8
@ -2932,8 +2937,8 @@ Culled Empty Block (label) divr16u::@8
Culled Empty Block (label) divr16u::@10
Culled Empty Block (label) divr16u::@9
Culled Empty Block (label) irq::@3
Renumbering block @32 to @1
Renumbering block @34 to @2
Renumbering block @35 to @1
Renumbering block @37 to @2
Renumbering block div32u16u::@2 to div32u16u::@1
Renumbering block div32u16u::@3 to div32u16u::@2
Renumbering block mul16u::@4 to mul16u::@3

View File

@ -6,6 +6,8 @@ Fixing pointer increment (signed word*) sin16s_gen2::sintab ← ++ (signed word*
Fixing pointer array-indexing *((signed word[$200]) SINUS + (word) main::idx_x)
Fixing pointer array-indexing *((signed word[$200]) SINUS + (word) main::idx_y)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition (number~) abs_u16::$1
Warning! Adding boolean cast to non-boolean condition (number~) sgn_u16::$1
Warning! Adding boolean cast to non-boolean sub-expression (byte) frame_cnt
Identified constant variable (byte*) BITMAP
Identified constant variable (byte*) SCREEN
@ -50,6 +52,9 @@ Culled Empty Block (label) @27
Culled Empty Block (label) bitmap_init::@8
Culled Empty Block (label) @29
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) @32
Culled Empty Block (label) @33
Culled Empty Block (label) main::toD0181_@1
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@3
@ -63,7 +68,7 @@ Culled Empty Block (label) main::@20
Culled Empty Block (label) main::@19
Culled Empty Block (label) main::@21
Culled Empty Block (label) main::@22
Culled Empty Block (label) @33
Culled Empty Block (label) @36
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -585,7 +590,7 @@ memset::@return: scope:[memset] from memset::@2
(byte[$100]) bitmap_plot_ylo#0 ← { fill( $100, 0) }
(byte[$100]) bitmap_plot_yhi#0 ← { fill( $100, 0) }
(byte[$100]) bitmap_plot_bit#0 ← { fill( $100, 0) }
to:@31
to:@34
bitmap_init: scope:[bitmap_init] from main::@24
(byte*) bitmap_init::screen#1 ← phi( main::@24/(byte*) bitmap_init::screen#0 )
(byte*) bitmap_init::gfx#1 ← phi( main::@24/(byte*) bitmap_init::gfx#0 )
@ -710,7 +715,7 @@ bitmap_plot: scope:[bitmap_plot] from main::@29
bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
return
to:@return
@31: scope:[] from @28
@34: scope:[] from @28
(byte*) bitmap_screen#26 ← phi( @28/(byte*) bitmap_screen#0 )
(byte*) bitmap_gfx#27 ← phi( @28/(byte*) bitmap_gfx#0 )
(word) rem16u#35 ← phi( @28/(word) rem16u#36 )
@ -718,12 +723,12 @@ bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
(byte*) SCREEN#0 ← ((byte*)) (number) $400
(byte[$100]) plots_per_frame#0 ← { fill( $100, 0) }
(signed word[$200]) SINUS#0 ← { fill( $200, 0) }
to:@32
main: scope:[main] from @34
(byte) frame_cnt#26 ← phi( @34/(byte) frame_cnt#8 )
(byte*) bitmap_screen#17 ← phi( @34/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#18 ← phi( @34/(byte*) bitmap_gfx#15 )
(word) rem16u#23 ← phi( @34/(word) rem16u#25 )
to:@35
main: scope:[main] from @37
(byte) frame_cnt#26 ← phi( @37/(byte) frame_cnt#8 )
(byte*) bitmap_screen#17 ← phi( @37/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#18 ← phi( @37/(byte*) bitmap_gfx#15 )
(word) rem16u#23 ← phi( @37/(word) rem16u#25 )
(signed word*) sin16s_gen2::sintab#1 ← (signed word[$200]) SINUS#0
(word) sin16s_gen2::wavelength#0 ← (number) $200
(signed word) sin16s_gen2::min#0 ← (number) -$1001
@ -995,12 +1000,12 @@ main::@return: scope:[main] from main::@17
(byte*) bitmap_screen#4 ← (byte*) bitmap_screen#9
return
to:@return
@32: scope:[] from @31
(byte*) bitmap_screen#21 ← phi( @31/(byte*) bitmap_screen#26 )
(byte*) bitmap_gfx#22 ← phi( @31/(byte*) bitmap_gfx#27 )
(word) rem16u#30 ← phi( @31/(word) rem16u#35 )
@35: scope:[] from @34
(byte*) bitmap_screen#21 ← phi( @34/(byte*) bitmap_screen#26 )
(byte*) bitmap_gfx#22 ← phi( @34/(byte*) bitmap_gfx#27 )
(word) rem16u#30 ← phi( @34/(word) rem16u#35 )
(byte) frame_cnt#0 ← (number) 1
to:@34
to:@37
init_irq: scope:[init_irq] from main::@23
asm { sei }
*((byte*) PROCPORT_DDR#0) ← (byte) PROCPORT_DDR_MEMORY_MASK#0
@ -1017,7 +1022,7 @@ init_irq::@return: scope:[init_irq] from init_irq
return
to:@return
irq: scope:[irq] from
(byte) frame_cnt#4 ← phi( @34/(byte) frame_cnt#8 )
(byte) frame_cnt#4 ← phi( @37/(byte) frame_cnt#8 )
*((byte*) BGCOL#0) ← (byte) WHITE#0
(bool~) irq::$1 ← (number) 0 != (byte) frame_cnt#4
(bool~) irq::$0 ← ! (bool~) irq::$1
@ -1037,30 +1042,30 @@ irq::@return: scope:[irq] from irq::@1
(byte) frame_cnt#2 ← (byte) frame_cnt#6
return
to:@return
@34: scope:[] from @32
(byte*) bitmap_screen#14 ← phi( @32/(byte*) bitmap_screen#21 )
(byte*) bitmap_gfx#15 ← phi( @32/(byte*) bitmap_gfx#22 )
(word) rem16u#25 ← phi( @32/(word) rem16u#30 )
(byte) frame_cnt#8 ← phi( @32/(byte) frame_cnt#0 )
@37: scope:[] from @35
(byte*) bitmap_screen#14 ← phi( @35/(byte*) bitmap_screen#21 )
(byte*) bitmap_gfx#15 ← phi( @35/(byte*) bitmap_gfx#22 )
(word) rem16u#25 ← phi( @35/(word) rem16u#30 )
(byte) frame_cnt#8 ← phi( @35/(byte) frame_cnt#0 )
call main
to:@35
@35: scope:[] from @34
(byte*) bitmap_screen#10 ← phi( @34/(byte*) bitmap_screen#4 )
(byte*) bitmap_gfx#10 ← phi( @34/(byte*) bitmap_gfx#4 )
(word) rem16u#19 ← phi( @34/(word) rem16u#9 )
to:@38
@38: scope:[] from @37
(byte*) bitmap_screen#10 ← phi( @37/(byte*) bitmap_screen#4 )
(byte*) bitmap_gfx#10 ← phi( @37/(byte*) bitmap_gfx#4 )
(word) rem16u#19 ← phi( @37/(word) rem16u#9 )
(word) rem16u#10 ← (word) rem16u#19
(byte*) bitmap_gfx#5 ← (byte*) bitmap_gfx#10
(byte*) bitmap_screen#5 ← (byte*) bitmap_screen#10
to:@end
@end: scope:[] from @35
@end: scope:[] from @38
SYMBOL TABLE SSA
(label) @17
(label) @28
(label) @31
(label) @32
(label) @34
(label) @35
(label) @37
(label) @38
(label) @6
(label) @begin
(label) @end
@ -2998,9 +3003,9 @@ Adding NOP phi() at start of @begin
Adding NOP phi() at start of @6
Adding NOP phi() at start of @17
Adding NOP phi() at start of @28
Adding NOP phi() at start of @31
Adding NOP phi() at start of @34
Adding NOP phi() at start of @35
Adding NOP phi() at start of @37
Adding NOP phi() at start of @38
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@24
@ -3104,8 +3109,8 @@ Coalesced down to 32 phi equivalence classes
Culled Empty Block (label) @6
Culled Empty Block (label) @17
Culled Empty Block (label) @28
Culled Empty Block (label) @31
Culled Empty Block (label) @35
Culled Empty Block (label) @34
Culled Empty Block (label) @38
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@27
Culled Empty Block (label) main::@11
@ -3132,8 +3137,8 @@ Culled Empty Block (label) divr16u::@8
Culled Empty Block (label) divr16u::@10
Culled Empty Block (label) divr16u::@9
Culled Empty Block (label) irq::@3
Renumbering block @32 to @1
Renumbering block @34 to @2
Renumbering block @35 to @1
Renumbering block @37 to @2
Renumbering block div32u16u::@2 to div32u16u::@1
Renumbering block div32u16u::@3 to div32u16u::@2
Renumbering block mul16u::@4 to mul16u::@3

View File

@ -0,0 +1,432 @@
// Tests the simple bitmap plotter
// Plots a few lines using the bresenham line algorithm
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.label D011 = $d011
.const VIC_BMM = $20
.const VIC_DEN = $10
.const VIC_RSEL = 8
.label D018 = $d018
.const WHITE = 1
.label BITMAP = $2000
.label SCREEN = $400
.label COSTAB = SINTAB+$40
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label _6 = 8
.label _10 = $18
.label a = 2
.label i = 3
jsr bitmap_init
jsr bitmap_clear
lda #VIC_BMM|VIC_DEN|VIC_RSEL|3
sta D011
lda #toD0181_return
sta D018
lda #0
sta i
sta a
b1:
ldy a
lda COSTAB,y
sta _6
lda #0
sta _6+1
lda #$78
clc
adc bitmap_line.x1
sta bitmap_line.x1
bcc !+
inc bitmap_line.x1+1
!:
ldy a
lda SINTAB,y
sta bitmap_line.y1
lda #0
sta bitmap_line.y1+1
lda COSTAB+$20,y
sta _10
lda #0
sta _10+1
lda #$78
clc
adc bitmap_line.x2
sta bitmap_line.x2
bcc !+
inc bitmap_line.x2+1
!:
ldy a
lda SINTAB+$20,y
sta bitmap_line.y2
lda #0
sta bitmap_line.y2+1
jsr bitmap_line
lax a
axs #-[$20]
stx a
inc i
lda #8
cmp i
bne b1
b2:
inc SCREEN+$3e7
jmp b2
}
// Draw a line on the bitmap using bresenhams algorithm
// bitmap_line(word zeropage(8) x1, word zeropage(6) y1, word zeropage($18) x2, word zeropage($1a) y2)
bitmap_line: {
.label dx = $1c
.label dy = $10
.label sx = $1e
.label sy = $e
.label e1 = $a
.label e = 4
.label y = 6
.label x = 8
.label x1 = 8
.label y1 = 6
.label x2 = $18
.label y2 = $1a
lda x2
sec
sbc x1
sta abs_u16.w
lda x2+1
sbc x1+1
sta abs_u16.w+1
jsr abs_u16
lda abs_u16.return
sta dx
lda abs_u16.return+1
sta dx+1
lda y2
sec
sbc y1
sta abs_u16.w
lda y2+1
sbc y1+1
sta abs_u16.w+1
jsr abs_u16
lda x2
sec
sbc x1
sta sgn_u16.w
lda x2+1
sbc x1+1
sta sgn_u16.w+1
jsr sgn_u16
lda sgn_u16.return
sta sx
lda sgn_u16.return+1
sta sx+1
lda y2
sec
sbc y1
sta sgn_u16.w
lda y2+1
sbc y1+1
sta sgn_u16.w+1
jsr sgn_u16
lda dy+1
cmp dx+1
bcc b1
bne !+
lda dy
cmp dx
bcc b1
!:
lda dx+1
lsr
sta e+1
lda dx
ror
sta e
b4:
lda y
tax
jsr bitmap_plot
lda y
clc
adc sy
sta y
lda y+1
adc sy+1
sta y+1
lda e
clc
adc dx
sta e
lda e+1
adc dx+1
sta e+1
cmp dy+1
bne !+
lda e
cmp dy
beq b5
!:
bcc b5
lda x
clc
adc sx
sta x
lda x+1
adc sx+1
sta x+1
lda e
sec
sbc dy
sta e
lda e+1
sbc dy+1
sta e+1
b5:
lda y+1
cmp y2+1
bne b4
lda y
cmp y2
bne b4
b2:
lda y
tax
jsr bitmap_plot
rts
b1:
lda dy+1
lsr
sta e1+1
lda dy
ror
sta e1
b7:
lda y
tax
jsr bitmap_plot
lda x
clc
adc sx
sta x
lda x+1
adc sx+1
sta x+1
lda e1
clc
adc dy
sta e1
lda e1+1
adc dy+1
sta e1+1
cmp dx+1
bne !+
lda e1
cmp dx
beq b8
!:
bcc b8
lda y
clc
adc sy
sta y
lda y+1
adc sy+1
sta y+1
lda e1
sec
sbc dx
sta e1
lda e1+1
sbc dx+1
sta e1+1
b8:
lda x+1
cmp x2+1
bne b7
lda x
cmp x2
bne b7
jmp b2
}
// Plot a single dot in the bitmap
// bitmap_plot(word zeropage(8) x, byte register(X) y)
bitmap_plot: {
.label _1 = $22
.label plotter = $20
.label x = 8
lda bitmap_plot_yhi,x
sta plotter+1
lda bitmap_plot_ylo,x
sta plotter
lda x
and #<$fff8
sta _1
lda x+1
and #>$fff8
sta _1+1
lda plotter
clc
adc _1
sta plotter
lda plotter+1
adc _1+1
sta plotter+1
lda x
tay
lda bitmap_plot_bit,y
ldy #0
ora (plotter),y
sta (plotter),y
rts
}
// Get the sign of a 16-bit unsigned number treated as a signed number.
// Returns unsigned -1 if the number is
// sgn_u16(word zeropage($c) w)
sgn_u16: {
.label w = $c
.label return = $e
lda w+1
and #$80
cmp #0
bne b1
lda #1
sta return
lda #0
sta return+1
rts
b1:
lda #<$ffff
sta return
lda #>$ffff
sta return+1
rts
}
// Get the absolute value of a 16-bit unsigned number treated as a signed number.
// abs_u16(word zeropage($10) w)
abs_u16: {
.label w = $10
.label return = $10
lda w+1
and #$80
cmp #0
bne b1
rts
b1:
sec
lda #0
sbc return
sta return
lda #0
sbc return+1
sta return+1
rts
}
// Clear all graphics on the bitmap
// bgcol - the background color to fill the screen with
// fgcol - the foreground color to fill the screen with
bitmap_clear: {
.const col = WHITE*$10
ldx #col
lda #<$3e8
sta memset.num
lda #>$3e8
sta memset.num+1
lda #<SCREEN
sta memset.str
lda #>SCREEN
sta memset.str+1
jsr memset
ldx #0
lda #<$1f40
sta memset.num
lda #>$1f40
sta memset.num+1
lda #<BITMAP
sta memset.str
lda #>BITMAP
sta memset.str+1
jsr memset
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zeropage($12) str, byte register(X) c, word zeropage($14) num)
memset: {
.label end = $14
.label dst = $12
.label str = $12
.label num = $14
lda end
clc
adc str
sta end
lda end+1
adc str+1
sta end+1
b1:
txa
ldy #0
sta (dst),y
inc dst
bne !+
inc dst+1
!:
lda dst+1
cmp end+1
bne b1
lda dst
cmp end
bne b1
rts
}
// Initialize bitmap plotting tables
bitmap_init: {
.label _7 = $24
.label yoffs = $16
ldx #0
lda #$80
b1:
sta bitmap_plot_bit,x
lsr
cmp #0
bne b2
lda #$80
b2:
inx
cpx #0
bne b1
lda #<BITMAP
sta yoffs
lda #>BITMAP
sta yoffs+1
ldx #0
b3:
lda #7
sax _7
lda yoffs
ora _7
sta bitmap_plot_ylo,x
lda yoffs+1
sta bitmap_plot_yhi,x
lda #7
cmp _7
bne b4
clc
lda yoffs
adc #<$28*8
sta yoffs
lda yoffs+1
adc #>$28*8
sta yoffs+1
b4:
inx
cpx #0
bne b3
rts
}
// Tables for the plotter - initialized by calling bitmap_init();
bitmap_plot_ylo: .fill $100, 0
bitmap_plot_yhi: .fill $100, 0
bitmap_plot_bit: .fill $100, 0
.align $100
SINTAB:
.fill $180, 99.5+99.5*sin(i*2*PI/256)

View File

@ -0,0 +1,237 @@
@begin: scope:[] from
[0] phi()
to:@1
@1: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @1
[3] phi()
main: scope:[main] from @1
[4] phi()
[5] call bitmap_init
to:main::@4
main::@4: scope:[main] from main
[6] phi()
[7] call bitmap_clear
to:main::@5
main::@5: scope:[main] from main::@4
[8] *((const byte*) D011#0) ← (const byte) VIC_BMM#0|(const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3
to:main::toD0181
main::toD0181: scope:[main] from main::@5
[9] phi()
to:main::@3
main::@3: scope:[main] from main::toD0181
[10] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
to:main::@1
main::@1: scope:[main] from main::@3 main::@6
[11] (byte) main::i#2 ← phi( main::@6/(byte) main::i#1 main::@3/(byte) 0 )
[11] (byte) main::a#2 ← phi( main::@6/(byte) main::a#1 main::@3/(byte) 0 )
[12] (word~) main::$6 ← (word)*((const byte*) COSTAB#0 + (byte) main::a#2)
[13] (word) bitmap_line::x1#0 ← (word~) main::$6 + (byte) $78
[14] (word) bitmap_line::y1#0 ← (word)*((const byte[$180]) SINTAB#0 + (byte) main::a#2)
[15] (word~) main::$10 ← (word)*((const byte*) COSTAB#0+(byte) $20 + (byte) main::a#2)
[16] (word) bitmap_line::x2#0 ← (word~) main::$10 + (byte) $78
[17] (word) bitmap_line::y2#0 ← (word)*((const byte[$180]) SINTAB#0+(byte) $20 + (byte) main::a#2)
[18] call bitmap_line
to:main::@6
main::@6: scope:[main] from main::@1
[19] (byte) main::a#1 ← (byte) main::a#2 + (byte) $20
[20] (byte) main::i#1 ← ++ (byte) main::i#2
[21] if((byte) main::i#1!=(byte) 8) goto main::@1
to:main::@2
main::@2: scope:[main] from main::@2 main::@6
[22] *((const byte*) SCREEN#0+(word) $3e7) ← ++ *((const byte*) SCREEN#0+(word) $3e7)
to:main::@2
bitmap_line: scope:[bitmap_line] from main::@1
[23] (word) abs_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0
[24] call abs_u16
[25] (word) abs_u16::return#0 ← (word) abs_u16::return#4
to:bitmap_line::@10
bitmap_line::@10: scope:[bitmap_line] from bitmap_line
[26] (word) bitmap_line::dx#0 ← (word) abs_u16::return#0
[27] (word) abs_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0
[28] call abs_u16
[29] (word) abs_u16::return#1 ← (word) abs_u16::return#4
to:bitmap_line::@11
bitmap_line::@11: scope:[bitmap_line] from bitmap_line::@10
[30] (word) bitmap_line::dy#0 ← (word) abs_u16::return#1
[31] (word) sgn_u16::w#0 ← (word) bitmap_line::x2#0 - (word) bitmap_line::x1#0
[32] call sgn_u16
[33] (word) sgn_u16::return#0 ← (word) sgn_u16::return#4
to:bitmap_line::@12
bitmap_line::@12: scope:[bitmap_line] from bitmap_line::@11
[34] (word) bitmap_line::sx#0 ← (word) sgn_u16::return#0
[35] (word) sgn_u16::w#1 ← (word) bitmap_line::y2#0 - (word) bitmap_line::y1#0
[36] call sgn_u16
[37] (word) sgn_u16::return#1 ← (word) sgn_u16::return#4
to:bitmap_line::@13
bitmap_line::@13: scope:[bitmap_line] from bitmap_line::@12
[38] (word) bitmap_line::sy#0 ← (word) sgn_u16::return#1
[39] if((word) bitmap_line::dx#0>(word) bitmap_line::dy#0) goto bitmap_line::@1
to:bitmap_line::@3
bitmap_line::@3: scope:[bitmap_line] from bitmap_line::@13
[40] (word) bitmap_line::e#0 ← (word) bitmap_line::dx#0 >> (byte) 1
to:bitmap_line::@4
bitmap_line::@4: scope:[bitmap_line] from bitmap_line::@3 bitmap_line::@5
[41] (word) bitmap_line::e#3 ← phi( bitmap_line::@3/(word) bitmap_line::e#0 bitmap_line::@5/(word) bitmap_line::e#6 )
[41] (word) bitmap_line::x#11 ← phi( bitmap_line::@3/(word) bitmap_line::x1#0 bitmap_line::@5/(word) bitmap_line::x#10 )
[41] (word) bitmap_line::y#3 ← phi( bitmap_line::@3/(word) bitmap_line::y1#0 bitmap_line::@5/(word) bitmap_line::y#1 )
[42] (byte) bitmap_plot::y#0 ← (byte)(word) bitmap_line::y#3
[43] (word) bitmap_plot::x#0 ← (word) bitmap_line::x#11
[44] call bitmap_plot
to:bitmap_line::@14
bitmap_line::@14: scope:[bitmap_line] from bitmap_line::@4
[45] (word) bitmap_line::y#1 ← (word) bitmap_line::y#3 + (word) bitmap_line::sy#0
[46] (word) bitmap_line::e#1 ← (word) bitmap_line::e#3 + (word) bitmap_line::dx#0
[47] if((word) bitmap_line::dy#0>=(word) bitmap_line::e#1) goto bitmap_line::@5
to:bitmap_line::@6
bitmap_line::@6: scope:[bitmap_line] from bitmap_line::@14
[48] (word) bitmap_line::x#1 ← (word) bitmap_line::x#11 + (word) bitmap_line::sx#0
[49] (word) bitmap_line::e#2 ← (word) bitmap_line::e#1 - (word) bitmap_line::dy#0
to:bitmap_line::@5
bitmap_line::@5: scope:[bitmap_line] from bitmap_line::@14 bitmap_line::@6
[50] (word) bitmap_line::e#6 ← phi( bitmap_line::@14/(word) bitmap_line::e#1 bitmap_line::@6/(word) bitmap_line::e#2 )
[50] (word) bitmap_line::x#10 ← phi( bitmap_line::@14/(word) bitmap_line::x#11 bitmap_line::@6/(word) bitmap_line::x#1 )
[51] if((word) bitmap_line::y#1!=(word) bitmap_line::y2#0) goto bitmap_line::@4
to:bitmap_line::@2
bitmap_line::@2: scope:[bitmap_line] from bitmap_line::@5 bitmap_line::@8
[52] (word) bitmap_line::x#5 ← phi( bitmap_line::@8/(word) bitmap_line::x#13 bitmap_line::@5/(word) bitmap_line::x#10 )
[52] (word) bitmap_line::y#6 ← phi( bitmap_line::@8/(word) bitmap_line::y#11 bitmap_line::@5/(word) bitmap_line::y#1 )
[53] (byte) bitmap_plot::y#1 ← (byte)(word) bitmap_line::y#6
[54] (word) bitmap_plot::x#1 ← (word) bitmap_line::x#5
[55] call bitmap_plot
to:bitmap_line::@return
bitmap_line::@return: scope:[bitmap_line] from bitmap_line::@2
[56] return
to:@return
bitmap_line::@1: scope:[bitmap_line] from bitmap_line::@13
[57] (word) bitmap_line::e1#0 ← (word) bitmap_line::dy#0 >> (byte) 1
to:bitmap_line::@7
bitmap_line::@7: scope:[bitmap_line] from bitmap_line::@1 bitmap_line::@8
[58] (word) bitmap_line::e1#3 ← phi( bitmap_line::@1/(word) bitmap_line::e1#0 bitmap_line::@8/(word) bitmap_line::e1#6 )
[58] (word) bitmap_line::x#6 ← phi( bitmap_line::@1/(word) bitmap_line::x1#0 bitmap_line::@8/(word) bitmap_line::x#13 )
[58] (word) bitmap_line::y#13 ← phi( bitmap_line::@1/(word) bitmap_line::y1#0 bitmap_line::@8/(word) bitmap_line::y#11 )
[59] (byte) bitmap_plot::y#2 ← (byte)(word) bitmap_line::y#13
[60] (word) bitmap_plot::x#2 ← (word) bitmap_line::x#6
[61] call bitmap_plot
to:bitmap_line::@15
bitmap_line::@15: scope:[bitmap_line] from bitmap_line::@7
[62] (word) bitmap_line::x#13 ← (word) bitmap_line::x#6 + (word) bitmap_line::sx#0
[63] (word) bitmap_line::e1#1 ← (word) bitmap_line::e1#3 + (word) bitmap_line::dy#0
[64] if((word) bitmap_line::dx#0>=(word) bitmap_line::e1#1) goto bitmap_line::@8
to:bitmap_line::@9
bitmap_line::@9: scope:[bitmap_line] from bitmap_line::@15
[65] (word) bitmap_line::y#2 ← (word) bitmap_line::y#13 + (word) bitmap_line::sy#0
[66] (word) bitmap_line::e1#2 ← (word) bitmap_line::e1#1 - (word) bitmap_line::dx#0
to:bitmap_line::@8
bitmap_line::@8: scope:[bitmap_line] from bitmap_line::@15 bitmap_line::@9
[67] (word) bitmap_line::e1#6 ← phi( bitmap_line::@9/(word) bitmap_line::e1#2 bitmap_line::@15/(word) bitmap_line::e1#1 )
[67] (word) bitmap_line::y#11 ← phi( bitmap_line::@9/(word) bitmap_line::y#2 bitmap_line::@15/(word) bitmap_line::y#13 )
[68] if((word) bitmap_line::x#13!=(word) bitmap_line::x2#0) goto bitmap_line::@7
to:bitmap_line::@2
bitmap_plot: scope:[bitmap_plot] from bitmap_line::@2 bitmap_line::@4 bitmap_line::@7
[69] (word) bitmap_plot::x#3 ← phi( bitmap_line::@2/(word) bitmap_plot::x#1 bitmap_line::@4/(word) bitmap_plot::x#0 bitmap_line::@7/(word) bitmap_plot::x#2 )
[69] (byte) bitmap_plot::y#3 ← phi( bitmap_line::@2/(byte) bitmap_plot::y#1 bitmap_line::@4/(byte) bitmap_plot::y#0 bitmap_line::@7/(byte) bitmap_plot::y#2 )
[70] (word) bitmap_plot::plotter#0 ← *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#3) w= *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#3)
[71] (word~) bitmap_plot::$1 ← (word) bitmap_plot::x#3 & (word) $fff8
[72] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$1
[73] (byte~) bitmap_plot::$2 ← < (word) bitmap_plot::x#3
[74] *((byte*) bitmap_plot::plotter#1) ← *((byte*) bitmap_plot::plotter#1) | *((const byte[$100]) bitmap_plot_bit#0 + (byte~) bitmap_plot::$2)
to:bitmap_plot::@return
bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
[75] return
to:@return
sgn_u16: scope:[sgn_u16] from bitmap_line::@11 bitmap_line::@12
[76] (word) sgn_u16::w#2 ← phi( bitmap_line::@11/(word) sgn_u16::w#0 bitmap_line::@12/(word) sgn_u16::w#1 )
[77] (byte~) sgn_u16::$0 ← > (word) sgn_u16::w#2
[78] (byte~) sgn_u16::$1 ← (byte~) sgn_u16::$0 & (byte) $80
[79] if((byte) 0!=(byte~) sgn_u16::$1) goto sgn_u16::@1
to:sgn_u16::@return
sgn_u16::@1: scope:[sgn_u16] from sgn_u16
[80] phi()
to:sgn_u16::@return
sgn_u16::@return: scope:[sgn_u16] from sgn_u16 sgn_u16::@1
[81] (word) sgn_u16::return#4 ← phi( sgn_u16::@1/(word) $ffff sgn_u16/(byte) 1 )
[82] return
to:@return
abs_u16: scope:[abs_u16] from bitmap_line bitmap_line::@10
[83] (word) abs_u16::w#2 ← phi( bitmap_line/(word) abs_u16::w#0 bitmap_line::@10/(word) abs_u16::w#1 )
[84] (byte~) abs_u16::$0 ← > (word) abs_u16::w#2
[85] (byte~) abs_u16::$1 ← (byte~) abs_u16::$0 & (byte) $80
[86] if((byte) 0!=(byte~) abs_u16::$1) goto abs_u16::@1
to:abs_u16::@return
abs_u16::@1: scope:[abs_u16] from abs_u16
[87] (word) abs_u16::return#2 ← - (word) abs_u16::w#2
to:abs_u16::@return
abs_u16::@return: scope:[abs_u16] from abs_u16 abs_u16::@1
[88] (word) abs_u16::return#4 ← phi( abs_u16::@1/(word) abs_u16::return#2 abs_u16/(word) abs_u16::w#2 )
[89] return
to:@return
bitmap_clear: scope:[bitmap_clear] from main::@4
[90] phi()
[91] call memset
to:bitmap_clear::@1
bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear
[92] phi()
[93] call memset
to:bitmap_clear::@return
bitmap_clear::@return: scope:[bitmap_clear] from bitmap_clear::@1
[94] return
to:@return
memset: scope:[memset] from bitmap_clear bitmap_clear::@1
[95] (byte) memset::c#3 ← phi( bitmap_clear/(const byte) bitmap_clear::col#0 bitmap_clear::@1/(byte) 0 )
[95] (word) memset::num#2 ← phi( bitmap_clear/(word) $3e8 bitmap_clear::@1/(word) $1f40 )
[95] (void*) memset::str#2 ← phi( bitmap_clear/(void*)(const byte*) SCREEN#0 bitmap_clear::@1/(void*)(const byte*) BITMAP#0 )
[96] (byte*) memset::end#0 ← (byte*)(void*) memset::str#2 + (word) memset::num#2
[97] (byte*~) memset::dst#3 ← (byte*)(void*) memset::str#2
to:memset::@1
memset::@1: scope:[memset] from memset memset::@1
[98] (byte*) memset::dst#2 ← phi( memset/(byte*~) memset::dst#3 memset::@1/(byte*) memset::dst#1 )
[99] *((byte*) memset::dst#2) ← (byte) memset::c#3
[100] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
[101] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@1
to:memset::@return
memset::@return: scope:[memset] from memset::@1
[102] return
to:@return
bitmap_init: scope:[bitmap_init] from main
[103] phi()
to:bitmap_init::@1
bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2
[104] (byte) bitmap_init::x#2 ← phi( bitmap_init/(byte) 0 bitmap_init::@2/(byte) bitmap_init::x#1 )
[104] (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) $80 bitmap_init::@2/(byte) bitmap_init::bits#4 )
[105] *((const byte[$100]) bitmap_plot_bit#0 + (byte) bitmap_init::x#2) ← (byte) bitmap_init::bits#3
[106] (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (byte) 1
[107] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@6
to:bitmap_init::@2
bitmap_init::@6: scope:[bitmap_init] from bitmap_init::@1
[108] phi()
to:bitmap_init::@2
bitmap_init::@2: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@6
[109] (byte) bitmap_init::bits#4 ← phi( bitmap_init::@6/(byte) bitmap_init::bits#1 bitmap_init::@1/(byte) $80 )
[110] (byte) bitmap_init::x#1 ← ++ (byte) bitmap_init::x#2
[111] if((byte) bitmap_init::x#1!=(byte) 0) goto bitmap_init::@1
to:bitmap_init::@3
bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@2 bitmap_init::@4
[112] (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@2/(const byte*) BITMAP#0 bitmap_init::@4/(byte*) bitmap_init::yoffs#4 )
[112] (byte) bitmap_init::y#2 ← phi( bitmap_init::@2/(byte) 0 bitmap_init::@4/(byte) bitmap_init::y#1 )
[113] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7
[114] (byte~) bitmap_init::$4 ← < (byte*) bitmap_init::yoffs#2
[115] (byte~) bitmap_init::$5 ← (byte~) bitmap_init::$7 | (byte~) bitmap_init::$4
[116] *((const byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$5
[117] (byte~) bitmap_init::$6 ← > (byte*) bitmap_init::yoffs#2
[118] *((const byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_init::y#2) ← (byte~) bitmap_init::$6
[119] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@4
to:bitmap_init::@5
bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@3
[120] (byte*) bitmap_init::yoffs#1 ← (byte*) bitmap_init::yoffs#2 + (word)(number) $28*(number) 8
to:bitmap_init::@4
bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@3 bitmap_init::@5
[121] (byte*) bitmap_init::yoffs#4 ← phi( bitmap_init::@3/(byte*) bitmap_init::yoffs#2 bitmap_init::@5/(byte*) bitmap_init::yoffs#1 )
[122] (byte) bitmap_init::y#1 ← ++ (byte) bitmap_init::y#2
[123] if((byte) bitmap_init::y#1!=(byte) 0) goto bitmap_init::@3
to:bitmap_init::@return
bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@4
[124] return
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,248 @@
(label) @1
(label) @begin
(label) @end
(byte*) BITMAP
(const byte*) BITMAP#0 BITMAP = (byte*) 8192
(byte) BLACK
(byte*) COSTAB
(const byte*) COSTAB#0 COSTAB = (const byte[$180]) SINTAB#0+(byte) $40
(byte*) D011
(const byte*) D011#0 D011 = (byte*) 53265
(byte*) D018
(const byte*) D018#0 D018 = (byte*) 53272
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*) 1024
(byte[$180]) SINTAB
(const byte[$180]) SINTAB#0 SINTAB = kickasm {{ .fill $180, 99.5+99.5*sin(i*2*PI/256) }}
(byte) VIC_BMM
(const byte) VIC_BMM#0 VIC_BMM = (byte) $20
(byte) VIC_DEN
(const byte) VIC_DEN#0 VIC_DEN = (byte) $10
(byte) VIC_RSEL
(const byte) VIC_RSEL#0 VIC_RSEL = (byte) 8
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte) 1
(word()) abs_u16((word) abs_u16::w)
(byte~) abs_u16::$0 reg byte a 4.0
(byte~) abs_u16::$1 reg byte a 4.0
(label) abs_u16::@1
(label) abs_u16::@return
(word) abs_u16::return
(word) abs_u16::return#0 return zp ZP_WORD:16 4.0
(word) abs_u16::return#1 return zp ZP_WORD:16 4.0
(word) abs_u16::return#2 return zp ZP_WORD:16 4.0
(word) abs_u16::return#4 return zp ZP_WORD:16 2.0
(word) abs_u16::w
(word) abs_u16::w#0 w zp ZP_WORD:16 4.0
(word) abs_u16::w#1 w zp ZP_WORD:16 4.0
(word) abs_u16::w#2 w zp ZP_WORD:16 2.5
(void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol)
(label) bitmap_clear::@1
(label) bitmap_clear::@return
(byte) bitmap_clear::bgcol
(byte) bitmap_clear::col
(const byte) bitmap_clear::col#0 col = (const byte) WHITE#0*(byte) $10
(byte) bitmap_clear::fgcol
(byte*) bitmap_gfx
(void()) bitmap_init((byte*) bitmap_init::gfx , (byte*) bitmap_init::screen)
(byte~) bitmap_init::$4 reg byte a 22.0
(byte~) bitmap_init::$5 reg byte a 22.0
(byte~) bitmap_init::$6 reg byte a 22.0
(byte~) bitmap_init::$7 $7 zp ZP_BYTE:36 5.5
(label) bitmap_init::@1
(label) bitmap_init::@2
(label) bitmap_init::@3
(label) bitmap_init::@4
(label) bitmap_init::@5
(label) bitmap_init::@6
(label) bitmap_init::@return
(byte) bitmap_init::bits
(byte) bitmap_init::bits#1 reg byte a 11.0
(byte) bitmap_init::bits#3 reg byte a 16.5
(byte) bitmap_init::bits#4 reg byte a 7.333333333333333
(byte*) bitmap_init::gfx
(byte*) bitmap_init::screen
(byte) bitmap_init::x
(byte) bitmap_init::x#1 reg byte x 16.5
(byte) bitmap_init::x#2 reg byte x 5.5
(byte) bitmap_init::y
(byte) bitmap_init::y#1 reg byte x 16.5
(byte) bitmap_init::y#2 reg byte x 5.5
(byte*) bitmap_init::yoffs
(byte*) bitmap_init::yoffs#1 yoffs zp ZP_WORD:22 22.0
(byte*) bitmap_init::yoffs#2 yoffs zp ZP_WORD:22 6.875
(byte*) bitmap_init::yoffs#4 yoffs zp ZP_WORD:22 11.0
(void()) bitmap_line((word) bitmap_line::x1 , (word) bitmap_line::y1 , (word) bitmap_line::x2 , (word) bitmap_line::y2)
(label) bitmap_line::@1
(label) bitmap_line::@10
(label) bitmap_line::@11
(label) bitmap_line::@12
(label) bitmap_line::@13
(label) bitmap_line::@14
(label) bitmap_line::@15
(label) bitmap_line::@2
(label) bitmap_line::@3
(label) bitmap_line::@4
(label) bitmap_line::@5
(label) bitmap_line::@6
(label) bitmap_line::@7
(label) bitmap_line::@8
(label) bitmap_line::@9
(label) bitmap_line::@return
(word) bitmap_line::dx
(word) bitmap_line::dx#0 dx zp ZP_WORD:28 8.131578947368421
(word) bitmap_line::dy
(word) bitmap_line::dy#0 dy zp ZP_WORD:16 9.088235294117647
(word) bitmap_line::e
(word) bitmap_line::e#0 e zp ZP_WORD:4 4.0
(word) bitmap_line::e#1 e zp ZP_WORD:4 134.66666666666666
(word) bitmap_line::e#2 e zp ZP_WORD:4 202.0
(word) bitmap_line::e#3 e zp ZP_WORD:4 40.8
(word) bitmap_line::e#6 e zp ZP_WORD:4 151.5
(word) bitmap_line::e1
(word) bitmap_line::e1#0 e1 zp ZP_WORD:10 4.0
(word) bitmap_line::e1#1 e1 zp ZP_WORD:10 134.66666666666666
(word) bitmap_line::e1#2 e1 zp ZP_WORD:10 202.0
(word) bitmap_line::e1#3 e1 zp ZP_WORD:10 40.8
(word) bitmap_line::e1#6 e1 zp ZP_WORD:10 151.5
(word) bitmap_line::sx
(word) bitmap_line::sx#0 sx zp ZP_WORD:30 6.800000000000001
(word) bitmap_line::sy
(word) bitmap_line::sy#0 sy zp ZP_WORD:14 7.846153846153847
(word) bitmap_line::x
(word) bitmap_line::x#1 x zp ZP_WORD:8 101.0
(word) bitmap_line::x#10 x zp ZP_WORD:8 202.0
(word) bitmap_line::x#11 x zp ZP_WORD:8 58.00000000000001
(word) bitmap_line::x#13 x zp ZP_WORD:8 57.714285714285715
(word) bitmap_line::x#5 x zp ZP_WORD:8 102.0
(word) bitmap_line::x#6 x zp ZP_WORD:8 76.25
(word) bitmap_line::x1
(word) bitmap_line::x1#0 x1 zp ZP_WORD:8 0.7916666666666667
(word) bitmap_line::x2
(word) bitmap_line::x2#0 x2 zp ZP_WORD:24 3.741935483870968
(word) bitmap_line::y
(word) bitmap_line::y#1 y zp ZP_WORD:6 57.714285714285715
(word) bitmap_line::y#11 y zp ZP_WORD:6 202.0
(word) bitmap_line::y#13 y zp ZP_WORD:6 43.57142857142858
(word) bitmap_line::y#2 y zp ZP_WORD:6 101.0
(word) bitmap_line::y#3 y zp ZP_WORD:6 51.0
(word) bitmap_line::y#6 y zp ZP_WORD:6 202.0
(word) bitmap_line::y1
(word) bitmap_line::y1#0 y1 zp ZP_WORD:6 0.826086956521739
(word) bitmap_line::y2
(word) bitmap_line::y2#0 y2 zp ZP_WORD:26 3.8666666666666667
(void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y)
(word~) bitmap_plot::$1 $1 zp ZP_WORD:34 4.0
(byte~) bitmap_plot::$2 reg byte a 4.0
(label) bitmap_plot::@return
(byte*) bitmap_plot::plotter
(word) bitmap_plot::plotter#0 plotter zp ZP_WORD:32 1.0
(byte*) bitmap_plot::plotter#1 plotter zp ZP_WORD:32 3.0
(word) bitmap_plot::x
(word) bitmap_plot::x#0 x zp ZP_WORD:8 202.0
(word) bitmap_plot::x#1 x zp ZP_WORD:8 4.0
(word) bitmap_plot::x#2 x zp ZP_WORD:8 202.0
(word) bitmap_plot::x#3 x zp ZP_WORD:8 52.0
(byte) bitmap_plot::y
(byte) bitmap_plot::y#0 reg byte x 101.0
(byte) bitmap_plot::y#1 reg byte x 2.0
(byte) bitmap_plot::y#2 reg byte x 101.0
(byte) bitmap_plot::y#3 reg byte x 208.0
(byte[$100]) bitmap_plot_bit
(const byte[$100]) bitmap_plot_bit#0 bitmap_plot_bit = { fill( $100, 0) }
(byte[$100]) bitmap_plot_yhi
(const byte[$100]) bitmap_plot_yhi#0 bitmap_plot_yhi = { fill( $100, 0) }
(byte[$100]) bitmap_plot_ylo
(const byte[$100]) bitmap_plot_ylo#0 bitmap_plot_ylo = { fill( $100, 0) }
(byte*) bitmap_screen
(void()) main()
(word~) main::$10 $10 zp ZP_WORD:24 22.0
(word~) main::$6 $6 zp ZP_WORD:8 22.0
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(byte) main::a
(byte) main::a#1 a zp ZP_BYTE:2 7.333333333333333
(byte) main::a#2 a zp ZP_BYTE:2 2.75
(byte) main::i
(byte) main::i#1 i zp ZP_BYTE:3 16.5
(byte) main::i#2 i zp ZP_BYTE:3 2.4444444444444446
(label) main::toD0181
(word~) main::toD0181_$0
(number~) main::toD0181_$1
(number~) main::toD0181_$2
(number~) main::toD0181_$3
(word~) main::toD0181_$4
(byte~) main::toD0181_$5
(number~) main::toD0181_$6
(number~) main::toD0181_$7
(number~) main::toD0181_$8
(byte*) main::toD0181_gfx
(byte) main::toD0181_return
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4|>(word)(const byte*) BITMAP#0/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@return
(byte) memset::c
(byte) memset::c#3 reg byte x 1.5714285714285714
(byte*) memset::dst
(byte*) memset::dst#1 dst zp ZP_WORD:18 16.5
(byte*) memset::dst#2 dst zp ZP_WORD:18 17.5
(byte*~) memset::dst#3 dst zp ZP_WORD:18 4.0
(byte*) memset::end
(byte*) memset::end#0 end zp ZP_WORD:20 2.1666666666666665
(word) memset::num
(word) memset::num#2 num zp ZP_WORD:20 2.0
(void*) memset::return
(void*) memset::str
(void*) memset::str#2 str zp ZP_WORD:18
(word()) sgn_u16((word) sgn_u16::w)
(byte~) sgn_u16::$0 reg byte a 4.0
(byte~) sgn_u16::$1 reg byte a 4.0
(label) sgn_u16::@1
(label) sgn_u16::@return
(word) sgn_u16::return
(word) sgn_u16::return#0 return zp ZP_WORD:14 4.0
(word) sgn_u16::return#1 return zp ZP_WORD:14 4.0
(word) sgn_u16::return#4 return zp ZP_WORD:14 1.0
(word) sgn_u16::w
(word) sgn_u16::w#0 w zp ZP_WORD:12 4.0
(word) sgn_u16::w#1 w zp ZP_WORD:12 4.0
(word) sgn_u16::w#2 w zp ZP_WORD:12 6.0
zp ZP_BYTE:2 [ main::a#2 main::a#1 ]
zp ZP_BYTE:3 [ main::i#2 main::i#1 ]
zp ZP_WORD:4 [ bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
zp ZP_WORD:6 [ bitmap_line::y#13 bitmap_line::y#6 bitmap_line::y#11 bitmap_line::y#3 bitmap_line::y1#0 bitmap_line::y#1 bitmap_line::y#2 ]
zp ZP_WORD:8 [ bitmap_line::x#6 bitmap_line::x#5 bitmap_line::x#13 bitmap_line::x#11 bitmap_line::x1#0 bitmap_line::x#10 bitmap_line::x#1 bitmap_plot::x#3 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#2 main::$6 ]
zp ZP_WORD:10 [ bitmap_line::e1#3 bitmap_line::e1#0 bitmap_line::e1#6 bitmap_line::e1#2 bitmap_line::e1#1 ]
reg byte x [ bitmap_plot::y#3 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#2 ]
zp ZP_WORD:12 [ sgn_u16::w#2 sgn_u16::w#0 sgn_u16::w#1 ]
zp ZP_WORD:14 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
zp ZP_WORD:16 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp ZP_WORD:18 [ memset::str#2 memset::dst#2 memset::dst#3 memset::dst#1 ]
zp ZP_WORD:20 [ memset::num#2 memset::end#0 ]
reg byte x [ memset::c#3 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp ZP_WORD:22 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ]
zp ZP_WORD:24 [ main::$10 bitmap_line::x2#0 ]
zp ZP_WORD:26 [ bitmap_line::y2#0 ]
zp ZP_WORD:28 [ bitmap_line::dx#0 ]
zp ZP_WORD:30 [ bitmap_line::sx#0 ]
zp ZP_WORD:32 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 ]
zp ZP_WORD:34 [ bitmap_plot::$1 ]
reg byte a [ bitmap_plot::$2 ]
reg byte a [ sgn_u16::$0 ]
reg byte a [ sgn_u16::$1 ]
reg byte a [ abs_u16::$0 ]
reg byte a [ abs_u16::$1 ]
zp ZP_BYTE:36 [ bitmap_init::$7 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]

View File

@ -3,6 +3,8 @@ Fixing pointer increment (signed word*) sin16s_gen2::sintab ← ++ (signed word*
Fixing pointer addition (signed word*~) render_sine::$0 ← (signed word[$200]) sin + (word) render_sine::sin_idx
Fixing pointer addition (signed word*~) render_sine::$3 ← (signed word[$200]) sin2 + (word) render_sine::sin_idx
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition (number~) abs_u16::$1
Warning! Adding boolean cast to non-boolean condition (number~) sgn_u16::$1
Identified constant variable (byte*) SCREEN
Identified constant variable (byte*) BITMAP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
@ -47,6 +49,9 @@ Culled Empty Block (label) @27
Culled Empty Block (label) bitmap_init::@8
Culled Empty Block (label) @29
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) @32
Culled Empty Block (label) @33
Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@1
Culled Empty Block (label) main::vicSelectGfxBank1_@return
Culled Empty Block (label) main::toD0181_@1
@ -54,9 +59,9 @@ Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Culled Empty Block (label) @32
Culled Empty Block (label) @35
Culled Empty Block (label) render_sine::@4
Culled Empty Block (label) @33
Culled Empty Block (label) @36
Culled Empty Block (label) wrap_y::@4
Culled Empty Block (label) wrap_y::@3
Culled Empty Block (label) wrap_y::@5
@ -581,7 +586,7 @@ memset::@return: scope:[memset] from memset::@2
(byte[$100]) bitmap_plot_ylo#0 ← { fill( $100, 0) }
(byte[$100]) bitmap_plot_yhi#0 ← { fill( $100, 0) }
(byte[$100]) bitmap_plot_bit#0 ← { fill( $100, 0) }
to:@31
to:@34
bitmap_init: scope:[bitmap_init] from main::@8
(byte*) bitmap_init::screen#1 ← phi( main::@8/(byte*) bitmap_init::screen#0 )
(byte*) bitmap_init::gfx#1 ← phi( main::@8/(byte*) bitmap_init::gfx#0 )
@ -706,7 +711,7 @@ bitmap_plot: scope:[bitmap_plot] from render_sine::@5 render_sine::@7
bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
return
to:@return
@31: scope:[] from @28
@34: scope:[] from @28
(word) rem16u#30 ← phi( @28/(word) rem16u#32 )
(byte*) bitmap_screen#20 ← phi( @28/(byte*) bitmap_screen#0 )
(byte*) bitmap_gfx#21 ← phi( @28/(byte*) bitmap_gfx#0 )
@ -718,11 +723,11 @@ bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
.word sin(toRadians([i*360]/512))*320
}
}}
to:@34
main: scope:[main] from @34
(word) rem16u#42 ← phi( @34/(word) rem16u#25 )
(byte*) bitmap_screen#33 ← phi( @34/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#34 ← phi( @34/(byte*) bitmap_gfx#15 )
to:@37
main: scope:[main] from @37
(word) rem16u#42 ← phi( @37/(word) rem16u#25 )
(byte*) bitmap_screen#33 ← phi( @37/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#34 ← phi( @37/(byte*) bitmap_gfx#15 )
asm { sei }
*((byte*) PROCPORT_DDR#0) ← (byte) PROCPORT_DDR_MEMORY_MASK#0
*((byte*) PROCPORT#0) ← (byte) PROCPORT_RAM_IO#0
@ -960,28 +965,28 @@ wrap_y::@return: scope:[wrap_y] from wrap_y::@9
(byte) wrap_y::return#3 ← (byte) wrap_y::return#6
return
to:@return
@34: scope:[] from @31
(word) rem16u#25 ← phi( @31/(word) rem16u#30 )
(byte*) bitmap_screen#14 ← phi( @31/(byte*) bitmap_screen#20 )
(byte*) bitmap_gfx#15 ← phi( @31/(byte*) bitmap_gfx#21 )
@37: scope:[] from @34
(word) rem16u#25 ← phi( @34/(word) rem16u#30 )
(byte*) bitmap_screen#14 ← phi( @34/(byte*) bitmap_screen#20 )
(byte*) bitmap_gfx#15 ← phi( @34/(byte*) bitmap_gfx#21 )
call main
to:@35
@35: scope:[] from @34
(word) rem16u#19 ← phi( @34/(word) rem16u#9 )
(byte*) bitmap_screen#10 ← phi( @34/(byte*) bitmap_screen#4 )
(byte*) bitmap_gfx#10 ← phi( @34/(byte*) bitmap_gfx#4 )
to:@38
@38: scope:[] from @37
(word) rem16u#19 ← phi( @37/(word) rem16u#9 )
(byte*) bitmap_screen#10 ← phi( @37/(byte*) bitmap_screen#4 )
(byte*) bitmap_gfx#10 ← phi( @37/(byte*) bitmap_gfx#4 )
(byte*) bitmap_gfx#5 ← (byte*) bitmap_gfx#10
(byte*) bitmap_screen#5 ← (byte*) bitmap_screen#10
(word) rem16u#10 ← (word) rem16u#19
to:@end
@end: scope:[] from @35
@end: scope:[] from @38
SYMBOL TABLE SSA
(label) @17
(label) @28
(label) @31
(label) @34
(label) @35
(label) @37
(label) @38
(label) @6
(label) @begin
(label) @end
@ -2761,9 +2766,9 @@ Adding NOP phi() at start of @begin
Adding NOP phi() at start of @6
Adding NOP phi() at start of @17
Adding NOP phi() at start of @28
Adding NOP phi() at start of @31
Adding NOP phi() at start of @34
Adding NOP phi() at start of @35
Adding NOP phi() at start of @37
Adding NOP phi() at start of @38
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001
Adding NOP phi() at start of main::vicSelectGfxBank1_toDd001_@return
@ -2865,8 +2870,8 @@ Coalesced down to 30 phi equivalence classes
Culled Empty Block (label) @6
Culled Empty Block (label) @17
Culled Empty Block (label) @28
Culled Empty Block (label) @31
Culled Empty Block (label) @35
Culled Empty Block (label) @34
Culled Empty Block (label) @38
Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@return
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@12
@ -2891,7 +2896,7 @@ Culled Empty Block (label) bitmap_init::@4
Culled Empty Block (label) bitmap_init::@11
Culled Empty Block (label) bitmap_init::@12
Culled Empty Block (label) bitmap_init::@9
Renumbering block @34 to @1
Renumbering block @37 to @1
Renumbering block div32u16u::@2 to div32u16u::@1
Renumbering block div32u16u::@3 to div32u16u::@2
Renumbering block mul16u::@4 to mul16u::@3