1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-27 04:49:27 +00:00

Moved more tests to use array kickasm initialization. Closes #116

This commit is contained in:
Jesper Gravgaard 2019-07-01 09:21:11 +02:00
parent cb81fc07f6
commit ccf965346e
40 changed files with 10226 additions and 10348 deletions

View File

@ -12,9 +12,18 @@ const byte* SCREEN = 0x0400;
// Sprite data for the animating sprites // Sprite data for the animating sprites
const byte* SPRITE_DATA = 0x2000; const byte* SPRITE_DATA = 0x2000;
// Values added to VX // Values added to VX
const word* VXSIN = 0x2200; const word[40] VXSIN = kickasm {{
.for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
}};
// Values added to VY // Values added to VY
const word* VYSIN = 0x2280; const word[25] VYSIN = kickasm {{
.for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
}};
// Copy of the screen used for finding chars to process // Copy of the screen used for finding chars to process
byte* SCREEN_COPY = malloc(1000); byte* SCREEN_COPY = malloc(1000);
@ -159,16 +168,6 @@ const word XPOS_RIGHTMOST = (word)(BORDER_XPOS_RIGHT)<<4;
const word YPOS_TOPMOST = (word)(BORDER_YPOS_TOP-8)<<4; const word YPOS_TOPMOST = (word)(BORDER_YPOS_TOP-8)<<4;
const word YPOS_BOTTOMMOST = (word)(BORDER_YPOS_BOTTOM)<<4; const word YPOS_BOTTOMMOST = (word)(BORDER_YPOS_BOTTOM)<<4;
kickasm(pc VXSIN) {{
.for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
}}
kickasm(pc VYSIN) {{
.for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
}}
// Process any chars in the PROCESSING array // Process any chars in the PROCESSING array
void processChars() { void processChars() {

View File

@ -8,13 +8,12 @@ import "print"
const byte* CHARSET = 0x2000; const byte* CHARSET = 0x2000;
const byte* SCREEN = 0x2800; const byte* SCREEN = 0x2800;
const byte* SCREEN_REF = 0x2c00;
kickasm(pc SCREEN_REF) {{ const byte[1000] SCREEN_REF = kickasm {{
.for(var y=-12;y<=12;y++) .for(var y=-12;y<=12;y++)
.for(var x=-19;x<=20;x++) .for(var x=-19;x<=20;x++)
.byte round(256*atan2(y, x)/PI/2) .byte round(256*atan2(y, x)/PI/2)
}} }};
void main() { void main() {
init_font_hex(CHARSET); init_font_hex(CHARSET);

View File

@ -121,9 +121,7 @@ void mulf_init() {
} }
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value // Perspective multiplication table containing (d/(z0-z)[z] for each z-value
signed byte* PERSP_Z = $2400; signed byte[0x100] align(0x100) PERSP_Z = kickasm {{
kickasm(pc PERSP_Z) {{
{ {
.var d = 256.0 .var d = 256.0
.var z0 = 5.0 .var z0 = 5.0
@ -135,4 +133,4 @@ kickasm(pc PERSP_Z) {{
} }
} }
} }
}} }};

View File

@ -4,17 +4,16 @@ import "multiplexer"
// Location of screen & sprites // Location of screen & sprites
byte* SCREEN = $400; byte* SCREEN = $400;
byte* SPRITE = $2000;
byte* YSIN = $2100;
kickasm(pc YSIN) {{ byte[0x100] align(0x100) YSIN = kickasm {{
.var min = 50 .var min = 50
.var max = 250-21 .var max = 250-21
.var ampl = max-min; .var ampl = max-min;
.for(var i=0;i<256;i++) .for(var i=0;i<256;i++)
.byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256))) .byte round(min+(ampl/2)+(ampl/2)*sin(toRadians(360*i/256)))
}} }};
byte* SPRITE = $2000;
kickasm(pc SPRITE, resource "balloon.png") {{ kickasm(pc SPRITE, resource "balloon.png") {{
.var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++) .for (var y=0; y<21; y++)

View File

@ -12,12 +12,11 @@ import "sid"
const unsigned char* SCREEN1 = $2800; const unsigned char* SCREEN1 = $2800;
const unsigned char* CHARSET = $2000; const unsigned char* CHARSET = $2000;
const unsigned char* SINTABLE = $1f00;
kickasm(pc SINTABLE) {{ const unsigned char[0x100] align(0x100) SINTABLE = kickasm {{
.for(var i=0;i<$100;i++) .for(var i=0;i<$100;i++)
.byte round(127.5+127.5*sin(toRadians(360*i/256))) .byte round(127.5+127.5*sin(toRadians(360*i/256)))
}} }};
void main() { void main() {
asm { sei } asm { sei }

View File

@ -11,12 +11,11 @@ import "sid"
const unsigned char* SCREEN1 = $2800; const unsigned char* SCREEN1 = $2800;
const unsigned char* SCREEN2 = $2c00; const unsigned char* SCREEN2 = $2c00;
const unsigned char* CHARSET = $2000; const unsigned char* CHARSET = $2000;
const unsigned char* SINTABLE = $1f00;
kickasm(pc SINTABLE) {{ const unsigned char[0x100] align(0x100) SINTABLE = kickasm {{
.for(var i=0;i<$100;i++) .for(var i=0;i<$100;i++)
.byte round(127.5+127.5*sin(toRadians(360*i/256))) .byte round(127.5+127.5*sin(toRadians(360*i/256)))
}} }};
void main() { void main() {
asm { sei } asm { sei }

View File

@ -8,9 +8,7 @@ byte* SCREEN = $0400;
// Sine and Cosine tables // Sine and Cosine tables
// Angles: $00=0, $80=PI,$100=2*PI // Angles: $00=0, $80=PI,$100=2*PI
// Sine/Cosine: signed fixed [-$7f,$7f] // Sine/Cosine: signed fixed [-$7f,$7f]
byte* COS = $2000; byte[0x140] align(0x40) COS = kickasm {{
byte* SIN = COS+$40; // sin(x) = cos(x+PI/2)
kickasm(pc COS) {{
{ {
.var min = -$7fff .var min = -$7fff
.var max = $7fff .var max = $7fff
@ -20,7 +18,9 @@ kickasm(pc COS) {{
.byte >round(min+(ampl/2)+(ampl/2)*cos(rad)) .byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
} }
} }
}} }};
byte* SIN = COS+$40; // sin(x) = cos(x+PI/2)
void main() { void main() {
asm { sei } asm { sei }

View File

@ -3,17 +3,8 @@ import "c64"
import "multiplexer-irq" import "multiplexer-irq"
// Location of screen & sprites // Location of screen & sprites
byte* SCREEN = $400; byte* SCREEN = $400;
byte* SPRITE = $2000; byte* SPRITE = $2000;
byte* YSIN = $2100;
kickasm(pc YSIN) {{
.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)))
}}
kickasm(pc SPRITE, resource "balloon.png") {{ kickasm(pc SPRITE, resource "balloon.png") {{
.var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++) .for (var y=0; y<21; y++)
@ -21,6 +12,14 @@ kickasm(pc SPRITE, resource "balloon.png") {{
.byte pic.getSinglecolorByte(x,y) .byte pic.getSinglecolorByte(x,y)
}} }}
byte[0x100] align(0x100) YSIN = kickasm {{
.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)))
}};
void main() { void main() {
asm { sei } asm { sei }
init(); init();

View File

@ -64,10 +64,6 @@
.label SCREEN = $400 .label SCREEN = $400
// Sprite data for the animating sprites // Sprite data for the animating sprites
.label SPRITE_DATA = $2000 .label SPRITE_DATA = $2000
// Values added to VX
.label VXSIN = $2200
// Values added to VY
.label VYSIN = $2280
// Max number of chars processed at once // Max number of chars processed at once
.const NUM_PROCESSING = 8 .const NUM_PROCESSING = 8
// Distance value meaning not found // Distance value meaning not found
@ -1282,15 +1278,17 @@ irqTop: {
ldy #00 ldy #00
rti rti
} }
// Sprites currently being processed in the interrupt // Values added to VX
PROCESSING: .fill $e*NUM_PROCESSING, 0 VXSIN:
.pc = VXSIN "VXSIN" .for(var i=0; i<40; i++) {
.for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4 .word -sin(toRadians([i*360]/40))*4
} }
.pc = VYSIN "VYSIN" // Values added to VY
.for(var i=0; i<25; i++) { VYSIN:
.for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4 .word -sin(toRadians([i*360]/25))*4
} }
// Sprites currently being processed in the interrupt
PROCESSING: .fill $e*NUM_PROCESSING, 0

View File

@ -4,571 +4,561 @@
@1: scope:[] from @begin @1: scope:[] from @begin
[1] phi() [1] phi()
[2] call malloc [2] call malloc
to:@4 to:@3
@4: scope:[] from @1 @3: scope:[] from @1
[3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0 [3] (void*) SCREEN_COPY#0 ← (void*)(byte*) malloc::mem#0
[4] call malloc [4] call malloc
to:@5 to:@4
@5: scope:[] from @4 @4: scope:[] from @3
[5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0 [5] (void*) SCREEN_DIST#0 ← (void*)(byte*) malloc::mem#0
to:@2 to:@2
@2: scope:[] from @5 @2: scope:[] from @4
kickasm(location (const word*) VXSIN#0) {{ .for(var i=0; i<40; i++) { [6] phi()
.word -sin(toRadians([i*360]/40))*4 [7] call main
}
}}
kickasm(location (const word*) VYSIN#0) {{ .for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
}}
to:@3
@3: scope:[] from @2
[8] phi()
[9] call main
to:@end to:@end
@end: scope:[] from @3 @end: scope:[] from @2
[10] phi() [8] phi()
main: scope:[main] from @3 main: scope:[main] from @2
[11] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0 [9] (byte*) init_dist_screen::screen#0 ← (byte*)(void*) SCREEN_DIST#0
[12] call init_dist_screen [10] call init_dist_screen
to:main::@8 to:main::@8
main::@8: scope:[main] from main main::@8: scope:[main] from main
[13] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0 [11] (byte*) main::dst#0 ← (byte*)(void*) SCREEN_COPY#0
to:main::@1 to:main::@1
main::@1: scope:[main] from main::@1 main::@8 main::@1: scope:[main] from main::@1 main::@8
[14] (byte*) main::dst#2 ← phi( main::@1/(byte*) main::dst#1 main::@8/(byte*) main::dst#0 ) [12] (byte*) main::dst#2 ← phi( main::@1/(byte*) main::dst#1 main::@8/(byte*) main::dst#0 )
[14] (byte*) main::src#2 ← phi( main::@1/(byte*) main::src#1 main::@8/(const byte*) SCREEN#0 ) [12] (byte*) main::src#2 ← phi( main::@1/(byte*) main::src#1 main::@8/(const byte*) SCREEN#0 )
[15] *((byte*) main::dst#2) ← *((byte*) main::src#2) [13] *((byte*) main::dst#2) ← *((byte*) main::src#2)
[16] (byte*) main::src#1 ← ++ (byte*) main::src#2 [14] (byte*) main::src#1 ← ++ (byte*) main::src#2
[17] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 [15] (byte*) main::dst#1 ← ++ (byte*) main::dst#2
[18] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@1 [16] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@1
to:main::@2 to:main::@2
main::@2: scope:[main] from main::@1 main::@2 main::@2: scope:[main] from main::@1 main::@2
[19] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::i#1 ) [17] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::i#1 )
[20] (byte) main::$26 ← (byte) main::i#2 << (byte) 1 [18] (byte) main::$26 ← (byte) main::i#2 << (byte) 1
[21] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2 [19] (byte) main::$27 ← (byte) main::$26 + (byte) main::i#2
[22] (byte) main::$28 ← (byte) main::$27 << (byte) 1 [20] (byte) main::$28 ← (byte) main::$27 << (byte) 1
[23] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2 [21] (byte) main::$29 ← (byte) main::$28 + (byte) main::i#2
[24] (byte~) main::$16 ← (byte) main::$29 << (byte) 1 [22] (byte~) main::$16 ← (byte) main::$29 << (byte) 1
[25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [23] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0
[26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [24] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0
[27] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [25] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0
[28] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [26] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0
[29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [27] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0
[30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [28] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0
[31] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0 [29] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) main::$16) ← (byte) 0
[32] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE [30] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE
[33] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [31] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0
[34] (byte) main::i#1 ← ++ (byte) main::i#2 [32] (byte) main::i#1 ← ++ (byte) main::i#2
[35] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@2 [33] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@2
to:main::@3 to:main::@3
main::@3: scope:[main] from main::@2 main::@3: scope:[main] from main::@2
[36] phi() [34] phi()
[37] call initSprites [35] call initSprites
to:main::@9 to:main::@9
main::@9: scope:[main] from main::@3 main::@9: scope:[main] from main::@3
[38] phi() [36] phi()
[39] call setupRasterIrq [37] call setupRasterIrq
to:main::@4 to:main::@4
main::@4: scope:[main] from main::@5 main::@9 main::@4: scope:[main] from main::@5 main::@9
[40] phi() [38] phi()
[41] call getCharToProcess [39] call getCharToProcess
[42] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 [40] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1
[43] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 [41] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1
[44] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1 [42] (byte) getCharToProcess::return_dist#0 ← (byte) getCharToProcess::return_dist#1
to:main::@10 to:main::@10
main::@10: scope:[main] from main::@4 main::@10: scope:[main] from main::@4
[45] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 [43] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
[46] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 [44] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
[47] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0 [45] (byte) main::center_dist#0 ← (byte) getCharToProcess::return_dist#0
[48] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@5 [46] if((byte) main::center_dist#0!=(const byte) NOT_FOUND#0) goto main::@5
to:main::@6 to:main::@6
main::@6: scope:[main] from main::@10 main::@6: scope:[main] from main::@10
[49] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [47] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.'
to:main::@7 to:main::@7
main::@7: scope:[main] from main::@6 main::@7 main::@7: scope:[main] from main::@6 main::@7
[50] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) [48] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7)
to:main::@7 to:main::@7
main::@5: scope:[main] from main::@10 main::@5: scope:[main] from main::@10
[51] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 [49] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0
[52] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 [50] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
[53] call startProcessing [51] call startProcessing
to:main::@4 to:main::@4
startProcessing: scope:[startProcessing] from main::@5 startProcessing: scope:[startProcessing] from main::@5
[54] phi() [52] phi()
to:startProcessing::@1 to:startProcessing::@1
startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@8 startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@8
[55] (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) $ff startProcessing::@8/(byte~) startProcessing::freeIdx#7 ) [53] (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) $ff startProcessing::@8/(byte~) startProcessing::freeIdx#7 )
to:startProcessing::@2 to:startProcessing::@2
startProcessing::@2: scope:[startProcessing] from startProcessing::@1 startProcessing::@3 startProcessing::@2: scope:[startProcessing] from startProcessing::@1 startProcessing::@3
[56] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 ) [54] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 )
[57] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1 [55] (byte) startProcessing::$42 ← (byte) startProcessing::i#2 << (byte) 1
[58] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 [56] (byte) startProcessing::$43 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2
[59] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1 [57] (byte) startProcessing::$44 ← (byte) startProcessing::$43 << (byte) 1
[60] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2 [58] (byte) startProcessing::$45 ← (byte) startProcessing::$44 + (byte) startProcessing::i#2
[61] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1 [59] (byte~) startProcessing::$30 ← (byte) startProcessing::$45 << (byte) 1
[62] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3 [60] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30)!=(const byte) STATUS_FREE) goto startProcessing::@3
to:startProcessing::@4 to:startProcessing::@4
startProcessing::@4: scope:[startProcessing] from startProcessing::@2 startProcessing::@9 startProcessing::@4: scope:[startProcessing] from startProcessing::@2 startProcessing::@9
[63] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@9/(byte~) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 ) [61] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@9/(byte~) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 )
[64] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 [62] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8
to:startProcessing::@5 to:startProcessing::@5
startProcessing::@5: scope:[startProcessing] from startProcessing::@4 startProcessing::@5: scope:[startProcessing] from startProcessing::@4
[65] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [63] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0
[66] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2 [64] (word) startProcessing::$47 ← (word~) startProcessing::$0 << (byte) 2
[67] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0 [65] (word) startProcessing::$48 ← (word) startProcessing::$47 + (word~) startProcessing::$0
[68] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3 [66] (word~) startProcessing::$1 ← (word) startProcessing::$48 << (byte) 3
[69] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0 [67] (word) startProcessing::offset#0 ← (word~) startProcessing::$1 + (byte) startProcessing::center_x#0
[70] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0 [68] (byte*) startProcessing::colPtr#0 ← (const byte*) COLS#0 + (word) startProcessing::offset#0
[71] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0) [69] (byte) startProcessing::spriteCol#0 ← *((byte*) startProcessing::colPtr#0)
[72] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0 [70] (byte*) startProcessing::screenPtr#0 ← (const byte*) SCREEN#0 + (word) startProcessing::offset#0
[73] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2 [71] (word~) startProcessing::$5 ← (word)(byte) startProcessing::freeIdx#2
[74] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6 [72] (word~) startProcessing::$6 ← (word~) startProcessing::$5 << (byte) 6
[75] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6 [73] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$6
[76] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) [74] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0)
[77] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0 [75] (word~) startProcessing::$8 ← (word)(byte) startProcessing::ch#0
[78] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3 [76] (word~) startProcessing::$9 ← (word~) startProcessing::$8 << (byte) 3
[79] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9 [77] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$9
asm { sei } asm { sei }
[81] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [79] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0
to:startProcessing::@6 to:startProcessing::@6
startProcessing::@6: scope:[startProcessing] from startProcessing::@5 startProcessing::@6 startProcessing::@6: scope:[startProcessing] from startProcessing::@5 startProcessing::@6
[82] (byte) startProcessing::i1#2 ← phi( startProcessing::@5/(byte) 0 startProcessing::@6/(byte) startProcessing::i1#1 ) [80] (byte) startProcessing::i1#2 ← phi( startProcessing::@5/(byte) 0 startProcessing::@6/(byte) startProcessing::i1#1 )
[82] (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@5/(byte*) startProcessing::spriteData#0 startProcessing::@6/(byte*) startProcessing::spriteData#1 ) [80] (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@5/(byte*) startProcessing::spriteData#0 startProcessing::@6/(byte*) startProcessing::spriteData#1 )
[82] (byte*) startProcessing::chargenData#2 ← phi( startProcessing::@5/(byte*) startProcessing::chargenData#0 startProcessing::@6/(byte*) startProcessing::chargenData#1 ) [80] (byte*) startProcessing::chargenData#2 ← phi( startProcessing::@5/(byte*) startProcessing::chargenData#0 startProcessing::@6/(byte*) startProcessing::chargenData#1 )
[83] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [81] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2)
[84] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [82] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3
[85] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 [83] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2
[86] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 [84] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2
[87] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 [85] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6
to:startProcessing::@7 to:startProcessing::@7
startProcessing::@7: scope:[startProcessing] from startProcessing::@6 startProcessing::@7: scope:[startProcessing] from startProcessing::@6
[88] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [86] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
asm { cli } asm { cli }
[90] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0 [88] (word~) startProcessing::$11 ← (word)(byte) startProcessing::center_x#0
[91] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3 [89] (word~) startProcessing::$12 ← (word~) startProcessing::$11 << (byte) 3
[92] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12 [90] (word~) startProcessing::$13 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$12
[93] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4 [91] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$13 << (byte) 4
[94] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0 [92] (word~) startProcessing::$15 ← (word)(byte) startProcessing::center_y#0
[95] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3 [93] (word~) startProcessing::$16 ← (word~) startProcessing::$15 << (byte) 3
[96] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16 [94] (word~) startProcessing::$17 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$16
[97] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4 [95] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$17 << (byte) 4
[98] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 [96] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2
[99] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [97] (byte~) startProcessing::$22 ← (byte) startProcessing::freeIdx#2 << (byte) 3
[100] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22 [98] (word~) startProcessing::$23 ← (word)(byte~) startProcessing::$22
[101] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [99] (byte) startProcessing::$50 ← (byte) startProcessing::freeIdx#2 << (byte) 1
[102] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2 [100] (byte) startProcessing::$51 ← (byte) startProcessing::$50 + (byte) startProcessing::freeIdx#2
[103] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1 [101] (byte) startProcessing::$52 ← (byte) startProcessing::$51 << (byte) 1
[104] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2 [102] (byte) startProcessing::$53 ← (byte) startProcessing::$52 + (byte) startProcessing::freeIdx#2
[105] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1 [103] (byte~) startProcessing::$31 ← (byte) startProcessing::$53 << (byte) 1
[106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0 [104] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$31) ← (word) startProcessing::spriteX#0
[107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0 [105] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$31) ← (word) startProcessing::spriteY#0
[108] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23 [106] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$31) ← (word~) startProcessing::$23
[109] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c [107] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$31) ← (byte) $3c
[110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2 [108] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$31) ← (byte) startProcessing::freeIdx#2
[111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0 [109] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$31) ← (byte) startProcessing::spritePtr#0
[112] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0 [110] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL + (byte~) startProcessing::$31) ← (byte) startProcessing::spriteCol#0
[113] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW [111] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$31) ← (const byte) STATUS_NEW
[114] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0 [112] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$31) ← (byte*) startProcessing::screenPtr#0
to:startProcessing::@return to:startProcessing::@return
startProcessing::@return: scope:[startProcessing] from startProcessing::@7 startProcessing::@return: scope:[startProcessing] from startProcessing::@7
[115] return [113] return
to:@return to:@return
startProcessing::@8: scope:[startProcessing] from startProcessing::@4 startProcessing::@8: scope:[startProcessing] from startProcessing::@4
[116] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 [114] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2
to:startProcessing::@1 to:startProcessing::@1
startProcessing::@3: scope:[startProcessing] from startProcessing::@2 startProcessing::@3: scope:[startProcessing] from startProcessing::@2
[117] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 [115] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2
[118] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2 [116] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2
to:startProcessing::@9 to:startProcessing::@9
startProcessing::@9: scope:[startProcessing] from startProcessing::@3 startProcessing::@9: scope:[startProcessing] from startProcessing::@3
[119] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 [117] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6
to:startProcessing::@4 to:startProcessing::@4
getCharToProcess: scope:[getCharToProcess] from main::@4 getCharToProcess: scope:[getCharToProcess] from main::@4
[120] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0 [118] (byte*) getCharToProcess::screen_line#0 ← (byte*)(void*) SCREEN_COPY#0
[121] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0 [119] (byte*) getCharToProcess::dist_line#0 ← (byte*)(void*) SCREEN_DIST#0
to:getCharToProcess::@1 to:getCharToProcess::@1
getCharToProcess::@1: scope:[getCharToProcess] from getCharToProcess getCharToProcess::@9 getCharToProcess::@1: scope:[getCharToProcess] from getCharToProcess getCharToProcess::@9
[122] (byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_y#1 ) [120] (byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_y#1 )
[122] (byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_x#1 ) [120] (byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_x#1 )
[122] (byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::y#1 ) [120] (byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::y#1 )
[122] (byte) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(const byte) NOT_FOUND#0 getCharToProcess::@9/(byte~) getCharToProcess::closest_dist#10 ) [120] (byte) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(const byte) NOT_FOUND#0 getCharToProcess::@9/(byte~) getCharToProcess::closest_dist#10 )
[122] (byte*) getCharToProcess::dist_line#6 ← phi( getCharToProcess/(byte*) getCharToProcess::dist_line#0 getCharToProcess::@9/(byte*) getCharToProcess::dist_line#1 ) [120] (byte*) getCharToProcess::dist_line#6 ← phi( getCharToProcess/(byte*) getCharToProcess::dist_line#0 getCharToProcess::@9/(byte*) getCharToProcess::dist_line#1 )
[122] (byte*) getCharToProcess::screen_line#4 ← phi( getCharToProcess/(byte*) getCharToProcess::screen_line#0 getCharToProcess::@9/(byte*) getCharToProcess::screen_line#1 ) [120] (byte*) getCharToProcess::screen_line#4 ← phi( getCharToProcess/(byte*) getCharToProcess::screen_line#0 getCharToProcess::@9/(byte*) getCharToProcess::screen_line#1 )
to:getCharToProcess::@2 to:getCharToProcess::@2
getCharToProcess::@2: scope:[getCharToProcess] from getCharToProcess::@1 getCharToProcess::@10 getCharToProcess::@2: scope:[getCharToProcess] from getCharToProcess::@1 getCharToProcess::@10
[123] (byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_y#9 getCharToProcess::@10/(byte) getCharToProcess::return_y#1 ) [121] (byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_y#9 getCharToProcess::@10/(byte) getCharToProcess::return_y#1 )
[123] (byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_x#9 getCharToProcess::@10/(byte) getCharToProcess::return_x#1 ) [121] (byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_x#9 getCharToProcess::@10/(byte) getCharToProcess::return_x#1 )
[123] (byte) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_dist#8 getCharToProcess::@10/(byte~) getCharToProcess::closest_dist#12 ) [121] (byte) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_dist#8 getCharToProcess::@10/(byte~) getCharToProcess::closest_dist#12 )
[123] (byte) getCharToProcess::x#2 ← phi( getCharToProcess::@1/(byte) 0 getCharToProcess::@10/(byte) getCharToProcess::x#1 ) [121] (byte) getCharToProcess::x#2 ← phi( getCharToProcess::@1/(byte) 0 getCharToProcess::@10/(byte) getCharToProcess::x#1 )
[124] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [122] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11
to:getCharToProcess::@4 to:getCharToProcess::@4
getCharToProcess::@4: scope:[getCharToProcess] from getCharToProcess::@2 getCharToProcess::@4: scope:[getCharToProcess] from getCharToProcess::@2
[125] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2) [123] (byte) getCharToProcess::dist#0 ← *((byte*) getCharToProcess::dist_line#6 + (byte) getCharToProcess::x#2)
[126] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 [124] if((byte) getCharToProcess::dist#0>=(byte) getCharToProcess::closest_dist#2) goto getCharToProcess::@12
to:getCharToProcess::@5 to:getCharToProcess::@5
getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@4 getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@4
[127] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 [125] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2
[128] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 [126] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7
to:getCharToProcess::@3 to:getCharToProcess::@3
getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5
[129] (byte) getCharToProcess::return_y#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_y#7 getCharToProcess::@12/(byte) getCharToProcess::closest_y#7 getCharToProcess::@5/(byte~) getCharToProcess::return_y#7 ) [127] (byte) getCharToProcess::return_y#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_y#7 getCharToProcess::@12/(byte) getCharToProcess::closest_y#7 getCharToProcess::@5/(byte~) getCharToProcess::return_y#7 )
[129] (byte) getCharToProcess::return_x#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_x#7 getCharToProcess::@12/(byte) getCharToProcess::closest_x#7 getCharToProcess::@5/(byte~) getCharToProcess::return_x#7 ) [127] (byte) getCharToProcess::return_x#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_x#7 getCharToProcess::@12/(byte) getCharToProcess::closest_x#7 getCharToProcess::@5/(byte~) getCharToProcess::return_x#7 )
[129] (byte) getCharToProcess::return_dist#1 ← phi( getCharToProcess::@11/(byte~) getCharToProcess::return_dist#5 getCharToProcess::@12/(byte~) getCharToProcess::return_dist#6 getCharToProcess::@5/(byte) getCharToProcess::dist#0 ) [127] (byte) getCharToProcess::return_dist#1 ← phi( getCharToProcess::@11/(byte~) getCharToProcess::return_dist#5 getCharToProcess::@12/(byte~) getCharToProcess::return_dist#6 getCharToProcess::@5/(byte) getCharToProcess::dist#0 )
[130] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 [128] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2
[131] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 [129] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10
to:getCharToProcess::@6 to:getCharToProcess::@6
getCharToProcess::@6: scope:[getCharToProcess] from getCharToProcess::@3 getCharToProcess::@6: scope:[getCharToProcess] from getCharToProcess::@3
[132] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [130] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28
[133] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28 [131] (byte*) getCharToProcess::dist_line#1 ← (byte*) getCharToProcess::dist_line#6 + (byte) $28
[134] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 [132] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7
[135] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 [133] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9
to:getCharToProcess::@7 to:getCharToProcess::@7
getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@6 getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@6
[136] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND#0) goto getCharToProcess::@return [134] if((byte) getCharToProcess::return_dist#1==(const byte) NOT_FOUND#0) goto getCharToProcess::@return
to:getCharToProcess::@8 to:getCharToProcess::@8
getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7
[137] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1 [135] (word~) getCharToProcess::$8 ← (word)(byte) getCharToProcess::return_y#1
[138] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2 [136] (word) getCharToProcess::$12 ← (word~) getCharToProcess::$8 << (byte) 2
[139] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8 [137] (word) getCharToProcess::$13 ← (word) getCharToProcess::$12 + (word~) getCharToProcess::$8
[140] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3 [138] (word~) getCharToProcess::$9 ← (word) getCharToProcess::$13 << (byte) 3
[141] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9 [139] (byte*~) getCharToProcess::$10 ← (byte*)(void*) SCREEN_COPY#0 + (word~) getCharToProcess::$9
[142] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [140] *((byte*~) getCharToProcess::$10 + (byte) getCharToProcess::return_x#1) ← (byte) ' '
to:getCharToProcess::@return to:getCharToProcess::@return
getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8 getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8
[143] return [141] return
to:@return to:@return
getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@6 getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@6
[144] (byte~) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1 [142] (byte~) getCharToProcess::closest_dist#10 ← (byte) getCharToProcess::return_dist#1
to:getCharToProcess::@1 to:getCharToProcess::@1
getCharToProcess::@10: scope:[getCharToProcess] from getCharToProcess::@3 getCharToProcess::@10: scope:[getCharToProcess] from getCharToProcess::@3
[145] (byte~) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1 [143] (byte~) getCharToProcess::closest_dist#12 ← (byte) getCharToProcess::return_dist#1
to:getCharToProcess::@2 to:getCharToProcess::@2
getCharToProcess::@12: scope:[getCharToProcess] from getCharToProcess::@4 getCharToProcess::@12: scope:[getCharToProcess] from getCharToProcess::@4
[146] (byte~) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2 [144] (byte~) getCharToProcess::return_dist#6 ← (byte) getCharToProcess::closest_dist#2
to:getCharToProcess::@3 to:getCharToProcess::@3
getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@2 getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@2
[147] (byte~) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2 [145] (byte~) getCharToProcess::return_dist#5 ← (byte) getCharToProcess::closest_dist#2
to:getCharToProcess::@3 to:getCharToProcess::@3
setupRasterIrq: scope:[setupRasterIrq] from main::@9 setupRasterIrq: scope:[setupRasterIrq] from main::@9
asm { sei } asm { sei }
[149] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [147] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[150] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [148] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[151] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [149] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
to:setupRasterIrq::@1 to:setupRasterIrq::@1
setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq
[152] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [150] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f
to:setupRasterIrq::@2 to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1 setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1
[153] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 [151] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0
[154] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [152] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[155] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 [153] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0
asm { cli } asm { cli }
to:setupRasterIrq::@return to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2 setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2
[157] return [155] return
to:@return to:@return
initSprites: scope:[initSprites] from main::@3 initSprites: scope:[initSprites] from main::@3
[158] phi() [156] phi()
to:initSprites::@1 to:initSprites::@1
initSprites::@1: scope:[initSprites] from initSprites initSprites::@1 initSprites::@1: scope:[initSprites] from initSprites initSprites::@1
[159] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA#0 initSprites::@1/(byte*) initSprites::sp#1 ) [157] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA#0 initSprites::@1/(byte*) initSprites::sp#1 )
[160] *((byte*) initSprites::sp#2) ← (byte) 0 [158] *((byte*) initSprites::sp#2) ← (byte) 0
[161] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 [159] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2
[162] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1 [160] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1
to:initSprites::@2 to:initSprites::@2
initSprites::@2: scope:[initSprites] from initSprites::@1 initSprites::@2 initSprites::@2: scope:[initSprites] from initSprites::@1 initSprites::@2
[163] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@2/(byte) initSprites::i#1 ) [161] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@2/(byte) initSprites::i#1 )
[164] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 [162] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0
[165] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 [163] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2
[166] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@2 [164] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@2
to:initSprites::@3 to:initSprites::@3
initSprites::@3: scope:[initSprites] from initSprites::@2 initSprites::@3: scope:[initSprites] from initSprites::@2
[167] *((const byte*) SPRITES_MC#0) ← (byte) 0 [165] *((const byte*) SPRITES_MC#0) ← (byte) 0
[168] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 [166] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0
[169] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [167] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0
to:initSprites::@return to:initSprites::@return
initSprites::@return: scope:[initSprites] from initSprites::@3 initSprites::@return: scope:[initSprites] from initSprites::@3
[170] return [168] return
to:@return to:@return
init_dist_screen: scope:[init_dist_screen] from main init_dist_screen: scope:[init_dist_screen] from main
[171] phi() [169] phi()
[172] call init_squares [170] call init_squares
to:init_dist_screen::@10 to:init_dist_screen::@10
init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen init_dist_screen::@10: scope:[init_dist_screen] from init_dist_screen
[173] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18 [171] (byte*) init_dist_screen::screen_bottomline#0 ← (byte*) init_dist_screen::screen#0 + (word)(number) $28*(number) $18
to:init_dist_screen::@1 to:init_dist_screen::@1
init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@10 init_dist_screen::@9 init_dist_screen::@1: scope:[init_dist_screen] from init_dist_screen::@10 init_dist_screen::@9
[174] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen_bottomline#0 ) [172] (byte*) init_dist_screen::screen_bottomline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_bottomline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen_bottomline#0 )
[174] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen#0 ) [172] (byte*) init_dist_screen::screen_topline#10 ← phi( init_dist_screen::@9/(byte*) init_dist_screen::screen_topline#1 init_dist_screen::@10/(byte*) init_dist_screen::screen#0 )
[174] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen::@10/(byte) 0 ) [172] (byte) init_dist_screen::y#10 ← phi( init_dist_screen::@9/(byte) init_dist_screen::y#1 init_dist_screen::@10/(byte) 0 )
[175] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1 [173] (byte) init_dist_screen::y2#0 ← (byte) init_dist_screen::y#10 << (byte) 1
[176] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2 [174] if((byte) init_dist_screen::y2#0>=(byte) $18) goto init_dist_screen::@2
to:init_dist_screen::@3 to:init_dist_screen::@3
init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1 init_dist_screen::@3: scope:[init_dist_screen] from init_dist_screen::@1
[177] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0 [175] (byte~) init_dist_screen::$5 ← (byte) $18 - (byte) init_dist_screen::y2#0
to:init_dist_screen::@4 to:init_dist_screen::@4
init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3 init_dist_screen::@4: scope:[init_dist_screen] from init_dist_screen::@2 init_dist_screen::@3
[178] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 ) [176] (byte) init_dist_screen::yd#0 ← phi( init_dist_screen::@2/(byte~) init_dist_screen::$7 init_dist_screen::@3/(byte~) init_dist_screen::$5 )
[179] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0 [177] (byte) sqr::val#0 ← (byte) init_dist_screen::yd#0
[180] call sqr [178] call sqr
[181] (word) sqr::return#2 ← (word) sqr::return#0 [179] (word) sqr::return#2 ← (word) sqr::return#0
to:init_dist_screen::@11 to:init_dist_screen::@11
init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen::@4 init_dist_screen::@11: scope:[init_dist_screen] from init_dist_screen::@4
[182] (word) init_dist_screen::yds#0 ← (word) sqr::return#2 [180] (word) init_dist_screen::yds#0 ← (word) sqr::return#2
to:init_dist_screen::@5 to:init_dist_screen::@5
init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@13 init_dist_screen::@5: scope:[init_dist_screen] from init_dist_screen::@11 init_dist_screen::@13
[183] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@11/(byte) $27 init_dist_screen::@13/(byte) init_dist_screen::xb#1 ) [181] (byte) init_dist_screen::xb#2 ← phi( init_dist_screen::@11/(byte) $27 init_dist_screen::@13/(byte) init_dist_screen::xb#1 )
[183] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@13/(byte) init_dist_screen::x#1 ) [181] (byte) init_dist_screen::x#2 ← phi( init_dist_screen::@11/(byte) 0 init_dist_screen::@13/(byte) init_dist_screen::x#1 )
[184] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1 [182] (byte) init_dist_screen::x2#0 ← (byte) init_dist_screen::x#2 << (byte) 1
[185] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6 [183] if((byte) init_dist_screen::x2#0>=(byte) $27) goto init_dist_screen::@6
to:init_dist_screen::@7 to:init_dist_screen::@7
init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5 init_dist_screen::@7: scope:[init_dist_screen] from init_dist_screen::@5
[186] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0 [184] (byte~) init_dist_screen::$13 ← (byte) $27 - (byte) init_dist_screen::x2#0
to:init_dist_screen::@8 to:init_dist_screen::@8
init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 init_dist_screen::@7 init_dist_screen::@8: scope:[init_dist_screen] from init_dist_screen::@6 init_dist_screen::@7
[187] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 ) [185] (byte) init_dist_screen::xd#0 ← phi( init_dist_screen::@6/(byte~) init_dist_screen::$15 init_dist_screen::@7/(byte~) init_dist_screen::$13 )
[188] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0 [186] (byte) sqr::val#1 ← (byte) init_dist_screen::xd#0
[189] call sqr [187] call sqr
[190] (word) sqr::return#3 ← (word) sqr::return#0 [188] (word) sqr::return#3 ← (word) sqr::return#0
to:init_dist_screen::@12 to:init_dist_screen::@12
init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@8 init_dist_screen::@12: scope:[init_dist_screen] from init_dist_screen::@8
[191] (word) init_dist_screen::xds#0 ← (word) sqr::return#3 [189] (word) init_dist_screen::xds#0 ← (word) sqr::return#3
[192] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0 [190] (word) init_dist_screen::ds#0 ← (word) init_dist_screen::xds#0 + (word) init_dist_screen::yds#0
[193] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0 [191] (word) sqrt::val#0 ← (word) init_dist_screen::ds#0
[194] call sqrt [192] call sqrt
[195] (byte) sqrt::return#2 ← (byte) sqrt::return#0 [193] (byte) sqrt::return#2 ← (byte) sqrt::return#0
to:init_dist_screen::@13 to:init_dist_screen::@13
init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@12 init_dist_screen::@13: scope:[init_dist_screen] from init_dist_screen::@12
[196] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2 [194] (byte) init_dist_screen::d#0 ← (byte) sqrt::return#2
[197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [195] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
[198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0 [196] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::x#2) ← (byte) init_dist_screen::d#0
[199] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [197] *((byte*) init_dist_screen::screen_topline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
[200] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0 [198] *((byte*) init_dist_screen::screen_bottomline#10 + (byte) init_dist_screen::xb#2) ← (byte) init_dist_screen::d#0
[201] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2 [199] (byte) init_dist_screen::x#1 ← ++ (byte) init_dist_screen::x#2
[202] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2 [200] (byte) init_dist_screen::xb#1 ← -- (byte) init_dist_screen::xb#2
[203] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5 [201] if((byte) init_dist_screen::x#1<(byte) $13+(byte) 1) goto init_dist_screen::@5
to:init_dist_screen::@9 to:init_dist_screen::@9
init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@13 init_dist_screen::@9: scope:[init_dist_screen] from init_dist_screen::@13
[204] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28 [202] (byte*) init_dist_screen::screen_topline#1 ← (byte*) init_dist_screen::screen_topline#10 + (byte) $28
[205] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28 [203] (byte*) init_dist_screen::screen_bottomline#1 ← (byte*) init_dist_screen::screen_bottomline#10 - (byte) $28
[206] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10 [204] (byte) init_dist_screen::y#1 ← ++ (byte) init_dist_screen::y#10
[207] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1 [205] if((byte) init_dist_screen::y#1!=(byte) $d) goto init_dist_screen::@1
to:init_dist_screen::@return to:init_dist_screen::@return
init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@9 init_dist_screen::@return: scope:[init_dist_screen] from init_dist_screen::@9
[208] return [206] return
to:@return to:@return
init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5 init_dist_screen::@6: scope:[init_dist_screen] from init_dist_screen::@5
[209] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27 [207] (byte~) init_dist_screen::$15 ← (byte) init_dist_screen::x2#0 - (byte) $27
to:init_dist_screen::@8 to:init_dist_screen::@8
init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1 init_dist_screen::@2: scope:[init_dist_screen] from init_dist_screen::@1
[210] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18 [208] (byte~) init_dist_screen::$7 ← (byte) init_dist_screen::y2#0 - (byte) $18
to:init_dist_screen::@4 to:init_dist_screen::@4
sqrt: scope:[sqrt] from init_dist_screen::@12 sqrt: scope:[sqrt] from init_dist_screen::@12
[211] (word) bsearch16u::key#0 ← (word) sqrt::val#0 [209] (word) bsearch16u::key#0 ← (word) sqrt::val#0
[212] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1 [210] (word*) bsearch16u::items#1 ← (word*)(void*) SQUARES#1
[213] call bsearch16u [211] call bsearch16u
[214] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1 [212] (word*) bsearch16u::return#3 ← (word*) bsearch16u::return#1
to:sqrt::@1 to:sqrt::@1
sqrt::@1: scope:[sqrt] from sqrt sqrt::@1: scope:[sqrt] from sqrt
[215] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3 [213] (word*) sqrt::found#0 ← (word*) bsearch16u::return#3
[216] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1 [214] (word~) sqrt::$3 ← (word*) sqrt::found#0 - (word*)(void*) SQUARES#1
[217] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1 [215] (word~) sqrt::$1 ← (word~) sqrt::$3 >> (byte) 1
[218] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1 [216] (byte) sqrt::return#0 ← (byte)(word~) sqrt::$1
to:sqrt::@return to:sqrt::@return
sqrt::@return: scope:[sqrt] from sqrt::@1 sqrt::@return: scope:[sqrt] from sqrt::@1
[219] return [217] return
to:@return to:@return
bsearch16u: scope:[bsearch16u] from sqrt bsearch16u: scope:[bsearch16u] from sqrt
[220] phi() [218] phi()
to:bsearch16u::@3 to:bsearch16u::@3
bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7 bsearch16u::@3: scope:[bsearch16u] from bsearch16u bsearch16u::@7
[221] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 ) [219] (word*) bsearch16u::items#2 ← phi( bsearch16u/(word*) bsearch16u::items#1 bsearch16u::@7/(word*) bsearch16u::items#8 )
[221] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 ) [219] (byte) bsearch16u::num#3 ← phi( bsearch16u/(const byte) NUM_SQUARES#3 bsearch16u::@7/(byte) bsearch16u::num#0 )
[222] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4 [220] if((byte) bsearch16u::num#3>(byte) 0) goto bsearch16u::@4
to:bsearch16u::@5 to:bsearch16u::@5
bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3 bsearch16u::@5: scope:[bsearch16u] from bsearch16u::@3
[223] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2 [221] if(*((word*) bsearch16u::items#2)<=(word) bsearch16u::key#0) goto bsearch16u::@2
to:bsearch16u::@1 to:bsearch16u::@1
bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5 bsearch16u::@1: scope:[bsearch16u] from bsearch16u::@5
[224] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD [222] (word*~) bsearch16u::$2 ← (word*) bsearch16u::items#2 - (byte) 1*(const byte) SIZEOF_WORD
to:bsearch16u::@2 to:bsearch16u::@2
bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5 bsearch16u::@2: scope:[bsearch16u] from bsearch16u::@1 bsearch16u::@5
[225] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 ) [223] (word*) bsearch16u::return#2 ← phi( bsearch16u::@5/(word*) bsearch16u::items#2 bsearch16u::@1/(word*~) bsearch16u::$2 )
to:bsearch16u::@return to:bsearch16u::@return
bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8 bsearch16u::@return: scope:[bsearch16u] from bsearch16u::@2 bsearch16u::@8
[226] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 ) [224] (word*) bsearch16u::return#1 ← phi( bsearch16u::@8/(word*~) bsearch16u::return#6 bsearch16u::@2/(word*) bsearch16u::return#2 )
[227] return [225] return
to:@return to:@return
bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3 bsearch16u::@4: scope:[bsearch16u] from bsearch16u::@3
[228] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1 [226] (byte~) bsearch16u::$6 ← (byte) bsearch16u::num#3 >> (byte) 1
[229] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1 [227] (byte~) bsearch16u::$16 ← (byte~) bsearch16u::$6 << (byte) 1
[230] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16 [228] (word*) bsearch16u::pivot#0 ← (word*) bsearch16u::items#2 + (byte~) bsearch16u::$16
[231] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0) [229] (signed word) bsearch16u::result#0 ← (signed word)(word) bsearch16u::key#0 - (signed word)*((word*) bsearch16u::pivot#0)
[232] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6 [230] if((signed word) bsearch16u::result#0!=(signed byte) 0) goto bsearch16u::@6
to:bsearch16u::@8 to:bsearch16u::@8
bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4 bsearch16u::@8: scope:[bsearch16u] from bsearch16u::@4
[233] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0 [231] (word*~) bsearch16u::return#6 ← (word*) bsearch16u::pivot#0
to:bsearch16u::@return to:bsearch16u::@return
bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4 bsearch16u::@6: scope:[bsearch16u] from bsearch16u::@4
[234] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7 [232] if((signed word) bsearch16u::result#0<=(signed byte) 0) goto bsearch16u::@7
to:bsearch16u::@9 to:bsearch16u::@9
bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9: scope:[bsearch16u] from bsearch16u::@6
[235] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD [233] (word*) bsearch16u::items#0 ← (word*) bsearch16u::pivot#0 + (byte) 1*(const byte) SIZEOF_WORD
[236] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3 [234] (byte) bsearch16u::num#1 ← -- (byte) bsearch16u::num#3
to:bsearch16u::@7 to:bsearch16u::@7
bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9 bsearch16u::@7: scope:[bsearch16u] from bsearch16u::@6 bsearch16u::@9
[237] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 ) [235] (word*) bsearch16u::items#8 ← phi( bsearch16u::@9/(word*) bsearch16u::items#0 bsearch16u::@6/(word*) bsearch16u::items#2 )
[237] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 ) [235] (byte) bsearch16u::num#5 ← phi( bsearch16u::@9/(byte) bsearch16u::num#1 bsearch16u::@6/(byte) bsearch16u::num#3 )
[238] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1 [236] (byte) bsearch16u::num#0 ← (byte) bsearch16u::num#5 >> (byte) 1
to:bsearch16u::@3 to:bsearch16u::@3
sqr: scope:[sqr] from init_dist_screen::@4 init_dist_screen::@8 sqr: scope:[sqr] from init_dist_screen::@4 init_dist_screen::@8
[239] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 ) [237] (byte) sqr::val#2 ← phi( init_dist_screen::@4/(byte) sqr::val#0 init_dist_screen::@8/(byte) sqr::val#1 )
[240] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1 [238] (byte~) sqr::$0 ← (byte) sqr::val#2 << (byte) 1
[241] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0) [239] (word) sqr::return#0 ← *((word*)(void*) SQUARES#1 + (byte~) sqr::$0)
to:sqr::@return to:sqr::@return
sqr::@return: scope:[sqr] from sqr sqr::@return: scope:[sqr] from sqr
[242] return [240] return
to:@return to:@return
init_squares: scope:[init_squares] from init_dist_screen init_squares: scope:[init_squares] from init_dist_screen
[243] phi() [241] phi()
[244] call malloc [242] call malloc
to:init_squares::@2 to:init_squares::@2
init_squares::@2: scope:[init_squares] from init_squares init_squares::@2: scope:[init_squares] from init_squares
[245] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0 [243] (void*) SQUARES#1 ← (void*)(byte*) malloc::mem#0
[246] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1 [244] (word*) init_squares::squares#0 ← (word*)(void*) SQUARES#1
to:init_squares::@1 to:init_squares::@1
init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2 init_squares::@1: scope:[init_squares] from init_squares::@1 init_squares::@2
[247] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 ) [245] (byte) init_squares::i#2 ← phi( init_squares::@1/(byte) init_squares::i#1 init_squares::@2/(byte) 0 )
[247] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 ) [245] (word*) init_squares::squares#2 ← phi( init_squares::@1/(word*) init_squares::squares#1 init_squares::@2/(word*) init_squares::squares#0 )
[247] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 ) [245] (word) init_squares::sqr#2 ← phi( init_squares::@1/(word) init_squares::sqr#1 init_squares::@2/(byte) 0 )
[248] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2 [246] *((word*) init_squares::squares#2) ← (word) init_squares::sqr#2
[249] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD [247] (word*) init_squares::squares#1 ← (word*) init_squares::squares#2 + (const byte) SIZEOF_WORD
[250] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1 [248] (byte~) init_squares::$3 ← (byte) init_squares::i#2 << (byte) 1
[251] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1 [249] (byte~) init_squares::$4 ← (byte~) init_squares::$3 + (byte) 1
[252] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4 [250] (word) init_squares::sqr#1 ← (word) init_squares::sqr#2 + (byte~) init_squares::$4
[253] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2 [251] (byte) init_squares::i#1 ← ++ (byte) init_squares::i#2
[254] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1 [252] if((byte) init_squares::i#1!=(const byte) NUM_SQUARES#3-(byte) 1+(byte) 1) goto init_squares::@1
to:init_squares::@return to:init_squares::@return
init_squares::@return: scope:[init_squares] from init_squares::@1 init_squares::@return: scope:[init_squares] from init_squares::@1
[255] return [253] return
to:@return to:@return
malloc: scope:[malloc] from @1 @4 init_squares malloc: scope:[malloc] from @1 @3 init_squares
[256] (word) malloc::size#3 ← phi( @1/(word) $3e8 @4/(word) $3e8 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD ) [254] (word) malloc::size#3 ← phi( @1/(word) $3e8 @3/(word) $3e8 init_squares/(const byte) NUM_SQUARES#3*(const byte) SIZEOF_WORD )
[256] (byte*) heap_head#12 ← phi( @1/(const byte*) HEAP_START#0 @4/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 ) [254] (byte*) heap_head#12 ← phi( @1/(const byte*) HEAP_START#0 @3/(byte*) heap_head#1 init_squares/(byte*) heap_head#1 )
[257] (byte*) malloc::mem#0 ← (byte*) heap_head#12 [255] (byte*) malloc::mem#0 ← (byte*) heap_head#12
[258] (byte*) heap_head#1 ← (byte*) heap_head#12 + (word) malloc::size#3 [256] (byte*) heap_head#1 ← (byte*) heap_head#12 + (word) malloc::size#3
to:malloc::@return to:malloc::@return
malloc::@return: scope:[malloc] from malloc malloc::@return: scope:[malloc] from malloc
[259] return [257] return
to:@return to:@return
irqBottom: scope:[irqBottom] from irqBottom: scope:[irqBottom] from
[260] phi() [258] phi()
to:irqBottom::@1 to:irqBottom::@1
irqBottom::@1: scope:[irqBottom] from irqBottom irqBottom::@1: scope:[irqBottom] from irqBottom
[261] phi() [259] phi()
[262] call processChars [260] call processChars
to:irqBottom::@2 to:irqBottom::@2
irqBottom::@2: scope:[irqBottom] from irqBottom::@1 irqBottom::@2: scope:[irqBottom] from irqBottom::@1
[263] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 [261] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0
[264] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [262] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
[265] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [263] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqBottom::@return to:irqBottom::@return
irqBottom::@return: scope:[irqBottom] from irqBottom::@2 irqBottom::@return: scope:[irqBottom] from irqBottom::@2
[266] return [264] return
to:@return to:@return
processChars: scope:[processChars] from irqBottom::@1 processChars: scope:[processChars] from irqBottom::@1
[267] phi() [265] phi()
to:processChars::@1 to:processChars::@1
processChars::@1: scope:[processChars] from processChars processChars::@2 processChars::@1: scope:[processChars] from processChars processChars::@2
[268] (byte) processChars::numActive#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::numActive#3 ) [266] (byte) processChars::numActive#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::numActive#3 )
[268] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 ) [266] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 )
[269] (byte) processChars::$67 ← (byte) processChars::i#10 << (byte) 1 [267] (byte) processChars::$67 ← (byte) processChars::i#10 << (byte) 1
[270] (byte) processChars::$68 ← (byte) processChars::$67 + (byte) processChars::i#10 [268] (byte) processChars::$68 ← (byte) processChars::$67 + (byte) processChars::i#10
[271] (byte) processChars::$69 ← (byte) processChars::$68 << (byte) 1 [269] (byte) processChars::$69 ← (byte) processChars::$68 << (byte) 1
[272] (byte) processChars::$70 ← (byte) processChars::$69 + (byte) processChars::i#10 [270] (byte) processChars::$70 ← (byte) processChars::$69 + (byte) processChars::i#10
[273] (byte~) processChars::$37 ← (byte) processChars::$70 << (byte) 1 [271] (byte~) processChars::$37 ← (byte) processChars::$70 << (byte) 1
[274] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$37 [272] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$37
[275] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) [273] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
[276] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2 [274] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE) goto processChars::@2
to:processChars::@10 to:processChars::@10
processChars::@10: scope:[processChars] from processChars::@1 processChars::@10: scope:[processChars] from processChars::@1
[277] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3 [275] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW) goto processChars::@3
to:processChars::@11 to:processChars::@11
processChars::@11: scope:[processChars] from processChars::@10 processChars::@11: scope:[processChars] from processChars::@10
[278] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' [276] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' '
[279] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 [277] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0
[280] *((const byte*) SPRITES_COLS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL) [278] *((const byte*) SPRITES_COLS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_COL)
[281] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) [279] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR)
[282] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING [280] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING
to:processChars::@3 to:processChars::@3
processChars::@3: scope:[processChars] from processChars::@10 processChars::@11 processChars::@3: scope:[processChars] from processChars::@10 processChars::@11
[283] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 [281] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4
[284] (byte~) processChars::$11 ← > (word) processChars::xpos#0 [282] (byte~) processChars::$11 ← > (word) processChars::xpos#0
[285] if((byte) 0!=(byte~) processChars::$11) goto processChars::@4 [283] if((byte) 0!=(byte~) processChars::$11) goto processChars::@4
to:processChars::@8 to:processChars::@8
processChars::@8: scope:[processChars] from processChars::@3 processChars::@8: scope:[processChars] from processChars::@3
[286] (byte~) processChars::$12 ← (byte) $ff ^ (byte) processChars::bitmask#0 [284] (byte~) processChars::$12 ← (byte) $ff ^ (byte) processChars::bitmask#0
[287] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$12 [285] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$12
to:processChars::@5 to:processChars::@5
processChars::@5: scope:[processChars] from processChars::@4 processChars::@8 processChars::@5: scope:[processChars] from processChars::@4 processChars::@8
[288] (byte~) processChars::$17 ← (byte) processChars::i#10 << (byte) 1 [286] (byte~) processChars::$17 ← (byte) processChars::i#10 << (byte) 1
[289] (byte~) processChars::$14 ← (byte)(word) processChars::xpos#0 [287] (byte~) processChars::$14 ← (byte)(word) processChars::xpos#0
[290] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$17) ← (byte~) processChars::$14 [288] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$17) ← (byte~) processChars::$14
[291] (word~) processChars::$15 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 [289] (word~) processChars::$15 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4
[292] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$15 [290] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$15
[293] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$17) ← (byte) processChars::ypos#0 [291] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$17) ← (byte) processChars::ypos#0
[294] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6 [292] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6
to:processChars::@14 to:processChars::@14
processChars::@14: scope:[processChars] from processChars::@5 processChars::@14: scope:[processChars] from processChars::@5
[295] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6 [293] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6
to:processChars::@13 to:processChars::@13
processChars::@13: scope:[processChars] from processChars::@14 processChars::@13: scope:[processChars] from processChars::@14
[296] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6 [294] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6
to:processChars::@12 to:processChars::@12
processChars::@12: scope:[processChars] from processChars::@13 processChars::@12: scope:[processChars] from processChars::@13
[297] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6 [295] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6
to:processChars::@9 to:processChars::@9
processChars::@9: scope:[processChars] from processChars::@12 processChars::@9: scope:[processChars] from processChars::@12
[298] (word~) processChars::$25 ← (word) processChars::xpos#0 >> (byte) 3 [296] (word~) processChars::$25 ← (word) processChars::xpos#0 >> (byte) 3
[299] (byte~) processChars::$26 ← (byte)(word~) processChars::$25 [297] (byte~) processChars::$26 ← (byte)(word~) processChars::$25
[300] (byte) processChars::xchar#0 ← (byte~) processChars::$26 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8 [298] (byte) processChars::xchar#0 ← (byte~) processChars::$26 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8
[301] (byte~) processChars::$38 ← (byte) processChars::xchar#0 << (byte) 1 [299] (byte~) processChars::$38 ← (byte) processChars::xchar#0 << (byte) 1
[302] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN#0 + (byte~) processChars::$38) [300] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word[$28]) VXSIN#0 + (byte~) processChars::$38)
[303] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) [301] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)
[304] (byte~) processChars::$30 ← (byte) processChars::ypos#0 >> (byte) 3 [302] (byte~) processChars::$30 ← (byte) processChars::ypos#0 >> (byte) 3
[305] (byte) processChars::ychar#0 ← (byte~) processChars::$30 - (const byte) BORDER_YPOS_TOP#0/(byte) 8 [303] (byte) processChars::ychar#0 ← (byte~) processChars::$30 - (const byte) BORDER_YPOS_TOP#0/(byte) 8
[306] (byte~) processChars::$39 ← (byte) processChars::ychar#0 << (byte) 1 [304] (byte~) processChars::$39 ← (byte) processChars::ychar#0 << (byte) 1
[307] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN#0 + (byte~) processChars::$39) [305] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word[$19]) VYSIN#0 + (byte~) processChars::$39)
[308] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) [306] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY)
to:processChars::@7 to:processChars::@7
processChars::@7: scope:[processChars] from processChars::@6 processChars::@9 processChars::@7: scope:[processChars] from processChars::@6 processChars::@9
[309] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 [307] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10
to:processChars::@2 to:processChars::@2
processChars::@2: scope:[processChars] from processChars::@1 processChars::@7 processChars::@2: scope:[processChars] from processChars::@1 processChars::@7
[310] (byte) processChars::numActive#3 ← phi( processChars::@1/(byte) processChars::numActive#10 processChars::@7/(byte) processChars::numActive#1 ) [308] (byte) processChars::numActive#3 ← phi( processChars::@1/(byte) processChars::numActive#10 processChars::@7/(byte) processChars::numActive#1 )
[311] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 [309] (byte) processChars::i#1 ← ++ (byte) processChars::i#10
[312] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 [310] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1
to:processChars::@return to:processChars::@return
processChars::@return: scope:[processChars] from processChars::@2 processChars::@return: scope:[processChars] from processChars::@2
[313] return [311] return
to:@return to:@return
processChars::@6: scope:[processChars] from processChars::@12 processChars::@13 processChars::@14 processChars::@5 processChars::@6: scope:[processChars] from processChars::@12 processChars::@13 processChars::@14 processChars::@5
[314] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE [312] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE
[315] (byte~) processChars::$33 ← (byte) $ff ^ (byte) processChars::bitmask#0 [313] (byte~) processChars::$33 ← (byte) $ff ^ (byte) processChars::bitmask#0
[316] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$33 [314] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$33
to:processChars::@7 to:processChars::@7
processChars::@4: scope:[processChars] from processChars::@3 processChars::@4: scope:[processChars] from processChars::@3
[317] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 [315] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0
to:processChars::@5 to:processChars::@5
irqTop: scope:[irqTop] from irqTop: scope:[irqTop] from
[318] phi() [316] phi()
to:irqTop::@1 to:irqTop::@1
irqTop::@1: scope:[irqTop] from irqTop irqTop::@1: scope:[irqTop] from irqTop
[319] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 [317] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0
[320] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [318] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
[321] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [319] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqTop::@return to:irqTop::@return
irqTop::@return: scope:[irqTop] from irqTop::@1 irqTop::@return: scope:[irqTop] from irqTop::@1
[322] return [320] return
to:@return to:@return

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,6 @@
(label) @2 (label) @2
(label) @3 (label) @3
(label) @4 (label) @4
(label) @5
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) BGCOL (byte*) BGCOL
@ -84,9 +83,9 @@
(byte*) SCREEN (byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*) 1024 (const byte*) SCREEN#0 SCREEN = (byte*) 1024
(byte*) SCREEN_COPY (byte*) SCREEN_COPY
(void*) SCREEN_COPY#0 SCREEN_COPY zp ZP_WORD:41 0.02666666666666667 (void*) SCREEN_COPY#0 SCREEN_COPY zp ZP_WORD:41 0.0273972602739726
(byte*) SCREEN_DIST (byte*) SCREEN_DIST
(void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:43 0.0273972602739726 (void*) SCREEN_DIST#0 SCREEN_DIST zp ZP_WORD:43 0.028169014084507043
(const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2 (const byte) SIZEOF_WORD SIZEOF_WORD = (byte) 2
(byte*) SPRITES_COLS (byte*) SPRITES_COLS
(const byte*) SPRITES_COLS#0 SPRITES_COLS = (byte*) 53287 (const byte*) SPRITES_COLS#0 SPRITES_COLS = (byte*) 53287
@ -115,10 +114,16 @@
(const byte) STATUS_PROCESSING STATUS_PROCESSING = (byte) 2 (const byte) STATUS_PROCESSING STATUS_PROCESSING = (byte) 2
(byte*) VIC_CONTROL (byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265 (const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
(word*) VXSIN (word[$28]) VXSIN
(const word*) VXSIN#0 VXSIN = (word*) 8704 (const word[$28]) VXSIN#0 VXSIN = kickasm {{ .for(var i=0; i<40; i++) {
(word*) VYSIN .word -sin(toRadians([i*360]/40))*4
(const word*) VYSIN#0 VYSIN = (word*) 8832 }
}}
(word[$19]) VYSIN
(const word[$19]) VYSIN#0 VYSIN = kickasm {{ .for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
}}
(byte) WHITE (byte) WHITE
(word) XPOS_LEFTMOST (word) XPOS_LEFTMOST
(const word) XPOS_LEFTMOST#0 XPOS_LEFTMOST = (word)(const byte) BORDER_XPOS_LEFT#0-(byte) 8<<(byte) 4 (const word) XPOS_LEFTMOST#0 XPOS_LEFTMOST = (word)(const byte) BORDER_XPOS_LEFT#0-(byte) 8<<(byte) 4
@ -224,7 +229,7 @@
(byte) getCharToProcess::y#1 y zp ZP_BYTE:16 101.0 (byte) getCharToProcess::y#1 y zp ZP_BYTE:16 101.0
(byte) getCharToProcess::y#7 y zp ZP_BYTE:16 80.2 (byte) getCharToProcess::y#7 y zp ZP_BYTE:16 80.2
(byte*) heap_head (byte*) heap_head
(byte*) heap_head#1 heap_head zp ZP_WORD:35 0.5 (byte*) heap_head#1 heap_head zp ZP_WORD:35 0.6000000000000001
(byte*) heap_head#12 heap_head zp ZP_WORD:35 4.0 (byte*) heap_head#12 heap_head zp ZP_WORD:35 4.0
(void()) initSprites() (void()) initSprites()
(label) initSprites::@1 (label) initSprites::@1

