1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-08-07 22:25:13 +00:00
Files
kickc/src/test/ref/complex/spritescroller/spritescroller.log
jespergravgaard 9b0dda8766 Updated test data.
2020-12-27 22:02:15 +01:00

6831 lines
405 KiB
Plaintext

Resolved forward reference plex_irq to __interrupt(rom_min_c64) void plex_irq()
Resolved forward reference frame_done to frame_done
Resolved forward reference frame_done to frame_done
Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx
Inlined call __init::$0 = call toSpritePtr SPRITES
Inlined call call plexSetScreen plexInit::screen
Inlined call call plexFreePrepare
Inlined call call plexFreeAdd plexShowSprite::ypos
Inlined call main::$3 = call toD018 SCREEN CHARSET_DEFAULT
Inlined call plex_irq::$2 = call plexFreeNextYpos
Inlined call call __init
CONTROL FLOW GRAPH SSA
void plexInit(byte* plexInit::screen)
plexInit: scope:[plexInit] from main::@11
plexInit::screen#1 = phi( main::@11/plexInit::screen#0 )
plexInit::plexSetScreen1_screen#0 = plexInit::screen#1
to:plexInit::plexSetScreen1
plexInit::plexSetScreen1: scope:[plexInit] from plexInit
plexInit::plexSetScreen1_screen#1 = phi( plexInit/plexInit::plexSetScreen1_screen#0 )
plexInit::plexSetScreen1_$0 = plexInit::plexSetScreen1_screen#1 + $3f8
PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0
to:plexInit::@2
plexInit::@2: scope:[plexInit] from plexInit::plexSetScreen1
plexInit::i#0 = 0
to:plexInit::@1
plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@2
plexInit::i#2 = phi( plexInit::@1/plexInit::i#1, plexInit::@2/plexInit::i#0 )
PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2
plexInit::i#1 = plexInit::i#2 + rangenext(0,PLEX_COUNT-1)
plexInit::$1 = plexInit::i#1 != rangelast(0,PLEX_COUNT-1)
if(plexInit::$1) goto plexInit::@1
to:plexInit::@return
plexInit::@return: scope:[plexInit] from plexInit::@1
return
to:@return
void plexSort()
plexSort: scope:[plexSort] from main::@13 main::@15
plexSort::m#0 = 0
to:plexSort::@1
plexSort::@1: scope:[plexSort] from plexSort plexSort::@2
plexSort::m#2 = phi( plexSort/plexSort::m#0, plexSort::@2/plexSort::m#1 )
plexSort::$1 = plexSort::m#2 + 1
plexSort::nxt_idx#0 = PLEX_SORTED_IDX[plexSort::$1]
plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0]
plexSort::$2 = plexSort::nxt_y#0 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]
plexSort::$3 = ! plexSort::$2
if(plexSort::$3) goto plexSort::@2
to:plexSort::@5
plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@4
plexSort::m#3 = phi( plexSort::@1/plexSort::m#2, plexSort::@4/plexSort::m#5 )
plexSort::m#1 = plexSort::m#3 + rangenext(0,PLEX_COUNT-2)
plexSort::$8 = plexSort::m#1 != rangelast(0,PLEX_COUNT-2)
if(plexSort::$8) goto plexSort::@1
to:plexSort::@6
plexSort::@5: scope:[plexSort] from plexSort::@1
plexSort::nxt_idx#3 = phi( plexSort::@1/plexSort::nxt_idx#0 )
plexSort::nxt_y#2 = phi( plexSort::@1/plexSort::nxt_y#0 )
plexSort::m#4 = phi( plexSort::@1/plexSort::m#2 )
plexSort::s#0 = plexSort::m#4
to:plexSort::@3
plexSort::@3: scope:[plexSort] from plexSort::@3 plexSort::@5
plexSort::m#6 = phi( plexSort::@3/plexSort::m#6, plexSort::@5/plexSort::m#4 )
plexSort::nxt_idx#2 = phi( plexSort::@3/plexSort::nxt_idx#2, plexSort::@5/plexSort::nxt_idx#3 )
plexSort::nxt_y#1 = phi( plexSort::@3/plexSort::nxt_y#1, plexSort::@5/plexSort::nxt_y#2 )
plexSort::s#3 = phi( plexSort::@3/plexSort::s#1, plexSort::@5/plexSort::s#0 )
plexSort::$4 = plexSort::s#3 + 1
PLEX_SORTED_IDX[plexSort::$4] = PLEX_SORTED_IDX[plexSort::s#3]
plexSort::s#1 = -- plexSort::s#3
plexSort::$5 = plexSort::s#1 != $ff
plexSort::$6 = plexSort::nxt_y#1 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::s#1]]
plexSort::$7 = plexSort::$5 && plexSort::$6
if(plexSort::$7) goto plexSort::@3
to:plexSort::@4
plexSort::@4: scope:[plexSort] from plexSort::@3
plexSort::m#5 = phi( plexSort::@3/plexSort::m#6 )
plexSort::nxt_idx#1 = phi( plexSort::@3/plexSort::nxt_idx#2 )
plexSort::s#4 = phi( plexSort::@3/plexSort::s#1 )
plexSort::s#2 = ++ plexSort::s#4
PLEX_SORTED_IDX[plexSort::s#2] = plexSort::nxt_idx#1
to:plexSort::@2
plexSort::@6: scope:[plexSort] from plexSort::@2
plex_show_idx = 0
plex_sprite_idx = 0
plex_sprite_msb = 1
to:plexSort::plexFreePrepare1
plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@6
plexSort::plexFreePrepare1_s#0 = 0
to:plexSort::plexFreePrepare1_@1
plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1
plexSort::plexFreePrepare1_s#2 = phi( plexSort::plexFreePrepare1/plexSort::plexFreePrepare1_s#0, plexSort::plexFreePrepare1_@1/plexSort::plexFreePrepare1_s#1 )
PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0
plexSort::plexFreePrepare1_s#1 = plexSort::plexFreePrepare1_s#2 + rangenext(0,7)
plexSort::plexFreePrepare1_$0 = plexSort::plexFreePrepare1_s#1 != rangelast(0,7)
if(plexSort::plexFreePrepare1_$0) goto plexSort::plexFreePrepare1_@1
to:plexSort::plexFreePrepare1_@2
plexSort::plexFreePrepare1_@2: scope:[plexSort] from plexSort::plexFreePrepare1_@1
plex_free_next = 0
to:plexSort::@return
plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2
return
to:@return
void plexShowSprite()
plexShowSprite: scope:[plexShowSprite] from plex_irq::@3
plexShowSprite::$0 = plex_sprite_idx * 2
plexShowSprite::plex_sprite_idx2#0 = plexShowSprite::$0
plexShowSprite::ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]]
SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::ypos#0
plexShowSprite::plexFreeAdd1_ypos#0 = plexShowSprite::ypos#0
to:plexShowSprite::plexFreeAdd1
plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite
plexShowSprite::plex_sprite_idx2#2 = phi( plexShowSprite/plexShowSprite::plex_sprite_idx2#0 )
plexShowSprite::plexFreeAdd1_ypos#1 = phi( plexShowSprite/plexShowSprite::plexFreeAdd1_ypos#0 )
plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#1 + $16
PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0
plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1
plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7
plex_free_next = plexShowSprite::plexFreeAdd1_$2
to:plexShowSprite::@5
plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1
plexShowSprite::plex_sprite_idx2#1 = phi( plexShowSprite::plexFreeAdd1/plexShowSprite::plex_sprite_idx2#2 )
PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]]
plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx]
plexShowSprite::$10 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD
plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$10]
SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#1] = plexShowSprite::$2
plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD
plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11]
plexShowSprite::$4 = plexShowSprite::$3 != 0
if(plexShowSprite::$4) goto plexShowSprite::@1
to:plexShowSprite::@3
plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5
*SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb
to:plexShowSprite::@2
plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5
plexShowSprite::$9 = $ff ^ plex_sprite_msb
*SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9
to:plexShowSprite::@2
plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3
plexShowSprite::$5 = plex_sprite_idx + 1
plexShowSprite::$6 = plexShowSprite::$5 & 7
plex_sprite_idx = plexShowSprite::$6
plex_show_idx = ++ plex_show_idx
plex_sprite_msb = plex_sprite_msb << 1
plexShowSprite::$7 = plex_sprite_msb == 0
plexShowSprite::$8 = ! plexShowSprite::$7
if(plexShowSprite::$8) goto plexShowSprite::@return
to:plexShowSprite::@4
plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2
plex_sprite_msb = 1
to:plexShowSprite::@return
plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4
return
to:@return
void main()
main: scope:[main] from __start::@1
x_movement_idx#38 = phi( __start::@1/x_movement_idx#20 )
y_sin_idx#38 = phi( __start::@1/y_sin_idx#20 )
scroll_text_next#38 = phi( __start::@1/scroll_text_next#22 )
SPRITE_0#27 = phi( __start::@1/SPRITE_0#11 )
asm { sei }
*PROCPORT = PROCPORT_RAM_CHARROM
font_2x2::font_original#0 = CHARGEN
font_2x2::font_2x2#0 = FONT
call font_2x2
to:main::@10
main::@10: scope:[main] from main
x_movement_idx#37 = phi( main/x_movement_idx#38 )
y_sin_idx#37 = phi( main/y_sin_idx#38 )
scroll_text_next#37 = phi( main/scroll_text_next#38 )
SPRITE_0#24 = phi( main/SPRITE_0#27 )
*PROCPORT = PROCPORT_BASIC_KERNEL_IO
asm { cli }
font_2x2_to_sprites::font_2x2#0 = FONT
font_2x2_to_sprites::sprites#0 = SPRITES
font_2x2_to_sprites::num_chars#0 = $40
call font_2x2_to_sprites
to:main::@11
main::@11: scope:[main] from main::@10
x_movement_idx#36 = phi( main::@10/x_movement_idx#37 )
y_sin_idx#36 = phi( main::@10/y_sin_idx#37 )
scroll_text_next#36 = phi( main::@10/scroll_text_next#37 )
SPRITE_0#21 = phi( main::@10/SPRITE_0#24 )
plexInit::screen#0 = SCREEN
call plexInit
to:main::@12
main::@12: scope:[main] from main::@11
x_movement_idx#35 = phi( main::@11/x_movement_idx#36 )
y_sin_idx#35 = phi( main::@11/y_sin_idx#36 )
scroll_text_next#35 = phi( main::@11/scroll_text_next#36 )
SPRITE_0#18 = phi( main::@11/SPRITE_0#21 )
main::toD0181_screen#0 = SCREEN
main::toD0181_gfx#0 = CHARSET_DEFAULT
to:main::toD0181
main::toD0181: scope:[main] from main::@12
x_movement_idx#34 = phi( main::@12/x_movement_idx#35 )
y_sin_idx#34 = phi( main::@12/y_sin_idx#35 )
scroll_text_next#34 = phi( main::@12/scroll_text_next#35 )
SPRITE_0#15 = phi( main::@12/SPRITE_0#18 )
main::toD0181_gfx#1 = phi( main::@12/main::toD0181_gfx#0 )
main::toD0181_screen#1 = phi( main::@12/main::toD0181_screen#0 )
main::toD0181_$7 = (word)main::toD0181_screen#1
main::toD0181_$0 = main::toD0181_$7 & $3fff
main::toD0181_$1 = main::toD0181_$0 * 4
main::toD0181_$2 = > main::toD0181_$1
main::toD0181_$3 = > (word)main::toD0181_gfx#1
main::toD0181_$4 = main::toD0181_$3 / 4
main::toD0181_$5 = main::toD0181_$4 & $f
main::toD0181_$6 = main::toD0181_$2 | main::toD0181_$5
main::toD0181_return#0 = main::toD0181_$6
to:main::toD0181_@return
main::toD0181_@return: scope:[main] from main::toD0181
x_movement_idx#33 = phi( main::toD0181/x_movement_idx#34 )
y_sin_idx#33 = phi( main::toD0181/y_sin_idx#34 )
scroll_text_next#33 = phi( main::toD0181/scroll_text_next#34 )
SPRITE_0#12 = phi( main::toD0181/SPRITE_0#15 )
main::toD0181_return#2 = phi( main::toD0181/main::toD0181_return#0 )
main::toD0181_return#1 = main::toD0181_return#2
to:main::@9
main::@9: scope:[main] from main::toD0181_@return
x_movement_idx#32 = phi( main::toD0181_@return/x_movement_idx#33 )
y_sin_idx#32 = phi( main::toD0181_@return/y_sin_idx#33 )
scroll_text_next#32 = phi( main::toD0181_@return/scroll_text_next#33 )
SPRITE_0#9 = phi( main::toD0181_@return/SPRITE_0#12 )
main::toD0181_return#3 = phi( main::toD0181_@return/main::toD0181_return#1 )
main::$3 = main::toD0181_return#3
*D018 = main::$3
main::s#0 = 0
main::x#0 = 0
to:main::@1
main::@1: scope:[main] from main::@2 main::@9
x_movement_idx#30 = phi( main::@2/x_movement_idx#31, main::@9/x_movement_idx#32 )
y_sin_idx#30 = phi( main::@2/y_sin_idx#31, main::@9/y_sin_idx#32 )
scroll_text_next#30 = phi( main::@2/scroll_text_next#31, main::@9/scroll_text_next#32 )
main::x#3 = phi( main::@2/main::x#1, main::@9/main::x#0 )
SPRITE_0#5 = phi( main::@2/SPRITE_0#2, main::@9/SPRITE_0#9 )
main::s#2 = phi( main::@2/main::s#1, main::@9/main::s#0 )
main::$6 = main::s#2 < PLEX_COUNT
if(main::$6) goto main::@2
to:main::@3
main::@2: scope:[main] from main::@1
x_movement_idx#31 = phi( main::@1/x_movement_idx#30 )
y_sin_idx#31 = phi( main::@1/y_sin_idx#30 )
scroll_text_next#31 = phi( main::@1/scroll_text_next#30 )
main::x#2 = phi( main::@1/main::x#3 )
main::s#3 = phi( main::@1/main::s#2 )
SPRITE_0#2 = phi( main::@1/SPRITE_0#5 )
main::$7 = SPRITE_0#2 + ' '
PLEX_PTR[main::s#3] = main::$7
main::$12 = main::s#3 * SIZEOF_WORD
PLEX_XPOS[main::$12] = ((word)) { XMOVEMENT_HI[main::x#2], XMOVEMENT[main::x#2] }
main::x#1 = main::x#2 + 8
main::s#1 = ++ main::s#3
to:main::@1
main::@3: scope:[main] from main::@1
SPRITE_0#22 = phi( main::@1/SPRITE_0#5 )
x_movement_idx#27 = phi( main::@1/x_movement_idx#30 )
y_sin_idx#27 = phi( main::@1/y_sin_idx#30 )
scroll_text_next#29 = phi( main::@1/scroll_text_next#30 )
*SPRITES_ENABLE = $ff
main::s1#0 = 0
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
SPRITE_0#19 = phi( main::@3/SPRITE_0#22, main::@4/SPRITE_0#19 )
x_movement_idx#21 = phi( main::@3/x_movement_idx#27, main::@4/x_movement_idx#21 )
y_sin_idx#21 = phi( main::@3/y_sin_idx#27, main::@4/y_sin_idx#21 )
scroll_text_next#23 = phi( main::@3/scroll_text_next#29, main::@4/scroll_text_next#23 )
main::s1#2 = phi( main::@3/main::s1#0, main::@4/main::s1#1 )
SPRITES_COLOR[main::s1#2] = WHITE
main::s1#1 = main::s1#2 + rangenext(0,7)
main::$8 = main::s1#1 != rangelast(0,7)
if(main::$8) goto main::@4
to:main::@5
main::@5: scope:[main] from main::@4
SPRITE_0#16 = phi( main::@4/SPRITE_0#19 )
x_movement_idx#16 = phi( main::@4/x_movement_idx#21 )
y_sin_idx#16 = phi( main::@4/y_sin_idx#21 )
scroll_text_next#17 = phi( main::@4/scroll_text_next#23 )
call plex_move
to:main::@13
main::@13: scope:[main] from main::@5
SPRITE_0#28 = phi( main::@5/SPRITE_0#16 )
x_movement_idx#8 = phi( main::@5/x_movement_idx#4 )
y_sin_idx#8 = phi( main::@5/y_sin_idx#4 )
scroll_text_next#9 = phi( main::@5/scroll_text_next#5 )
scroll_text_next#0 = scroll_text_next#9
y_sin_idx#0 = y_sin_idx#8
x_movement_idx#0 = x_movement_idx#8
call plexSort
to:main::@14
main::@14: scope:[main] from main::@13
SPRITE_0#25 = phi( main::@13/SPRITE_0#28 )
x_movement_idx#22 = phi( main::@13/x_movement_idx#0 )
y_sin_idx#22 = phi( main::@13/y_sin_idx#0 )
scroll_text_next#24 = phi( main::@13/scroll_text_next#0 )
asm { sei }
*((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR
*VIC_CONTROL = *VIC_CONTROL & $7f
*RASTER = $28
*IRQ_ENABLE = IRQ_RASTER
*IRQ_STATUS = IRQ_RASTER
*KERNEL_IRQ = &plex_irq
asm { cli }
to:main::@6
main::@6: scope:[main] from main::@14 main::@16
SPRITE_0#23 = phi( main::@14/SPRITE_0#25, main::@16/SPRITE_0#26 )
x_movement_idx#18 = phi( main::@14/x_movement_idx#22, main::@16/x_movement_idx#23 )
y_sin_idx#18 = phi( main::@14/y_sin_idx#22, main::@16/y_sin_idx#23 )
scroll_text_next#19 = phi( main::@14/scroll_text_next#24, main::@16/scroll_text_next#25 )
if(true) goto main::@7
to:main::@return
main::@7: scope:[main] from main::@6 main::@7
SPRITE_0#20 = phi( main::@6/SPRITE_0#23, main::@7/SPRITE_0#20 )
x_movement_idx#24 = phi( main::@6/x_movement_idx#18, main::@7/x_movement_idx#24 )
y_sin_idx#24 = phi( main::@6/y_sin_idx#18, main::@7/y_sin_idx#24 )
scroll_text_next#26 = phi( main::@6/scroll_text_next#19, main::@7/scroll_text_next#26 )
main::$9 = ! frame_done
if(main::$9) goto main::@7
to:main::@8
main::@8: scope:[main] from main::@7
SPRITE_0#17 = phi( main::@7/SPRITE_0#20 )
x_movement_idx#17 = phi( main::@7/x_movement_idx#24 )
y_sin_idx#17 = phi( main::@7/y_sin_idx#24 )
scroll_text_next#18 = phi( main::@7/scroll_text_next#26 )
frame_done = false
call plex_move
to:main::@15
main::@15: scope:[main] from main::@8
SPRITE_0#29 = phi( main::@8/SPRITE_0#17 )
x_movement_idx#9 = phi( main::@8/x_movement_idx#4 )
y_sin_idx#9 = phi( main::@8/y_sin_idx#4 )
scroll_text_next#10 = phi( main::@8/scroll_text_next#5 )
scroll_text_next#1 = scroll_text_next#10
y_sin_idx#1 = y_sin_idx#9
x_movement_idx#1 = x_movement_idx#9
call plexSort
to:main::@16
main::@16: scope:[main] from main::@15
SPRITE_0#26 = phi( main::@15/SPRITE_0#29 )
x_movement_idx#23 = phi( main::@15/x_movement_idx#1 )
y_sin_idx#23 = phi( main::@15/y_sin_idx#1 )
scroll_text_next#25 = phi( main::@15/scroll_text_next#1 )
to:main::@6
main::@return: scope:[main] from main::@6
x_movement_idx#10 = phi( main::@6/x_movement_idx#18 )
y_sin_idx#10 = phi( main::@6/y_sin_idx#18 )
scroll_text_next#11 = phi( main::@6/scroll_text_next#19 )
scroll_text_next#2 = scroll_text_next#11
y_sin_idx#2 = y_sin_idx#10
x_movement_idx#2 = x_movement_idx#10
return
to:@return
void plex_move()
plex_move: scope:[plex_move] from main::@5 main::@8
SPRITE_0#13 = phi( main::@5/SPRITE_0#16, main::@8/SPRITE_0#17 )
scroll_text_next#27 = phi( main::@5/scroll_text_next#17, main::@8/scroll_text_next#18 )
x_movement_idx#11 = phi( main::@5/x_movement_idx#16, main::@8/x_movement_idx#17 )
y_sin_idx#11 = phi( main::@5/y_sin_idx#16, main::@8/y_sin_idx#17 )
plex_move::y_idx#0 = y_sin_idx#11
plex_move::x_idx#0 = x_movement_idx#11
plex_move::s#0 = 0
to:plex_move::@1
plex_move::@1: scope:[plex_move] from plex_move plex_move::@2
SPRITE_0#10 = phi( plex_move/SPRITE_0#13, plex_move::@2/SPRITE_0#14 )
x_movement_idx#25 = phi( plex_move/x_movement_idx#11, plex_move::@2/x_movement_idx#19 )
y_sin_idx#25 = phi( plex_move/y_sin_idx#11, plex_move::@2/y_sin_idx#19 )
scroll_text_next#20 = phi( plex_move/scroll_text_next#27, plex_move::@2/scroll_text_next#28 )
plex_move::x_idx#2 = phi( plex_move/plex_move::x_idx#0, plex_move::@2/plex_move::x_idx#1 )
plex_move::s#2 = phi( plex_move/plex_move::s#0, plex_move::@2/plex_move::s#1 )
plex_move::y_idx#2 = phi( plex_move/plex_move::y_idx#0, plex_move::@2/plex_move::y_idx#3 )
PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2]
plex_move::y_idx#1 = plex_move::y_idx#2 + 8
plex_move::$6 = plex_move::s#2 * SIZEOF_WORD
PLEX_XPOS[plex_move::$6] = ((word)) { XMOVEMENT_HI[plex_move::x_idx#2], XMOVEMENT[plex_move::x_idx#2] }
plex_move::$0 = plex_move::x_idx#2 == 0
plex_move::$1 = ! plex_move::$0
if(plex_move::$1) goto plex_move::@2
to:plex_move::@4
plex_move::@2: scope:[plex_move] from plex_move::@1 plex_move::@3
SPRITE_0#14 = phi( plex_move::@1/SPRITE_0#10, plex_move::@3/SPRITE_0#3 )
scroll_text_next#28 = phi( plex_move::@1/scroll_text_next#20, plex_move::@3/scroll_text_next#3 )
x_movement_idx#19 = phi( plex_move::@1/x_movement_idx#25, plex_move::@3/x_movement_idx#26 )
y_sin_idx#19 = phi( plex_move::@1/y_sin_idx#25, plex_move::@3/y_sin_idx#26 )
plex_move::y_idx#3 = phi( plex_move::@1/plex_move::y_idx#1, plex_move::@3/plex_move::y_idx#4 )
plex_move::s#3 = phi( plex_move::@1/plex_move::s#2, plex_move::@3/plex_move::s#4 )
plex_move::x_idx#3 = phi( plex_move::@1/plex_move::x_idx#2, plex_move::@3/plex_move::x_idx#4 )
plex_move::x_idx#1 = plex_move::x_idx#3 + 8
plex_move::s#1 = plex_move::s#3 + rangenext(0,PLEX_COUNT-1)
plex_move::$5 = plex_move::s#1 != rangelast(0,PLEX_COUNT-1)
if(plex_move::$5) goto plex_move::@1
to:plex_move::@6
plex_move::@4: scope:[plex_move] from plex_move::@1
x_movement_idx#28 = phi( plex_move::@1/x_movement_idx#25 )
y_sin_idx#28 = phi( plex_move::@1/y_sin_idx#25 )
plex_move::y_idx#5 = phi( plex_move::@1/plex_move::y_idx#1 )
plex_move::x_idx#5 = phi( plex_move::@1/plex_move::x_idx#2 )
plex_move::s#5 = phi( plex_move::@1/plex_move::s#2 )
SPRITE_0#6 = phi( plex_move::@1/SPRITE_0#10 )
scroll_text_next#12 = phi( plex_move::@1/scroll_text_next#20 )
plex_move::$2 = *scroll_text_next#12 == 0
plex_move::$3 = ! plex_move::$2
if(plex_move::$3) goto plex_move::@3
to:plex_move::@5
plex_move::@3: scope:[plex_move] from plex_move::@4 plex_move::@5
x_movement_idx#26 = phi( plex_move::@4/x_movement_idx#28, plex_move::@5/x_movement_idx#29 )
y_sin_idx#26 = phi( plex_move::@4/y_sin_idx#28, plex_move::@5/y_sin_idx#29 )
plex_move::y_idx#4 = phi( plex_move::@4/plex_move::y_idx#5, plex_move::@5/plex_move::y_idx#6 )
plex_move::x_idx#4 = phi( plex_move::@4/plex_move::x_idx#5, plex_move::@5/plex_move::x_idx#6 )
plex_move::s#4 = phi( plex_move::@4/plex_move::s#5, plex_move::@5/plex_move::s#6 )
scroll_text_next#13 = phi( plex_move::@4/scroll_text_next#12, plex_move::@5/scroll_text_next#4 )
SPRITE_0#3 = phi( plex_move::@4/SPRITE_0#6, plex_move::@5/SPRITE_0#7 )
plex_move::$4 = SPRITE_0#3 + *scroll_text_next#13
PLEX_PTR[plex_move::s#4] = plex_move::$4
scroll_text_next#3 = ++ scroll_text_next#13
to:plex_move::@2
plex_move::@5: scope:[plex_move] from plex_move::@4
x_movement_idx#29 = phi( plex_move::@4/x_movement_idx#28 )
y_sin_idx#29 = phi( plex_move::@4/y_sin_idx#28 )
plex_move::y_idx#6 = phi( plex_move::@4/plex_move::y_idx#5 )
plex_move::x_idx#6 = phi( plex_move::@4/plex_move::x_idx#5 )
plex_move::s#6 = phi( plex_move::@4/plex_move::s#5 )
SPRITE_0#7 = phi( plex_move::@4/SPRITE_0#6 )
scroll_text_next#4 = SCROLL_TEXT
to:plex_move::@3
plex_move::@6: scope:[plex_move] from plex_move::@2
scroll_text_next#21 = phi( plex_move::@2/scroll_text_next#28 )
x_movement_idx#12 = phi( plex_move::@2/x_movement_idx#19 )
y_sin_idx#12 = phi( plex_move::@2/y_sin_idx#19 )
y_sin_idx#3 = y_sin_idx#12 + 3
x_movement_idx#3 = ++ x_movement_idx#12
to:plex_move::@return
plex_move::@return: scope:[plex_move] from plex_move::@6
x_movement_idx#13 = phi( plex_move::@6/x_movement_idx#3 )
y_sin_idx#13 = phi( plex_move::@6/y_sin_idx#3 )
scroll_text_next#14 = phi( plex_move::@6/scroll_text_next#21 )
scroll_text_next#5 = scroll_text_next#14
y_sin_idx#4 = y_sin_idx#13
x_movement_idx#4 = x_movement_idx#13
return
to:@return
__interrupt(rom_min_c64) void plex_irq()
plex_irq: scope:[plex_irq] from
asm { sei }
plex_irq::rasterY#0 = 0
to:plex_irq::@3
plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@6
call plexShowSprite
to:plex_irq::@7
plex_irq::@7: scope:[plex_irq] from plex_irq::@3
to:plex_irq::plexFreeNextYpos1
plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@7
plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next]
to:plex_irq::plexFreeNextYpos1_@return
plex_irq::plexFreeNextYpos1_@return: scope:[plex_irq] from plex_irq::plexFreeNextYpos1
plex_irq::plexFreeNextYpos1_return#2 = phi( plex_irq::plexFreeNextYpos1/plex_irq::plexFreeNextYpos1_return#0 )
plex_irq::plexFreeNextYpos1_return#1 = plex_irq::plexFreeNextYpos1_return#2
to:plex_irq::@6
plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1_@return
plex_irq::plexFreeNextYpos1_return#3 = phi( plex_irq::plexFreeNextYpos1_@return/plex_irq::plexFreeNextYpos1_return#1 )
plex_irq::$2 = plex_irq::plexFreeNextYpos1_return#3
plex_irq::rasterY#1 = plex_irq::$2
plex_irq::$3 = plex_show_idx < PLEX_COUNT
plex_irq::$4 = *RASTER + 3
plex_irq::$5 = plex_irq::rasterY#1 < plex_irq::$4
plex_irq::$6 = plex_irq::$3 && plex_irq::$5
if(plex_irq::$6) goto plex_irq::@3
to:plex_irq::@4
plex_irq::@4: scope:[plex_irq] from plex_irq::@6
plex_irq::rasterY#3 = phi( plex_irq::@6/plex_irq::rasterY#1 )
plex_irq::$0 = plex_show_idx < PLEX_COUNT
if(plex_irq::$0) goto plex_irq::@1
to:plex_irq::@5
plex_irq::@1: scope:[plex_irq] from plex_irq::@4
plex_irq::rasterY#2 = phi( plex_irq::@4/plex_irq::rasterY#3 )
*RASTER = plex_irq::rasterY#2
to:plex_irq::@2
plex_irq::@5: scope:[plex_irq] from plex_irq::@4
*RASTER = $28
frame_done = true
to:plex_irq::@2
plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5
*IRQ_STATUS = IRQ_RASTER
asm { cli }
to:plex_irq::@return
plex_irq::@return: scope:[plex_irq] from plex_irq::@2
return
to:@return
void font_2x2_to_sprites(byte* font_2x2_to_sprites::font_2x2 , byte* font_2x2_to_sprites::sprites , byte font_2x2_to_sprites::num_chars)
font_2x2_to_sprites: scope:[font_2x2_to_sprites] from main::@10
font_2x2_to_sprites::num_chars#2 = phi( main::@10/font_2x2_to_sprites::num_chars#0 )
font_2x2_to_sprites::sprites#1 = phi( main::@10/font_2x2_to_sprites::sprites#0 )
font_2x2_to_sprites::font_2x2#1 = phi( main::@10/font_2x2_to_sprites::font_2x2#0 )
font_2x2_to_sprites::char_current#0 = font_2x2_to_sprites::font_2x2#1
font_2x2_to_sprites::sprite#0 = font_2x2_to_sprites::sprites#1
font_2x2_to_sprites::c#0 = 0
to:font_2x2_to_sprites::@1
font_2x2_to_sprites::@1: scope:[font_2x2_to_sprites] from font_2x2_to_sprites font_2x2_to_sprites::@8
font_2x2_to_sprites::font_2x2#7 = phi( font_2x2_to_sprites/font_2x2_to_sprites::font_2x2#1, font_2x2_to_sprites::@8/font_2x2_to_sprites::font_2x2#9 )
font_2x2_to_sprites::sprite#6 = phi( font_2x2_to_sprites/font_2x2_to_sprites::sprite#0, font_2x2_to_sprites::@8/font_2x2_to_sprites::sprite#1 )
font_2x2_to_sprites::char_current#5 = phi( font_2x2_to_sprites/font_2x2_to_sprites::char_current#0, font_2x2_to_sprites::@8/font_2x2_to_sprites::char_current#1 )
font_2x2_to_sprites::num_chars#1 = phi( font_2x2_to_sprites/font_2x2_to_sprites::num_chars#2, font_2x2_to_sprites::@8/font_2x2_to_sprites::num_chars#3 )
font_2x2_to_sprites::c#2 = phi( font_2x2_to_sprites/font_2x2_to_sprites::c#0, font_2x2_to_sprites::@8/font_2x2_to_sprites::c#1 )
font_2x2_to_sprites::$0 = font_2x2_to_sprites::c#2 < font_2x2_to_sprites::num_chars#1
if(font_2x2_to_sprites::$0) goto font_2x2_to_sprites::@2
to:font_2x2_to_sprites::@return
font_2x2_to_sprites::@2: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1
font_2x2_to_sprites::num_chars#9 = phi( font_2x2_to_sprites::@1/font_2x2_to_sprites::num_chars#1 )
font_2x2_to_sprites::c#9 = phi( font_2x2_to_sprites::@1/font_2x2_to_sprites::c#2 )
font_2x2_to_sprites::font_2x2#5 = phi( font_2x2_to_sprites::@1/font_2x2_to_sprites::font_2x2#7 )
font_2x2_to_sprites::sprite#4 = phi( font_2x2_to_sprites::@1/font_2x2_to_sprites::sprite#6 )
font_2x2_to_sprites::char_current#2 = phi( font_2x2_to_sprites::@1/font_2x2_to_sprites::char_current#5 )
font_2x2_to_sprites::char_left#0 = font_2x2_to_sprites::char_current#2
font_2x2_to_sprites::$1 = font_2x2_to_sprites::char_current#2 + $40*8
font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::$1
font_2x2_to_sprites::sprite_idx#0 = 0
font_2x2_to_sprites::i#0 = 0
to:font_2x2_to_sprites::@3
font_2x2_to_sprites::@3: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@2 font_2x2_to_sprites::@5
font_2x2_to_sprites::num_chars#8 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::num_chars#9, font_2x2_to_sprites::@5/font_2x2_to_sprites::num_chars#4 )
font_2x2_to_sprites::c#8 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::c#9, font_2x2_to_sprites::@5/font_2x2_to_sprites::c#4 )
font_2x2_to_sprites::font_2x2#4 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::font_2x2#5, font_2x2_to_sprites::@5/font_2x2_to_sprites::font_2x2#6 )
font_2x2_to_sprites::char_current#6 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::char_current#2, font_2x2_to_sprites::@5/font_2x2_to_sprites::char_current#7 )
font_2x2_to_sprites::char_right#3 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::char_right#0, font_2x2_to_sprites::@5/font_2x2_to_sprites::char_right#4 )
font_2x2_to_sprites::sprite_idx#4 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::sprite_idx#0, font_2x2_to_sprites::@5/font_2x2_to_sprites::sprite_idx#5 )
font_2x2_to_sprites::sprite#2 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::sprite#4, font_2x2_to_sprites::@5/font_2x2_to_sprites::sprite#5 )
font_2x2_to_sprites::char_left#3 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::char_left#0, font_2x2_to_sprites::@5/font_2x2_to_sprites::char_left#4 )
font_2x2_to_sprites::i#2 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::i#0, font_2x2_to_sprites::@5/font_2x2_to_sprites::i#1 )
font_2x2_to_sprites::$2 = font_2x2_to_sprites::i#2 & 7
font_2x2_to_sprites::sprite#2[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$2]
font_2x2_to_sprites::sprite_idx#1 = ++ font_2x2_to_sprites::sprite_idx#4
font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7
font_2x2_to_sprites::sprite#2[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3]
font_2x2_to_sprites::sprite_idx#2 = ++ font_2x2_to_sprites::sprite_idx#1
font_2x2_to_sprites::sprite#2[font_2x2_to_sprites::sprite_idx#2] = 0
font_2x2_to_sprites::sprite_idx#3 = ++ font_2x2_to_sprites::sprite_idx#2
font_2x2_to_sprites::$4 = font_2x2_to_sprites::i#2 == 7
if(font_2x2_to_sprites::$4) goto font_2x2_to_sprites::@4
to:font_2x2_to_sprites::@6
font_2x2_to_sprites::@4: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3
font_2x2_to_sprites::font_2x2#8 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::font_2x2#4 )
font_2x2_to_sprites::num_chars#5 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::num_chars#8 )
font_2x2_to_sprites::c#5 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::c#8 )
font_2x2_to_sprites::sprite_idx#6 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::sprite_idx#3 )
font_2x2_to_sprites::sprite#7 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::sprite#2 )
font_2x2_to_sprites::i#5 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::i#2 )
font_2x2_to_sprites::char_current#3 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::char_current#6 )
font_2x2_to_sprites::$9 = font_2x2_to_sprites::char_current#3 + $80*8
font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::$9
font_2x2_to_sprites::$10 = font_2x2_to_sprites::char_current#3 + $c0*8
font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::$10
to:font_2x2_to_sprites::@5
font_2x2_to_sprites::@6: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3
font_2x2_to_sprites::num_chars#6 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::num_chars#8 )
font_2x2_to_sprites::c#6 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::c#8 )
font_2x2_to_sprites::char_current#8 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::char_current#6 )
font_2x2_to_sprites::char_right#5 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::char_right#3 )
font_2x2_to_sprites::sprite_idx#7 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::sprite_idx#3 )
font_2x2_to_sprites::sprite#8 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::sprite#2 )
font_2x2_to_sprites::char_left#5 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::char_left#3 )
font_2x2_to_sprites::font_2x2#3 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::font_2x2#4 )
font_2x2_to_sprites::i#3 = phi( font_2x2_to_sprites::@3/font_2x2_to_sprites::i#2 )
font_2x2_to_sprites::$5 = font_2x2_to_sprites::i#3 == $f
font_2x2_to_sprites::$6 = ! font_2x2_to_sprites::$5
if(font_2x2_to_sprites::$6) goto font_2x2_to_sprites::@5
to:font_2x2_to_sprites::@7
font_2x2_to_sprites::@7: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@6
font_2x2_to_sprites::num_chars#7 = phi( font_2x2_to_sprites::@6/font_2x2_to_sprites::num_chars#6 )
font_2x2_to_sprites::c#7 = phi( font_2x2_to_sprites::@6/font_2x2_to_sprites::c#6 )
font_2x2_to_sprites::char_current#9 = phi( font_2x2_to_sprites::@6/font_2x2_to_sprites::char_current#8 )
font_2x2_to_sprites::sprite_idx#8 = phi( font_2x2_to_sprites::@6/font_2x2_to_sprites::sprite_idx#7 )
font_2x2_to_sprites::sprite#9 = phi( font_2x2_to_sprites::@6/font_2x2_to_sprites::sprite#8 )
font_2x2_to_sprites::i#6 = phi( font_2x2_to_sprites::@6/font_2x2_to_sprites::i#3 )
font_2x2_to_sprites::font_2x2#2 = phi( font_2x2_to_sprites::@6/font_2x2_to_sprites::font_2x2#3 )
font_2x2_to_sprites::$7 = font_2x2_to_sprites::font_2x2#2 + ' '*8
font_2x2_to_sprites::char_left#2 = font_2x2_to_sprites::$7
font_2x2_to_sprites::$8 = font_2x2_to_sprites::font_2x2#2 + ' '*8
font_2x2_to_sprites::char_right#2 = font_2x2_to_sprites::$8
to:font_2x2_to_sprites::@5
font_2x2_to_sprites::@5: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@4 font_2x2_to_sprites::@6 font_2x2_to_sprites::@7
font_2x2_to_sprites::font_2x2#6 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::font_2x2#8, font_2x2_to_sprites::@6/font_2x2_to_sprites::font_2x2#3, font_2x2_to_sprites::@7/font_2x2_to_sprites::font_2x2#2 )
font_2x2_to_sprites::num_chars#4 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::num_chars#5, font_2x2_to_sprites::@6/font_2x2_to_sprites::num_chars#6, font_2x2_to_sprites::@7/font_2x2_to_sprites::num_chars#7 )
font_2x2_to_sprites::c#4 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::c#5, font_2x2_to_sprites::@6/font_2x2_to_sprites::c#6, font_2x2_to_sprites::@7/font_2x2_to_sprites::c#7 )
font_2x2_to_sprites::char_current#7 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::char_current#3, font_2x2_to_sprites::@6/font_2x2_to_sprites::char_current#8, font_2x2_to_sprites::@7/font_2x2_to_sprites::char_current#9 )
font_2x2_to_sprites::char_right#4 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::char_right#1, font_2x2_to_sprites::@6/font_2x2_to_sprites::char_right#5, font_2x2_to_sprites::@7/font_2x2_to_sprites::char_right#2 )
font_2x2_to_sprites::sprite_idx#5 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::sprite_idx#6, font_2x2_to_sprites::@6/font_2x2_to_sprites::sprite_idx#7, font_2x2_to_sprites::@7/font_2x2_to_sprites::sprite_idx#8 )
font_2x2_to_sprites::sprite#5 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::sprite#7, font_2x2_to_sprites::@6/font_2x2_to_sprites::sprite#8, font_2x2_to_sprites::@7/font_2x2_to_sprites::sprite#9 )
font_2x2_to_sprites::char_left#4 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::char_left#1, font_2x2_to_sprites::@6/font_2x2_to_sprites::char_left#5, font_2x2_to_sprites::@7/font_2x2_to_sprites::char_left#2 )
font_2x2_to_sprites::i#4 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::i#5, font_2x2_to_sprites::@6/font_2x2_to_sprites::i#3, font_2x2_to_sprites::@7/font_2x2_to_sprites::i#6 )
font_2x2_to_sprites::i#1 = font_2x2_to_sprites::i#4 + rangenext(0,$14)
font_2x2_to_sprites::$11 = font_2x2_to_sprites::i#1 != rangelast(0,$14)
if(font_2x2_to_sprites::$11) goto font_2x2_to_sprites::@3
to:font_2x2_to_sprites::@8
font_2x2_to_sprites::@8: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@5
font_2x2_to_sprites::font_2x2#9 = phi( font_2x2_to_sprites::@5/font_2x2_to_sprites::font_2x2#6 )
font_2x2_to_sprites::num_chars#3 = phi( font_2x2_to_sprites::@5/font_2x2_to_sprites::num_chars#4 )
font_2x2_to_sprites::c#3 = phi( font_2x2_to_sprites::@5/font_2x2_to_sprites::c#4 )
font_2x2_to_sprites::sprite#3 = phi( font_2x2_to_sprites::@5/font_2x2_to_sprites::sprite#5 )
font_2x2_to_sprites::char_current#4 = phi( font_2x2_to_sprites::@5/font_2x2_to_sprites::char_current#7 )
font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#4 + 8
font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#3 + $40
font_2x2_to_sprites::c#1 = ++ font_2x2_to_sprites::c#3
to:font_2x2_to_sprites::@1
font_2x2_to_sprites::@return: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1
return
to:@return
void font_2x2(byte* font_2x2::font_original , byte* font_2x2::font_2x2)
font_2x2: scope:[font_2x2] from main
font_2x2::font_2x2#1 = phi( main/font_2x2::font_2x2#0 )
font_2x2::font_original#1 = phi( main/font_2x2::font_original#0 )
font_2x2::next_original#0 = font_2x2::font_original#1
font_2x2::next_2x2#0 = font_2x2::font_2x2#1
font_2x2::c#0 = 0
to:font_2x2::@1
font_2x2::@1: scope:[font_2x2] from font_2x2 font_2x2::@10
font_2x2::c#11 = phi( font_2x2/font_2x2::c#0, font_2x2::@10/font_2x2::c#1 )
font_2x2::next_original#4 = phi( font_2x2/font_2x2::next_original#0, font_2x2::@10/font_2x2::next_original#1 )
font_2x2::next_2x2#2 = phi( font_2x2/font_2x2::next_2x2#0, font_2x2::@10/font_2x2::next_2x2#1 )
font_2x2::next_2x2_left#0 = font_2x2::next_2x2#2
font_2x2::$0 = font_2x2::next_2x2#2 + $40*8
font_2x2::next_2x2_right#0 = font_2x2::$0
font_2x2::l2#0 = 0
font_2x2::l#0 = 0
to:font_2x2::@2
font_2x2::@2: scope:[font_2x2] from font_2x2::@1 font_2x2::@9
font_2x2::c#10 = phi( font_2x2::@1/font_2x2::c#11, font_2x2::@9/font_2x2::c#3 )
font_2x2::next_2x2#11 = phi( font_2x2::@1/font_2x2::next_2x2#2, font_2x2::@9/font_2x2::next_2x2#6 )
font_2x2::next_2x2_right#7 = phi( font_2x2::@1/font_2x2::next_2x2_right#0, font_2x2::@9/font_2x2::next_2x2_right#8 )
font_2x2::l2#8 = phi( font_2x2::@1/font_2x2::l2#0, font_2x2::@9/font_2x2::l2#9 )
font_2x2::next_2x2_left#7 = phi( font_2x2::@1/font_2x2::next_2x2_left#0, font_2x2::@9/font_2x2::next_2x2_left#8 )
font_2x2::l#2 = phi( font_2x2::@1/font_2x2::l#0, font_2x2::@9/font_2x2::l#1 )
font_2x2::next_original#2 = phi( font_2x2::@1/font_2x2::next_original#4, font_2x2::@9/font_2x2::next_original#5 )
font_2x2::glyph_bits#0 = font_2x2::next_original#2[font_2x2::l#2]
font_2x2::glyph_bits_2x2#0 = 0
font_2x2::b#0 = 0
to:font_2x2::@3
font_2x2::@3: scope:[font_2x2] from font_2x2::@2 font_2x2::@6
font_2x2::c#9 = phi( font_2x2::@2/font_2x2::c#10, font_2x2::@6/font_2x2::c#6 )
font_2x2::next_original#11 = phi( font_2x2::@2/font_2x2::next_original#2, font_2x2::@6/font_2x2::next_original#8 )
font_2x2::next_2x2#10 = phi( font_2x2::@2/font_2x2::next_2x2#11, font_2x2::@6/font_2x2::next_2x2#7 )
font_2x2::l#9 = phi( font_2x2::@2/font_2x2::l#2, font_2x2::@6/font_2x2::l#6 )
font_2x2::next_2x2_right#6 = phi( font_2x2::@2/font_2x2::next_2x2_right#7, font_2x2::@6/font_2x2::next_2x2_right#3 )
font_2x2::l2#7 = phi( font_2x2::@2/font_2x2::l2#8, font_2x2::@6/font_2x2::l2#4 )
font_2x2::next_2x2_left#6 = phi( font_2x2::@2/font_2x2::next_2x2_left#7, font_2x2::@6/font_2x2::next_2x2_left#3 )
font_2x2::b#5 = phi( font_2x2::@2/font_2x2::b#0, font_2x2::@6/font_2x2::b#1 )
font_2x2::glyph_bits_2x2#7 = phi( font_2x2::@2/font_2x2::glyph_bits_2x2#0, font_2x2::@6/font_2x2::glyph_bits_2x2#2 )
font_2x2::glyph_bits#2 = phi( font_2x2::@2/font_2x2::glyph_bits#0, font_2x2::@6/font_2x2::glyph_bits#1 )
font_2x2::$1 = font_2x2::glyph_bits#2 & $80
font_2x2::$22 = 0 != font_2x2::$1
if(font_2x2::$22) goto font_2x2::@4
to:font_2x2::@5
font_2x2::@4: scope:[font_2x2] from font_2x2::@3
font_2x2::c#7 = phi( font_2x2::@3/font_2x2::c#9 )
font_2x2::next_original#9 = phi( font_2x2::@3/font_2x2::next_original#11 )
font_2x2::next_2x2#8 = phi( font_2x2::@3/font_2x2::next_2x2#10 )
font_2x2::l#7 = phi( font_2x2::@3/font_2x2::l#9 )
font_2x2::next_2x2_right#4 = phi( font_2x2::@3/font_2x2::next_2x2_right#6 )
font_2x2::l2#5 = phi( font_2x2::@3/font_2x2::l2#7 )
font_2x2::next_2x2_left#4 = phi( font_2x2::@3/font_2x2::next_2x2_left#6 )
font_2x2::b#3 = phi( font_2x2::@3/font_2x2::b#5 )
font_2x2::glyph_bits#4 = phi( font_2x2::@3/font_2x2::glyph_bits#2 )
font_2x2::glyph_bits_2x2#5 = phi( font_2x2::@3/font_2x2::glyph_bits_2x2#7 )
font_2x2::$3 = 1
to:font_2x2::@6
font_2x2::@5: scope:[font_2x2] from font_2x2::@3
font_2x2::c#8 = phi( font_2x2::@3/font_2x2::c#9 )
font_2x2::next_original#10 = phi( font_2x2::@3/font_2x2::next_original#11 )
font_2x2::next_2x2#9 = phi( font_2x2::@3/font_2x2::next_2x2#10 )
font_2x2::l#8 = phi( font_2x2::@3/font_2x2::l#9 )
font_2x2::next_2x2_right#5 = phi( font_2x2::@3/font_2x2::next_2x2_right#6 )
font_2x2::l2#6 = phi( font_2x2::@3/font_2x2::l2#7 )
font_2x2::next_2x2_left#5 = phi( font_2x2::@3/font_2x2::next_2x2_left#6 )
font_2x2::b#4 = phi( font_2x2::@3/font_2x2::b#5 )
font_2x2::glyph_bits#5 = phi( font_2x2::@3/font_2x2::glyph_bits#2 )
font_2x2::glyph_bits_2x2#6 = phi( font_2x2::@3/font_2x2::glyph_bits_2x2#7 )
font_2x2::$2 = 0
to:font_2x2::@6
font_2x2::@6: scope:[font_2x2] from font_2x2::@4 font_2x2::@5
font_2x2::c#6 = phi( font_2x2::@4/font_2x2::c#7, font_2x2::@5/font_2x2::c#8 )
font_2x2::next_original#8 = phi( font_2x2::@4/font_2x2::next_original#9, font_2x2::@5/font_2x2::next_original#10 )
font_2x2::next_2x2#7 = phi( font_2x2::@4/font_2x2::next_2x2#8, font_2x2::@5/font_2x2::next_2x2#9 )
font_2x2::l#6 = phi( font_2x2::@4/font_2x2::l#7, font_2x2::@5/font_2x2::l#8 )
font_2x2::next_2x2_right#3 = phi( font_2x2::@4/font_2x2::next_2x2_right#4, font_2x2::@5/font_2x2::next_2x2_right#5 )
font_2x2::l2#4 = phi( font_2x2::@4/font_2x2::l2#5, font_2x2::@5/font_2x2::l2#6 )
font_2x2::next_2x2_left#3 = phi( font_2x2::@4/font_2x2::next_2x2_left#4, font_2x2::@5/font_2x2::next_2x2_left#5 )
font_2x2::b#2 = phi( font_2x2::@4/font_2x2::b#3, font_2x2::@5/font_2x2::b#4 )
font_2x2::glyph_bits#3 = phi( font_2x2::@4/font_2x2::glyph_bits#4, font_2x2::@5/font_2x2::glyph_bits#5 )
font_2x2::glyph_bits_2x2#3 = phi( font_2x2::@4/font_2x2::glyph_bits_2x2#5, font_2x2::@5/font_2x2::glyph_bits_2x2#6 )
font_2x2::$4 = phi( font_2x2::@4/font_2x2::$3, font_2x2::@5/font_2x2::$2 )
font_2x2::glyph_bit#0 = font_2x2::$4
font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1
font_2x2::$6 = font_2x2::$5 | font_2x2::glyph_bit#0
font_2x2::glyph_bits_2x2#1 = font_2x2::$6
font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1
font_2x2::$8 = font_2x2::$7 | font_2x2::glyph_bit#0
font_2x2::glyph_bits_2x2#2 = font_2x2::$8
font_2x2::glyph_bits#1 = font_2x2::glyph_bits#3 << 1
font_2x2::b#1 = font_2x2::b#2 + rangenext(0,7)
font_2x2::$9 = font_2x2::b#1 != rangelast(0,7)
if(font_2x2::$9) goto font_2x2::@3
to:font_2x2::@7
font_2x2::@7: scope:[font_2x2] from font_2x2::@6
font_2x2::c#4 = phi( font_2x2::@6/font_2x2::c#6 )
font_2x2::next_original#6 = phi( font_2x2::@6/font_2x2::next_original#8 )
font_2x2::next_2x2#5 = phi( font_2x2::@6/font_2x2::next_2x2#7 )
font_2x2::l#4 = phi( font_2x2::@6/font_2x2::l#6 )
font_2x2::next_2x2_right#2 = phi( font_2x2::@6/font_2x2::next_2x2_right#3 )
font_2x2::l2#3 = phi( font_2x2::@6/font_2x2::l2#4 )
font_2x2::next_2x2_left#2 = phi( font_2x2::@6/font_2x2::next_2x2_left#3 )
font_2x2::glyph_bits_2x2#4 = phi( font_2x2::@6/font_2x2::glyph_bits_2x2#2 )
font_2x2::$10 = > font_2x2::glyph_bits_2x2#4
font_2x2::next_2x2_left#2[font_2x2::l2#3] = font_2x2::$10
font_2x2::$11 = font_2x2::l2#3 + 1
font_2x2::$12 = > font_2x2::glyph_bits_2x2#4
font_2x2::next_2x2_left#2[font_2x2::$11] = font_2x2::$12
font_2x2::$13 = < font_2x2::glyph_bits_2x2#4
font_2x2::next_2x2_right#2[font_2x2::l2#3] = font_2x2::$13
font_2x2::$14 = font_2x2::l2#3 + 1
font_2x2::$15 = < font_2x2::glyph_bits_2x2#4
font_2x2::next_2x2_right#2[font_2x2::$14] = font_2x2::$15
font_2x2::l2#1 = font_2x2::l2#3 + 2
font_2x2::$16 = font_2x2::l2#1 == 8
font_2x2::$17 = ! font_2x2::$16
if(font_2x2::$17) goto font_2x2::@9
to:font_2x2::@8
font_2x2::@9: scope:[font_2x2] from font_2x2::@7 font_2x2::@8
font_2x2::next_2x2_right#8 = phi( font_2x2::@7/font_2x2::next_2x2_right#2, font_2x2::@8/font_2x2::next_2x2_right#1 )
font_2x2::l2#9 = phi( font_2x2::@7/font_2x2::l2#1, font_2x2::@8/font_2x2::l2#2 )
font_2x2::next_2x2_left#8 = phi( font_2x2::@7/font_2x2::next_2x2_left#2, font_2x2::@8/font_2x2::next_2x2_left#1 )
font_2x2::c#3 = phi( font_2x2::@7/font_2x2::c#4, font_2x2::@8/font_2x2::c#5 )
font_2x2::next_2x2#6 = phi( font_2x2::@7/font_2x2::next_2x2#5, font_2x2::@8/font_2x2::next_2x2#3 )
font_2x2::next_original#5 = phi( font_2x2::@7/font_2x2::next_original#6, font_2x2::@8/font_2x2::next_original#7 )
font_2x2::l#3 = phi( font_2x2::@7/font_2x2::l#4, font_2x2::@8/font_2x2::l#5 )
font_2x2::l#1 = font_2x2::l#3 + rangenext(0,7)
font_2x2::$20 = font_2x2::l#1 != rangelast(0,7)
if(font_2x2::$20) goto font_2x2::@2
to:font_2x2::@10
font_2x2::@8: scope:[font_2x2] from font_2x2::@7
font_2x2::c#5 = phi( font_2x2::@7/font_2x2::c#4 )
font_2x2::next_original#7 = phi( font_2x2::@7/font_2x2::next_original#6 )
font_2x2::l#5 = phi( font_2x2::@7/font_2x2::l#4 )
font_2x2::next_2x2#3 = phi( font_2x2::@7/font_2x2::next_2x2#5 )
font_2x2::$18 = font_2x2::next_2x2#3 + $80*8
font_2x2::next_2x2_left#1 = font_2x2::$18
font_2x2::$19 = font_2x2::next_2x2#3 + $c0*8
font_2x2::next_2x2_right#1 = font_2x2::$19
font_2x2::l2#2 = 0
to:font_2x2::@9
font_2x2::@10: scope:[font_2x2] from font_2x2::@9
font_2x2::c#2 = phi( font_2x2::@9/font_2x2::c#3 )
font_2x2::next_original#3 = phi( font_2x2::@9/font_2x2::next_original#5 )
font_2x2::next_2x2#4 = phi( font_2x2::@9/font_2x2::next_2x2#6 )
font_2x2::next_2x2#1 = font_2x2::next_2x2#4 + 8
font_2x2::next_original#1 = font_2x2::next_original#3 + 8
font_2x2::c#1 = font_2x2::c#2 + rangenext(0,$3f)
font_2x2::$21 = font_2x2::c#1 != rangelast(0,$3f)
if(font_2x2::$21) goto font_2x2::@1
to:font_2x2::@return
font_2x2::@return: scope:[font_2x2] from font_2x2::@10
return
to:@return
void __start()
__start: scope:[__start] from
to:__start::__init1
__start::__init1: scope:[__start] from __start
PLEX_SCREEN_PTR = (byte*)$400+$3f8
plex_show_idx = 0
plex_sprite_idx = 0
plex_sprite_msb = 1
plex_free_next = 0
__start::__init1_toSpritePtr1_sprite#0 = SPRITES
to:__start::__init1_toSpritePtr1
__start::__init1_toSpritePtr1: scope:[__start] from __start::__init1
__start::__init1_toSpritePtr1_sprite#1 = phi( __start::__init1/__start::__init1_toSpritePtr1_sprite#0 )
__start::__init1_toSpritePtr1_$1 = (word)__start::__init1_toSpritePtr1_sprite#1
__start::__init1_toSpritePtr1_$0 = __start::__init1_toSpritePtr1_$1 / $40
__start::__init1_toSpritePtr1_return#0 = (byte)__start::__init1_toSpritePtr1_$0
to:__start::__init1_toSpritePtr1_@return
__start::__init1_toSpritePtr1_@return: scope:[__start] from __start::__init1_toSpritePtr1
__start::__init1_toSpritePtr1_return#2 = phi( __start::__init1_toSpritePtr1/__start::__init1_toSpritePtr1_return#0 )
__start::__init1_toSpritePtr1_return#1 = __start::__init1_toSpritePtr1_return#2
to:__start::__init1_@1
__start::__init1_@1: scope:[__start] from __start::__init1_toSpritePtr1_@return
__start::__init1_toSpritePtr1_return#3 = phi( __start::__init1_toSpritePtr1_@return/__start::__init1_toSpritePtr1_return#1 )
__start::__init1_$0 = __start::__init1_toSpritePtr1_return#3
SPRITE_0#0 = __start::__init1_$0
scroll_text_next#6 = SCROLL_TEXT
y_sin_idx#5 = 0
x_movement_idx#5 = 0
frame_done = false
to:__start::@1
__start::@1: scope:[__start] from __start::__init1_@1
SPRITE_0#11 = phi( __start::__init1_@1/SPRITE_0#0 )
x_movement_idx#20 = phi( __start::__init1_@1/x_movement_idx#5 )
y_sin_idx#20 = phi( __start::__init1_@1/y_sin_idx#5 )
scroll_text_next#22 = phi( __start::__init1_@1/scroll_text_next#6 )
call main
to:__start::@2
__start::@2: scope:[__start] from __start::@1
SPRITE_0#8 = phi( __start::@1/SPRITE_0#11 )
x_movement_idx#14 = phi( __start::@1/x_movement_idx#2 )
y_sin_idx#14 = phi( __start::@1/y_sin_idx#2 )
scroll_text_next#15 = phi( __start::@1/scroll_text_next#2 )
scroll_text_next#7 = scroll_text_next#15
y_sin_idx#6 = y_sin_idx#14
x_movement_idx#6 = x_movement_idx#14
to:__start::@return
__start::@return: scope:[__start] from __start::@2
x_movement_idx#15 = phi( __start::@2/x_movement_idx#6 )
y_sin_idx#15 = phi( __start::@2/y_sin_idx#6 )
scroll_text_next#16 = phi( __start::@2/scroll_text_next#7 )
SPRITE_0#4 = phi( __start::@2/SPRITE_0#8 )
SPRITE_0#1 = SPRITE_0#4
scroll_text_next#8 = scroll_text_next#16
y_sin_idx#7 = y_sin_idx#15
x_movement_idx#7 = x_movement_idx#15
return
to:@return
SYMBOL TABLE SSA
const nomodify byte* CHARGEN = (byte*)$d000
const nomodify byte* CHARSET_DEFAULT = (byte*)$1000
const nomodify struct MOS6526_CIA* CIA1 = (struct MOS6526_CIA*)$dc00
const nomodify byte CIA_INTERRUPT_CLEAR = $7f
const nomodify byte* D018 = (byte*)$d018
const byte* FONT[$800] = { fill( $800, 0) }
const nomodify byte* IRQ_ENABLE = (byte*)$d01a
const nomodify byte IRQ_RASTER = 1
const nomodify byte* IRQ_STATUS = (byte*)$d019
const nomodify void()** KERNEL_IRQ = (void()**)$314
const byte OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
const nomodify byte PLEX_COUNT = $20
const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) }
const byte* PLEX_PTR[PLEX_COUNT] = { fill( PLEX_COUNT, 0) }
volatile byte* PLEX_SCREEN_PTR loadstore
const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) }
const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) }
const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) }
const nomodify byte* PROCPORT = (byte*)1
const nomodify byte PROCPORT_BASIC_KERNEL_IO = 7
const nomodify byte PROCPORT_RAM_CHARROM = 1
const nomodify byte* RASTER = (byte*)$d012
const nomodify byte* SCREEN = (byte*)$400
const byte* SCROLL_TEXT[] = "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. "
const byte SIZEOF_WORD = 2
const nomodify byte* SPRITES = (byte*)$3000
const nomodify byte* SPRITES_COLOR = (byte*)$d027
const nomodify byte* SPRITES_ENABLE = (byte*)$d015
const nomodify byte* SPRITES_XMSB = (byte*)$d010
const nomodify byte* SPRITES_XPOS = (byte*)$d000
const nomodify byte* SPRITES_YPOS = (byte*)$d001
byte SPRITE_0
byte SPRITE_0#0
byte SPRITE_0#1
byte SPRITE_0#10
byte SPRITE_0#11
byte SPRITE_0#12
byte SPRITE_0#13
byte SPRITE_0#14
byte SPRITE_0#15
byte SPRITE_0#16
byte SPRITE_0#17
byte SPRITE_0#18
byte SPRITE_0#19
byte SPRITE_0#2
byte SPRITE_0#20
byte SPRITE_0#21
byte SPRITE_0#22
byte SPRITE_0#23
byte SPRITE_0#24
byte SPRITE_0#25
byte SPRITE_0#26
byte SPRITE_0#27
byte SPRITE_0#28
byte SPRITE_0#29
byte SPRITE_0#3
byte SPRITE_0#4
byte SPRITE_0#5
byte SPRITE_0#6
byte SPRITE_0#7
byte SPRITE_0#8
byte SPRITE_0#9
const nomodify byte* VIC_CONTROL = (byte*)$d011
const nomodify byte WHITE = 1
const byte* XMOVEMENT[$200] = kickasm {{ //.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100)))
//.lohifill $100, round(344-i*344/$100-129*sin(toRadians(360*i/$100)))
.lohifill $100, round(344-i*344/$100 -86*sin(toRadians(360*i/$100)) -43*sin(toRadians(360*i/$80)))
//.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$80)))
}}
const nomodify byte* XMOVEMENT_HI = XMOVEMENT+$100
const byte* YSIN[$100] = kickasm {{ .fill $100, round(142+89.5*sin(toRadians(360*i/256)))
}}
void __start()
byte~ __start::__init1_$0
number~ __start::__init1_toSpritePtr1_$0
word~ __start::__init1_toSpritePtr1_$1
byte __start::__init1_toSpritePtr1_return
byte __start::__init1_toSpritePtr1_return#0
byte __start::__init1_toSpritePtr1_return#1
byte __start::__init1_toSpritePtr1_return#2
byte __start::__init1_toSpritePtr1_return#3
byte* __start::__init1_toSpritePtr1_sprite
byte* __start::__init1_toSpritePtr1_sprite#0
byte* __start::__init1_toSpritePtr1_sprite#1
void font_2x2(byte* font_2x2::font_original , byte* font_2x2::font_2x2)
byte*~ font_2x2::$0
number~ font_2x2::$1
byte~ font_2x2::$10
number~ font_2x2::$11
byte~ font_2x2::$12
byte~ font_2x2::$13
number~ font_2x2::$14
byte~ font_2x2::$15
bool~ font_2x2::$16
bool~ font_2x2::$17
byte*~ font_2x2::$18
byte*~ font_2x2::$19
byte~ font_2x2::$2
bool~ font_2x2::$20
bool~ font_2x2::$21
bool~ font_2x2::$22
byte~ font_2x2::$3
byte~ font_2x2::$4
word~ font_2x2::$5
word~ font_2x2::$6
word~ font_2x2::$7
word~ font_2x2::$8
bool~ font_2x2::$9
byte font_2x2::b
byte font_2x2::b#0
byte font_2x2::b#1
byte font_2x2::b#2
byte font_2x2::b#3
byte font_2x2::b#4
byte font_2x2::b#5
byte font_2x2::c
byte font_2x2::c#0
byte font_2x2::c#1
byte font_2x2::c#10
byte font_2x2::c#11
byte font_2x2::c#2
byte font_2x2::c#3
byte font_2x2::c#4
byte font_2x2::c#5
byte font_2x2::c#6
byte font_2x2::c#7
byte font_2x2::c#8
byte font_2x2::c#9
byte* font_2x2::font_2x2
byte* font_2x2::font_2x2#0
byte* font_2x2::font_2x2#1
byte* font_2x2::font_original
byte* font_2x2::font_original#0
byte* font_2x2::font_original#1
byte font_2x2::glyph_bit
byte font_2x2::glyph_bit#0
byte font_2x2::glyph_bits
byte font_2x2::glyph_bits#0
byte font_2x2::glyph_bits#1
byte font_2x2::glyph_bits#2
byte font_2x2::glyph_bits#3
byte font_2x2::glyph_bits#4
byte font_2x2::glyph_bits#5
word font_2x2::glyph_bits_2x2
word font_2x2::glyph_bits_2x2#0
word font_2x2::glyph_bits_2x2#1
word font_2x2::glyph_bits_2x2#2
word font_2x2::glyph_bits_2x2#3
word font_2x2::glyph_bits_2x2#4
word font_2x2::glyph_bits_2x2#5
word font_2x2::glyph_bits_2x2#6
word font_2x2::glyph_bits_2x2#7
byte font_2x2::l
byte font_2x2::l#0
byte font_2x2::l#1
byte font_2x2::l#2
byte font_2x2::l#3
byte font_2x2::l#4
byte font_2x2::l#5
byte font_2x2::l#6
byte font_2x2::l#7
byte font_2x2::l#8
byte font_2x2::l#9
byte font_2x2::l2
byte font_2x2::l2#0
byte font_2x2::l2#1
byte font_2x2::l2#2
byte font_2x2::l2#3
byte font_2x2::l2#4
byte font_2x2::l2#5
byte font_2x2::l2#6
byte font_2x2::l2#7
byte font_2x2::l2#8
byte font_2x2::l2#9
byte* font_2x2::next_2x2
byte* font_2x2::next_2x2#0
byte* font_2x2::next_2x2#1
byte* font_2x2::next_2x2#10
byte* font_2x2::next_2x2#11
byte* font_2x2::next_2x2#2
byte* font_2x2::next_2x2#3
byte* font_2x2::next_2x2#4
byte* font_2x2::next_2x2#5
byte* font_2x2::next_2x2#6
byte* font_2x2::next_2x2#7
byte* font_2x2::next_2x2#8
byte* font_2x2::next_2x2#9
byte* font_2x2::next_2x2_left
byte* font_2x2::next_2x2_left#0
byte* font_2x2::next_2x2_left#1
byte* font_2x2::next_2x2_left#2
byte* font_2x2::next_2x2_left#3
byte* font_2x2::next_2x2_left#4
byte* font_2x2::next_2x2_left#5
byte* font_2x2::next_2x2_left#6
byte* font_2x2::next_2x2_left#7
byte* font_2x2::next_2x2_left#8
byte* font_2x2::next_2x2_right
byte* font_2x2::next_2x2_right#0
byte* font_2x2::next_2x2_right#1
byte* font_2x2::next_2x2_right#2
byte* font_2x2::next_2x2_right#3
byte* font_2x2::next_2x2_right#4
byte* font_2x2::next_2x2_right#5
byte* font_2x2::next_2x2_right#6
byte* font_2x2::next_2x2_right#7
byte* font_2x2::next_2x2_right#8
byte* font_2x2::next_original
byte* font_2x2::next_original#0
byte* font_2x2::next_original#1
byte* font_2x2::next_original#10
byte* font_2x2::next_original#11
byte* font_2x2::next_original#2
byte* font_2x2::next_original#3
byte* font_2x2::next_original#4
byte* font_2x2::next_original#5
byte* font_2x2::next_original#6
byte* font_2x2::next_original#7
byte* font_2x2::next_original#8
byte* font_2x2::next_original#9
void font_2x2_to_sprites(byte* font_2x2_to_sprites::font_2x2 , byte* font_2x2_to_sprites::sprites , byte font_2x2_to_sprites::num_chars)
bool~ font_2x2_to_sprites::$0
byte*~ font_2x2_to_sprites::$1
byte*~ font_2x2_to_sprites::$10
bool~ font_2x2_to_sprites::$11
number~ font_2x2_to_sprites::$2
number~ font_2x2_to_sprites::$3
bool~ font_2x2_to_sprites::$4
bool~ font_2x2_to_sprites::$5
bool~ font_2x2_to_sprites::$6
byte*~ font_2x2_to_sprites::$7
byte*~ font_2x2_to_sprites::$8
byte*~ font_2x2_to_sprites::$9
byte font_2x2_to_sprites::c
byte font_2x2_to_sprites::c#0
byte font_2x2_to_sprites::c#1
byte font_2x2_to_sprites::c#2
byte font_2x2_to_sprites::c#3
byte font_2x2_to_sprites::c#4
byte font_2x2_to_sprites::c#5
byte font_2x2_to_sprites::c#6
byte font_2x2_to_sprites::c#7
byte font_2x2_to_sprites::c#8
byte font_2x2_to_sprites::c#9
byte* font_2x2_to_sprites::char_current
byte* font_2x2_to_sprites::char_current#0
byte* font_2x2_to_sprites::char_current#1
byte* font_2x2_to_sprites::char_current#2
byte* font_2x2_to_sprites::char_current#3
byte* font_2x2_to_sprites::char_current#4
byte* font_2x2_to_sprites::char_current#5
byte* font_2x2_to_sprites::char_current#6
byte* font_2x2_to_sprites::char_current#7
byte* font_2x2_to_sprites::char_current#8
byte* font_2x2_to_sprites::char_current#9
byte* font_2x2_to_sprites::char_left
byte* font_2x2_to_sprites::char_left#0
byte* font_2x2_to_sprites::char_left#1
byte* font_2x2_to_sprites::char_left#2
byte* font_2x2_to_sprites::char_left#3
byte* font_2x2_to_sprites::char_left#4
byte* font_2x2_to_sprites::char_left#5
byte* font_2x2_to_sprites::char_right
byte* font_2x2_to_sprites::char_right#0
byte* font_2x2_to_sprites::char_right#1
byte* font_2x2_to_sprites::char_right#2
byte* font_2x2_to_sprites::char_right#3
byte* font_2x2_to_sprites::char_right#4
byte* font_2x2_to_sprites::char_right#5
byte* font_2x2_to_sprites::font_2x2
byte* font_2x2_to_sprites::font_2x2#0
byte* font_2x2_to_sprites::font_2x2#1
byte* font_2x2_to_sprites::font_2x2#2
byte* font_2x2_to_sprites::font_2x2#3
byte* font_2x2_to_sprites::font_2x2#4
byte* font_2x2_to_sprites::font_2x2#5
byte* font_2x2_to_sprites::font_2x2#6
byte* font_2x2_to_sprites::font_2x2#7
byte* font_2x2_to_sprites::font_2x2#8
byte* font_2x2_to_sprites::font_2x2#9
byte font_2x2_to_sprites::i
byte font_2x2_to_sprites::i#0
byte font_2x2_to_sprites::i#1
byte font_2x2_to_sprites::i#2
byte font_2x2_to_sprites::i#3
byte font_2x2_to_sprites::i#4
byte font_2x2_to_sprites::i#5
byte font_2x2_to_sprites::i#6
byte font_2x2_to_sprites::num_chars
byte font_2x2_to_sprites::num_chars#0
byte font_2x2_to_sprites::num_chars#1
byte font_2x2_to_sprites::num_chars#2
byte font_2x2_to_sprites::num_chars#3
byte font_2x2_to_sprites::num_chars#4
byte font_2x2_to_sprites::num_chars#5
byte font_2x2_to_sprites::num_chars#6
byte font_2x2_to_sprites::num_chars#7
byte font_2x2_to_sprites::num_chars#8
byte font_2x2_to_sprites::num_chars#9
byte* font_2x2_to_sprites::sprite
byte* font_2x2_to_sprites::sprite#0
byte* font_2x2_to_sprites::sprite#1
byte* font_2x2_to_sprites::sprite#2
byte* font_2x2_to_sprites::sprite#3
byte* font_2x2_to_sprites::sprite#4
byte* font_2x2_to_sprites::sprite#5
byte* font_2x2_to_sprites::sprite#6
byte* font_2x2_to_sprites::sprite#7
byte* font_2x2_to_sprites::sprite#8
byte* font_2x2_to_sprites::sprite#9
byte font_2x2_to_sprites::sprite_idx
byte font_2x2_to_sprites::sprite_idx#0
byte font_2x2_to_sprites::sprite_idx#1
byte font_2x2_to_sprites::sprite_idx#2
byte font_2x2_to_sprites::sprite_idx#3
byte font_2x2_to_sprites::sprite_idx#4
byte font_2x2_to_sprites::sprite_idx#5
byte font_2x2_to_sprites::sprite_idx#6
byte font_2x2_to_sprites::sprite_idx#7
byte font_2x2_to_sprites::sprite_idx#8
byte* font_2x2_to_sprites::sprites
byte* font_2x2_to_sprites::sprites#0
byte* font_2x2_to_sprites::sprites#1
volatile bool frame_done loadstore
void main()
byte~ main::$12
byte~ main::$3
bool~ main::$6
byte~ main::$7
bool~ main::$8
bool~ main::$9
byte main::s
byte main::s#0
byte main::s#1
byte main::s#2
byte main::s#3
byte main::s1
byte main::s1#0
byte main::s1#1
byte main::s1#2
number~ main::toD0181_$0
number~ main::toD0181_$1
number~ main::toD0181_$2
byte~ main::toD0181_$3
number~ main::toD0181_$4
number~ main::toD0181_$5
number~ main::toD0181_$6
word~ main::toD0181_$7
byte* main::toD0181_gfx
byte* main::toD0181_gfx#0
byte* main::toD0181_gfx#1
byte main::toD0181_return
byte main::toD0181_return#0
byte main::toD0181_return#1
byte main::toD0181_return#2
byte main::toD0181_return#3
byte* main::toD0181_screen
byte* main::toD0181_screen#0
byte* main::toD0181_screen#1
byte main::x
byte main::x#0
byte main::x#1
byte main::x#2
byte main::x#3
void plexInit(byte* plexInit::screen)
bool~ plexInit::$1
byte plexInit::i
byte plexInit::i#0
byte plexInit::i#1
byte plexInit::i#2
byte*~ plexInit::plexSetScreen1_$0
byte* plexInit::plexSetScreen1_screen
byte* plexInit::plexSetScreen1_screen#0
byte* plexInit::plexSetScreen1_screen#1
byte* plexInit::screen
byte* plexInit::screen#0
byte* plexInit::screen#1
void plexShowSprite()
number~ plexShowSprite::$0
byte~ plexShowSprite::$10
byte~ plexShowSprite::$11
byte~ plexShowSprite::$2
byte~ plexShowSprite::$3
bool~ plexShowSprite::$4
number~ plexShowSprite::$5
number~ plexShowSprite::$6
bool~ plexShowSprite::$7
bool~ plexShowSprite::$8
number~ plexShowSprite::$9
number~ plexShowSprite::plexFreeAdd1_$0
number~ plexShowSprite::plexFreeAdd1_$1
number~ plexShowSprite::plexFreeAdd1_$2
byte plexShowSprite::plexFreeAdd1_ypos
byte plexShowSprite::plexFreeAdd1_ypos#0
byte plexShowSprite::plexFreeAdd1_ypos#1
byte plexShowSprite::plex_sprite_idx2
byte plexShowSprite::plex_sprite_idx2#0
byte plexShowSprite::plex_sprite_idx2#1
byte plexShowSprite::plex_sprite_idx2#2
byte plexShowSprite::xpos_idx
byte plexShowSprite::xpos_idx#0
byte plexShowSprite::ypos
byte plexShowSprite::ypos#0
void plexSort()
number~ plexSort::$1
bool~ plexSort::$2
bool~ plexSort::$3
number~ plexSort::$4
bool~ plexSort::$5
bool~ plexSort::$6
bool~ plexSort::$7
bool~ plexSort::$8
byte plexSort::m
byte plexSort::m#0
byte plexSort::m#1
byte plexSort::m#2
byte plexSort::m#3
byte plexSort::m#4
byte plexSort::m#5
byte plexSort::m#6
byte plexSort::nxt_idx
byte plexSort::nxt_idx#0
byte plexSort::nxt_idx#1
byte plexSort::nxt_idx#2
byte plexSort::nxt_idx#3
byte plexSort::nxt_y
byte plexSort::nxt_y#0
byte plexSort::nxt_y#1
byte plexSort::nxt_y#2
bool~ plexSort::plexFreePrepare1_$0
byte plexSort::plexFreePrepare1_s
byte plexSort::plexFreePrepare1_s#0
byte plexSort::plexFreePrepare1_s#1
byte plexSort::plexFreePrepare1_s#2
byte plexSort::s
byte plexSort::s#0
byte plexSort::s#1
byte plexSort::s#2
byte plexSort::s#3
byte plexSort::s#4
volatile byte plex_free_next loadstore
__interrupt(rom_min_c64) void plex_irq()
bool~ plex_irq::$0
byte~ plex_irq::$2
bool~ plex_irq::$3
number~ plex_irq::$4
bool~ plex_irq::$5
bool~ plex_irq::$6
byte plex_irq::plexFreeNextYpos1_return
byte plex_irq::plexFreeNextYpos1_return#0
byte plex_irq::plexFreeNextYpos1_return#1
byte plex_irq::plexFreeNextYpos1_return#2
byte plex_irq::plexFreeNextYpos1_return#3
byte plex_irq::rasterY
byte plex_irq::rasterY#0
byte plex_irq::rasterY#1
byte plex_irq::rasterY#2
byte plex_irq::rasterY#3
void plex_move()
bool~ plex_move::$0
bool~ plex_move::$1
bool~ plex_move::$2
bool~ plex_move::$3
byte~ plex_move::$4
bool~ plex_move::$5
byte~ plex_move::$6
byte plex_move::s
byte plex_move::s#0
byte plex_move::s#1
byte plex_move::s#2
byte plex_move::s#3
byte plex_move::s#4
byte plex_move::s#5
byte plex_move::s#6
byte plex_move::x_idx
byte plex_move::x_idx#0
byte plex_move::x_idx#1
byte plex_move::x_idx#2
byte plex_move::x_idx#3
byte plex_move::x_idx#4
byte plex_move::x_idx#5
byte plex_move::x_idx#6
byte plex_move::y_idx
byte plex_move::y_idx#0
byte plex_move::y_idx#1
byte plex_move::y_idx#2
byte plex_move::y_idx#3
byte plex_move::y_idx#4
byte plex_move::y_idx#5
byte plex_move::y_idx#6
volatile byte plex_show_idx loadstore
volatile byte plex_sprite_idx loadstore
volatile byte plex_sprite_msb loadstore
byte* scroll_text_next
byte* scroll_text_next#0
byte* scroll_text_next#1
byte* scroll_text_next#10
byte* scroll_text_next#11
byte* scroll_text_next#12
byte* scroll_text_next#13
byte* scroll_text_next#14
byte* scroll_text_next#15
byte* scroll_text_next#16
byte* scroll_text_next#17
byte* scroll_text_next#18
byte* scroll_text_next#19
byte* scroll_text_next#2
byte* scroll_text_next#20
byte* scroll_text_next#21
byte* scroll_text_next#22
byte* scroll_text_next#23
byte* scroll_text_next#24
byte* scroll_text_next#25
byte* scroll_text_next#26
byte* scroll_text_next#27
byte* scroll_text_next#28
byte* scroll_text_next#29
byte* scroll_text_next#3
byte* scroll_text_next#30
byte* scroll_text_next#31
byte* scroll_text_next#32
byte* scroll_text_next#33
byte* scroll_text_next#34
byte* scroll_text_next#35
byte* scroll_text_next#36
byte* scroll_text_next#37
byte* scroll_text_next#38
byte* scroll_text_next#4
byte* scroll_text_next#5
byte* scroll_text_next#6
byte* scroll_text_next#7
byte* scroll_text_next#8
byte* scroll_text_next#9
byte x_movement_idx
byte x_movement_idx#0
byte x_movement_idx#1
byte x_movement_idx#10
byte x_movement_idx#11
byte x_movement_idx#12
byte x_movement_idx#13
byte x_movement_idx#14
byte x_movement_idx#15
byte x_movement_idx#16
byte x_movement_idx#17
byte x_movement_idx#18
byte x_movement_idx#19
byte x_movement_idx#2
byte x_movement_idx#20
byte x_movement_idx#21
byte x_movement_idx#22
byte x_movement_idx#23
byte x_movement_idx#24
byte x_movement_idx#25
byte x_movement_idx#26
byte x_movement_idx#27
byte x_movement_idx#28
byte x_movement_idx#29
byte x_movement_idx#3
byte x_movement_idx#30
byte x_movement_idx#31
byte x_movement_idx#32
byte x_movement_idx#33
byte x_movement_idx#34
byte x_movement_idx#35
byte x_movement_idx#36
byte x_movement_idx#37
byte x_movement_idx#38
byte x_movement_idx#4
byte x_movement_idx#5
byte x_movement_idx#6
byte x_movement_idx#7
byte x_movement_idx#8
byte x_movement_idx#9
byte y_sin_idx
byte y_sin_idx#0
byte y_sin_idx#1
byte y_sin_idx#10
byte y_sin_idx#11
byte y_sin_idx#12
byte y_sin_idx#13
byte y_sin_idx#14
byte y_sin_idx#15
byte y_sin_idx#16
byte y_sin_idx#17
byte y_sin_idx#18
byte y_sin_idx#19
byte y_sin_idx#2
byte y_sin_idx#20
byte y_sin_idx#21
byte y_sin_idx#22
byte y_sin_idx#23
byte y_sin_idx#24
byte y_sin_idx#25
byte y_sin_idx#26
byte y_sin_idx#27
byte y_sin_idx#28
byte y_sin_idx#29
byte y_sin_idx#3
byte y_sin_idx#30
byte y_sin_idx#31
byte y_sin_idx#32
byte y_sin_idx#33
byte y_sin_idx#34
byte y_sin_idx#35
byte y_sin_idx#36
byte y_sin_idx#37
byte y_sin_idx#38
byte y_sin_idx#4
byte y_sin_idx#5
byte y_sin_idx#6
byte y_sin_idx#7
byte y_sin_idx#8
byte y_sin_idx#9
Fixing inline constructor with main::$13 = (byte)XMOVEMENT_HI[main::x#2] w= (byte)XMOVEMENT[main::x#2]
Fixing inline constructor with plex_move::$7 = (byte)XMOVEMENT_HI[plex_move::x_idx#2] w= (byte)XMOVEMENT[plex_move::x_idx#2]
Successful SSA optimization Pass2FixInlineConstructors
Adding number conversion cast (unumber) $100 in
Adding number conversion cast (unumber) $3f8 in plexInit::plexSetScreen1_$0 = plexInit::plexSetScreen1_screen#1 + $3f8
Adding number conversion cast (unumber) 1 in plexInit::i#1 = plexInit::i#2 + rangenext(0,PLEX_COUNT-1)
Adding number conversion cast (unumber) 1 in plexSort::$1 = plexSort::m#2 + 1
Adding number conversion cast (unumber) plexSort::$1 in plexSort::$1 = plexSort::m#2 + (unumber)1
Adding number conversion cast (unumber) 2 in plexSort::m#1 = plexSort::m#3 + rangenext(0,PLEX_COUNT-2)
Adding number conversion cast (unumber) 1 in plexSort::$4 = plexSort::s#3 + 1
Adding number conversion cast (unumber) plexSort::$4 in plexSort::$4 = plexSort::s#3 + (unumber)1
Adding number conversion cast (unumber) $ff in plexSort::$5 = plexSort::s#1 != $ff
Adding number conversion cast (unumber) 0 in plex_show_idx = 0
Adding number conversion cast (unumber) 0 in plex_sprite_idx = 0
Adding number conversion cast (unumber) 1 in plex_sprite_msb = 1
Adding number conversion cast (unumber) 0 in PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0
Adding number conversion cast (unumber) 0 in plex_free_next = 0
Adding number conversion cast (unumber) 2 in plexShowSprite::$0 = plex_sprite_idx * 2
Adding number conversion cast (unumber) plexShowSprite::$0 in plexShowSprite::$0 = plex_sprite_idx * (unumber)2
Adding number conversion cast (unumber) $16 in plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#1 + $16
Adding number conversion cast (unumber) plexShowSprite::plexFreeAdd1_$0 in plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#1 + (unumber)$16
Adding number conversion cast (unumber) 1 in plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1
Adding number conversion cast (unumber) plexShowSprite::plexFreeAdd1_$1 in plexShowSprite::plexFreeAdd1_$1 = plex_free_next + (unumber)1
Adding number conversion cast (unumber) 7 in plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7
Adding number conversion cast (unumber) plexShowSprite::plexFreeAdd1_$2 in plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & (unumber)7
Adding number conversion cast (unumber) 0 in plexShowSprite::$4 = plexShowSprite::$3 != 0
Adding number conversion cast (unumber) $ff in plexShowSprite::$9 = $ff ^ plex_sprite_msb
Adding number conversion cast (unumber) plexShowSprite::$9 in plexShowSprite::$9 = (unumber)$ff ^ plex_sprite_msb
Adding number conversion cast (unumber) 1 in plexShowSprite::$5 = plex_sprite_idx + 1
Adding number conversion cast (unumber) plexShowSprite::$5 in plexShowSprite::$5 = plex_sprite_idx + (unumber)1
Adding number conversion cast (unumber) 7 in plexShowSprite::$6 = plexShowSprite::$5 & 7
Adding number conversion cast (unumber) plexShowSprite::$6 in plexShowSprite::$6 = plexShowSprite::$5 & (unumber)7
Adding number conversion cast (unumber) 1 in plex_sprite_msb = plex_sprite_msb << 1
Adding number conversion cast (unumber) 0 in plexShowSprite::$7 = plex_sprite_msb == 0
Adding number conversion cast (unumber) 1 in plex_sprite_msb = 1
Adding number conversion cast (unumber) $40 in font_2x2_to_sprites::num_chars#0 = $40
Adding number conversion cast (unumber) $3fff in main::toD0181_$0 = main::toD0181_$7 & $3fff
Adding number conversion cast (unumber) main::toD0181_$0 in main::toD0181_$0 = main::toD0181_$7 & (unumber)$3fff
Adding number conversion cast (unumber) 4 in main::toD0181_$1 = main::toD0181_$0 * 4
Adding number conversion cast (unumber) main::toD0181_$1 in main::toD0181_$1 = main::toD0181_$0 * (unumber)4
Adding number conversion cast (unumber) main::toD0181_$2 in main::toD0181_$2 = > main::toD0181_$1
Adding number conversion cast (unumber) 4 in main::toD0181_$4 = main::toD0181_$3 / 4
Adding number conversion cast (unumber) main::toD0181_$4 in main::toD0181_$4 = main::toD0181_$3 / (unumber)4
Adding number conversion cast (unumber) $f in main::toD0181_$5 = main::toD0181_$4 & $f
Adding number conversion cast (unumber) main::toD0181_$5 in main::toD0181_$5 = main::toD0181_$4 & (unumber)$f
Adding number conversion cast (unumber) main::toD0181_$6 in main::toD0181_$6 = main::toD0181_$2 | main::toD0181_$5
Adding number conversion cast (unumber) 8 in main::x#1 = main::x#2 + 8
Adding number conversion cast (unumber) $ff in *SPRITES_ENABLE = $ff
Adding number conversion cast (unumber) $7f in *VIC_CONTROL = *VIC_CONTROL & $7f
Adding number conversion cast (unumber) $28 in *RASTER = $28
Adding number conversion cast (unumber) 8 in plex_move::y_idx#1 = plex_move::y_idx#2 + 8
Adding number conversion cast (unumber) 0 in plex_move::$0 = plex_move::x_idx#2 == 0
Adding number conversion cast (unumber) 8 in plex_move::x_idx#1 = plex_move::x_idx#3 + 8
Adding number conversion cast (unumber) 1 in plex_move::s#1 = plex_move::s#3 + rangenext(0,PLEX_COUNT-1)
Adding number conversion cast (unumber) 0 in plex_move::$2 = *scroll_text_next#12 == 0
Adding number conversion cast (unumber) 3 in y_sin_idx#3 = y_sin_idx#12 + 3
Adding number conversion cast (unumber) 3 in plex_irq::$4 = *RASTER + 3
Adding number conversion cast (unumber) plex_irq::$4 in plex_irq::$4 = *RASTER + (unumber)3
Adding number conversion cast (unumber) $28 in *RASTER = $28
Adding number conversion cast (unumber) $40*8 in font_2x2_to_sprites::$1 = font_2x2_to_sprites::char_current#2 + $40*8
Adding number conversion cast (unumber) 7 in font_2x2_to_sprites::$2 = font_2x2_to_sprites::i#2 & 7
Adding number conversion cast (unumber) font_2x2_to_sprites::$2 in font_2x2_to_sprites::$2 = font_2x2_to_sprites::i#2 & (unumber)7
Adding number conversion cast (unumber) 7 in font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7
Adding number conversion cast (unumber) font_2x2_to_sprites::$3 in font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & (unumber)7
Adding number conversion cast (unumber) 0 in font_2x2_to_sprites::sprite#2[font_2x2_to_sprites::sprite_idx#2] = 0
Adding number conversion cast (unumber) 7 in font_2x2_to_sprites::$4 = font_2x2_to_sprites::i#2 == 7
Adding number conversion cast (unumber) $80*8 in font_2x2_to_sprites::$9 = font_2x2_to_sprites::char_current#3 + $80*8
Adding number conversion cast (unumber) $c0*8 in font_2x2_to_sprites::$10 = font_2x2_to_sprites::char_current#3 + $c0*8
Adding number conversion cast (unumber) $f in font_2x2_to_sprites::$5 = font_2x2_to_sprites::i#3 == $f
Adding number conversion cast (unumber) ' '*8 in font_2x2_to_sprites::$7 = font_2x2_to_sprites::font_2x2#2 + ' '*8
Adding number conversion cast (unumber) 8 in font_2x2_to_sprites::$7 = font_2x2_to_sprites::font_2x2#2 + (unumber)' '*8
Adding number conversion cast (unumber) ' '*8 in font_2x2_to_sprites::$8 = font_2x2_to_sprites::font_2x2#2 + ' '*8
Adding number conversion cast (unumber) 8 in font_2x2_to_sprites::$8 = font_2x2_to_sprites::font_2x2#2 + (unumber)' '*8
Adding number conversion cast (unumber) 8 in font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#4 + 8
Adding number conversion cast (unumber) $40 in font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#3 + $40
Adding number conversion cast (unumber) $40*8 in font_2x2::$0 = font_2x2::next_2x2#2 + $40*8
Adding number conversion cast (unumber) $80 in font_2x2::$1 = font_2x2::glyph_bits#2 & $80
Adding number conversion cast (unumber) font_2x2::$1 in font_2x2::$1 = font_2x2::glyph_bits#2 & (unumber)$80
Adding number conversion cast (unumber) 0 in font_2x2::$22 = 0 != font_2x2::$1
Adding number conversion cast (unumber) 1 in font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1
Adding number conversion cast (unumber) 1 in font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1
Adding number conversion cast (unumber) 1 in font_2x2::glyph_bits#1 = font_2x2::glyph_bits#3 << 1
Adding number conversion cast (unumber) 1 in font_2x2::$11 = font_2x2::l2#3 + 1
Adding number conversion cast (unumber) font_2x2::$11 in font_2x2::$11 = font_2x2::l2#3 + (unumber)1
Adding number conversion cast (unumber) 1 in font_2x2::$14 = font_2x2::l2#3 + 1
Adding number conversion cast (unumber) font_2x2::$14 in font_2x2::$14 = font_2x2::l2#3 + (unumber)1
Adding number conversion cast (unumber) 2 in font_2x2::l2#1 = font_2x2::l2#3 + 2
Adding number conversion cast (unumber) 8 in font_2x2::$16 = font_2x2::l2#1 == 8
Adding number conversion cast (unumber) $80*8 in font_2x2::$18 = font_2x2::next_2x2#3 + $80*8
Adding number conversion cast (unumber) $c0*8 in font_2x2::$19 = font_2x2::next_2x2#3 + $c0*8
Adding number conversion cast (unumber) 0 in font_2x2::l2#2 = 0
Adding number conversion cast (unumber) 8 in font_2x2::next_2x2#1 = font_2x2::next_2x2#4 + 8
Adding number conversion cast (unumber) 8 in font_2x2::next_original#1 = font_2x2::next_original#3 + 8
Adding number conversion cast (unumber) $40 in __start::__init1_toSpritePtr1_$0 = __start::__init1_toSpritePtr1_$1 / $40
Adding number conversion cast (unumber) __start::__init1_toSpritePtr1_$0 in __start::__init1_toSpritePtr1_$0 = __start::__init1_toSpritePtr1_$1 / (unumber)$40
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast plex_show_idx = (unumber)0
Inlining cast plex_sprite_idx = (unumber)0
Inlining cast plex_sprite_msb = (unumber)1
Inlining cast PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = (unumber)0
Inlining cast plex_free_next = (unumber)0
Inlining cast plex_sprite_msb = (unumber)1
Inlining cast font_2x2_to_sprites::num_chars#0 = (unumber)$40
Inlining cast *SPRITES_ENABLE = (unumber)$ff
Inlining cast *RASTER = (unumber)$28
Inlining cast *RASTER = (unumber)$28
Inlining cast font_2x2_to_sprites::sprite#2[font_2x2_to_sprites::sprite_idx#2] = (unumber)0
Inlining cast font_2x2::l2#2 = (unumber)0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 53248
Simplifying constant pointer cast (byte*) 53249
Simplifying constant pointer cast (byte*) 53264
Simplifying constant pointer cast (byte*) 53287
Simplifying constant pointer cast (byte*) 53269
Simplifying constant pointer cast (byte*) 53266
Simplifying constant pointer cast (byte*) 53265
Simplifying constant pointer cast (byte*) 53272
Simplifying constant pointer cast (byte*) 53273
Simplifying constant pointer cast (byte*) 53274
Simplifying constant pointer cast (byte*) 1
Simplifying constant pointer cast (byte*) 53248
Simplifying constant pointer cast (struct MOS6526_CIA*) 56320
Simplifying constant pointer cast (void()**) 788
Simplifying constant pointer cast (byte*) 4096
Simplifying constant pointer cast (byte*) 12288
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast $100
Simplifying constant integer cast $3f8
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 1
Simplifying constant integer cast $ff
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast $16
Simplifying constant integer cast 1
Simplifying constant integer cast 7
Simplifying constant integer cast 0
Simplifying constant integer cast $ff
Simplifying constant integer cast 1
Simplifying constant integer cast 7
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast $40
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast $f
Simplifying constant integer cast XMOVEMENT_HI[main::x#2]
Simplifying constant integer cast XMOVEMENT[main::x#2]
Simplifying constant integer cast 8
Simplifying constant integer cast $ff
Simplifying constant integer cast $7f
Simplifying constant integer cast $28
Simplifying constant integer cast 8
Simplifying constant integer cast XMOVEMENT_HI[plex_move::x_idx#2]
Simplifying constant integer cast XMOVEMENT[plex_move::x_idx#2]
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 3
Simplifying constant integer cast 3
Simplifying constant integer cast $28
Simplifying constant integer cast 7
Simplifying constant integer cast 7
Simplifying constant integer cast 0
Simplifying constant integer cast 7
Simplifying constant integer cast $f
Simplifying constant integer cast ' '*(unumber)8
Simplifying constant integer cast 8
Simplifying constant integer cast ' '*(unumber)8
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast $40
Simplifying constant integer cast $80
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 8
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast $40
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (word) $100
Finalized unsigned number type (word) $3f8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $16
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $40
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) $7f
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) $f
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $40
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in plexSort::$1 = plexSort::m#2 + 1
Inferred type updated to byte in plexSort::$4 = plexSort::s#3 + 1
Inferred type updated to byte in plexShowSprite::$0 = plex_sprite_idx * 2
Inferred type updated to byte in plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#1 + $16
Inferred type updated to byte in plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1
Inferred type updated to byte in plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7
Inferred type updated to byte in plexShowSprite::$9 = $ff ^ plex_sprite_msb
Inferred type updated to byte in plexShowSprite::$5 = plex_sprite_idx + 1
Inferred type updated to byte in plexShowSprite::$6 = plexShowSprite::$5 & 7
Inferred type updated to word in main::toD0181_$0 = main::toD0181_$7 & $3fff
Inferred type updated to word in main::toD0181_$1 = main::toD0181_$0 * 4
Inferred type updated to byte in main::toD0181_$2 = > main::toD0181_$1
Inferred type updated to byte in main::toD0181_$4 = main::toD0181_$3 / 4
Inferred type updated to byte in main::toD0181_$5 = main::toD0181_$4 & $f
Inferred type updated to byte in main::toD0181_$6 = main::toD0181_$2 | main::toD0181_$5
Inferred type updated to byte in plex_irq::$4 = *RASTER + 3
Inferred type updated to byte in font_2x2_to_sprites::$2 = font_2x2_to_sprites::i#2 & 7
Inferred type updated to byte in font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7
Inferred type updated to byte in font_2x2::$1 = font_2x2::glyph_bits#2 & $80
Inferred type updated to byte in font_2x2::$11 = font_2x2::l2#3 + 1
Inferred type updated to byte in font_2x2::$14 = font_2x2::l2#3 + 1
Inferred type updated to word in __start::__init1_toSpritePtr1_$0 = __start::__init1_toSpritePtr1_$1 / $40
Inversing boolean not [18] plexSort::$3 = plexSort::nxt_y#0 >= PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]] from [17] plexSort::$2 = plexSort::nxt_y#0 < PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]
Inversing boolean not [78] plexShowSprite::$8 = plex_sprite_msb != 0 from [77] plexShowSprite::$7 = plex_sprite_msb == 0
Inversing boolean not [183] plex_move::$1 = plex_move::x_idx#2 != 0 from [182] plex_move::$0 = plex_move::x_idx#2 == 0
Inversing boolean not [192] plex_move::$3 = *scroll_text_next#12 != 0 from [191] plex_move::$2 = *scroll_text_next#12 == 0
Inversing boolean not [263] font_2x2_to_sprites::$6 = font_2x2_to_sprites::i#3 != $f from [262] font_2x2_to_sprites::$5 = font_2x2_to_sprites::i#3 == $f
Inversing boolean not [326] font_2x2::$17 = font_2x2::l2#1 != 8 from [325] font_2x2::$16 = font_2x2::l2#1 == 8
Successful SSA optimization Pass2UnaryNotSimplification
Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Alias plexInit::plexSetScreen1_screen#0 = plexInit::screen#1 plexInit::plexSetScreen1_screen#1
Alias plexSort::m#2 = plexSort::m#4 plexSort::s#0
Alias plexSort::nxt_y#0 = plexSort::nxt_y#2
Alias plexSort::nxt_idx#0 = plexSort::nxt_idx#3
Alias plexSort::s#1 = plexSort::s#4
Alias plexSort::nxt_idx#1 = plexSort::nxt_idx#2
Alias plexSort::m#5 = plexSort::m#6
Alias plexShowSprite::plex_sprite_idx2#0 = plexShowSprite::$0 plexShowSprite::plex_sprite_idx2#2 plexShowSprite::plex_sprite_idx2#1
Alias plexShowSprite::plexFreeAdd1_ypos#0 = plexShowSprite::ypos#0 plexShowSprite::plexFreeAdd1_ypos#1
Alias SPRITE_0#12 = SPRITE_0#24 SPRITE_0#27 SPRITE_0#21 SPRITE_0#18 SPRITE_0#15 SPRITE_0#9
Alias scroll_text_next#32 = scroll_text_next#37 scroll_text_next#38 scroll_text_next#36 scroll_text_next#35 scroll_text_next#34 scroll_text_next#33
Alias y_sin_idx#32 = y_sin_idx#37 y_sin_idx#38 y_sin_idx#36 y_sin_idx#35 y_sin_idx#34 y_sin_idx#33
Alias x_movement_idx#32 = x_movement_idx#37 x_movement_idx#38 x_movement_idx#36 x_movement_idx#35 x_movement_idx#34 x_movement_idx#33
Alias main::toD0181_screen#0 = main::toD0181_screen#1
Alias main::toD0181_gfx#0 = main::toD0181_gfx#1
Alias main::toD0181_return#0 = main::toD0181_$6 main::toD0181_return#2 main::toD0181_return#1 main::toD0181_return#3 main::$3
Alias SPRITE_0#2 = SPRITE_0#5 SPRITE_0#22
Alias main::s#2 = main::s#3
Alias main::x#2 = main::x#3
Alias scroll_text_next#29 = scroll_text_next#31 scroll_text_next#30
Alias y_sin_idx#27 = y_sin_idx#31 y_sin_idx#30
Alias x_movement_idx#27 = x_movement_idx#31 x_movement_idx#30
Alias scroll_text_next#17 = scroll_text_next#23
Alias y_sin_idx#16 = y_sin_idx#21
Alias x_movement_idx#16 = x_movement_idx#21
Alias SPRITE_0#16 = SPRITE_0#19 SPRITE_0#28 SPRITE_0#25
Alias scroll_text_next#0 = scroll_text_next#9 scroll_text_next#24
Alias y_sin_idx#0 = y_sin_idx#8 y_sin_idx#22
Alias x_movement_idx#0 = x_movement_idx#8 x_movement_idx#22
Alias scroll_text_next#18 = scroll_text_next#26
Alias y_sin_idx#17 = y_sin_idx#24
Alias x_movement_idx#17 = x_movement_idx#24
Alias SPRITE_0#17 = SPRITE_0#20 SPRITE_0#29 SPRITE_0#26
Alias scroll_text_next#1 = scroll_text_next#10 scroll_text_next#25
Alias y_sin_idx#1 = y_sin_idx#9 y_sin_idx#23
Alias x_movement_idx#1 = x_movement_idx#9 x_movement_idx#23
Alias scroll_text_next#11 = scroll_text_next#19 scroll_text_next#2
Alias y_sin_idx#10 = y_sin_idx#18 y_sin_idx#2
Alias x_movement_idx#10 = x_movement_idx#18 x_movement_idx#2
Alias scroll_text_next#12 = scroll_text_next#20
Alias SPRITE_0#10 = SPRITE_0#6 SPRITE_0#7
Alias plex_move::s#2 = plex_move::s#5 plex_move::s#6
Alias plex_move::x_idx#2 = plex_move::x_idx#5 plex_move::x_idx#6
Alias plex_move::y_idx#1 = plex_move::y_idx#5 plex_move::y_idx#6
Alias y_sin_idx#25 = y_sin_idx#28 y_sin_idx#29
Alias x_movement_idx#25 = x_movement_idx#28 x_movement_idx#29
Alias y_sin_idx#12 = y_sin_idx#19
Alias x_movement_idx#12 = x_movement_idx#19
Alias scroll_text_next#14 = scroll_text_next#21 scroll_text_next#28 scroll_text_next#5
Alias y_sin_idx#13 = y_sin_idx#3 y_sin_idx#4
Alias x_movement_idx#13 = x_movement_idx#3 x_movement_idx#4
Alias plex_irq::plexFreeNextYpos1_return#0 = plex_irq::plexFreeNextYpos1_return#2 plex_irq::plexFreeNextYpos1_return#1 plex_irq::plexFreeNextYpos1_return#3 plex_irq::$2 plex_irq::rasterY#1 plex_irq::rasterY#3 plex_irq::rasterY#2
Alias font_2x2_to_sprites::char_current#0 = font_2x2_to_sprites::font_2x2#1
Alias font_2x2_to_sprites::sprite#0 = font_2x2_to_sprites::sprites#1
Alias font_2x2_to_sprites::char_current#2 = font_2x2_to_sprites::char_current#5 font_2x2_to_sprites::char_left#0
Alias font_2x2_to_sprites::sprite#4 = font_2x2_to_sprites::sprite#6
Alias font_2x2_to_sprites::font_2x2#5 = font_2x2_to_sprites::font_2x2#7
Alias font_2x2_to_sprites::c#2 = font_2x2_to_sprites::c#9
Alias font_2x2_to_sprites::num_chars#1 = font_2x2_to_sprites::num_chars#9
Alias font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::$1
Alias font_2x2_to_sprites::char_current#3 = font_2x2_to_sprites::char_current#6 font_2x2_to_sprites::char_current#8 font_2x2_to_sprites::char_current#9
Alias font_2x2_to_sprites::i#2 = font_2x2_to_sprites::i#5 font_2x2_to_sprites::i#3 font_2x2_to_sprites::i#6
Alias font_2x2_to_sprites::sprite#2 = font_2x2_to_sprites::sprite#7 font_2x2_to_sprites::sprite#8 font_2x2_to_sprites::sprite#9
Alias font_2x2_to_sprites::sprite_idx#3 = font_2x2_to_sprites::sprite_idx#6 font_2x2_to_sprites::sprite_idx#7 font_2x2_to_sprites::sprite_idx#8
Alias font_2x2_to_sprites::c#5 = font_2x2_to_sprites::c#8 font_2x2_to_sprites::c#6 font_2x2_to_sprites::c#7
Alias font_2x2_to_sprites::num_chars#5 = font_2x2_to_sprites::num_chars#8 font_2x2_to_sprites::num_chars#6 font_2x2_to_sprites::num_chars#7
Alias font_2x2_to_sprites::font_2x2#2 = font_2x2_to_sprites::font_2x2#8 font_2x2_to_sprites::font_2x2#4 font_2x2_to_sprites::font_2x2#3
Alias font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::$9
Alias font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::$10
Alias font_2x2_to_sprites::char_left#3 = font_2x2_to_sprites::char_left#5
Alias font_2x2_to_sprites::char_right#3 = font_2x2_to_sprites::char_right#5
Alias font_2x2_to_sprites::char_left#2 = font_2x2_to_sprites::$7
Alias font_2x2_to_sprites::char_right#2 = font_2x2_to_sprites::$8
Alias font_2x2_to_sprites::char_current#4 = font_2x2_to_sprites::char_current#7
Alias font_2x2_to_sprites::sprite#3 = font_2x2_to_sprites::sprite#5
Alias font_2x2_to_sprites::c#3 = font_2x2_to_sprites::c#4
Alias font_2x2_to_sprites::num_chars#3 = font_2x2_to_sprites::num_chars#4
Alias font_2x2_to_sprites::font_2x2#6 = font_2x2_to_sprites::font_2x2#9
Alias font_2x2::next_original#0 = font_2x2::font_original#1
Alias font_2x2::next_2x2#0 = font_2x2::font_2x2#1
Alias font_2x2::next_2x2_left#0 = font_2x2::next_2x2#2
Alias font_2x2::next_2x2_right#0 = font_2x2::$0
Alias font_2x2::glyph_bits_2x2#5 = font_2x2::glyph_bits_2x2#7 font_2x2::glyph_bits_2x2#6
Alias font_2x2::glyph_bits#2 = font_2x2::glyph_bits#4 font_2x2::glyph_bits#5
Alias font_2x2::b#3 = font_2x2::b#5 font_2x2::b#4
Alias font_2x2::next_2x2_left#4 = font_2x2::next_2x2_left#6 font_2x2::next_2x2_left#5
Alias font_2x2::l2#5 = font_2x2::l2#7 font_2x2::l2#6
Alias font_2x2::next_2x2_right#4 = font_2x2::next_2x2_right#6 font_2x2::next_2x2_right#5
Alias font_2x2::l#7 = font_2x2::l#9 font_2x2::l#8
Alias font_2x2::next_2x2#10 = font_2x2::next_2x2#8 font_2x2::next_2x2#9
Alias font_2x2::next_original#10 = font_2x2::next_original#9 font_2x2::next_original#11
Alias font_2x2::c#7 = font_2x2::c#9 font_2x2::c#8
Alias font_2x2::glyph_bit#0 = font_2x2::$4
Alias font_2x2::glyph_bits_2x2#1 = font_2x2::$6
Alias font_2x2::glyph_bits_2x2#2 = font_2x2::$8 font_2x2::glyph_bits_2x2#4
Alias font_2x2::next_2x2_left#2 = font_2x2::next_2x2_left#3
Alias font_2x2::l2#3 = font_2x2::l2#4
Alias font_2x2::next_2x2_right#2 = font_2x2::next_2x2_right#3
Alias font_2x2::l#4 = font_2x2::l#6 font_2x2::l#5
Alias font_2x2::next_2x2#3 = font_2x2::next_2x2#5 font_2x2::next_2x2#7
Alias font_2x2::next_original#6 = font_2x2::next_original#8 font_2x2::next_original#7
Alias font_2x2::c#4 = font_2x2::c#6 font_2x2::c#5
Alias font_2x2::next_2x2_left#1 = font_2x2::$18
Alias font_2x2::next_2x2_right#1 = font_2x2::$19
Alias font_2x2::next_2x2#4 = font_2x2::next_2x2#6
Alias font_2x2::next_original#3 = font_2x2::next_original#5
Alias font_2x2::c#2 = font_2x2::c#3
Alias __start::__init1_toSpritePtr1_sprite#0 = __start::__init1_toSpritePtr1_sprite#1
Alias SPRITE_0#0 = __start::__init1_toSpritePtr1_return#2 __start::__init1_toSpritePtr1_return#0 __start::__init1_toSpritePtr1_return#1 __start::__init1_toSpritePtr1_return#3 __start::__init1_$0 SPRITE_0#11 SPRITE_0#8 SPRITE_0#4 SPRITE_0#1
Alias scroll_text_next#22 = scroll_text_next#6
Alias y_sin_idx#20 = y_sin_idx#5
Alias x_movement_idx#20 = x_movement_idx#5
Alias scroll_text_next#15 = scroll_text_next#7 scroll_text_next#16 scroll_text_next#8
Alias y_sin_idx#14 = y_sin_idx#6 y_sin_idx#15 y_sin_idx#7
Alias x_movement_idx#14 = x_movement_idx#6 x_movement_idx#15 x_movement_idx#7
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Alias SPRITE_0#10 = SPRITE_0#3
Alias plex_move::s#2 = plex_move::s#4
Alias plex_move::x_idx#2 = plex_move::x_idx#4
Alias plex_move::y_idx#1 = plex_move::y_idx#4
Alias y_sin_idx#25 = y_sin_idx#26
Alias x_movement_idx#25 = x_movement_idx#26
Alias font_2x2_to_sprites::i#2 = font_2x2_to_sprites::i#4
Alias font_2x2_to_sprites::sprite#2 = font_2x2_to_sprites::sprite#3
Alias font_2x2_to_sprites::sprite_idx#3 = font_2x2_to_sprites::sprite_idx#5
Alias font_2x2_to_sprites::char_current#3 = font_2x2_to_sprites::char_current#4
Alias font_2x2_to_sprites::c#3 = font_2x2_to_sprites::c#5
Alias font_2x2_to_sprites::num_chars#3 = font_2x2_to_sprites::num_chars#5
Alias font_2x2_to_sprites::font_2x2#2 = font_2x2_to_sprites::font_2x2#6
Alias font_2x2::glyph_bits_2x2#3 = font_2x2::glyph_bits_2x2#5
Alias font_2x2::glyph_bits#2 = font_2x2::glyph_bits#3
Alias font_2x2::b#2 = font_2x2::b#3
Alias font_2x2::next_2x2_left#2 = font_2x2::next_2x2_left#4
Alias font_2x2::l2#3 = font_2x2::l2#5
Alias font_2x2::next_2x2_right#2 = font_2x2::next_2x2_right#4
Alias font_2x2::l#3 = font_2x2::l#4 font_2x2::l#7
Alias font_2x2::next_2x2#10 = font_2x2::next_2x2#3 font_2x2::next_2x2#4
Alias font_2x2::next_original#10 = font_2x2::next_original#6 font_2x2::next_original#3
Alias font_2x2::c#2 = font_2x2::c#4 font_2x2::c#7
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Alias plex_move::x_idx#2 = plex_move::x_idx#3
Alias plex_move::s#2 = plex_move::s#3
Alias plex_move::y_idx#1 = plex_move::y_idx#3
Alias y_sin_idx#12 = y_sin_idx#25
Alias x_movement_idx#12 = x_movement_idx#25
Alias SPRITE_0#10 = SPRITE_0#14
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Identical Phi Values plexInit::plexSetScreen1_screen#0 plexInit::screen#0
Identical Phi Values plexSort::nxt_y#1 plexSort::nxt_y#0
Identical Phi Values plexSort::nxt_idx#1 plexSort::nxt_idx#0
Identical Phi Values plexSort::m#5 plexSort::m#2
Identical Phi Values SPRITE_0#12 SPRITE_0#0
Identical Phi Values scroll_text_next#32 scroll_text_next#22
Identical Phi Values y_sin_idx#32 y_sin_idx#20
Identical Phi Values x_movement_idx#32 x_movement_idx#20
Identical Phi Values SPRITE_0#2 SPRITE_0#12
Identical Phi Values scroll_text_next#29 scroll_text_next#32
Identical Phi Values y_sin_idx#27 y_sin_idx#32
Identical Phi Values x_movement_idx#27 x_movement_idx#32
Identical Phi Values scroll_text_next#17 scroll_text_next#29
Identical Phi Values y_sin_idx#16 y_sin_idx#27
Identical Phi Values x_movement_idx#16 x_movement_idx#27
Identical Phi Values SPRITE_0#16 SPRITE_0#2
Identical Phi Values scroll_text_next#0 scroll_text_next#14
Identical Phi Values y_sin_idx#0 y_sin_idx#13
Identical Phi Values x_movement_idx#0 x_movement_idx#13
Identical Phi Values scroll_text_next#18 scroll_text_next#11
Identical Phi Values y_sin_idx#17 y_sin_idx#10
Identical Phi Values x_movement_idx#17 x_movement_idx#10
Identical Phi Values SPRITE_0#17 SPRITE_0#23
Identical Phi Values scroll_text_next#1 scroll_text_next#14
Identical Phi Values y_sin_idx#1 y_sin_idx#13
Identical Phi Values x_movement_idx#1 x_movement_idx#13
Identical Phi Values y_sin_idx#12 y_sin_idx#11
Identical Phi Values x_movement_idx#12 x_movement_idx#11
Identical Phi Values SPRITE_0#10 SPRITE_0#13
Identical Phi Values font_2x2_to_sprites::char_current#0 font_2x2_to_sprites::font_2x2#0
Identical Phi Values font_2x2_to_sprites::sprite#0 font_2x2_to_sprites::sprites#0
Identical Phi Values font_2x2_to_sprites::num_chars#2 font_2x2_to_sprites::num_chars#0
Identical Phi Values font_2x2_to_sprites::sprite#2 font_2x2_to_sprites::sprite#4
Identical Phi Values font_2x2_to_sprites::char_current#3 font_2x2_to_sprites::char_current#2
Identical Phi Values font_2x2_to_sprites::font_2x2#2 font_2x2_to_sprites::font_2x2#5
Identical Phi Values font_2x2_to_sprites::c#3 font_2x2_to_sprites::c#2
Identical Phi Values font_2x2_to_sprites::num_chars#3 font_2x2_to_sprites::num_chars#1
Identical Phi Values font_2x2::next_original#0 font_2x2::font_original#0
Identical Phi Values font_2x2::next_2x2#0 font_2x2::font_2x2#0
Identical Phi Values font_2x2::next_2x2_left#2 font_2x2::next_2x2_left#7
Identical Phi Values font_2x2::l2#3 font_2x2::l2#8
Identical Phi Values font_2x2::next_2x2_right#2 font_2x2::next_2x2_right#7
Identical Phi Values font_2x2::l#3 font_2x2::l#2
Identical Phi Values font_2x2::next_2x2#10 font_2x2::next_2x2#11
Identical Phi Values font_2x2::next_original#10 font_2x2::next_original#2
Identical Phi Values font_2x2::c#2 font_2x2::c#10
Identical Phi Values scroll_text_next#15 scroll_text_next#11
Identical Phi Values y_sin_idx#14 y_sin_idx#10
Identical Phi Values x_movement_idx#14 x_movement_idx#10
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values plexSort::m#3 plexSort::m#2
Identical Phi Values scroll_text_next#11 scroll_text_next#14
Identical Phi Values y_sin_idx#10 y_sin_idx#13
Identical Phi Values x_movement_idx#10 x_movement_idx#13
Identical Phi Values SPRITE_0#23 SPRITE_0#0
Identical Phi Values font_2x2_to_sprites::num_chars#1 font_2x2_to_sprites::num_chars#0
Identical Phi Values font_2x2_to_sprites::font_2x2#5 font_2x2_to_sprites::font_2x2#0
Identical Phi Values font_2x2::next_original#2 font_2x2::next_original#4
Identical Phi Values font_2x2::next_2x2#11 font_2x2::next_2x2_left#0
Identical Phi Values font_2x2::c#10 font_2x2::c#11
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values SPRITE_0#13 SPRITE_0#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [65] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD
Identified duplicate assignment right side [249] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition plexInit::$1 [8] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1
Simple Condition plexSort::$3 [16] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2
Simple Condition plexSort::$8 [20] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1
Simple Condition plexSort::plexFreePrepare1_$0 [39] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1
Simple Condition plexShowSprite::$4 [58] if(plexShowSprite::$3!=0) goto plexShowSprite::@1
Simple Condition plexShowSprite::$8 [68] if(plex_sprite_msb!=0) goto plexShowSprite::@return
Simple Condition main::$6 [100] if(main::s#2<PLEX_COUNT) goto main::@2
Simple Condition main::$8 [114] if(main::s1#1!=rangelast(0,7)) goto main::@4
Simple Condition plex_move::$1 [147] if(plex_move::x_idx#2!=0) goto plex_move::@2
Simple Condition plex_move::$5 [152] if(plex_move::s#1!=rangelast(0,PLEX_COUNT-1)) goto plex_move::@1
Simple Condition plex_move::$3 [154] if(*scroll_text_next#12!=0) goto plex_move::@3
Simple Condition plex_irq::$0 [173] if(plex_show_idx<PLEX_COUNT) goto plex_irq::@1
Simple Condition font_2x2_to_sprites::$0 [184] if(font_2x2_to_sprites::c#2<font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2
Simple Condition font_2x2_to_sprites::$4 [198] if(font_2x2_to_sprites::i#2==7) goto font_2x2_to_sprites::@4
Simple Condition font_2x2_to_sprites::$6 [202] if(font_2x2_to_sprites::i#2!=$f) goto font_2x2_to_sprites::@5
Simple Condition font_2x2_to_sprites::$11 [208] if(font_2x2_to_sprites::i#1!=rangelast(0,$14)) goto font_2x2_to_sprites::@3
Simple Condition font_2x2::$22 [226] if(0!=font_2x2::$1) goto font_2x2::@4
Simple Condition font_2x2::$9 [237] if(font_2x2::b#1!=rangelast(0,7)) goto font_2x2::@3
Simple Condition font_2x2::$17 [250] if(font_2x2::l2#1!=8) goto font_2x2::@9
Simple Condition font_2x2::$20 [254] if(font_2x2::l#1!=rangelast(0,7)) goto font_2x2::@2
Simple Condition font_2x2::$21 [262] if(font_2x2::c#1!=rangelast(0,$3f)) goto font_2x2::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting && if()-condition to two if()s [27] plexSort::$7 = plexSort::$5 && plexSort::$6
Rewriting ! if()-condition to reversed if() [129] main::$9 = ! frame_done
Rewriting && if()-condition to two if()s [170] plex_irq::$6 = plex_irq::$3 && plex_irq::$5
Successful SSA optimization Pass2ConditionalAndOrRewriting
Constant plexInit::i#0 = 0
Constant plexSort::m#0 = 0
Constant plexSort::plexFreePrepare1_s#0 = 0
Constant font_2x2::font_original#0 = CHARGEN
Constant font_2x2::font_2x2#0 = FONT
Constant font_2x2_to_sprites::font_2x2#0 = FONT
Constant font_2x2_to_sprites::sprites#0 = SPRITES
Constant font_2x2_to_sprites::num_chars#0 = $40
Constant plexInit::screen#0 = SCREEN
Constant main::toD0181_screen#0 = SCREEN
Constant main::toD0181_gfx#0 = CHARSET_DEFAULT
Constant main::s#0 = 0
Constant main::x#0 = 0
Constant main::s1#0 = 0
Constant plex_move::s#0 = 0
Constant scroll_text_next#4 = SCROLL_TEXT
Constant plex_irq::rasterY#0 = 0
Constant font_2x2_to_sprites::c#0 = 0
Constant font_2x2_to_sprites::sprite_idx#0 = 0
Constant font_2x2_to_sprites::i#0 = 0
Constant font_2x2::c#0 = 0
Constant font_2x2::l2#0 = 0
Constant font_2x2::l#0 = 0
Constant font_2x2::glyph_bits_2x2#0 = 0
Constant font_2x2::b#0 = 0
Constant font_2x2::$3 = 1
Constant font_2x2::$2 = 0
Constant font_2x2::l2#2 = 0
Constant __start::__init1_toSpritePtr1_sprite#0 = SPRITES
Constant scroll_text_next#22 = SCROLL_TEXT
Constant y_sin_idx#20 = 0
Constant x_movement_idx#20 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant main::toD0181_$7 = (word)main::toD0181_screen#0
Constant __start::__init1_toSpritePtr1_$1 = (word)__start::__init1_toSpritePtr1_sprite#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (word)main::toD0181_gfx#0 in [91] main::toD0181_$3 = > (word)main::toD0181_gfx#0
Successful SSA optimization Pass2ConstantValues
if() condition always true - replacing block destination [127] if(true) goto main::@7
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [6] plexInit::i#1 = ++ plexInit::i#2 to ++
Resolved ranged comparison value [8] if(plexInit::i#1!=rangelast(0,PLEX_COUNT-1)) goto plexInit::@1 to PLEX_COUNT-1+1
Resolved ranged next value [18] plexSort::m#1 = ++ plexSort::m#2 to ++
Resolved ranged comparison value [20] if(plexSort::m#1!=rangelast(0,PLEX_COUNT-2)) goto plexSort::@1 to PLEX_COUNT-2+1
Resolved ranged next value [37] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 to ++
Resolved ranged comparison value [39] if(plexSort::plexFreePrepare1_s#1!=rangelast(0,7)) goto plexSort::plexFreePrepare1_@1 to 8
Resolved ranged next value [112] main::s1#1 = ++ main::s1#2 to ++
Resolved ranged comparison value [114] if(main::s1#1!=rangelast(0,7)) goto main::@4 to 8
Resolved ranged next value [150] plex_move::s#1 = ++ plex_move::s#2 to ++
Resolved ranged comparison value [152] if(plex_move::s#1!=rangelast(0,PLEX_COUNT-1)) goto plex_move::@1 to PLEX_COUNT-1+1
Resolved ranged next value [206] font_2x2_to_sprites::i#1 = ++ font_2x2_to_sprites::i#2 to ++
Resolved ranged comparison value [208] if(font_2x2_to_sprites::i#1!=rangelast(0,$14)) goto font_2x2_to_sprites::@3 to $15
Resolved ranged next value [235] font_2x2::b#1 = ++ font_2x2::b#2 to ++
Resolved ranged comparison value [237] if(font_2x2::b#1!=rangelast(0,7)) goto font_2x2::@3 to 8
Resolved ranged next value [252] font_2x2::l#1 = ++ font_2x2::l#2 to ++
Resolved ranged comparison value [254] if(font_2x2::l#1!=rangelast(0,7)) goto font_2x2::@2 to 8
Resolved ranged next value [260] font_2x2::c#1 = ++ font_2x2::c#11 to ++
Resolved ranged comparison value [262] if(font_2x2::c#1!=rangelast(0,$3f)) goto font_2x2::@1 to $40
Eliminating unused constant plex_irq::rasterY#0
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Adding number conversion cast (unumber) PLEX_COUNT-1+1 in if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1
Adding number conversion cast (unumber) 1 in if(plexInit::i#1!=(unumber)PLEX_COUNT-1+1) goto plexInit::@1
Adding number conversion cast (unumber) PLEX_COUNT-2+1 in if(plexSort::m#1!=PLEX_COUNT-2+1) goto plexSort::@1
Adding number conversion cast (unumber) 1 in if(plexSort::m#1!=(unumber)PLEX_COUNT-2+1) goto plexSort::@1
Adding number conversion cast (unumber) 8 in if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1
Adding number conversion cast (unumber) 8 in if(main::s1#1!=8) goto main::@4
Adding number conversion cast (unumber) PLEX_COUNT-1+1 in if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1
Adding number conversion cast (unumber) 1 in if(plex_move::s#1!=(unumber)PLEX_COUNT-1+1) goto plex_move::@1
Adding number conversion cast (unumber) $15 in if(font_2x2_to_sprites::i#1!=$15) goto font_2x2_to_sprites::@3
Adding number conversion cast (unumber) 8 in if(font_2x2::b#1!=8) goto font_2x2::@3
Adding number conversion cast (unumber) 8 in if(font_2x2::l#1!=8) goto font_2x2::@2
Adding number conversion cast (unumber) $40 in if(font_2x2::c#1!=$40) goto font_2x2::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast PLEX_COUNT-1+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast PLEX_COUNT-2+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast PLEX_COUNT-1+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast $15
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast $40
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $15
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $40
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Alias plexShowSprite::$11 = plexShowSprite::$10
Alias font_2x2_to_sprites::$3 = font_2x2_to_sprites::$2
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (volatile)PLEX_SCREEN_PTR = plexInit::plexSetScreen1_$0
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Simple Condition plexSort::$5 [20] if(plexSort::s#1!=$ff) goto plexSort::@7
Simple Condition plex_irq::$3 [129] if(plex_show_idx<PLEX_COUNT) goto plex_irq::@8
Simple Condition plexSort::$6 [208] if(plexSort::nxt_y#0<PLEX_YPOS[PLEX_SORTED_IDX[plexSort::s#1]]) goto plexSort::@3
Simple Condition plex_irq::$5 [209] if(plex_irq::plexFreeNextYpos1_return#0<plex_irq::$4) goto plex_irq::@3
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [20] if(plexSort::s#1==$ff) goto plexSort::@4
Negating conditional jump and destination [129] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [0] plexInit::plexSetScreen1_$0 = plexInit::screen#0 + $3f8
Constant right-side identified [65] main::toD0181_$0 = main::toD0181_$7 & $3fff
Constant right-side identified [68] main::toD0181_$3 = > (word)main::toD0181_gfx#0
Constant right-side identified [152] font_2x2_to_sprites::char_left#2 = font_2x2_to_sprites::font_2x2#0 + ' '*8
Constant right-side identified [153] font_2x2_to_sprites::char_right#2 = font_2x2_to_sprites::font_2x2#0 + ' '*8
Constant right-side identified [203] __start::__init1_toSpritePtr1_$0 = __start::__init1_toSpritePtr1_$1 / $40
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant plexInit::plexSetScreen1_$0 = plexInit::screen#0+$3f8
Constant main::toD0181_$0 = main::toD0181_$7&$3fff
Constant main::toD0181_$3 = >(word)main::toD0181_gfx#0
Constant font_2x2_to_sprites::char_left#2 = font_2x2_to_sprites::font_2x2#0+' '*8
Constant font_2x2_to_sprites::char_right#2 = font_2x2_to_sprites::font_2x2#0+' '*8
Constant __start::__init1_toSpritePtr1_$0 = __start::__init1_toSpritePtr1_$1/$40
Successful SSA optimization Pass2ConstantIdentification
Constant SPRITE_0#0 = (byte)__start::__init1_toSpritePtr1_$0
Successful SSA optimization Pass2ConstantIdentification
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Constant right-side identified [62] main::toD0181_$1 = main::toD0181_$0 * 4
Constant right-side identified [64] main::toD0181_$4 = main::toD0181_$3 / 4
Constant right-side identified [70] main::$7 = SPRITE_0#0 + ' '
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant main::toD0181_$1 = main::toD0181_$0*4
Constant main::toD0181_$4 = main::toD0181_$3/4
Constant main::$7 = SPRITE_0#0+' '
Successful SSA optimization Pass2ConstantIdentification
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Constant right-side identified [62] main::toD0181_$2 = > main::toD0181_$1
Constant right-side identified [63] main::toD0181_$5 = main::toD0181_$4 & $f
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant main::toD0181_$2 = >main::toD0181_$1
Constant main::toD0181_$5 = main::toD0181_$4&$f
Successful SSA optimization Pass2ConstantIdentification
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Constant right-side identified [62] main::toD0181_return#0 = main::toD0181_$2 | main::toD0181_$5
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant main::toD0181_return#0 = main::toD0181_$2|main::toD0181_$5
Successful SSA optimization Pass2ConstantIdentification
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Rewriting multiplication to use shift [29] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx * 2
Rewriting multiplication to use shift [39] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 * SIZEOF_WORD
Rewriting multiplication to use shift [66] main::$12 = main::s#2 * SIZEOF_WORD
Rewriting multiplication to use shift [96] plex_move::$6 = plex_move::s#2 * SIZEOF_WORD
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings plexInit::i#0
Inlining constant with var siblings plexSort::m#0
Inlining constant with var siblings plexSort::plexFreePrepare1_s#0
Inlining constant with var siblings main::s#0
Inlining constant with var siblings main::x#0
Inlining constant with var siblings main::s1#0
Inlining constant with var siblings plex_move::s#0
Inlining constant with var siblings font_2x2_to_sprites::c#0
Inlining constant with var siblings font_2x2_to_sprites::sprite_idx#0
Inlining constant with var siblings font_2x2_to_sprites::i#0
Inlining constant with var siblings font_2x2_to_sprites::char_left#2
Inlining constant with var siblings font_2x2_to_sprites::char_right#2
Inlining constant with var siblings font_2x2::c#0
Inlining constant with var siblings font_2x2::l2#0
Inlining constant with var siblings font_2x2::l#0
Inlining constant with var siblings font_2x2::glyph_bits_2x2#0
Inlining constant with var siblings font_2x2::b#0
Inlining constant with var siblings font_2x2::l2#2
Inlining constant with var siblings scroll_text_next#4
Inlining constant with var siblings scroll_text_next#22
Inlining constant with var siblings y_sin_idx#20
Inlining constant with var siblings x_movement_idx#20
Constant inlined main::toD0181_screen#0 = SCREEN
Constant inlined main::toD0181_gfx#0 = CHARSET_DEFAULT
Constant inlined plexSort::plexFreePrepare1_s#0 = 0
Constant inlined plexInit::i#0 = 0
Constant inlined plexSort::m#0 = 0
Constant inlined font_2x2::glyph_bits_2x2#0 = 0
Constant inlined font_2x2::l2#0 = 0
Constant inlined font_2x2::font_2x2#0 = FONT
Constant inlined font_2x2::l2#2 = 0
Constant inlined font_2x2_to_sprites::char_right#2 = FONT+' '*8
Constant inlined scroll_text_next#22 = SCROLL_TEXT
Constant inlined font_2x2_to_sprites::font_2x2#0 = FONT
Constant inlined __start::__init1_toSpritePtr1_sprite#0 = SPRITES
Constant inlined main::s1#0 = 0
Constant inlined font_2x2::$2 = 0
Constant inlined font_2x2::$3 = 1
Constant inlined main::s#0 = 0
Constant inlined font_2x2::b#0 = 0
Constant inlined font_2x2_to_sprites::i#0 = 0
Constant inlined plexInit::plexSetScreen1_$0 = SCREEN+$3f8
Constant inlined main::toD0181_$7 = (word)SCREEN
Constant inlined __start::__init1_toSpritePtr1_$0 = (word)SPRITES/$40
Constant inlined font_2x2::c#0 = 0
Constant inlined __start::__init1_toSpritePtr1_$1 = (word)SPRITES
Constant inlined main::toD0181_$2 = >(word)SCREEN&$3fff*4
Constant inlined font_2x2_to_sprites::c#0 = 0
Constant inlined main::toD0181_$1 = (word)SCREEN&$3fff*4
Constant inlined main::toD0181_$0 = (word)SCREEN&$3fff
Constant inlined main::x#0 = 0
Constant inlined y_sin_idx#20 = 0
Constant inlined main::toD0181_$5 = >(word)CHARSET_DEFAULT/4&$f
Constant inlined font_2x2_to_sprites::char_left#2 = FONT+' '*8
Constant inlined main::toD0181_$4 = >(word)CHARSET_DEFAULT/4
Constant inlined main::toD0181_$3 = >(word)CHARSET_DEFAULT
Constant inlined font_2x2::l#0 = 0
Constant inlined plexInit::screen#0 = SCREEN
Constant inlined font_2x2_to_sprites::sprites#0 = SPRITES
Constant inlined plex_move::s#0 = 0
Constant inlined font_2x2::font_original#0 = CHARGEN
Constant inlined scroll_text_next#4 = SCROLL_TEXT
Constant inlined main::$7 = SPRITE_0#0+' '
Constant inlined font_2x2_to_sprites::sprite_idx#0 = 0
Constant inlined x_movement_idx#20 = 0
Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in assignment (PLEX_SORTED_IDX+1)[plexSort::$1]
Consolidated array index constant in assignment (PLEX_SORTED_IDX+1)[plexSort::$4]
Successful SSA optimization Pass2ConstantAdditionElimination
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Alias plexSort::m#2 = plexSort::$1
Alias plexSort::s#3 = plexSort::$4
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Eliminating unused constant SIZEOF_WORD
Successful SSA optimization PassNEliminateUnusedVars
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (word) $800
Finalized unsigned number type (word) $800
Finalized unsigned number type (word) $100
Finalized unsigned number type (word) $200
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $c0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $c0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (word) $400
Finalized unsigned number type (word) $3f8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Alias candidate removed (volatile)plex_free_next = plexShowSprite::plexFreeAdd1_$2
Alias candidate removed (volatile)plex_sprite_idx = plexShowSprite::$6
Added new block during phi lifting plexInit::@3(between plexInit::@1 and plexInit::@1)
Added new block during phi lifting plexSort::@8(between plexSort::@2 and plexSort::@1)
Added new block during phi lifting plexSort::@9(between plexSort::@7 and plexSort::@3)
Added new block during phi lifting plexSort::@10(between plexSort::plexFreePrepare1_@1 and plexSort::plexFreePrepare1_@1)
Added new block during phi lifting main::@17(between main::@4 and main::@4)
Added new block during phi lifting plex_move::@7(between plex_move::@2 and plex_move::@1)
Added new block during phi lifting plex_move::@8(between plex_move::@1 and plex_move::@2)
Added new block during phi lifting plex_move::@9(between plex_move::@4 and plex_move::@3)
Added new block during phi lifting font_2x2_to_sprites::@9(between font_2x2_to_sprites::@5 and font_2x2_to_sprites::@3)
Added new block during phi lifting font_2x2_to_sprites::@10(between font_2x2_to_sprites::@6 and font_2x2_to_sprites::@5)
Added new block during phi lifting font_2x2::@11(between font_2x2::@10 and font_2x2::@1)
Added new block during phi lifting font_2x2::@12(between font_2x2::@9 and font_2x2::@2)
Added new block during phi lifting font_2x2::@13(between font_2x2::@6 and font_2x2::@3)
Added new block during phi lifting font_2x2::@14(between font_2x2::@7 and font_2x2::@9)
Adding NOP phi() at start of __start
Adding NOP phi() at start of __start::__init1_toSpritePtr1
Adding NOP phi() at start of __start::__init1_toSpritePtr1_@return
Adding NOP phi() at start of __start::@1
Adding NOP phi() at start of __start::@2
Adding NOP phi() at start of plex_irq::@3
Adding NOP phi() at start of plex_irq::@7
Adding NOP phi() at start of plex_irq::plexFreeNextYpos1_@return
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@13
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@15
Adding NOP phi() at start of main::@16
Adding NOP phi() at start of font_2x2
Adding NOP phi() at start of font_2x2::@5
Adding NOP phi() at start of font_2x2::@4
Adding NOP phi() at start of font_2x2_to_sprites
Adding NOP phi() at start of font_2x2_to_sprites::@7
Adding NOP phi() at start of plexInit
Adding NOP phi() at start of plexInit::@2
Adding NOP phi() at start of plex_move::@5
Adding NOP phi() at start of plexSort
Adding NOP phi() at start of plexSort::plexFreePrepare1
CALL GRAPH
Calls in [__start] to main:10
Calls in [plex_irq] to plexShowSprite:15
Calls in [main] to font_2x2:31 font_2x2_to_sprites:34 plexInit:36 plex_move:49 plexSort:51 plex_move:66 plexSort:68
Created 39 initial phi equivalence classes
Coalesced [63] y_sin_idx#39 = y_sin_idx#13
Coalesced [64] x_movement_idx#39 = x_movement_idx#13
Coalesced [65] scroll_text_next#39 = scroll_text_next#14
Coalesced [70] main::s1#3 = main::s1#1
Coalesced [77] main::s#4 = main::s#1
Coalesced [78] main::x#4 = main::x#1
Not coalescing [108] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0
Coalesced [109] font_2x2::next_2x2_right#9 = font_2x2::next_2x2_right#0
Coalesced [112] font_2x2::glyph_bits#6 = font_2x2::glyph_bits#0
Coalesced [139] font_2x2::next_2x2_left#13 = font_2x2::next_2x2_left#1
Coalesced [140] font_2x2::next_2x2_right#12 = font_2x2::next_2x2_right#1
Coalesced [149] font_2x2::next_2x2_left#9 = font_2x2::next_2x2#1
Coalesced [150] font_2x2::next_original#12 = font_2x2::next_original#1
Coalesced [151] font_2x2::c#12 = font_2x2::c#1
Coalesced [152] font_2x2::l#10 = font_2x2::l#1
Coalesced [153] font_2x2::next_2x2_left#11 = font_2x2::next_2x2_left#8
Coalesced [154] font_2x2::l2#10 = font_2x2::l2#9
Coalesced [155] font_2x2::next_2x2_right#10 = font_2x2::next_2x2_right#8
Coalesced (already) [156] font_2x2::next_2x2_left#12 = font_2x2::next_2x2_left#7
Coalesced [157] font_2x2::l2#11 = font_2x2::l2#1
Coalesced (already) [158] font_2x2::next_2x2_right#11 = font_2x2::next_2x2_right#7
Coalesced [159] font_2x2::glyph_bits#7 = font_2x2::glyph_bits#1
Coalesced [160] font_2x2::glyph_bits_2x2#8 = font_2x2::glyph_bits_2x2#2
Coalesced [161] font_2x2::b#6 = font_2x2::b#1
Not coalescing [168] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2
Coalesced [169] font_2x2_to_sprites::char_right#6 = font_2x2_to_sprites::char_right#0
Coalesced [187] font_2x2_to_sprites::c#10 = font_2x2_to_sprites::c#1
Coalesced [188] font_2x2_to_sprites::char_current#10 = font_2x2_to_sprites::char_current#1
Coalesced [189] font_2x2_to_sprites::sprite#10 = font_2x2_to_sprites::sprite#1
Coalesced [190] font_2x2_to_sprites::i#7 = font_2x2_to_sprites::i#1
Coalesced [191] font_2x2_to_sprites::char_left#7 = font_2x2_to_sprites::char_left#4
Coalesced [192] font_2x2_to_sprites::sprite_idx#9 = font_2x2_to_sprites::sprite_idx#3
Coalesced [193] font_2x2_to_sprites::char_right#7 = font_2x2_to_sprites::char_right#4
Coalesced (already) [194] font_2x2_to_sprites::char_left#9 = font_2x2_to_sprites::char_left#3
Coalesced (already) [195] font_2x2_to_sprites::char_right#9 = font_2x2_to_sprites::char_right#3
Coalesced [198] font_2x2_to_sprites::char_left#8 = font_2x2_to_sprites::char_left#1
Coalesced [199] font_2x2_to_sprites::char_right#8 = font_2x2_to_sprites::char_right#1
Coalesced [208] plexInit::i#3 = plexInit::i#1
Coalesced [212] plex_move::y_idx#7 = plex_move::y_idx#0
Coalesced [213] plex_move::x_idx#7 = plex_move::x_idx#0
Coalesced [214] scroll_text_next#40 = scroll_text_next#27
Coalesced [228] scroll_text_next#43 = scroll_text_next#3
Coalesced [236] plex_move::y_idx#8 = plex_move::y_idx#1
Coalesced [237] plex_move::s#7 = plex_move::s#1
Coalesced [238] plex_move::x_idx#8 = plex_move::x_idx#1
Coalesced (already) [239] scroll_text_next#41 = scroll_text_next#14
Coalesced [240] scroll_text_next#44 = scroll_text_next#12
Coalesced (already) [241] scroll_text_next#42 = scroll_text_next#12
Not coalescing [247] plexSort::s#6 = plexSort::m#2
Coalesced [267] plexSort::plexFreePrepare1_s#3 = plexSort::plexFreePrepare1_s#1
Coalesced [268] plexSort::m#7 = plexSort::m#1
Coalesced [269] plexSort::s#5 = plexSort::s#1
Coalesced down to 31 phi equivalence classes
Culled Empty Block label __start::__init1_toSpritePtr1_@return
Culled Empty Block label __start::@2
Culled Empty Block label plex_irq::@7
Culled Empty Block label plex_irq::plexFreeNextYpos1_@return
Culled Empty Block label main::@12
Culled Empty Block label main::toD0181_@return
Culled Empty Block label main::@6
Culled Empty Block label main::@16
Culled Empty Block label main::@17
Culled Empty Block label font_2x2::@5
Culled Empty Block label font_2x2::@11
Culled Empty Block label font_2x2::@12
Culled Empty Block label font_2x2::@14
Culled Empty Block label font_2x2::@13
Culled Empty Block label font_2x2_to_sprites::@7
Culled Empty Block label font_2x2_to_sprites::@9
Culled Empty Block label plexInit::@2
Culled Empty Block label plexInit::@3
Culled Empty Block label plex_move::@5
Culled Empty Block label plex_move::@7
Culled Empty Block label plex_move::@8
Culled Empty Block label plexSort::@10
Culled Empty Block label plexSort::@8
Culled Empty Block label plexSort::@9
Renumbering block main::@7 to main::@6
Renumbering block main::@8 to main::@7
Renumbering block main::@9 to main::@8
Renumbering block main::@10 to main::@9
Renumbering block main::@11 to main::@10
Renumbering block main::@13 to main::@11
Renumbering block main::@14 to main::@12
Renumbering block main::@15 to main::@13
Renumbering block plex_move::@6 to plex_move::@5
Renumbering block plex_move::@9 to plex_move::@6
Renumbering block plex_irq::@8 to plex_irq::@7
Renumbering block font_2x2_to_sprites::@8 to font_2x2_to_sprites::@7
Renumbering block font_2x2_to_sprites::@10 to font_2x2_to_sprites::@8
Renumbering block font_2x2::@6 to font_2x2::@5
Renumbering block font_2x2::@7 to font_2x2::@6
Renumbering block font_2x2::@8 to font_2x2::@7
Renumbering block font_2x2::@9 to font_2x2::@8
Renumbering block font_2x2::@10 to font_2x2::@9
Adding NOP phi() at start of __start
Adding NOP phi() at start of __start::__init1_toSpritePtr1
Adding NOP phi() at start of __start::@1
Adding NOP phi() at start of plex_irq::@3
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@13
Adding NOP phi() at start of font_2x2
Adding NOP phi() at start of font_2x2::@4
Adding NOP phi() at start of font_2x2_to_sprites
Adding NOP phi() at start of font_2x2_to_sprites::@8
Adding NOP phi() at start of plexInit
Adding NOP phi() at start of plex_move::@6
Adding NOP phi() at start of plexSort
Adding NOP phi() at start of plexSort::plexFreePrepare1
FINAL CONTROL FLOW GRAPH
void __start()
__start: scope:[__start] from
[0] phi()
to:__start::__init1
__start::__init1: scope:[__start] from __start
[1] PLEX_SCREEN_PTR = (byte*)$400+$3f8
[2] plex_show_idx = 0
[3] plex_sprite_idx = 0
[4] plex_sprite_msb = 1
[5] plex_free_next = 0
to:__start::__init1_toSpritePtr1
__start::__init1_toSpritePtr1: scope:[__start] from __start::__init1
[6] phi()
to:__start::__init1_@1
__start::__init1_@1: scope:[__start] from __start::__init1_toSpritePtr1
[7] frame_done = false
to:__start::@1
__start::@1: scope:[__start] from __start::__init1_@1
[8] phi()
[9] call main
to:__start::@return
__start::@return: scope:[__start] from __start::@1
[10] return
to:@return
__interrupt(rom_min_c64) void plex_irq()
plex_irq: scope:[plex_irq] from
asm { sei }
to:plex_irq::@3
plex_irq::@3: scope:[plex_irq] from plex_irq plex_irq::@7
[12] phi()
[13] call plexShowSprite
to:plex_irq::plexFreeNextYpos1
plex_irq::plexFreeNextYpos1: scope:[plex_irq] from plex_irq::@3
[14] plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next]
to:plex_irq::@6
plex_irq::@6: scope:[plex_irq] from plex_irq::plexFreeNextYpos1
[15] plex_irq::$4 = *RASTER + 3
[16] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4
to:plex_irq::@7
plex_irq::@7: scope:[plex_irq] from plex_irq::@6
[17] if(plex_irq::plexFreeNextYpos1_return#0<plex_irq::$4) goto plex_irq::@3
to:plex_irq::@4
plex_irq::@4: scope:[plex_irq] from plex_irq::@6 plex_irq::@7
[18] if(plex_show_idx<PLEX_COUNT) goto plex_irq::@1
to:plex_irq::@5
plex_irq::@5: scope:[plex_irq] from plex_irq::@4
[19] *RASTER = $28
[20] frame_done = true
to:plex_irq::@2
plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5
[21] *IRQ_STATUS = IRQ_RASTER
asm { cli }
to:plex_irq::@return
plex_irq::@return: scope:[plex_irq] from plex_irq::@2
[23] return
to:@return
plex_irq::@1: scope:[plex_irq] from plex_irq::@4
[24] *RASTER = plex_irq::plexFreeNextYpos1_return#0
to:plex_irq::@2
void main()
main: scope:[main] from __start::@1
asm { sei }
[26] *PROCPORT = PROCPORT_RAM_CHARROM
[27] call font_2x2
to:main::@9
main::@9: scope:[main] from main
[28] *PROCPORT = PROCPORT_BASIC_KERNEL_IO
asm { cli }
[30] call font_2x2_to_sprites
to:main::@10
main::@10: scope:[main] from main::@9
[31] phi()
[32] call plexInit
to:main::toD0181
main::toD0181: scope:[main] from main::@10
[33] phi()
to:main::@8
main::@8: scope:[main] from main::toD0181
[34] *D018 = main::toD0181_return#0
to:main::@1
main::@1: scope:[main] from main::@2 main::@8
[35] main::x#2 = phi( main::@2/main::x#1, main::@8/0 )
[35] main::s#2 = phi( main::@2/main::s#1, main::@8/0 )
[36] if(main::s#2<PLEX_COUNT) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@1
[37] *SPRITES_ENABLE = $ff
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
[38] main::s1#2 = phi( main::@3/0, main::@4/main::s1#1 )
[39] SPRITES_COLOR[main::s1#2] = WHITE
[40] main::s1#1 = ++ main::s1#2
[41] if(main::s1#1!=8) goto main::@4
to:main::@5
main::@5: scope:[main] from main::@4
[42] phi()
[43] call plex_move
to:main::@11
main::@11: scope:[main] from main::@5
[44] phi()
[45] call plexSort
to:main::@12
main::@12: scope:[main] from main::@11
asm { sei }
[47] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR
[48] *VIC_CONTROL = *VIC_CONTROL & $7f
[49] *RASTER = $28
[50] *IRQ_ENABLE = IRQ_RASTER
[51] *IRQ_STATUS = IRQ_RASTER
[52] *KERNEL_IRQ = &plex_irq
asm { cli }
to:main::@6
main::@6: scope:[main] from main::@12 main::@13 main::@6
[54] if(frame_done) goto main::@7
to:main::@6
main::@7: scope:[main] from main::@6
[55] frame_done = false
[56] call plex_move
to:main::@13
main::@13: scope:[main] from main::@7
[57] phi()
[58] call plexSort
to:main::@6
main::@2: scope:[main] from main::@1
[59] PLEX_PTR[main::s#2] = SPRITE_0#0+' '
[60] main::$12 = main::s#2 << 1
[61] main::$13 = XMOVEMENT_HI[main::x#2] w= XMOVEMENT[main::x#2]
[62] PLEX_XPOS[main::$12] = main::$13
[63] main::x#1 = main::x#2 + 8
[64] main::s#1 = ++ main::s#2
to:main::@1
void plexShowSprite()
plexShowSprite: scope:[plexShowSprite] from plex_irq::@3
[65] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1
[66] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]]
[67] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0
to:plexShowSprite::plexFreeAdd1
plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite
[68] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $16
[69] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0
[70] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1
[71] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7
[72] plex_free_next = plexShowSprite::plexFreeAdd1_$2
to:plexShowSprite::@5
plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1
[73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]]
[74] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx]
[75] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1
[76] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11]
[77] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2
[78] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11]
[79] if(plexShowSprite::$3!=0) goto plexShowSprite::@1
to:plexShowSprite::@3
plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5
[80] plexShowSprite::$9 = $ff ^ plex_sprite_msb
[81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9
to:plexShowSprite::@2
plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3
[82] plexShowSprite::$5 = plex_sprite_idx + 1
[83] plexShowSprite::$6 = plexShowSprite::$5 & 7
[84] plex_sprite_idx = plexShowSprite::$6
[85] plex_show_idx = ++ plex_show_idx
[86] plex_sprite_msb = plex_sprite_msb << 1
[87] if(plex_sprite_msb!=0) goto plexShowSprite::@return
to:plexShowSprite::@4
plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2
[88] plex_sprite_msb = 1
to:plexShowSprite::@return
plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4
[89] return
to:@return
plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5
[90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb
to:plexShowSprite::@2
void font_2x2(byte* font_2x2::font_original , byte* font_2x2::font_2x2)
font_2x2: scope:[font_2x2] from main
[91] phi()
to:font_2x2::@1
font_2x2::@1: scope:[font_2x2] from font_2x2 font_2x2::@9
[92] font_2x2::c#11 = phi( font_2x2/0, font_2x2::@9/font_2x2::c#1 )
[92] font_2x2::next_original#4 = phi( font_2x2/CHARGEN, font_2x2::@9/font_2x2::next_original#1 )
[92] font_2x2::next_2x2_left#0 = phi( font_2x2/FONT, font_2x2::@9/font_2x2::next_2x2#1 )
[93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8
[94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0
to:font_2x2::@2
font_2x2::@2: scope:[font_2x2] from font_2x2::@1 font_2x2::@8
[95] font_2x2::next_2x2_right#7 = phi( font_2x2::@1/font_2x2::next_2x2_right#0, font_2x2::@8/font_2x2::next_2x2_right#8 )
[95] font_2x2::l2#8 = phi( font_2x2::@1/0, font_2x2::@8/font_2x2::l2#9 )
[95] font_2x2::next_2x2_left#7 = phi( font_2x2::@1/font_2x2::next_2x2_left#10, font_2x2::@8/font_2x2::next_2x2_left#8 )
[95] font_2x2::l#2 = phi( font_2x2::@1/0, font_2x2::@8/font_2x2::l#1 )
[96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2]
to:font_2x2::@3
font_2x2::@3: scope:[font_2x2] from font_2x2::@2 font_2x2::@5
[97] font_2x2::b#2 = phi( font_2x2::@2/0, font_2x2::@5/font_2x2::b#1 )
[97] font_2x2::glyph_bits_2x2#3 = phi( font_2x2::@2/0, font_2x2::@5/font_2x2::glyph_bits_2x2#2 )
[97] font_2x2::glyph_bits#2 = phi( font_2x2::@2/font_2x2::glyph_bits#0, font_2x2::@5/font_2x2::glyph_bits#1 )
[98] font_2x2::$1 = font_2x2::glyph_bits#2 & $80
[99] if(0!=font_2x2::$1) goto font_2x2::@4
to:font_2x2::@5
font_2x2::@4: scope:[font_2x2] from font_2x2::@3
[100] phi()
to:font_2x2::@5
font_2x2::@5: scope:[font_2x2] from font_2x2::@3 font_2x2::@4
[101] font_2x2::glyph_bit#0 = phi( font_2x2::@4/1, font_2x2::@3/0 )
[102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1
[103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0
[104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1
[105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0
[106] font_2x2::glyph_bits#1 = font_2x2::glyph_bits#2 << 1
[107] font_2x2::b#1 = ++ font_2x2::b#2
[108] if(font_2x2::b#1!=8) goto font_2x2::@3
to:font_2x2::@6
font_2x2::@6: scope:[font_2x2] from font_2x2::@5
[109] font_2x2::$10 = > font_2x2::glyph_bits_2x2#2
[110] font_2x2::next_2x2_left#7[font_2x2::l2#8] = font_2x2::$10
[111] font_2x2::$11 = font_2x2::l2#8 + 1
[112] font_2x2::$12 = > font_2x2::glyph_bits_2x2#2
[113] font_2x2::next_2x2_left#7[font_2x2::$11] = font_2x2::$12
[114] font_2x2::$13 = < font_2x2::glyph_bits_2x2#2
[115] font_2x2::next_2x2_right#7[font_2x2::l2#8] = font_2x2::$13
[116] font_2x2::$14 = font_2x2::l2#8 + 1
[117] font_2x2::$15 = < font_2x2::glyph_bits_2x2#2
[118] font_2x2::next_2x2_right#7[font_2x2::$14] = font_2x2::$15
[119] font_2x2::l2#1 = font_2x2::l2#8 + 2
[120] if(font_2x2::l2#1!=8) goto font_2x2::@8
to:font_2x2::@7
font_2x2::@7: scope:[font_2x2] from font_2x2::@6
[121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8
[122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8
to:font_2x2::@8
font_2x2::@8: scope:[font_2x2] from font_2x2::@6 font_2x2::@7
[123] font_2x2::next_2x2_right#8 = phi( font_2x2::@6/font_2x2::next_2x2_right#7, font_2x2::@7/font_2x2::next_2x2_right#1 )
[123] font_2x2::l2#9 = phi( font_2x2::@6/font_2x2::l2#1, font_2x2::@7/0 )
[123] font_2x2::next_2x2_left#8 = phi( font_2x2::@6/font_2x2::next_2x2_left#7, font_2x2::@7/font_2x2::next_2x2_left#1 )
[124] font_2x2::l#1 = ++ font_2x2::l#2
[125] if(font_2x2::l#1!=8) goto font_2x2::@2
to:font_2x2::@9
font_2x2::@9: scope:[font_2x2] from font_2x2::@8
[126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8
[127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8
[128] font_2x2::c#1 = ++ font_2x2::c#11
[129] if(font_2x2::c#1!=$40) goto font_2x2::@1
to:font_2x2::@return
font_2x2::@return: scope:[font_2x2] from font_2x2::@9
[130] return
to:@return
void font_2x2_to_sprites(byte* font_2x2_to_sprites::font_2x2 , byte* font_2x2_to_sprites::sprites , byte font_2x2_to_sprites::num_chars)
font_2x2_to_sprites: scope:[font_2x2_to_sprites] from main::@9
[131] phi()
to:font_2x2_to_sprites::@1
font_2x2_to_sprites::@1: scope:[font_2x2_to_sprites] from font_2x2_to_sprites font_2x2_to_sprites::@7
[132] font_2x2_to_sprites::sprite#4 = phi( font_2x2_to_sprites/SPRITES, font_2x2_to_sprites::@7/font_2x2_to_sprites::sprite#1 )
[132] font_2x2_to_sprites::char_current#2 = phi( font_2x2_to_sprites/FONT, font_2x2_to_sprites::@7/font_2x2_to_sprites::char_current#1 )
[132] font_2x2_to_sprites::c#2 = phi( font_2x2_to_sprites/0, font_2x2_to_sprites::@7/font_2x2_to_sprites::c#1 )
[133] if(font_2x2_to_sprites::c#2<font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2
to:font_2x2_to_sprites::@return
font_2x2_to_sprites::@return: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1
[134] return
to:@return
font_2x2_to_sprites::@2: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@1
[135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8
[136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2
to:font_2x2_to_sprites::@3
font_2x2_to_sprites::@3: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@2 font_2x2_to_sprites::@5
[137] font_2x2_to_sprites::char_right#3 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::char_right#0, font_2x2_to_sprites::@5/font_2x2_to_sprites::char_right#4 )
[137] font_2x2_to_sprites::sprite_idx#4 = phi( font_2x2_to_sprites::@2/0, font_2x2_to_sprites::@5/font_2x2_to_sprites::sprite_idx#3 )
[137] font_2x2_to_sprites::char_left#3 = phi( font_2x2_to_sprites::@2/font_2x2_to_sprites::char_left#6, font_2x2_to_sprites::@5/font_2x2_to_sprites::char_left#4 )
[137] font_2x2_to_sprites::i#2 = phi( font_2x2_to_sprites::@2/0, font_2x2_to_sprites::@5/font_2x2_to_sprites::i#1 )
[138] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7
[139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3]
[140] font_2x2_to_sprites::sprite_idx#1 = ++ font_2x2_to_sprites::sprite_idx#4
[141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3]
[142] font_2x2_to_sprites::sprite_idx#2 = ++ font_2x2_to_sprites::sprite_idx#1
[143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0
[144] font_2x2_to_sprites::sprite_idx#3 = ++ font_2x2_to_sprites::sprite_idx#2
[145] if(font_2x2_to_sprites::i#2==7) goto font_2x2_to_sprites::@4
to:font_2x2_to_sprites::@6
font_2x2_to_sprites::@6: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3
[146] if(font_2x2_to_sprites::i#2!=$f) goto font_2x2_to_sprites::@8
to:font_2x2_to_sprites::@5
font_2x2_to_sprites::@8: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@6
[147] phi()
to:font_2x2_to_sprites::@5
font_2x2_to_sprites::@5: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@4 font_2x2_to_sprites::@6 font_2x2_to_sprites::@8
[148] font_2x2_to_sprites::char_right#4 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::char_right#1, font_2x2_to_sprites::@8/font_2x2_to_sprites::char_right#3, font_2x2_to_sprites::@6/FONT+' '*8 )
[148] font_2x2_to_sprites::char_left#4 = phi( font_2x2_to_sprites::@4/font_2x2_to_sprites::char_left#1, font_2x2_to_sprites::@8/font_2x2_to_sprites::char_left#3, font_2x2_to_sprites::@6/FONT+' '*8 )
[149] font_2x2_to_sprites::i#1 = ++ font_2x2_to_sprites::i#2
[150] if(font_2x2_to_sprites::i#1!=$15) goto font_2x2_to_sprites::@3
to:font_2x2_to_sprites::@7
font_2x2_to_sprites::@7: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@5
[151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8
[152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40
[153] font_2x2_to_sprites::c#1 = ++ font_2x2_to_sprites::c#2
to:font_2x2_to_sprites::@1
font_2x2_to_sprites::@4: scope:[font_2x2_to_sprites] from font_2x2_to_sprites::@3
[154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8
[155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8
to:font_2x2_to_sprites::@5
void plexInit(byte* plexInit::screen)
plexInit: scope:[plexInit] from main::@10
[156] phi()
to:plexInit::plexSetScreen1
plexInit::plexSetScreen1: scope:[plexInit] from plexInit
[157] PLEX_SCREEN_PTR = SCREEN+$3f8
to:plexInit::@1
plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::plexSetScreen1
[158] plexInit::i#2 = phi( plexInit::@1/plexInit::i#1, plexInit::plexSetScreen1/0 )
[159] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2
[160] plexInit::i#1 = ++ plexInit::i#2
[161] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1
to:plexInit::@return
plexInit::@return: scope:[plexInit] from plexInit::@1
[162] return
to:@return
void plex_move()
plex_move: scope:[plex_move] from main::@5 main::@7
[163] scroll_text_next#27 = phi( main::@5/SCROLL_TEXT, main::@7/scroll_text_next#14 )
[163] x_movement_idx#11 = phi( main::@5/0, main::@7/x_movement_idx#13 )
[163] y_sin_idx#11 = phi( main::@5/0, main::@7/y_sin_idx#13 )
[164] plex_move::y_idx#0 = y_sin_idx#11
[165] plex_move::x_idx#0 = x_movement_idx#11
to:plex_move::@1
plex_move::@1: scope:[plex_move] from plex_move plex_move::@2
[166] scroll_text_next#12 = phi( plex_move/scroll_text_next#27, plex_move::@2/scroll_text_next#14 )
[166] plex_move::x_idx#2 = phi( plex_move/plex_move::x_idx#0, plex_move::@2/plex_move::x_idx#1 )
[166] plex_move::s#2 = phi( plex_move/0, plex_move::@2/plex_move::s#1 )
[166] plex_move::y_idx#2 = phi( plex_move/plex_move::y_idx#0, plex_move::@2/plex_move::y_idx#1 )
[167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2]
[168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8
[169] plex_move::$6 = plex_move::s#2 << 1
[170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2]
[171] PLEX_XPOS[plex_move::$6] = plex_move::$7
[172] if(plex_move::x_idx#2!=0) goto plex_move::@2
to:plex_move::@4
plex_move::@4: scope:[plex_move] from plex_move::@1
[173] if(*scroll_text_next#12!=0) goto plex_move::@6
to:plex_move::@3
plex_move::@6: scope:[plex_move] from plex_move::@4
[174] phi()
to:plex_move::@3
plex_move::@3: scope:[plex_move] from plex_move::@4 plex_move::@6
[175] scroll_text_next#13 = phi( plex_move::@6/scroll_text_next#12, plex_move::@4/SCROLL_TEXT )
[176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13
[177] PLEX_PTR[plex_move::s#2] = plex_move::$4
[178] scroll_text_next#3 = ++ scroll_text_next#13
to:plex_move::@2
plex_move::@2: scope:[plex_move] from plex_move::@1 plex_move::@3
[179] scroll_text_next#14 = phi( plex_move::@1/scroll_text_next#12, plex_move::@3/scroll_text_next#3 )
[180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8
[181] plex_move::s#1 = ++ plex_move::s#2
[182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1
to:plex_move::@5
plex_move::@5: scope:[plex_move] from plex_move::@2
[183] y_sin_idx#13 = y_sin_idx#11 + 3
[184] x_movement_idx#13 = ++ x_movement_idx#11
to:plex_move::@return
plex_move::@return: scope:[plex_move] from plex_move::@5
[185] return
to:@return
void plexSort()
plexSort: scope:[plexSort] from main::@11 main::@13
[186] phi()
to:plexSort::@1
plexSort::@1: scope:[plexSort] from plexSort plexSort::@2
[187] plexSort::m#2 = phi( plexSort/0, plexSort::@2/plexSort::m#1 )
[188] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2]
[189] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0]
[190] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2
to:plexSort::@5
plexSort::@5: scope:[plexSort] from plexSort::@1
[191] plexSort::s#6 = plexSort::m#2
to:plexSort::@3
plexSort::@3: scope:[plexSort] from plexSort::@5 plexSort::@7
[192] plexSort::s#3 = phi( plexSort::@7/plexSort::s#1, plexSort::@5/plexSort::s#6 )
[193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3]
[194] plexSort::s#1 = -- plexSort::s#3
[195] if(plexSort::s#1==$ff) goto plexSort::@4
to:plexSort::@7
plexSort::@7: scope:[plexSort] from plexSort::@3
[196] if(plexSort::nxt_y#0<PLEX_YPOS[PLEX_SORTED_IDX[plexSort::s#1]]) goto plexSort::@3
to:plexSort::@4
plexSort::@4: scope:[plexSort] from plexSort::@3 plexSort::@7
[197] plexSort::s#2 = ++ plexSort::s#1
[198] PLEX_SORTED_IDX[plexSort::s#2] = plexSort::nxt_idx#0
to:plexSort::@2
plexSort::@2: scope:[plexSort] from plexSort::@1 plexSort::@4
[199] plexSort::m#1 = ++ plexSort::m#2
[200] if(plexSort::m#1!=PLEX_COUNT-2+1) goto plexSort::@1
to:plexSort::@6
plexSort::@6: scope:[plexSort] from plexSort::@2
[201] plex_show_idx = 0
[202] plex_sprite_idx = 0
[203] plex_sprite_msb = 1
to:plexSort::plexFreePrepare1
plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@6
[204] phi()
to:plexSort::plexFreePrepare1_@1
plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1
[205] plexSort::plexFreePrepare1_s#2 = phi( plexSort::plexFreePrepare1/0, plexSort::plexFreePrepare1_@1/plexSort::plexFreePrepare1_s#1 )
[206] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0
[207] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2
[208] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1
to:plexSort::plexFreePrepare1_@2
plexSort::plexFreePrepare1_@2: scope:[plexSort] from plexSort::plexFreePrepare1_@1
[209] plex_free_next = 0
to:plexSort::@return
plexSort::@return: scope:[plexSort] from plexSort::plexFreePrepare1_@2
[210] return
to:@return
VARIABLE REGISTER WEIGHTS
volatile byte* PLEX_SCREEN_PTR loadstore 6.181818181818182
byte SPRITE_0
void __start()
byte __start::__init1_toSpritePtr1_return
byte* __start::__init1_toSpritePtr1_sprite
void font_2x2(byte* font_2x2::font_original , byte* font_2x2::font_2x2)
byte~ font_2x2::$1 200002.0
byte~ font_2x2::$10 20002.0
byte~ font_2x2::$11 10001.0
byte~ font_2x2::$12 20002.0
byte~ font_2x2::$13 20002.0
byte~ font_2x2::$14 10001.0
byte~ font_2x2::$15 20002.0
word~ font_2x2::$5 200002.0
word~ font_2x2::$7 200002.0
byte font_2x2::b
byte font_2x2::b#1 150001.5
byte font_2x2::b#2 20000.2
byte font_2x2::c
byte font_2x2::c#1 1501.5
byte font_2x2::c#11 55.611111111111114
byte* font_2x2::font_2x2
byte* font_2x2::font_original
byte font_2x2::glyph_bit
byte font_2x2::glyph_bit#0 50000.5
byte font_2x2::glyph_bits
byte font_2x2::glyph_bits#0 20002.0
byte font_2x2::glyph_bits#1 66667.33333333333
byte font_2x2::glyph_bits#2 34444.88888888889
word font_2x2::glyph_bits_2x2
word font_2x2::glyph_bits_2x2#1 200002.0
word font_2x2::glyph_bits_2x2#2 20000.500000000004
word font_2x2::glyph_bits_2x2#3 40000.4
byte font_2x2::l
byte font_2x2::l#1 15001.5
byte font_2x2::l#2 1034.5862068965519
byte font_2x2::l2
byte font_2x2::l2#1 15001.5
byte font_2x2::l2#8 2500.25
byte font_2x2::l2#9 6667.333333333333
byte* font_2x2::next_2x2
byte* font_2x2::next_2x2#1 500.5
byte* font_2x2::next_2x2_left
byte* font_2x2::next_2x2_left#0 706.0588235294117
byte* font_2x2::next_2x2_left#1 10001.0
byte* font_2x2::next_2x2_left#10 2002.0
byte* font_2x2::next_2x2_left#7 1577.1153846153845
byte* font_2x2::next_2x2_left#8 10001.0
byte* font_2x2::next_2x2_right
byte* font_2x2::next_2x2_right#0 1001.0
byte* font_2x2::next_2x2_right#1 20002.0
byte* font_2x2::next_2x2_right#7 1577.1153846153845
byte* font_2x2::next_2x2_right#8 10001.0
byte* font_2x2::next_original
byte* font_2x2::next_original#1 667.3333333333334
byte* font_2x2::next_original#4 342.9428571428572
void font_2x2_to_sprites(byte* font_2x2_to_sprites::font_2x2 , byte* font_2x2_to_sprites::sprites , byte font_2x2_to_sprites::num_chars)
byte~ font_2x2_to_sprites::$3 10001.0
byte font_2x2_to_sprites::c
byte font_2x2_to_sprites::c#1 2002.0
byte font_2x2_to_sprites::c#2 136.5
byte* font_2x2_to_sprites::char_current
byte* font_2x2_to_sprites::char_current#1 667.3333333333334
byte* font_2x2_to_sprites::char_current#2 1200.3
byte* font_2x2_to_sprites::char_left
byte* font_2x2_to_sprites::char_left#1 10001.0
byte* font_2x2_to_sprites::char_left#3 2818.5454545454545
byte* font_2x2_to_sprites::char_left#4 10001.0
byte* font_2x2_to_sprites::char_left#6 2002.0
byte* font_2x2_to_sprites::char_right
byte* font_2x2_to_sprites::char_right#0 1001.0
byte* font_2x2_to_sprites::char_right#1 20002.0
byte* font_2x2_to_sprites::char_right#3 2818.5454545454545
byte* font_2x2_to_sprites::char_right#4 10001.0
byte* font_2x2_to_sprites::font_2x2
byte font_2x2_to_sprites::i
byte font_2x2_to_sprites::i#1 15001.5
byte font_2x2_to_sprites::i#2 3571.7857142857147
byte font_2x2_to_sprites::num_chars
byte* font_2x2_to_sprites::sprite
byte* font_2x2_to_sprites::sprite#1 1001.0
byte* font_2x2_to_sprites::sprite#4 1524.047619047619
byte font_2x2_to_sprites::sprite_idx
byte font_2x2_to_sprites::sprite_idx#1 15001.5
byte font_2x2_to_sprites::sprite_idx#2 15001.5
byte font_2x2_to_sprites::sprite_idx#3 2222.4444444444443
byte font_2x2_to_sprites::sprite_idx#4 10001.0
byte* font_2x2_to_sprites::sprites
volatile bool frame_done loadstore 26.333333333333332
void main()
byte~ main::$12 101.0
word~ main::$13 202.0
byte main::s
byte main::s#1 202.0
byte main::s#2 72.14285714285714
byte main::s1
byte main::s1#1 151.5
byte main::s1#2 151.5
byte* main::toD0181_gfx
byte main::toD0181_return
byte* main::toD0181_screen
byte main::x
byte main::x#1 101.0
byte main::x#2 67.33333333333333
void plexInit(byte* plexInit::screen)
byte plexInit::i
byte plexInit::i#1 1501.5
byte plexInit::i#2 2002.0
byte* plexInit::plexSetScreen1_screen
byte* plexInit::screen
void plexShowSprite()
byte~ plexShowSprite::$11 101.0
byte~ plexShowSprite::$2 202.0
byte~ plexShowSprite::$3 202.0
byte~ plexShowSprite::$5 202.0
byte~ plexShowSprite::$6 202.0
byte~ plexShowSprite::$9 202.0
byte~ plexShowSprite::plexFreeAdd1_$0 202.0
byte~ plexShowSprite::plexFreeAdd1_$1 202.0
byte~ plexShowSprite::plexFreeAdd1_$2 202.0
byte plexShowSprite::plexFreeAdd1_ypos
byte plexShowSprite::plexFreeAdd1_ypos#0 151.5
byte plexShowSprite::plex_sprite_idx2
byte plexShowSprite::plex_sprite_idx2#0 25.25
byte plexShowSprite::xpos_idx
byte plexShowSprite::xpos_idx#0 202.0
byte plexShowSprite::ypos
void plexSort()
byte plexSort::m
byte plexSort::m#1 150001.5
byte plexSort::m#2 41667.08333333333
byte plexSort::nxt_idx
byte plexSort::nxt_idx#0 30000.300000000003
byte plexSort::nxt_y
byte plexSort::nxt_y#0 150000.375
byte plexSort::plexFreePrepare1_s
byte plexSort::plexFreePrepare1_s#1 150001.5
byte plexSort::plexFreePrepare1_s#2 150001.5
byte plexSort::s
byte plexSort::s#1 1366668.3333333335
byte plexSort::s#2 200002.0
byte plexSort::s#3 2050002.5
byte plexSort::s#6 200002.0
volatile byte plex_free_next loadstore 42.483870967741936
__interrupt(rom_min_c64) void plex_irq()
byte~ plex_irq::$4 11.0
byte plex_irq::plexFreeNextYpos1_return
byte plex_irq::plexFreeNextYpos1_return#0 4.800000000000001
byte plex_irq::rasterY
void plex_move()
byte~ plex_move::$4 200002.0
byte~ plex_move::$6 100001.0
word~ plex_move::$7 200002.0
byte plex_move::s
byte plex_move::s#1 150001.5
byte plex_move::s#2 33333.66666666667
byte plex_move::x_idx
byte plex_move::x_idx#0 2002.0
byte plex_move::x_idx#1 66667.33333333333
byte plex_move::x_idx#2 35786.142857142855
byte plex_move::y_idx
byte plex_move::y_idx#0 1001.0
byte plex_move::y_idx#1 13333.466666666667
byte plex_move::y_idx#2 150502.0
volatile byte plex_show_idx loadstore 46.09090909090909
volatile byte plex_sprite_idx loadstore 45.38709677419355
volatile byte plex_sprite_msb loadstore 48.75757575757575
byte* scroll_text_next
byte* scroll_text_next#12 44556.11111111111
byte* scroll_text_next#13 100001.0
byte* scroll_text_next#14 13048.0
byte* scroll_text_next#27 367.33333333333337
byte* scroll_text_next#3 200002.0
byte x_movement_idx
byte x_movement_idx#11 100.14285714285714
byte x_movement_idx#13 61.22222222222223
byte y_sin_idx
byte y_sin_idx#11 105.14999999999999
byte y_sin_idx#13 58.0
Initial phi equivalence classes
[ main::s#2 main::s#1 ]
[ main::x#2 main::x#1 ]
[ main::s1#2 main::s1#1 ]
[ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ]
[ font_2x2::next_original#4 font_2x2::next_original#1 ]
[ font_2x2::c#11 font_2x2::c#1 ]
[ font_2x2::l#2 font_2x2::l#1 ]
[ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
[ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
[ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
[ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
[ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ]
[ font_2x2::b#2 font_2x2::b#1 ]
[ font_2x2::glyph_bit#0 ]
[ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ]
[ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ]
[ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ]
[ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ]
[ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ]
[ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ]
[ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ]
[ plexInit::i#2 plexInit::i#1 ]
[ y_sin_idx#11 y_sin_idx#13 ]
[ x_movement_idx#11 x_movement_idx#13 ]
[ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ]
[ plex_move::s#2 plex_move::s#1 ]
[ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ]
[ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ]
[ plexSort::m#2 plexSort::m#1 ]
[ plexSort::s#3 plexSort::s#1 plexSort::s#6 ]
[ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ]
Added variable PLEX_SCREEN_PTR to live range equivalence class [ PLEX_SCREEN_PTR ]
Added variable plex_show_idx to live range equivalence class [ plex_show_idx ]
Added variable plex_sprite_idx to live range equivalence class [ plex_sprite_idx ]
Added variable plex_sprite_msb to live range equivalence class [ plex_sprite_msb ]
Added variable plex_free_next to live range equivalence class [ plex_free_next ]
Added variable frame_done to live range equivalence class [ frame_done ]
Added variable plex_irq::plexFreeNextYpos1_return#0 to live range equivalence class [ plex_irq::plexFreeNextYpos1_return#0 ]
Added variable plex_irq::$4 to live range equivalence class [ plex_irq::$4 ]
Added variable main::$12 to live range equivalence class [ main::$12 ]
Added variable main::$13 to live range equivalence class [ main::$13 ]
Added variable plexShowSprite::plex_sprite_idx2#0 to live range equivalence class [ plexShowSprite::plex_sprite_idx2#0 ]
Added variable plexShowSprite::plexFreeAdd1_ypos#0 to live range equivalence class [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Added variable plexShowSprite::plexFreeAdd1_$0 to live range equivalence class [ plexShowSprite::plexFreeAdd1_$0 ]
Added variable plexShowSprite::plexFreeAdd1_$1 to live range equivalence class [ plexShowSprite::plexFreeAdd1_$1 ]
Added variable plexShowSprite::plexFreeAdd1_$2 to live range equivalence class [ plexShowSprite::plexFreeAdd1_$2 ]
Added variable plexShowSprite::xpos_idx#0 to live range equivalence class [ plexShowSprite::xpos_idx#0 ]
Added variable plexShowSprite::$11 to live range equivalence class [ plexShowSprite::$11 ]
Added variable plexShowSprite::$2 to live range equivalence class [ plexShowSprite::$2 ]
Added variable plexShowSprite::$3 to live range equivalence class [ plexShowSprite::$3 ]
Added variable plexShowSprite::$9 to live range equivalence class [ plexShowSprite::$9 ]
Added variable plexShowSprite::$5 to live range equivalence class [ plexShowSprite::$5 ]
Added variable plexShowSprite::$6 to live range equivalence class [ plexShowSprite::$6 ]
Added variable font_2x2::$1 to live range equivalence class [ font_2x2::$1 ]
Added variable font_2x2::$5 to live range equivalence class [ font_2x2::$5 ]
Added variable font_2x2::glyph_bits_2x2#1 to live range equivalence class [ font_2x2::glyph_bits_2x2#1 ]
Added variable font_2x2::$7 to live range equivalence class [ font_2x2::$7 ]
Added variable font_2x2::$10 to live range equivalence class [ font_2x2::$10 ]
Added variable font_2x2::$11 to live range equivalence class [ font_2x2::$11 ]
Added variable font_2x2::$12 to live range equivalence class [ font_2x2::$12 ]
Added variable font_2x2::$13 to live range equivalence class [ font_2x2::$13 ]
Added variable font_2x2::$14 to live range equivalence class [ font_2x2::$14 ]
Added variable font_2x2::$15 to live range equivalence class [ font_2x2::$15 ]
Added variable font_2x2_to_sprites::$3 to live range equivalence class [ font_2x2_to_sprites::$3 ]
Added variable font_2x2_to_sprites::sprite_idx#1 to live range equivalence class [ font_2x2_to_sprites::sprite_idx#1 ]
Added variable font_2x2_to_sprites::sprite_idx#2 to live range equivalence class [ font_2x2_to_sprites::sprite_idx#2 ]
Added variable plex_move::$6 to live range equivalence class [ plex_move::$6 ]
Added variable plex_move::$7 to live range equivalence class [ plex_move::$7 ]
Added variable plex_move::$4 to live range equivalence class [ plex_move::$4 ]
Added variable plexSort::nxt_idx#0 to live range equivalence class [ plexSort::nxt_idx#0 ]
Added variable plexSort::nxt_y#0 to live range equivalence class [ plexSort::nxt_y#0 ]
Added variable plexSort::s#2 to live range equivalence class [ plexSort::s#2 ]
Complete equivalence classes
[ main::s#2 main::s#1 ]
[ main::x#2 main::x#1 ]
[ main::s1#2 main::s1#1 ]
[ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ]
[ font_2x2::next_original#4 font_2x2::next_original#1 ]
[ font_2x2::c#11 font_2x2::c#1 ]
[ font_2x2::l#2 font_2x2::l#1 ]
[ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
[ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
[ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
[ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
[ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ]
[ font_2x2::b#2 font_2x2::b#1 ]
[ font_2x2::glyph_bit#0 ]
[ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ]
[ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ]
[ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ]
[ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ]
[ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ]
[ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ]
[ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ]
[ plexInit::i#2 plexInit::i#1 ]
[ y_sin_idx#11 y_sin_idx#13 ]
[ x_movement_idx#11 x_movement_idx#13 ]
[ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ]
[ plex_move::s#2 plex_move::s#1 ]
[ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ]
[ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ]
[ plexSort::m#2 plexSort::m#1 ]
[ plexSort::s#3 plexSort::s#1 plexSort::s#6 ]
[ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ]
[ PLEX_SCREEN_PTR ]
[ plex_show_idx ]
[ plex_sprite_idx ]
[ plex_sprite_msb ]
[ plex_free_next ]
[ frame_done ]
[ plex_irq::plexFreeNextYpos1_return#0 ]
[ plex_irq::$4 ]
[ main::$12 ]
[ main::$13 ]
[ plexShowSprite::plex_sprite_idx2#0 ]
[ plexShowSprite::plexFreeAdd1_ypos#0 ]
[ plexShowSprite::plexFreeAdd1_$0 ]
[ plexShowSprite::plexFreeAdd1_$1 ]
[ plexShowSprite::plexFreeAdd1_$2 ]
[ plexShowSprite::xpos_idx#0 ]
[ plexShowSprite::$11 ]
[ plexShowSprite::$2 ]
[ plexShowSprite::$3 ]
[ plexShowSprite::$9 ]
[ plexShowSprite::$5 ]
[ plexShowSprite::$6 ]
[ font_2x2::$1 ]
[ font_2x2::$5 ]
[ font_2x2::glyph_bits_2x2#1 ]
[ font_2x2::$7 ]
[ font_2x2::$10 ]
[ font_2x2::$11 ]
[ font_2x2::$12 ]
[ font_2x2::$13 ]
[ font_2x2::$14 ]
[ font_2x2::$15 ]
[ font_2x2_to_sprites::$3 ]
[ font_2x2_to_sprites::sprite_idx#1 ]
[ font_2x2_to_sprites::sprite_idx#2 ]
[ plex_move::$6 ]
[ plex_move::$7 ]
[ plex_move::$4 ]
[ plexSort::nxt_idx#0 ]
[ plexSort::nxt_y#0 ]
[ plexSort::s#2 ]
Allocated zp[1]:2 [ main::s#2 main::s#1 ]
Allocated zp[1]:3 [ main::x#2 main::x#1 ]
Allocated zp[1]:4 [ main::s1#2 main::s1#1 ]
Allocated zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ]
Allocated zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 ]
Allocated zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ]
Allocated zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ]
Allocated zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
Allocated zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
Allocated zp[2]:14 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
Allocated zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
Allocated zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ]
Allocated zp[1]:19 [ font_2x2::b#2 font_2x2::b#1 ]
Allocated zp[1]:20 [ font_2x2::glyph_bit#0 ]
Allocated zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ]
Allocated zp[2]:22 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ]
Allocated zp[2]:24 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ]
Allocated zp[1]:26 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ]
Allocated zp[2]:27 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ]
Allocated zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ]
Allocated zp[2]:30 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ]
Allocated zp[1]:32 [ plexInit::i#2 plexInit::i#1 ]
Allocated zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ]
Allocated zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ]
Allocated zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ]
Allocated zp[1]:36 [ plex_move::s#2 plex_move::s#1 ]
Allocated zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ]
Allocated zp[2]:38 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ]
Allocated zp[1]:40 [ plexSort::m#2 plexSort::m#1 ]
Allocated zp[1]:41 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ]
Allocated zp[1]:42 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ]
Allocated zp[2]:43 [ PLEX_SCREEN_PTR ]
Allocated zp[1]:45 [ plex_show_idx ]
Allocated zp[1]:46 [ plex_sprite_idx ]
Allocated zp[1]:47 [ plex_sprite_msb ]
Allocated zp[1]:48 [ plex_free_next ]
Allocated zp[1]:49 [ frame_done ]
Allocated zp[1]:50 [ plex_irq::plexFreeNextYpos1_return#0 ]
Allocated zp[1]:51 [ plex_irq::$4 ]
Allocated zp[1]:52 [ main::$12 ]
Allocated zp[2]:53 [ main::$13 ]
Allocated zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ]
Allocated zp[1]:56 [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Allocated zp[1]:57 [ plexShowSprite::plexFreeAdd1_$0 ]
Allocated zp[1]:58 [ plexShowSprite::plexFreeAdd1_$1 ]
Allocated zp[1]:59 [ plexShowSprite::plexFreeAdd1_$2 ]
Allocated zp[1]:60 [ plexShowSprite::xpos_idx#0 ]
Allocated zp[1]:61 [ plexShowSprite::$11 ]
Allocated zp[1]:62 [ plexShowSprite::$2 ]
Allocated zp[1]:63 [ plexShowSprite::$3 ]
Allocated zp[1]:64 [ plexShowSprite::$9 ]
Allocated zp[1]:65 [ plexShowSprite::$5 ]
Allocated zp[1]:66 [ plexShowSprite::$6 ]
Allocated zp[1]:67 [ font_2x2::$1 ]
Allocated zp[2]:68 [ font_2x2::$5 ]
Allocated zp[2]:70 [ font_2x2::glyph_bits_2x2#1 ]
Allocated zp[2]:72 [ font_2x2::$7 ]
Allocated zp[1]:74 [ font_2x2::$10 ]
Allocated zp[1]:75 [ font_2x2::$11 ]
Allocated zp[1]:76 [ font_2x2::$12 ]
Allocated zp[1]:77 [ font_2x2::$13 ]
Allocated zp[1]:78 [ font_2x2::$14 ]
Allocated zp[1]:79 [ font_2x2::$15 ]
Allocated zp[1]:80 [ font_2x2_to_sprites::$3 ]
Allocated zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ]
Allocated zp[1]:82 [ font_2x2_to_sprites::sprite_idx#2 ]
Allocated zp[1]:83 [ plex_move::$6 ]
Allocated zp[2]:84 [ plex_move::$7 ]
Allocated zp[1]:86 [ plex_move::$4 ]
Allocated zp[1]:87 [ plexSort::nxt_idx#0 ]
Allocated zp[1]:88 [ plexSort::nxt_y#0 ]
Allocated zp[1]:89 [ plexSort::s#2 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [7] frame_done = false [ frame_done ] ( [ frame_done ] { } ) always clobbers reg byte a
Statement [14] plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y
Statement [15] plex_irq::$4 = *RASTER + 3 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:50 [ plex_irq::plexFreeNextYpos1_return#0 ]
Statement [16] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:51 [ plex_irq::$4 ]
Statement [18] if(plex_show_idx<PLEX_COUNT) goto plex_irq::@1 [ plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a
Statement [19] *RASTER = $28 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [20] frame_done = true [ ] ( [ ] { } ) always clobbers reg byte a
Statement [21] *IRQ_STATUS = IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a
Statement [26] *PROCPORT = PROCPORT_RAM_CHARROM [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [28] *PROCPORT = PROCPORT_BASIC_KERNEL_IO [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [34] *D018 = main::toD0181_return#0 [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [37] *SPRITES_ENABLE = $ff [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [39] SPRITES_COLOR[main::s1#2] = WHITE [ frame_done main::s1#2 ] ( main:9 [ frame_done main::s1#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::s1#2 main::s1#1 ]
Statement [47] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ]
Removing always clobbered register reg byte a as potential for zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ]
Statement [48] *VIC_CONTROL = *VIC_CONTROL & $7f [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [49] *RASTER = $28 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [50] *IRQ_ENABLE = IRQ_RASTER [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [51] *IRQ_STATUS = IRQ_RASTER [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [52] *KERNEL_IRQ = &plex_irq [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [54] if(frame_done) goto main::@7 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [55] frame_done = false [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [59] PLEX_PTR[main::s#2] = SPRITE_0#0+' ' [ frame_done main::s#2 main::x#2 ] ( main:9 [ frame_done main::s#2 main::x#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::s#2 main::s#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ main::x#2 main::x#1 ]
Statement [60] main::$12 = main::s#2 << 1 [ frame_done main::s#2 main::x#2 main::$12 ] ( main:9 [ frame_done main::s#2 main::x#2 main::$12 ] { } ) always clobbers reg byte a
Statement [61] main::$13 = XMOVEMENT_HI[main::x#2] w= XMOVEMENT[main::x#2] [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] ( main:9 [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:52 [ main::$12 ]
Statement [62] PLEX_XPOS[main::$12] = main::$13 [ frame_done main::s#2 main::x#2 ] ( main:9 [ frame_done main::s#2 main::x#2 ] { } ) always clobbers reg byte a
Statement [63] main::x#1 = main::x#2 + 8 [ frame_done main::s#2 main::x#1 ] ( main:9 [ frame_done main::s#2 main::x#1 ] { } ) always clobbers reg byte a
Statement [65] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a
Statement [66] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte x reg byte y
Removing always clobbered register reg byte x as potential for zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ]
Statement [69] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y
Statement [73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a reg byte x reg byte y
Removing always clobbered register reg byte a as potential for zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ]
Statement [74] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] { } ) always clobbers reg byte y
Statement [75] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] { } ) always clobbers reg byte a
Statement [76] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:61 [ plexShowSprite::$11 ]
Statement [77] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:61 [ plexShowSprite::$11 ]
Statement [78] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a
Statement [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a
Statement [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [88] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ]
Statement [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { } ) always clobbers reg byte a
Statement [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
Statement [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:19 [ font_2x2::b#2 font_2x2::b#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:20 [ font_2x2::glyph_bit#0 ]
Statement [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { } ) always clobbers reg byte a
Statement [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { } ) always clobbers reg byte a
Statement [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { } ) always clobbers reg byte a
Statement [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { } ) always clobbers reg byte a
Statement [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { } ) always clobbers reg byte a
Statement [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a
Statement [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a
Statement [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ]
Statement [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] { } ) always clobbers reg byte a
Statement [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:26 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ]
Removing always clobbered register reg byte a as potential for zp[1]:80 [ font_2x2_to_sprites::$3 ]
Statement [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ]
Statement [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:82 [ font_2x2_to_sprites::sprite_idx#2 ]
Statement [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] { } ) always clobbers reg byte a
Statement [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] { } ) always clobbers reg byte a
Statement [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] { } ) always clobbers reg byte a
Statement [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] { } ) always clobbers reg byte a
Statement [157] PLEX_SCREEN_PTR = SCREEN+$3f8 [ ] ( main:9::plexInit:32 [ frame_done ] { } ) always clobbers reg byte a
Statement [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:36 [ plex_move::s#2 plex_move::s#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ]
Statement [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [169] plex_move::$6 = plex_move::s#2 << 1 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:83 [ plex_move::$6 ]
Statement [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [173] if(*scroll_text_next#12!=0) goto plex_move::@6 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ]
Removing always clobbered register reg byte y as potential for zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ]
Removing always clobbered register reg byte y as potential for zp[1]:36 [ plex_move::s#2 plex_move::s#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ]
Statement [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y
Statement [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte x as potential for zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ]
Removing always clobbered register reg byte x as potential for zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ]
Removing always clobbered register reg byte x as potential for zp[1]:36 [ plex_move::s#2 plex_move::s#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ]
Statement [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [183] y_sin_idx#13 = y_sin_idx#11 + 3 [ x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] ( main:9::plex_move:43 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { } main:9::plex_move:56 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x
Statement [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:40 [ plexSort::m#2 plexSort::m#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:87 [ plexSort::nxt_idx#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:88 [ plexSort::nxt_y#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:41 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ]
Statement [196] if(plexSort::nxt_y#0<PLEX_YPOS[PLEX_SORTED_IDX[plexSort::s#1]]) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } ) always clobbers reg byte a
Statement [198] PLEX_SORTED_IDX[plexSort::s#2] = plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 ] { } ) always clobbers reg byte a
Statement [201] plex_show_idx = 0 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [202] plex_sprite_idx = 0 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [203] plex_sprite_msb = 1 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [206] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::plexFreePrepare1_s#2 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::plexFreePrepare1_s#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:42 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ]
Statement [209] plex_free_next = 0 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [7] frame_done = false [ frame_done ] ( [ frame_done ] { } ) always clobbers reg byte a
Statement [14] plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y
Statement [15] plex_irq::$4 = *RASTER + 3 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a
Statement [16] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a
Statement [18] if(plex_show_idx<PLEX_COUNT) goto plex_irq::@1 [ plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a
Statement [19] *RASTER = $28 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [20] frame_done = true [ ] ( [ ] { } ) always clobbers reg byte a
Statement [21] *IRQ_STATUS = IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a
Statement [26] *PROCPORT = PROCPORT_RAM_CHARROM [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [28] *PROCPORT = PROCPORT_BASIC_KERNEL_IO [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [34] *D018 = main::toD0181_return#0 [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [37] *SPRITES_ENABLE = $ff [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [39] SPRITES_COLOR[main::s1#2] = WHITE [ frame_done main::s1#2 ] ( main:9 [ frame_done main::s1#2 ] { } ) always clobbers reg byte a
Statement [47] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [48] *VIC_CONTROL = *VIC_CONTROL & $7f [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [49] *RASTER = $28 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [50] *IRQ_ENABLE = IRQ_RASTER [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [51] *IRQ_STATUS = IRQ_RASTER [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [52] *KERNEL_IRQ = &plex_irq [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [54] if(frame_done) goto main::@7 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [55] frame_done = false [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [59] PLEX_PTR[main::s#2] = SPRITE_0#0+' ' [ frame_done main::s#2 main::x#2 ] ( main:9 [ frame_done main::s#2 main::x#2 ] { } ) always clobbers reg byte a
Statement [60] main::$12 = main::s#2 << 1 [ frame_done main::s#2 main::x#2 main::$12 ] ( main:9 [ frame_done main::s#2 main::x#2 main::$12 ] { } ) always clobbers reg byte a
Statement [61] main::$13 = XMOVEMENT_HI[main::x#2] w= XMOVEMENT[main::x#2] [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] ( main:9 [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] { } ) always clobbers reg byte a
Statement [62] PLEX_XPOS[main::$12] = main::$13 [ frame_done main::s#2 main::x#2 ] ( main:9 [ frame_done main::s#2 main::x#2 ] { } ) always clobbers reg byte a
Statement [63] main::x#1 = main::x#2 + 8 [ frame_done main::s#2 main::x#1 ] ( main:9 [ frame_done main::s#2 main::x#1 ] { } ) always clobbers reg byte a
Statement [65] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a
Statement [66] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte x reg byte y
Statement [67] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:56 [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Statement [69] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y
Statement [73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a reg byte x reg byte y
Statement [74] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] { } ) always clobbers reg byte y
Statement [75] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] { } ) always clobbers reg byte a
Statement [76] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] { } ) always clobbers reg byte a
Statement [77] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y
Statement [78] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a
Statement [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a
Statement [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [88] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { } ) always clobbers reg byte a
Statement [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { } ) always clobbers reg byte a
Statement [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { } ) always clobbers reg byte a
Statement [98] font_2x2::$1 = font_2x2::glyph_bits#2 & $80 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] { } ) always clobbers reg byte a
Statement [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { } ) always clobbers reg byte a
Statement [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { } ) always clobbers reg byte a
Statement [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { } ) always clobbers reg byte a
Statement [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { } ) always clobbers reg byte a
Statement [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { } ) always clobbers reg byte a
Statement [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { } ) always clobbers reg byte a
Statement [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a
Statement [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a
Statement [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] { } ) always clobbers reg byte a
Statement [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] { } ) always clobbers reg byte a
Statement [138] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a
Statement [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a
Statement [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] { } ) always clobbers reg byte a
Statement [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] { } ) always clobbers reg byte a
Statement [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] { } ) always clobbers reg byte a
Statement [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] { } ) always clobbers reg byte a
Statement [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] { } ) always clobbers reg byte a
Statement [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] { } ) always clobbers reg byte a
Statement [157] PLEX_SCREEN_PTR = SCREEN+$3f8 [ ] ( main:9::plexInit:32 [ frame_done ] { } ) always clobbers reg byte a
Statement [164] plex_move::y_idx#0 = y_sin_idx#11 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y
Statement [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x
Removing always clobbered register reg byte x as potential for zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ]
Statement [169] plex_move::$6 = plex_move::s#2 << 1 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:83 [ plex_move::$6 ]
Statement [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [172] if(plex_move::x_idx#2!=0) goto plex_move::@2 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [173] if(*scroll_text_next#12!=0) goto plex_move::@6 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y
Statement [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y
Statement [177] PLEX_PTR[plex_move::s#2] = plex_move::$4 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte y
Statement [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x
Statement [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [183] y_sin_idx#13 = y_sin_idx#11 + 3 [ x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] ( main:9::plex_move:43 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { } main:9::plex_move:56 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x
Statement [190] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a
Statement [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a
Statement [196] if(plexSort::nxt_y#0<PLEX_YPOS[PLEX_SORTED_IDX[plexSort::s#1]]) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } ) always clobbers reg byte a
Statement [198] PLEX_SORTED_IDX[plexSort::s#2] = plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 ] { } ) always clobbers reg byte a
Statement [201] plex_show_idx = 0 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [202] plex_sprite_idx = 0 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [203] plex_sprite_msb = 1 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [206] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::plexFreePrepare1_s#2 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::plexFreePrepare1_s#2 ] { } ) always clobbers reg byte a
Statement [209] plex_free_next = 0 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [2] plex_show_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [3] plex_sprite_idx = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [4] plex_sprite_msb = 1 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [5] plex_free_next = 0 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [7] frame_done = false [ frame_done ] ( [ frame_done ] { } ) always clobbers reg byte a
Statement [14] plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte y
Statement [15] plex_irq::$4 = *RASTER + 3 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a
Statement [16] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] ( [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plex_irq::plexFreeNextYpos1_return#0 plex_irq::$4 ] { } ) always clobbers reg byte a
Statement [18] if(plex_show_idx<PLEX_COUNT) goto plex_irq::@1 [ plex_irq::plexFreeNextYpos1_return#0 ] ( [ plex_irq::plexFreeNextYpos1_return#0 ] { } ) always clobbers reg byte a
Statement [19] *RASTER = $28 [ ] ( [ ] { } ) always clobbers reg byte a
Statement [20] frame_done = true [ ] ( [ ] { } ) always clobbers reg byte a
Statement [21] *IRQ_STATUS = IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a
Statement [26] *PROCPORT = PROCPORT_RAM_CHARROM [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [28] *PROCPORT = PROCPORT_BASIC_KERNEL_IO [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [34] *D018 = main::toD0181_return#0 [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [37] *SPRITES_ENABLE = $ff [ frame_done ] ( main:9 [ frame_done ] { } ) always clobbers reg byte a
Statement [39] SPRITES_COLOR[main::s1#2] = WHITE [ frame_done main::s1#2 ] ( main:9 [ frame_done main::s1#2 ] { } ) always clobbers reg byte a
Statement [47] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [48] *VIC_CONTROL = *VIC_CONTROL & $7f [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [49] *RASTER = $28 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [50] *IRQ_ENABLE = IRQ_RASTER [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [51] *IRQ_STATUS = IRQ_RASTER [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [52] *KERNEL_IRQ = &plex_irq [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [54] if(frame_done) goto main::@7 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [55] frame_done = false [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] ( main:9 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [59] PLEX_PTR[main::s#2] = SPRITE_0#0+' ' [ frame_done main::s#2 main::x#2 ] ( main:9 [ frame_done main::s#2 main::x#2 ] { } ) always clobbers reg byte a
Statement [60] main::$12 = main::s#2 << 1 [ frame_done main::s#2 main::x#2 main::$12 ] ( main:9 [ frame_done main::s#2 main::x#2 main::$12 ] { } ) always clobbers reg byte a
Statement [61] main::$13 = XMOVEMENT_HI[main::x#2] w= XMOVEMENT[main::x#2] [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] ( main:9 [ frame_done main::s#2 main::x#2 main::$12 main::$13 ] { } ) always clobbers reg byte a
Statement [62] PLEX_XPOS[main::$12] = main::$13 [ frame_done main::s#2 main::x#2 ] ( main:9 [ frame_done main::s#2 main::x#2 ] { } ) always clobbers reg byte a
Statement [63] main::x#1 = main::x#2 + 8 [ frame_done main::s#2 main::x#1 ] ( main:9 [ frame_done main::s#2 main::x#1 ] { } ) always clobbers reg byte a
Statement [65] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a
Statement [66] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte x reg byte y
Statement [67] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::plexFreeAdd1_ypos#0 ] { } ) always clobbers reg byte y
Statement [69] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte y
Statement [73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 ] { } ) always clobbers reg byte a reg byte x reg byte y
Statement [74] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::xpos_idx#0 ] { } ) always clobbers reg byte y
Statement [75] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 ] { } ) always clobbers reg byte a
Statement [76] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::plex_sprite_idx2#0 plexShowSprite::$11 plexShowSprite::$2 ] { } ) always clobbers reg byte a
Statement [77] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$11 ] { } ) always clobbers reg byte y
Statement [78] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$3 ] { } ) always clobbers reg byte a
Statement [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next plexShowSprite::$9 ] { } ) always clobbers reg byte a
Statement [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [88] plex_sprite_msb = 1 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] ( plexShowSprite:13 [ PLEX_SCREEN_PTR plex_show_idx plex_sprite_idx plex_sprite_msb plex_free_next ] { } ) always clobbers reg byte a
Statement [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 ] { } ) always clobbers reg byte a
Statement [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2_right#0 font_2x2::next_2x2_left#10 ] { } ) always clobbers reg byte a
Statement [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#0 ] { } ) always clobbers reg byte a
Statement [98] font_2x2::$1 = font_2x2::glyph_bits#2 & $80 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::glyph_bits_2x2#3 font_2x2::b#2 font_2x2::$1 ] { } ) always clobbers reg byte a
Statement [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$5 ] { } ) always clobbers reg byte a
Statement [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::glyph_bits_2x2#1 ] { } ) always clobbers reg byte a
Statement [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bit#0 font_2x2::$7 ] { } ) always clobbers reg byte a
Statement [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#7 font_2x2::l2#8 font_2x2::next_2x2_right#7 font_2x2::glyph_bits#2 font_2x2::b#2 font_2x2::glyph_bits_2x2#2 ] { } ) always clobbers reg byte a
Statement [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 ] { } ) always clobbers reg byte a
Statement [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 [ font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_2x2_left#0 font_2x2::next_original#4 font_2x2::c#11 font_2x2::l#2 font_2x2::next_2x2_left#1 font_2x2::next_2x2_right#1 ] { } ) always clobbers reg byte a
Statement [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 [ font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::next_original#4 font_2x2::c#11 font_2x2::next_2x2#1 ] { } ) always clobbers reg byte a
Statement [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 [ font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] ( main:9::font_2x2:27 [ frame_done font_2x2::c#11 font_2x2::next_2x2#1 font_2x2::next_original#1 ] { } ) always clobbers reg byte a
Statement [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 ] { } ) always clobbers reg byte a
Statement [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_left#6 ] { } ) always clobbers reg byte a
Statement [138] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a
Statement [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::$3 ] { } ) always clobbers reg byte a
Statement [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#1 ] { } ) always clobbers reg byte a
Statement [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::sprite_idx#2 ] { } ) always clobbers reg byte a
Statement [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::char_current#1 ] { } ) always clobbers reg byte a
Statement [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#1 font_2x2_to_sprites::sprite#1 ] { } ) always clobbers reg byte a
Statement [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 ] { } ) always clobbers reg byte a
Statement [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] ( main:9::font_2x2_to_sprites:30 [ frame_done font_2x2_to_sprites::c#2 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::i#2 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::char_left#1 font_2x2_to_sprites::char_right#1 ] { } ) always clobbers reg byte a
Statement [157] PLEX_SCREEN_PTR = SCREEN+$3f8 [ ] ( main:9::plexInit:32 [ frame_done ] { } ) always clobbers reg byte a
Statement [164] plex_move::y_idx#0 = y_sin_idx#11 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [165] plex_move::x_idx#0 = x_movement_idx#11 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 plex_move::x_idx#0 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 plex_move::x_idx#0 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#27 plex_move::y_idx#0 plex_move::x_idx#0 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::y_idx#2 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y
Statement [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x
Statement [169] plex_move::$6 = plex_move::s#2 << 1 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 plex_move::$6 plex_move::$7 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y
Statement [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [172] if(plex_move::x_idx#2!=0) goto plex_move::@2 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [173] if(*scroll_text_next#12!=0) goto plex_move::@6 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 scroll_text_next#12 plex_move::y_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y
Statement [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 plex_move::$4 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte y
Statement [177] PLEX_PTR[plex_move::s#2] = plex_move::$4 [ y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 plex_move::s#2 plex_move::x_idx#2 plex_move::y_idx#1 scroll_text_next#13 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte y
Statement [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::s#2 plex_move::y_idx#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x
Statement [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 [ y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] ( main:9::plex_move:43 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { } main:9::plex_move:56 [ frame_done y_sin_idx#11 x_movement_idx#11 scroll_text_next#14 plex_move::y_idx#1 plex_move::s#1 plex_move::x_idx#1 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a
Statement [183] y_sin_idx#13 = y_sin_idx#11 + 3 [ x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] ( main:9::plex_move:43 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { } main:9::plex_move:56 [ frame_done x_movement_idx#11 y_sin_idx#13 scroll_text_next#14 ] { { y_sin_idx#11 = y_sin_idx#13 } { x_movement_idx#11 = x_movement_idx#13 } { scroll_text_next#14 = scroll_text_next#27 } } ) always clobbers reg byte a reg byte x
Statement [190] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 ] { } ) always clobbers reg byte a
Statement [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#3 ] { } ) always clobbers reg byte a
Statement [196] if(plexSort::nxt_y#0<PLEX_YPOS[PLEX_SORTED_IDX[plexSort::s#1]]) goto plexSort::@3 [ plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 plexSort::nxt_idx#0 plexSort::nxt_y#0 plexSort::s#1 ] { } ) always clobbers reg byte a
Statement [198] PLEX_SORTED_IDX[plexSort::s#2] = plexSort::nxt_idx#0 [ plexSort::m#2 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::m#2 ] { } ) always clobbers reg byte a
Statement [201] plex_show_idx = 0 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [202] plex_sprite_idx = 0 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [203] plex_sprite_msb = 1 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Statement [206] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 [ plexSort::plexFreePrepare1_s#2 ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::plexFreePrepare1_s#2 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 plexSort::plexFreePrepare1_s#2 ] { } ) always clobbers reg byte a
Statement [209] plex_free_next = 0 [ ] ( main:9::plexSort:45 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } main:9::plexSort:58 [ frame_done y_sin_idx#13 x_movement_idx#13 scroll_text_next#14 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::s#2 main::s#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ main::x#2 main::x#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::s1#2 main::s1#1 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] : zp[2]:5 ,
Potential registers zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 ] : zp[2]:7 ,
Potential registers zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] : zp[1]:9 , reg byte x , reg byte y ,
Potential registers zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] : zp[1]:10 , reg byte x , reg byte y ,
Potential registers zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] : zp[2]:11 ,
Potential registers zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] : zp[1]:13 , reg byte x , reg byte y ,
Potential registers zp[2]:14 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] : zp[2]:14 ,
Potential registers zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] : zp[1]:16 , reg byte x , reg byte y ,
Potential registers zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] : zp[2]:17 ,
Potential registers zp[1]:19 [ font_2x2::b#2 font_2x2::b#1 ] : zp[1]:19 , reg byte x , reg byte y ,
Potential registers zp[1]:20 [ font_2x2::glyph_bit#0 ] : zp[1]:20 , reg byte x , reg byte y ,
Potential registers zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] : zp[1]:21 , reg byte x , reg byte y ,
Potential registers zp[2]:22 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] : zp[2]:22 ,
Potential registers zp[2]:24 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] : zp[2]:24 ,
Potential registers zp[1]:26 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] : zp[1]:26 , reg byte x , reg byte y ,
Potential registers zp[2]:27 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ] : zp[2]:27 ,
Potential registers zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] : zp[1]:29 , reg byte x , reg byte y ,
Potential registers zp[2]:30 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ] : zp[2]:30 ,
Potential registers zp[1]:32 [ plexInit::i#2 plexInit::i#1 ] : zp[1]:32 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] : zp[1]:33 ,
Potential registers zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] : zp[1]:34 ,
Potential registers zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] : zp[1]:35 ,
Potential registers zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] : zp[1]:36 ,
Potential registers zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] : zp[1]:37 ,
Potential registers zp[2]:38 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] : zp[2]:38 ,
Potential registers zp[1]:40 [ plexSort::m#2 plexSort::m#1 ] : zp[1]:40 , reg byte x , reg byte y ,
Potential registers zp[1]:41 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] : zp[1]:41 , reg byte x , reg byte y ,
Potential registers zp[1]:42 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] : zp[1]:42 , reg byte x , reg byte y ,
Potential registers zp[2]:43 [ PLEX_SCREEN_PTR ] : zp[2]:43 ,
Potential registers zp[1]:45 [ plex_show_idx ] : zp[1]:45 ,
Potential registers zp[1]:46 [ plex_sprite_idx ] : zp[1]:46 ,
Potential registers zp[1]:47 [ plex_sprite_msb ] : zp[1]:47 ,
Potential registers zp[1]:48 [ plex_free_next ] : zp[1]:48 ,
Potential registers zp[1]:49 [ frame_done ] : zp[1]:49 ,
Potential registers zp[1]:50 [ plex_irq::plexFreeNextYpos1_return#0 ] : zp[1]:50 , reg byte x , reg byte y ,
Potential registers zp[1]:51 [ plex_irq::$4 ] : zp[1]:51 , reg byte x , reg byte y ,
Potential registers zp[1]:52 [ main::$12 ] : zp[1]:52 , reg byte x , reg byte y ,
Potential registers zp[2]:53 [ main::$13 ] : zp[2]:53 ,
Potential registers zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ] : zp[1]:55 ,
Potential registers zp[1]:56 [ plexShowSprite::plexFreeAdd1_ypos#0 ] : zp[1]:56 , reg byte a , reg byte x ,
Potential registers zp[1]:57 [ plexShowSprite::plexFreeAdd1_$0 ] : zp[1]:57 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:58 [ plexShowSprite::plexFreeAdd1_$1 ] : zp[1]:58 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:59 [ plexShowSprite::plexFreeAdd1_$2 ] : zp[1]:59 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:60 [ plexShowSprite::xpos_idx#0 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:61 [ plexShowSprite::$11 ] : zp[1]:61 , reg byte x ,
Potential registers zp[1]:62 [ plexShowSprite::$2 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:63 [ plexShowSprite::$3 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:64 [ plexShowSprite::$9 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:65 [ plexShowSprite::$5 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:66 [ plexShowSprite::$6 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:67 [ font_2x2::$1 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:68 [ font_2x2::$5 ] : zp[2]:68 ,
Potential registers zp[2]:70 [ font_2x2::glyph_bits_2x2#1 ] : zp[2]:70 ,
Potential registers zp[2]:72 [ font_2x2::$7 ] : zp[2]:72 ,
Potential registers zp[1]:74 [ font_2x2::$10 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:75 [ font_2x2::$11 ] : zp[1]:75 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:76 [ font_2x2::$12 ] : zp[1]:76 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:77 [ font_2x2::$13 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:78 [ font_2x2::$14 ] : zp[1]:78 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:79 [ font_2x2::$15 ] : zp[1]:79 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:80 [ font_2x2_to_sprites::$3 ] : zp[1]:80 , reg byte x , reg byte y ,
Potential registers zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] : zp[1]:81 , reg byte x , reg byte y ,
Potential registers zp[1]:82 [ font_2x2_to_sprites::sprite_idx#2 ] : zp[1]:82 , reg byte x , reg byte y ,
Potential registers zp[1]:83 [ plex_move::$6 ] : zp[1]:83 , reg byte x ,
Potential registers zp[2]:84 [ plex_move::$7 ] : zp[2]:84 ,
Potential registers zp[1]:86 [ plex_move::$4 ] : zp[1]:86 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:87 [ plexSort::nxt_idx#0 ] : zp[1]:87 , reg byte x , reg byte y ,
Potential registers zp[1]:88 [ plexSort::nxt_y#0 ] : zp[1]:88 , reg byte x , reg byte y ,
Potential registers zp[1]:89 [ plexSort::s#2 ] : zp[1]:89 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [plexSort] 3,616,672.83: zp[1]:41 [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] 300,003: zp[1]:42 [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] 200,002: zp[1]:89 [ plexSort::s#2 ] 191,668.58: zp[1]:40 [ plexSort::m#2 plexSort::m#1 ] 150,000.38: zp[1]:88 [ plexSort::nxt_y#0 ] 30,000.3: zp[1]:87 [ plexSort::nxt_idx#0 ]
Uplift Scope [font_2x2] 200,002: zp[1]:67 [ font_2x2::$1 ] 200,002: zp[2]:68 [ font_2x2::$5 ] 200,002: zp[2]:70 [ font_2x2::glyph_bits_2x2#1 ] 200,002: zp[2]:72 [ font_2x2::$7 ] 170,001.7: zp[1]:19 [ font_2x2::b#2 font_2x2::b#1 ] 121,114.22: zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] 60,000.9: zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] 50,000.5: zp[1]:20 [ font_2x2::glyph_bit#0 ] 32,581.12: zp[2]:14 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] 24,169.08: zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] 23,581.12: zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] 20,002: zp[1]:74 [ font_2x2::$10 ] 20,002: zp[1]:76 [ font_2x2::$12 ] 20,002: zp[1]:77 [ font_2x2::$13 ] 20,002: zp[1]:79 [ font_2x2::$15 ] 16,036.09: zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] 10,001: zp[1]:75 [ font_2x2::$11 ] 10,001: zp[1]:78 [ font_2x2::$14 ] 1,557.11: zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] 1,206.56: zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] 1,010.28: zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 ]
Uplift Scope [plex_move] 200,002: zp[2]:84 [ plex_move::$7 ] 200,002: zp[1]:86 [ plex_move::$4 ] 183,335.17: zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] 164,836.47: zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] 104,455.48: zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] 100,001: zp[1]:83 [ plex_move::$6 ]
Uplift Scope [] 357,974.44: zp[2]:38 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] 163.15: zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] 161.37: zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] 48.76: zp[1]:47 [ plex_sprite_msb ] 46.09: zp[1]:45 [ plex_show_idx ] 45.39: zp[1]:46 [ plex_sprite_idx ] 42.48: zp[1]:48 [ plex_free_next ] 26.33: zp[1]:49 [ frame_done ] 6.18: zp[2]:43 [ PLEX_SCREEN_PTR ]
Uplift Scope [font_2x2_to_sprites] 33,822.55: zp[2]:30 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ] 24,822.55: zp[2]:27 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ] 18,573.29: zp[1]:26 [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] 15,001.5: zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] 15,001.5: zp[1]:82 [ font_2x2_to_sprites::sprite_idx#2 ] 12,223.44: zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] 10,001: zp[1]:80 [ font_2x2_to_sprites::$3 ] 2,525.05: zp[2]:24 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] 2,138.5: zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] 1,867.63: zp[2]:22 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ]
Uplift Scope [plexInit] 3,503.5: zp[1]:32 [ plexInit::i#2 plexInit::i#1 ]
Uplift Scope [plexShowSprite] 202: zp[1]:57 [ plexShowSprite::plexFreeAdd1_$0 ] 202: zp[1]:58 [ plexShowSprite::plexFreeAdd1_$1 ] 202: zp[1]:59 [ plexShowSprite::plexFreeAdd1_$2 ] 202: zp[1]:60 [ plexShowSprite::xpos_idx#0 ] 202: zp[1]:62 [ plexShowSprite::$2 ] 202: zp[1]:63 [ plexShowSprite::$3 ] 202: zp[1]:64 [ plexShowSprite::$9 ] 202: zp[1]:65 [ plexShowSprite::$5 ] 202: zp[1]:66 [ plexShowSprite::$6 ] 151.5: zp[1]:56 [ plexShowSprite::plexFreeAdd1_ypos#0 ] 101: zp[1]:61 [ plexShowSprite::$11 ] 25.25: zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ]
Uplift Scope [main] 303: zp[1]:4 [ main::s1#2 main::s1#1 ] 274.14: zp[1]:2 [ main::s#2 main::s#1 ] 202: zp[2]:53 [ main::$13 ] 168.33: zp[1]:3 [ main::x#2 main::x#1 ] 101: zp[1]:52 [ main::$12 ]
Uplift Scope [plex_irq] 11: zp[1]:51 [ plex_irq::$4 ] 4.8: zp[1]:50 [ plex_irq::plexFreeNextYpos1_return#0 ]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope [__start]
Uplifting [plexSort] best 252654 combination reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ] reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ] reg byte x [ plexSort::s#2 ] zp[1]:40 [ plexSort::m#2 plexSort::m#1 ] zp[1]:88 [ plexSort::nxt_y#0 ] zp[1]:87 [ plexSort::nxt_idx#0 ]
Limited combination testing to 100 combinations of 972 possible.
Uplifting [font_2x2] best 229654 combination reg byte a [ font_2x2::$1 ] zp[2]:68 [ font_2x2::$5 ] zp[2]:70 [ font_2x2::glyph_bits_2x2#1 ] zp[2]:72 [ font_2x2::$7 ] reg byte y [ font_2x2::b#2 font_2x2::b#1 ] zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] reg byte x [ font_2x2::glyph_bit#0 ] zp[2]:14 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] zp[1]:74 [ font_2x2::$10 ] zp[1]:76 [ font_2x2::$12 ] zp[1]:77 [ font_2x2::$13 ] zp[1]:79 [ font_2x2::$15 ] zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] zp[1]:75 [ font_2x2::$11 ] zp[1]:78 [ font_2x2::$14 ] zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 ]
Limited combination testing to 100 combinations of 11943936 possible.
Uplifting [plex_move] best 228654 combination zp[2]:84 [ plex_move::$7 ] reg byte a [ plex_move::$4 ] zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] reg byte x [ plex_move::$6 ]
Uplifting [] best 228654 combination zp[2]:38 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ] zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ] zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ] zp[1]:47 [ plex_sprite_msb ] zp[1]:45 [ plex_show_idx ] zp[1]:46 [ plex_sprite_idx ] zp[1]:48 [ plex_free_next ] zp[1]:49 [ frame_done ] zp[2]:43 [ PLEX_SCREEN_PTR ]
Uplifting [font_2x2_to_sprites] best 225954 combination zp[2]:30 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ] zp[2]:27 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ] reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ] zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] reg byte y [ font_2x2_to_sprites::sprite_idx#2 ] zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] zp[1]:80 [ font_2x2_to_sprites::$3 ] zp[2]:24 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] zp[2]:22 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ]
Limited combination testing to 100 combinations of 729 possible.
Uplifting [plexInit] best 225834 combination reg byte x [ plexInit::i#2 plexInit::i#1 ]
Uplifting [plexShowSprite] best 225814 combination reg byte a [ plexShowSprite::plexFreeAdd1_$0 ] reg byte a [ plexShowSprite::plexFreeAdd1_$1 ] reg byte a [ plexShowSprite::plexFreeAdd1_$2 ] reg byte a [ plexShowSprite::xpos_idx#0 ] zp[1]:62 [ plexShowSprite::$2 ] zp[1]:63 [ plexShowSprite::$3 ] zp[1]:64 [ plexShowSprite::$9 ] zp[1]:65 [ plexShowSprite::$5 ] zp[1]:66 [ plexShowSprite::$6 ] zp[1]:56 [ plexShowSprite::plexFreeAdd1_ypos#0 ] zp[1]:61 [ plexShowSprite::$11 ] zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ]
Limited combination testing to 100 combinations of 1572864 possible.
Uplifting [main] best 225554 combination reg byte x [ main::s1#2 main::s1#1 ] zp[1]:2 [ main::s#2 main::s#1 ] zp[2]:53 [ main::$13 ] reg byte x [ main::x#2 main::x#1 ] reg byte y [ main::$12 ]
Uplifting [plex_irq] best 225491 combination zp[1]:51 [ plex_irq::$4 ] reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ]
Uplifting [MOS6526_CIA] best 225491 combination
Uplifting [MOS6569_VICII] best 225491 combination
Uplifting [MOS6581_SID] best 225491 combination
Uplifting [__start] best 225491 combination
Attempting to uplift remaining variables inzp[1]:40 [ plexSort::m#2 plexSort::m#1 ]
Uplifting [plexSort] best 225491 combination zp[1]:40 [ plexSort::m#2 plexSort::m#1 ]
Attempting to uplift remaining variables inzp[1]:36 [ plex_move::s#2 plex_move::s#1 ]
Uplifting [plex_move] best 225491 combination zp[1]:36 [ plex_move::s#2 plex_move::s#1 ]
Attempting to uplift remaining variables inzp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ]
Uplifting [plex_move] best 225491 combination zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ]
Attempting to uplift remaining variables inzp[1]:88 [ plexSort::nxt_y#0 ]
Uplifting [plexSort] best 225491 combination zp[1]:88 [ plexSort::nxt_y#0 ]
Attempting to uplift remaining variables inzp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
Uplifting [font_2x2] best 225491 combination zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
Attempting to uplift remaining variables inzp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ]
Uplifting [plex_move] best 225491 combination zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ]
Attempting to uplift remaining variables inzp[1]:87 [ plexSort::nxt_idx#0 ]
Uplifting [plexSort] best 225491 combination zp[1]:87 [ plexSort::nxt_idx#0 ]
Attempting to uplift remaining variables inzp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
Uplifting [font_2x2] best 225491 combination zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
Attempting to uplift remaining variables inzp[1]:74 [ font_2x2::$10 ]
Uplifting [font_2x2] best 224891 combination reg byte a [ font_2x2::$10 ]
Attempting to uplift remaining variables inzp[1]:76 [ font_2x2::$12 ]
Uplifting [font_2x2] best 224291 combination reg byte a [ font_2x2::$12 ]
Attempting to uplift remaining variables inzp[1]:77 [ font_2x2::$13 ]
Uplifting [font_2x2] best 223691 combination reg byte a [ font_2x2::$13 ]
Attempting to uplift remaining variables inzp[1]:79 [ font_2x2::$15 ]
Uplifting [font_2x2] best 223091 combination reg byte a [ font_2x2::$15 ]
Attempting to uplift remaining variables inzp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ]
Uplifting [font_2x2] best 223091 combination zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ]
Attempting to uplift remaining variables inzp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ]
Uplifting [font_2x2_to_sprites] best 223091 combination zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ]
Attempting to uplift remaining variables inzp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ]
Uplifting [font_2x2_to_sprites] best 223091 combination zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ]
Attempting to uplift remaining variables inzp[1]:75 [ font_2x2::$11 ]
Uplifting [font_2x2] best 222491 combination reg byte y [ font_2x2::$11 ]
Attempting to uplift remaining variables inzp[1]:78 [ font_2x2::$14 ]
Uplifting [font_2x2] best 221891 combination reg byte y [ font_2x2::$14 ]
Attempting to uplift remaining variables inzp[1]:80 [ font_2x2_to_sprites::$3 ]
Uplifting [font_2x2_to_sprites] best 221891 combination zp[1]:80 [ font_2x2_to_sprites::$3 ]
Attempting to uplift remaining variables inzp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ]
Uplifting [font_2x2_to_sprites] best 221891 combination zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ]
Attempting to uplift remaining variables inzp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ]
Uplifting [font_2x2] best 221891 combination zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::s#2 main::s#1 ]
Uplifting [main] best 221891 combination zp[1]:2 [ main::s#2 main::s#1 ]
Attempting to uplift remaining variables inzp[1]:62 [ plexShowSprite::$2 ]
Uplifting [plexShowSprite] best 221885 combination reg byte a [ plexShowSprite::$2 ]
Attempting to uplift remaining variables inzp[1]:63 [ plexShowSprite::$3 ]
Uplifting [plexShowSprite] best 221879 combination reg byte a [ plexShowSprite::$3 ]
Attempting to uplift remaining variables inzp[1]:64 [ plexShowSprite::$9 ]
Uplifting [plexShowSprite] best 221873 combination reg byte a [ plexShowSprite::$9 ]
Attempting to uplift remaining variables inzp[1]:65 [ plexShowSprite::$5 ]
Uplifting [plexShowSprite] best 221867 combination reg byte x [ plexShowSprite::$5 ]
Attempting to uplift remaining variables inzp[1]:66 [ plexShowSprite::$6 ]
Uplifting [plexShowSprite] best 221863 combination reg byte a [ plexShowSprite::$6 ]
Attempting to uplift remaining variables inzp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ]
Uplifting [] best 221863 combination zp[1]:33 [ y_sin_idx#11 y_sin_idx#13 ]
Attempting to uplift remaining variables inzp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ]
Uplifting [] best 221863 combination zp[1]:34 [ x_movement_idx#11 x_movement_idx#13 ]
Attempting to uplift remaining variables inzp[1]:56 [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Uplifting [plexShowSprite] best 221854 combination reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
Attempting to uplift remaining variables inzp[1]:61 [ plexShowSprite::$11 ]
Uplifting [plexShowSprite] best 221847 combination reg byte x [ plexShowSprite::$11 ]
Attempting to uplift remaining variables inzp[1]:47 [ plex_sprite_msb ]
Uplifting [] best 221847 combination zp[1]:47 [ plex_sprite_msb ]
Attempting to uplift remaining variables inzp[1]:45 [ plex_show_idx ]
Uplifting [] best 221847 combination zp[1]:45 [ plex_show_idx ]
Attempting to uplift remaining variables inzp[1]:46 [ plex_sprite_idx ]
Uplifting [] best 221847 combination zp[1]:46 [ plex_sprite_idx ]
Attempting to uplift remaining variables inzp[1]:48 [ plex_free_next ]
Uplifting [] best 221847 combination zp[1]:48 [ plex_free_next ]
Attempting to uplift remaining variables inzp[1]:49 [ frame_done ]
Uplifting [] best 221847 combination zp[1]:49 [ frame_done ]
Attempting to uplift remaining variables inzp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ]
Uplifting [plexShowSprite] best 221847 combination zp[1]:55 [ plexShowSprite::plex_sprite_idx2#0 ]
Attempting to uplift remaining variables inzp[1]:51 [ plex_irq::$4 ]
Uplifting [plex_irq] best 221847 combination zp[1]:51 [ plex_irq::$4 ]
Coalescing zero page register [ zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 ] ] with [ zp[2]:68 [ font_2x2::$5 ] ] - score: 1
Coalescing zero page register [ zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 ] ] with [ zp[2]:72 [ font_2x2::$7 ] ] - score: 1
Coalescing zero page register [ zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 ] ] with [ zp[1]:81 [ font_2x2_to_sprites::sprite_idx#1 ] ] - score: 1
Coalescing zero page register [ zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 ] ] with [ zp[2]:70 [ font_2x2::glyph_bits_2x2#1 ] ] - score: 2
Coalescing zero page register [ zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 ] ] with [ zp[1]:9 [ font_2x2::c#11 font_2x2::c#1 ] ]
Coalescing zero page register [ zp[2]:22 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 ] ] with [ zp[2]:5 [ font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] ]
Coalescing zero page register [ zp[2]:24 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 ] ] with [ zp[2]:7 [ font_2x2::next_original#4 font_2x2::next_original#1 ] ]
Coalescing zero page register [ zp[2]:27 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 ] ] with [ zp[2]:11 [ font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ] ]
Coalescing zero page register [ zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 ] ] with [ zp[1]:10 [ font_2x2::l#2 font_2x2::l#1 ] ]
Coalescing zero page register [ zp[2]:30 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 ] ] with [ zp[2]:14 [ font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ] ]
Coalescing zero page register [ zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 ] ] with [ zp[1]:13 [ font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] ]
Coalescing zero page register [ zp[1]:36 [ plex_move::s#2 plex_move::s#1 ] ] with [ zp[1]:16 [ font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ] ]
Coalescing zero page register [ zp[1]:40 [ plexSort::m#2 plexSort::m#1 ] ] with [ zp[1]:37 [ plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] ]
Coalescing zero page register [ zp[2]:53 [ main::$13 ] ] with [ zp[2]:17 [ font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ] ]
Coalescing zero page register [ zp[1]:87 [ plexSort::nxt_idx#0 ] ] with [ zp[1]:80 [ font_2x2_to_sprites::$3 ] ]
Coalescing zero page register [ zp[1]:40 [ plexSort::m#2 plexSort::m#1 plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 ] ] with [ zp[1]:21 [ font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 font_2x2::c#11 font_2x2::c#1 ] ]
Coalescing zero page register [ zp[2]:84 [ plex_move::$7 ] ] with [ zp[2]:22 [ font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ] ]
Coalescing zero page register [ zp[1]:87 [ plexSort::nxt_idx#0 font_2x2_to_sprites::$3 ] ] with [ zp[1]:35 [ plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ] ]
Coalescing zero page register [ zp[1]:88 [ plexSort::nxt_y#0 ] ] with [ zp[1]:29 [ font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 font_2x2::l#2 font_2x2::l#1 ] ]
Allocated (was zp[2]:24) zp[2]:3 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 font_2x2::next_original#4 font_2x2::next_original#1 ]
Allocated (was zp[2]:27) zp[2]:5 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
Allocated (was zp[2]:30) zp[2]:7 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
Allocated (was zp[1]:33) zp[1]:9 [ y_sin_idx#11 y_sin_idx#13 ]
Allocated (was zp[1]:34) zp[1]:10 [ x_movement_idx#11 x_movement_idx#13 ]
Allocated (was zp[1]:36) zp[1]:11 [ plex_move::s#2 plex_move::s#1 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
Allocated (was zp[2]:38) zp[2]:12 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ]
Allocated (was zp[1]:40) zp[1]:14 [ plexSort::m#2 plexSort::m#1 plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 font_2x2::c#11 font_2x2::c#1 ]
Allocated (was zp[2]:43) zp[2]:15 [ PLEX_SCREEN_PTR ]
Allocated (was zp[1]:45) zp[1]:17 [ plex_show_idx ]
Allocated (was zp[1]:46) zp[1]:18 [ plex_sprite_idx ]
Allocated (was zp[1]:47) zp[1]:19 [ plex_sprite_msb ]
Allocated (was zp[1]:48) zp[1]:20 [ plex_free_next ]
Allocated (was zp[1]:49) zp[1]:21 [ frame_done ]
Allocated (was zp[1]:51) zp[1]:22 [ plex_irq::$4 ]
Allocated (was zp[2]:53) zp[2]:23 [ main::$13 font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ]
Allocated (was zp[1]:55) zp[1]:25 [ plexShowSprite::plex_sprite_idx2#0 ]
Allocated (was zp[2]:84) zp[2]:26 [ plex_move::$7 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ]
Allocated (was zp[1]:87) zp[1]:28 [ plexSort::nxt_idx#0 font_2x2_to_sprites::$3 plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
Allocated (was zp[1]:88) zp[1]:29 [ plexSort::nxt_y#0 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 font_2x2::l#2 font_2x2::l#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
// Put a 2x2 font into sprites and show it on screen
// Commodore 64 Registers and Constants
// The MOS 6526 Complex Interface Adapter (CIA)
// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
// Upstart
// Commodore 64 PRG executable file
.file [name="spritescroller.prg", type="prg", segments="Program"]
.segmentdef Program [segments="Basic, Code, Data"]
.segmentdef Basic [start=$0801]
.segmentdef Code [start=$80d]
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(__start)
// Global Constants & labels
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// Bits for the VICII IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// RAM in 0xA000, 0xE000 CHAR ROM in 0xD000
.const PROCPORT_RAM_CHARROM = 1
// BASIC in 0xA000, I/O in 0xD000, KERNEL in 0xE000
.const PROCPORT_BASIC_KERNEL_IO = 7
.const WHITE = 1
// The number of sprites in the multiplexer
.const PLEX_COUNT = $20
.const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
// Sprite pointer for sprite 0
.const SPRITE_0 = SPRITES/$40
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label SPRITES_XMSB = $d010
.label SPRITES_COLOR = $d027
.label SPRITES_ENABLE = $d015
.label RASTER = $d012
.label VIC_CONTROL = $d011
.label D018 = $d018
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// The address of the CHARGEN character set
.label CHARGEN = $d000
// The CIA#1: keyboard matrix, joystick #1/#2
.label CIA1 = $dc00
// The vector used when the KERNAL serves IRQ interrupts
.label KERNEL_IRQ = $314
.label CHARSET_DEFAULT = $1000
.label SPRITES = $3000
.label SCREEN = $400
// The high-value table
.label XMOVEMENT_HI = XMOVEMENT+$100
// The address of the sprite pointers on the current screen (screen+0x3f8).
.label PLEX_SCREEN_PTR = $f
// The index in the PLEX tables of the next sprite to show
.label plex_show_idx = $11
// The index the next sprite to use for showing (sprites are used round-robin)
.label plex_sprite_idx = $12
// The MSB bit of the next sprite to use for showing
.label plex_sprite_msb = $13
// The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown.
.label plex_free_next = $14
// Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites.
.label frame_done = $15
// The next char to use from the scroll text
.label scroll_text_next = $c
// Y-sine index
.label y_sin_idx = 9
// X-movement index
.label x_movement_idx = $a
.segment Code
// __start
__start: {
jmp __init1
// __start::__init1
__init1:
// [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 -- pbuz1=pbuc1
lda #<$400+$3f8
sta.z PLEX_SCREEN_PTR
lda #>$400+$3f8
sta.z PLEX_SCREEN_PTR+1
// [2] plex_show_idx = 0 -- vbuz1=vbuc1
lda #0
sta.z plex_show_idx
// [3] plex_sprite_idx = 0 -- vbuz1=vbuc1
lda #0
sta.z plex_sprite_idx
// [4] plex_sprite_msb = 1 -- vbuz1=vbuc1
lda #1
sta.z plex_sprite_msb
// [5] plex_free_next = 0 -- vbuz1=vbuc1
lda #0
sta.z plex_free_next
// [6] phi from __start::__init1 to __start::__init1_toSpritePtr1 [phi:__start::__init1->__start::__init1_toSpritePtr1]
__init1_toSpritePtr1_from___init1:
jmp __init1_toSpritePtr1
// __start::__init1_toSpritePtr1
__init1_toSpritePtr1:
jmp __init1___b1
// __start::__init1_@1
__init1___b1:
// [7] frame_done = false -- vboz1=vboc1
lda #0
sta.z frame_done
// [8] phi from __start::__init1_@1 to __start::@1 [phi:__start::__init1_@1->__start::@1]
__b1_from___init1___b1:
jmp __b1
// __start::@1
__b1:
// [9] call main
jsr main
jmp __breturn
// __start::@return
__breturn:
// [10] return
rts
}
// plex_irq
// Show sprites from the multiplexer, rescheduling the IRQ as many times as needed
plex_irq: {
.label __4 = $16
// interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry
// asm { sei }
sei
// [12] phi from plex_irq plex_irq::@7 to plex_irq::@3 [phi:plex_irq/plex_irq::@7->plex_irq::@3]
__b3_from_plex_irq:
__b3_from___b7:
jmp __b3
// plex_irq::@3
__b3:
// [13] call plexShowSprite
jsr plexShowSprite
jmp plexFreeNextYpos1
// plex_irq::plexFreeNextYpos1
plexFreeNextYpos1:
// [14] plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] -- vbuxx=pbuc1_derefidx_vbuz1
ldy.z plex_free_next
ldx PLEX_FREE_YPOS,y
jmp __b6
// plex_irq::@6
__b6:
// [15] plex_irq::$4 = *RASTER + 3 -- vbuz1=_deref_pbuc1_plus_vbuc2
lda #3
clc
adc RASTER
sta.z __4
// [16] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 -- vbuz1_ge_vbuc1_then_la1
lda.z plex_show_idx
cmp #PLEX_COUNT
bcs __b4
jmp __b7
// plex_irq::@7
__b7:
// [17] if(plex_irq::plexFreeNextYpos1_return#0<plex_irq::$4) goto plex_irq::@3 -- vbuxx_lt_vbuz1_then_la1
cpx.z __4
bcc __b3_from___b7
jmp __b4
// plex_irq::@4
__b4:
// [18] if(plex_show_idx<PLEX_COUNT) goto plex_irq::@1 -- vbuz1_lt_vbuc1_then_la1
lda.z plex_show_idx
cmp #PLEX_COUNT
bcc __b1
jmp __b5
// plex_irq::@5
__b5:
// [19] *RASTER = $28 -- _deref_pbuc1=vbuc2
// Reset the raster IRQ to the top of the screen
lda #$28
sta RASTER
// [20] frame_done = true -- vboz1=vboc1
// Signal that the IRQ is done showing sprites
lda #1
sta.z frame_done
jmp __b2
// plex_irq::@2
__b2:
// [21] *IRQ_STATUS = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
// asm { cli }
//*BORDER_COLOR = 0;
cli
jmp __breturn
// plex_irq::@return
__breturn:
// [23] return
// interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit
jmp $ea81
// plex_irq::@1
__b1:
// [24] *RASTER = plex_irq::plexFreeNextYpos1_return#0 -- _deref_pbuc1=vbuxx
// Set raster IRQ line to the next sprite Y-position
stx RASTER
jmp __b2
}
// main
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f
.label s = 2
.label __13 = $17
// asm { sei }
// Create 2x2 font from CHARGEN
sei
// [26] *PROCPORT = PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_CHARROM
sta PROCPORT
// [27] call font_2x2
// [91] phi from main to font_2x2 [phi:main->font_2x2]
font_2x2_from_main:
jsr font_2x2
jmp __b9
// main::@9
__b9:
// [28] *PROCPORT = PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2
lda #PROCPORT_BASIC_KERNEL_IO
sta PROCPORT
// asm { cli }
cli
// [30] call font_2x2_to_sprites
// Convert font to sprites
// [131] phi from main::@9 to font_2x2_to_sprites [phi:main::@9->font_2x2_to_sprites]
font_2x2_to_sprites_from___b9:
jsr font_2x2_to_sprites
// [31] phi from main::@9 to main::@10 [phi:main::@9->main::@10]
__b10_from___b9:
jmp __b10
// main::@10
__b10:
// [32] call plexInit
// Initialize the multiplexer
// [156] phi from main::@10 to plexInit [phi:main::@10->plexInit]
plexInit_from___b10:
jsr plexInit
// [33] phi from main::@10 to main::toD0181 [phi:main::@10->main::toD0181]
toD0181_from___b10:
jmp toD0181
// main::toD0181
toD0181:
jmp __b8
// main::@8
__b8:
// [34] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2
// Show screen
lda #toD0181_return
sta D018
// [35] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
__b1_from___b8:
// [35] phi main::x#2 = 0 [phi:main::@8->main::@1#0] -- vbuxx=vbuc1
ldx #0
// [35] phi main::s#2 = 0 [phi:main::@8->main::@1#1] -- vbuz1=vbuc1
lda #0
sta.z s
jmp __b1
// Set the x-positions & pointers
// main::@1
__b1:
// [36] if(main::s#2<PLEX_COUNT) goto main::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z s
cmp #PLEX_COUNT
bcc __b2
jmp __b3
// main::@3
__b3:
// [37] *SPRITES_ENABLE = $ff -- _deref_pbuc1=vbuc2
// Enable & initialize sprites
lda #$ff
sta SPRITES_ENABLE
// [38] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
__b4_from___b3:
// [38] phi main::s1#2 = 0 [phi:main::@3->main::@4#0] -- vbuxx=vbuc1
ldx #0
jmp __b4
// [38] phi from main::@4 to main::@4 [phi:main::@4->main::@4]
__b4_from___b4:
// [38] phi main::s1#2 = main::s1#1 [phi:main::@4->main::@4#0] -- register_copy
jmp __b4
// main::@4
__b4:
// [39] SPRITES_COLOR[main::s1#2] = WHITE -- pbuc1_derefidx_vbuxx=vbuc2
lda #WHITE
sta SPRITES_COLOR,x
// [40] main::s1#1 = ++ main::s1#2 -- vbuxx=_inc_vbuxx
inx
// [41] if(main::s1#1!=8) goto main::@4 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne __b4_from___b4
// [42] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
__b5_from___b4:
jmp __b5
// main::@5
__b5:
// [43] call plex_move
// Move the sprites
// [163] phi from main::@5 to plex_move [phi:main::@5->plex_move]
plex_move_from___b5:
// [163] phi scroll_text_next#27 = SCROLL_TEXT [phi:main::@5->plex_move#0] -- pbuz1=pbuc1
lda #<SCROLL_TEXT
sta.z scroll_text_next
lda #>SCROLL_TEXT
sta.z scroll_text_next+1
// [163] phi x_movement_idx#11 = 0 [phi:main::@5->plex_move#1] -- vbuz1=vbuc1
lda #0
sta.z x_movement_idx
// [163] phi y_sin_idx#11 = 0 [phi:main::@5->plex_move#2] -- vbuz1=vbuc1
lda #0
sta.z y_sin_idx
jsr plex_move
// [44] phi from main::@5 to main::@11 [phi:main::@5->main::@11]
__b11_from___b5:
jmp __b11
// main::@11
__b11:
// [45] call plexSort
// Sort the sprites by y-position
// [186] phi from main::@11 to plexSort [phi:main::@11->plexSort]
plexSort_from___b11:
jsr plexSort
jmp __b12
// main::@12
__b12:
// asm { sei }
// Enable the plex IRQ
sei
// [47] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT
// [48] *VIC_CONTROL = *VIC_CONTROL & $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line to 0x00
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
// [49] *RASTER = $28 -- _deref_pbuc1=vbuc2
lda #$28
sta RASTER
// [50] *IRQ_ENABLE = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
// [51] *IRQ_STATUS = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Acknowledge any IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
// [52] *KERNEL_IRQ = &plex_irq -- _deref_qprc1=pprc2
// Set the IRQ routine
lda #<plex_irq
sta KERNEL_IRQ
lda #>plex_irq
sta KERNEL_IRQ+1
// asm { cli }
cli
jmp __b6
// main::@6
__b6:
// [54] if(frame_done) goto main::@7 -- vboz1_then_la1
lda.z frame_done
cmp #0
bne __b7
jmp __b6
// main::@7
__b7:
// [55] frame_done = false -- vboz1=vboc1
lda #0
sta.z frame_done
// [56] call plex_move
//*BORDER_COLOR = RED;
// Move the sprites
// [163] phi from main::@7 to plex_move [phi:main::@7->plex_move]
plex_move_from___b7:
// [163] phi scroll_text_next#27 = scroll_text_next#14 [phi:main::@7->plex_move#0] -- register_copy
// [163] phi x_movement_idx#11 = x_movement_idx#13 [phi:main::@7->plex_move#1] -- register_copy
// [163] phi y_sin_idx#11 = y_sin_idx#13 [phi:main::@7->plex_move#2] -- register_copy
jsr plex_move
// [57] phi from main::@7 to main::@13 [phi:main::@7->main::@13]
__b13_from___b7:
jmp __b13
// main::@13
__b13:
// [58] call plexSort
// Sort the sprites by y-position
// [186] phi from main::@13 to plexSort [phi:main::@13->plexSort]
plexSort_from___b13:
jsr plexSort
jmp __b6
// main::@2
__b2:
// [59] PLEX_PTR[main::s#2] = SPRITE_0#0+' ' -- pbuc1_derefidx_vbuz1=vbuc2
lda #SPRITE_0+' '
ldy.z s
sta PLEX_PTR,y
// [60] main::$12 = main::s#2 << 1 -- vbuyy=vbuz1_rol_1
lda.z s
asl
tay
// [61] main::$13 = XMOVEMENT_HI[main::x#2] w= XMOVEMENT[main::x#2] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx
lda XMOVEMENT_HI,x
sta.z __13+1
lda XMOVEMENT,x
sta.z __13
// [62] PLEX_XPOS[main::$12] = main::$13 -- pwuc1_derefidx_vbuyy=vwuz1
lda.z __13
sta PLEX_XPOS,y
lda.z __13+1
sta PLEX_XPOS+1,y
// [63] main::x#1 = main::x#2 + 8 -- vbuxx=vbuxx_plus_vbuc1
txa
axs #-[8]
// [64] main::s#1 = ++ main::s#2 -- vbuz1=_inc_vbuz1
inc.z s
// [35] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
__b1_from___b2:
// [35] phi main::x#2 = main::x#1 [phi:main::@2->main::@1#0] -- register_copy
// [35] phi main::s#2 = main::s#1 [phi:main::@2->main::@1#1] -- register_copy
jmp __b1
}
// plexShowSprite
// Show the next sprite.
// plexSort() prepares showing the sprites
plexShowSprite: {
.label plex_sprite_idx2 = $19
// [65] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 -- vbuz1=vbuz2_rol_1
lda.z plex_sprite_idx
asl
sta.z plex_sprite_idx2
// [66] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1)
ldx.z plex_show_idx
ldy PLEX_SORTED_IDX,x
lda PLEX_YPOS,y
// [67] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z plex_sprite_idx2
sta SPRITES_YPOS,y
jmp plexFreeAdd1
// plexShowSprite::plexFreeAdd1
plexFreeAdd1:
// [68] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $16 -- vbuaa=vbuaa_plus_vbuc1
clc
adc #$16
// [69] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z plex_free_next
sta PLEX_FREE_YPOS,y
// [70] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1 -- vbuaa=vbuz1_plus_1
lda.z plex_free_next
clc
adc #1
// [71] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7 -- vbuaa=vbuaa_band_vbuc1
and #7
// [72] plex_free_next = plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa
sta.z plex_free_next
jmp __b5
// plexShowSprite::@5
__b5:
// [73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3)
ldx.z plex_show_idx
ldy PLEX_SORTED_IDX,x
lda PLEX_PTR,y
ldy.z plex_sprite_idx
sta (PLEX_SCREEN_PTR),y
// [74] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] -- vbuaa=pbuc1_derefidx_vbuz1
ldy.z plex_show_idx
lda PLEX_SORTED_IDX,y
// [75] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 -- vbuxx=vbuaa_rol_1
asl
tax
// [76] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_lo_pwuc1_derefidx_vbuxx
lda PLEX_XPOS,x
// [77] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z plex_sprite_idx2
sta SPRITES_XPOS,y
// [78] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_hi_pwuc1_derefidx_vbuxx
lda PLEX_XPOS+1,x
// [79] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1
cmp #0
bne __b1
jmp __b3
// plexShowSprite::@3
__b3:
// [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1
lda #$ff
eor.z plex_sprite_msb
// [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
and SPRITES_XMSB
sta SPRITES_XMSB
jmp __b2
// plexShowSprite::@2
__b2:
// [82] plexShowSprite::$5 = plex_sprite_idx + 1 -- vbuxx=vbuz1_plus_1
ldx.z plex_sprite_idx
inx
// [83] plexShowSprite::$6 = plexShowSprite::$5 & 7 -- vbuaa=vbuxx_band_vbuc1
txa
and #7
// [84] plex_sprite_idx = plexShowSprite::$6 -- vbuz1=vbuaa
sta.z plex_sprite_idx
// [85] plex_show_idx = ++ plex_show_idx -- vbuz1=_inc_vbuz1
inc.z plex_show_idx
// [86] plex_sprite_msb = plex_sprite_msb << 1 -- vbuz1=vbuz1_rol_1
asl.z plex_sprite_msb
// [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1
lda.z plex_sprite_msb
cmp #0
bne __breturn
jmp __b4
// plexShowSprite::@4
__b4:
// [88] plex_sprite_msb = 1 -- vbuz1=vbuc1
lda #1
sta.z plex_sprite_msb
jmp __breturn
// plexShowSprite::@return
__breturn:
// [89] return
rts
// plexShowSprite::@1
__b1:
// [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
lda SPRITES_XMSB
ora.z plex_sprite_msb
sta SPRITES_XMSB
jmp __b2
}
// font_2x2
// Create a 2x2-font by doubling all pixels of the 64 first chars
// The font layout is:
// - 0x00 - 0x3f Upper left glyphs
// - 0x40 - 0x7f Upper right glyphs
// - 0x80 - 0xbf Lower left glyphs
// - 0xc0 - 0xff Lower right glyphs
font_2x2: {
.label __5 = $17
.label __7 = $17
.label next_2x2_left = $1a
.label next_2x2_right = 7
.label glyph_bits = $b
.label glyph_bits_2x2 = $17
.label l2 = $1c
.label l = $1d
.label next_2x2_left_1 = 5
.label next_2x2 = $1a
.label next_original = 3
.label c = $e
// [92] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1]
__b1_from_font_2x2:
// [92] phi font_2x2::c#11 = 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1
lda #0
sta.z c
// [92] phi font_2x2::next_original#4 = CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1
lda #<CHARGEN
sta.z next_original
lda #>CHARGEN
sta.z next_original+1
// [92] phi font_2x2::next_2x2_left#0 = FONT [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1
lda #<FONT
sta.z next_2x2_left
lda #>FONT
sta.z next_2x2_left+1
jmp __b1
// [92] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1]
__b1_from___b9:
// [92] phi font_2x2::c#11 = font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy
// [92] phi font_2x2::next_original#4 = font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy
// [92] phi font_2x2::next_2x2_left#0 = font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy
jmp __b1
// font_2x2::@1
__b1:
// [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z next_2x2_left
adc #<$40*8
sta.z next_2x2_right
lda.z next_2x2_left+1
adc #>$40*8
sta.z next_2x2_right+1
// [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 -- pbuz1=pbuz2
lda.z next_2x2_left
sta.z next_2x2_left_1
lda.z next_2x2_left+1
sta.z next_2x2_left_1+1
// [95] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2]
__b2_from___b1:
// [95] phi font_2x2::next_2x2_right#7 = font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy
// [95] phi font_2x2::l2#8 = 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1
lda #0
sta.z l2
// [95] phi font_2x2::next_2x2_left#7 = font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy
// [95] phi font_2x2::l#2 = 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1
lda #0
sta.z l
jmp __b2
// [95] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2]
__b2_from___b8:
// [95] phi font_2x2::next_2x2_right#7 = font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy
// [95] phi font_2x2::l2#8 = font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy
// [95] phi font_2x2::next_2x2_left#7 = font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy
// [95] phi font_2x2::l#2 = font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy
jmp __b2
// font_2x2::@2
__b2:
// [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] -- vbuz1=pbuz2_derefidx_vbuz3
ldy.z l
lda (next_original),y
sta.z glyph_bits
// [97] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3]
__b3_from___b2:
// [97] phi font_2x2::b#2 = 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuyy=vbuc1
ldy #0
// [97] phi font_2x2::glyph_bits_2x2#3 = 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1
lda #<0
sta.z glyph_bits_2x2
lda #>0
sta.z glyph_bits_2x2+1
// [97] phi font_2x2::glyph_bits#2 = font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy
jmp __b3
// [97] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3]
__b3_from___b5:
// [97] phi font_2x2::b#2 = font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy
// [97] phi font_2x2::glyph_bits_2x2#3 = font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy
// [97] phi font_2x2::glyph_bits#2 = font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy
jmp __b3
// font_2x2::@3
__b3:
// [98] font_2x2::$1 = font_2x2::glyph_bits#2 & $80 -- vbuaa=vbuz1_band_vbuc1
lda #$80
and.z glyph_bits
// [99] if(0!=font_2x2::$1) goto font_2x2::@4 -- 0_neq_vbuaa_then_la1
cmp #0
bne __b4_from___b3
// [101] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5]
__b5_from___b3:
// [101] phi font_2x2::glyph_bit#0 = 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuxx=vbuc1
ldx #0
jmp __b5
// [100] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4]
__b4_from___b3:
jmp __b4
// font_2x2::@4
__b4:
// [101] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5]
__b5_from___b4:
// [101] phi font_2x2::glyph_bit#0 = 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuxx=vbuc1
ldx #1
jmp __b5
// font_2x2::@5
__b5:
// [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 -- vwuz1=vwuz1_rol_1
asl.z __5
rol.z __5+1
// [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx
txa
ora.z glyph_bits_2x2
sta.z glyph_bits_2x2
// [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 -- vwuz1=vwuz1_rol_1
asl.z __7
rol.z __7+1
// [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx
txa
ora.z glyph_bits_2x2
sta.z glyph_bits_2x2
// [106] font_2x2::glyph_bits#1 = font_2x2::glyph_bits#2 << 1 -- vbuz1=vbuz1_rol_1
// Move to next bit
asl.z glyph_bits
// [107] font_2x2::b#1 = ++ font_2x2::b#2 -- vbuyy=_inc_vbuyy
iny
// [108] if(font_2x2::b#1!=8) goto font_2x2::@3 -- vbuyy_neq_vbuc1_then_la1
cpy #8
bne __b3_from___b5
jmp __b6
// font_2x2::@6
__b6:
// [109] font_2x2::$10 = > font_2x2::glyph_bits_2x2#2 -- vbuaa=_hi_vwuz1
lda.z glyph_bits_2x2+1
// [110] font_2x2::next_2x2_left#7[font_2x2::l2#8] = font_2x2::$10 -- pbuz1_derefidx_vbuz2=vbuaa
// Put the generated 2x2-line into the 2x2-font twice
ldy.z l2
sta (next_2x2_left_1),y
// [111] font_2x2::$11 = font_2x2::l2#8 + 1 -- vbuyy=vbuz1_plus_1
ldy.z l2
iny
// [112] font_2x2::$12 = > font_2x2::glyph_bits_2x2#2 -- vbuaa=_hi_vwuz1
lda.z glyph_bits_2x2+1
// [113] font_2x2::next_2x2_left#7[font_2x2::$11] = font_2x2::$12 -- pbuz1_derefidx_vbuyy=vbuaa
sta (next_2x2_left_1),y
// [114] font_2x2::$13 = < font_2x2::glyph_bits_2x2#2 -- vbuaa=_lo_vwuz1
lda.z glyph_bits_2x2
// [115] font_2x2::next_2x2_right#7[font_2x2::l2#8] = font_2x2::$13 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z l2
sta (next_2x2_right),y
// [116] font_2x2::$14 = font_2x2::l2#8 + 1 -- vbuyy=vbuz1_plus_1
ldy.z l2
iny
// [117] font_2x2::$15 = < font_2x2::glyph_bits_2x2#2 -- vbuaa=_lo_vwuz1
lda.z glyph_bits_2x2
// [118] font_2x2::next_2x2_right#7[font_2x2::$14] = font_2x2::$15 -- pbuz1_derefidx_vbuyy=vbuaa
sta (next_2x2_right),y
// [119] font_2x2::l2#1 = font_2x2::l2#8 + 2 -- vbuz1=vbuz1_plus_2
lda.z l2
clc
adc #2
sta.z l2
// [120] if(font_2x2::l2#1!=8) goto font_2x2::@8 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp.z l2
bne __b8_from___b6
jmp __b7
// font_2x2::@7
__b7:
// [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z next_2x2_left
adc #<$80*8
sta.z next_2x2_left_1
lda.z next_2x2_left+1
adc #>$80*8
sta.z next_2x2_left_1+1
// [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z next_2x2_left
adc #<$c0*8
sta.z next_2x2_right
lda.z next_2x2_left+1
adc #>$c0*8
sta.z next_2x2_right+1
// [123] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8]
__b8_from___b7:
// [123] phi font_2x2::next_2x2_right#8 = font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy
// [123] phi font_2x2::l2#9 = 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1
lda #0
sta.z l2
// [123] phi font_2x2::next_2x2_left#8 = font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy
jmp __b8
// [123] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8]
__b8_from___b6:
// [123] phi font_2x2::next_2x2_right#8 = font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy
// [123] phi font_2x2::l2#9 = font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy
// [123] phi font_2x2::next_2x2_left#8 = font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy
jmp __b8
// font_2x2::@8
__b8:
// [124] font_2x2::l#1 = ++ font_2x2::l#2 -- vbuz1=_inc_vbuz1
inc.z l
// [125] if(font_2x2::l#1!=8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp.z l
bne __b2_from___b8
jmp __b9
// font_2x2::@9
__b9:
// [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 -- pbuz1=pbuz1_plus_vbuc1
lda #8
clc
adc.z next_2x2
sta.z next_2x2
bcc !+
inc.z next_2x2+1
!:
// [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 -- pbuz1=pbuz1_plus_vbuc1
lda #8
clc
adc.z next_original
sta.z next_original
bcc !+
inc.z next_original+1
!:
// [128] font_2x2::c#1 = ++ font_2x2::c#11 -- vbuz1=_inc_vbuz1
inc.z c
// [129] if(font_2x2::c#1!=$40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$40
cmp.z c
bne __b1_from___b9
jmp __breturn
// font_2x2::@return
__breturn:
// [130] return
rts
}
// font_2x2_to_sprites
// Convert a 2x2-font to sprites
// - font_2x2 The source 2x2-font
// - sprites The destination sprites
// - num_chars The number of chars to convert
font_2x2_to_sprites: {
.const num_chars = $40
.label __3 = $1c
.label char_right = 7
.label sprite_idx = $1d
.label char_left = 5
.label char_current = $1a
.label sprite = 3
.label c = $e
// [132] phi from font_2x2_to_sprites to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1]
__b1_from_font_2x2_to_sprites:
// [132] phi font_2x2_to_sprites::sprite#4 = SPRITES [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#0] -- pbuz1=pbuc1
lda #<SPRITES
sta.z sprite
lda #>SPRITES
sta.z sprite+1
// [132] phi font_2x2_to_sprites::char_current#2 = FONT [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#1] -- pbuz1=pbuc1
lda #<FONT
sta.z char_current
lda #>FONT
sta.z char_current+1
// [132] phi font_2x2_to_sprites::c#2 = 0 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#2] -- vbuz1=vbuc1
lda #0
sta.z c
jmp __b1
// font_2x2_to_sprites::@1
__b1:
// [133] if(font_2x2_to_sprites::c#2<font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z c
cmp #num_chars
bcc __b2
jmp __breturn
// font_2x2_to_sprites::@return
__breturn:
// [134] return
rts
// font_2x2_to_sprites::@2
__b2:
// [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z char_current
adc #<$40*8
sta.z char_right
lda.z char_current+1
adc #>$40*8
sta.z char_right+1
// [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 -- pbuz1=pbuz2
lda.z char_current
sta.z char_left
lda.z char_current+1
sta.z char_left+1
// [137] phi from font_2x2_to_sprites::@2 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3]
__b3_from___b2:
// [137] phi font_2x2_to_sprites::char_right#3 = font_2x2_to_sprites::char_right#0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#0] -- register_copy
// [137] phi font_2x2_to_sprites::sprite_idx#4 = 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#1] -- vbuz1=vbuc1
lda #0
sta.z sprite_idx
// [137] phi font_2x2_to_sprites::char_left#3 = font_2x2_to_sprites::char_left#6 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#2] -- register_copy
// [137] phi font_2x2_to_sprites::i#2 = 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#3] -- vbuxx=vbuc1
ldx #0
jmp __b3
// [137] phi from font_2x2_to_sprites::@5 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3]
__b3_from___b5:
// [137] phi font_2x2_to_sprites::char_right#3 = font_2x2_to_sprites::char_right#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#0] -- register_copy
// [137] phi font_2x2_to_sprites::sprite_idx#4 = font_2x2_to_sprites::sprite_idx#3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#1] -- register_copy
// [137] phi font_2x2_to_sprites::char_left#3 = font_2x2_to_sprites::char_left#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#2] -- register_copy
// [137] phi font_2x2_to_sprites::i#2 = font_2x2_to_sprites::i#1 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#3] -- register_copy
jmp __b3
// font_2x2_to_sprites::@3
__b3:
// [138] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7 -- vbuz1=vbuxx_band_vbuc1
lda #7
sax.z __3
// [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4
ldy.z __3
lda (char_left),y
ldy.z sprite_idx
sta (sprite),y
// [140] font_2x2_to_sprites::sprite_idx#1 = ++ font_2x2_to_sprites::sprite_idx#4 -- vbuz1=_inc_vbuz1
inc.z sprite_idx
// [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4
ldy.z __3
lda (char_right),y
ldy.z sprite_idx
sta (sprite),y
// [142] font_2x2_to_sprites::sprite_idx#2 = ++ font_2x2_to_sprites::sprite_idx#1 -- vbuyy=_inc_vbuz1
ldy.z sprite_idx
iny
// [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 -- pbuz1_derefidx_vbuyy=vbuc1
lda #0
sta (sprite),y
// [144] font_2x2_to_sprites::sprite_idx#3 = ++ font_2x2_to_sprites::sprite_idx#2 -- vbuz1=_inc_vbuyy
iny
sty.z sprite_idx
// [145] if(font_2x2_to_sprites::i#2==7) goto font_2x2_to_sprites::@4 -- vbuxx_eq_vbuc1_then_la1
cpx #7
beq __b4
jmp __b6
// font_2x2_to_sprites::@6
__b6:
// [146] if(font_2x2_to_sprites::i#2!=$f) goto font_2x2_to_sprites::@8 -- vbuxx_neq_vbuc1_then_la1
cpx #$f
bne __b8_from___b6
// [148] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5]
__b5_from___b6:
// [148] phi font_2x2_to_sprites::char_right#4 = FONT+' '*8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#0] -- pbuz1=pbuc1
lda #<FONT+' '*8
sta.z char_right
lda #>FONT+' '*8
sta.z char_right+1
// [148] phi font_2x2_to_sprites::char_left#4 = FONT+' '*8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#1] -- pbuz1=pbuc1
lda #<FONT+' '*8
sta.z char_left
lda #>FONT+' '*8
sta.z char_left+1
jmp __b5
// [147] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@8]
__b8_from___b6:
jmp __b8
// font_2x2_to_sprites::@8
__b8:
// [148] phi from font_2x2_to_sprites::@4 font_2x2_to_sprites::@8 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5]
__b5_from___b4:
__b5_from___b8:
// [148] phi font_2x2_to_sprites::char_right#4 = font_2x2_to_sprites::char_right#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#0] -- register_copy
// [148] phi font_2x2_to_sprites::char_left#4 = font_2x2_to_sprites::char_left#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#1] -- register_copy
jmp __b5
// font_2x2_to_sprites::@5
__b5:
// [149] font_2x2_to_sprites::i#1 = ++ font_2x2_to_sprites::i#2 -- vbuxx=_inc_vbuxx
inx
// [150] if(font_2x2_to_sprites::i#1!=$15) goto font_2x2_to_sprites::@3 -- vbuxx_neq_vbuc1_then_la1
cpx #$15
bne __b3_from___b5
jmp __b7
// font_2x2_to_sprites::@7
__b7:
// [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 -- pbuz1=pbuz1_plus_vbuc1
lda #8
clc
adc.z char_current
sta.z char_current
bcc !+
inc.z char_current+1
!:
// [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 -- pbuz1=pbuz1_plus_vbuc1
lda #$40
clc
adc.z sprite
sta.z sprite
bcc !+
inc.z sprite+1
!:
// [153] font_2x2_to_sprites::c#1 = ++ font_2x2_to_sprites::c#2 -- vbuz1=_inc_vbuz1
inc.z c
// [132] phi from font_2x2_to_sprites::@7 to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1]
__b1_from___b7:
// [132] phi font_2x2_to_sprites::sprite#4 = font_2x2_to_sprites::sprite#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#0] -- register_copy
// [132] phi font_2x2_to_sprites::char_current#2 = font_2x2_to_sprites::char_current#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#1] -- register_copy
// [132] phi font_2x2_to_sprites::c#2 = font_2x2_to_sprites::c#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#2] -- register_copy
jmp __b1
// font_2x2_to_sprites::@4
__b4:
// [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z char_current
adc #<$80*8
sta.z char_left
lda.z char_current+1
adc #>$80*8
sta.z char_left+1
// [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z char_current
adc #<$c0*8
sta.z char_right
lda.z char_current+1
adc #>$c0*8
sta.z char_right+1
jmp __b5_from___b4
}
// plexInit
// Initialize the multiplexer data structures
plexInit: {
jmp plexSetScreen1
// plexInit::plexSetScreen1
plexSetScreen1:
// [157] PLEX_SCREEN_PTR = SCREEN+$3f8 -- pbuz1=pbuc1
lda #<SCREEN+$3f8
sta.z PLEX_SCREEN_PTR
lda #>SCREEN+$3f8
sta.z PLEX_SCREEN_PTR+1
// [158] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1]
__b1_from_plexSetScreen1:
// [158] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1
ldx #0
jmp __b1
// [158] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1]
__b1_from___b1:
// [158] phi plexInit::i#2 = plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy
jmp __b1
// plexInit::@1
__b1:
// [159] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx
txa
sta PLEX_SORTED_IDX,x
// [160] plexInit::i#1 = ++ plexInit::i#2 -- vbuxx=_inc_vbuxx
inx
// [161] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #PLEX_COUNT-1+1
bne __b1_from___b1
jmp __breturn
// plexInit::@return
__breturn:
// [162] return
rts
}
// plex_move
// Move the plex sprites in an Y-sine and scroll them to the left.
plex_move: {
.label y_idx = $1c
.label x_idx = $e
.label s = $b
.label __7 = $1a
// [164] plex_move::y_idx#0 = y_sin_idx#11 -- vbuz1=vbuz2
lda.z y_sin_idx
sta.z y_idx
// [165] plex_move::x_idx#0 = x_movement_idx#11 -- vbuz1=vbuz2
lda.z x_movement_idx
sta.z x_idx
// [166] phi from plex_move to plex_move::@1 [phi:plex_move->plex_move::@1]
__b1_from_plex_move:
// [166] phi scroll_text_next#12 = scroll_text_next#27 [phi:plex_move->plex_move::@1#0] -- register_copy
// [166] phi plex_move::x_idx#2 = plex_move::x_idx#0 [phi:plex_move->plex_move::@1#1] -- register_copy
// [166] phi plex_move::s#2 = 0 [phi:plex_move->plex_move::@1#2] -- vbuz1=vbuc1
lda #0
sta.z s
// [166] phi plex_move::y_idx#2 = plex_move::y_idx#0 [phi:plex_move->plex_move::@1#3] -- register_copy
jmp __b1
// [166] phi from plex_move::@2 to plex_move::@1 [phi:plex_move::@2->plex_move::@1]
__b1_from___b2:
// [166] phi scroll_text_next#12 = scroll_text_next#14 [phi:plex_move::@2->plex_move::@1#0] -- register_copy
// [166] phi plex_move::x_idx#2 = plex_move::x_idx#1 [phi:plex_move::@2->plex_move::@1#1] -- register_copy
// [166] phi plex_move::s#2 = plex_move::s#1 [phi:plex_move::@2->plex_move::@1#2] -- register_copy
// [166] phi plex_move::y_idx#2 = plex_move::y_idx#1 [phi:plex_move::@2->plex_move::@1#3] -- register_copy
jmp __b1
// plex_move::@1
__b1:
// [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
// Assign sine value
ldy.z y_idx
lda YSIN,y
ldy.z s
sta PLEX_YPOS,y
// [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 -- vbuz1=vbuz1_plus_vbuc1
lax.z y_idx
axs #-[8]
stx.z y_idx
// [169] plex_move::$6 = plex_move::s#2 << 1 -- vbuxx=vbuz1_rol_1
lda.z s
asl
tax
// [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] -- vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2
ldy.z x_idx
lda XMOVEMENT_HI,y
sta.z __7+1
lda XMOVEMENT,y
sta.z __7
// [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 -- pwuc1_derefidx_vbuxx=vwuz1
lda.z __7
sta PLEX_XPOS,x
lda.z __7+1
sta PLEX_XPOS+1,x
// [172] if(plex_move::x_idx#2!=0) goto plex_move::@2 -- vbuz1_neq_0_then_la1
lda.z x_idx
cmp #0
bne __b2_from___b1
jmp __b4
// plex_move::@4
__b4:
// [173] if(*scroll_text_next#12!=0) goto plex_move::@6 -- _deref_pbuz1_neq_0_then_la1
ldy #0
lda (scroll_text_next),y
cmp #0
bne __b6_from___b4
// [175] phi from plex_move::@4 to plex_move::@3 [phi:plex_move::@4->plex_move::@3]
__b3_from___b4:
// [175] phi scroll_text_next#13 = SCROLL_TEXT [phi:plex_move::@4->plex_move::@3#0] -- pbuz1=pbuc1
lda #<SCROLL_TEXT
sta.z scroll_text_next
lda #>SCROLL_TEXT
sta.z scroll_text_next+1
jmp __b3
// [174] phi from plex_move::@4 to plex_move::@6 [phi:plex_move::@4->plex_move::@6]
__b6_from___b4:
jmp __b6
// plex_move::@6
__b6:
// [175] phi from plex_move::@6 to plex_move::@3 [phi:plex_move::@6->plex_move::@3]
__b3_from___b6:
// [175] phi scroll_text_next#13 = scroll_text_next#12 [phi:plex_move::@6->plex_move::@3#0] -- register_copy
jmp __b3
// plex_move::@3
__b3:
// [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 -- vbuaa=vbuc1_plus__deref_pbuz1
lda #SPRITE_0
clc
ldy #0
adc (scroll_text_next),y
// [177] PLEX_PTR[plex_move::s#2] = plex_move::$4 -- pbuc1_derefidx_vbuz1=vbuaa
// Read next char from the scroll text
ldy.z s
sta PLEX_PTR,y
// [178] scroll_text_next#3 = ++ scroll_text_next#13 -- pbuz1=_inc_pbuz1
inc.z scroll_text_next
bne !+
inc.z scroll_text_next+1
!:
// [179] phi from plex_move::@1 plex_move::@3 to plex_move::@2 [phi:plex_move::@1/plex_move::@3->plex_move::@2]
__b2_from___b1:
__b2_from___b3:
// [179] phi scroll_text_next#14 = scroll_text_next#12 [phi:plex_move::@1/plex_move::@3->plex_move::@2#0] -- register_copy
jmp __b2
// plex_move::@2
__b2:
// [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 -- vbuz1=vbuz1_plus_vbuc1
lax.z x_idx
axs #-[8]
stx.z x_idx
// [181] plex_move::s#1 = ++ plex_move::s#2 -- vbuz1=_inc_vbuz1
inc.z s
// [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLEX_COUNT-1+1
cmp.z s
bne __b1_from___b2
jmp __b5
// plex_move::@5
__b5:
// [183] y_sin_idx#13 = y_sin_idx#11 + 3 -- vbuz1=vbuz1_plus_vbuc1
lax.z y_sin_idx
axs #-[3]
stx.z y_sin_idx
// [184] x_movement_idx#13 = ++ x_movement_idx#11 -- vbuz1=_inc_vbuz1
inc.z x_movement_idx
jmp __breturn
// plex_move::@return
__breturn:
// [185] return
rts
}
// plexSort
// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS
// Assumes that the positions are nearly sorted already (as each sprite just moves a bit)
// Uses an insertion sort:
// 1. Moves a marker (m) from the start to end of the array. Every time the marker moves forward all elements before the marker are sorted correctly.
// 2a. If the next element after the marker is larger that the current element
// the marker can be moved forwards (as the sorting is correct).
// 2b. If the next element after the marker is smaller than the current element:
// elements before the marker are shifted right one at a time until encountering one smaller than the current one.
// It is then inserted at the spot. Now the marker can move forward.
plexSort: {
.label nxt_idx = $1c
.label nxt_y = $1d
.label m = $e
// [187] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1]
__b1_from_plexSort:
// [187] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1
lda #0
sta.z m
jmp __b1
// [187] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1]
__b1_from___b2:
// [187] phi plexSort::m#2 = plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy
jmp __b1
// plexSort::@1
__b1:
// [188] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] -- vbuz1=pbuc1_derefidx_vbuz2
ldy.z m
lda PLEX_SORTED_IDX+1,y
sta.z nxt_idx
// [189] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] -- vbuz1=pbuc1_derefidx_vbuz2
ldy.z nxt_idx
lda PLEX_YPOS,y
sta.z nxt_y
// [190] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 -- vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1
lda.z nxt_y
ldx.z m
ldy PLEX_SORTED_IDX,x
cmp PLEX_YPOS,y
bcs __b2
jmp __b5
// plexSort::@5
__b5:
// [191] plexSort::s#6 = plexSort::m#2 -- vbuxx=vbuz1
ldx.z m
// [192] phi from plexSort::@5 plexSort::@7 to plexSort::@3 [phi:plexSort::@5/plexSort::@7->plexSort::@3]
__b3_from___b5:
__b3_from___b7:
// [192] phi plexSort::s#3 = plexSort::s#6 [phi:plexSort::@5/plexSort::@7->plexSort::@3#0] -- register_copy
jmp __b3
// plexSort::@3
__b3:
// [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda PLEX_SORTED_IDX,x
sta PLEX_SORTED_IDX+1,x
// [194] plexSort::s#1 = -- plexSort::s#3 -- vbuxx=_dec_vbuxx
dex
// [195] if(plexSort::s#1==$ff) goto plexSort::@4 -- vbuxx_eq_vbuc1_then_la1
cpx #$ff
beq __b4
jmp __b7
// plexSort::@7
__b7:
// [196] if(plexSort::nxt_y#0<PLEX_YPOS[PLEX_SORTED_IDX[plexSort::s#1]]) goto plexSort::@3 -- vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1
lda.z nxt_y
ldy PLEX_SORTED_IDX,x
cmp PLEX_YPOS,y
bcc __b3_from___b7
jmp __b4
// plexSort::@4
__b4:
// [197] plexSort::s#2 = ++ plexSort::s#1 -- vbuxx=_inc_vbuxx
inx
// [198] PLEX_SORTED_IDX[plexSort::s#2] = plexSort::nxt_idx#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda.z nxt_idx
sta PLEX_SORTED_IDX,x
jmp __b2
// plexSort::@2
__b2:
// [199] plexSort::m#1 = ++ plexSort::m#2 -- vbuz1=_inc_vbuz1
inc.z m
// [200] if(plexSort::m#1!=PLEX_COUNT-2+1) goto plexSort::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLEX_COUNT-2+1
cmp.z m
bne __b1_from___b2
jmp __b6
// plexSort::@6
__b6:
// [201] plex_show_idx = 0 -- vbuz1=vbuc1
// Prepare for showing the sprites
lda #0
sta.z plex_show_idx
// [202] plex_sprite_idx = 0 -- vbuz1=vbuc1
lda #0
sta.z plex_sprite_idx
// [203] plex_sprite_msb = 1 -- vbuz1=vbuc1
lda #1
sta.z plex_sprite_msb
// [204] phi from plexSort::@6 to plexSort::plexFreePrepare1 [phi:plexSort::@6->plexSort::plexFreePrepare1]
plexFreePrepare1_from___b6:
jmp plexFreePrepare1
// plexSort::plexFreePrepare1
plexFreePrepare1:
// [205] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1]
plexFreePrepare1___b1_from_plexFreePrepare1:
// [205] phi plexSort::plexFreePrepare1_s#2 = 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1
ldx #0
jmp plexFreePrepare1___b1
// [205] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1]
plexFreePrepare1___b1_from_plexFreePrepare1___b1:
// [205] phi plexSort::plexFreePrepare1_s#2 = plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy
jmp plexFreePrepare1___b1
// plexSort::plexFreePrepare1_@1
plexFreePrepare1___b1:
// [206] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta PLEX_FREE_YPOS,x
// [207] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx
inx
// [208] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne plexFreePrepare1___b1_from_plexFreePrepare1___b1
jmp plexFreePrepare1___b2
// plexSort::plexFreePrepare1_@2
plexFreePrepare1___b2:
// [209] plex_free_next = 0 -- vbuz1=vbuc1
lda #0
sta.z plex_free_next
jmp __breturn
// plexSort::@return
__breturn:
// [210] return
rts
}
// File Data
.segment Data
// The x-positions of the multiplexer sprites (0x000-0x1ff)
PLEX_XPOS: .fill 2*PLEX_COUNT, 0
// The y-positions of the multiplexer sprites.
PLEX_YPOS: .fill PLEX_COUNT, 0
// The sprite pointers for the multiplexed sprites
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.
PLEX_SORTED_IDX: .fill PLEX_COUNT, 0
// 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
//char FONT[0x0800] = kickasm(resource "elefont.bin") {{
// .import binary "elefont.bin"
//}};
FONT: .fill $800, 0
.align $100
YSIN:
.fill $100, round(142+89.5*sin(toRadians(360*i/256)))
.align $100
XMOVEMENT:
//.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100)))
//.lohifill $100, round(344-i*344/$100-129*sin(toRadians(360*i/$100)))
.lohifill $100, round(344-i*344/$100 -86*sin(toRadians(360*i/$100)) -43*sin(toRadians(360*i/$80)))
//.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$80)))
// The scroll text
SCROLL_TEXT: .text "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. "
.byte 0
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __init1
Removing instruction jmp __init1_toSpritePtr1
Removing instruction jmp __init1___b1
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b3
Removing instruction jmp plexFreeNextYpos1
Removing instruction jmp __b6
Removing instruction jmp __b7
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b9
Removing instruction jmp __b10
Removing instruction jmp toD0181
Removing instruction jmp __b8
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b11
Removing instruction jmp __b12
Removing instruction jmp __b6
Removing instruction jmp __b13
Removing instruction jmp plexFreeAdd1
Removing instruction jmp __b5
Removing instruction jmp __b3
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b6
Removing instruction jmp __b7
Removing instruction jmp __b8
Removing instruction jmp __b9
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b3
Removing instruction jmp __b6
Removing instruction jmp __b8
Removing instruction jmp __b5
Removing instruction jmp __b7
Removing instruction jmp plexSetScreen1
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b4
Removing instruction jmp __b6
Removing instruction jmp __b3
Removing instruction jmp __b2
Removing instruction jmp __b5
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b5
Removing instruction jmp __b3
Removing instruction jmp __b7
Removing instruction jmp __b4
Removing instruction jmp __b2
Removing instruction jmp __b6
Removing instruction jmp plexFreePrepare1
Removing instruction jmp plexFreePrepare1___b1
Removing instruction jmp plexFreePrepare1___b2
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Replacing instruction lda #0 with TXA
Removing instruction lda #0
Removing instruction lda #IRQ_RASTER
Replacing instruction lda.z s with TYA
Removing instruction lda.z __13
Replacing instruction lda.z plex_free_next with TYA
Removing instruction lda #0
Replacing instruction lda #<0 with TYA
Removing instruction lda #>0
Removing instruction ldy.z l2
Removing instruction lda.z glyph_bits_2x2+1
Removing instruction ldy.z l2
Removing instruction lda.z glyph_bits_2x2
Replacing instruction ldx #0 with TAX
Removing instruction ldy.z sprite_idx
Replacing instruction lda.z s with TYA
Removing instruction lda.z __7
Replacing instruction lda.z x_idx with TYA
Replacing instruction ldy.z nxt_idx with TAY
Removing instruction lda.z nxt_y
Removing instruction lda #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __b3_from___b7 with __b3
Replacing label __b4_from___b4 with __b4
Replacing label __b4_from___b3 with __b4
Replacing label __b3_from___b5 with __b3
Replacing label __b8_from___b6 with __b8
Replacing label __b2_from___b8 with __b2
Replacing label __b1_from___b9 with __b1
Replacing label __b8_from___b6 with __b5
Replacing label __b3_from___b5 with __b3
Replacing label __b5_from___b4 with __b5
Replacing label __b1_from___b1 with __b1
Replacing label __b2_from___b1 with __b2
Replacing label __b6_from___b4 with __b3
Replacing label __b1_from___b2 with __b1
Replacing label __b3_from___b7 with __b3
Replacing label __b1_from___b2 with __b1
Replacing label plexFreePrepare1___b1_from_plexFreePrepare1___b1 with plexFreePrepare1___b1
Removing instruction __init1_toSpritePtr1_from___init1:
Removing instruction __init1_toSpritePtr1:
Removing instruction __b1_from___init1___b1:
Removing instruction __b3_from_plex_irq:
Removing instruction __b3_from___b7:
Removing instruction __b10_from___b9:
Removing instruction toD0181_from___b10:
Removing instruction toD0181:
Removing instruction __b4_from___b4:
Removing instruction __b5_from___b4:
Removing instruction __b11_from___b5:
Removing instruction __b13_from___b7:
Removing instruction __b1_from___b9:
Removing instruction __b2_from___b8:
Removing instruction __b3_from___b5:
Removing instruction __b4_from___b3:
Removing instruction __b5_from___b4:
Removing instruction __b8_from___b6:
Removing instruction __b3_from___b5:
Removing instruction __b8_from___b6:
Removing instruction __b8:
Removing instruction __b5_from___b4:
Removing instruction __b5_from___b8:
Removing instruction __b1_from___b1:
Removing instruction __b1_from___b2:
Removing instruction __b6_from___b4:
Removing instruction __b6:
Removing instruction __b3_from___b6:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b3:
Removing instruction __b1_from___b2:
Removing instruction __b3_from___b5:
Removing instruction __b3_from___b7:
Removing instruction plexFreePrepare1_from___b6:
Removing instruction plexFreePrepare1___b1_from_plexFreePrepare1:
Removing instruction plexFreePrepare1___b1_from_plexFreePrepare1___b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __init1:
Removing instruction __init1___b1:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction plexFreeNextYpos1:
Removing instruction __b6:
Removing instruction __b7:
Removing instruction __b5:
Removing instruction __breturn:
Removing instruction font_2x2_from_main:
Removing instruction __b9:
Removing instruction font_2x2_to_sprites_from___b9:
Removing instruction __b10:
Removing instruction plexInit_from___b10:
Removing instruction __b8:
Removing instruction __b1_from___b8:
Removing instruction __b3:
Removing instruction __b4_from___b3:
Removing instruction __b5:
Removing instruction plex_move_from___b5:
Removing instruction __b11:
Removing instruction plexSort_from___b11:
Removing instruction __b12:
Removing instruction plex_move_from___b7:
Removing instruction __b13:
Removing instruction plexSort_from___b13:
Removing instruction __b1_from___b2:
Removing instruction plexFreeAdd1:
Removing instruction __b5:
Removing instruction __b3:
Removing instruction __b4:
Removing instruction __b1_from_font_2x2:
Removing instruction __b2_from___b1:
Removing instruction __b3_from___b2:
Removing instruction __b5_from___b3:
Removing instruction __b6:
Removing instruction __b7:
Removing instruction __b8_from___b7:
Removing instruction __b9:
Removing instruction __breturn:
Removing instruction __b1_from_font_2x2_to_sprites:
Removing instruction __breturn:
Removing instruction __b3_from___b2:
Removing instruction __b6:
Removing instruction __b5_from___b6:
Removing instruction __b7:
Removing instruction __b1_from___b7:
Removing instruction plexSetScreen1:
Removing instruction __b1_from_plexSetScreen1:
Removing instruction __breturn:
Removing instruction __b1_from_plex_move:
Removing instruction __b4:
Removing instruction __b3_from___b4:
Removing instruction __b5:
Removing instruction __breturn:
Removing instruction __b1_from_plexSort:
Removing instruction __b5:
Removing instruction __b7:
Removing instruction __b6:
Removing instruction plexFreePrepare1:
Removing instruction plexFreePrepare1___b2:
Removing instruction __breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing instruction jmp __b4
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b8
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp plexFreePrepare1___b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction ldx.z plex_show_idx
Removing instruction lda #8
Removing instruction ldx.z m
Removing instruction lda #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Fixing long branch [420] bne __b1 to beq
FINAL SYMBOL TABLE
const nomodify byte* CHARGEN = (byte*) 53248
const nomodify byte* CHARSET_DEFAULT = (byte*) 4096
const nomodify struct MOS6526_CIA* CIA1 = (struct MOS6526_CIA*) 56320
const nomodify byte CIA_INTERRUPT_CLEAR = $7f
const nomodify byte* D018 = (byte*) 53272
const byte* FONT[$800] = { fill( $800, 0) }
const nomodify byte* IRQ_ENABLE = (byte*) 53274
const nomodify byte IRQ_RASTER = 1
const nomodify byte* IRQ_STATUS = (byte*) 53273
const nomodify void()** KERNEL_IRQ = (void()**) 788
const byte OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
const nomodify byte PLEX_COUNT = $20
const byte* PLEX_FREE_YPOS[8] = { fill( 8, 0) }
const byte* PLEX_PTR[PLEX_COUNT] = { fill( PLEX_COUNT, 0) }
volatile byte* PLEX_SCREEN_PTR loadstore zp[2]:15 6.181818181818182
const byte* PLEX_SORTED_IDX[PLEX_COUNT] = { fill( PLEX_COUNT, 0) }
const word* PLEX_XPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) }
const byte* PLEX_YPOS[PLEX_COUNT] = { fill( PLEX_COUNT, 0) }
const nomodify byte* PROCPORT = (byte*) 1
const nomodify byte PROCPORT_BASIC_KERNEL_IO = 7
const nomodify byte PROCPORT_RAM_CHARROM = 1
const nomodify byte* RASTER = (byte*) 53266
const nomodify byte* SCREEN = (byte*) 1024
const byte* SCROLL_TEXT[] = "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. "
const nomodify byte* SPRITES = (byte*) 12288
const nomodify byte* SPRITES_COLOR = (byte*) 53287
const nomodify byte* SPRITES_ENABLE = (byte*) 53269
const nomodify byte* SPRITES_XMSB = (byte*) 53264
const nomodify byte* SPRITES_XPOS = (byte*) 53248
const nomodify byte* SPRITES_YPOS = (byte*) 53249
byte SPRITE_0
const byte SPRITE_0#0 SPRITE_0 = (byte)(word)SPRITES/$40
const nomodify byte* VIC_CONTROL = (byte*) 53265
const nomodify byte WHITE = 1
const byte* XMOVEMENT[$200] = kickasm {{ //.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100)))
//.lohifill $100, round(344-i*344/$100-129*sin(toRadians(360*i/$100)))
.lohifill $100, round(344-i*344/$100 -86*sin(toRadians(360*i/$100)) -43*sin(toRadians(360*i/$80)))
//.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$80)))
}}
const nomodify byte* XMOVEMENT_HI = XMOVEMENT+$100
const byte* YSIN[$100] = kickasm {{ .fill $100, round(142+89.5*sin(toRadians(360*i/256)))
}}
void __start()
byte __start::__init1_toSpritePtr1_return
byte* __start::__init1_toSpritePtr1_sprite
void font_2x2(byte* font_2x2::font_original , byte* font_2x2::font_2x2)
byte~ font_2x2::$1 reg byte a 200002.0
byte~ font_2x2::$10 reg byte a 20002.0
byte~ font_2x2::$11 reg byte y 10001.0
byte~ font_2x2::$12 reg byte a 20002.0
byte~ font_2x2::$13 reg byte a 20002.0
byte~ font_2x2::$14 reg byte y 10001.0
byte~ font_2x2::$15 reg byte a 20002.0
word~ font_2x2::$5 zp[2]:23 200002.0
word~ font_2x2::$7 zp[2]:23 200002.0
byte font_2x2::b
byte font_2x2::b#1 reg byte y 150001.5
byte font_2x2::b#2 reg byte y 20000.2
byte font_2x2::c
byte font_2x2::c#1 c zp[1]:14 1501.5
byte font_2x2::c#11 c zp[1]:14 55.611111111111114
byte* font_2x2::font_2x2
byte* font_2x2::font_original
byte font_2x2::glyph_bit
byte font_2x2::glyph_bit#0 reg byte x 50000.5
byte font_2x2::glyph_bits
byte font_2x2::glyph_bits#0 glyph_bits zp[1]:11 20002.0
byte font_2x2::glyph_bits#1 glyph_bits zp[1]:11 66667.33333333333
byte font_2x2::glyph_bits#2 glyph_bits zp[1]:11 34444.88888888889
word font_2x2::glyph_bits_2x2
word font_2x2::glyph_bits_2x2#1 glyph_bits_2x2 zp[2]:23 200002.0
word font_2x2::glyph_bits_2x2#2 glyph_bits_2x2 zp[2]:23 20000.500000000004
word font_2x2::glyph_bits_2x2#3 glyph_bits_2x2 zp[2]:23 40000.4
byte font_2x2::l
byte font_2x2::l#1 l zp[1]:29 15001.5
byte font_2x2::l#2 l zp[1]:29 1034.5862068965519
byte font_2x2::l2
byte font_2x2::l2#1 l2 zp[1]:28 15001.5
byte font_2x2::l2#8 l2 zp[1]:28 2500.25
byte font_2x2::l2#9 l2 zp[1]:28 6667.333333333333
byte* font_2x2::next_2x2
byte* font_2x2::next_2x2#1 next_2x2 zp[2]:26 500.5
byte* font_2x2::next_2x2_left
byte* font_2x2::next_2x2_left#0 next_2x2_left zp[2]:26 706.0588235294117
byte* font_2x2::next_2x2_left#1 next_2x2_left_1 zp[2]:5 10001.0
byte* font_2x2::next_2x2_left#10 next_2x2_left_1 zp[2]:5 2002.0
byte* font_2x2::next_2x2_left#7 next_2x2_left_1 zp[2]:5 1577.1153846153845
byte* font_2x2::next_2x2_left#8 next_2x2_left_1 zp[2]:5 10001.0
byte* font_2x2::next_2x2_right
byte* font_2x2::next_2x2_right#0 next_2x2_right zp[2]:7 1001.0
byte* font_2x2::next_2x2_right#1 next_2x2_right zp[2]:7 20002.0
byte* font_2x2::next_2x2_right#7 next_2x2_right zp[2]:7 1577.1153846153845
byte* font_2x2::next_2x2_right#8 next_2x2_right zp[2]:7 10001.0
byte* font_2x2::next_original
byte* font_2x2::next_original#1 next_original zp[2]:3 667.3333333333334
byte* font_2x2::next_original#4 next_original zp[2]:3 342.9428571428572
void font_2x2_to_sprites(byte* font_2x2_to_sprites::font_2x2 , byte* font_2x2_to_sprites::sprites , byte font_2x2_to_sprites::num_chars)
byte~ font_2x2_to_sprites::$3 zp[1]:28 10001.0
byte font_2x2_to_sprites::c
byte font_2x2_to_sprites::c#1 c zp[1]:14 2002.0
byte font_2x2_to_sprites::c#2 c zp[1]:14 136.5
byte* font_2x2_to_sprites::char_current
byte* font_2x2_to_sprites::char_current#1 char_current zp[2]:26 667.3333333333334
byte* font_2x2_to_sprites::char_current#2 char_current zp[2]:26 1200.3
byte* font_2x2_to_sprites::char_left
byte* font_2x2_to_sprites::char_left#1 char_left zp[2]:5 10001.0
byte* font_2x2_to_sprites::char_left#3 char_left zp[2]:5 2818.5454545454545
byte* font_2x2_to_sprites::char_left#4 char_left zp[2]:5 10001.0
byte* font_2x2_to_sprites::char_left#6 char_left zp[2]:5 2002.0
byte* font_2x2_to_sprites::char_right
byte* font_2x2_to_sprites::char_right#0 char_right zp[2]:7 1001.0
byte* font_2x2_to_sprites::char_right#1 char_right zp[2]:7 20002.0
byte* font_2x2_to_sprites::char_right#3 char_right zp[2]:7 2818.5454545454545
byte* font_2x2_to_sprites::char_right#4 char_right zp[2]:7 10001.0
byte* font_2x2_to_sprites::font_2x2
byte font_2x2_to_sprites::i
byte font_2x2_to_sprites::i#1 reg byte x 15001.5
byte font_2x2_to_sprites::i#2 reg byte x 3571.7857142857147
byte font_2x2_to_sprites::num_chars
const byte font_2x2_to_sprites::num_chars#0 num_chars = $40
byte* font_2x2_to_sprites::sprite
byte* font_2x2_to_sprites::sprite#1 sprite zp[2]:3 1001.0
byte* font_2x2_to_sprites::sprite#4 sprite zp[2]:3 1524.047619047619
byte font_2x2_to_sprites::sprite_idx
byte font_2x2_to_sprites::sprite_idx#1 sprite_idx zp[1]:29 15001.5
byte font_2x2_to_sprites::sprite_idx#2 reg byte y 15001.5
byte font_2x2_to_sprites::sprite_idx#3 sprite_idx zp[1]:29 2222.4444444444443
byte font_2x2_to_sprites::sprite_idx#4 sprite_idx zp[1]:29 10001.0
byte* font_2x2_to_sprites::sprites
volatile bool frame_done loadstore zp[1]:21 26.333333333333332
void main()
byte~ main::$12 reg byte y 101.0
word~ main::$13 zp[2]:23 202.0
byte main::s
byte main::s#1 s zp[1]:2 202.0
byte main::s#2 s zp[1]:2 72.14285714285714
byte main::s1
byte main::s1#1 reg byte x 151.5
byte main::s1#2 reg byte x 151.5
byte* main::toD0181_gfx
byte main::toD0181_return
const byte main::toD0181_return#0 toD0181_return = >(word)SCREEN&$3fff*4|>(word)CHARSET_DEFAULT/4&$f
byte* main::toD0181_screen
byte main::x
byte main::x#1 reg byte x 101.0
byte main::x#2 reg byte x 67.33333333333333
void plexInit(byte* plexInit::screen)
byte plexInit::i
byte plexInit::i#1 reg byte x 1501.5
byte plexInit::i#2 reg byte x 2002.0
byte* plexInit::plexSetScreen1_screen
byte* plexInit::screen
void plexShowSprite()
byte~ plexShowSprite::$11 reg byte x 101.0
byte~ plexShowSprite::$2 reg byte a 202.0
byte~ plexShowSprite::$3 reg byte a 202.0
byte~ plexShowSprite::$5 reg byte x 202.0
byte~ plexShowSprite::$6 reg byte a 202.0
byte~ plexShowSprite::$9 reg byte a 202.0
byte~ plexShowSprite::plexFreeAdd1_$0 reg byte a 202.0
byte~ plexShowSprite::plexFreeAdd1_$1 reg byte a 202.0
byte~ plexShowSprite::plexFreeAdd1_$2 reg byte a 202.0
byte plexShowSprite::plexFreeAdd1_ypos
byte plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 151.5
byte plexShowSprite::plex_sprite_idx2
byte plexShowSprite::plex_sprite_idx2#0 plex_sprite_idx2 zp[1]:25 25.25
byte plexShowSprite::xpos_idx
byte plexShowSprite::xpos_idx#0 reg byte a 202.0
byte plexShowSprite::ypos
void plexSort()
byte plexSort::m
byte plexSort::m#1 m zp[1]:14 150001.5
byte plexSort::m#2 m zp[1]:14 41667.08333333333
byte plexSort::nxt_idx
byte plexSort::nxt_idx#0 nxt_idx zp[1]:28 30000.300000000003
byte plexSort::nxt_y
byte plexSort::nxt_y#0 nxt_y zp[1]:29 150000.375
byte plexSort::plexFreePrepare1_s
byte plexSort::plexFreePrepare1_s#1 reg byte x 150001.5
byte plexSort::plexFreePrepare1_s#2 reg byte x 150001.5
byte plexSort::s
byte plexSort::s#1 reg byte x 1366668.3333333335
byte plexSort::s#2 reg byte x 200002.0
byte plexSort::s#3 reg byte x 2050002.5
byte plexSort::s#6 reg byte x 200002.0
volatile byte plex_free_next loadstore zp[1]:20 42.483870967741936
__interrupt(rom_min_c64) void plex_irq()
byte~ plex_irq::$4 zp[1]:22 11.0
byte plex_irq::plexFreeNextYpos1_return
byte plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.800000000000001
byte plex_irq::rasterY
void plex_move()
byte~ plex_move::$4 reg byte a 200002.0
byte~ plex_move::$6 reg byte x 100001.0
word~ plex_move::$7 zp[2]:26 200002.0
byte plex_move::s
byte plex_move::s#1 s zp[1]:11 150001.5
byte plex_move::s#2 s zp[1]:11 33333.66666666667
byte plex_move::x_idx
byte plex_move::x_idx#0 x_idx zp[1]:14 2002.0
byte plex_move::x_idx#1 x_idx zp[1]:14 66667.33333333333
byte plex_move::x_idx#2 x_idx zp[1]:14 35786.142857142855
byte plex_move::y_idx
byte plex_move::y_idx#0 y_idx zp[1]:28 1001.0
byte plex_move::y_idx#1 y_idx zp[1]:28 13333.466666666667
byte plex_move::y_idx#2 y_idx zp[1]:28 150502.0
volatile byte plex_show_idx loadstore zp[1]:17 46.09090909090909
volatile byte plex_sprite_idx loadstore zp[1]:18 45.38709677419355
volatile byte plex_sprite_msb loadstore zp[1]:19 48.75757575757575
byte* scroll_text_next
byte* scroll_text_next#12 scroll_text_next zp[2]:12 44556.11111111111
byte* scroll_text_next#13 scroll_text_next zp[2]:12 100001.0
byte* scroll_text_next#14 scroll_text_next zp[2]:12 13048.0
byte* scroll_text_next#27 scroll_text_next zp[2]:12 367.33333333333337
byte* scroll_text_next#3 scroll_text_next zp[2]:12 200002.0
byte x_movement_idx
byte x_movement_idx#11 x_movement_idx zp[1]:10 100.14285714285714
byte x_movement_idx#13 x_movement_idx zp[1]:10 61.22222222222223
byte y_sin_idx
byte y_sin_idx#11 y_sin_idx zp[1]:9 105.14999999999999
byte y_sin_idx#13 y_sin_idx zp[1]:9 58.0
zp[1]:2 [ main::s#2 main::s#1 ]
reg byte x [ main::x#2 main::x#1 ]
reg byte x [ main::s1#2 main::s1#1 ]
reg byte y [ font_2x2::b#2 font_2x2::b#1 ]
reg byte x [ font_2x2::glyph_bit#0 ]
zp[2]:3 [ font_2x2_to_sprites::sprite#4 font_2x2_to_sprites::sprite#1 font_2x2::next_original#4 font_2x2::next_original#1 ]
reg byte x [ font_2x2_to_sprites::i#2 font_2x2_to_sprites::i#1 ]
zp[2]:5 [ font_2x2_to_sprites::char_left#3 font_2x2_to_sprites::char_left#6 font_2x2_to_sprites::char_left#4 font_2x2_to_sprites::char_left#1 font_2x2::next_2x2_left#7 font_2x2::next_2x2_left#10 font_2x2::next_2x2_left#8 font_2x2::next_2x2_left#1 ]
zp[2]:7 [ font_2x2_to_sprites::char_right#3 font_2x2_to_sprites::char_right#0 font_2x2_to_sprites::char_right#4 font_2x2_to_sprites::char_right#1 font_2x2::next_2x2_right#7 font_2x2::next_2x2_right#0 font_2x2::next_2x2_right#8 font_2x2::next_2x2_right#1 ]
reg byte x [ plexInit::i#2 plexInit::i#1 ]
zp[1]:9 [ y_sin_idx#11 y_sin_idx#13 ]
zp[1]:10 [ x_movement_idx#11 x_movement_idx#13 ]
zp[1]:11 [ plex_move::s#2 plex_move::s#1 font_2x2::glyph_bits#2 font_2x2::glyph_bits#0 font_2x2::glyph_bits#1 ]
zp[2]:12 [ scroll_text_next#13 scroll_text_next#12 scroll_text_next#27 scroll_text_next#14 scroll_text_next#3 ]
zp[1]:14 [ plexSort::m#2 plexSort::m#1 plex_move::x_idx#2 plex_move::x_idx#0 plex_move::x_idx#1 font_2x2_to_sprites::c#2 font_2x2_to_sprites::c#1 font_2x2::c#11 font_2x2::c#1 ]
reg byte x [ plexSort::s#3 plexSort::s#1 plexSort::s#6 ]
reg byte x [ plexSort::plexFreePrepare1_s#2 plexSort::plexFreePrepare1_s#1 ]
zp[2]:15 [ PLEX_SCREEN_PTR ]
zp[1]:17 [ plex_show_idx ]
zp[1]:18 [ plex_sprite_idx ]
zp[1]:19 [ plex_sprite_msb ]
zp[1]:20 [ plex_free_next ]
zp[1]:21 [ frame_done ]
reg byte x [ plex_irq::plexFreeNextYpos1_return#0 ]
zp[1]:22 [ plex_irq::$4 ]
reg byte y [ main::$12 ]
zp[2]:23 [ main::$13 font_2x2::glyph_bits_2x2#3 font_2x2::glyph_bits_2x2#2 font_2x2::$5 font_2x2::$7 font_2x2::glyph_bits_2x2#1 ]
zp[1]:25 [ plexShowSprite::plex_sprite_idx2#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_ypos#0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$0 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$1 ]
reg byte a [ plexShowSprite::plexFreeAdd1_$2 ]
reg byte a [ plexShowSprite::xpos_idx#0 ]
reg byte x [ plexShowSprite::$11 ]
reg byte a [ plexShowSprite::$2 ]
reg byte a [ plexShowSprite::$3 ]
reg byte a [ plexShowSprite::$9 ]
reg byte x [ plexShowSprite::$5 ]
reg byte a [ plexShowSprite::$6 ]
reg byte a [ font_2x2::$1 ]
reg byte a [ font_2x2::$10 ]
reg byte y [ font_2x2::$11 ]
reg byte a [ font_2x2::$12 ]
reg byte a [ font_2x2::$13 ]
reg byte y [ font_2x2::$14 ]
reg byte a [ font_2x2::$15 ]
reg byte y [ font_2x2_to_sprites::sprite_idx#2 ]
reg byte x [ plex_move::$6 ]
zp[2]:26 [ plex_move::$7 font_2x2_to_sprites::char_current#2 font_2x2_to_sprites::char_current#1 font_2x2::next_2x2_left#0 font_2x2::next_2x2#1 ]
reg byte a [ plex_move::$4 ]
zp[1]:28 [ plexSort::nxt_idx#0 font_2x2_to_sprites::$3 plex_move::y_idx#2 plex_move::y_idx#0 plex_move::y_idx#1 font_2x2::l2#8 font_2x2::l2#9 font_2x2::l2#1 ]
zp[1]:29 [ plexSort::nxt_y#0 font_2x2_to_sprites::sprite_idx#4 font_2x2_to_sprites::sprite_idx#3 font_2x2_to_sprites::sprite_idx#1 font_2x2::l#2 font_2x2::l#1 ]
reg byte x [ plexSort::s#2 ]
FINAL ASSEMBLER
Score: 159175
// File Comments
// Put a 2x2 font into sprites and show it on screen
// Commodore 64 Registers and Constants
// The MOS 6526 Complex Interface Adapter (CIA)
// http://archive.6502.org/datasheets/mos_6526_cia_recreated.pdf
// Upstart
// Commodore 64 PRG executable file
.file [name="spritescroller.prg", type="prg", segments="Program"]
.segmentdef Program [segments="Basic, Code, Data"]
.segmentdef Basic [start=$0801]
.segmentdef Code [start=$80d]
.segmentdef Data [startAfter="Code"]
.segment Basic
:BasicUpstart(__start)
// Global Constants & labels
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// Bits for the VICII IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// RAM in 0xA000, 0xE000 CHAR ROM in 0xD000
.const PROCPORT_RAM_CHARROM = 1
// BASIC in 0xA000, I/O in 0xD000, KERNEL in 0xE000
.const PROCPORT_BASIC_KERNEL_IO = 7
.const WHITE = 1
// The number of sprites in the multiplexer
.const PLEX_COUNT = $20
.const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
// Sprite pointer for sprite 0
.const SPRITE_0 = SPRITES/$40
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label SPRITES_XMSB = $d010
.label SPRITES_COLOR = $d027
.label SPRITES_ENABLE = $d015
.label RASTER = $d012
.label VIC_CONTROL = $d011
.label D018 = $d018
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// The address of the CHARGEN character set
.label CHARGEN = $d000
// The CIA#1: keyboard matrix, joystick #1/#2
.label CIA1 = $dc00
// The vector used when the KERNAL serves IRQ interrupts
.label KERNEL_IRQ = $314
.label CHARSET_DEFAULT = $1000
.label SPRITES = $3000
.label SCREEN = $400
// The high-value table
.label XMOVEMENT_HI = XMOVEMENT+$100
// The address of the sprite pointers on the current screen (screen+0x3f8).
.label PLEX_SCREEN_PTR = $f
// The index in the PLEX tables of the next sprite to show
.label plex_show_idx = $11
// The index the next sprite to use for showing (sprites are used round-robin)
.label plex_sprite_idx = $12
// The MSB bit of the next sprite to use for showing
.label plex_sprite_msb = $13
// The index of the sprite that is free next. Since sprites are used round-robin this moves forward each time a sprite is shown.
.label plex_free_next = $14
// Signal used between IRQ and main loop. Set to true when the IRQ is done showing the sprites.
.label frame_done = $15
// The next char to use from the scroll text
.label scroll_text_next = $c
// Y-sine index
.label y_sin_idx = 9
// X-movement index
.label x_movement_idx = $a
.segment Code
// __start
__start: {
// __start::__init1
// PLEX_SCREEN_PTR = 0x400+0x3f8
// [1] PLEX_SCREEN_PTR = (byte*)$400+$3f8 -- pbuz1=pbuc1
lda #<$400+$3f8
sta.z PLEX_SCREEN_PTR
lda #>$400+$3f8
sta.z PLEX_SCREEN_PTR+1
// plex_show_idx=0
// [2] plex_show_idx = 0 -- vbuz1=vbuc1
lda #0
sta.z plex_show_idx
// plex_sprite_idx=0
// [3] plex_sprite_idx = 0 -- vbuz1=vbuc1
sta.z plex_sprite_idx
// plex_sprite_msb=1
// [4] plex_sprite_msb = 1 -- vbuz1=vbuc1
lda #1
sta.z plex_sprite_msb
// plex_free_next = 0
// [5] plex_free_next = 0 -- vbuz1=vbuc1
lda #0
sta.z plex_free_next
// [6] phi from __start::__init1 to __start::__init1_toSpritePtr1 [phi:__start::__init1->__start::__init1_toSpritePtr1]
// __start::__init1_toSpritePtr1
// __start::__init1_@1
// frame_done = false
// [7] frame_done = false -- vboz1=vboc1
sta.z frame_done
// [8] phi from __start::__init1_@1 to __start::@1 [phi:__start::__init1_@1->__start::@1]
// __start::@1
// [9] call main
jsr main
// __start::@return
// [10] return
rts
}
// plex_irq
// Show sprites from the multiplexer, rescheduling the IRQ as many times as needed
plex_irq: {
.label __4 = $16
// interrupt(isr_rom_min_c64_entry) -- isr_rom_min_c64_entry
// asm
// asm { sei }
sei
// [12] phi from plex_irq plex_irq::@7 to plex_irq::@3 [phi:plex_irq/plex_irq::@7->plex_irq::@3]
// plex_irq::@3
__b3:
// plexShowSprite()
// [13] call plexShowSprite
jsr plexShowSprite
// plex_irq::plexFreeNextYpos1
// return PLEX_FREE_YPOS[plex_free_next];
// [14] plex_irq::plexFreeNextYpos1_return#0 = PLEX_FREE_YPOS[plex_free_next] -- vbuxx=pbuc1_derefidx_vbuz1
ldy.z plex_free_next
ldx PLEX_FREE_YPOS,y
// plex_irq::@6
// *RASTER+3
// [15] plex_irq::$4 = *RASTER + 3 -- vbuz1=_deref_pbuc1_plus_vbuc2
lda #3
clc
adc RASTER
sta.z __4
// while (plex_show_idx < PLEX_COUNT && rasterY < *RASTER+3)
// [16] if(plex_show_idx>=PLEX_COUNT) goto plex_irq::@4 -- vbuz1_ge_vbuc1_then_la1
lda.z plex_show_idx
cmp #PLEX_COUNT
bcs __b4
// plex_irq::@7
// [17] if(plex_irq::plexFreeNextYpos1_return#0<plex_irq::$4) goto plex_irq::@3 -- vbuxx_lt_vbuz1_then_la1
cpx.z __4
bcc __b3
// plex_irq::@4
__b4:
// if (plex_show_idx<PLEX_COUNT)
// [18] if(plex_show_idx<PLEX_COUNT) goto plex_irq::@1 -- vbuz1_lt_vbuc1_then_la1
lda.z plex_show_idx
cmp #PLEX_COUNT
bcc __b1
// plex_irq::@5
// *RASTER = 0x28
// [19] *RASTER = $28 -- _deref_pbuc1=vbuc2
// Reset the raster IRQ to the top of the screen
lda #$28
sta RASTER
// frame_done = true
// [20] frame_done = true -- vboz1=vboc1
// Signal that the IRQ is done showing sprites
lda #1
sta.z frame_done
// plex_irq::@2
__b2:
// *IRQ_STATUS = IRQ_RASTER
// [21] *IRQ_STATUS = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
// asm
// asm { cli }
//*BORDER_COLOR = 0;
cli
// plex_irq::@return
// }
// [23] return
// interrupt(isr_rom_min_c64_exit) -- isr_rom_min_c64_exit
jmp $ea81
// plex_irq::@1
__b1:
// *RASTER = rasterY
// [24] *RASTER = plex_irq::plexFreeNextYpos1_return#0 -- _deref_pbuc1=vbuxx
// Set raster IRQ line to the next sprite Y-position
stx RASTER
jmp __b2
}
// main
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET_DEFAULT)/4&$f
.label s = 2
.label __13 = $17
// asm
// asm { sei }
// Create 2x2 font from CHARGEN
sei
// *PROCPORT = PROCPORT_RAM_CHARROM
// [26] *PROCPORT = PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_CHARROM
sta PROCPORT
// font_2x2(CHARGEN, FONT)
// [27] call font_2x2
// [91] phi from main to font_2x2 [phi:main->font_2x2]
jsr font_2x2
// main::@9
// *PROCPORT = PROCPORT_BASIC_KERNEL_IO
// [28] *PROCPORT = PROCPORT_BASIC_KERNEL_IO -- _deref_pbuc1=vbuc2
lda #PROCPORT_BASIC_KERNEL_IO
sta PROCPORT
// asm
// asm { cli }
cli
// font_2x2_to_sprites(FONT, SPRITES, 64)
// [30] call font_2x2_to_sprites
// Convert font to sprites
// [131] phi from main::@9 to font_2x2_to_sprites [phi:main::@9->font_2x2_to_sprites]
jsr font_2x2_to_sprites
// [31] phi from main::@9 to main::@10 [phi:main::@9->main::@10]
// main::@10
// plexInit(SCREEN)
// [32] call plexInit
// Initialize the multiplexer
// [156] phi from main::@10 to plexInit [phi:main::@10->plexInit]
jsr plexInit
// [33] phi from main::@10 to main::toD0181 [phi:main::@10->main::toD0181]
// main::toD0181
// main::@8
// *D018 = toD018(SCREEN, CHARSET_DEFAULT)
// [34] *D018 = main::toD0181_return#0 -- _deref_pbuc1=vbuc2
// Show screen
lda #toD0181_return
sta D018
// [35] phi from main::@8 to main::@1 [phi:main::@8->main::@1]
// [35] phi main::x#2 = 0 [phi:main::@8->main::@1#0] -- vbuxx=vbuc1
ldx #0
// [35] phi main::s#2 = 0 [phi:main::@8->main::@1#1] -- vbuz1=vbuc1
txa
sta.z s
// Set the x-positions & pointers
// main::@1
__b1:
// for(char s=0, x=0;s<PLEX_COUNT;s++,x+=8)
// [36] if(main::s#2<PLEX_COUNT) goto main::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z s
cmp #PLEX_COUNT
bcc __b2
// main::@3
// *SPRITES_ENABLE = 0xff
// [37] *SPRITES_ENABLE = $ff -- _deref_pbuc1=vbuc2
// Enable & initialize sprites
lda #$ff
sta SPRITES_ENABLE
// [38] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
// [38] phi main::s1#2 = 0 [phi:main::@3->main::@4#0] -- vbuxx=vbuc1
ldx #0
// [38] phi from main::@4 to main::@4 [phi:main::@4->main::@4]
// [38] phi main::s1#2 = main::s1#1 [phi:main::@4->main::@4#0] -- register_copy
// main::@4
__b4:
// SPRITES_COLOR[s] = WHITE
// [39] SPRITES_COLOR[main::s1#2] = WHITE -- pbuc1_derefidx_vbuxx=vbuc2
lda #WHITE
sta SPRITES_COLOR,x
// for(char s: 0..7)
// [40] main::s1#1 = ++ main::s1#2 -- vbuxx=_inc_vbuxx
inx
// [41] if(main::s1#1!=8) goto main::@4 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne __b4
// [42] phi from main::@4 to main::@5 [phi:main::@4->main::@5]
// main::@5
// plex_move()
// [43] call plex_move
// Move the sprites
// [163] phi from main::@5 to plex_move [phi:main::@5->plex_move]
// [163] phi scroll_text_next#27 = SCROLL_TEXT [phi:main::@5->plex_move#0] -- pbuz1=pbuc1
lda #<SCROLL_TEXT
sta.z scroll_text_next
lda #>SCROLL_TEXT
sta.z scroll_text_next+1
// [163] phi x_movement_idx#11 = 0 [phi:main::@5->plex_move#1] -- vbuz1=vbuc1
lda #0
sta.z x_movement_idx
// [163] phi y_sin_idx#11 = 0 [phi:main::@5->plex_move#2] -- vbuz1=vbuc1
sta.z y_sin_idx
jsr plex_move
// [44] phi from main::@5 to main::@11 [phi:main::@5->main::@11]
// main::@11
// plexSort()
// [45] call plexSort
// Sort the sprites by y-position
// [186] phi from main::@11 to plexSort [phi:main::@11->plexSort]
jsr plexSort
// main::@12
// asm
// asm { sei }
// Enable the plex IRQ
sei
// CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR
// [47] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR -- _deref_pbuc1=vbuc2
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT
// *VIC_CONTROL &=0x7f
// [48] *VIC_CONTROL = *VIC_CONTROL & $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
// Set raster line to 0x00
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
// *RASTER = 0x28
// [49] *RASTER = $28 -- _deref_pbuc1=vbuc2
lda #$28
sta RASTER
// *IRQ_ENABLE = IRQ_RASTER
// [50] *IRQ_ENABLE = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
// *IRQ_STATUS = IRQ_RASTER
// [51] *IRQ_STATUS = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Acknowledge any IRQ
sta IRQ_STATUS
// *KERNEL_IRQ = &plex_irq
// [52] *KERNEL_IRQ = &plex_irq -- _deref_qprc1=pprc2
// Set the IRQ routine
lda #<plex_irq
sta KERNEL_IRQ
lda #>plex_irq
sta KERNEL_IRQ+1
// asm
// asm { cli }
cli
// main::@6
__b6:
// while(!frame_done)
// [54] if(frame_done) goto main::@7 -- vboz1_then_la1
lda.z frame_done
cmp #0
bne __b7
jmp __b6
// main::@7
__b7:
// frame_done = false
// [55] frame_done = false -- vboz1=vboc1
lda #0
sta.z frame_done
// plex_move()
// [56] call plex_move
//*BORDER_COLOR = RED;
// Move the sprites
// [163] phi from main::@7 to plex_move [phi:main::@7->plex_move]
// [163] phi scroll_text_next#27 = scroll_text_next#14 [phi:main::@7->plex_move#0] -- register_copy
// [163] phi x_movement_idx#11 = x_movement_idx#13 [phi:main::@7->plex_move#1] -- register_copy
// [163] phi y_sin_idx#11 = y_sin_idx#13 [phi:main::@7->plex_move#2] -- register_copy
jsr plex_move
// [57] phi from main::@7 to main::@13 [phi:main::@7->main::@13]
// main::@13
// plexSort()
// [58] call plexSort
// Sort the sprites by y-position
// [186] phi from main::@13 to plexSort [phi:main::@13->plexSort]
jsr plexSort
jmp __b6
// main::@2
__b2:
// PLEX_PTR[s] = SPRITE_0+' '
// [59] PLEX_PTR[main::s#2] = SPRITE_0#0+' ' -- pbuc1_derefidx_vbuz1=vbuc2
lda #SPRITE_0+' '
ldy.z s
sta PLEX_PTR,y
// PLEX_XPOS[s] = { XMOVEMENT_HI[x], XMOVEMENT[x] }
// [60] main::$12 = main::s#2 << 1 -- vbuyy=vbuz1_rol_1
tya
asl
tay
// [61] main::$13 = XMOVEMENT_HI[main::x#2] w= XMOVEMENT[main::x#2] -- vwuz1=pbuc1_derefidx_vbuxx_word_pbuc2_derefidx_vbuxx
lda XMOVEMENT_HI,x
sta.z __13+1
lda XMOVEMENT,x
sta.z __13
// [62] PLEX_XPOS[main::$12] = main::$13 -- pwuc1_derefidx_vbuyy=vwuz1
sta PLEX_XPOS,y
lda.z __13+1
sta PLEX_XPOS+1,y
// x+=8
// [63] main::x#1 = main::x#2 + 8 -- vbuxx=vbuxx_plus_vbuc1
txa
axs #-[8]
// for(char s=0, x=0;s<PLEX_COUNT;s++,x+=8)
// [64] main::s#1 = ++ main::s#2 -- vbuz1=_inc_vbuz1
inc.z s
// [35] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
// [35] phi main::x#2 = main::x#1 [phi:main::@2->main::@1#0] -- register_copy
// [35] phi main::s#2 = main::s#1 [phi:main::@2->main::@1#1] -- register_copy
jmp __b1
}
// plexShowSprite
// Show the next sprite.
// plexSort() prepares showing the sprites
plexShowSprite: {
.label plex_sprite_idx2 = $19
// plex_sprite_idx2 = plex_sprite_idx*2
// [65] plexShowSprite::plex_sprite_idx2#0 = plex_sprite_idx << 1 -- vbuz1=vbuz2_rol_1
lda.z plex_sprite_idx
asl
sta.z plex_sprite_idx2
// ypos = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]]
// [66] plexShowSprite::plexFreeAdd1_ypos#0 = PLEX_YPOS[PLEX_SORTED_IDX[plex_show_idx]] -- vbuaa=pbuc1_derefidx_(pbuc2_derefidx_vbuz1)
ldx.z plex_show_idx
ldy PLEX_SORTED_IDX,x
lda PLEX_YPOS,y
// SPRITES_YPOS[plex_sprite_idx2] = ypos
// [67] SPRITES_YPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::plexFreeAdd1_ypos#0 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z plex_sprite_idx2
sta SPRITES_YPOS,y
// plexShowSprite::plexFreeAdd1
// ypos+22
// [68] plexShowSprite::plexFreeAdd1_$0 = plexShowSprite::plexFreeAdd1_ypos#0 + $16 -- vbuaa=vbuaa_plus_vbuc1
clc
adc #$16
// PLEX_FREE_YPOS[plex_free_next] = ypos+22
// [69] PLEX_FREE_YPOS[plex_free_next] = plexShowSprite::plexFreeAdd1_$0 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z plex_free_next
sta PLEX_FREE_YPOS,y
// plex_free_next+1
// [70] plexShowSprite::plexFreeAdd1_$1 = plex_free_next + 1 -- vbuaa=vbuz1_plus_1
tya
clc
adc #1
// (plex_free_next+1)&7
// [71] plexShowSprite::plexFreeAdd1_$2 = plexShowSprite::plexFreeAdd1_$1 & 7 -- vbuaa=vbuaa_band_vbuc1
and #7
// plex_free_next = (plex_free_next+1)&7
// [72] plex_free_next = plexShowSprite::plexFreeAdd1_$2 -- vbuz1=vbuaa
sta.z plex_free_next
// plexShowSprite::@5
// PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]]
// [73] PLEX_SCREEN_PTR[plex_sprite_idx] = PLEX_PTR[PLEX_SORTED_IDX[plex_show_idx]] -- pbuz1_derefidx_vbuz2=pbuc1_derefidx_(pbuc2_derefidx_vbuz3)
ldy PLEX_SORTED_IDX,x
lda PLEX_PTR,y
ldy.z plex_sprite_idx
sta (PLEX_SCREEN_PTR),y
// xpos_idx = PLEX_SORTED_IDX[plex_show_idx]
// [74] plexShowSprite::xpos_idx#0 = PLEX_SORTED_IDX[plex_show_idx] -- vbuaa=pbuc1_derefidx_vbuz1
ldy.z plex_show_idx
lda PLEX_SORTED_IDX,y
// <PLEX_XPOS[xpos_idx]
// [75] plexShowSprite::$11 = plexShowSprite::xpos_idx#0 << 1 -- vbuxx=vbuaa_rol_1
asl
tax
// [76] plexShowSprite::$2 = < PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_lo_pwuc1_derefidx_vbuxx
lda PLEX_XPOS,x
// SPRITES_XPOS[plex_sprite_idx2] = <PLEX_XPOS[xpos_idx]
// [77] SPRITES_XPOS[plexShowSprite::plex_sprite_idx2#0] = plexShowSprite::$2 -- pbuc1_derefidx_vbuz1=vbuaa
ldy.z plex_sprite_idx2
sta SPRITES_XPOS,y
// >PLEX_XPOS[xpos_idx]
// [78] plexShowSprite::$3 = > PLEX_XPOS[plexShowSprite::$11] -- vbuaa=_hi_pwuc1_derefidx_vbuxx
lda PLEX_XPOS+1,x
// if(>PLEX_XPOS[xpos_idx]!=0)
// [79] if(plexShowSprite::$3!=0) goto plexShowSprite::@1 -- vbuaa_neq_0_then_la1
cmp #0
bne __b1
// plexShowSprite::@3
// 0xff^plex_sprite_msb
// [80] plexShowSprite::$9 = $ff ^ plex_sprite_msb -- vbuaa=vbuc1_bxor_vbuz1
lda #$ff
eor.z plex_sprite_msb
// *SPRITES_XMSB &= (0xff^plex_sprite_msb)
// [81] *SPRITES_XMSB = *SPRITES_XMSB & plexShowSprite::$9 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
and SPRITES_XMSB
sta SPRITES_XMSB
// plexShowSprite::@2
__b2:
// plex_sprite_idx+1
// [82] plexShowSprite::$5 = plex_sprite_idx + 1 -- vbuxx=vbuz1_plus_1
ldx.z plex_sprite_idx
inx
// (plex_sprite_idx+1)&7
// [83] plexShowSprite::$6 = plexShowSprite::$5 & 7 -- vbuaa=vbuxx_band_vbuc1
txa
and #7
// plex_sprite_idx = (plex_sprite_idx+1)&7
// [84] plex_sprite_idx = plexShowSprite::$6 -- vbuz1=vbuaa
sta.z plex_sprite_idx
// plex_show_idx++;
// [85] plex_show_idx = ++ plex_show_idx -- vbuz1=_inc_vbuz1
inc.z plex_show_idx
// plex_sprite_msb <<=1
// [86] plex_sprite_msb = plex_sprite_msb << 1 -- vbuz1=vbuz1_rol_1
asl.z plex_sprite_msb
// if(plex_sprite_msb==0)
// [87] if(plex_sprite_msb!=0) goto plexShowSprite::@return -- vbuz1_neq_0_then_la1
lda.z plex_sprite_msb
cmp #0
bne __breturn
// plexShowSprite::@4
// plex_sprite_msb = 1
// [88] plex_sprite_msb = 1 -- vbuz1=vbuc1
lda #1
sta.z plex_sprite_msb
// plexShowSprite::@return
__breturn:
// }
// [89] return
rts
// plexShowSprite::@1
__b1:
// *SPRITES_XMSB |= plex_sprite_msb
// [90] *SPRITES_XMSB = *SPRITES_XMSB | plex_sprite_msb -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
lda SPRITES_XMSB
ora.z plex_sprite_msb
sta SPRITES_XMSB
jmp __b2
}
// font_2x2
// Create a 2x2-font by doubling all pixels of the 64 first chars
// The font layout is:
// - 0x00 - 0x3f Upper left glyphs
// - 0x40 - 0x7f Upper right glyphs
// - 0x80 - 0xbf Lower left glyphs
// - 0xc0 - 0xff Lower right glyphs
font_2x2: {
.label __5 = $17
.label __7 = $17
.label next_2x2_left = $1a
.label next_2x2_right = 7
.label glyph_bits = $b
.label glyph_bits_2x2 = $17
.label l2 = $1c
.label l = $1d
.label next_2x2_left_1 = 5
.label next_2x2 = $1a
.label next_original = 3
.label c = $e
// [92] phi from font_2x2 to font_2x2::@1 [phi:font_2x2->font_2x2::@1]
// [92] phi font_2x2::c#11 = 0 [phi:font_2x2->font_2x2::@1#0] -- vbuz1=vbuc1
lda #0
sta.z c
// [92] phi font_2x2::next_original#4 = CHARGEN [phi:font_2x2->font_2x2::@1#1] -- pbuz1=pbuc1
lda #<CHARGEN
sta.z next_original
lda #>CHARGEN
sta.z next_original+1
// [92] phi font_2x2::next_2x2_left#0 = FONT [phi:font_2x2->font_2x2::@1#2] -- pbuz1=pbuc1
lda #<FONT
sta.z next_2x2_left
lda #>FONT
sta.z next_2x2_left+1
// [92] phi from font_2x2::@9 to font_2x2::@1 [phi:font_2x2::@9->font_2x2::@1]
// [92] phi font_2x2::c#11 = font_2x2::c#1 [phi:font_2x2::@9->font_2x2::@1#0] -- register_copy
// [92] phi font_2x2::next_original#4 = font_2x2::next_original#1 [phi:font_2x2::@9->font_2x2::@1#1] -- register_copy
// [92] phi font_2x2::next_2x2_left#0 = font_2x2::next_2x2#1 [phi:font_2x2::@9->font_2x2::@1#2] -- register_copy
// font_2x2::@1
__b1:
// next_2x2_right = next_2x2 + 0x40*8
// [93] font_2x2::next_2x2_right#0 = font_2x2::next_2x2_left#0 + (word)$40*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z next_2x2_left
adc #<$40*8
sta.z next_2x2_right
lda.z next_2x2_left+1
adc #>$40*8
sta.z next_2x2_right+1
// [94] font_2x2::next_2x2_left#10 = font_2x2::next_2x2_left#0 -- pbuz1=pbuz2
lda.z next_2x2_left
sta.z next_2x2_left_1
lda.z next_2x2_left+1
sta.z next_2x2_left_1+1
// [95] phi from font_2x2::@1 to font_2x2::@2 [phi:font_2x2::@1->font_2x2::@2]
// [95] phi font_2x2::next_2x2_right#7 = font_2x2::next_2x2_right#0 [phi:font_2x2::@1->font_2x2::@2#0] -- register_copy
// [95] phi font_2x2::l2#8 = 0 [phi:font_2x2::@1->font_2x2::@2#1] -- vbuz1=vbuc1
lda #0
sta.z l2
// [95] phi font_2x2::next_2x2_left#7 = font_2x2::next_2x2_left#10 [phi:font_2x2::@1->font_2x2::@2#2] -- register_copy
// [95] phi font_2x2::l#2 = 0 [phi:font_2x2::@1->font_2x2::@2#3] -- vbuz1=vbuc1
sta.z l
// [95] phi from font_2x2::@8 to font_2x2::@2 [phi:font_2x2::@8->font_2x2::@2]
// [95] phi font_2x2::next_2x2_right#7 = font_2x2::next_2x2_right#8 [phi:font_2x2::@8->font_2x2::@2#0] -- register_copy
// [95] phi font_2x2::l2#8 = font_2x2::l2#9 [phi:font_2x2::@8->font_2x2::@2#1] -- register_copy
// [95] phi font_2x2::next_2x2_left#7 = font_2x2::next_2x2_left#8 [phi:font_2x2::@8->font_2x2::@2#2] -- register_copy
// [95] phi font_2x2::l#2 = font_2x2::l#1 [phi:font_2x2::@8->font_2x2::@2#3] -- register_copy
// font_2x2::@2
__b2:
// glyph_bits = next_original[l]
// [96] font_2x2::glyph_bits#0 = font_2x2::next_original#4[font_2x2::l#2] -- vbuz1=pbuz2_derefidx_vbuz3
ldy.z l
lda (next_original),y
sta.z glyph_bits
// [97] phi from font_2x2::@2 to font_2x2::@3 [phi:font_2x2::@2->font_2x2::@3]
// [97] phi font_2x2::b#2 = 0 [phi:font_2x2::@2->font_2x2::@3#0] -- vbuyy=vbuc1
ldy #0
// [97] phi font_2x2::glyph_bits_2x2#3 = 0 [phi:font_2x2::@2->font_2x2::@3#1] -- vwuz1=vwuc1
tya
sta.z glyph_bits_2x2
sta.z glyph_bits_2x2+1
// [97] phi font_2x2::glyph_bits#2 = font_2x2::glyph_bits#0 [phi:font_2x2::@2->font_2x2::@3#2] -- register_copy
// [97] phi from font_2x2::@5 to font_2x2::@3 [phi:font_2x2::@5->font_2x2::@3]
// [97] phi font_2x2::b#2 = font_2x2::b#1 [phi:font_2x2::@5->font_2x2::@3#0] -- register_copy
// [97] phi font_2x2::glyph_bits_2x2#3 = font_2x2::glyph_bits_2x2#2 [phi:font_2x2::@5->font_2x2::@3#1] -- register_copy
// [97] phi font_2x2::glyph_bits#2 = font_2x2::glyph_bits#1 [phi:font_2x2::@5->font_2x2::@3#2] -- register_copy
// font_2x2::@3
__b3:
// glyph_bits&0x80
// [98] font_2x2::$1 = font_2x2::glyph_bits#2 & $80 -- vbuaa=vbuz1_band_vbuc1
lda #$80
and.z glyph_bits
// (glyph_bits&0x80)?1uc:0uc
// [99] if(0!=font_2x2::$1) goto font_2x2::@4 -- 0_neq_vbuaa_then_la1
cmp #0
bne __b4
// [101] phi from font_2x2::@3 to font_2x2::@5 [phi:font_2x2::@3->font_2x2::@5]
// [101] phi font_2x2::glyph_bit#0 = 0 [phi:font_2x2::@3->font_2x2::@5#0] -- vbuxx=vbuc1
ldx #0
jmp __b5
// [100] phi from font_2x2::@3 to font_2x2::@4 [phi:font_2x2::@3->font_2x2::@4]
// font_2x2::@4
__b4:
// (glyph_bits&0x80)?1uc:0uc
// [101] phi from font_2x2::@4 to font_2x2::@5 [phi:font_2x2::@4->font_2x2::@5]
// [101] phi font_2x2::glyph_bit#0 = 1 [phi:font_2x2::@4->font_2x2::@5#0] -- vbuxx=vbuc1
ldx #1
// font_2x2::@5
__b5:
// glyph_bits_2x2<<1
// [102] font_2x2::$5 = font_2x2::glyph_bits_2x2#3 << 1 -- vwuz1=vwuz1_rol_1
asl.z __5
rol.z __5+1
// glyph_bits_2x2 = glyph_bits_2x2<<1|glyph_bit
// [103] font_2x2::glyph_bits_2x2#1 = font_2x2::$5 | font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx
txa
ora.z glyph_bits_2x2
sta.z glyph_bits_2x2
// glyph_bits_2x2<<1
// [104] font_2x2::$7 = font_2x2::glyph_bits_2x2#1 << 1 -- vwuz1=vwuz1_rol_1
asl.z __7
rol.z __7+1
// glyph_bits_2x2 = glyph_bits_2x2<<1|glyph_bit
// [105] font_2x2::glyph_bits_2x2#2 = font_2x2::$7 | font_2x2::glyph_bit#0 -- vwuz1=vwuz1_bor_vbuxx
txa
ora.z glyph_bits_2x2
sta.z glyph_bits_2x2
// glyph_bits <<= 1
// [106] font_2x2::glyph_bits#1 = font_2x2::glyph_bits#2 << 1 -- vbuz1=vbuz1_rol_1
// Move to next bit
asl.z glyph_bits
// for(char b: 0..7)
// [107] font_2x2::b#1 = ++ font_2x2::b#2 -- vbuyy=_inc_vbuyy
iny
// [108] if(font_2x2::b#1!=8) goto font_2x2::@3 -- vbuyy_neq_vbuc1_then_la1
cpy #8
bne __b3
// font_2x2::@6
// >glyph_bits_2x2
// [109] font_2x2::$10 = > font_2x2::glyph_bits_2x2#2 -- vbuaa=_hi_vwuz1
lda.z glyph_bits_2x2+1
// next_2x2_left[l2] = >glyph_bits_2x2
// [110] font_2x2::next_2x2_left#7[font_2x2::l2#8] = font_2x2::$10 -- pbuz1_derefidx_vbuz2=vbuaa
// Put the generated 2x2-line into the 2x2-font twice
ldy.z l2
sta (next_2x2_left_1),y
// l2+1
// [111] font_2x2::$11 = font_2x2::l2#8 + 1 -- vbuyy=vbuz1_plus_1
iny
// >glyph_bits_2x2
// [112] font_2x2::$12 = > font_2x2::glyph_bits_2x2#2 -- vbuaa=_hi_vwuz1
// next_2x2_left[l2+1] = >glyph_bits_2x2
// [113] font_2x2::next_2x2_left#7[font_2x2::$11] = font_2x2::$12 -- pbuz1_derefidx_vbuyy=vbuaa
sta (next_2x2_left_1),y
// <glyph_bits_2x2
// [114] font_2x2::$13 = < font_2x2::glyph_bits_2x2#2 -- vbuaa=_lo_vwuz1
lda.z glyph_bits_2x2
// next_2x2_right[l2] = <glyph_bits_2x2
// [115] font_2x2::next_2x2_right#7[font_2x2::l2#8] = font_2x2::$13 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z l2
sta (next_2x2_right),y
// l2+1
// [116] font_2x2::$14 = font_2x2::l2#8 + 1 -- vbuyy=vbuz1_plus_1
iny
// <glyph_bits_2x2
// [117] font_2x2::$15 = < font_2x2::glyph_bits_2x2#2 -- vbuaa=_lo_vwuz1
// next_2x2_right[l2+1] = <glyph_bits_2x2
// [118] font_2x2::next_2x2_right#7[font_2x2::$14] = font_2x2::$15 -- pbuz1_derefidx_vbuyy=vbuaa
sta (next_2x2_right),y
// l2 += 2
// [119] font_2x2::l2#1 = font_2x2::l2#8 + 2 -- vbuz1=vbuz1_plus_2
lda.z l2
clc
adc #2
sta.z l2
// if(l2==8)
// [120] if(font_2x2::l2#1!=8) goto font_2x2::@8 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp.z l2
bne __b8
// font_2x2::@7
// next_2x2_left = next_2x2 + 0x80*8
// [121] font_2x2::next_2x2_left#1 = font_2x2::next_2x2_left#0 + (word)$80*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z next_2x2_left
adc #<$80*8
sta.z next_2x2_left_1
lda.z next_2x2_left+1
adc #>$80*8
sta.z next_2x2_left_1+1
// next_2x2_right = next_2x2 + 0xc0*8
// [122] font_2x2::next_2x2_right#1 = font_2x2::next_2x2_left#0 + (word)$c0*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z next_2x2_left
adc #<$c0*8
sta.z next_2x2_right
lda.z next_2x2_left+1
adc #>$c0*8
sta.z next_2x2_right+1
// [123] phi from font_2x2::@7 to font_2x2::@8 [phi:font_2x2::@7->font_2x2::@8]
// [123] phi font_2x2::next_2x2_right#8 = font_2x2::next_2x2_right#1 [phi:font_2x2::@7->font_2x2::@8#0] -- register_copy
// [123] phi font_2x2::l2#9 = 0 [phi:font_2x2::@7->font_2x2::@8#1] -- vbuz1=vbuc1
lda #0
sta.z l2
// [123] phi font_2x2::next_2x2_left#8 = font_2x2::next_2x2_left#1 [phi:font_2x2::@7->font_2x2::@8#2] -- register_copy
// [123] phi from font_2x2::@6 to font_2x2::@8 [phi:font_2x2::@6->font_2x2::@8]
// [123] phi font_2x2::next_2x2_right#8 = font_2x2::next_2x2_right#7 [phi:font_2x2::@6->font_2x2::@8#0] -- register_copy
// [123] phi font_2x2::l2#9 = font_2x2::l2#1 [phi:font_2x2::@6->font_2x2::@8#1] -- register_copy
// [123] phi font_2x2::next_2x2_left#8 = font_2x2::next_2x2_left#7 [phi:font_2x2::@6->font_2x2::@8#2] -- register_copy
// font_2x2::@8
__b8:
// for(char l: 0..7)
// [124] font_2x2::l#1 = ++ font_2x2::l#2 -- vbuz1=_inc_vbuz1
inc.z l
// [125] if(font_2x2::l#1!=8) goto font_2x2::@2 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp.z l
bne __b2
// font_2x2::@9
// next_2x2 += 8
// [126] font_2x2::next_2x2#1 = font_2x2::next_2x2_left#0 + 8 -- pbuz1=pbuz1_plus_vbuc1
clc
adc.z next_2x2
sta.z next_2x2
bcc !+
inc.z next_2x2+1
!:
// next_original += 8
// [127] font_2x2::next_original#1 = font_2x2::next_original#4 + 8 -- pbuz1=pbuz1_plus_vbuc1
lda #8
clc
adc.z next_original
sta.z next_original
bcc !+
inc.z next_original+1
!:
// for(char c: 0..0x3f)
// [128] font_2x2::c#1 = ++ font_2x2::c#11 -- vbuz1=_inc_vbuz1
inc.z c
// [129] if(font_2x2::c#1!=$40) goto font_2x2::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$40
cmp.z c
beq !__b1+
jmp __b1
!__b1:
// font_2x2::@return
// }
// [130] return
rts
}
// font_2x2_to_sprites
// Convert a 2x2-font to sprites
// - font_2x2 The source 2x2-font
// - sprites The destination sprites
// - num_chars The number of chars to convert
font_2x2_to_sprites: {
.const num_chars = $40
.label __3 = $1c
.label char_right = 7
.label sprite_idx = $1d
.label char_left = 5
.label char_current = $1a
.label sprite = 3
.label c = $e
// [132] phi from font_2x2_to_sprites to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1]
// [132] phi font_2x2_to_sprites::sprite#4 = SPRITES [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#0] -- pbuz1=pbuc1
lda #<SPRITES
sta.z sprite
lda #>SPRITES
sta.z sprite+1
// [132] phi font_2x2_to_sprites::char_current#2 = FONT [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#1] -- pbuz1=pbuc1
lda #<FONT
sta.z char_current
lda #>FONT
sta.z char_current+1
// [132] phi font_2x2_to_sprites::c#2 = 0 [phi:font_2x2_to_sprites->font_2x2_to_sprites::@1#2] -- vbuz1=vbuc1
lda #0
sta.z c
// font_2x2_to_sprites::@1
__b1:
// for(char c=0;c<num_chars;c++)
// [133] if(font_2x2_to_sprites::c#2<font_2x2_to_sprites::num_chars#0) goto font_2x2_to_sprites::@2 -- vbuz1_lt_vbuc1_then_la1
lda.z c
cmp #num_chars
bcc __b2
// font_2x2_to_sprites::@return
// }
// [134] return
rts
// font_2x2_to_sprites::@2
__b2:
// char_right = char_current + 0x40*8
// [135] font_2x2_to_sprites::char_right#0 = font_2x2_to_sprites::char_current#2 + (word)$40*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z char_current
adc #<$40*8
sta.z char_right
lda.z char_current+1
adc #>$40*8
sta.z char_right+1
// [136] font_2x2_to_sprites::char_left#6 = font_2x2_to_sprites::char_current#2 -- pbuz1=pbuz2
lda.z char_current
sta.z char_left
lda.z char_current+1
sta.z char_left+1
// [137] phi from font_2x2_to_sprites::@2 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3]
// [137] phi font_2x2_to_sprites::char_right#3 = font_2x2_to_sprites::char_right#0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#0] -- register_copy
// [137] phi font_2x2_to_sprites::sprite_idx#4 = 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#1] -- vbuz1=vbuc1
lda #0
sta.z sprite_idx
// [137] phi font_2x2_to_sprites::char_left#3 = font_2x2_to_sprites::char_left#6 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#2] -- register_copy
// [137] phi font_2x2_to_sprites::i#2 = 0 [phi:font_2x2_to_sprites::@2->font_2x2_to_sprites::@3#3] -- vbuxx=vbuc1
tax
// [137] phi from font_2x2_to_sprites::@5 to font_2x2_to_sprites::@3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3]
// [137] phi font_2x2_to_sprites::char_right#3 = font_2x2_to_sprites::char_right#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#0] -- register_copy
// [137] phi font_2x2_to_sprites::sprite_idx#4 = font_2x2_to_sprites::sprite_idx#3 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#1] -- register_copy
// [137] phi font_2x2_to_sprites::char_left#3 = font_2x2_to_sprites::char_left#4 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#2] -- register_copy
// [137] phi font_2x2_to_sprites::i#2 = font_2x2_to_sprites::i#1 [phi:font_2x2_to_sprites::@5->font_2x2_to_sprites::@3#3] -- register_copy
// font_2x2_to_sprites::@3
__b3:
// i&7
// [138] font_2x2_to_sprites::$3 = font_2x2_to_sprites::i#2 & 7 -- vbuz1=vbuxx_band_vbuc1
lda #7
sax.z __3
// sprite[sprite_idx++] = char_left[i&7]
// [139] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#4] = font_2x2_to_sprites::char_left#3[font_2x2_to_sprites::$3] -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4
ldy.z __3
lda (char_left),y
ldy.z sprite_idx
sta (sprite),y
// sprite[sprite_idx++] = char_left[i&7];
// [140] font_2x2_to_sprites::sprite_idx#1 = ++ font_2x2_to_sprites::sprite_idx#4 -- vbuz1=_inc_vbuz1
inc.z sprite_idx
// sprite[sprite_idx++] = char_right[i&7]
// [141] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#1] = font_2x2_to_sprites::char_right#3[font_2x2_to_sprites::$3] -- pbuz1_derefidx_vbuz2=pbuz3_derefidx_vbuz4
ldy.z __3
lda (char_right),y
ldy.z sprite_idx
sta (sprite),y
// sprite[sprite_idx++] = char_right[i&7];
// [142] font_2x2_to_sprites::sprite_idx#2 = ++ font_2x2_to_sprites::sprite_idx#1 -- vbuyy=_inc_vbuz1
iny
// sprite[sprite_idx++] = 0x00
// [143] font_2x2_to_sprites::sprite#4[font_2x2_to_sprites::sprite_idx#2] = 0 -- pbuz1_derefidx_vbuyy=vbuc1
lda #0
sta (sprite),y
// sprite[sprite_idx++] = 0x00;
// [144] font_2x2_to_sprites::sprite_idx#3 = ++ font_2x2_to_sprites::sprite_idx#2 -- vbuz1=_inc_vbuyy
iny
sty.z sprite_idx
// if(i==7)
// [145] if(font_2x2_to_sprites::i#2==7) goto font_2x2_to_sprites::@4 -- vbuxx_eq_vbuc1_then_la1
cpx #7
beq __b4
// font_2x2_to_sprites::@6
// if(i==15)
// [146] if(font_2x2_to_sprites::i#2!=$f) goto font_2x2_to_sprites::@8 -- vbuxx_neq_vbuc1_then_la1
cpx #$f
bne __b5
// [148] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5]
// [148] phi font_2x2_to_sprites::char_right#4 = FONT+' '*8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#0] -- pbuz1=pbuc1
lda #<FONT+' '*8
sta.z char_right
lda #>FONT+' '*8
sta.z char_right+1
// [148] phi font_2x2_to_sprites::char_left#4 = FONT+' '*8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@5#1] -- pbuz1=pbuc1
lda #<FONT+' '*8
sta.z char_left
lda #>FONT+' '*8
sta.z char_left+1
// [147] phi from font_2x2_to_sprites::@6 to font_2x2_to_sprites::@8 [phi:font_2x2_to_sprites::@6->font_2x2_to_sprites::@8]
// font_2x2_to_sprites::@8
// [148] phi from font_2x2_to_sprites::@4 font_2x2_to_sprites::@8 to font_2x2_to_sprites::@5 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5]
// [148] phi font_2x2_to_sprites::char_right#4 = font_2x2_to_sprites::char_right#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#0] -- register_copy
// [148] phi font_2x2_to_sprites::char_left#4 = font_2x2_to_sprites::char_left#1 [phi:font_2x2_to_sprites::@4/font_2x2_to_sprites::@8->font_2x2_to_sprites::@5#1] -- register_copy
// font_2x2_to_sprites::@5
__b5:
// for(char i: 0..20)
// [149] font_2x2_to_sprites::i#1 = ++ font_2x2_to_sprites::i#2 -- vbuxx=_inc_vbuxx
inx
// [150] if(font_2x2_to_sprites::i#1!=$15) goto font_2x2_to_sprites::@3 -- vbuxx_neq_vbuc1_then_la1
cpx #$15
bne __b3
// font_2x2_to_sprites::@7
// char_current += 8
// [151] font_2x2_to_sprites::char_current#1 = font_2x2_to_sprites::char_current#2 + 8 -- pbuz1=pbuz1_plus_vbuc1
lda #8
clc
adc.z char_current
sta.z char_current
bcc !+
inc.z char_current+1
!:
// sprite += 0x40
// [152] font_2x2_to_sprites::sprite#1 = font_2x2_to_sprites::sprite#4 + $40 -- pbuz1=pbuz1_plus_vbuc1
lda #$40
clc
adc.z sprite
sta.z sprite
bcc !+
inc.z sprite+1
!:
// for(char c=0;c<num_chars;c++)
// [153] font_2x2_to_sprites::c#1 = ++ font_2x2_to_sprites::c#2 -- vbuz1=_inc_vbuz1
inc.z c
// [132] phi from font_2x2_to_sprites::@7 to font_2x2_to_sprites::@1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1]
// [132] phi font_2x2_to_sprites::sprite#4 = font_2x2_to_sprites::sprite#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#0] -- register_copy
// [132] phi font_2x2_to_sprites::char_current#2 = font_2x2_to_sprites::char_current#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#1] -- register_copy
// [132] phi font_2x2_to_sprites::c#2 = font_2x2_to_sprites::c#1 [phi:font_2x2_to_sprites::@7->font_2x2_to_sprites::@1#2] -- register_copy
jmp __b1
// font_2x2_to_sprites::@4
__b4:
// char_left = char_current + 0x80*8
// [154] font_2x2_to_sprites::char_left#1 = font_2x2_to_sprites::char_current#2 + (word)$80*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z char_current
adc #<$80*8
sta.z char_left
lda.z char_current+1
adc #>$80*8
sta.z char_left+1
// char_right = char_current + 0xc0*8
// [155] font_2x2_to_sprites::char_right#1 = font_2x2_to_sprites::char_current#2 + (word)$c0*8 -- pbuz1=pbuz2_plus_vwuc1
clc
lda.z char_current
adc #<$c0*8
sta.z char_right
lda.z char_current+1
adc #>$c0*8
sta.z char_right+1
jmp __b5
}
// plexInit
// Initialize the multiplexer data structures
plexInit: {
// plexInit::plexSetScreen1
// PLEX_SCREEN_PTR = screen+0x3f8
// [157] PLEX_SCREEN_PTR = SCREEN+$3f8 -- pbuz1=pbuc1
lda #<SCREEN+$3f8
sta.z PLEX_SCREEN_PTR
lda #>SCREEN+$3f8
sta.z PLEX_SCREEN_PTR+1
// [158] phi from plexInit::plexSetScreen1 to plexInit::@1 [phi:plexInit::plexSetScreen1->plexInit::@1]
// [158] phi plexInit::i#2 = 0 [phi:plexInit::plexSetScreen1->plexInit::@1#0] -- vbuxx=vbuc1
ldx #0
// [158] phi from plexInit::@1 to plexInit::@1 [phi:plexInit::@1->plexInit::@1]
// [158] phi plexInit::i#2 = plexInit::i#1 [phi:plexInit::@1->plexInit::@1#0] -- register_copy
// plexInit::@1
__b1:
// PLEX_SORTED_IDX[i] = i
// [159] PLEX_SORTED_IDX[plexInit::i#2] = plexInit::i#2 -- pbuc1_derefidx_vbuxx=vbuxx
txa
sta PLEX_SORTED_IDX,x
// for(char i: 0..PLEX_COUNT-1)
// [160] plexInit::i#1 = ++ plexInit::i#2 -- vbuxx=_inc_vbuxx
inx
// [161] if(plexInit::i#1!=PLEX_COUNT-1+1) goto plexInit::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #PLEX_COUNT-1+1
bne __b1
// plexInit::@return
// }
// [162] return
rts
}
// plex_move
// Move the plex sprites in an Y-sine and scroll them to the left.
plex_move: {
.label y_idx = $1c
.label x_idx = $e
.label s = $b
.label __7 = $1a
// y_idx = y_sin_idx
// [164] plex_move::y_idx#0 = y_sin_idx#11 -- vbuz1=vbuz2
lda.z y_sin_idx
sta.z y_idx
// x_idx = x_movement_idx
// [165] plex_move::x_idx#0 = x_movement_idx#11 -- vbuz1=vbuz2
lda.z x_movement_idx
sta.z x_idx
// [166] phi from plex_move to plex_move::@1 [phi:plex_move->plex_move::@1]
// [166] phi scroll_text_next#12 = scroll_text_next#27 [phi:plex_move->plex_move::@1#0] -- register_copy
// [166] phi plex_move::x_idx#2 = plex_move::x_idx#0 [phi:plex_move->plex_move::@1#1] -- register_copy
// [166] phi plex_move::s#2 = 0 [phi:plex_move->plex_move::@1#2] -- vbuz1=vbuc1
lda #0
sta.z s
// [166] phi plex_move::y_idx#2 = plex_move::y_idx#0 [phi:plex_move->plex_move::@1#3] -- register_copy
// [166] phi from plex_move::@2 to plex_move::@1 [phi:plex_move::@2->plex_move::@1]
// [166] phi scroll_text_next#12 = scroll_text_next#14 [phi:plex_move::@2->plex_move::@1#0] -- register_copy
// [166] phi plex_move::x_idx#2 = plex_move::x_idx#1 [phi:plex_move::@2->plex_move::@1#1] -- register_copy
// [166] phi plex_move::s#2 = plex_move::s#1 [phi:plex_move::@2->plex_move::@1#2] -- register_copy
// [166] phi plex_move::y_idx#2 = plex_move::y_idx#1 [phi:plex_move::@2->plex_move::@1#3] -- register_copy
// plex_move::@1
__b1:
// PLEX_YPOS[s] = YSIN[y_idx]
// [167] PLEX_YPOS[plex_move::s#2] = YSIN[plex_move::y_idx#2] -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz2
// Assign sine value
ldy.z y_idx
lda YSIN,y
ldy.z s
sta PLEX_YPOS,y
// y_idx += 8
// [168] plex_move::y_idx#1 = plex_move::y_idx#2 + 8 -- vbuz1=vbuz1_plus_vbuc1
lax.z y_idx
axs #-[8]
stx.z y_idx
// PLEX_XPOS[s] = { XMOVEMENT_HI[x_idx], XMOVEMENT[x_idx] }
// [169] plex_move::$6 = plex_move::s#2 << 1 -- vbuxx=vbuz1_rol_1
tya
asl
tax
// [170] plex_move::$7 = XMOVEMENT_HI[plex_move::x_idx#2] w= XMOVEMENT[plex_move::x_idx#2] -- vwuz1=pbuc1_derefidx_vbuz2_word_pbuc2_derefidx_vbuz2
ldy.z x_idx
lda XMOVEMENT_HI,y
sta.z __7+1
lda XMOVEMENT,y
sta.z __7
// [171] PLEX_XPOS[plex_move::$6] = plex_move::$7 -- pwuc1_derefidx_vbuxx=vwuz1
sta PLEX_XPOS,x
lda.z __7+1
sta PLEX_XPOS+1,x
// if(x_idx==0)
// [172] if(plex_move::x_idx#2!=0) goto plex_move::@2 -- vbuz1_neq_0_then_la1
tya
cmp #0
bne __b2
// plex_move::@4
// if(*scroll_text_next==0)
// [173] if(*scroll_text_next#12!=0) goto plex_move::@6 -- _deref_pbuz1_neq_0_then_la1
ldy #0
lda (scroll_text_next),y
cmp #0
bne __b3
// [175] phi from plex_move::@4 to plex_move::@3 [phi:plex_move::@4->plex_move::@3]
// [175] phi scroll_text_next#13 = SCROLL_TEXT [phi:plex_move::@4->plex_move::@3#0] -- pbuz1=pbuc1
lda #<SCROLL_TEXT
sta.z scroll_text_next
lda #>SCROLL_TEXT
sta.z scroll_text_next+1
// [174] phi from plex_move::@4 to plex_move::@6 [phi:plex_move::@4->plex_move::@6]
// plex_move::@6
// [175] phi from plex_move::@6 to plex_move::@3 [phi:plex_move::@6->plex_move::@3]
// [175] phi scroll_text_next#13 = scroll_text_next#12 [phi:plex_move::@6->plex_move::@3#0] -- register_copy
// plex_move::@3
__b3:
// SPRITE_0+*scroll_text_next++
// [176] plex_move::$4 = SPRITE_0#0 + *scroll_text_next#13 -- vbuaa=vbuc1_plus__deref_pbuz1
lda #SPRITE_0
clc
ldy #0
adc (scroll_text_next),y
// PLEX_PTR[s] = SPRITE_0+*scroll_text_next++
// [177] PLEX_PTR[plex_move::s#2] = plex_move::$4 -- pbuc1_derefidx_vbuz1=vbuaa
// Read next char from the scroll text
ldy.z s
sta PLEX_PTR,y
// PLEX_PTR[s] = SPRITE_0+*scroll_text_next++;
// [178] scroll_text_next#3 = ++ scroll_text_next#13 -- pbuz1=_inc_pbuz1
inc.z scroll_text_next
bne !+
inc.z scroll_text_next+1
!:
// [179] phi from plex_move::@1 plex_move::@3 to plex_move::@2 [phi:plex_move::@1/plex_move::@3->plex_move::@2]
// [179] phi scroll_text_next#14 = scroll_text_next#12 [phi:plex_move::@1/plex_move::@3->plex_move::@2#0] -- register_copy
// plex_move::@2
__b2:
// x_idx +=8
// [180] plex_move::x_idx#1 = plex_move::x_idx#2 + 8 -- vbuz1=vbuz1_plus_vbuc1
lax.z x_idx
axs #-[8]
stx.z x_idx
// for(char s: 0..PLEX_COUNT-1)
// [181] plex_move::s#1 = ++ plex_move::s#2 -- vbuz1=_inc_vbuz1
inc.z s
// [182] if(plex_move::s#1!=PLEX_COUNT-1+1) goto plex_move::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLEX_COUNT-1+1
cmp.z s
bne __b1
// plex_move::@5
// y_sin_idx += 3
// [183] y_sin_idx#13 = y_sin_idx#11 + 3 -- vbuz1=vbuz1_plus_vbuc1
lax.z y_sin_idx
axs #-[3]
stx.z y_sin_idx
// x_movement_idx++;
// [184] x_movement_idx#13 = ++ x_movement_idx#11 -- vbuz1=_inc_vbuz1
inc.z x_movement_idx
// plex_move::@return
// }
// [185] return
rts
}
// plexSort
// Ensure that the indices in PLEX_SORTED_IDX is sorted based on the y-positions in PLEX_YPOS
// Assumes that the positions are nearly sorted already (as each sprite just moves a bit)
// Uses an insertion sort:
// 1. Moves a marker (m) from the start to end of the array. Every time the marker moves forward all elements before the marker are sorted correctly.
// 2a. If the next element after the marker is larger that the current element
// the marker can be moved forwards (as the sorting is correct).
// 2b. If the next element after the marker is smaller than the current element:
// elements before the marker are shifted right one at a time until encountering one smaller than the current one.
// It is then inserted at the spot. Now the marker can move forward.
plexSort: {
.label nxt_idx = $1c
.label nxt_y = $1d
.label m = $e
// [187] phi from plexSort to plexSort::@1 [phi:plexSort->plexSort::@1]
// [187] phi plexSort::m#2 = 0 [phi:plexSort->plexSort::@1#0] -- vbuz1=vbuc1
lda #0
sta.z m
// [187] phi from plexSort::@2 to plexSort::@1 [phi:plexSort::@2->plexSort::@1]
// [187] phi plexSort::m#2 = plexSort::m#1 [phi:plexSort::@2->plexSort::@1#0] -- register_copy
// plexSort::@1
__b1:
// nxt_idx = PLEX_SORTED_IDX[m+1]
// [188] plexSort::nxt_idx#0 = (PLEX_SORTED_IDX+1)[plexSort::m#2] -- vbuz1=pbuc1_derefidx_vbuz2
ldy.z m
lda PLEX_SORTED_IDX+1,y
sta.z nxt_idx
// nxt_y = PLEX_YPOS[nxt_idx]
// [189] plexSort::nxt_y#0 = PLEX_YPOS[plexSort::nxt_idx#0] -- vbuz1=pbuc1_derefidx_vbuz2
tay
lda PLEX_YPOS,y
sta.z nxt_y
// if(nxt_y<PLEX_YPOS[PLEX_SORTED_IDX[m]])
// [190] if(plexSort::nxt_y#0>=PLEX_YPOS[PLEX_SORTED_IDX[plexSort::m#2]]) goto plexSort::@2 -- vbuz1_ge_pbuc1_derefidx_(pbuc2_derefidx_vbuz2)_then_la1
ldx.z m
ldy PLEX_SORTED_IDX,x
cmp PLEX_YPOS,y
bcs __b2
// plexSort::@5
// [191] plexSort::s#6 = plexSort::m#2 -- vbuxx=vbuz1
// [192] phi from plexSort::@5 plexSort::@7 to plexSort::@3 [phi:plexSort::@5/plexSort::@7->plexSort::@3]
// [192] phi plexSort::s#3 = plexSort::s#6 [phi:plexSort::@5/plexSort::@7->plexSort::@3#0] -- register_copy
// plexSort::@3
__b3:
// PLEX_SORTED_IDX[s+1] = PLEX_SORTED_IDX[s]
// [193] (PLEX_SORTED_IDX+1)[plexSort::s#3] = PLEX_SORTED_IDX[plexSort::s#3] -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx
lda PLEX_SORTED_IDX,x
sta PLEX_SORTED_IDX+1,x
// s--;
// [194] plexSort::s#1 = -- plexSort::s#3 -- vbuxx=_dec_vbuxx
dex
// while((s!=0xff) && (nxt_y<PLEX_YPOS[PLEX_SORTED_IDX[s]]))
// [195] if(plexSort::s#1==$ff) goto plexSort::@4 -- vbuxx_eq_vbuc1_then_la1
cpx #$ff
beq __b4
// plexSort::@7
// [196] if(plexSort::nxt_y#0<PLEX_YPOS[PLEX_SORTED_IDX[plexSort::s#1]]) goto plexSort::@3 -- vbuz1_lt_pbuc1_derefidx_(pbuc2_derefidx_vbuxx)_then_la1
lda.z nxt_y
ldy PLEX_SORTED_IDX,x
cmp PLEX_YPOS,y
bcc __b3
// plexSort::@4
__b4:
// s++;
// [197] plexSort::s#2 = ++ plexSort::s#1 -- vbuxx=_inc_vbuxx
inx
// PLEX_SORTED_IDX[s] = nxt_idx
// [198] PLEX_SORTED_IDX[plexSort::s#2] = plexSort::nxt_idx#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda.z nxt_idx
sta PLEX_SORTED_IDX,x
// plexSort::@2
__b2:
// for(char m: 0..PLEX_COUNT-2)
// [199] plexSort::m#1 = ++ plexSort::m#2 -- vbuz1=_inc_vbuz1
inc.z m
// [200] if(plexSort::m#1!=PLEX_COUNT-2+1) goto plexSort::@1 -- vbuz1_neq_vbuc1_then_la1
lda #PLEX_COUNT-2+1
cmp.z m
bne __b1
// plexSort::@6
// plex_show_idx = 0
// [201] plex_show_idx = 0 -- vbuz1=vbuc1
// Prepare for showing the sprites
lda #0
sta.z plex_show_idx
// plex_sprite_idx = 0
// [202] plex_sprite_idx = 0 -- vbuz1=vbuc1
sta.z plex_sprite_idx
// plex_sprite_msb = 1
// [203] plex_sprite_msb = 1 -- vbuz1=vbuc1
lda #1
sta.z plex_sprite_msb
// [204] phi from plexSort::@6 to plexSort::plexFreePrepare1 [phi:plexSort::@6->plexSort::plexFreePrepare1]
// plexSort::plexFreePrepare1
// [205] phi from plexSort::plexFreePrepare1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1]
// [205] phi plexSort::plexFreePrepare1_s#2 = 0 [phi:plexSort::plexFreePrepare1->plexSort::plexFreePrepare1_@1#0] -- vbuxx=vbuc1
ldx #0
// [205] phi from plexSort::plexFreePrepare1_@1 to plexSort::plexFreePrepare1_@1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1]
// [205] phi plexSort::plexFreePrepare1_s#2 = plexSort::plexFreePrepare1_s#1 [phi:plexSort::plexFreePrepare1_@1->plexSort::plexFreePrepare1_@1#0] -- register_copy
// plexSort::plexFreePrepare1_@1
plexFreePrepare1___b1:
// PLEX_FREE_YPOS[s] = 0
// [206] PLEX_FREE_YPOS[plexSort::plexFreePrepare1_s#2] = 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta PLEX_FREE_YPOS,x
// for( char s: 0..7)
// [207] plexSort::plexFreePrepare1_s#1 = ++ plexSort::plexFreePrepare1_s#2 -- vbuxx=_inc_vbuxx
inx
// [208] if(plexSort::plexFreePrepare1_s#1!=8) goto plexSort::plexFreePrepare1_@1 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne plexFreePrepare1___b1
// plexSort::plexFreePrepare1_@2
// plex_free_next = 0
// [209] plex_free_next = 0 -- vbuz1=vbuc1
sta.z plex_free_next
// plexSort::@return
// }
// [210] return
rts
}
// File Data
.segment Data
// The x-positions of the multiplexer sprites (0x000-0x1ff)
PLEX_XPOS: .fill 2*PLEX_COUNT, 0
// The y-positions of the multiplexer sprites.
PLEX_YPOS: .fill PLEX_COUNT, 0
// The sprite pointers for the multiplexed sprites
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.
PLEX_SORTED_IDX: .fill PLEX_COUNT, 0
// 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
//char FONT[0x0800] = kickasm(resource "elefont.bin") {{
// .import binary "elefont.bin"
//}};
FONT: .fill $800, 0
.align $100
YSIN:
.fill $100, round(142+89.5*sin(toRadians(360*i/256)))
.align $100
XMOVEMENT:
//.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$100)))
//.lohifill $100, round(344-i*344/$100-129*sin(toRadians(360*i/$100)))
.lohifill $100, round(344-i*344/$100 -86*sin(toRadians(360*i/$100)) -43*sin(toRadians(360*i/$80)))
//.lohifill $100, round(344-i*344/$100-86*sin(toRadians(360*i/$80)))
// The scroll text
SCROLL_TEXT: .text "camelot presents a spanking new contribution to the always hungry c64 scene. in this time of the corona virus we have chosen to direct our efforts towards the safe haven of coding, pixeling and composing for our beloved old breadbin. "
.byte 0