@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] (byte) render_screen_showing#0 ← (byte) 0
  kickasm(location (const byte*) PLAYFIELD_SPRITES#0) {{ .var sprites = LoadPicture("playfield-sprites.png", List().add($010101, $000000))
	// Put the sprites into memory 
	.for(var sy=0;sy<10;sy++) {
	    .var sprite_gfx_y = sy*20
		.for(var sx=0;sx<3;sx++) {
	    	.for (var y=0;y<21; y++) {
	    	    .var gfx_y =  sprite_gfx_y + mod(2100+y-sprite_gfx_y,21)
		    	.for (var c=0; c<3; c++) {
	            	.byte sprites.getSinglecolorByte(sx*3+c,gfx_y)
	            }
	        }
	    	.byte 0
	  	}
	}
 }}
  to:@2
@2: scope:[]  from @1
  [3] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0
  [4] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte) $15
  to:toSpritePtr1
toSpritePtr1: scope:[]  from @2
  [5] phi()
  to:@5
@5: scope:[]  from toSpritePtr1
  [6] (byte) irq_sprite_ptr#0 ← (const byte) toSpritePtr1_return#0+(byte) 3
  [7] (byte) irq_cnt#0 ← (byte) 0
  to:@3
@3: scope:[]  from @5
  kickasm(location (const byte*) SIN_SPRITE#0) {{ .fill $40, $ff
 }}
  to:@4
@4: scope:[]  from @3
  [9] phi()
  [10] call main 
  to:@end
@end: scope:[]  from @4
  [11] phi()
main: scope:[main]  from @4
  [12] phi()
  to:main::vicSelectGfxBank1