View File

@ -10,7 +10,6 @@
.label COLS = $d800 .label COLS = $d800
.label CHARSET = $2000 .label CHARSET = $2000
.label SCREEN = $2800 .label SCREEN = $2800
.label SCREEN_REF = $2c00
.label print_char_cursor = 9 .label print_char_cursor = 9
main: { main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f .const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
@ -451,8 +450,8 @@ CORDIC_ATAN2_ANGLES_16:
.word 256*2*256*atan(1/pow(2,i))/PI/2 .word 256*2*256*atan(1/pow(2,i))/PI/2
print_hextab: .text "0123456789abcdef" print_hextab: .text "0123456789abcdef"
.pc = SCREEN_REF "SCREEN_REF" SCREEN_REF:
.for(var y=-12;y<=12;y++) .for(var y=-12;y<=12;y++)
.for(var x=-19;x<=20;x++) .for(var x=-19;x<=20;x++)
.byte round(256*atan2(y, x)/PI/2) .byte round(256*atan2(y, x)/PI/2)

View File

@ -2,238 +2,232 @@
[0] phi() [0] phi()
to:@1 to:@1
@1: scope:[] from @begin @1: scope:[] from @begin
kickasm(location (const byte*) SCREEN_REF#0) {{ .for(var y=-12;y<=12;y++) [1] phi()
.for(var x=-19;x<=20;x++) [2] call main
.byte round(256*atan2(y, x)/PI/2)
}}
to:@2
@2: scope:[] from @1
[2] phi()
[3] call main
to:@end to:@end
@end: scope:[] from @2 @end: scope:[] from @1
[3] phi()
main: scope:[main] from @1
[4] phi() [4] phi()
main: scope:[main] from @2 [5] call init_font_hex
[5] phi()
[6] call init_font_hex
to:main::toD0181 to:main::toD0181
main::toD0181: scope:[main] from main main::toD0181: scope:[main] from main
[7] phi() [6] phi()
to:main::@6 to:main::@6
main::@6: scope:[main] from main::toD0181 main::@6: scope:[main] from main::toD0181
[8] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [7] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
to:main::@1 to:main::@1
main::@1: scope:[main] from main::@3 main::@6 main::@1: scope:[main] from main::@3 main::@6
[9] (byte*) main::screen#5 ← phi( main::@6/(const byte*) SCREEN#0 main::@3/(byte*) main::screen#1 ) [8] (byte*) main::screen#5 ← phi( main::@6/(const byte*) SCREEN#0 main::@3/(byte*) main::screen#1 )
[9] (word) main::diff_sum#7 ← phi( main::@6/(byte) 0 main::@3/(word) main::diff_sum#1 ) [8] (word) main::diff_sum#7 ← phi( main::@6/(byte) 0 main::@3/(word) main::diff_sum#1 )
[9] (byte*) main::screen_ref#5 ← phi( main::@6/(const byte*) SCREEN_REF#0 main::@3/(byte*) main::screen_ref#1 ) [8] (byte*) main::screen_ref#5 ← phi( main::@6/(const byte[$3e8]) SCREEN_REF#0 main::@3/(byte*) main::screen_ref#1 )
[9] (signed byte) main::y#4 ← phi( main::@6/(signed byte) -$c main::@3/(signed byte) main::y#1 ) [8] (signed byte) main::y#4 ← phi( main::@6/(signed byte) -$c main::@3/(signed byte) main::y#1 )
to:main::@2 to:main::@2
main::@2: scope:[main] from main::@1 main::@8 main::@2: scope:[main] from main::@1 main::@8
[10] (byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#5 main::@8/(byte*) main::screen#1 ) [9] (byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#5 main::@8/(byte*) main::screen#1 )
[10] (word) main::diff_sum#2 ← phi( main::@1/(word) main::diff_sum#7 main::@8/(word) main::diff_sum#1 ) [9] (word) main::diff_sum#2 ← phi( main::@1/(word) main::diff_sum#7 main::@8/(word) main::diff_sum#1 )
[10] (byte*) main::screen_ref#2 ← phi( main::@1/(byte*) main::screen_ref#5 main::@8/(byte*) main::screen_ref#1 ) [9] (byte*) main::screen_ref#2 ← phi( main::@1/(byte*) main::screen_ref#5 main::@8/(byte*) main::screen_ref#1 )
[10] (signed byte) main::x#2 ← phi( main::@1/(signed byte) -$13 main::@8/(signed byte) main::x#1 ) [9] (signed byte) main::x#2 ← phi( main::@1/(signed byte) -$13 main::@8/(signed byte) main::x#1 )
[11] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0 [10] (word) main::xw#0 ← (byte)(signed byte) main::x#2 w= (byte) 0
[12] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0 [11] (word) main::yw#0 ← (byte)(signed byte) main::y#4 w= (byte) 0
[13] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0 [12] (signed word) atan2_16::x#0 ← (signed word)(word) main::xw#0
[14] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0 [13] (signed word) atan2_16::y#0 ← (signed word)(word) main::yw#0
[15] call atan2_16 [14] call atan2_16
[16] (word) atan2_16::return#2 ← (word) atan2_16::return#0 [15] (word) atan2_16::return#2 ← (word) atan2_16::return#0
to:main::@7 to:main::@7
main::@7: scope:[main] from main::@2 main::@7: scope:[main] from main::@2
[17] (word) main::angle_w#0 ← (word) atan2_16::return#2 [16] (word) main::angle_w#0 ← (word) atan2_16::return#2
[18] (word~) main::$12 ← (word) main::angle_w#0 + (byte) $80 [17] (word~) main::$12 ← (word) main::angle_w#0 + (byte) $80
[19] (byte) main::ang_w#0 ← > (word~) main::$12 [18] (byte) main::ang_w#0 ← > (word~) main::$12
[20] (byte) diff::bb1#0 ← (byte) main::ang_w#0 [19] (byte) diff::bb1#0 ← (byte) main::ang_w#0
[21] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2) [20] (byte) diff::bb2#0 ← *((byte*) main::screen_ref#2)
[22] call diff [21] call diff
[23] (byte) diff::return#0 ← (byte) diff::return#1 [22] (byte) diff::return#0 ← (byte) diff::return#1
to:main::@8 to:main::@8
main::@8: scope:[main] from main::@7 main::@8: scope:[main] from main::@7
[24] (byte~) main::$14 ← (byte) diff::return#0 [23] (byte~) main::$14 ← (byte) diff::return#0
[25] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$14 [24] (word) main::diff_sum#1 ← (word) main::diff_sum#2 + (byte~) main::$14
[26] (byte~) main::$15 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2) [25] (byte~) main::$15 ← (byte) main::ang_w#0 - *((byte*) main::screen_ref#2)
[27] *((byte*) main::screen#2) ← (byte~) main::$15 [26] *((byte*) main::screen#2) ← (byte~) main::$15
[28] (byte*) main::screen#1 ← ++ (byte*) main::screen#2 [27] (byte*) main::screen#1 ← ++ (byte*) main::screen#2
[29] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2 [28] (byte*) main::screen_ref#1 ← ++ (byte*) main::screen_ref#2
[30] (signed byte) main::x#1 ← ++ (signed byte) main::x#2 [29] (signed byte) main::x#1 ← ++ (signed byte) main::x#2
[31] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2 [30] if((signed byte) main::x#1!=(signed byte) $15) goto main::@2
to:main::@3 to:main::@3
main::@3: scope:[main] from main::@8 main::@3: scope:[main] from main::@8
[32] (signed byte) main::y#1 ← ++ (signed byte) main::y#4 [31] (signed byte) main::y#1 ← ++ (signed byte) main::y#4
[33] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1 [32] if((signed byte) main::y#1!=(signed byte) $d) goto main::@1
to:main::@4 to:main::@4
main::@4: scope:[main] from main::@3 main::@4: scope:[main] from main::@3
[34] (word) print_word::w#0 ← (word) main::diff_sum#1 [33] (word) print_word::w#0 ← (word) main::diff_sum#1
[35] call print_word [34] call print_word
to:main::@5 to:main::@5
main::@5: scope:[main] from main::@4 main::@5 main::@5: scope:[main] from main::@4 main::@5
[36] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) [35] *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13) ← ++ *((const byte*) COLS#0+(word)(number) $c*(number) $28+(byte) $13)
to:main::@5 to:main::@5
print_word: scope:[print_word] from main::@4 print_word: scope:[print_word] from main::@4
[37] (byte) print_byte::b#0 ← > (word) print_word::w#0 [36] (byte) print_byte::b#0 ← > (word) print_word::w#0
[38] call print_byte [37] call print_byte
to:print_word::@1 to:print_word::@1
print_word::@1: scope:[print_word] from print_word print_word::@1: scope:[print_word] from print_word
[39] (byte) print_byte::b#1 ← < (word) print_word::w#0 [38] (byte) print_byte::b#1 ← < (word) print_word::w#0
[40] call print_byte [39] call print_byte
to:print_word::@return to:print_word::@return
print_word::@return: scope:[print_word] from print_word::@1 print_word::@return: scope:[print_word] from print_word::@1
[41] return [40] return
to:@return to:@return
print_byte: scope:[print_byte] from print_word print_word::@1 print_byte: scope:[print_byte] from print_word print_word::@1
[42] (byte*) print_char_cursor#24 ← phi( print_word/(byte*) 1024 print_word::@1/(byte*) print_char_cursor#19 ) [41] (byte*) print_char_cursor#24 ← phi( print_word/(byte*) 1024 print_word::@1/(byte*) print_char_cursor#19 )
[42] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [41] (byte) print_byte::b#2 ← phi( print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 )
[43] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4 [42] (byte~) print_byte::$0 ← (byte) print_byte::b#2 >> (byte) 4
[44] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0) [43] (byte) print_char::ch#0 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$0)
[45] call print_char [44] call print_char
to:print_byte::@1 to:print_byte::@1
print_byte::@1: scope:[print_byte] from print_byte print_byte::@1: scope:[print_byte] from print_byte
[46] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f [45] (byte~) print_byte::$2 ← (byte) print_byte::b#2 & (byte) $f
[47] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2) [46] (byte) print_char::ch#1 ← *((const byte[]) print_hextab#0 + (byte~) print_byte::$2)
[48] call print_char [47] call print_char
to:print_byte::@return to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@1 print_byte::@return: scope:[print_byte] from print_byte::@1
[49] return [48] return
to:@return to:@return
print_char: scope:[print_char] from print_byte print_byte::@1 print_char: scope:[print_char] from print_byte print_byte::@1
[50] (byte*) print_char_cursor#18 ← phi( print_byte/(byte*) print_char_cursor#24 print_byte::@1/(byte*) print_char_cursor#19 ) [49] (byte*) print_char_cursor#18 ← phi( print_byte/(byte*) print_char_cursor#24 print_byte::@1/(byte*) print_char_cursor#19 )
[50] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) [49] (byte) print_char::ch#2 ← phi( print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 )
[51] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2 [50] *((byte*) print_char_cursor#18) ← (byte) print_char::ch#2
[52] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#18 [51] (byte*) print_char_cursor#19 ← ++ (byte*) print_char_cursor#18
to:print_char::@return to:print_char::@return
print_char::@return: scope:[print_char] from print_char print_char::@return: scope:[print_char] from print_char
[53] return [52] return
to:@return to:@return
diff: scope:[diff] from main::@7 diff: scope:[diff] from main::@7
[54] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1 [53] if((byte) diff::bb1#0<(byte) diff::bb2#0) goto diff::@1
to:diff::@2 to:diff::@2
diff::@2: scope:[diff] from diff diff::@2: scope:[diff] from diff
[55] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0 [54] (byte~) diff::$2 ← (byte) diff::bb1#0 - (byte) diff::bb2#0
to:diff::@3 to:diff::@3
diff::@3: scope:[diff] from diff::@1 diff::@2 diff::@3: scope:[diff] from diff::@1 diff::@2
[56] (byte) diff::return#1 ← phi( diff::@1/(byte~) diff::$4 diff::@2/(byte~) diff::$2 ) [55] (byte) diff::return#1 ← phi( diff::@1/(byte~) diff::$4 diff::@2/(byte~) diff::$2 )
to:diff::@return to:diff::@return
diff::@return: scope:[diff] from diff::@3 diff::@return: scope:[diff] from diff::@3
[57] return [56] return
to:@return to:@return
diff::@1: scope:[diff] from diff diff::@1: scope:[diff] from diff
[58] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0 [57] (byte~) diff::$4 ← (byte) diff::bb2#0 - (byte) diff::bb1#0
to:diff::@3 to:diff::@3
atan2_16: scope:[atan2_16] from main::@2 atan2_16: scope:[atan2_16] from main::@2
[59] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1 [58] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1
to:atan2_16::@2 to:atan2_16::@2
atan2_16::@2: scope:[atan2_16] from atan2_16 atan2_16::@2: scope:[atan2_16] from atan2_16
[60] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0 [59] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0
to:atan2_16::@3 to:atan2_16::@3
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2 atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
[61] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#11 atan2_16::@2/(signed word~) atan2_16::$2 ) [60] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#11 atan2_16::@2/(signed word~) atan2_16::$2 )
[62] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4 [61] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4
to:atan2_16::@5 to:atan2_16::@5
atan2_16::@5: scope:[atan2_16] from atan2_16::@3 atan2_16::@5: scope:[atan2_16] from atan2_16::@3
[63] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0 [62] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0
to:atan2_16::@6 to:atan2_16::@6
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5 atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
[64] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#8 atan2_16::@5/(signed word~) atan2_16::$7 ) [63] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#8 atan2_16::@5/(signed word~) atan2_16::$7 )
to:atan2_16::@10 to:atan2_16::@10
atan2_16::@10: scope:[atan2_16] from atan2_16::@14 atan2_16::@6 atan2_16::@10: scope:[atan2_16] from atan2_16::@14 atan2_16::@6
[65] (word) atan2_16::angle#12 ← phi( atan2_16::@14/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 ) [64] (word) atan2_16::angle#12 ← phi( atan2_16::@14/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 )
[65] (byte) atan2_16::i#2 ← phi( atan2_16::@14/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 ) [64] (byte) atan2_16::i#2 ← phi( atan2_16::@14/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
[65] (signed word) atan2_16::xi#3 ← phi( atan2_16::@14/(signed word) atan2_16::xi#7 atan2_16::@6/(signed word) atan2_16::xi#0 ) [64] (signed word) atan2_16::xi#3 ← phi( atan2_16::@14/(signed word) atan2_16::xi#7 atan2_16::@6/(signed word) atan2_16::xi#0 )
[65] (signed word) atan2_16::yi#3 ← phi( atan2_16::@14/(signed word) atan2_16::yi#7 atan2_16::@6/(signed word) atan2_16::yi#0 ) [64] (signed word) atan2_16::yi#3 ← phi( atan2_16::@14/(signed word) atan2_16::yi#7 atan2_16::@6/(signed word) atan2_16::yi#0 )
[66] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11 [65] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
to:atan2_16::@12 to:atan2_16::@12
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@14 atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@14
[67] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@14/(word) atan2_16::angle#13 ) [66] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@14/(word) atan2_16::angle#13 )
[68] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1 [67] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
[69] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7 [68] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
to:atan2_16::@16 to:atan2_16::@16
atan2_16::@16: scope:[atan2_16] from atan2_16::@12 atan2_16::@16: scope:[atan2_16] from atan2_16::@12
[70] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1 [69] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1
to:atan2_16::@7 to:atan2_16::@7
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@16 atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@16
[71] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@16/(word) atan2_16::angle#4 ) [70] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@16/(word) atan2_16::angle#4 )
[72] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8 [71] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
to:atan2_16::@9 to:atan2_16::@9
atan2_16::@9: scope:[atan2_16] from atan2_16::@7 atan2_16::@9: scope:[atan2_16] from atan2_16::@7
[73] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11 [72] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11
to:atan2_16::@8 to:atan2_16::@8
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9 atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
[74] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 ) [73] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 )
to:atan2_16::@return to:atan2_16::@return
atan2_16::@return: scope:[atan2_16] from atan2_16::@8 atan2_16::@return: scope:[atan2_16] from atan2_16::@8
[75] return [74] return
to:@return to:@return
atan2_16::@11: scope:[atan2_16] from atan2_16::@10 atan2_16::@11: scope:[atan2_16] from atan2_16::@10
[76] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2 [75] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2
[77] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2 [76] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2
[78] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13 [77] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13
to:atan2_16::@15 to:atan2_16::@15
atan2_16::@15: scope:[atan2_16] from atan2_16::@11 atan2_16::@15: scope:[atan2_16] from atan2_16::@11
[79] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0 [78] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0
[80] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0 [79] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0
[81] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1 [80] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1
[82] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24) [81] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24)
to:atan2_16::@14 to:atan2_16::@14
atan2_16::@14: scope:[atan2_16] from atan2_16::@13 atan2_16::@15 atan2_16::@14: scope:[atan2_16] from atan2_16::@13 atan2_16::@15
[83] (signed word) atan2_16::xi#7 ← phi( atan2_16::@13/(signed word) atan2_16::xi#1 atan2_16::@15/(signed word) atan2_16::xi#2 ) [82] (signed word) atan2_16::xi#7 ← phi( atan2_16::@13/(signed word) atan2_16::xi#1 atan2_16::@15/(signed word) atan2_16::xi#2 )
[83] (word) atan2_16::angle#13 ← phi( atan2_16::@13/(word) atan2_16::angle#2 atan2_16::@15/(word) atan2_16::angle#3 ) [82] (word) atan2_16::angle#13 ← phi( atan2_16::@13/(word) atan2_16::angle#2 atan2_16::@15/(word) atan2_16::angle#3 )
[83] (signed word) atan2_16::yi#7 ← phi( atan2_16::@13/(signed word) atan2_16::yi#1 atan2_16::@15/(signed word) atan2_16::yi#2 ) [82] (signed word) atan2_16::yi#7 ← phi( atan2_16::@13/(signed word) atan2_16::yi#1 atan2_16::@15/(signed word) atan2_16::yi#2 )
[84] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2 [83] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
[85] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12 [84] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12
to:atan2_16::@10 to:atan2_16::@10
atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@13: scope:[atan2_16] from atan2_16::@11
[86] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0 [85] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0
[87] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0 [86] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0
[88] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1 [87] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
[89] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23) [88] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word[CORDIC_ITERATIONS_16#0]) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23)
to:atan2_16::@14 to:atan2_16::@14
atan2_16::@4: scope:[atan2_16] from atan2_16::@3 atan2_16::@4: scope:[atan2_16] from atan2_16::@3
[90] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0 [89] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0
to:atan2_16::@6 to:atan2_16::@6
atan2_16::@1: scope:[atan2_16] from atan2_16 atan2_16::@1: scope:[atan2_16] from atan2_16
[91] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0 [90] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0
to:atan2_16::@3 to:atan2_16::@3
init_font_hex: scope:[init_font_hex] from main init_font_hex: scope:[init_font_hex] from main
[92] phi() [91] phi()
to:init_font_hex::@1 to:init_font_hex::@1
init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5 init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5
[93] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 ) [92] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 )
[93] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 ) [92] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 )
[93] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 ) [92] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 )
to:init_font_hex::@2 to:init_font_hex::@2
init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4 init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4
[94] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 ) [93] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 )
[94] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 ) [93] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 )
[94] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 ) [93] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 )
[95] *((byte*) init_font_hex::charset#2) ← (byte) 0 [94] *((byte*) init_font_hex::charset#2) ← (byte) 0
to:init_font_hex::@3 to:init_font_hex::@3
init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3 init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3
[96] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 ) [95] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 )
[96] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 ) [95] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 )
[97] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4 [96] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4
[98] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1 [97] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1
[99] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1 [98] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1
[100] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2 [99] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2
[101] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5 [100] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5
[102] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2 [101] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2
[103] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3 [102] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3
to:init_font_hex::@4 to:init_font_hex::@4
init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3 init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3
[104] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0 [103] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0
[105] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2 [104] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2
[106] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0 [105] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0
[107] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5 [106] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5
[108] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8 [107] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8
[109] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4 [108] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4
[110] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2 [109] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2
to:init_font_hex::@5 to:init_font_hex::@5
init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4 init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4
[111] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5 [110] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5
[112] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6 [111] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6
[113] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1 [112] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1
to:init_font_hex::@return to:init_font_hex::@return
init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5 init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5
[114] return [113] return
to:@return to:@return

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,4 @@
(label) @1 (label) @1
(label) @2
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) CHARSET (byte*) CHARSET
@ -18,8 +17,11 @@
(const byte[]) FONT_HEX_PROTO#0 FONT_HEX_PROTO = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 } (const byte[]) FONT_HEX_PROTO#0 FONT_HEX_PROTO = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 }
(byte*) SCREEN (byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*) 10240 (const byte*) SCREEN#0 SCREEN = (byte*) 10240
(byte*) SCREEN_REF (byte[$3e8]) SCREEN_REF
(const byte*) SCREEN_REF#0 SCREEN_REF = (byte*) 11264 (const byte[$3e8]) SCREEN_REF#0 SCREEN_REF = kickasm {{ .for(var y=-12;y<=12;y++)
.for(var x=-19;x<=20;x++)
.byte round(256*atan2(y, x)/PI/2)
}}
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y) (word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
(signed word~) atan2_16::$2 $2 zp ZP_WORD:11 4.0 (signed word~) atan2_16::$2 $2 zp ZP_WORD:11 4.0
(byte~) atan2_16::$23 reg byte a 2002.0 (byte~) atan2_16::$23 reg byte a 2002.0

View File

@ -12,8 +12,6 @@
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2. // Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2.
.label psp1 = $f3 .label psp1 = $f3
.label psp2 = $f5 .label psp2 = $f5
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
.label PERSP_Z = $2400
.label print_char_cursor = 6 .label print_char_cursor = 6
.label print_line_cursor = 2 .label print_line_cursor = 2
main: { main: {
@ -308,8 +306,10 @@ mulf_init: {
// g(x) = >((( 1 - x ) * ( 1 - x ))) // g(x) = >((( 1 - x ) * ( 1 - x )))
.align $100 .align $100
mulf_sqr2: .fill $200, 0 mulf_sqr2: .fill $200, 0
.pc = PERSP_Z "PERSP_Z" // Perspective multiplication table containing (d/(z0-z)[z] for each z-value
{ .align $100
PERSP_Z:
{
.var d = 256.0 .var d = 256.0
.var z0 = 5.0 .var z0 = 5.0
.for(var z=0;z<$100;z++) { .for(var z=0;z<$100;z++) {

View File

@ -2,18 +2,7 @@
[0] phi() [0] phi()
to:@1 to:@1
@1: scope:[] from @begin @1: scope:[] from @begin
kickasm(location (const signed byte*) PERSP_Z#0) {{ { [1] phi()
.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)));
}
}
}
}}
[2] call main [2] call main
to:@end to:@end
@end: scope:[] from @1 @end: scope:[] from @1

View File

@ -1,6 +1,6 @@
Resolved forward reference mulf_sqr1 to (byte[$200]) mulf_sqr1 Resolved forward reference mulf_sqr1 to (byte[$200]) mulf_sqr1
Resolved forward reference mulf_sqr2 to (byte[$200]) mulf_sqr2 Resolved forward reference mulf_sqr2 to (byte[$200]) mulf_sqr2
Resolved forward reference PERSP_Z to (signed byte*) PERSP_Z Resolved forward reference PERSP_Z to (signed byte[$100]) PERSP_Z
Adding pointer type conversion cast (byte*) PROCPORT_DDR in (byte*) PROCPORT_DDR ← (number) 0 Adding pointer type conversion cast (byte*) PROCPORT_DDR in (byte*) PROCPORT_DDR ← (number) 0
Adding pointer type conversion cast (byte*) PROCPORT in (byte*) PROCPORT ← (number) 1 Adding pointer type conversion cast (byte*) PROCPORT in (byte*) PROCPORT ← (number) 1
Adding pointer type conversion cast (byte*) CHARGEN in (byte*) CHARGEN ← (number) $d000 Adding pointer type conversion cast (byte*) CHARGEN in (byte*) CHARGEN ← (number) $d000
@ -51,13 +51,11 @@ Adding pointer type conversion cast (signed byte*) yr in (signed byte*) yr ← (
Adding pointer type conversion cast (signed byte*) zr in (signed byte*) zr ← (number) $f2 Adding pointer type conversion cast (signed byte*) zr in (signed byte*) zr ← (number) $f2
Adding pointer type conversion cast (word*) psp1 in (word*) psp1 ← (number) $f3 Adding pointer type conversion cast (word*) psp1 in (word*) psp1 ← (number) $f3
Adding pointer type conversion cast (word*) psp2 in (word*) psp2 ← (number) $f5 Adding pointer type conversion cast (word*) psp2 in (word*) psp2 ← (number) $f5
Adding pointer type conversion cast (signed byte*) PERSP_Z in (signed byte*) PERSP_Z ← (number) $2400
Identified constant variable (signed byte*) xr Identified constant variable (signed byte*) xr
Identified constant variable (signed byte*) yr Identified constant variable (signed byte*) yr
Identified constant variable (signed byte*) zr Identified constant variable (signed byte*) zr
Identified constant variable (word*) psp1 Identified constant variable (word*) psp1
Identified constant variable (word*) psp2 Identified constant variable (word*) psp2
Identified constant variable (signed byte*) PERSP_Z
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1 Culled Empty Block (label) @1
Culled Empty Block (label) @2 Culled Empty Block (label) @2
@ -493,8 +491,7 @@ mulf_init::@return: scope:[mulf_init] from mulf_init::@1
(byte*) print_screen#6 ← phi( @26/(byte*) print_screen#7 ) (byte*) print_screen#6 ← phi( @26/(byte*) print_screen#7 )
(byte*) print_char_cursor#73 ← phi( @26/(byte*) print_char_cursor#77 ) (byte*) print_char_cursor#73 ← phi( @26/(byte*) print_char_cursor#77 )
(byte*) print_line_cursor#24 ← phi( @26/(byte*) print_line_cursor#27 ) (byte*) print_line_cursor#24 ← phi( @26/(byte*) print_line_cursor#27 )
(signed byte*) PERSP_Z#0 ← ((signed byte*)) (number) $2400 (signed byte[$100]) PERSP_Z#0 ← kickasm {{ {
kickasm(location (signed byte*) PERSP_Z#0) {{ {
.var d = 256.0 .var d = 256.0
.var z0 = 5.0 .var z0 = 5.0
.for(var z=0;z<$100;z++) { .for(var z=0;z<$100;z++) {
@ -526,8 +523,8 @@ SYMBOL TABLE SSA
(label) @4 (label) @4
(label) @begin (label) @begin
(label) @end (label) @end
(signed byte*) PERSP_Z (signed byte[$100]) PERSP_Z
(signed byte*) PERSP_Z#0 (signed byte[$100]) PERSP_Z#0
(void()) do_perspective((signed byte) do_perspective::x , (signed byte) do_perspective::y , (signed byte) do_perspective::z) (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::$11
(byte~) do_perspective::$8 (byte~) do_perspective::$8
@ -894,7 +891,6 @@ Inlining cast (byte~) do_perspective::$8 ← (byte)*((signed byte*) xr#0)
Inlining cast (byte~) do_perspective::$11 ← (byte)*((signed byte*) yr#0) Inlining cast (byte~) do_perspective::$11 ← (byte)*((signed byte*) yr#0)
Inlining cast (signed word) mulf_init::sqr#0 ← (snumber)(number) 0 Inlining cast (signed word) mulf_init::sqr#0 ← (snumber)(number) 0
Inlining cast (signed word) mulf_init::add#0 ← (snumber)(number) 1 Inlining cast (signed word) mulf_init::add#0 ← (snumber)(number) 1
Inlining cast (signed byte*) PERSP_Z#0 ← (signed byte*)(number) $2400
Successful SSA optimization Pass2InlineCast Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast $28 Simplifying constant integer cast $28
@ -921,7 +917,6 @@ Simplifying constant integer cast 1
Simplifying constant integer cast $100 Simplifying constant integer cast $100
Simplifying constant integer cast 1 Simplifying constant integer cast 1
Simplifying constant integer cast 2 Simplifying constant integer cast 2
Simplifying constant pointer cast (signed byte*) 9216
Successful SSA optimization PassNCastSimplification Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28
Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0
@ -1075,7 +1070,18 @@ Constant (const byte[$200]) mulf_sqr2#0 = { fill( $200, 0) }
Constant (const signed word) mulf_init::sqr#0 = 0 Constant (const signed word) mulf_init::sqr#0 = 0
Constant (const signed word) mulf_init::add#0 = 1 Constant (const signed word) mulf_init::add#0 = 1
Constant (const byte) mulf_init::i#0 = 0 Constant (const byte) mulf_init::i#0 = 0
Constant (const signed byte*) PERSP_Z#0 = (signed byte*) 9216 Constant (const signed byte[$100]) PERSP_Z#0 = kickasm {{ {
.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)));
}
}
}
}}
Successful SSA optimization Pass2ConstantIdentification Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::sc#0 = print_line_cursor#0
Constant (const signed byte) print_sbyte::b#1 = do_perspective::x#0 Constant (const signed byte) print_sbyte::b#1 = do_perspective::x#0
@ -1175,6 +1181,7 @@ Adding NOP phi() at start of @4
Adding NOP phi() at start of @16 Adding NOP phi() at start of @16
Adding NOP phi() at start of @23 Adding NOP phi() at start of @23
Adding NOP phi() at start of @26 Adding NOP phi() at start of @26
Adding NOP phi() at start of @27
Adding NOP phi() at start of @28 Adding NOP phi() at start of @28
Adding NOP phi() at start of @end Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@2
@ -1246,6 +1253,7 @@ Culled Empty Block (label) mulf_init::@3
Renumbering block @27 to @1 Renumbering block @27 to @1
Renumbering block print_sbyte::@5 to print_sbyte::@4 Renumbering block print_sbyte::@5 to print_sbyte::@4
Adding NOP phi() at start of @begin Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@2 Adding NOP phi() at start of main::@2
Adding NOP phi() at start of do_perspective Adding NOP phi() at start of do_perspective
@ -1270,18 +1278,7 @@ FINAL CONTROL FLOW GRAPH
[0] phi() [0] phi()
to:@1 to:@1
@1: scope:[] from @begin @1: scope:[] from @begin
kickasm(location (const signed byte*) PERSP_Z#0) {{ { [1] phi()
.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)));
}
}
}
}}
[2] call main [2] call main
to:@end to:@end
@end: scope:[] from @1 @end: scope:[] from @1
@ -1483,7 +1480,7 @@ mulf_init::@return: scope:[mulf_init] from mulf_init::@1
VARIABLE REGISTER WEIGHTS VARIABLE REGISTER WEIGHTS
(signed byte*) PERSP_Z (signed byte[$100]) PERSP_Z
(void()) do_perspective((signed byte) do_perspective::x , (signed byte) do_perspective::y , (signed byte) do_perspective::z) (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::x
(signed byte) do_perspective::y (signed byte) do_perspective::y
@ -1625,16 +1622,15 @@ INITIAL ASM
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2. // Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2.
.label psp1 = $f3 .label psp1 = $f3
.label psp2 = $f5 .label psp2 = $f5
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
.label PERSP_Z = $2400
.label print_char_cursor = 8 .label print_char_cursor = 8
.label print_line_cursor = 2 .label print_line_cursor = 2
//SEG3 @begin //SEG3 @begin
bbegin: bbegin:
//SEG4 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1 jmp b1
//SEG4 @1 //SEG5 @1
b1: b1:
//SEG5 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))); } } } }}
//SEG6 [2] call main //SEG6 [2] call main
jsr main jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end] //SEG7 [3] phi from @1 to @end [phi:@1->@end]
@ -2286,8 +2282,10 @@ mulf_init: {
// g(x) = >((( 1 - x ) * ( 1 - x ))) // g(x) = >((( 1 - x ) * ( 1 - x )))
.align $100 .align $100
mulf_sqr2: .fill $200, 0 mulf_sqr2: .fill $200, 0
.pc = PERSP_Z "PERSP_Z" // Perspective multiplication table containing (d/(z0-z)[z] for each z-value
{ .align $100
PERSP_Z:
{
.var d = 256.0 .var d = 256.0
.var z0 = 5.0 .var z0 = 5.0
.for(var z=0;z<$100;z++) { .for(var z=0;z<$100;z++) {
@ -2395,20 +2393,20 @@ Uplift Scope [main]
Uplift Scope [do_perspective] Uplift Scope [do_perspective]
Uplift Scope [perspective] Uplift Scope [perspective]
Uplifting [mulf_init] best 6602 combination reg byte y [ mulf_init::i#2 mulf_init::i#1 ] reg byte x [ mulf_init::$8 ] reg byte x [ mulf_init::$10 ] reg byte x [ mulf_init::$4 ] zp ZP_WORD:16 [ mulf_init::add#2 mulf_init::add#1 ] zp ZP_BYTE:20 [ mulf_init::val#0 ] zp ZP_WORD:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ] Uplifting [mulf_init] best 4015 combination reg byte y [ mulf_init::i#2 mulf_init::i#1 ] reg byte x [ mulf_init::$8 ] reg byte x [ mulf_init::$10 ] reg byte x [ mulf_init::$4 ] zp ZP_WORD:16 [ mulf_init::add#2 mulf_init::add#1 ] zp ZP_BYTE:20 [ mulf_init::val#0 ] zp ZP_WORD:13 [ mulf_init::sqr#2 mulf_init::sqr#1 ]
Limited combination testing to 100 combinations of 432 possible. Limited combination testing to 100 combinations of 432 possible.
Uplifting [] best 6602 combination zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 ] zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] Uplifting [] best 4015 combination zp ZP_WORD:2 [ print_line_cursor#11 print_line_cursor#1 ] zp ZP_WORD:8 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ]
Uplifting [print_str] best 6602 combination zp ZP_WORD:4 [ print_str::str#7 print_str::str#9 print_str::str#0 ] Uplifting [print_str] best 4015 combination zp ZP_WORD:4 [ print_str::str#7 print_str::str#9 print_str::str#0 ]
Uplifting [print_cls] best 6602 combination zp ZP_WORD:11 [ print_cls::sc#2 print_cls::sc#1 ] Uplifting [print_cls] best 4015 combination zp ZP_WORD:11 [ print_cls::sc#2 print_cls::sc#1 ]
Uplifting [print_byte] best 6581 combination reg byte x [ print_byte::b#3 print_byte::b#5 print_byte::b#6 print_byte::b#0 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ] Uplifting [print_byte] best 3994 combination reg byte x [ print_byte::b#3 print_byte::b#5 print_byte::b#6 print_byte::b#0 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ]
Uplifting [print_char] best 6566 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ] Uplifting [print_char] best 3979 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
Uplifting [print_sbyte] best 6551 combination reg byte x [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ] Uplifting [print_sbyte] best 3964 combination reg byte x [ print_sbyte::b#6 print_sbyte::b#0 print_sbyte::b#4 ]
Uplifting [print_ln] best 6551 combination Uplifting [print_ln] best 3964 combination
Uplifting [main] best 6551 combination Uplifting [main] best 3964 combination
Uplifting [do_perspective] best 6551 combination Uplifting [do_perspective] best 3964 combination
Uplifting [perspective] best 6551 combination Uplifting [perspective] best 3964 combination
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ mulf_init::val#0 ] Attempting to uplift remaining variables inzp ZP_BYTE:20 [ mulf_init::val#0 ]
Uplifting [mulf_init] best 6551 combination zp ZP_BYTE:20 [ mulf_init::val#0 ] Uplifting [mulf_init] best 3964 combination zp ZP_BYTE:20 [ mulf_init::val#0 ]
Allocated (was zp ZP_WORD:8) zp ZP_WORD:6 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ] Allocated (was zp ZP_WORD:8) zp ZP_WORD:6 [ print_char_cursor#44 print_char_cursor#69 print_char_cursor#2 print_char_cursor#74 print_char_cursor#12 print_char_cursor#1 ]
Allocated (was zp ZP_WORD:11) zp ZP_WORD:8 [ print_cls::sc#2 print_cls::sc#1 ] Allocated (was zp ZP_WORD:11) zp ZP_WORD:8 [ print_cls::sc#2 print_cls::sc#1 ]
Allocated (was zp ZP_WORD:13) zp ZP_WORD:10 [ mulf_init::sqr#2 mulf_init::sqr#1 ] Allocated (was zp ZP_WORD:13) zp ZP_WORD:10 [ mulf_init::sqr#2 mulf_init::sqr#1 ]
@ -2433,16 +2431,15 @@ ASSEMBLER BEFORE OPTIMIZATION
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2. // Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2.
.label psp1 = $f3 .label psp1 = $f3
.label psp2 = $f5 .label psp2 = $f5
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
.label PERSP_Z = $2400
.label print_char_cursor = 6 .label print_char_cursor = 6
.label print_line_cursor = 2 .label print_line_cursor = 2
//SEG3 @begin //SEG3 @begin
bbegin: bbegin:
//SEG4 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1 jmp b1
//SEG4 @1 //SEG5 @1
b1: b1:
//SEG5 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))); } } } }}
//SEG6 [2] call main //SEG6 [2] call main
jsr main jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end] //SEG7 [3] phi from @1 to @end [phi:@1->@end]
@ -3059,8 +3056,10 @@ mulf_init: {
// g(x) = >((( 1 - x ) * ( 1 - x ))) // g(x) = >((( 1 - x ) * ( 1 - x )))
.align $100 .align $100
mulf_sqr2: .fill $200, 0 mulf_sqr2: .fill $200, 0
.pc = PERSP_Z "PERSP_Z" // Perspective multiplication table containing (d/(z0-z)[z] for each z-value
{ .align $100
PERSP_Z:
{
.var d = 256.0 .var d = 256.0
.var z0 = 5.0 .var z0 = 5.0
.for(var z=0;z<$100;z++) { .for(var z=0;z<$100;z++) {
@ -3129,6 +3128,7 @@ Replacing label b2_from_b4 with b2
Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1
Removing instruction b1_from_bbegin:
Removing instruction b1: Removing instruction b1:
Removing instruction bend_from_b1: Removing instruction bend_from_b1:
Removing instruction b2_from_b1: Removing instruction b2_from_b1:
@ -3218,8 +3218,19 @@ FINAL SYMBOL TABLE
(label) @1 (label) @1
(label) @begin (label) @begin
(label) @end (label) @end
(signed byte*) PERSP_Z (signed byte[$100]) PERSP_Z
(const signed byte*) PERSP_Z#0 PERSP_Z = (signed byte*) 9216 (const signed byte[$100]) PERSP_Z#0 PERSP_Z = kickasm {{ {
.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)));
}
}
}
}}
(void()) do_perspective((signed byte) do_perspective::x , (signed byte) do_perspective::y , (signed byte) do_perspective::z) (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::@1
(label) do_perspective::@10 (label) do_perspective::@10
@ -3360,7 +3371,7 @@ reg byte x [ mulf_init::$10 ]
FINAL ASSEMBLER FINAL ASSEMBLER
Score: 5893 Score: 3333
//SEG0 File Comments //SEG0 File Comments
// 3D Rotation using a Rotation Matrix // 3D Rotation using a Rotation Matrix
@ -3379,13 +3390,11 @@ Score: 5893
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2. // Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2.
.label psp1 = $f3 .label psp1 = $f3
.label psp2 = $f5 .label psp2 = $f5
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
.label PERSP_Z = $2400
.label print_char_cursor = 6 .label print_char_cursor = 6
.label print_line_cursor = 2 .label print_line_cursor = 2
//SEG3 @begin //SEG3 @begin
//SEG4 @1 //SEG4 [1] phi from @begin to @1 [phi:@begin->@1]
//SEG5 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 @1
//SEG6 [2] call main //SEG6 [2] call main
//SEG7 [3] phi from @1 to @end [phi:@1->@end] //SEG7 [3] phi from @1 to @end [phi:@1->@end]
//SEG8 @end //SEG8 @end
@ -3883,8 +3892,10 @@ mulf_init: {
// g(x) = >((( 1 - x ) * ( 1 - x ))) // g(x) = >((( 1 - x ) * ( 1 - x )))
.align $100 .align $100
mulf_sqr2: .fill $200, 0 mulf_sqr2: .fill $200, 0
.pc = PERSP_Z "PERSP_Z" // Perspective multiplication table containing (d/(z0-z)[z] for each z-value
{ .align $100
PERSP_Z:
{
.var d = 256.0 .var d = 256.0
.var z0 = 5.0 .var z0 = 5.0
.for(var z=0;z<$100;z++) { .for(var z=0;z<$100;z++) {

View File

@ -1,8 +1,19 @@
(label) @1 (label) @1
(label) @begin (label) @begin
(label) @end (label) @end
(signed byte*) PERSP_Z (signed byte[$100]) PERSP_Z
(const signed byte*) PERSP_Z#0 PERSP_Z = (signed byte*) 9216 (const signed byte[$100]) PERSP_Z#0 PERSP_Z = kickasm {{ {
.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)));
}
}
}
}}
(void()) do_perspective((signed byte) do_perspective::x , (signed byte) do_perspective::y , (signed byte) do_perspective::z) (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::@1
(label) do_perspective::@10 (label) do_perspective::@10

View File

@ -21,7 +21,6 @@
// Location of screen & sprites // Location of screen & sprites
.label SCREEN = $400 .label SCREEN = $400
.label SPRITE = $2000 .label SPRITE = $2000
.label YSIN = $2100
.label PLEX_SCREEN_PTR = SCREEN+$3f8 .label PLEX_SCREEN_PTR = SCREEN+$3f8
.label plex_sprite_msb = 6 .label plex_sprite_msb = 6
.label plex_free_next = 3 .label plex_free_next = 3
@ -264,6 +263,14 @@ plexInit: {
} }
// Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again. // Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again.
PLEX_FREE_YPOS: .fill 8, 0 PLEX_FREE_YPOS: .fill 8, 0
.align $100
YSIN:
.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)))
// The x-positions of the multiplexer sprites ($000-$1ff) // The x-positions of the multiplexer sprites ($000-$1ff)
PLEX_XPOS: .fill 2*PLEX_COUNT, 0 PLEX_XPOS: .fill 2*PLEX_COUNT, 0
// The y-positions of the multiplexer sprites. // The y-positions of the multiplexer sprites.
@ -272,13 +279,6 @@ plexInit: {
PLEX_PTR: .fill PLEX_COUNT, 0 PLEX_PTR: .fill PLEX_COUNT, 0
// Indexes of the plex-sprites sorted by sprite y-position. Each call to plexSort() will fix the sorting if changes to the Y-positions have ruined it. // Indexes of the plex-sprites sorted by sprite y-position. Each call to plexSort() will fix the sorting if changes to the Y-positions have ruined it.
PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 PLEX_SORTED_IDX: .fill PLEX_COUNT, 0
.pc = YSIN "YSIN"
.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)))
.pc = SPRITE "SPRITE" .pc = SPRITE "SPRITE"
.var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++) .for (var y=0; y<21; y++)

View File

@ -2,12 +2,6 @@
[0] phi() [0] phi()
to:@1 to:@1
@1: scope:[] from @begin @1: scope:[] from @begin
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)))
}}
kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++) .for (var y=0; y<21; y++)
.for (var x=0;x<3; x++) .for (var x=0;x<3; x++)
@ -15,200 +9,200 @@
}} }}
to:@2 to:@2
@2: scope:[] from @1 @2: scope:[] from @1
[3] phi() [2] phi()
[4] call main [3] call main
to:@end to:@end
@end: scope:[] from @2 @end: scope:[] from @2
[5] phi() [4] phi()
main: scope:[main] from @2 main: scope:[main] from @2
asm { sei } asm { sei }
[7] call init [6] call init
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1: scope:[main] from main
[8] phi() [7] phi()
[9] call loop [8] call loop
to:main::@return to:main::@return
main::@return: scope:[main] from main::@1 main::@return: scope:[main] from main::@1
[10] return [9] return
to:@return to:@return
loop: scope:[loop] from main::@1 loop: scope:[loop] from main::@1
[11] phi() [10] phi()
to:loop::@1 to:loop::@1
loop::@1: scope:[loop] from loop loop::@10 loop::@1: scope:[loop] from loop loop::@10
[12] (byte) loop::sin_idx#6 ← phi( loop/(byte) 0 loop::@10/(byte) loop::sin_idx#1 ) [11] (byte) loop::sin_idx#6 ← phi( loop/(byte) 0 loop::@10/(byte) loop::sin_idx#1 )
to:loop::@2 to:loop::@2
loop::@2: scope:[loop] from loop::@1 loop::@2 loop::@2: scope:[loop] from loop::@1 loop::@2
[13] if(*((const byte*) RASTER#0)!=(byte) $ff) goto loop::@2 [12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto loop::@2
to:loop::@3 to:loop::@3
loop::@3: scope:[loop] from loop::@2 loop::@3: scope:[loop] from loop::@2
[14] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
[15] (byte~) loop::y_idx#4 ← (byte) loop::sin_idx#6 [14] (byte~) loop::y_idx#4 ← (byte) loop::sin_idx#6
to:loop::@4 to:loop::@4
loop::@4: scope:[loop] from loop::@3 loop::@4 loop::@4: scope:[loop] from loop::@3 loop::@4
[16] (byte) loop::sy#2 ← phi( loop::@4/(byte) loop::sy#1 loop::@3/(byte) 0 ) [15] (byte) loop::sy#2 ← phi( loop::@4/(byte) loop::sy#1 loop::@3/(byte) 0 )
[16] (byte) loop::y_idx#2 ← phi( loop::@4/(byte) loop::y_idx#1 loop::@3/(byte~) loop::y_idx#4 ) [15] (byte) loop::y_idx#2 ← phi( loop::@4/(byte) loop::y_idx#1 loop::@3/(byte~) loop::y_idx#4 )
[17] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) [16] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte[$100]) YSIN#0 + (byte) loop::y_idx#2)
[18] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte) 8 [17] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte) 8
[19] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 [18] (byte) loop::sy#1 ← ++ (byte) loop::sy#2
[20] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto loop::@4 [19] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto loop::@4
to:loop::@5 to:loop::@5
loop::@5: scope:[loop] from loop::@4 loop::@5: scope:[loop] from loop::@4
[21] (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#6 + (byte) 1 [20] (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#6 + (byte) 1
[22] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [21] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
[23] call plexSort [22] call plexSort
to:loop::@11 to:loop::@11
loop::@11: scope:[loop] from loop::@5 loop::@11: scope:[loop] from loop::@5
[24] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [23] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
to:loop::@6 to:loop::@6
loop::@6: scope:[loop] from loop::@11 loop::@6 loop::@6: scope:[loop] from loop::@11 loop::@6
[25] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0 [24] (byte~) loop::$4 ← *((const byte*) D011#0) & (const byte) VIC_RST8#0
[26] if((byte~) loop::$4!=(byte) 0) goto loop::@6 [25] if((byte~) loop::$4!=(byte) 0) goto loop::@6
to:loop::@7 to:loop::@7
loop::@7: scope:[loop] from loop::@12 loop::@6 loop::@7: scope:[loop] from loop::@12 loop::@6
[27] (byte) loop::ss#5 ← phi( loop::@6/(byte) 0 loop::@12/(byte) loop::ss#1 ) [26] (byte) loop::ss#5 ← phi( loop::@6/(byte) 0 loop::@12/(byte) loop::ss#1 )
[27] (byte) plex_sprite_msb#42 ← phi( loop::@6/(byte) 1 loop::@12/(byte) plex_sprite_msb#16 ) [26] (byte) plex_sprite_msb#42 ← phi( loop::@6/(byte) 1 loop::@12/(byte) plex_sprite_msb#16 )
[27] (byte) plex_show_idx#42 ← phi( loop::@6/(byte) 0 loop::@12/(byte) plex_show_idx#15 ) [26] (byte) plex_show_idx#42 ← phi( loop::@6/(byte) 0 loop::@12/(byte) plex_show_idx#15 )
[27] (byte) plex_sprite_idx#42 ← phi( loop::@6/(byte) 0 loop::@12/(byte) plex_sprite_idx#15 ) [26] (byte) plex_sprite_idx#42 ← phi( loop::@6/(byte) 0 loop::@12/(byte) plex_sprite_idx#15 )
[27] (byte) plex_free_next#17 ← phi( loop::@6/(byte) 0 loop::@12/(byte) plex_free_next#13 ) [26] (byte) plex_free_next#17 ← phi( loop::@6/(byte) 0 loop::@12/(byte) plex_free_next#13 )
[28] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [27] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
to:loop::plexFreeNextYpos1 to:loop::plexFreeNextYpos1
loop::plexFreeNextYpos1: scope:[loop] from loop::@7 loop::plexFreeNextYpos1: scope:[loop] from loop::@7
[29] (byte) loop::plexFreeNextYpos1_return#0 ← *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#17) [28] (byte) loop::plexFreeNextYpos1_return#0 ← *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#17)
to:loop::@8 to:loop::@8
loop::@8: scope:[loop] from loop::@8 loop::plexFreeNextYpos1 loop::@8: scope:[loop] from loop::@8 loop::plexFreeNextYpos1
[30] if(*((const byte*) RASTER#0)<(byte) loop::plexFreeNextYpos1_return#0) goto loop::@8 [29] if(*((const byte*) RASTER#0)<(byte) loop::plexFreeNextYpos1_return#0) goto loop::@8
to:loop::@9 to:loop::@9
loop::@9: scope:[loop] from loop::@8 loop::@9: scope:[loop] from loop::@8
[31] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [30] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
[32] call plexShowSprite [31] call plexShowSprite
to:loop::@12 to:loop::@12
loop::@12: scope:[loop] from loop::@9 loop::@12: scope:[loop] from loop::@9
[33] (byte) loop::ss#1 ← ++ (byte) loop::ss#5 [32] (byte) loop::ss#1 ← ++ (byte) loop::ss#5
[34] if((byte) loop::ss#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto loop::@7 [33] if((byte) loop::ss#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto loop::@7
to:loop::@10 to:loop::@10
loop::@10: scope:[loop] from loop::@12 loop::@10: scope:[loop] from loop::@12
[35] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0 [34] *((const byte*) BORDERCOL#0) ← (const byte) BLACK#0
to:loop::@1 to:loop::@1
plexShowSprite: scope:[plexShowSprite] from loop::@9 plexShowSprite: scope:[plexShowSprite] from loop::@9
[36] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#42 << (byte) 1 [35] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#42 << (byte) 1
[37] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#42)) [36] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#42))
[38] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 [37] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0
to:plexShowSprite::plexFreeAdd1 to:plexShowSprite::plexFreeAdd1
plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite
[39] (byte~) plexShowSprite::plexFreeAdd1_$0#0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 [38] (byte~) plexShowSprite::plexFreeAdd1_$0#0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15
[40] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#17) ← (byte~) plexShowSprite::plexFreeAdd1_$0#0 [39] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#17) ← (byte~) plexShowSprite::plexFreeAdd1_$0#0
[41] (byte~) plexShowSprite::plexFreeAdd1_$1#0 ← (byte) plex_free_next#17 + (byte) 1 [40] (byte~) plexShowSprite::plexFreeAdd1_$1#0 ← (byte) plex_free_next#17 + (byte) 1
[42] (byte) plex_free_next#13 ← (byte~) plexShowSprite::plexFreeAdd1_$1#0 & (byte) 7 [41] (byte) plex_free_next#13 ← (byte~) plexShowSprite::plexFreeAdd1_$1#0 & (byte) 7
to:plexShowSprite::@4 to:plexShowSprite::@4
plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1
[43] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#42) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#42)) [42] *((const byte*) PLEX_SCREEN_PTR#1 + (byte) plex_sprite_idx#42) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#42))
[44] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#42) [43] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#42)
[45] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [44] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1
[46] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11) [45] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11)
[47] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [46] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2
[48] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11) [47] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11)
[49] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 [48] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1
to:plexShowSprite::@3 to:plexShowSprite::@3
plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@4 plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@4
[50] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#42 [49] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#42
[51] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) plexShowSprite::$9 [50] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) plexShowSprite::$9
to:plexShowSprite::@2 to:plexShowSprite::@2
plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3
[52] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#42 + (byte) 1 [51] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#42 + (byte) 1
[53] (byte) plex_sprite_idx#15 ← (byte~) plexShowSprite::$5 & (byte) 7 [52] (byte) plex_sprite_idx#15 ← (byte~) plexShowSprite::$5 & (byte) 7
[54] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#42 [53] (byte) plex_show_idx#15 ← ++ (byte) plex_show_idx#42
[55] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#42 << (byte) 1 [54] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#42 << (byte) 1
[56] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@5 [55] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@5
to:plexShowSprite::@return to:plexShowSprite::@return
plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::@2
[57] phi() [56] phi()
to:plexShowSprite::@return to:plexShowSprite::@return
plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@5 plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@5
[58] (byte) plex_sprite_msb#16 ← phi( plexShowSprite::@5/(byte) plex_sprite_msb#3 plexShowSprite::@2/(byte) 1 ) [57] (byte) plex_sprite_msb#16 ← phi( plexShowSprite::@5/(byte) plex_sprite_msb#3 plexShowSprite::@2/(byte) 1 )
[59] return [58] return
to:@return to:@return
plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@4 plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@4
[60] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#42 [59] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#42
to:plexShowSprite::@2 to:plexShowSprite::@2
plexSort: scope:[plexSort] from loop::@5 plexSort: scope:[plexSort] from loop::@5
[61] phi() [60] phi()
to:plexSort::@1 to:plexSort::@1
plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 plexSort::@1: scope:[plexSort] from plexSort plexSort::@2
[62] (byte) plexSort::m#2 ← phi( plexSort/(byte) 0 plexSort::@2/(byte) plexSort::m#1 ) [61] (byte) plexSort::m#2 ← phi( plexSort/(byte) 0 plexSort::@2/(byte) plexSort::m#1 )
[63] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte) 1 + (byte) plexSort::m#2) [62] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte) 1 + (byte) plexSort::m#2)
[64] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [63] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0)
[65] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 [64] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2
to:plexSort::@5 to:plexSort::@5
plexSort::@5: scope:[plexSort] from plexSort::@1 plexSort::@5: scope:[plexSort] from plexSort::@1
[66] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [65] (byte~) plexSort::s#6 ← (byte) plexSort::m#2
to:plexSort::@3 to:plexSort::@3
plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@6 plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@6
[67] (byte) plexSort::s#3 ← phi( plexSort::@6/(byte) plexSort::s#1 plexSort::@5/(byte~) plexSort::s#6 ) [66] (byte) plexSort::s#3 ← phi( plexSort::@6/(byte) plexSort::s#1 plexSort::@5/(byte~) plexSort::s#6 )
[68] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [67] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3)
[69] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [68] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3
[70] if((byte) plexSort::s#1==(byte) $ff) goto plexSort::@4 [69] if((byte) plexSort::s#1==(byte) $ff) goto plexSort::@4
to:plexSort::@6 to:plexSort::@6
plexSort::@6: scope:[plexSort] from plexSort::@3 plexSort::@6: scope:[plexSort] from plexSort::@3
[71] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [70] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3
to:plexSort::@4 to:plexSort::@4
plexSort::@4: scope:[plexSort] from plexSort::@3 plexSort::@6 plexSort::@4: scope:[plexSort] from plexSort::@3 plexSort::@6
[72] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [71] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1
[73] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [72] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0
to:plexSort::@2 to:plexSort::@2
plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@4 plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@4
[74] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [73] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2
[75] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte) 2+(byte) 1) goto plexSort::@1 [74] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte) 2+(byte) 1) goto plexSort::@1
to:plexSort::plexFreePrepare1 to:plexSort::plexFreePrepare1
plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@2 plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@2
[76] phi() [75] phi()
to:plexSort::plexFreePrepare1_@1 to:plexSort::plexFreePrepare1_@1
plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1 plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1
[77] (byte) plexSort::plexFreePrepare1_s#2 ← phi( plexSort::plexFreePrepare1/(byte) 0 plexSort::plexFreePrepare1_@1/(byte) plexSort::plexFreePrepare1_s#1 ) [76] (byte) plexSort::plexFreePrepare1_s#2 ← phi( plexSort::plexFreePrepare1/(byte) 0 plexSort::plexFreePrepare1_@1/(byte) plexSort::plexFreePrepare1_s#1 )
[78] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 [77] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0
[79] (byte) plexSort::plexFreePrepare1_s#1 ← ++ (byte) plexSort::plexFreePrepare1_s#2 [78] (byte) plexSort::plexFreePrepare1_s#1 ← ++ (byte) plexSort::plexFreePrepare1_s#2
[80] if((byte) plexSort::plexFreePrepare1_s#1!=(byte) 8) goto plexSort::plexFreePrepare1_@1 [79] if((byte) plexSort::plexFreePrepare1_s#1!=(byte) 8) goto plexSort::plexFreePrepare1_@1
to:plexSort::@return to:plexSort::@return
plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@1 plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@1
[81] return [80] return
to:@return to:@return
init: scope:[init] from main init: scope:[init] from main
[82] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [81] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3
[83] call plexInit [82] call plexInit
to:init::@1 to:init::@1
init::@1: scope:[init] from init init::@1 init::@1: scope:[init] from init init::@1
[84] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(byte) $20 ) [83] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(byte) $20 )
[84] (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init/(byte) 0 ) [83] (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init/(byte) 0 )
[85] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← (byte)(const byte*) SPRITE#0/(byte) $40 [84] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← (byte)(const byte*) SPRITE#0/(byte) $40
[86] (byte~) init::$8 ← (byte) init::sx#2 << (byte) 1 [85] (byte~) init::$8 ← (byte) init::sx#2 << (byte) 1
[87] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$8) ← (word) init::xp#2 [86] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$8) ← (word) init::xp#2
[88] (word) init::xp#1 ← (word) init::xp#2 + (byte) 9 [87] (word) init::xp#1 ← (word) init::xp#2 + (byte) 9
[89] (byte) init::sx#1 ← ++ (byte) init::sx#2 [88] (byte) init::sx#1 ← ++ (byte) init::sx#2
[90] if((byte) init::sx#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto init::@1 [89] if((byte) init::sx#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto init::@1
to:init::@2 to:init::@2
init::@2: scope:[init] from init::@1 init::@2: scope:[init] from init::@1
[91] *((const byte*) SPRITES_ENABLE#0) ← (byte) $ff [90] *((const byte*) SPRITES_ENABLE#0) ← (byte) $ff
to:init::@3 to:init::@3
init::@3: scope:[init] from init::@2 init::@3 init::@3: scope:[init] from init::@2 init::@3
[92] (byte) init::ss#2 ← phi( init::@2/(byte) 0 init::@3/(byte) init::ss#1 ) [91] (byte) init::ss#2 ← phi( init::@2/(byte) 0 init::@3/(byte) init::ss#1 )
[93] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0 [92] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0
[94] (byte) init::ss#1 ← ++ (byte) init::ss#2 [93] (byte) init::ss#1 ← ++ (byte) init::ss#2
[95] if((byte) init::ss#1!=(byte) 8) goto init::@3 [94] if((byte) init::ss#1!=(byte) 8) goto init::@3
to:init::@return to:init::@return
init::@return: scope:[init] from init::@3 init::@return: scope:[init] from init::@3
[96] return [95] return
to:@return to:@return
plexInit: scope:[plexInit] from init plexInit: scope:[plexInit] from init
[97] phi() [96] phi()
to:plexInit::plexSetScreen1 to:plexInit::plexSetScreen1
plexInit::plexSetScreen1: scope:[plexInit] from plexInit plexInit::plexSetScreen1: scope:[plexInit] from plexInit
[98] phi() [97] phi()
to:plexInit::@1 to:plexInit::@1
plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1
[99] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 ) [98] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 )
[100] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [99] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2
[101] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [100] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2
[102] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto plexInit::@1 [101] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto plexInit::@1
to:plexInit::@return to:plexInit::@return
plexInit::@return: scope:[plexInit] from plexInit::@1 plexInit::@return: scope:[plexInit] from plexInit::@1
[103] return [102] return
to:@return to:@return

File diff suppressed because it is too large Load Diff

View File

@ -46,8 +46,13 @@
(const byte) VIC_RSEL#0 VIC_RSEL = (byte) 8 (const byte) VIC_RSEL#0 VIC_RSEL = (byte) 8
(byte) VIC_RST8 (byte) VIC_RST8
(const byte) VIC_RST8#0 VIC_RST8 = (byte) $80 (const byte) VIC_RST8#0 VIC_RST8 = (byte) $80
(byte*) YSIN (byte[$100]) YSIN
(const byte*) YSIN#0 YSIN = (byte*) 8448 (const byte[$100]) YSIN#0 YSIN = kickasm {{ .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)))
}}
(void()) init() (void()) init()
(byte~) init::$8 reg byte a 22.0 (byte~) init::$8 reg byte a 22.0
(label) init::@1 (label) init::@1