main::vicSelectGfxBank1: scope:[main]  from main
  [13] *((const byte*) CIA2_PORT_A_DDR#0) ← (byte) 3
  to:main::vicSelectGfxBank1_toDd001
main::vicSelectGfxBank1_toDd001: scope:[main]  from main::vicSelectGfxBank1
  [14] phi()
  to:main::vicSelectGfxBank1_@1
main::vicSelectGfxBank1_@1: scope:[main]  from main::vicSelectGfxBank1_toDd001
  [15] *((const byte*) CIA2_PORT_A#0) ← (const byte) main::vicSelectGfxBank1_toDd001_return#0
  to:main::toD0181
main::toD0181: scope:[main]  from main::vicSelectGfxBank1_@1
  [16] phi()
  to:main::@3
main::@3: scope:[main]  from main::toD0181
  [17] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
  [18] call sprites_init 
  to:main::@5
main::@5: scope:[main]  from main::@3
  [19] *((const byte*) SPRITES_ENABLE#0) ← (byte) $ff
  to:main::@1
main::@1: scope:[main]  from main::@4 main::@5
  [20] (byte) main::ypos#2 ← phi( main::@4/(byte) main::ypos#1 main::@5/(byte) $32 )
  [20] (byte) main::xpos#2 ← phi( main::@4/(byte) main::xpos#1 main::@5/(byte) $18 )
  [20] (byte) main::s#2 ← phi( main::@4/(byte) main::s#1 main::@5/(byte) 4 )
  [21] (byte) main::s2#0 ← (byte) main::s#2 << (byte) 1
  [22] *((const byte*) SPRITES_XPOS#0 + (byte) main::s2#0) ← (byte) main::xpos#2
  [23] *((const byte*) SPRITES_YPOS#0 + (byte) main::s2#0) ← (byte) main::ypos#2
  [24] (byte~) main::$6 ← (byte) main::s#2 - (byte) 3
  [25] *((const byte*) SPRITES_COLS#0 + (byte) main::s#2) ← (byte~) main::$6
  to:main::toSpritePtr2
main::toSpritePtr2: scope:[main]  from main::@1
  [26] phi()
  to:main::@4
main::@4: scope:[main]  from main::toSpritePtr2
  [27] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0 + (byte) main::s#2) ← (const byte) main::toSpritePtr2_return#0
  [28] (byte) main::xpos#1 ← (byte) main::xpos#2 + (byte) $18
  [29] (byte) main::ypos#1 ← (byte) main::ypos#2 + (byte) $18
  [30] (byte) main::s#1 ← ++ (byte) main::s#2
  [31] if((byte) main::s#1!=(byte) 8) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@4
  [32] phi()
  [33] call sprites_irq_init 
  to:main::@6
main::@6: scope:[main]  from main::@2
  [34] phi()
  [35] call loop 
  to:main::@return
main::@return: scope:[main]  from main::@6
  [36] return 
  to:@return
loop: scope:[loop]  from main::@6
  [37] phi()
  to:loop::@1
loop::@1: scope:[loop]  from loop loop::@5
  [38] (byte) sin_idx#10 ← phi( loop/(byte) 0 loop::@5/(byte) sin_idx#3 )
  to:loop::@2
loop::@2: scope:[loop]  from loop::@1 loop::@2
  [39] if(*((const byte*) RASTER#0)!=(byte) $ff) goto loop::@2
  to:loop::@3
loop::@3: scope:[loop]  from loop::@2
  [40] (byte) loop::idx#0 ← (byte) sin_idx#10
  to:loop::@4
loop::@4: scope:[loop]  from loop::@3 loop::@4
  [41] (byte) loop::idx#2 ← phi( loop::@3/(byte) loop::idx#0 loop::@4/(byte) loop::idx#1 )
  [41] (byte) loop::s#2 ← phi( loop::@3/(byte) 4 loop::@4/(byte) loop::s#1 )
  [42] (byte~) loop::$1 ← (byte) loop::s#2 << (byte) 1
  [43] *((const byte*) SPRITES_YPOS#0 + (byte~) loop::$1) ← *((const byte[$100]) SIN#0 + (byte) loop::idx#2)
  [44] (byte) loop::idx#1 ← (byte) loop::idx#2 + (byte) $a
  [45] (byte) loop::s#1 ← ++ (byte) loop::s#2
  [46] if((byte) loop::s#1!=(byte) 8) goto loop::@4
  to:loop::@5
loop::@5: scope:[loop]  from loop::@4
  [47] (byte) sin_idx#3 ← ++ (byte) sin_idx#10
  to:loop::@1
sprites_irq_init: scope:[sprites_irq_init]  from main::@2
  asm { sei  }
  [49] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
  asm { ldaCIA1_INTERRUPT  }
  [51] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
  [52] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
  [53] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
  [54] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f
  [55] *((const byte*) RASTER#0) ← (const byte) IRQ_RASTER_FIRST#0
  [56] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
  [57] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
  asm { cli  }
  to:sprites_irq_init::@return
sprites_irq_init::@return: scope:[sprites_irq_init]  from sprites_irq_init
  [59] return 
  to:@return
sprites_init: scope:[sprites_init]  from main::@3
  [60] *((const byte*) SPRITES_ENABLE#0) ← (byte) $f
  [61] *((const byte*) SPRITES_MC#0) ← (byte) 0
  [62] *((const byte*) SPRITES_EXPAND_Y#0) ← *((const byte*) SPRITES_MC#0)
  [63] *((const byte*) SPRITES_EXPAND_X#0) ← *((const byte*) SPRITES_EXPAND_Y#0)
  to:sprites_init::@1
sprites_init::@1: scope:[sprites_init]  from sprites_init sprites_init::@1
  [64] (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte)(number) $18+(number) $f*(number) 8 sprites_init::@1/(byte) sprites_init::xpos#1 )
  [64] (byte) sprites_init::s#2 ← phi( sprites_init/(byte) 0 sprites_init::@1/(byte) sprites_init::s#1 )
  [65] (byte) sprites_init::s2#0 ← (byte) sprites_init::s#2 << (byte) 1
  [66] *((const byte*) SPRITES_XPOS#0 + (byte) sprites_init::s2#0) ← (byte) sprites_init::xpos#2
  [67] *((const byte*) SPRITES_COLS#0 + (byte) sprites_init::s#2) ← (const byte) BLACK#0
  [68] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (byte) $18
  [69] (byte) sprites_init::s#1 ← ++ (byte) sprites_init::s#2
  [70] if((byte) sprites_init::s#1!=(byte) 4) goto sprites_init::@1
  to:sprites_init::@return
sprites_init::@return: scope:[sprites_init]  from sprites_init::@1
  [71] return 
  to:@return
sprites_irq: scope:[sprites_irq]  from
  asm { cld  }
  [73] (byte) sprites_irq::ypos#0 ← (byte) irq_sprite_ypos#0
  [74] *((const byte*) SPRITES_YPOS#0) ← (byte) sprites_irq::ypos#0
  [75] *((const byte*) SPRITES_YPOS#0+(byte) 2) ← (byte) sprites_irq::ypos#0
  [76] *((const byte*) SPRITES_YPOS#0+(byte) 4) ← (byte) sprites_irq::ypos#0
  [77] *((const byte*) SPRITES_YPOS#0+(byte) 6) ← (byte) sprites_irq::ypos#0
  [78] (byte~) sprites_irq::$0 ← (byte) irq_raster_next#0 + (byte) 1
  [79] (byte) sprites_irq::raster_sprite_gfx_modify#0 ← (byte~) sprites_irq::$0
  to:sprites_irq::@8
sprites_irq::@8: scope:[sprites_irq]  from sprites_irq sprites_irq::@8
  [80] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8
  to:sprites_irq::@9
sprites_irq::@9: scope:[sprites_irq]  from sprites_irq::@8
  [81] (byte) sprites_irq::ptr#0 ← (byte) irq_sprite_ptr#0
  [82] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1
  to:sprites_irq::@10
sprites_irq::@10: scope:[sprites_irq]  from sprites_irq::@9
  [83] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0) ← (byte) sprites_irq::ptr#0
  [84] (byte) sprites_irq::ptr#3 ← ++ (byte) sprites_irq::ptr#0
  [85] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 1) ← (byte) sprites_irq::ptr#3
  [86] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 2) ← (byte) sprites_irq::ptr#3
  [87] (byte) sprites_irq::ptr#4 ← ++ (byte) sprites_irq::ptr#3
  [88] *((const byte*) PLAYFIELD_SPRITE_PTRS_2#0+(byte) 3) ← (byte) sprites_irq::ptr#4
  to:sprites_irq::@2
sprites_irq::@2: scope:[sprites_irq]  from sprites_irq::@1 sprites_irq::@10
  [89] (byte) irq_cnt#1 ← ++ (byte) irq_cnt#0
  [90] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3
  to:sprites_irq::@6
sprites_irq::@6: scope:[sprites_irq]  from sprites_irq::@2
  [91] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4
  to:sprites_irq::@7
sprites_irq::@7: scope:[sprites_irq]  from sprites_irq::@6
  [92] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14
  [93] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15
  [94] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3
  to:sprites_irq::@5
sprites_irq::@5: scope:[sprites_irq]  from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7
  [95] (byte) irq_sprite_ptr#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ptr#1 sprites_irq::@4/(byte) irq_sprite_ptr#2 sprites_irq::@7/(byte) irq_sprite_ptr#3 )
  [95] (byte) irq_sprite_ypos#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ypos#1 sprites_irq::@4/(byte) irq_sprite_ypos#2 sprites_irq::@7/(byte) irq_sprite_ypos#3 )
  [95] (byte) irq_cnt#3 ← phi( sprites_irq::@11/(byte) irq_cnt#1 sprites_irq::@4/(byte) irq_cnt#2 sprites_irq::@7/(byte) irq_cnt#1 )
  [95] (byte) irq_raster_next#4 ← phi( sprites_irq::@11/(byte) irq_raster_next#1 sprites_irq::@4/(byte) irq_raster_next#2 sprites_irq::@7/(byte) irq_raster_next#3 )
  [96] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4
  [97] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
  to:sprites_irq::@return
sprites_irq::@return: scope:[sprites_irq]  from sprites_irq::@5
  [98] return 
  to:@return
sprites_irq::@4: scope:[sprites_irq]  from sprites_irq::@6
  [99] (byte) irq_cnt#2 ← (byte) 0
  [100] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0
  [101] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15
  [102] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3
  to:sprites_irq::@5
sprites_irq::@3: scope:[sprites_irq]  from sprites_irq::@2
  [103] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15
  [104] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0
  to:sprites_irq::toSpritePtr2
sprites_irq::toSpritePtr2: scope:[sprites_irq]  from sprites_irq::@3
  [105] phi()
  to:sprites_irq::@11
sprites_irq::@11: scope:[sprites_irq]  from sprites_irq::toSpritePtr2
  [106] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0
  to:sprites_irq::@5
sprites_irq::@1: scope:[sprites_irq]  from sprites_irq::@9
  [107] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0
  [108] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0
  [109] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1
  [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1
  [111] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1
  [112] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2
  to:sprites_irq::@2