View File

@ -24,7 +24,6 @@
.label SID_VOICE3_OSC = $d41b .label SID_VOICE3_OSC = $d41b
.label SCREEN1 = $2800 .label SCREEN1 = $2800
.label CHARSET = $2000 .label CHARSET = $2000
.label SINTABLE = $1f00
.label print_char_cursor = $10 .label print_char_cursor = $10
.label c1A = 4 .label c1A = 4
.label c1B = 5 .label c1B = 5
@ -384,7 +383,8 @@ sid_rnd_init: {
sta SID_VOICE3_CONTROL sta SID_VOICE3_CONTROL
rts rts
} }
.pc = SINTABLE "SINTABLE" .align $100
.for(var i=0;i<$100;i++) SINTABLE:
.for(var i=0;i<$100;i++)
.byte round(127.5+127.5*sin(toRadians(360*i/256))) .byte round(127.5+127.5*sin(toRadians(360*i/256)))

View File

@ -2,288 +2,283 @@
[0] phi() [0] phi()
to:@1 to:@1
@1: scope:[] from @begin @1: scope:[] from @begin
kickasm(location (const byte*) SINTABLE#0) {{ .for(var i=0;i<$100;i++) [1] phi()
.byte round(127.5+127.5*sin(toRadians(360*i/256))) [2] call main
}}
to:@2
@2: scope:[] from @1
[2] phi()
[3] call main
to:@end to:@end
@end: scope:[] from @2 @end: scope:[] from @1
[4] phi() [3] phi()
main: scope:[main] from @2 main: scope:[main] from @1
asm { sei } asm { sei }
[6] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0 [5] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0
[7] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[8] (byte*) main::col#2 ← phi( main/(const byte*) COLS#0 main::@1/(byte*) main::col#1 ) [7] (byte*) main::col#2 ← phi( main/(const byte*) COLS#0 main::@1/(byte*) main::col#1 )
[9] *((byte*) main::col#2) ← (const byte) BLACK#0 [8] *((byte*) main::col#2) ← (const byte) BLACK#0
[10] (byte*) main::col#1 ← ++ (byte*) main::col#2 [9] (byte*) main::col#1 ← ++ (byte*) main::col#2
[11] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1 [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1
to:main::@2 to:main::@2
main::@2: scope:[main] from main::@1 main::@2: scope:[main] from main::@1
[12] phi() [11] phi()
[13] call makecharset [12] call makecharset
to:main::toD0181 to:main::toD0181
main::toD0181: scope:[main] from main::@2 main::toD0181: scope:[main] from main::@2
[14] phi() [13] phi()
to:main::@5 to:main::@5
main::@5: scope:[main] from main::toD0181 main::@5: scope:[main] from main::toD0181
[15] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [14] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
to:main::@3 to:main::@3
main::@3: scope:[main] from main::@4 main::@5 main::@3: scope:[main] from main::@4 main::@5
[16] (byte) c2B#1 ← phi( main::@4/(byte) c2B#3 main::@5/(byte) 0 ) [15] (byte) c2B#1 ← phi( main::@4/(byte) c2B#3 main::@5/(byte) 0 )
[16] (byte) c2A#1 ← phi( main::@4/(byte) c2A#3 main::@5/(byte) 0 ) [15] (byte) c2A#1 ← phi( main::@4/(byte) c2A#3 main::@5/(byte) 0 )
[16] (byte) c1B#1 ← phi( main::@4/(byte) c1B#3 main::@5/(byte) 0 ) [15] (byte) c1B#1 ← phi( main::@4/(byte) c1B#3 main::@5/(byte) 0 )
[16] (byte) c1A#1 ← phi( main::@4/(byte) c1A#3 main::@5/(byte) 0 ) [15] (byte) c1A#1 ← phi( main::@4/(byte) c1A#3 main::@5/(byte) 0 )
to:main::@4 to:main::@4
main::@4: scope:[main] from main::@3 main::@4: scope:[main] from main::@3
[17] phi() [16] phi()
[18] call doplasma [17] call doplasma
to:main::@3 to:main::@3
doplasma: scope:[doplasma] from main::@4 doplasma: scope:[doplasma] from main::@4
[19] (byte) doplasma::c1a#0 ← (byte) c1A#1 [18] (byte) doplasma::c1a#0 ← (byte) c1A#1
[20] (byte) doplasma::c1b#0 ← (byte) c1B#1 [19] (byte) doplasma::c1b#0 ← (byte) c1B#1
to:doplasma::@1 to:doplasma::@1
doplasma::@1: scope:[doplasma] from doplasma doplasma::@8 doplasma::@1: scope:[doplasma] from doplasma doplasma::@8
[21] (byte) doplasma::i#2 ← phi( doplasma/(byte) 0 doplasma::@8/(byte) doplasma::i#1 ) [20] (byte) doplasma::i#2 ← phi( doplasma/(byte) 0 doplasma::@8/(byte) doplasma::i#1 )
[21] (byte) doplasma::yprev#2 ← phi( doplasma/(byte) 0 doplasma::@8/(byte~) doplasma::yprev#3 ) [20] (byte) doplasma::yprev#2 ← phi( doplasma/(byte) 0 doplasma::@8/(byte~) doplasma::yprev#3 )
[21] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@8/(byte) doplasma::c1b#1 ) [20] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@8/(byte) doplasma::c1b#1 )
[21] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@8/(byte) doplasma::c1a#1 ) [20] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@8/(byte) doplasma::c1a#1 )
[22] (byte) doplasma::yval#0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#2) [21] (byte) doplasma::yval#0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2)
[23] (byte~) doplasma::$1 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2 [22] (byte~) doplasma::$1 ← (byte) doplasma::yval#0 - (byte) doplasma::yprev#2
[24] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1 [23] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$1
[25] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 [24] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4
[26] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 [25] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9
[27] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 [26] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2
[28] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@8 [27] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@8
to:doplasma::@2 to:doplasma::@2
doplasma::@2: scope:[doplasma] from doplasma::@1 doplasma::@2: scope:[doplasma] from doplasma::@1
[29] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3 [28] (byte) c1A#3 ← (byte) c1A#1 + (byte) 3
[30] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5 [29] (byte) c1B#3 ← (byte) c1B#1 - (byte) 5
[31] (byte) doplasma::c2a#0 ← (byte) c2A#1 [30] (byte) doplasma::c2a#0 ← (byte) c2A#1
[32] (byte) doplasma::c2b#0 ← (byte) c2B#1 [31] (byte) doplasma::c2b#0 ← (byte) c2B#1
to:doplasma::@3 to:doplasma::@3
doplasma::@3: scope:[doplasma] from doplasma::@2 doplasma::@3 doplasma::@3: scope:[doplasma] from doplasma::@2 doplasma::@3
[33] (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte) 0 doplasma::@3/(byte) doplasma::i1#1 ) [32] (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte) 0 doplasma::@3/(byte) doplasma::i1#1 )
[33] (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 ) [32] (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 )
[33] (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 ) [32] (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 )
[34] (byte~) doplasma::$3 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) [33] (byte~) doplasma::$3 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2)
[35] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3 [34] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$3
[36] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 [35] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3
[37] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 [36] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7
[38] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 [37] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2
[39] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3 [38] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3
to:doplasma::@4 to:doplasma::@4
doplasma::@4: scope:[doplasma] from doplasma::@3 doplasma::@4: scope:[doplasma] from doplasma::@3
[40] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2 [39] (byte) c2A#3 ← (byte) c2A#1 + (byte) 2
[41] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3 [40] (byte) c2B#3 ← (byte) c2B#1 - (byte) 3
to:doplasma::@5 to:doplasma::@5
doplasma::@5: scope:[doplasma] from doplasma::@4 doplasma::@7 doplasma::@5: scope:[doplasma] from doplasma::@4 doplasma::@7
[42] (byte) doplasma::i2#2 ← phi( doplasma::@4/(byte) 0 doplasma::@7/(byte) doplasma::i2#1 ) [41] (byte) doplasma::i2#2 ← phi( doplasma::@4/(byte) 0 doplasma::@7/(byte) doplasma::i2#1 )
[43] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) [42] (byte) doplasma::val#0 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2)
to:doplasma::@6 to:doplasma::@6
doplasma::@6: scope:[doplasma] from doplasma::@5 doplasma::@6: scope:[doplasma] from doplasma::@5
[44] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0) [43] (byte) doplasma::val#1 ← (byte) doplasma::val#0 + *((const byte[$19]) doplasma::ybuf#0)
[45] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1 [44] *((const byte*) SCREEN1#0 + (byte) doplasma::i2#2) ← (byte) doplasma::val#1
to:doplasma::@6_1 to:doplasma::@6_1
doplasma::@6_1: scope:[doplasma] from doplasma::@6 doplasma::@6_1: scope:[doplasma] from doplasma::@6
[46] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1) [45] (byte) doplasma::val#4 ← (byte) doplasma::val#1 + *((const byte[$19]) doplasma::ybuf#0+(byte) 1)
[47] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4 [46] *((const byte*) SCREEN1#0+(byte) 1*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#4
to:doplasma::@6_2 to:doplasma::@6_2
doplasma::@6_2: scope:[doplasma] from doplasma::@6_1 doplasma::@6_2: scope:[doplasma] from doplasma::@6_1
[48] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2) [47] (byte) doplasma::val#6 ← (byte) doplasma::val#4 + *((const byte[$19]) doplasma::ybuf#0+(byte) 2)
[49] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6 [48] *((const byte*) SCREEN1#0+(byte) 2*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#6
to:doplasma::@6_3 to:doplasma::@6_3
doplasma::@6_3: scope:[doplasma] from doplasma::@6_2 doplasma::@6_3: scope:[doplasma] from doplasma::@6_2
[50] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3) [49] (byte) doplasma::val#8 ← (byte) doplasma::val#6 + *((const byte[$19]) doplasma::ybuf#0+(byte) 3)
[51] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8 [50] *((const byte*) SCREEN1#0+(byte) 3*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#8
to:doplasma::@6_4 to:doplasma::@6_4
doplasma::@6_4: scope:[doplasma] from doplasma::@6_3 doplasma::@6_4: scope:[doplasma] from doplasma::@6_3
[52] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4) [51] (byte) doplasma::val#10 ← (byte) doplasma::val#8 + *((const byte[$19]) doplasma::ybuf#0+(byte) 4)
[53] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10 [52] *((const byte*) SCREEN1#0+(byte) 4*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#10
to:doplasma::@6_5 to:doplasma::@6_5
doplasma::@6_5: scope:[doplasma] from doplasma::@6_4 doplasma::@6_5: scope:[doplasma] from doplasma::@6_4
[54] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5) [53] (byte) doplasma::val#12 ← (byte) doplasma::val#10 + *((const byte[$19]) doplasma::ybuf#0+(byte) 5)
[55] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12 [54] *((const byte*) SCREEN1#0+(byte) 5*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#12
to:doplasma::@6_6 to:doplasma::@6_6
doplasma::@6_6: scope:[doplasma] from doplasma::@6_5 doplasma::@6_6: scope:[doplasma] from doplasma::@6_5
[56] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6) [55] (byte) doplasma::val#14 ← (byte) doplasma::val#12 + *((const byte[$19]) doplasma::ybuf#0+(byte) 6)
[57] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14 [56] *((const byte*) SCREEN1#0+(byte) 6*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#14
to:doplasma::@6_7 to:doplasma::@6_7
doplasma::@6_7: scope:[doplasma] from doplasma::@6_6 doplasma::@6_7: scope:[doplasma] from doplasma::@6_6
[58] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7) [57] (byte) doplasma::val#16 ← (byte) doplasma::val#14 + *((const byte[$19]) doplasma::ybuf#0+(byte) 7)
[59] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16 [58] *((const byte*) SCREEN1#0+(byte) 7*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#16
to:doplasma::@6_8 to:doplasma::@6_8
doplasma::@6_8: scope:[doplasma] from doplasma::@6_7 doplasma::@6_8: scope:[doplasma] from doplasma::@6_7
[60] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8) [59] (byte) doplasma::val#18 ← (byte) doplasma::val#16 + *((const byte[$19]) doplasma::ybuf#0+(byte) 8)
[61] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18 [60] *((const byte*) SCREEN1#0+(byte) 8*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#18
to:doplasma::@6_9 to:doplasma::@6_9
doplasma::@6_9: scope:[doplasma] from doplasma::@6_8 doplasma::@6_9: scope:[doplasma] from doplasma::@6_8
[62] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9) [61] (byte) doplasma::val#20 ← (byte) doplasma::val#18 + *((const byte[$19]) doplasma::ybuf#0+(byte) 9)
[63] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20 [62] *((const byte*) SCREEN1#0+(byte) 9*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#20
to:doplasma::@6_10 to:doplasma::@6_10
doplasma::@6_10: scope:[doplasma] from doplasma::@6_9 doplasma::@6_10: scope:[doplasma] from doplasma::@6_9
[64] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a) [63] (byte) doplasma::val#22 ← (byte) doplasma::val#20 + *((const byte[$19]) doplasma::ybuf#0+(byte) $a)
[65] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22 [64] *((const byte*) SCREEN1#0+(byte) $a*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#22
to:doplasma::@6_11 to:doplasma::@6_11
doplasma::@6_11: scope:[doplasma] from doplasma::@6_10 doplasma::@6_11: scope:[doplasma] from doplasma::@6_10
[66] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b) [65] (byte) doplasma::val#24 ← (byte) doplasma::val#22 + *((const byte[$19]) doplasma::ybuf#0+(byte) $b)
[67] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24 [66] *((const byte*) SCREEN1#0+(byte) $b*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#24
to:doplasma::@6_12 to:doplasma::@6_12
doplasma::@6_12: scope:[doplasma] from doplasma::@6_11 doplasma::@6_12: scope:[doplasma] from doplasma::@6_11
[68] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c) [67] (byte) doplasma::val#26 ← (byte) doplasma::val#24 + *((const byte[$19]) doplasma::ybuf#0+(byte) $c)
[69] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26 [68] *((const byte*) SCREEN1#0+(byte) $c*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#26
to:doplasma::@6_13 to:doplasma::@6_13
doplasma::@6_13: scope:[doplasma] from doplasma::@6_12 doplasma::@6_13: scope:[doplasma] from doplasma::@6_12
[70] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d) [69] (byte) doplasma::val#28 ← (byte) doplasma::val#26 + *((const byte[$19]) doplasma::ybuf#0+(byte) $d)
[71] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28 [70] *((const byte*) SCREEN1#0+(byte) $d*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#28
to:doplasma::@6_14 to:doplasma::@6_14
doplasma::@6_14: scope:[doplasma] from doplasma::@6_13 doplasma::@6_14: scope:[doplasma] from doplasma::@6_13
[72] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e) [71] (byte) doplasma::val#30 ← (byte) doplasma::val#28 + *((const byte[$19]) doplasma::ybuf#0+(byte) $e)
[73] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30 [72] *((const byte*) SCREEN1#0+(byte) $e*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#30
to:doplasma::@6_15 to:doplasma::@6_15
doplasma::@6_15: scope:[doplasma] from doplasma::@6_14 doplasma::@6_15: scope:[doplasma] from doplasma::@6_14
[74] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f) [73] (byte) doplasma::val#32 ← (byte) doplasma::val#30 + *((const byte[$19]) doplasma::ybuf#0+(byte) $f)
[75] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32 [74] *((const byte*) SCREEN1#0+(byte) $f*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#32
to:doplasma::@6_16 to:doplasma::@6_16
doplasma::@6_16: scope:[doplasma] from doplasma::@6_15 doplasma::@6_16: scope:[doplasma] from doplasma::@6_15
[76] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10) [75] (byte) doplasma::val#34 ← (byte) doplasma::val#32 + *((const byte[$19]) doplasma::ybuf#0+(byte) $10)
[77] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34 [76] *((const byte*) SCREEN1#0+(byte) $10*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#34
to:doplasma::@6_17 to:doplasma::@6_17
doplasma::@6_17: scope:[doplasma] from doplasma::@6_16 doplasma::@6_17: scope:[doplasma] from doplasma::@6_16
[78] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11) [77] (byte) doplasma::val#36 ← (byte) doplasma::val#34 + *((const byte[$19]) doplasma::ybuf#0+(byte) $11)
[79] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36 [78] *((const byte*) SCREEN1#0+(byte) $11*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#36
to:doplasma::@6_18 to:doplasma::@6_18
doplasma::@6_18: scope:[doplasma] from doplasma::@6_17 doplasma::@6_18: scope:[doplasma] from doplasma::@6_17
[80] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12) [79] (byte) doplasma::val#38 ← (byte) doplasma::val#36 + *((const byte[$19]) doplasma::ybuf#0+(byte) $12)
[81] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38 [80] *((const byte*) SCREEN1#0+(byte) $12*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#38
to:doplasma::@6_19 to:doplasma::@6_19
doplasma::@6_19: scope:[doplasma] from doplasma::@6_18 doplasma::@6_19: scope:[doplasma] from doplasma::@6_18
[82] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13) [81] (byte) doplasma::val#40 ← (byte) doplasma::val#38 + *((const byte[$19]) doplasma::ybuf#0+(byte) $13)
[83] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40 [82] *((const byte*) SCREEN1#0+(byte) $13*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#40
to:doplasma::@6_20 to:doplasma::@6_20
doplasma::@6_20: scope:[doplasma] from doplasma::@6_19 doplasma::@6_20: scope:[doplasma] from doplasma::@6_19
[84] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14) [83] (byte) doplasma::val#42 ← (byte) doplasma::val#40 + *((const byte[$19]) doplasma::ybuf#0+(byte) $14)
[85] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42 [84] *((const byte*) SCREEN1#0+(byte) $14*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#42
to:doplasma::@6_21 to:doplasma::@6_21
doplasma::@6_21: scope:[doplasma] from doplasma::@6_20 doplasma::@6_21: scope:[doplasma] from doplasma::@6_20
[86] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15) [85] (byte) doplasma::val#44 ← (byte) doplasma::val#42 + *((const byte[$19]) doplasma::ybuf#0+(byte) $15)
[87] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44 [86] *((const byte*) SCREEN1#0+(byte) $15*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#44
to:doplasma::@6_22 to:doplasma::@6_22
doplasma::@6_22: scope:[doplasma] from doplasma::@6_21 doplasma::@6_22: scope:[doplasma] from doplasma::@6_21
[88] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16) [87] (byte) doplasma::val#46 ← (byte) doplasma::val#44 + *((const byte[$19]) doplasma::ybuf#0+(byte) $16)
[89] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46 [88] *((const byte*) SCREEN1#0+(byte) $16*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#46
to:doplasma::@6_23 to:doplasma::@6_23
doplasma::@6_23: scope:[doplasma] from doplasma::@6_22 doplasma::@6_23: scope:[doplasma] from doplasma::@6_22
[90] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17) [89] (byte) doplasma::val#48 ← (byte) doplasma::val#46 + *((const byte[$19]) doplasma::ybuf#0+(byte) $17)
[91] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48 [90] *((const byte*) SCREEN1#0+(byte) $17*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#48
to:doplasma::@6_24 to:doplasma::@6_24
doplasma::@6_24: scope:[doplasma] from doplasma::@6_23 doplasma::@6_24: scope:[doplasma] from doplasma::@6_23
[92] (byte) doplasma::val#50 ← (byte) doplasma::val#48 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18) [91] (byte) doplasma::val#50 ← (byte) doplasma::val#48 + *((const byte[$19]) doplasma::ybuf#0+(byte) $18)
[93] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#50 [92] *((const byte*) SCREEN1#0+(byte) $18*(byte) $28 + (byte) doplasma::i2#2) ← (byte) doplasma::val#50
to:doplasma::@7 to:doplasma::@7
doplasma::@7: scope:[doplasma] from doplasma::@6_24 doplasma::@7: scope:[doplasma] from doplasma::@6_24
[94] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 [93] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2
[95] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@5 [94] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@5
to:doplasma::@return to:doplasma::@return
doplasma::@return: scope:[doplasma] from doplasma::@7 doplasma::@return: scope:[doplasma] from doplasma::@7
[96] return [95] return
to:@return to:@return
doplasma::@8: scope:[doplasma] from doplasma::@1 doplasma::@8: scope:[doplasma] from doplasma::@1
[97] (byte~) doplasma::yprev#3 ← (byte) doplasma::yval#0 [96] (byte~) doplasma::yprev#3 ← (byte) doplasma::yval#0
to:doplasma::@1 to:doplasma::@1
makecharset: scope:[makecharset] from main::@2 makecharset: scope:[makecharset] from main::@2
[98] phi() [97] phi()
[99] call sid_rnd_init [98] call sid_rnd_init
to:makecharset::@10 to:makecharset::@10
makecharset::@10: scope:[makecharset] from makecharset makecharset::@10: scope:[makecharset] from makecharset
[100] phi() [99] phi()
[101] call print_cls [100] call print_cls
to:makecharset::@1 to:makecharset::@1
makecharset::@1: scope:[makecharset] from makecharset::@10 makecharset::@9 makecharset::@1: scope:[makecharset] from makecharset::@10 makecharset::@9
[102] (byte*) print_char_cursor#44 ← phi( makecharset::@10/(const byte*) print_line_cursor#0 makecharset::@9/(byte*) print_char_cursor#18 ) [101] (byte*) print_char_cursor#44 ← phi( makecharset::@10/(const byte*) print_line_cursor#0 makecharset::@9/(byte*) print_char_cursor#18 )
[102] (word) makecharset::c#2 ← phi( makecharset::@10/(byte) 0 makecharset::@9/(word) makecharset::c#1 ) [101] (word) makecharset::c#2 ← phi( makecharset::@10/(byte) 0 makecharset::@9/(word) makecharset::c#1 )
[103] (byte~) makecharset::$2 ← < (word) makecharset::c#2 [102] (byte~) makecharset::$2 ← < (word) makecharset::c#2
[104] (byte) makecharset::s#0 ← *((const byte*) SINTABLE#0 + (byte~) makecharset::$2) [103] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$2)
to:makecharset::@2 to:makecharset::@2
makecharset::@2: scope:[makecharset] from makecharset::@1 makecharset::@6 makecharset::@2: scope:[makecharset] from makecharset::@1 makecharset::@6
[105] (byte) makecharset::i#7 ← phi( makecharset::@1/(byte) 0 makecharset::@6/(byte) makecharset::i#1 ) [104] (byte) makecharset::i#7 ← phi( makecharset::@1/(byte) 0 makecharset::@6/(byte) makecharset::i#1 )
to:makecharset::@3 to:makecharset::@3
makecharset::@3: scope:[makecharset] from makecharset::@2 makecharset::@4 makecharset::@3: scope:[makecharset] from makecharset::@2 makecharset::@4
[106] (byte) makecharset::b#2 ← phi( makecharset::@2/(byte) 0 makecharset::@4/(byte) makecharset::b#3 ) [105] (byte) makecharset::b#2 ← phi( makecharset::@2/(byte) 0 makecharset::@4/(byte) makecharset::b#3 )
[106] (byte) makecharset::ii#2 ← phi( makecharset::@2/(byte) 0 makecharset::@4/(byte) makecharset::ii#1 ) [105] (byte) makecharset::ii#2 ← phi( makecharset::@2/(byte) 0 makecharset::@4/(byte) makecharset::ii#1 )
[107] call sid_rnd [106] call sid_rnd
[108] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 [107] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
to:makecharset::@11 to:makecharset::@11
makecharset::@11: scope:[makecharset] from makecharset::@3 makecharset::@11: scope:[makecharset] from makecharset::@3
[109] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2 [108] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2
[110] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte) $ff [109] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte) $ff
[111] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 [110] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4
to:makecharset::@5 to:makecharset::@5
makecharset::@5: scope:[makecharset] from makecharset::@11 makecharset::@5: scope:[makecharset] from makecharset::@11
[112] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) [111] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2)
to:makecharset::@4 to:makecharset::@4
makecharset::@4: scope:[makecharset] from makecharset::@11 makecharset::@5 makecharset::@4: scope:[makecharset] from makecharset::@11 makecharset::@5
[113] (byte) makecharset::b#3 ← phi( makecharset::@11/(byte) makecharset::b#2 makecharset::@5/(byte) makecharset::b#1 ) [112] (byte) makecharset::b#3 ← phi( makecharset::@11/(byte) makecharset::b#2 makecharset::@5/(byte) makecharset::b#1 )
[114] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 [113] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2
[115] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3 [114] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3
to:makecharset::@6 to:makecharset::@6
makecharset::@6: scope:[makecharset] from makecharset::@4 makecharset::@6: scope:[makecharset] from makecharset::@4
[116] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte) 3 [115] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte) 3
[117] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 [116] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7
[118] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$9 [117] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$9
[119] *((byte*~) makecharset::$16) ← (byte) makecharset::b#3 [118] *((byte*~) makecharset::$16) ← (byte) makecharset::b#3
[120] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 [119] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7
[121] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2 [120] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2
to:makecharset::@7 to:makecharset::@7
makecharset::@7: scope:[makecharset] from makecharset::@6 makecharset::@7: scope:[makecharset] from makecharset::@6
[122] (byte~) makecharset::$11 ← (word) makecharset::c#2 & (byte) 7 [121] (byte~) makecharset::$11 ← (word) makecharset::c#2 & (byte) 7
[123] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9 [122] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9
to:makecharset::@8 to:makecharset::@8
makecharset::@8: scope:[makecharset] from makecharset::@7 makecharset::@8: scope:[makecharset] from makecharset::@7
[124] phi() [123] phi()
[125] call print_char [124] call print_char
to:makecharset::@9 to:makecharset::@9
makecharset::@9: scope:[makecharset] from makecharset::@7 makecharset::@8 makecharset::@9: scope:[makecharset] from makecharset::@7 makecharset::@8
[126] (byte*) print_char_cursor#18 ← phi( makecharset::@8/(byte*) print_char_cursor#1 makecharset::@7/(byte*) print_char_cursor#44 ) [125] (byte*) print_char_cursor#18 ← phi( makecharset::@8/(byte*) print_char_cursor#1 makecharset::@7/(byte*) print_char_cursor#44 )
[127] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 [126] (word) makecharset::c#1 ← ++ (word) makecharset::c#2
[128] if((word) makecharset::c#1<(word) $100) goto makecharset::@1 [127] if((word) makecharset::c#1<(word) $100) goto makecharset::@1
to:makecharset::@return to:makecharset::@return
makecharset::@return: scope:[makecharset] from makecharset::@9 makecharset::@return: scope:[makecharset] from makecharset::@9
[129] return [128] return
to:@return to:@return
print_char: scope:[print_char] from makecharset::@8 print_char: scope:[print_char] from makecharset::@8
[130] *((byte*) print_char_cursor#44) ← (const byte) print_char::ch#0 [129] *((byte*) print_char_cursor#44) ← (const byte) print_char::ch#0
[131] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#44 [130] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#44
to:print_char::@return to:print_char::@return
print_char::@return: scope:[print_char] from print_char print_char::@return: scope:[print_char] from print_char
[132] return [131] return
to:@return to:@return
sid_rnd: scope:[sid_rnd] from makecharset::@3 sid_rnd: scope:[sid_rnd] from makecharset::@3
[133] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) [132] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0)
to:sid_rnd::@return to:sid_rnd::@return
sid_rnd::@return: scope:[sid_rnd] from sid_rnd sid_rnd::@return: scope:[sid_rnd] from sid_rnd
[134] return [133] return
to:@return to:@return
print_cls: scope:[print_cls] from makecharset::@10 print_cls: scope:[print_cls] from makecharset::@10
[135] phi() [134] phi()
to:print_cls::@1 to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[136] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_line_cursor#0 print_cls::@1/(byte*) print_cls::sc#1 ) [135] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_line_cursor#0 print_cls::@1/(byte*) print_cls::sc#1 )
[137] *((byte*) print_cls::sc#2) ← (byte) ' ' [136] *((byte*) print_cls::sc#2) ← (byte) ' '
[138] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [137] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[139] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word) $3e8) goto print_cls::@1 [138] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word) $3e8) goto print_cls::@1
to:print_cls::@return to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1 print_cls::@return: scope:[print_cls] from print_cls::@1
[140] return [139] return
to:@return to:@return
sid_rnd_init: scope:[sid_rnd_init] from makecharset sid_rnd_init: scope:[sid_rnd_init] from makecharset
[141] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [140] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff
[142] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [141] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0
to:sid_rnd_init::@return to:sid_rnd_init::@return
sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init
[143] return [142] return
to:@return to:@return

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,4 @@
(label) @1 (label) @1
(label) @2
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) BGCOL (byte*) BGCOL
@ -26,8 +25,10 @@
(const word*) SID_VOICE3_FREQ#0 SID_VOICE3_FREQ = (word*) 54286 (const word*) SID_VOICE3_FREQ#0 SID_VOICE3_FREQ = (word*) 54286
(byte*) SID_VOICE3_OSC (byte*) SID_VOICE3_OSC
(const byte*) SID_VOICE3_OSC#0 SID_VOICE3_OSC = (byte*) 54299 (const byte*) SID_VOICE3_OSC#0 SID_VOICE3_OSC = (byte*) 54299
(byte*) SINTABLE (byte[$100]) SINTABLE
(const byte*) SINTABLE#0 SINTABLE = (byte*) 7936 (const byte[$100]) SINTABLE#0 SINTABLE = kickasm {{ .for(var i=0;i<$100;i++)
.byte round(127.5+127.5*sin(toRadians(360*i/256)))
}}
(byte) c1A (byte) c1A
(byte) c1A#1 c1A zp ZP_BYTE:4 1.1538461538461537 (byte) c1A#1 c1A zp ZP_BYTE:4 1.1538461538461537
(byte) c1A#3 c1A zp ZP_BYTE:4 0.18840579710144925 (byte) c1A#3 c1A zp ZP_BYTE:4 0.18840579710144925

View File

@ -23,7 +23,6 @@
.label SCREEN1 = $2800 .label SCREEN1 = $2800
.label SCREEN2 = $2c00 .label SCREEN2 = $2c00
.label CHARSET = $2000 .label CHARSET = $2000
.label SINTABLE = $1f00
.label print_char_cursor = $12 .label print_char_cursor = $12
.label c1A = 4 .label c1A = 4
.label c1B = 5 .label c1B = 5
@ -320,7 +319,8 @@ sid_rnd_init: {
sta SID_VOICE3_CONTROL sta SID_VOICE3_CONTROL
rts rts
} }
.pc = SINTABLE "SINTABLE" .align $100
.for(var i=0;i<$100;i++) SINTABLE:
.for(var i=0;i<$100;i++)
.byte round(127.5+127.5*sin(toRadians(360*i/256))) .byte round(127.5+127.5*sin(toRadians(360*i/256)))

View File

@ -2,203 +2,198 @@
[0] phi() [0] phi()
to:@1 to:@1
@1: scope:[] from @begin @1: scope:[] from @begin
kickasm(location (const byte*) SINTABLE#0) {{ .for(var i=0;i<$100;i++) [1] phi()
.byte round(127.5+127.5*sin(toRadians(360*i/256))) [2] call main
}}
to:@2
@2: scope:[] from @1
[2] phi()
[3] call main
to:@end to:@end
@end: scope:[] from @2 @end: scope:[] from @1
[4] phi() [3] phi()
main: scope:[main] from @2 main: scope:[main] from @1
asm { sei } asm { sei }
[6] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0 [5] *((const byte*) BORDERCOL#0) ← (const byte) BLUE#0
[7] *((const byte*) BGCOL#0) ← (const byte) BLUE#0 [6] *((const byte*) BGCOL#0) ← (const byte) BLUE#0
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1 main::@1: scope:[main] from main main::@1
[8] (byte*) main::col#2 ← phi( main/(const byte*) COLS#0 main::@1/(byte*) main::col#1 ) [7] (byte*) main::col#2 ← phi( main/(const byte*) COLS#0 main::@1/(byte*) main::col#1 )
[9] *((byte*) main::col#2) ← (const byte) BLACK#0 [8] *((byte*) main::col#2) ← (const byte) BLACK#0
[10] (byte*) main::col#1 ← ++ (byte*) main::col#2 [9] (byte*) main::col#1 ← ++ (byte*) main::col#2
[11] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1 [10] if((byte*) main::col#1!=(const byte*) COLS#0+(word) $3e8+(byte) 1) goto main::@1
to:main::@2 to:main::@2
main::@2: scope:[main] from main::@1 main::@2: scope:[main] from main::@1
[12] phi() [11] phi()
[13] call makecharset [12] call makecharset
to:main::@3 to:main::@3
main::@3: scope:[main] from main::@2 main::@6 main::@3: scope:[main] from main::@2 main::@6
[14] (byte) c2B#14 ← phi( main::@6/(byte) c2B#4 main::@2/(byte) 0 ) [13] (byte) c2B#14 ← phi( main::@6/(byte) c2B#4 main::@2/(byte) 0 )
[14] (byte) c2A#14 ← phi( main::@6/(byte) c2A#4 main::@2/(byte) 0 ) [13] (byte) c2A#14 ← phi( main::@6/(byte) c2A#4 main::@2/(byte) 0 )
[14] (byte) c1B#14 ← phi( main::@6/(byte) c1B#4 main::@2/(byte) 0 ) [13] (byte) c1B#14 ← phi( main::@6/(byte) c1B#4 main::@2/(byte) 0 )
[14] (byte) c1A#14 ← phi( main::@6/(byte) c1A#4 main::@2/(byte) 0 ) [13] (byte) c1A#14 ← phi( main::@6/(byte) c1A#4 main::@2/(byte) 0 )
to:main::@4 to:main::@4
main::@4: scope:[main] from main::@3 main::@4: scope:[main] from main::@3
[15] phi() [14] phi()
[16] call doplasma [15] call doplasma
to:main::toD0181 to:main::toD0181
main::toD0181: scope:[main] from main::@4 main::toD0181: scope:[main] from main::@4
[17] phi() [16] phi()
to:main::@5 to:main::@5
main::@5: scope:[main] from main::toD0181 main::@5: scope:[main] from main::toD0181
[18] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0 [17] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
[19] call doplasma [18] call doplasma
to:main::toD0182 to:main::toD0182
main::toD0182: scope:[main] from main::@5 main::toD0182: scope:[main] from main::@5
[20] phi() [19] phi()
to:main::@6 to:main::@6
main::@6: scope:[main] from main::toD0182 main::@6: scope:[main] from main::toD0182
[21] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0 [20] *((const byte*) D018#0) ← (const byte) main::toD0182_return#0
to:main::@3 to:main::@3
doplasma: scope:[doplasma] from main::@4 main::@5 doplasma: scope:[doplasma] from main::@4 main::@5
[22] (byte*) doplasma::screen#10 ← phi( main::@4/(const byte*) SCREEN1#0 main::@5/(const byte*) SCREEN2#0 ) [21] (byte*) doplasma::screen#10 ← phi( main::@4/(const byte*) SCREEN1#0 main::@5/(const byte*) SCREEN2#0 )
[22] (byte) c2B#24 ← phi( main::@4/(byte) c2B#14 main::@5/(byte) c2B#4 ) [21] (byte) c2B#24 ← phi( main::@4/(byte) c2B#14 main::@5/(byte) c2B#4 )
[22] (byte) c2A#24 ← phi( main::@4/(byte) c2A#14 main::@5/(byte) c2A#4 ) [21] (byte) c2A#24 ← phi( main::@4/(byte) c2A#14 main::@5/(byte) c2A#4 )
[22] (byte) c1B#10 ← phi( main::@4/(byte) c1B#14 main::@5/(byte) c1B#4 ) [21] (byte) c1B#10 ← phi( main::@4/(byte) c1B#14 main::@5/(byte) c1B#4 )
[22] (byte) c1A#10 ← phi( main::@4/(byte) c1A#14 main::@5/(byte) c1A#4 ) [21] (byte) c1A#10 ← phi( main::@4/(byte) c1A#14 main::@5/(byte) c1A#4 )
[23] (byte) doplasma::c1a#0 ← (byte) c1A#10 [22] (byte) doplasma::c1a#0 ← (byte) c1A#10
[24] (byte) doplasma::c1b#0 ← (byte) c1B#10 [23] (byte) doplasma::c1b#0 ← (byte) c1B#10
to:doplasma::@1 to:doplasma::@1
doplasma::@1: scope:[doplasma] from doplasma doplasma::@1 doplasma::@1: scope:[doplasma] from doplasma doplasma::@1
[25] (byte) doplasma::i#2 ← phi( doplasma/(byte) 0 doplasma::@1/(byte) doplasma::i#1 ) [24] (byte) doplasma::i#2 ← phi( doplasma/(byte) 0 doplasma::@1/(byte) doplasma::i#1 )
[25] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@1/(byte) doplasma::c1b#1 ) [24] (byte) doplasma::c1b#2 ← phi( doplasma/(byte) doplasma::c1b#0 doplasma::@1/(byte) doplasma::c1b#1 )
[25] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@1/(byte) doplasma::c1a#1 ) [24] (byte) doplasma::c1a#2 ← phi( doplasma/(byte) doplasma::c1a#0 doplasma::@1/(byte) doplasma::c1a#1 )
[26] (byte~) doplasma::$0 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c1b#2) [25] (byte~) doplasma::$0 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c1b#2)
[27] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$0 [26] *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::i#2) ← (byte~) doplasma::$0
[28] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4 [27] (byte) doplasma::c1a#1 ← (byte) doplasma::c1a#2 + (byte) 4
[29] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9 [28] (byte) doplasma::c1b#1 ← (byte) doplasma::c1b#2 + (byte) 9
[30] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2 [29] (byte) doplasma::i#1 ← ++ (byte) doplasma::i#2
[31] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@1 [30] if((byte) doplasma::i#1<(byte) $19) goto doplasma::@1
to:doplasma::@2 to:doplasma::@2
doplasma::@2: scope:[doplasma] from doplasma::@1 doplasma::@2: scope:[doplasma] from doplasma::@1
[32] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3 [31] (byte) c1A#4 ← (byte) c1A#10 + (byte) 3
[33] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5 [32] (byte) c1B#4 ← (byte) c1B#10 - (byte) 5
[34] (byte) doplasma::c2a#0 ← (byte) c2A#24 [33] (byte) doplasma::c2a#0 ← (byte) c2A#24
[35] (byte) doplasma::c2b#0 ← (byte) c2B#24 [34] (byte) doplasma::c2b#0 ← (byte) c2B#24
to:doplasma::@3 to:doplasma::@3
doplasma::@3: scope:[doplasma] from doplasma::@2 doplasma::@3 doplasma::@3: scope:[doplasma] from doplasma::@2 doplasma::@3
[36] (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte) 0 doplasma::@3/(byte) doplasma::i1#1 ) [35] (byte) doplasma::i1#2 ← phi( doplasma::@2/(byte) 0 doplasma::@3/(byte) doplasma::i1#1 )
[36] (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 ) [35] (byte) doplasma::c2b#2 ← phi( doplasma::@2/(byte) doplasma::c2b#0 doplasma::@3/(byte) doplasma::c2b#1 )
[36] (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 ) [35] (byte) doplasma::c2a#2 ← phi( doplasma::@2/(byte) doplasma::c2a#0 doplasma::@3/(byte) doplasma::c2a#1 )
[37] (byte~) doplasma::$2 ← *((const byte*) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte*) SINTABLE#0 + (byte) doplasma::c2b#2) [36] (byte~) doplasma::$2 ← *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2a#2) + *((const byte[$100]) SINTABLE#0 + (byte) doplasma::c2b#2)
[38] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$2 [37] *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i1#2) ← (byte~) doplasma::$2
[39] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3 [38] (byte) doplasma::c2a#1 ← (byte) doplasma::c2a#2 + (byte) 3
[40] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7 [39] (byte) doplasma::c2b#1 ← (byte) doplasma::c2b#2 + (byte) 7
[41] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2 [40] (byte) doplasma::i1#1 ← ++ (byte) doplasma::i1#2
[42] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3 [41] if((byte) doplasma::i1#1<(byte) $28) goto doplasma::@3
to:doplasma::@4 to:doplasma::@4
doplasma::@4: scope:[doplasma] from doplasma::@3 doplasma::@4: scope:[doplasma] from doplasma::@3
[43] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2 [42] (byte) c2A#4 ← (byte) c2A#24 + (byte) 2
[44] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3 [43] (byte) c2B#4 ← (byte) c2B#24 - (byte) 3
to:doplasma::@5 to:doplasma::@5
doplasma::@5: scope:[doplasma] from doplasma::@4 doplasma::@7 doplasma::@5: scope:[doplasma] from doplasma::@4 doplasma::@7
[45] (byte*) doplasma::screen#5 ← phi( doplasma::@4/(byte*) doplasma::screen#10 doplasma::@7/(byte*) doplasma::screen#2 ) [44] (byte*) doplasma::screen#5 ← phi( doplasma::@4/(byte*) doplasma::screen#10 doplasma::@7/(byte*) doplasma::screen#2 )
[45] (byte) doplasma::ii#4 ← phi( doplasma::@4/(byte) 0 doplasma::@7/(byte) doplasma::ii#1 ) [44] (byte) doplasma::ii#4 ← phi( doplasma::@4/(byte) 0 doplasma::@7/(byte) doplasma::ii#1 )
to:doplasma::@6 to:doplasma::@6
doplasma::@6: scope:[doplasma] from doplasma::@5 doplasma::@6 doplasma::@6: scope:[doplasma] from doplasma::@5 doplasma::@6
[46] (byte) doplasma::i2#2 ← phi( doplasma::@5/(byte) 0 doplasma::@6/(byte) doplasma::i2#1 ) [45] (byte) doplasma::i2#2 ← phi( doplasma::@5/(byte) 0 doplasma::@6/(byte) doplasma::i2#1 )
[47] (byte~) doplasma::$4 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#4) [46] (byte~) doplasma::$4 ← *((const byte[$28]) doplasma::xbuf#0 + (byte) doplasma::i2#2) + *((const byte[$19]) doplasma::ybuf#0 + (byte) doplasma::ii#4)
[48] *((byte*) doplasma::screen#5 + (byte) doplasma::i2#2) ← (byte~) doplasma::$4 [47] *((byte*) doplasma::screen#5 + (byte) doplasma::i2#2) ← (byte~) doplasma::$4
[49] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2 [48] (byte) doplasma::i2#1 ← ++ (byte) doplasma::i2#2
[50] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@6 [49] if((byte) doplasma::i2#1<(byte) $28) goto doplasma::@6
to:doplasma::@7 to:doplasma::@7
doplasma::@7: scope:[doplasma] from doplasma::@6 doplasma::@7: scope:[doplasma] from doplasma::@6
[51] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28 [50] (byte*) doplasma::screen#2 ← (byte*) doplasma::screen#5 + (byte) $28
[52] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#4 [51] (byte) doplasma::ii#1 ← ++ (byte) doplasma::ii#4
[53] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@5 [52] if((byte) doplasma::ii#1<(byte) $19) goto doplasma::@5
to:doplasma::@return to:doplasma::@return
doplasma::@return: scope:[doplasma] from doplasma::@7 doplasma::@return: scope:[doplasma] from doplasma::@7
[54] return [53] return
to:@return to:@return
makecharset: scope:[makecharset] from main::@2 makecharset: scope:[makecharset] from main::@2
[55] phi() [54] phi()
[56] call sid_rnd_init [55] call sid_rnd_init
to:makecharset::@10 to:makecharset::@10
makecharset::@10: scope:[makecharset] from makecharset makecharset::@10: scope:[makecharset] from makecharset
[57] phi() [56] phi()
[58] call print_cls [57] call print_cls
to:makecharset::@1 to:makecharset::@1
makecharset::@1: scope:[makecharset] from makecharset::@10 makecharset::@9 makecharset::@1: scope:[makecharset] from makecharset::@10 makecharset::@9
[59] (byte*) print_char_cursor#46 ← phi( makecharset::@10/(const byte*) print_line_cursor#0 makecharset::@9/(byte*) print_char_cursor#18 ) [58] (byte*) print_char_cursor#46 ← phi( makecharset::@10/(const byte*) print_line_cursor#0 makecharset::@9/(byte*) print_char_cursor#18 )
[59] (word) makecharset::c#2 ← phi( makecharset::@10/(byte) 0 makecharset::@9/(word) makecharset::c#1 ) [58] (word) makecharset::c#2 ← phi( makecharset::@10/(byte) 0 makecharset::@9/(word) makecharset::c#1 )
[60] (byte~) makecharset::$2 ← < (word) makecharset::c#2 [59] (byte~) makecharset::$2 ← < (word) makecharset::c#2
[61] (byte) makecharset::s#0 ← *((const byte*) SINTABLE#0 + (byte~) makecharset::$2) [60] (byte) makecharset::s#0 ← *((const byte[$100]) SINTABLE#0 + (byte~) makecharset::$2)
to:makecharset::@2 to:makecharset::@2
makecharset::@2: scope:[makecharset] from makecharset::@1 makecharset::@6 makecharset::@2: scope:[makecharset] from makecharset::@1 makecharset::@6
[62] (byte) makecharset::i#7 ← phi( makecharset::@1/(byte) 0 makecharset::@6/(byte) makecharset::i#1 ) [61] (byte) makecharset::i#7 ← phi( makecharset::@1/(byte) 0 makecharset::@6/(byte) makecharset::i#1 )
to:makecharset::@3 to:makecharset::@3
makecharset::@3: scope:[makecharset] from makecharset::@2 makecharset::@4 makecharset::@3: scope:[makecharset] from makecharset::@2 makecharset::@4
[63] (byte) makecharset::b#2 ← phi( makecharset::@2/(byte) 0 makecharset::@4/(byte) makecharset::b#3 ) [62] (byte) makecharset::b#2 ← phi( makecharset::@2/(byte) 0 makecharset::@4/(byte) makecharset::b#3 )
[63] (byte) makecharset::ii#2 ← phi( makecharset::@2/(byte) 0 makecharset::@4/(byte) makecharset::ii#1 ) [62] (byte) makecharset::ii#2 ← phi( makecharset::@2/(byte) 0 makecharset::@4/(byte) makecharset::ii#1 )
[64] call sid_rnd [63] call sid_rnd
[65] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0 [64] (byte) sid_rnd::return#2 ← (byte) sid_rnd::return#0
to:makecharset::@11 to:makecharset::@11
makecharset::@11: scope:[makecharset] from makecharset::@3 makecharset::@11: scope:[makecharset] from makecharset::@3
[66] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2 [65] (byte~) makecharset::$3 ← (byte) sid_rnd::return#2
[67] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte) $ff [66] (byte~) makecharset::$4 ← (byte~) makecharset::$3 & (byte) $ff
[68] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4 [67] if((byte~) makecharset::$4<=(byte) makecharset::s#0) goto makecharset::@4
to:makecharset::@5 to:makecharset::@5
makecharset::@5: scope:[makecharset] from makecharset::@11 makecharset::@5: scope:[makecharset] from makecharset::@11
[69] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2) [68] (byte) makecharset::b#1 ← (byte) makecharset::b#2 | *((const byte[8]) makecharset::bittab#0 + (byte) makecharset::ii#2)
to:makecharset::@4 to:makecharset::@4
makecharset::@4: scope:[makecharset] from makecharset::@11 makecharset::@5 makecharset::@4: scope:[makecharset] from makecharset::@11 makecharset::@5
[70] (byte) makecharset::b#3 ← phi( makecharset::@11/(byte) makecharset::b#2 makecharset::@5/(byte) makecharset::b#1 ) [69] (byte) makecharset::b#3 ← phi( makecharset::@11/(byte) makecharset::b#2 makecharset::@5/(byte) makecharset::b#1 )
[71] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2 [70] (byte) makecharset::ii#1 ← ++ (byte) makecharset::ii#2
[72] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3 [71] if((byte) makecharset::ii#1<(byte) 8) goto makecharset::@3
to:makecharset::@6 to:makecharset::@6
makecharset::@6: scope:[makecharset] from makecharset::@4 makecharset::@6: scope:[makecharset] from makecharset::@4
[73] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte) 3 [72] (word~) makecharset::$8 ← (word) makecharset::c#2 << (byte) 3
[74] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7 [73] (word~) makecharset::$9 ← (word~) makecharset::$8 + (byte) makecharset::i#7
[75] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$9 [74] (byte*~) makecharset::$16 ← (const byte*) CHARSET#0 + (word~) makecharset::$9
[76] *((byte*~) makecharset::$16) ← (byte) makecharset::b#3 [75] *((byte*~) makecharset::$16) ← (byte) makecharset::b#3
[77] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7 [76] (byte) makecharset::i#1 ← ++ (byte) makecharset::i#7
[78] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2 [77] if((byte) makecharset::i#1<(byte) 8) goto makecharset::@2
to:makecharset::@7 to:makecharset::@7
makecharset::@7: scope:[makecharset] from makecharset::@6 makecharset::@7: scope:[makecharset] from makecharset::@6
[79] (byte~) makecharset::$11 ← (word) makecharset::c#2 & (byte) 7 [78] (byte~) makecharset::$11 ← (word) makecharset::c#2 & (byte) 7
[80] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9 [79] if((byte~) makecharset::$11!=(byte) 0) goto makecharset::@9
to:makecharset::@8 to:makecharset::@8
makecharset::@8: scope:[makecharset] from makecharset::@7 makecharset::@8: scope:[makecharset] from makecharset::@7
[81] phi() [80] phi()
[82] call print_char [81] call print_char
to:makecharset::@9 to:makecharset::@9
makecharset::@9: scope:[makecharset] from makecharset::@7 makecharset::@8 makecharset::@9: scope:[makecharset] from makecharset::@7 makecharset::@8
[83] (byte*) print_char_cursor#18 ← phi( makecharset::@8/(byte*) print_char_cursor#1 makecharset::@7/(byte*) print_char_cursor#46 ) [82] (byte*) print_char_cursor#18 ← phi( makecharset::@8/(byte*) print_char_cursor#1 makecharset::@7/(byte*) print_char_cursor#46 )
[84] (word) makecharset::c#1 ← ++ (word) makecharset::c#2 [83] (word) makecharset::c#1 ← ++ (word) makecharset::c#2
[85] if((word) makecharset::c#1<(word) $100) goto makecharset::@1 [84] if((word) makecharset::c#1<(word) $100) goto makecharset::@1
to:makecharset::@return to:makecharset::@return
makecharset::@return: scope:[makecharset] from makecharset::@9 makecharset::@return: scope:[makecharset] from makecharset::@9
[86] return [85] return
to:@return to:@return
print_char: scope:[print_char] from makecharset::@8 print_char: scope:[print_char] from makecharset::@8
[87] *((byte*) print_char_cursor#46) ← (const byte) print_char::ch#0 [86] *((byte*) print_char_cursor#46) ← (const byte) print_char::ch#0
[88] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#46 [87] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#46
to:print_char::@return to:print_char::@return
print_char::@return: scope:[print_char] from print_char print_char::@return: scope:[print_char] from print_char
[89] return [88] return
to:@return to:@return
sid_rnd: scope:[sid_rnd] from makecharset::@3 sid_rnd: scope:[sid_rnd] from makecharset::@3
[90] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0) [89] (byte) sid_rnd::return#0 ← *((const byte*) SID_VOICE3_OSC#0)
to:sid_rnd::@return to:sid_rnd::@return
sid_rnd::@return: scope:[sid_rnd] from sid_rnd sid_rnd::@return: scope:[sid_rnd] from sid_rnd
[91] return [90] return
to:@return to:@return
print_cls: scope:[print_cls] from makecharset::@10 print_cls: scope:[print_cls] from makecharset::@10
[92] phi() [91] phi()
to:print_cls::@1 to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1 print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[93] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_line_cursor#0 print_cls::@1/(byte*) print_cls::sc#1 ) [92] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) print_line_cursor#0 print_cls::@1/(byte*) print_cls::sc#1 )
[94] *((byte*) print_cls::sc#2) ← (byte) ' ' [93] *((byte*) print_cls::sc#2) ← (byte) ' '
[95] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [94] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
[96] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word) $3e8) goto print_cls::@1 [95] if((byte*) print_cls::sc#1!=(const byte*) print_line_cursor#0+(word) $3e8) goto print_cls::@1
to:print_cls::@return to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1 print_cls::@return: scope:[print_cls] from print_cls::@1
[97] return [96] return
to:@return to:@return
sid_rnd_init: scope:[sid_rnd_init] from makecharset sid_rnd_init: scope:[sid_rnd_init] from makecharset
[98] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff [97] *((const word*) SID_VOICE3_FREQ#0) ← (word) $ffff
[99] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0 [98] *((const byte*) SID_VOICE3_CONTROL#0) ← (const byte) SID_CONTROL_NOISE#0
to:sid_rnd_init::@return to:sid_rnd_init::@return
sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init sid_rnd_init::@return: scope:[sid_rnd_init] from sid_rnd_init
[100] return [99] return
to:@return to:@return

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,4 @@
(label) @1 (label) @1
(label) @2
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) BGCOL (byte*) BGCOL
@ -28,8 +27,10 @@
(const word*) SID_VOICE3_FREQ#0 SID_VOICE3_FREQ = (word*) 54286 (const word*) SID_VOICE3_FREQ#0 SID_VOICE3_FREQ = (word*) 54286
(byte*) SID_VOICE3_OSC (byte*) SID_VOICE3_OSC
(const byte*) SID_VOICE3_OSC#0 SID_VOICE3_OSC = (byte*) 54299 (const byte*) SID_VOICE3_OSC#0 SID_VOICE3_OSC = (byte*) 54299
(byte*) SINTABLE (byte[$100]) SINTABLE
(const byte*) SINTABLE#0 SINTABLE = (byte*) 7936 (const byte[$100]) SINTABLE#0 SINTABLE = kickasm {{ .for(var i=0;i<$100;i++)
.byte round(127.5+127.5*sin(toRadians(360*i/256)))
}}
(byte) c1A (byte) c1A
(byte) c1A#10 c1A zp ZP_BYTE:4 2.6000000000000005 (byte) c1A#10 c1A zp ZP_BYTE:4 2.6000000000000005
(byte) c1A#14 c1A zp ZP_BYTE:4 11.0 (byte) c1A#14 c1A zp ZP_BYTE:4 11.0

View File

@ -12,10 +12,6 @@
.const GREEN = 5 .const GREEN = 5
.const LIGHT_BLUE = $e .const LIGHT_BLUE = $e
.label SCREEN = $400 .label SCREEN = $400
// Sine and Cosine tables
// Angles: $00=0, $80=PI,$100=2*PI
// Sine/Cosine: signed fixed [-$7f,$7f]
.label COS = $2000
// A single sprite // A single sprite
.label SPRITE = $3000 .label SPRITE = $3000
.label SIN = COS+$40 .label SIN = COS+$40
@ -347,11 +343,12 @@ mulf_init: {
// >g(x) = >((( x - 255) * ( x - 255 ))/4) // >g(x) = >((( x - 255) * ( x - 255 ))/4)
.align $100 .align $100
mulf_sqr2_hi: .fill $200, 0 mulf_sqr2_hi: .fill $200, 0
// Positions to rotate // Sine and Cosine tables
xs: .byte -$46, -$46, -$46, 0, 0, $46, $46, $46 // Angles: $00=0, $80=PI,$100=2*PI
ys: .byte -$46, 0, $46, -$46, $46, -$46, 0, $46 // Sine/Cosine: signed fixed [-$7f,$7f]
.pc = COS "COS" .align $40
{ COS:
{
.var min = -$7fff .var min = -$7fff
.var max = $7fff .var max = $7fff
.var ampl = max-min; .var ampl = max-min;
@ -361,6 +358,9 @@ mulf_init: {
} }
} }
// Positions to rotate
xs: .byte -$46, -$46, -$46, 0, 0, $46, $46, $46
ys: .byte -$46, 0, $46, -$46, $46, -$46, 0, $46
.pc = SPRITE "SPRITE" .pc = SPRITE "SPRITE"
.var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++) .for (var y=0; y<21; y++)

View File

@ -2,233 +2,221 @@
[0] phi() [0] phi()
to:@1 to:@1
@1: scope:[] from @begin @1: scope:[] from @begin
kickasm(location (const byte*) COS#0) {{ {
.var min = -$7fff
.var max = $7fff
.var ampl = max-min;
.for(var i=0;i<$140;i++) {
.var rad = i*2*PI/256;
.byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
}
}
}}
to:@2
@2: scope:[] from @1
kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++) .for (var y=0; y<21; y++)
.for (var x=0;x<3; x++) .for (var x=0;x<3; x++)
.byte pic.getSinglecolorByte(x,y) .byte pic.getSinglecolorByte(x,y)
}} }}
[3] call main [2] call main
to:@end to:@end
@end: scope:[] from @2 @end: scope:[] from @1
[4] phi() [3] phi()
main: scope:[main] from @2 main: scope:[main] from @1
asm { sei } asm { sei }
[6] call init [5] call init
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1: scope:[main] from main
[7] phi() [6] phi()
[8] call anim [7] call anim
to:main::@return to:main::@return
main::@return: scope:[main] from main::@1 main::@return: scope:[main] from main::@1
[9] return [8] return
to:@return to:@return
anim: scope:[anim] from main::@1 anim: scope:[anim] from main::@1
[10] phi() [9] phi()
to:anim::@1 to:anim::@1
anim::@1: scope:[anim] from anim anim::@7 anim::@1: scope:[anim] from anim anim::@7
[11] (byte) anim::angle#6 ← phi( anim/(byte) 0 anim::@7/(byte) anim::angle#1 ) [10] (byte) anim::angle#6 ← phi( anim/(byte) 0 anim::@7/(byte) anim::angle#1 )
to:anim::@2 to:anim::@2
anim::@2: scope:[anim] from anim::@1 anim::@2 anim::@2: scope:[anim] from anim::@1 anim::@2
[12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto anim::@2 [11] if(*((const byte*) RASTER#0)!=(byte) $ff) goto anim::@2
to:anim::@3 to:anim::@3
anim::@3: scope:[anim] from anim::@2 anim::@3: scope:[anim] from anim::@2
[13] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [12] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
to:anim::@4 to:anim::@4
anim::@4: scope:[anim] from anim::@3 anim::@5 anim::@4: scope:[anim] from anim::@3 anim::@5
[14] (byte) anim::sprite_msb#10 ← phi( anim::@5/(byte) anim::sprite_msb#5 anim::@3/(byte) 0 ) [13] (byte) anim::sprite_msb#10 ← phi( anim::@5/(byte) anim::sprite_msb#5 anim::@3/(byte) 0 )
[14] (byte) anim::i#10 ← phi( anim::@5/(byte) anim::i#1 anim::@3/(byte) 0 ) [13] (byte) anim::i#10 ← phi( anim::@5/(byte) anim::i#1 anim::@3/(byte) 0 )
[15] (signed byte) anim::x#0 ← *((const signed byte[8]) xs#0 + (byte) anim::i#10) [14] (signed byte) anim::x#0 ← *((const signed byte[8]) xs#0 + (byte) anim::i#10)
[16] (signed byte) anim::y#0 ← *((const signed byte[8]) ys#0 + (byte) anim::i#10) [15] (signed byte) anim::y#0 ← *((const signed byte[8]) ys#0 + (byte) anim::i#10)
to:anim::mulf8s_prepare1 to:anim::mulf8s_prepare1
anim::mulf8s_prepare1: scope:[anim] from anim::@4 anim::mulf8s_prepare1: scope:[anim] from anim::@4
[17] (byte~) mulf8u_prepare::a#3 ← (byte)(signed byte)*((const byte*) COS#0 + (byte) anim::angle#6) [16] (byte~) mulf8u_prepare::a#3 ← (byte)(signed byte)*((const byte[$140]) COS#0 + (byte) anim::angle#6)
[18] call mulf8u_prepare [17] call mulf8u_prepare
to:anim::@8 to:anim::@8
anim::@8: scope:[anim] from anim::mulf8s_prepare1 anim::@8: scope:[anim] from anim::mulf8s_prepare1
[19] (signed byte) mulf8s_prepared::b#0 ← (signed byte) anim::x#0 [18] (signed byte) mulf8s_prepared::b#0 ← (signed byte) anim::x#0
[20] call mulf8s_prepared [19] call mulf8s_prepared
to:anim::@10 to:anim::@10
anim::@10: scope:[anim] from anim::@8 anim::@10: scope:[anim] from anim::@8
[21] (signed word~) anim::$4 ← (signed word)(word) mulf8s_prepared::m#4 [20] (signed word~) anim::$4 ← (signed word)(word) mulf8s_prepared::m#4
[22] (signed word) anim::xr#0 ← (signed word~) anim::$4 << (byte) 1 [21] (signed word) anim::xr#0 ← (signed word~) anim::$4 << (byte) 1
[23] (signed byte) mulf8s_prepared::b#1 ← (signed byte) anim::y#0 [22] (signed byte) mulf8s_prepared::b#1 ← (signed byte) anim::y#0
[24] call mulf8s_prepared [23] call mulf8s_prepared
to:anim::@11 to:anim::@11
anim::@11: scope:[anim] from anim::@10 anim::@11: scope:[anim] from anim::@10
[25] (signed word~) anim::$6 ← (signed word)(word) mulf8s_prepared::m#4 [24] (signed word~) anim::$6 ← (signed word)(word) mulf8s_prepared::m#4
[26] (signed word) anim::yr#0 ← (signed word~) anim::$6 << (byte) 1 [25] (signed word) anim::yr#0 ← (signed word~) anim::$6 << (byte) 1
to:anim::mulf8s_prepare2 to:anim::mulf8s_prepare2
anim::mulf8s_prepare2: scope:[anim] from anim::@11 anim::mulf8s_prepare2: scope:[anim] from anim::@11
[27] (byte~) mulf8u_prepare::a#4 ← (byte)(signed byte)*((const byte*) SIN#0 + (byte) anim::angle#6) [26] (byte~) mulf8u_prepare::a#4 ← (byte)(signed byte)*((const byte*) SIN#0 + (byte) anim::angle#6)
[28] call mulf8u_prepare [27] call mulf8u_prepare
to:anim::@9 to:anim::@9
anim::@9: scope:[anim] from anim::mulf8s_prepare2 anim::@9: scope:[anim] from anim::mulf8s_prepare2
[29] (signed byte) mulf8s_prepared::b#2 ← (signed byte) anim::y#0 [28] (signed byte) mulf8s_prepared::b#2 ← (signed byte) anim::y#0
[30] call mulf8s_prepared [29] call mulf8s_prepared
to:anim::@12 to:anim::@12
anim::@12: scope:[anim] from anim::@9 anim::@12: scope:[anim] from anim::@9
[31] (signed word~) anim::$9 ← (signed word)(word) mulf8s_prepared::m#4 [30] (signed word~) anim::$9 ← (signed word)(word) mulf8s_prepared::m#4
[32] (signed word~) anim::$10 ← (signed word~) anim::$9 << (byte) 1 [31] (signed word~) anim::$10 ← (signed word~) anim::$9 << (byte) 1
[33] (signed word) anim::xr#1 ← (signed word) anim::xr#0 - (signed word~) anim::$10 [32] (signed word) anim::xr#1 ← (signed word) anim::xr#0 - (signed word~) anim::$10
[34] (signed byte) mulf8s_prepared::b#3 ← (signed byte) anim::x#0 [33] (signed byte) mulf8s_prepared::b#3 ← (signed byte) anim::x#0
[35] call mulf8s_prepared [34] call mulf8s_prepared
to:anim::@13 to:anim::@13
anim::@13: scope:[anim] from anim::@12 anim::@13: scope:[anim] from anim::@12
[36] (signed word~) anim::$11 ← (signed word)(word) mulf8s_prepared::m#4 [35] (signed word~) anim::$11 ← (signed word)(word) mulf8s_prepared::m#4
[37] (signed word~) anim::$12 ← (signed word~) anim::$11 << (byte) 1 [36] (signed word~) anim::$12 ← (signed word~) anim::$11 << (byte) 1
[38] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12 [37] (signed word) anim::yr#1 ← (signed word) anim::yr#0 + (signed word~) anim::$12
[39] (byte~) anim::$15 ← > (signed word) anim::xr#1 [38] (byte~) anim::$15 ← > (signed word) anim::xr#1
[40] (signed word) anim::xpos#0 ← (signed byte)(byte~) anim::$15 + (signed byte) $18+(signed word) $95 [39] (signed word) anim::xpos#0 ← (signed byte)(byte~) anim::$15 + (signed byte) $18+(signed word) $95
[41] (byte) anim::sprite_msb#1 ← (byte) anim::sprite_msb#10 >> (byte) 1 [40] (byte) anim::sprite_msb#1 ← (byte) anim::sprite_msb#10 >> (byte) 1
[42] (byte~) anim::$18 ← > (signed word) anim::xpos#0 [41] (byte~) anim::$18 ← > (signed word) anim::xpos#0
[43] if((byte~) anim::$18==(byte) 0) goto anim::@5 [42] if((byte~) anim::$18==(byte) 0) goto anim::@5
to:anim::@6 to:anim::@6
anim::@6: scope:[anim] from anim::@13 anim::@6: scope:[anim] from anim::@13
[44] (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#1 | (byte) $80 [43] (byte) anim::sprite_msb#2 ← (byte) anim::sprite_msb#1 | (byte) $80
to:anim::@5 to:anim::@5
anim::@5: scope:[anim] from anim::@13 anim::@6 anim::@5: scope:[anim] from anim::@13 anim::@6
[45] (byte) anim::sprite_msb#5 ← phi( anim::@6/(byte) anim::sprite_msb#2 anim::@13/(byte) anim::sprite_msb#1 ) [44] (byte) anim::sprite_msb#5 ← phi( anim::@6/(byte) anim::sprite_msb#2 anim::@13/(byte) anim::sprite_msb#1 )
[46] (byte~) anim::$22 ← > (signed word) anim::yr#1 [45] (byte~) anim::$22 ← > (signed word) anim::yr#1
[47] (byte) anim::ypos#0 ← (byte~) anim::$22 + (byte) $59+(byte) $33 [46] (byte) anim::ypos#0 ← (byte~) anim::$22 + (byte) $59+(byte) $33
[48] (byte) anim::i2#0 ← (byte) anim::i#10 << (byte) 1 [47] (byte) anim::i2#0 ← (byte) anim::i#10 << (byte) 1
[49] (byte~) anim::$25 ← < (signed word) anim::xpos#0 [48] (byte~) anim::$25 ← < (signed word) anim::xpos#0
[50] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$25 [49] *((const byte*) SPRITES_XPOS#0 + (byte) anim::i2#0) ← (byte~) anim::$25
[51] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0 [50] *((const byte*) SPRITES_YPOS#0 + (byte) anim::i2#0) ← (byte) anim::ypos#0
[52] (byte) anim::i#1 ← ++ (byte) anim::i#10 [51] (byte) anim::i#1 ← ++ (byte) anim::i#10
[53] if((byte) anim::i#1!=(byte) 8) goto anim::@4 [52] if((byte) anim::i#1!=(byte) 8) goto anim::@4
to:anim::@7 to:anim::@7
anim::@7: scope:[anim] from anim::@5 anim::@7: scope:[anim] from anim::@5
[54] *((const byte*) SPRITES_XMSB#0) ← (byte) anim::sprite_msb#5 [53] *((const byte*) SPRITES_XMSB#0) ← (byte) anim::sprite_msb#5
[55] (byte) anim::angle#1 ← ++ (byte) anim::angle#6 [54] (byte) anim::angle#1 ← ++ (byte) anim::angle#6
[56] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0 [55] *((const byte*) BORDERCOL#0) ← (const byte) LIGHT_BLUE#0
to:anim::@1 to:anim::@1
mulf8s_prepared: scope:[mulf8s_prepared] from anim::@10 anim::@12 anim::@8 anim::@9 mulf8s_prepared: scope:[mulf8s_prepared] from anim::@10 anim::@12 anim::@8 anim::@9
[57] (signed byte) mulf8s_prepared::b#4 ← phi( anim::@8/(signed byte) mulf8s_prepared::b#0 anim::@9/(signed byte) mulf8s_prepared::b#2 anim::@10/(signed byte) mulf8s_prepared::b#1 anim::@12/(signed byte) mulf8s_prepared::b#3 ) [56] (signed byte) mulf8s_prepared::b#4 ← phi( anim::@8/(signed byte) mulf8s_prepared::b#0 anim::@9/(signed byte) mulf8s_prepared::b#2 anim::@10/(signed byte) mulf8s_prepared::b#1 anim::@12/(signed byte) mulf8s_prepared::b#3 )
[58] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#4 [57] (byte) mulf8u_prepared::b#0 ← (byte)(signed byte) mulf8s_prepared::b#4
[59] call mulf8u_prepared [58] call mulf8u_prepared
[60] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0 [59] (word) mulf8u_prepared::return#2 ← (word) mulf8u_prepared::return#0
to:mulf8s_prepared::@5 to:mulf8s_prepared::@5
mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared mulf8s_prepared::@5: scope:[mulf8s_prepared] from mulf8s_prepared
[61] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2 [60] (word) mulf8s_prepared::m#0 ← (word) mulf8u_prepared::return#2
[62] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(signed byte) 0) goto mulf8s_prepared::@1 [61] if(*((const signed byte*) mulf8s_prepared::memA#0)>=(signed byte) 0) goto mulf8s_prepared::@1
to:mulf8s_prepared::@3 to:mulf8s_prepared::@3
mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5 mulf8s_prepared::@3: scope:[mulf8s_prepared] from mulf8s_prepared::@5
[63] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0 [62] (byte~) mulf8s_prepared::$8 ← > (word) mulf8s_prepared::m#0
[64] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#4 [63] (byte~) mulf8s_prepared::$15 ← (byte~) mulf8s_prepared::$8 - (byte)(signed byte) mulf8s_prepared::b#4
[65] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15 [64] (word) mulf8s_prepared::m#1 ← (word) mulf8s_prepared::m#0 hi= (byte~) mulf8s_prepared::$15
to:mulf8s_prepared::@1 to:mulf8s_prepared::@1
mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5 mulf8s_prepared::@1: scope:[mulf8s_prepared] from mulf8s_prepared::@3 mulf8s_prepared::@5
[66] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 ) [65] (word) mulf8s_prepared::m#5 ← phi( mulf8s_prepared::@3/(word) mulf8s_prepared::m#1 mulf8s_prepared::@5/(word) mulf8s_prepared::m#0 )
[67] if((signed byte) mulf8s_prepared::b#4>=(signed byte) 0) goto mulf8s_prepared::@2 [66] if((signed byte) mulf8s_prepared::b#4>=(signed byte) 0) goto mulf8s_prepared::@2
to:mulf8s_prepared::@4 to:mulf8s_prepared::@4
mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4: scope:[mulf8s_prepared] from mulf8s_prepared::@1
[68] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5 [67] (byte~) mulf8s_prepared::$12 ← > (word) mulf8s_prepared::m#5
[69] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA#0) [68] (byte~) mulf8s_prepared::$16 ← (byte~) mulf8s_prepared::$12 - (byte)*((const signed byte*) mulf8s_prepared::memA#0)
[70] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16 [69] (word) mulf8s_prepared::m#2 ← (word) mulf8s_prepared::m#5 hi= (byte~) mulf8s_prepared::$16
to:mulf8s_prepared::@2 to:mulf8s_prepared::@2
mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4 mulf8s_prepared::@2: scope:[mulf8s_prepared] from mulf8s_prepared::@1 mulf8s_prepared::@4
[71] (word) mulf8s_prepared::m#4 ← phi( mulf8s_prepared::@1/(word) mulf8s_prepared::m#5 mulf8s_prepared::@4/(word) mulf8s_prepared::m#2 ) [70] (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 to:mulf8s_prepared::@return
mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2 mulf8s_prepared::@return: scope:[mulf8s_prepared] from mulf8s_prepared::@2
[72] return [71] return
to:@return to:@return
mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared mulf8u_prepared: scope:[mulf8u_prepared] from mulf8s_prepared
[73] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#0 [72] *((const byte*) mulf8u_prepared::memB#0) ← (byte) mulf8u_prepared::b#0
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 } 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 }
[75] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0) [74] (word) mulf8u_prepared::return#0 ← *((const byte*) mulf8u_prepared::memB#0) w= *((const byte*) mulf8u_prepared::resL#0)
to:mulf8u_prepared::@return to:mulf8u_prepared::@return
mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared mulf8u_prepared::@return: scope:[mulf8u_prepared] from mulf8u_prepared
[76] return [75] return
to:@return to:@return
mulf8u_prepare: scope:[mulf8u_prepare] from anim::mulf8s_prepare1 anim::mulf8s_prepare2 mulf8u_prepare: scope:[mulf8u_prepare] from anim::mulf8s_prepare1 anim::mulf8s_prepare2
[77] (byte) mulf8u_prepare::a#2 ← phi( anim::mulf8s_prepare1/(byte~) mulf8u_prepare::a#3 anim::mulf8s_prepare2/(byte~) mulf8u_prepare::a#4 ) [76] (byte) mulf8u_prepare::a#2 ← phi( anim::mulf8s_prepare1/(byte~) mulf8u_prepare::a#3 anim::mulf8s_prepare2/(byte~) mulf8u_prepare::a#4 )
[78] *((const byte*) mulf8u_prepare::memA#0) ← (byte) mulf8u_prepare::a#2 [77] *((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 } asm { ldamemA stamulf8u_prepared.sm1+1 stamulf8u_prepared.sm3+1 eor#$ff stamulf8u_prepared.sm2+1 stamulf8u_prepared.sm4+1 }
to:mulf8u_prepare::@return to:mulf8u_prepare::@return
mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare mulf8u_prepare::@return: scope:[mulf8u_prepare] from mulf8u_prepare
[80] return [79] return
to:@return to:@return
init: scope:[init] from main init: scope:[init] from main
[81] phi() [80] phi()
[82] call mulf_init [81] call mulf_init
to:init::@2 to:init::@2
init::@2: scope:[init] from init init::@2: scope:[init] from init
[83] *((const byte*) SPRITES_ENABLE#0) ← (byte) $ff [82] *((const byte*) SPRITES_ENABLE#0) ← (byte) $ff
to:init::@1 to:init::@1
init::@1: scope:[init] from init::@1 init::@2 init::@1: scope:[init] from init::@1 init::@2
[84] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@2/(byte) 0 ) [83] (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@2/(byte) 0 )
[85] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← (byte)(const byte*) SPRITE#0/(byte) $40 [84] *((const byte*) init::sprites_ptr#0 + (byte) init::i#2) ← (byte)(const byte*) SPRITE#0/(byte) $40
[86] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0 [85] *((const byte*) SPRITES_COLS#0 + (byte) init::i#2) ← (const byte) GREEN#0
[87] (byte) init::i#1 ← ++ (byte) init::i#2 [86] (byte) init::i#1 ← ++ (byte) init::i#2
[88] if((byte) init::i#1!=(byte) 8) goto init::@1 [87] if((byte) init::i#1!=(byte) 8) goto init::@1
to:init::@return to:init::@return
init::@return: scope:[init] from init::@1 init::@return: scope:[init] from init::@1
[89] return [88] return
to:@return to:@return
mulf_init: scope:[mulf_init] from init mulf_init: scope:[mulf_init] from init
[90] phi() [89] phi()
to:mulf_init::@1 to:mulf_init::@1
mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@2 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@2
[91] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@2/(byte) mulf_init::x_2#2 ) [90] (byte) mulf_init::x_2#3 ← phi( mulf_init/(byte) 0 mulf_init::@2/(byte) mulf_init::x_2#2 )
[91] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_hi#0+(byte) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 ) [90] (byte*) mulf_init::sqr1_hi#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_hi#0+(byte) 1 mulf_init::@2/(byte*) mulf_init::sqr1_hi#1 )
[91] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_lo#0+(byte) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 ) [90] (byte*) mulf_init::sqr1_lo#2 ← phi( mulf_init/(const byte[$200]) mulf_sqr1_lo#0+(byte) 1 mulf_init::@2/(byte*) mulf_init::sqr1_lo#1 )
[91] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@2/(word) mulf_init::sqr#1 ) [90] (word) mulf_init::sqr#4 ← phi( mulf_init/(byte) 0 mulf_init::@2/(word) mulf_init::sqr#1 )
[91] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@2/(byte) mulf_init::c#1 ) [90] (byte) mulf_init::c#2 ← phi( mulf_init/(byte) 0 mulf_init::@2/(byte) mulf_init::c#1 )
[92] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2 [91] (byte) mulf_init::c#1 ← ++ (byte) mulf_init::c#2
[93] (byte~) mulf_init::$7 ← (byte) mulf_init::c#1 & (byte) 1 [92] (byte~) mulf_init::$7 ← (byte) mulf_init::c#1 & (byte) 1
[94] if((byte~) mulf_init::$7!=(byte) 0) goto mulf_init::@2 [93] if((byte~) mulf_init::$7!=(byte) 0) goto mulf_init::@2
to:mulf_init::@3 to:mulf_init::@3
mulf_init::@3: scope:[mulf_init] from mulf_init::@1 mulf_init::@3: scope:[mulf_init] from mulf_init::@1
[95] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3 [94] (byte) mulf_init::x_2#1 ← ++ (byte) mulf_init::x_2#3
[96] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4 [95] (word) mulf_init::sqr#2 ← ++ (word) mulf_init::sqr#4
to:mulf_init::@2 to:mulf_init::@2
mulf_init::@2: scope:[mulf_init] from mulf_init::@1 mulf_init::@3 mulf_init::@2: scope:[mulf_init] from mulf_init::@1 mulf_init::@3
[97] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@3/(byte) mulf_init::x_2#1 ) [96] (byte) mulf_init::x_2#2 ← phi( mulf_init::@1/(byte) mulf_init::x_2#3 mulf_init::@3/(byte) mulf_init::x_2#1 )
[97] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@3/(word) mulf_init::sqr#2 ) [96] (word) mulf_init::sqr#3 ← phi( mulf_init::@1/(word) mulf_init::sqr#4 mulf_init::@3/(word) mulf_init::sqr#2 )
[98] (byte~) mulf_init::$10 ← < (word) mulf_init::sqr#3 [97] (byte~) mulf_init::$10 ← < (word) mulf_init::sqr#3
[99] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$10 [98] *((byte*) mulf_init::sqr1_lo#2) ← (byte~) mulf_init::$10
[100] (byte~) mulf_init::$11 ← > (word) mulf_init::sqr#3 [99] (byte~) mulf_init::$11 ← > (word) mulf_init::sqr#3
[101] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$11 [100] *((byte*) mulf_init::sqr1_hi#2) ← (byte~) mulf_init::$11
[102] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2 [101] (byte*) mulf_init::sqr1_hi#1 ← ++ (byte*) mulf_init::sqr1_hi#2
[103] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2 [102] (word) mulf_init::sqr#1 ← (word) mulf_init::sqr#3 + (byte) mulf_init::x_2#2
[104] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2 [103] (byte*) mulf_init::sqr1_lo#1 ← ++ (byte*) mulf_init::sqr1_lo#2
[105] if((byte*) mulf_init::sqr1_lo#1!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@1 [104] if((byte*) mulf_init::sqr1_lo#1!=(const byte[$200]) mulf_sqr1_lo#0+(word) $200) goto mulf_init::@1
to:mulf_init::@4 to:mulf_init::@4
mulf_init::@4: scope:[mulf_init] from mulf_init::@2 mulf_init::@5 mulf_init::@4: scope:[mulf_init] from mulf_init::@2 mulf_init::@5
[106] (byte) mulf_init::dir#2 ← phi( mulf_init::@2/(byte) $ff mulf_init::@5/(byte) mulf_init::dir#3 ) [105] (byte) mulf_init::dir#2 ← phi( mulf_init::@2/(byte) $ff mulf_init::@5/(byte) mulf_init::dir#3 )
[106] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@2/(const byte[$200]) mulf_sqr2_hi#0 mulf_init::@5/(byte*) mulf_init::sqr2_hi#1 ) [105] (byte*) mulf_init::sqr2_hi#2 ← phi( mulf_init::@2/(const byte[$200]) mulf_sqr2_hi#0 mulf_init::@5/(byte*) mulf_init::sqr2_hi#1 )
[106] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@2/(const byte[$200]) mulf_sqr2_lo#0 mulf_init::@5/(byte*) mulf_init::sqr2_lo#1 ) [105] (byte*) mulf_init::sqr2_lo#2 ← phi( mulf_init::@2/(const byte[$200]) mulf_sqr2_lo#0 mulf_init::@5/(byte*) mulf_init::sqr2_lo#1 )
[106] (byte) mulf_init::x_255#2 ← phi( mulf_init::@2/(byte) -1 mulf_init::@5/(byte) mulf_init::x_255#1 ) [105] (byte) mulf_init::x_255#2 ← phi( mulf_init::@2/(byte) -1 mulf_init::@5/(byte) mulf_init::x_255#1 )
[107] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2) [106] *((byte*) mulf_init::sqr2_lo#2) ← *((const byte[$200]) mulf_sqr1_lo#0 + (byte) mulf_init::x_255#2)
[108] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2) [107] *((byte*) mulf_init::sqr2_hi#2) ← *((const byte[$200]) mulf_sqr1_hi#0 + (byte) mulf_init::x_255#2)
[109] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2 [108] (byte*) mulf_init::sqr2_hi#1 ← ++ (byte*) mulf_init::sqr2_hi#2
[110] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2 [109] (byte) mulf_init::x_255#1 ← (byte) mulf_init::x_255#2 + (byte) mulf_init::dir#2
[111] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@7 [110] if((byte) mulf_init::x_255#1!=(byte) 0) goto mulf_init::@7
to:mulf_init::@5 to:mulf_init::@5
mulf_init::@7: scope:[mulf_init] from mulf_init::@4 mulf_init::@7: scope:[mulf_init] from mulf_init::@4
[112] phi() [111] phi()
to:mulf_init::@5 to:mulf_init::@5
mulf_init::@5: scope:[mulf_init] from mulf_init::@4 mulf_init::@7 mulf_init::@5: scope:[mulf_init] from mulf_init::@4 mulf_init::@7
[113] (byte) mulf_init::dir#3 ← phi( mulf_init::@7/(byte) mulf_init::dir#2 mulf_init::@4/(byte) 1 ) [112] (byte) mulf_init::dir#3 ← phi( mulf_init::@7/(byte) mulf_init::dir#2 mulf_init::@4/(byte) 1 )
[114] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2 [113] (byte*) mulf_init::sqr2_lo#1 ← ++ (byte*) mulf_init::sqr2_lo#2
[115] if((byte*) mulf_init::sqr2_lo#1!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@4 [114] if((byte*) mulf_init::sqr2_lo#1!=(const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) goto mulf_init::@4
to:mulf_init::@6 to:mulf_init::@6
mulf_init::@6: scope:[mulf_init] from mulf_init::@5 mulf_init::@6: scope:[mulf_init] from mulf_init::@5
[116] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100) [115] *((const byte[$200]) mulf_sqr2_lo#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_lo#0+(word) $100)
[117] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100) [116] *((const byte[$200]) mulf_sqr2_hi#0+(word) $1ff) ← *((const byte[$200]) mulf_sqr1_hi#0+(word) $100)
to:mulf_init::@return to:mulf_init::@return
mulf_init::@return: scope:[mulf_init] from mulf_init::@6 mulf_init::@return: scope:[mulf_init] from mulf_init::@6
[118] return [117] return
to:@return to:@return

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,19 @@
(label) @1 (label) @1
(label) @2
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) BORDERCOL (byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280 (const byte*) BORDERCOL#0 BORDERCOL = (byte*) 53280
(byte*) COS (byte[$140]) COS
(const byte*) COS#0 COS = (byte*) 8192 (const byte[$140]) COS#0 COS = kickasm {{ {
.var min = -$7fff
.var max = $7fff
.var ampl = max-min;
.for(var i=0;i<$140;i++) {
.var rad = i*2*PI/256;
.byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
}
}
}}
(byte) GREEN (byte) GREEN
(const byte) GREEN#0 GREEN = (byte) 5 (const byte) GREEN#0 GREEN = (byte) 5
(byte) LIGHT_BLUE (byte) LIGHT_BLUE
@ -15,7 +23,7 @@
(byte*) SCREEN (byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*) 1024 (const byte*) SCREEN#0 SCREEN = (byte*) 1024
(byte*) SIN (byte*) SIN
(const byte*) SIN#0 SIN = (const byte*) COS#0+(byte) $40 (const byte*) SIN#0 SIN = (const byte[$140]) COS#0+(byte) $40
(byte*) SPRITE (byte*) SPRITE
(const byte*) SPRITE#0 SPRITE = (byte*) 12288 (const byte*) SPRITE#0 SPRITE = (byte*) 12288
(byte*) SPRITES_COLS (byte*) SPRITES_COLS

View File

@ -33,7 +33,6 @@
// The address of the sprite pointers on the current screen (screen+$3f8). // The address of the sprite pointers on the current screen (screen+$3f8).
.label PLEX_SCREEN_PTR = $400+$3f8 .label PLEX_SCREEN_PTR = $400+$3f8
.label SPRITE = $2000 .label SPRITE = $2000
.label YSIN = $2100
.label plex_show_idx = 7 .label plex_show_idx = 7
.label plex_sprite_idx = 6 .label plex_sprite_idx = 6
.label plex_sprite_msb = 9 .label plex_sprite_msb = 9
@ -321,6 +320,14 @@ plexShowSprite: {
} }
// Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again. // Contains the Y-position where each sprite is free again. PLEX_FREE_YPOS[s] holds the Y-position where sprite s is free to use again.
PLEX_FREE_YPOS: .fill 8, 0 PLEX_FREE_YPOS: .fill 8, 0
.align $100
YSIN:
.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)))
// The x-positions of the multiplexer sprites ($000-$1ff) // The x-positions of the multiplexer sprites ($000-$1ff)
PLEX_XPOS: .fill 2*PLEX_COUNT, 0 PLEX_XPOS: .fill 2*PLEX_COUNT, 0
// The y-positions of the multiplexer sprites. // The y-positions of the multiplexer sprites.
@ -329,13 +336,6 @@ plexShowSprite: {
PLEX_PTR: .fill PLEX_COUNT, 0 PLEX_PTR: .fill PLEX_COUNT, 0
// Indexes of the plex-sprites sorted by sprite y-position. Each call to plexSort() will fix the sorting if changes to the Y-positions have ruined it. // Indexes of the plex-sprites sorted by sprite y-position. Each call to plexSort() will fix the sorting if changes to the Y-positions have ruined it.
PLEX_SORTED_IDX: .fill PLEX_COUNT, 0 PLEX_SORTED_IDX: .fill PLEX_COUNT, 0
.pc = YSIN "YSIN"
.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)))
.pc = SPRITE "SPRITE" .pc = SPRITE "SPRITE"
.var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++) .for (var y=0; y<21; y++)

View File

@ -10,12 +10,6 @@
[4] (byte) plex_free_next#31 ← (byte) 0 [4] (byte) plex_free_next#31 ← (byte) 0
to:@3 to:@3
@3: scope:[] from @2 @3: scope:[] from @2
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)))
}}
kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff)) kickasm(location (const byte*) SPRITE#0) {{ .var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
.for (var y=0; y<21; y++) .for (var y=0; y<21; y++)
.for (var x=0;x<3; x++) .for (var x=0;x<3; x++)
@ -23,235 +17,235 @@
}} }}
to:@4 to:@4
@4: scope:[] from @3 @4: scope:[] from @3
[7] (bool) framedone#17 ← true [6] (bool) framedone#17 ← true
to:@5 to:@5
@5: scope:[] from @4 @5: scope:[] from @4
[8] phi() [7] phi()
[9] call main [8] call main
to:@end to:@end
@end: scope:[] from @5 @end: scope:[] from @5
[10] phi() [9] phi()
main: scope:[main] from @5 main: scope:[main] from @5
asm { sei } asm { sei }
[12] call init [11] call init
to:main::@1 to:main::@1
main::@1: scope:[main] from main main::@1: scope:[main] from main
[13] phi() [12] phi()
[14] call loop [13] call loop
to:main::@return to:main::@return
main::@return: scope:[main] from main::@1 main::@return: scope:[main] from main::@1
[15] return [14] return
to:@return to:@return
loop: scope:[loop] from main::@1 loop: scope:[loop] from main::@1
[16] phi() [15] phi()
to:loop::@1 to:loop::@1
loop::@1: scope:[loop] from loop loop::@6 loop::@1: scope:[loop] from loop loop::@6
[17] (byte) loop::sin_idx#6 ← phi( loop/(byte) 0 loop::@6/(byte) loop::sin_idx#1 ) [16] (byte) loop::sin_idx#6 ← phi( loop/(byte) 0 loop::@6/(byte) loop::sin_idx#1 )
[17] (byte) plex_free_next#10 ← phi( loop/(byte) plex_free_next#31 loop::@6/(byte) plex_free_next#0 ) [16] (byte) plex_free_next#10 ← phi( loop/(byte) plex_free_next#31 loop::@6/(byte) plex_free_next#0 )
[17] (byte) plex_sprite_msb#11 ← phi( loop/(byte) plex_sprite_msb#0 loop::@6/(byte) plex_sprite_msb#1 ) [16] (byte) plex_sprite_msb#11 ← phi( loop/(byte) plex_sprite_msb#0 loop::@6/(byte) plex_sprite_msb#1 )
[17] (byte) plex_sprite_idx#10 ← phi( loop/(byte) plex_sprite_idx#0 loop::@6/(byte) plex_sprite_idx#1 ) [16] (byte) plex_sprite_idx#10 ← phi( loop/(byte) plex_sprite_idx#0 loop::@6/(byte) plex_sprite_idx#1 )
[17] (byte) plex_show_idx#10 ← phi( loop/(byte) plex_show_idx#0 loop::@6/(byte) plex_show_idx#1 ) [16] (byte) plex_show_idx#10 ← phi( loop/(byte) plex_show_idx#0 loop::@6/(byte) plex_show_idx#1 )
[17] (bool) framedone#12 ← phi( loop/(bool) framedone#17 loop::@6/(bool) framedone#5 ) [16] (bool) framedone#12 ← phi( loop/(bool) framedone#17 loop::@6/(bool) framedone#5 )
to:loop::@2 to:loop::@2
loop::@2: scope:[loop] from loop::@1 loop::@2 loop::@2: scope:[loop] from loop::@1 loop::@2
[18] if((bool) framedone#12) goto loop::@3 [17] if((bool) framedone#12) goto loop::@3
to:loop::@2 to:loop::@2
loop::@3: scope:[loop] from loop::@2 loop::@3: scope:[loop] from loop::@2
[19] *((const byte*) BORDERCOL#0) ← (const byte) RED#0 [18] *((const byte*) BORDERCOL#0) ← (const byte) RED#0
[20] (byte~) loop::y_idx#4 ← (byte) loop::sin_idx#6 [19] (byte~) loop::y_idx#4 ← (byte) loop::sin_idx#6
to:loop::@4 to:loop::@4
loop::@4: scope:[loop] from loop::@3 loop::@4 loop::@4: scope:[loop] from loop::@3 loop::@4
[21] (byte) loop::sy#2 ← phi( loop::@4/(byte) loop::sy#1 loop::@3/(byte) 0 ) [20] (byte) loop::sy#2 ← phi( loop::@4/(byte) loop::sy#1 loop::@3/(byte) 0 )
[21] (byte) loop::y_idx#2 ← phi( loop::@4/(byte) loop::y_idx#1 loop::@3/(byte~) loop::y_idx#4 ) [20] (byte) loop::y_idx#2 ← phi( loop::@4/(byte) loop::y_idx#1 loop::@3/(byte~) loop::y_idx#4 )
[22] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte*) YSIN#0 + (byte) loop::y_idx#2) [21] *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) loop::sy#2) ← *((const byte[$100]) YSIN#0 + (byte) loop::y_idx#2)
[23] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte) 8 [22] (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (byte) 8
[24] (byte) loop::sy#1 ← ++ (byte) loop::sy#2 [23] (byte) loop::sy#1 ← ++ (byte) loop::sy#2
[25] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto loop::@4 [24] if((byte) loop::sy#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto loop::@4
to:loop::@5 to:loop::@5
loop::@5: scope:[loop] from loop::@4 loop::@5: scope:[loop] from loop::@4
[26] (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#6 + (byte) 1 [25] (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#6 + (byte) 1
[27] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0) [26] *((const byte*) BORDERCOL#0) ← ++ *((const byte*) BORDERCOL#0)
[28] call plexSort [27] call plexSort
to:loop::@6 to:loop::@6
loop::@6: scope:[loop] from loop::@5 loop::@6: scope:[loop] from loop::@5
[29] *((const byte*) BORDERCOL#0) ← (const byte) GREEN#0 [28] *((const byte*) BORDERCOL#0) ← (const byte) GREEN#0
[30] (bool) framedone#5 ← false [29] (bool) framedone#5 ← false
[31] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [30] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f
[32] *((const byte*) RASTER#0) ← (byte) 0 [31] *((const byte*) RASTER#0) ← (byte) 0
to:loop::@1 to:loop::@1
plexSort: scope:[plexSort] from loop::@5 plexSort: scope:[plexSort] from loop::@5
[33] phi() [32] phi()
to:plexSort::@1 to:plexSort::@1
plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 plexSort::@1: scope:[plexSort] from plexSort plexSort::@2
[34] (byte) plexSort::m#2 ← phi( plexSort/(byte) 0 plexSort::@2/(byte) plexSort::m#1 ) [33] (byte) plexSort::m#2 ← phi( plexSort/(byte) 0 plexSort::@2/(byte) plexSort::m#1 )
[35] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte) 1 + (byte) plexSort::m#2) [34] (byte) plexSort::nxt_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte) 1 + (byte) plexSort::m#2)
[36] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0) [35] (byte) plexSort::nxt_y#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + (byte) plexSort::nxt_idx#0)
[37] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 [36] if((byte) plexSort::nxt_y#0>=*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2
to:plexSort::@5 to:plexSort::@5
plexSort::@5: scope:[plexSort] from plexSort::@1 plexSort::@5: scope:[plexSort] from plexSort::@1
[38] (byte~) plexSort::s#6 ← (byte) plexSort::m#2 [37] (byte~) plexSort::s#6 ← (byte) plexSort::m#2
to:plexSort::@3 to:plexSort::@3
plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@7 plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@7
[39] (byte) plexSort::s#3 ← phi( plexSort::@7/(byte) plexSort::s#1 plexSort::@5/(byte~) plexSort::s#6 ) [38] (byte) plexSort::s#3 ← phi( plexSort::@7/(byte) plexSort::s#1 plexSort::@5/(byte~) plexSort::s#6 )
[40] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3) [39] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0+(byte) 1 + (byte) plexSort::s#3) ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#3)
[41] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3 [40] (byte) plexSort::s#1 ← -- (byte) plexSort::s#3
[42] if((byte) plexSort::s#1==(byte) $ff) goto plexSort::@4 [41] if((byte) plexSort::s#1==(byte) $ff) goto plexSort::@4
to:plexSort::@7 to:plexSort::@7
plexSort::@7: scope:[plexSort] from plexSort::@3 plexSort::@7: scope:[plexSort] from plexSort::@3
[43] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 [42] if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3
to:plexSort::@4 to:plexSort::@4
plexSort::@4: scope:[plexSort] from plexSort::@3 plexSort::@7 plexSort::@4: scope:[plexSort] from plexSort::@3 plexSort::@7
[44] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1 [43] (byte) plexSort::s#2 ← ++ (byte) plexSort::s#1
[45] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0 [44] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#2) ← (byte) plexSort::nxt_idx#0
to:plexSort::@2 to:plexSort::@2
plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@4 plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@4
[46] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2 [45] (byte) plexSort::m#1 ← ++ (byte) plexSort::m#2
[47] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte) 2+(byte) 1) goto plexSort::@1 [46] if((byte) plexSort::m#1!=(const byte) PLEX_COUNT#0-(byte) 2+(byte) 1) goto plexSort::@1
to:plexSort::@6 to:plexSort::@6
plexSort::@6: scope:[plexSort] from plexSort::@2 plexSort::@6: scope:[plexSort] from plexSort::@2
[48] (byte) plex_show_idx#1 ← (byte) 0 [47] (byte) plex_show_idx#1 ← (byte) 0
[49] (byte) plex_sprite_idx#1 ← (byte) 0 [48] (byte) plex_sprite_idx#1 ← (byte) 0
[50] (byte) plex_sprite_msb#1 ← (byte) 1 [49] (byte) plex_sprite_msb#1 ← (byte) 1
to:plexSort::plexFreePrepare1 to:plexSort::plexFreePrepare1
plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@6 plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@6
[51] phi() [50] phi()
to:plexSort::plexFreePrepare1_@1 to:plexSort::plexFreePrepare1_@1
plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1 plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1
[52] (byte) plexSort::plexFreePrepare1_s#2 ← phi( plexSort::plexFreePrepare1/(byte) 0 plexSort::plexFreePrepare1_@1/(byte) plexSort::plexFreePrepare1_s#1 ) [51] (byte) plexSort::plexFreePrepare1_s#2 ← phi( plexSort::plexFreePrepare1/(byte) 0 plexSort::plexFreePrepare1_@1/(byte) plexSort::plexFreePrepare1_s#1 )
[53] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0 [52] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plexSort::plexFreePrepare1_s#2) ← (byte) 0
[54] (byte) plexSort::plexFreePrepare1_s#1 ← ++ (byte) plexSort::plexFreePrepare1_s#2 [53] (byte) plexSort::plexFreePrepare1_s#1 ← ++ (byte) plexSort::plexFreePrepare1_s#2
[55] if((byte) plexSort::plexFreePrepare1_s#1!=(byte) 8) goto plexSort::plexFreePrepare1_@1 [54] if((byte) plexSort::plexFreePrepare1_s#1!=(byte) 8) goto plexSort::plexFreePrepare1_@1
to:plexSort::plexFreePrepare1_@2 to:plexSort::plexFreePrepare1_@2
plexSort::plexFreePrepare1_@2: scope:[plexSort] from plexSort::plexFreePrepare1_@1 plexSort::plexFreePrepare1_@2: scope:[plexSort] from plexSort::plexFreePrepare1_@1
[56] (byte) plex_free_next#0 ← (byte) 0 [55] (byte) plex_free_next#0 ← (byte) 0
to:plexSort::@return to:plexSort::@return
plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2 plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2
[57] return [56] return
to:@return to:@return
init: scope:[init] from main init: scope:[init] from main
[58] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3 [57] *((const byte*) D011#0) ← (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(byte) 3
[59] call plexInit [58] call plexInit
to:init::@1 to:init::@1
init::@1: scope:[init] from init init::@1 init::@1: scope:[init] from init init::@1
[60] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(byte) $20 ) [59] (word) init::xp#2 ← phi( init::@1/(word) init::xp#1 init/(byte) $20 )
[60] (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init/(byte) 0 ) [59] (byte) init::sx#2 ← phi( init::@1/(byte) init::sx#1 init/(byte) 0 )
[61] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← (byte)(const byte*) SPRITE#0/(byte) $40 [60] *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + (byte) init::sx#2) ← (byte)(const byte*) SPRITE#0/(byte) $40
[62] (byte~) init::$9 ← (byte) init::sx#2 << (byte) 1 [61] (byte~) init::$9 ← (byte) init::sx#2 << (byte) 1
[63] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$9) ← (word) init::xp#2 [62] *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) init::$9) ← (word) init::xp#2
[64] (word) init::xp#1 ← (word) init::xp#2 + (byte) 9 [63] (word) init::xp#1 ← (word) init::xp#2 + (byte) 9
[65] (byte) init::sx#1 ← ++ (byte) init::sx#2 [64] (byte) init::sx#1 ← ++ (byte) init::sx#2
[66] if((byte) init::sx#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto init::@1 [65] if((byte) init::sx#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto init::@1
to:init::@2 to:init::@2
init::@2: scope:[init] from init::@1 init::@2: scope:[init] from init::@1
[67] *((const byte*) SPRITES_ENABLE#0) ← (byte) $ff [66] *((const byte*) SPRITES_ENABLE#0) ← (byte) $ff
to:init::@3 to:init::@3
init::@3: scope:[init] from init::@2 init::@3 init::@3: scope:[init] from init::@2 init::@3
[68] (byte) init::ss#2 ← phi( init::@2/(byte) 0 init::@3/(byte) init::ss#1 ) [67] (byte) init::ss#2 ← phi( init::@2/(byte) 0 init::@3/(byte) init::ss#1 )
[69] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0 [68] *((const byte*) SPRITES_COLS#0 + (byte) init::ss#2) ← (const byte) GREEN#0
[70] (byte) init::ss#1 ← ++ (byte) init::ss#2 [69] (byte) init::ss#1 ← ++ (byte) init::ss#2
[71] if((byte) init::ss#1!=(byte) 8) goto init::@3 [70] if((byte) init::ss#1!=(byte) 8) goto init::@3
to:init::@4 to:init::@4
init::@4: scope:[init] from init::@3 init::@4: scope:[init] from init::@3
asm { sei } asm { sei }
[73] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [72] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
[74] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [73] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[75] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [74] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[76] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) plex_irq() [75] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) plex_irq()
asm { cli } asm { cli }
to:init::@return to:init::@return
init::@return: scope:[init] from init::@4 init::@return: scope:[init] from init::@4
[78] return [77] return
to:@return to:@return
plexInit: scope:[plexInit] from init plexInit: scope:[plexInit] from init
[79] phi() [78] phi()
to:plexInit::plexSetScreen1 to:plexInit::plexSetScreen1
plexInit::plexSetScreen1: scope:[plexInit] from plexInit plexInit::plexSetScreen1: scope:[plexInit] from plexInit
[80] phi() [79] phi()
to:plexInit::@1 to:plexInit::@1
plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1
[81] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 ) [80] (byte) plexInit::i#2 ← phi( plexInit::@1/(byte) plexInit::i#1 plexInit::plexSetScreen1/(byte) 0 )
[82] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2 [81] *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexInit::i#2) ← (byte) plexInit::i#2
[83] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2 [82] (byte) plexInit::i#1 ← ++ (byte) plexInit::i#2
[84] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto plexInit::@1 [83] if((byte) plexInit::i#1!=(const byte) PLEX_COUNT#0-(byte) 1+(byte) 1) goto plexInit::@1
to:plexInit::@return to:plexInit::@return
plexInit::@return: scope:[plexInit] from plexInit::@1 plexInit::@return: scope:[plexInit] from plexInit::@1
[85] return [84] return
to:@return to:@return
plex_irq: scope:[plex_irq] from plex_irq: scope:[plex_irq] from
[86] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0 [85] *((const byte*) BORDERCOL#0) ← (const byte) WHITE#0
to:plex_irq::@3 to:plex_irq::@3
plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7 plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7
[87] (byte) plex_sprite_msb#28 ← phi( plex_irq/(byte) plex_sprite_msb#0 plex_irq::@7/(byte) plex_sprite_msb#17 ) [86] (byte) plex_sprite_msb#28 ← phi( plex_irq/(byte) plex_sprite_msb#0 plex_irq::@7/(byte) plex_sprite_msb#17 )
[87] (byte) plex_free_next#27 ← phi( plex_irq/(byte) plex_free_next#31 plex_irq::@7/(byte~) plexShowSprite::plexFreeAdd1_$2#0 ) [86] (byte) plex_free_next#27 ← phi( plex_irq/(byte) plex_free_next#31 plex_irq::@7/(byte~) plexShowSprite::plexFreeAdd1_$2#0 )
[87] (byte) plex_show_idx#27 ← phi( plex_irq/(byte) plex_show_idx#0 plex_irq::@7/(byte) plex_show_idx#16 ) [86] (byte) plex_show_idx#27 ← phi( plex_irq/(byte) plex_show_idx#0 plex_irq::@7/(byte) plex_show_idx#16 )
[87] (byte) plex_sprite_idx#25 ← phi( plex_irq/(byte) plex_sprite_idx#0 plex_irq::@7/(byte~) plexShowSprite::$6 ) [86] (byte) plex_sprite_idx#25 ← phi( plex_irq/(byte) plex_sprite_idx#0 plex_irq::@7/(byte~) plexShowSprite::$6 )
[88] call plexShowSprite [87] call plexShowSprite
to:plex_irq::plexFreeNextYpos1 to:plex_irq::plexFreeNextYpos1
plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@3 plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@3
[89] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte[8]) PLEX_FREE_YPOS#0 + (byte~) plexShowSprite::plexFreeAdd1_$2#0) [88] (byte) plex_irq::plexFreeNextYpos1_return#0 ← *((const byte[8]) PLEX_FREE_YPOS#0 + (byte~) plexShowSprite::plexFreeAdd1_$2#0)
to:plex_irq::@6 to:plex_irq::@6
plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1 plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1
[90] (byte~) plex_irq::$4 ← *((const byte*) RASTER#0) + (byte) 2 [89] (byte~) plex_irq::$4 ← *((const byte*) RASTER#0) + (byte) 2
[91] if((byte) plex_show_idx#16>=(const byte) PLEX_COUNT#0) goto plex_irq::@4 [90] if((byte) plex_show_idx#16>=(const byte) PLEX_COUNT#0) goto plex_irq::@4
to:plex_irq::@7 to:plex_irq::@7
plex_irq::@7: scope:[plex_irq] from plex_irq::@6 plex_irq::@7: scope:[plex_irq] from plex_irq::@6
[92] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3 [91] if((byte) plex_irq::plexFreeNextYpos1_return#0<(byte~) plex_irq::$4) goto plex_irq::@3
to:plex_irq::@4 to:plex_irq::@4
plex_irq::@4: scope:[plex_irq] from plex_irq::@6 plex_irq::@7 plex_irq::@4: scope:[plex_irq] from plex_irq::@6 plex_irq::@7
[93] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [92] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
[94] if((byte) plex_show_idx#16<(const byte) PLEX_COUNT#0) goto plex_irq::@1 [93] if((byte) plex_show_idx#16<(const byte) PLEX_COUNT#0) goto plex_irq::@1
to:plex_irq::@5 to:plex_irq::@5
plex_irq::@5: scope:[plex_irq] from plex_irq::@4 plex_irq::@5: scope:[plex_irq] from plex_irq::@4
[95] (bool) framedone#3 ← true [94] (bool) framedone#3 ← true
to:plex_irq::@2 to:plex_irq::@2
plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5 plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5
[96] (bool) framedone#10 ← phi( plex_irq::@1/(bool) framedone#17 plex_irq::@5/(bool) framedone#3 ) [95] (bool) framedone#10 ← phi( plex_irq::@1/(bool) framedone#17 plex_irq::@5/(bool) framedone#3 )
[97] *((const byte*) BORDERCOL#0) ← (byte) 0 [96] *((const byte*) BORDERCOL#0) ← (byte) 0
to:plex_irq::@return to:plex_irq::@return
plex_irq::@return: scope:[plex_irq] from plex_irq::@2 plex_irq::@return: scope:[plex_irq] from plex_irq::@2
[98] return [97] return
to:@return to:@return
plex_irq::@1: scope:[plex_irq] from plex_irq::@4 plex_irq::@1: scope:[plex_irq] from plex_irq::@4
[99] *((const byte*) RASTER#0) ← (byte) plex_irq::plexFreeNextYpos1_return#0 [98] *((const byte*) RASTER#0) ← (byte) plex_irq::plexFreeNextYpos1_return#0
to:plex_irq::@2 to:plex_irq::@2
plexShowSprite: scope:[plexShowSprite] from plex_irq::@3 plexShowSprite: scope:[plexShowSprite] from plex_irq::@3
[100] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#25 << (byte) 1 [99] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#25 << (byte) 1
[101] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27)) [100] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27))
[102] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 [101] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0
to:plexShowSprite::plexFreeAdd1 to:plexShowSprite::plexFreeAdd1
plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite
[103] (byte~) plexShowSprite::plexFreeAdd1_$0#0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15 [102] (byte~) plexShowSprite::plexFreeAdd1_$0#0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15
[104] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#27) ← (byte~) plexShowSprite::plexFreeAdd1_$0#0 [103] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#27) ← (byte~) plexShowSprite::plexFreeAdd1_$0#0
[105] (byte~) plexShowSprite::plexFreeAdd1_$1#0 ← (byte) plex_free_next#27 + (byte) 1 [104] (byte~) plexShowSprite::plexFreeAdd1_$1#0 ← (byte) plex_free_next#27 + (byte) 1
[106] (byte~) plexShowSprite::plexFreeAdd1_$2#0 ← (byte~) plexShowSprite::plexFreeAdd1_$1#0 & (byte) 7 [105] (byte~) plexShowSprite::plexFreeAdd1_$2#0 ← (byte~) plexShowSprite::plexFreeAdd1_$1#0 & (byte) 7
to:plexShowSprite::@5 to:plexShowSprite::@5
plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1 plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1
[107] *((const byte*) PLEX_SCREEN_PTR#0 + (byte) plex_sprite_idx#25) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27)) [106] *((const byte*) PLEX_SCREEN_PTR#0 + (byte) plex_sprite_idx#25) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27))
[108] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27) [107] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27)
[109] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1 [108] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1
[110] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11) [109] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11)
[111] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2 [110] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2
[112] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11) [111] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11)
[113] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1 [112] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1
to:plexShowSprite::@3 to:plexShowSprite::@3
plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5 plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5
[114] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#28 [113] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#28
[115] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) plexShowSprite::$9 [114] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) plexShowSprite::$9
to:plexShowSprite::@2 to:plexShowSprite::@2
plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3 plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3
[116] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#25 + (byte) 1 [115] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#25 + (byte) 1
[117] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7 [116] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7
[118] (byte) plex_show_idx#16 ← ++ (byte) plex_show_idx#27 [117] (byte) plex_show_idx#16 ← ++ (byte) plex_show_idx#27
[119] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#28 << (byte) 1 [118] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#28 << (byte) 1
[120] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@return [119] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@return
to:plexShowSprite::@4 to:plexShowSprite::@4
plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2
[121] (byte) plex_sprite_msb#4 ← (byte) 1 [120] (byte) plex_sprite_msb#4 ← (byte) 1
to:plexShowSprite::@return to:plexShowSprite::@return
plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4 plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4
[122] (byte) plex_sprite_msb#17 ← phi( plexShowSprite::@2/(byte) plex_sprite_msb#3 plexShowSprite::@4/(byte) plex_sprite_msb#4 ) [121] (byte) plex_sprite_msb#17 ← phi( plexShowSprite::@2/(byte) plex_sprite_msb#3 plexShowSprite::@4/(byte) plex_sprite_msb#4 )
[123] return [122] return
to:@return to:@return
plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5 plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5
[124] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#28 [123] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#28
to:plexShowSprite::@2 to:plexShowSprite::@2

File diff suppressed because it is too large Load Diff

View File

@ -62,8 +62,13 @@
(const byte) VIC_RSEL#0 VIC_RSEL = (byte) 8 (const byte) VIC_RSEL#0 VIC_RSEL = (byte) 8
(byte) WHITE (byte) WHITE
(const byte) WHITE#0 WHITE = (byte) 1 (const byte) WHITE#0 WHITE = (byte) 1
(byte*) YSIN (byte[$100]) YSIN
(const byte*) YSIN#0 YSIN = (byte*) 8448 (const byte[$100]) YSIN#0 YSIN = kickasm {{ .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)))
}}
(bool) framedone (bool) framedone
(bool) framedone#10 framedone zp ZP_BOOL:10 40.0 (bool) framedone#10 framedone zp ZP_BOOL:10 40.0
(bool) framedone#12 framedone zp ZP_BOOL:10 57.0 (bool) framedone#12 framedone zp ZP_BOOL:10 57.0
@ -175,7 +180,7 @@
(byte) plex_free_next#0 plex_free_next zp ZP_BYTE:8 1.8571428571428572 (byte) plex_free_next#0 plex_free_next zp ZP_BYTE:8 1.8571428571428572
(byte) plex_free_next#10 plex_free_next zp ZP_BYTE:8 130.0 (byte) plex_free_next#10 plex_free_next zp ZP_BYTE:8 130.0
(byte) plex_free_next#27 plex_free_next zp ZP_BYTE:8 2.8333333333333335 (byte) plex_free_next#27 plex_free_next zp ZP_BYTE:8 2.8333333333333335
(byte) plex_free_next#31 plex_free_next zp ZP_BYTE:8 0.6000000000000001 (byte) plex_free_next#31 plex_free_next zp ZP_BYTE:8 0.6666666666666666
interrupt(KERNEL_MIN)(void()) plex_irq() interrupt(KERNEL_MIN)(void()) plex_irq()
(byte~) plex_irq::$4 $4 zp ZP_BYTE:13 11.0 (byte~) plex_irq::$4 $4 zp ZP_BYTE:13 11.0
(label) plex_irq::@1 (label) plex_irq::@1
@ -191,18 +196,18 @@ interrupt(KERNEL_MIN)(void()) plex_irq()
(byte) plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.0 (byte) plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.0
(byte) plex_irq::rasterY (byte) plex_irq::rasterY
(byte) plex_show_idx (byte) plex_show_idx
(byte) plex_show_idx#0 plex_show_idx zp ZP_BYTE:7 0.46153846153846156 (byte) plex_show_idx#0 plex_show_idx zp ZP_BYTE:7 0.5
(byte) plex_show_idx#1 plex_show_idx zp ZP_BYTE:7 0.8666666666666666 (byte) plex_show_idx#1 plex_show_idx zp ZP_BYTE:7 0.8666666666666666
(byte) plex_show_idx#10 plex_show_idx zp ZP_BYTE:7 130.0 (byte) plex_show_idx#10 plex_show_idx zp ZP_BYTE:7 130.0
(byte) plex_show_idx#16 plex_show_idx zp ZP_BYTE:7 2.1666666666666665 (byte) plex_show_idx#16 plex_show_idx zp ZP_BYTE:7 2.1666666666666665
(byte) plex_show_idx#27 plex_show_idx zp ZP_BYTE:7 1.05 (byte) plex_show_idx#27 plex_show_idx zp ZP_BYTE:7 1.05
(byte) plex_sprite_idx (byte) plex_sprite_idx
(byte) plex_sprite_idx#0 plex_sprite_idx zp ZP_BYTE:6 0.5 (byte) plex_sprite_idx#0 plex_sprite_idx zp ZP_BYTE:6 0.5454545454545454
(byte) plex_sprite_idx#1 plex_sprite_idx zp ZP_BYTE:6 0.9285714285714286 (byte) plex_sprite_idx#1 plex_sprite_idx zp ZP_BYTE:6 0.9285714285714286
(byte) plex_sprite_idx#10 plex_sprite_idx zp ZP_BYTE:6 130.0 (byte) plex_sprite_idx#10 plex_sprite_idx zp ZP_BYTE:6 130.0
(byte) plex_sprite_idx#25 plex_sprite_idx zp ZP_BYTE:6 1.0555555555555558 (byte) plex_sprite_idx#25 plex_sprite_idx zp ZP_BYTE:6 1.0555555555555558
(byte) plex_sprite_msb (byte) plex_sprite_msb
(byte) plex_sprite_msb#0 plex_sprite_msb zp ZP_BYTE:9 0.5454545454545454 (byte) plex_sprite_msb#0 plex_sprite_msb zp ZP_BYTE:9 0.6000000000000001
(byte) plex_sprite_msb#1 plex_sprite_msb zp ZP_BYTE:9 1.0 (byte) plex_sprite_msb#1 plex_sprite_msb zp ZP_BYTE:9 1.0
(byte) plex_sprite_msb#11 plex_sprite_msb zp ZP_BYTE:9 130.0 (byte) plex_sprite_msb#11 plex_sprite_msb zp ZP_BYTE:9 130.0
(byte) plex_sprite_msb#17 plex_sprite_msb zp ZP_BYTE:9 2.142857142857143 (byte) plex_sprite_msb#17 plex_sprite_msb zp ZP_BYTE:9 2.142857142857143