1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-06-03 07:29:37 +00:00
kickc/src/test/ref/complex/clearscreen/clearscreen.log
2020-12-30 01:55:04 +01:00

9778 lines
614 KiB
Plaintext

Resolved forward reference RASTER_IRQ_TOP to RASTER_IRQ_TOP
Resolved forward reference irqTop to __interrupt(hardware_clobber) void irqTop()
Resolved forward reference RASTER_IRQ_MIDDLE to RASTER_IRQ_MIDDLE
Resolved forward reference irqBottom to __interrupt(hardware_clobber) void irqBottom()
Constantified RValue PROCESSING[main::$10] = { x: 0, y: 0, vx: 0, vy: 0, id: 0, ptr: 0, col: 0, status: STATUS_FREE, screenPtr: (byte*)0 }
Constantified RValue getCharToProcess::closest = (struct ProcessingChar){ getCharToProcess::x, getCharToProcess::y, getCharToProcess::dist }
Constantified RValue PROCESSING[startProcessing::$22] = (struct ProcessingSprite){ startProcessing::spriteX, startProcessing::spriteY, (word)startProcessing::$15, $3c, startProcessing::spriteIdx, startProcessing::spritePtr, startProcessing::spriteCol, STATUS_NEW, startProcessing::screenPtr }
Inlined call vicSelectGfxBank::$0 = call toDd00 vicSelectGfxBank::gfx
Inlined call call __init
Eliminating unused variable with no statement main::$5
Unwinding list assignment { main::$5_x, main::$5_y, main::$5_dist } = { getCharToProcess::return_x, getCharToProcess::return_y, getCharToProcess::return_dist }
Unwinding list assignment { getCharToProcess::return_x#0, getCharToProcess::return_y#0, getCharToProcess::return_dist#0 } = { getCharToProcess::return_x#2, getCharToProcess::return_y#2, getCharToProcess::return_dist#2 }
CONTROL FLOW GRAPH SSA
void* malloc(word malloc::size)
malloc: scope:[malloc] from __start::@2 __start::__init1
malloc::size#2 = phi( __start::@2/malloc::size#1, __start::__init1/malloc::size#0 )
heap_head#6 = phi( __start::@2/heap_head#3, __start::__init1/heap_head#2 )
malloc::$0 = heap_head#6 - malloc::size#2
malloc::mem#0 = malloc::$0
heap_head#0 = malloc::mem#0
malloc::return#0 = ((void*)) malloc::mem#0
to:malloc::@return
malloc::@return: scope:[malloc] from malloc
heap_head#7 = phi( malloc/heap_head#0 )
malloc::return#4 = phi( malloc/malloc::return#0 )
malloc::return#1 = malloc::return#4
heap_head#1 = heap_head#7
return
to:@return
word atan2_16(signed word atan2_16::x , signed word atan2_16::y)
atan2_16: scope:[atan2_16] from init_angle_screen::@3
atan2_16::x#9 = phi( init_angle_screen::@3/atan2_16::x#0 )
atan2_16::y#1 = phi( init_angle_screen::@3/atan2_16::y#0 )
atan2_16::$0 = atan2_16::y#1 >= 0
if(atan2_16::$0) goto atan2_16::@1
to:atan2_16::@2
atan2_16::@1: scope:[atan2_16] from atan2_16
atan2_16::x#5 = phi( atan2_16/atan2_16::x#9 )
atan2_16::y#2 = phi( atan2_16/atan2_16::y#1 )
atan2_16::$3 = atan2_16::y#2
to:atan2_16::@3
atan2_16::@2: scope:[atan2_16] from atan2_16
atan2_16::x#6 = phi( atan2_16/atan2_16::x#9 )
atan2_16::y#3 = phi( atan2_16/atan2_16::y#1 )
atan2_16::$1 = - atan2_16::y#3
atan2_16::$2 = atan2_16::$1
to:atan2_16::@3
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
atan2_16::y#15 = phi( atan2_16::@1/atan2_16::y#2, atan2_16::@2/atan2_16::y#3 )
atan2_16::x#1 = phi( atan2_16::@1/atan2_16::x#5, atan2_16::@2/atan2_16::x#6 )
atan2_16::$4 = phi( atan2_16::@1/atan2_16::$3, atan2_16::@2/atan2_16::$2 )
atan2_16::yi#0 = atan2_16::$4
atan2_16::$5 = atan2_16::x#1 >= 0
if(atan2_16::$5) goto atan2_16::@4
to:atan2_16::@5
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
atan2_16::y#12 = phi( atan2_16::@3/atan2_16::y#15 )
atan2_16::yi#12 = phi( atan2_16::@3/atan2_16::yi#0 )
atan2_16::x#2 = phi( atan2_16::@3/atan2_16::x#1 )
atan2_16::$8 = atan2_16::x#2
to:atan2_16::@6
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
atan2_16::y#13 = phi( atan2_16::@3/atan2_16::y#15 )
atan2_16::yi#13 = phi( atan2_16::@3/atan2_16::yi#0 )
atan2_16::x#3 = phi( atan2_16::@3/atan2_16::x#1 )
atan2_16::$6 = - atan2_16::x#3
atan2_16::$7 = atan2_16::$6
to:atan2_16::@6
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
atan2_16::y#9 = phi( atan2_16::@4/atan2_16::y#12, atan2_16::@5/atan2_16::y#13 )
atan2_16::x#10 = phi( atan2_16::@4/atan2_16::x#2, atan2_16::@5/atan2_16::x#3 )
atan2_16::yi#9 = phi( atan2_16::@4/atan2_16::yi#12, atan2_16::@5/atan2_16::yi#13 )
atan2_16::$9 = phi( atan2_16::@4/atan2_16::$8, atan2_16::@5/atan2_16::$7 )
atan2_16::xi#0 = atan2_16::$9
atan2_16::angle#0 = 0
atan2_16::i#0 = 0
to:atan2_16::@10
atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6
atan2_16::y#7 = phi( atan2_16::@19/atan2_16::y#8, atan2_16::@6/atan2_16::y#9 )
atan2_16::x#7 = phi( atan2_16::@19/atan2_16::x#8, atan2_16::@6/atan2_16::x#10 )
atan2_16::angle#12 = phi( atan2_16::@19/atan2_16::angle#13, atan2_16::@6/atan2_16::angle#0 )
atan2_16::i#6 = phi( atan2_16::@19/atan2_16::i#1, atan2_16::@6/atan2_16::i#0 )
atan2_16::xi#6 = phi( atan2_16::@19/atan2_16::xi#8, atan2_16::@6/atan2_16::xi#0 )
atan2_16::yi#3 = phi( atan2_16::@19/atan2_16::yi#8, atan2_16::@6/atan2_16::yi#9 )
atan2_16::$16 = atan2_16::yi#3 == 0
atan2_16::$17 = ! atan2_16::$16
if(atan2_16::$17) goto atan2_16::@11
to:atan2_16::@12
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
atan2_16::y#19 = phi( atan2_16::@10/atan2_16::y#7 )
atan2_16::x#17 = phi( atan2_16::@10/atan2_16::x#7 )
atan2_16::angle#19 = phi( atan2_16::@10/atan2_16::angle#12 )
atan2_16::i#2 = phi( atan2_16::@10/atan2_16::i#6 )
atan2_16::yi#4 = phi( atan2_16::@10/atan2_16::yi#3 )
atan2_16::xi#3 = phi( atan2_16::@10/atan2_16::xi#6 )
atan2_16::xd#0 = atan2_16::xi#3
atan2_16::yd#0 = atan2_16::yi#4
atan2_16::shift#0 = atan2_16::i#2
to:atan2_16::@13
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19
atan2_16::y#5 = phi( atan2_16::@10/atan2_16::y#7, atan2_16::@19/atan2_16::y#8 )
atan2_16::x#4 = phi( atan2_16::@10/atan2_16::x#7, atan2_16::@19/atan2_16::x#8 )
atan2_16::angle#6 = phi( atan2_16::@10/atan2_16::angle#12, atan2_16::@19/atan2_16::angle#13 )
atan2_16::angle#1 = atan2_16::angle#6 / 2
atan2_16::$10 = atan2_16::x#4 < 0
atan2_16::$11 = ! atan2_16::$10
if(atan2_16::$11) goto atan2_16::@7
to:atan2_16::@21
atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14
atan2_16::y#18 = phi( atan2_16::@11/atan2_16::y#19, atan2_16::@14/atan2_16::y#20 )
atan2_16::x#16 = phi( atan2_16::@11/atan2_16::x#17, atan2_16::@14/atan2_16::x#18 )
atan2_16::angle#18 = phi( atan2_16::@11/atan2_16::angle#19, atan2_16::@14/atan2_16::angle#20 )
atan2_16::i#10 = phi( atan2_16::@11/atan2_16::i#2, atan2_16::@14/atan2_16::i#11 )
atan2_16::xi#11 = phi( atan2_16::@11/atan2_16::xi#3, atan2_16::@14/atan2_16::xi#12 )
atan2_16::yi#14 = phi( atan2_16::@11/atan2_16::yi#4, atan2_16::@14/atan2_16::yi#15 )
atan2_16::yd#7 = phi( atan2_16::@11/atan2_16::yd#0, atan2_16::@14/atan2_16::yd#1 )
atan2_16::xd#7 = phi( atan2_16::@11/atan2_16::xd#0, atan2_16::@14/atan2_16::xd#1 )
atan2_16::shift#2 = phi( atan2_16::@11/atan2_16::shift#0, atan2_16::@14/atan2_16::shift#1 )
atan2_16::$18 = atan2_16::shift#2 >= 2
if(atan2_16::$18) goto atan2_16::@14
to:atan2_16::@15
atan2_16::@14: scope:[atan2_16] from atan2_16::@13
atan2_16::y#20 = phi( atan2_16::@13/atan2_16::y#18 )
atan2_16::x#18 = phi( atan2_16::@13/atan2_16::x#16 )
atan2_16::angle#20 = phi( atan2_16::@13/atan2_16::angle#18 )
atan2_16::i#11 = phi( atan2_16::@13/atan2_16::i#10 )
atan2_16::xi#12 = phi( atan2_16::@13/atan2_16::xi#11 )
atan2_16::yi#15 = phi( atan2_16::@13/atan2_16::yi#14 )
atan2_16::shift#3 = phi( atan2_16::@13/atan2_16::shift#2 )
atan2_16::yd#3 = phi( atan2_16::@13/atan2_16::yd#7 )
atan2_16::xd#3 = phi( atan2_16::@13/atan2_16::xd#7 )
atan2_16::xd#1 = atan2_16::xd#3 >> 2
atan2_16::yd#1 = atan2_16::yd#3 >> 2
atan2_16::shift#1 = atan2_16::shift#3 - 2
to:atan2_16::@13
atan2_16::@15: scope:[atan2_16] from atan2_16::@13
atan2_16::y#16 = phi( atan2_16::@13/atan2_16::y#18 )
atan2_16::x#14 = phi( atan2_16::@13/atan2_16::x#16 )
atan2_16::angle#16 = phi( atan2_16::@13/atan2_16::angle#18 )
atan2_16::i#8 = phi( atan2_16::@13/atan2_16::i#10 )
atan2_16::xi#9 = phi( atan2_16::@13/atan2_16::xi#11 )
atan2_16::yd#8 = phi( atan2_16::@13/atan2_16::yd#7 )
atan2_16::xd#8 = phi( atan2_16::@13/atan2_16::xd#7 )
atan2_16::yi#10 = phi( atan2_16::@13/atan2_16::yi#14 )
atan2_16::shift#4 = phi( atan2_16::@13/atan2_16::shift#2 )
atan2_16::$24 = 0 != atan2_16::shift#4
atan2_16::$19 = ! atan2_16::$24
if(atan2_16::$19) goto atan2_16::@17
to:atan2_16::@16
atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16
atan2_16::y#14 = phi( atan2_16::@15/atan2_16::y#16, atan2_16::@16/atan2_16::y#17 )
atan2_16::x#13 = phi( atan2_16::@15/atan2_16::x#14, atan2_16::@16/atan2_16::x#15 )
atan2_16::angle#14 = phi( atan2_16::@15/atan2_16::angle#16, atan2_16::@16/atan2_16::angle#17 )
atan2_16::i#7 = phi( atan2_16::@15/atan2_16::i#8, atan2_16::@16/atan2_16::i#9 )
atan2_16::xd#9 = phi( atan2_16::@15/atan2_16::xd#8, atan2_16::@16/atan2_16::xd#2 )
atan2_16::yd#9 = phi( atan2_16::@15/atan2_16::yd#8, atan2_16::@16/atan2_16::yd#2 )
atan2_16::xi#7 = phi( atan2_16::@15/atan2_16::xi#9, atan2_16::@16/atan2_16::xi#10 )
atan2_16::yi#5 = phi( atan2_16::@15/atan2_16::yi#10, atan2_16::@16/atan2_16::yi#11 )
atan2_16::$20 = atan2_16::yi#5 >= 0
if(atan2_16::$20) goto atan2_16::@18
to:atan2_16::@20
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
atan2_16::y#17 = phi( atan2_16::@15/atan2_16::y#16 )
atan2_16::x#15 = phi( atan2_16::@15/atan2_16::x#14 )
atan2_16::angle#17 = phi( atan2_16::@15/atan2_16::angle#16 )
atan2_16::i#9 = phi( atan2_16::@15/atan2_16::i#8 )
atan2_16::xi#10 = phi( atan2_16::@15/atan2_16::xi#9 )
atan2_16::yi#11 = phi( atan2_16::@15/atan2_16::yi#10 )
atan2_16::yd#4 = phi( atan2_16::@15/atan2_16::yd#8 )
atan2_16::xd#4 = phi( atan2_16::@15/atan2_16::xd#8 )
atan2_16::xd#2 = atan2_16::xd#4 >> 1
atan2_16::yd#2 = atan2_16::yd#4 >> 1
to:atan2_16::@17
atan2_16::@18: scope:[atan2_16] from atan2_16::@17
atan2_16::y#10 = phi( atan2_16::@17/atan2_16::y#14 )
atan2_16::x#11 = phi( atan2_16::@17/atan2_16::x#13 )
atan2_16::angle#7 = phi( atan2_16::@17/atan2_16::angle#14 )
atan2_16::i#3 = phi( atan2_16::@17/atan2_16::i#7 )
atan2_16::xd#5 = phi( atan2_16::@17/atan2_16::xd#9 )
atan2_16::yi#6 = phi( atan2_16::@17/atan2_16::yi#5 )
atan2_16::yd#5 = phi( atan2_16::@17/atan2_16::yd#9 )
atan2_16::xi#4 = phi( atan2_16::@17/atan2_16::xi#7 )
atan2_16::xi#1 = atan2_16::xi#4 + atan2_16::yd#5
atan2_16::yi#1 = atan2_16::yi#6 - atan2_16::xd#5
atan2_16::$22 = atan2_16::i#3 * SIZEOF_WORD
atan2_16::angle#2 = atan2_16::angle#7 + CORDIC_ATAN2_ANGLES_16[atan2_16::$22]
to:atan2_16::@19
atan2_16::@20: scope:[atan2_16] from atan2_16::@17
atan2_16::y#11 = phi( atan2_16::@17/atan2_16::y#14 )
atan2_16::x#12 = phi( atan2_16::@17/atan2_16::x#13 )
atan2_16::angle#8 = phi( atan2_16::@17/atan2_16::angle#14 )
atan2_16::i#4 = phi( atan2_16::@17/atan2_16::i#7 )
atan2_16::xd#6 = phi( atan2_16::@17/atan2_16::xd#9 )
atan2_16::yi#7 = phi( atan2_16::@17/atan2_16::yi#5 )
atan2_16::yd#6 = phi( atan2_16::@17/atan2_16::yd#9 )
atan2_16::xi#5 = phi( atan2_16::@17/atan2_16::xi#7 )
atan2_16::xi#2 = atan2_16::xi#5 - atan2_16::yd#6
atan2_16::yi#2 = atan2_16::yi#7 + atan2_16::xd#6
atan2_16::$23 = atan2_16::i#4 * SIZEOF_WORD
atan2_16::angle#3 = atan2_16::angle#8 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23]
to:atan2_16::@19
atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20
atan2_16::y#8 = phi( atan2_16::@18/atan2_16::y#10, atan2_16::@20/atan2_16::y#11 )
atan2_16::xi#8 = phi( atan2_16::@18/atan2_16::xi#1, atan2_16::@20/atan2_16::xi#2 )
atan2_16::x#8 = phi( atan2_16::@18/atan2_16::x#11, atan2_16::@20/atan2_16::x#12 )
atan2_16::angle#13 = phi( atan2_16::@18/atan2_16::angle#2, atan2_16::@20/atan2_16::angle#3 )
atan2_16::yi#8 = phi( atan2_16::@18/atan2_16::yi#1, atan2_16::@20/atan2_16::yi#2 )
atan2_16::i#5 = phi( atan2_16::@18/atan2_16::i#3, atan2_16::@20/atan2_16::i#4 )
atan2_16::i#1 = atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1)
atan2_16::$21 = atan2_16::i#1 != rangelast(0,CORDIC_ITERATIONS_16-1)
if(atan2_16::$21) goto atan2_16::@10
to:atan2_16::@12
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21
atan2_16::angle#15 = phi( atan2_16::@12/atan2_16::angle#1, atan2_16::@21/atan2_16::angle#4 )
atan2_16::y#4 = phi( atan2_16::@12/atan2_16::y#5, atan2_16::@21/atan2_16::y#6 )
atan2_16::$13 = atan2_16::y#4 < 0
atan2_16::$14 = ! atan2_16::$13
if(atan2_16::$14) goto atan2_16::@8
to:atan2_16::@9
atan2_16::@21: scope:[atan2_16] from atan2_16::@12
atan2_16::y#6 = phi( atan2_16::@12/atan2_16::y#5 )
atan2_16::angle#9 = phi( atan2_16::@12/atan2_16::angle#1 )
atan2_16::$12 = $8000 - atan2_16::angle#9
atan2_16::angle#4 = atan2_16::$12
to:atan2_16::@7
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
atan2_16::angle#10 = phi( atan2_16::@7/atan2_16::angle#15, atan2_16::@9/atan2_16::angle#5 )
atan2_16::return#0 = atan2_16::angle#10
to:atan2_16::@return
atan2_16::@9: scope:[atan2_16] from atan2_16::@7
atan2_16::angle#11 = phi( atan2_16::@7/atan2_16::angle#15 )
atan2_16::$15 = - atan2_16::angle#11
atan2_16::angle#5 = atan2_16::$15
to:atan2_16::@8
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
atan2_16::return#3 = phi( atan2_16::@8/atan2_16::return#0 )
atan2_16::return#1 = atan2_16::return#3
return
to:@return
void main()
main: scope:[main] from __start::@1
SCREEN_COPY#6 = phi( __start::@1/SCREEN_COPY#10 )
SCREEN_DIST#2 = phi( __start::@1/SCREEN_DIST#5 )
init_angle_screen::screen#0 = SCREEN_DIST#2
call init_angle_screen
to:main::@10
main::@10: scope:[main] from main
SCREEN_DIST#17 = phi( main/SCREEN_DIST#2 )
SCREEN_COPY#2 = phi( main/SCREEN_COPY#6 )
main::src#0 = SCREEN
main::dst#0 = SCREEN_COPY#2
to:main::@1
main::@1: scope:[main] from main::@10 main::@2
SCREEN_DIST#16 = phi( main::@10/SCREEN_DIST#17, main::@2/SCREEN_DIST#18 )
SCREEN_COPY#26 = phi( main::@10/SCREEN_COPY#2, main::@2/SCREEN_COPY#27 )
main::dst#3 = phi( main::@10/main::dst#0, main::@2/main::dst#1 )
main::src#2 = phi( main::@10/main::src#0, main::@2/main::src#1 )
main::$3 = main::src#2 != SCREEN+$3e8
if(main::$3) goto main::@2
to:main::@3
main::@2: scope:[main] from main::@1
SCREEN_DIST#18 = phi( main::@1/SCREEN_DIST#16 )
SCREEN_COPY#27 = phi( main::@1/SCREEN_COPY#26 )
main::dst#2 = phi( main::@1/main::dst#3 )
main::src#3 = phi( main::@1/main::src#2 )
*main::dst#2 = *main::src#3
main::src#1 = ++ main::src#3
main::dst#1 = ++ main::dst#2
to:main::@1
main::@3: scope:[main] from main::@1
SCREEN_DIST#15 = phi( main::@1/SCREEN_DIST#16 )
SCREEN_COPY#25 = phi( main::@1/SCREEN_COPY#26 )
main::i#0 = 0
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
SCREEN_DIST#14 = phi( main::@3/SCREEN_DIST#15, main::@4/SCREEN_DIST#14 )
SCREEN_COPY#23 = phi( main::@3/SCREEN_COPY#25, main::@4/SCREEN_COPY#23 )
main::i#2 = phi( main::@3/main::i#0, main::@4/main::i#1 )
main::$10 = main::i#2 * SIZEOF_STRUCT_PROCESSINGSPRITE
PROCESSING[main::$10] = memcpy(*(&$0), struct ProcessingSprite, SIZEOF_STRUCT_PROCESSINGSPRITE)
main::i#1 = main::i#2 + rangenext(0,NUM_PROCESSING-1)
main::$4 = main::i#1 != rangelast(0,NUM_PROCESSING-1)
if(main::$4) goto main::@4
to:main::@5
main::@5: scope:[main] from main::@4
SCREEN_DIST#12 = phi( main::@4/SCREEN_DIST#14 )
SCREEN_COPY#18 = phi( main::@4/SCREEN_COPY#23 )
call initSprites
to:main::@11
main::@11: scope:[main] from main::@5
SCREEN_DIST#10 = phi( main::@5/SCREEN_DIST#12 )
SCREEN_COPY#14 = phi( main::@5/SCREEN_COPY#18 )
setupRasterIrq::raster#0 = RASTER_IRQ_TOP
setupRasterIrq::irqRoutine#0 = &irqTop
call setupRasterIrq
to:main::@12
main::@12: scope:[main] from main::@11
SCREEN_DIST#8 = phi( main::@11/SCREEN_DIST#10 )
SCREEN_COPY#11 = phi( main::@11/SCREEN_COPY#14 )
to:main::@6
main::@6: scope:[main] from main::@12 main::@14
SCREEN_DIST#6 = phi( main::@12/SCREEN_DIST#8, main::@14/SCREEN_DIST#9 )
SCREEN_COPY#7 = phi( main::@12/SCREEN_COPY#11, main::@14/SCREEN_COPY#12 )
call getCharToProcess
getCharToProcess::return_x#0 = getCharToProcess::return_x#2
getCharToProcess::return_y#0 = getCharToProcess::return_y#2
getCharToProcess::return_dist#0 = getCharToProcess::return_dist#2
to:main::@13
main::@13: scope:[main] from main::@6
SCREEN_DIST#13 = phi( main::@6/SCREEN_DIST#6 )
SCREEN_COPY#19 = phi( main::@6/SCREEN_COPY#7 )
getCharToProcess::return_dist#3 = phi( main::@6/getCharToProcess::return_dist#0 )
getCharToProcess::return_y#3 = phi( main::@6/getCharToProcess::return_y#0 )
getCharToProcess::return_x#3 = phi( main::@6/getCharToProcess::return_x#0 )
main::$5_x = getCharToProcess::return_x#3
main::$5_y = getCharToProcess::return_y#3
main::$5_dist = getCharToProcess::return_dist#3
main::center_x#0 = main::$5_x
main::center_y#0 = main::$5_y
main::center_dist#0 = main::$5_dist
main::$6 = main::center_dist#0 == NOT_FOUND
main::$7 = ! main::$6
if(main::$7) goto main::@7
to:main::@8
main::@7: scope:[main] from main::@13
SCREEN_DIST#11 = phi( main::@13/SCREEN_DIST#13 )
SCREEN_COPY#15 = phi( main::@13/SCREEN_COPY#19 )
main::center_dist#1 = phi( main::@13/main::center_dist#0 )
main::center_y#1 = phi( main::@13/main::center_y#0 )
main::center_x#1 = phi( main::@13/main::center_x#0 )
startProcessing::center_x#0 = main::center_x#1
startProcessing::center_y#0 = main::center_y#1
startProcessing::center_dist#0 = main::center_dist#1
call startProcessing
to:main::@14
main::@14: scope:[main] from main::@7
SCREEN_DIST#9 = phi( main::@7/SCREEN_DIST#11 )
SCREEN_COPY#12 = phi( main::@7/SCREEN_COPY#15 )
if(true) goto main::@6
to:main::@8
main::@8: scope:[main] from main::@13 main::@14
*(SCREEN+$3e7) = '.'
to:main::@9
main::@9: scope:[main] from main::@8 main::@9
*(COLS+$3e7) = ++ *(COLS+$3e7)
if(true) goto main::@9
to:main::@return
main::@return: scope:[main] from main::@9
return
to:@return
struct ProcessingChar getCharToProcess()
getCharToProcess: scope:[getCharToProcess] from main::@6
SCREEN_DIST#3 = phi( main::@6/SCREEN_DIST#6 )
SCREEN_COPY#3 = phi( main::@6/SCREEN_COPY#7 )
getCharToProcess::closest_x#0 = 0
getCharToProcess::closest_y#0 = 0
getCharToProcess::closest_dist#0 = NOT_FOUND
getCharToProcess::screen_line#0 = SCREEN_COPY#3
getCharToProcess::dist_line#0 = SCREEN_DIST#3
getCharToProcess::y#0 = 0
to:getCharToProcess::@2
getCharToProcess::@2: scope:[getCharToProcess] from getCharToProcess getCharToProcess::@7
SCREEN_COPY#24 = phi( getCharToProcess/SCREEN_COPY#3, getCharToProcess::@7/SCREEN_COPY#13 )
getCharToProcess::closest_y#9 = phi( getCharToProcess/getCharToProcess::closest_y#0, getCharToProcess::@7/getCharToProcess::closest_y#5 )
getCharToProcess::closest_x#9 = phi( getCharToProcess/getCharToProcess::closest_x#0, getCharToProcess::@7/getCharToProcess::closest_x#5 )
getCharToProcess::y#7 = phi( getCharToProcess/getCharToProcess::y#0, getCharToProcess::@7/getCharToProcess::y#1 )
getCharToProcess::closest_dist#8 = phi( getCharToProcess/getCharToProcess::closest_dist#0, getCharToProcess::@7/getCharToProcess::closest_dist#6 )
getCharToProcess::dist_line#6 = phi( getCharToProcess/getCharToProcess::dist_line#0, getCharToProcess::@7/getCharToProcess::dist_line#1 )
getCharToProcess::screen_line#4 = phi( getCharToProcess/getCharToProcess::screen_line#0, getCharToProcess::@7/getCharToProcess::screen_line#1 )
getCharToProcess::x#0 = 0
to:getCharToProcess::@3
getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess::@2 getCharToProcess::@4
SCREEN_COPY#20 = phi( getCharToProcess::@2/SCREEN_COPY#24, getCharToProcess::@4/SCREEN_COPY#16 )
getCharToProcess::closest_y#7 = phi( getCharToProcess::@2/getCharToProcess::closest_y#9, getCharToProcess::@4/getCharToProcess::closest_y#6 )
getCharToProcess::closest_x#7 = phi( getCharToProcess::@2/getCharToProcess::closest_x#9, getCharToProcess::@4/getCharToProcess::closest_x#6 )
getCharToProcess::y#6 = phi( getCharToProcess::@2/getCharToProcess::y#7, getCharToProcess::@4/getCharToProcess::y#5 )
getCharToProcess::closest_dist#5 = phi( getCharToProcess::@2/getCharToProcess::closest_dist#8, getCharToProcess::@4/getCharToProcess::closest_dist#9 )
getCharToProcess::dist_line#4 = phi( getCharToProcess::@2/getCharToProcess::dist_line#6, getCharToProcess::@4/getCharToProcess::dist_line#5 )
getCharToProcess::x#2 = phi( getCharToProcess::@2/getCharToProcess::x#0, getCharToProcess::@4/getCharToProcess::x#1 )
getCharToProcess::screen_line#2 = phi( getCharToProcess::@2/getCharToProcess::screen_line#4, getCharToProcess::@4/getCharToProcess::screen_line#5 )
getCharToProcess::$2 = getCharToProcess::screen_line#2[getCharToProcess::x#2] != ' '
getCharToProcess::$3 = ! getCharToProcess::$2
if(getCharToProcess::$3) goto getCharToProcess::@4
to:getCharToProcess::@5
getCharToProcess::@4: scope:[getCharToProcess] from getCharToProcess::@3 getCharToProcess::@5 getCharToProcess::@6
SCREEN_COPY#16 = phi( getCharToProcess::@3/SCREEN_COPY#20, getCharToProcess::@5/SCREEN_COPY#21, getCharToProcess::@6/SCREEN_COPY#22 )
getCharToProcess::closest_y#6 = phi( getCharToProcess::@3/getCharToProcess::closest_y#7, getCharToProcess::@5/getCharToProcess::closest_y#8, getCharToProcess::@6/getCharToProcess::closest_y#1 )
getCharToProcess::closest_x#6 = phi( getCharToProcess::@3/getCharToProcess::closest_x#7, getCharToProcess::@5/getCharToProcess::closest_x#8, getCharToProcess::@6/getCharToProcess::closest_x#1 )
getCharToProcess::closest_dist#9 = phi( getCharToProcess::@3/getCharToProcess::closest_dist#5, getCharToProcess::@5/getCharToProcess::closest_dist#2, getCharToProcess::@6/getCharToProcess::closest_dist#1 )
getCharToProcess::y#5 = phi( getCharToProcess::@3/getCharToProcess::y#6, getCharToProcess::@5/getCharToProcess::y#4, getCharToProcess::@6/getCharToProcess::y#2 )
getCharToProcess::dist_line#5 = phi( getCharToProcess::@3/getCharToProcess::dist_line#4, getCharToProcess::@5/getCharToProcess::dist_line#2, getCharToProcess::@6/getCharToProcess::dist_line#7 )
getCharToProcess::screen_line#5 = phi( getCharToProcess::@3/getCharToProcess::screen_line#2, getCharToProcess::@5/getCharToProcess::screen_line#6, getCharToProcess::@6/getCharToProcess::screen_line#7 )
getCharToProcess::x#3 = phi( getCharToProcess::@3/getCharToProcess::x#2, getCharToProcess::@5/getCharToProcess::x#4, getCharToProcess::@6/getCharToProcess::x#5 )
getCharToProcess::x#1 = getCharToProcess::x#3 + rangenext(0,$27)
getCharToProcess::$6 = getCharToProcess::x#1 != rangelast(0,$27)
if(getCharToProcess::$6) goto getCharToProcess::@3
to:getCharToProcess::@7
getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@3
SCREEN_COPY#21 = phi( getCharToProcess::@3/SCREEN_COPY#20 )
getCharToProcess::closest_y#8 = phi( getCharToProcess::@3/getCharToProcess::closest_y#7 )
getCharToProcess::closest_x#8 = phi( getCharToProcess::@3/getCharToProcess::closest_x#7 )
getCharToProcess::screen_line#6 = phi( getCharToProcess::@3/getCharToProcess::screen_line#2 )
getCharToProcess::y#4 = phi( getCharToProcess::@3/getCharToProcess::y#6 )
getCharToProcess::closest_dist#2 = phi( getCharToProcess::@3/getCharToProcess::closest_dist#5 )
getCharToProcess::x#4 = phi( getCharToProcess::@3/getCharToProcess::x#2 )
getCharToProcess::dist_line#2 = phi( getCharToProcess::@3/getCharToProcess::dist_line#4 )
getCharToProcess::dist#0 = getCharToProcess::dist_line#2[getCharToProcess::x#4]
getCharToProcess::$4 = getCharToProcess::dist#0 < getCharToProcess::closest_dist#2
getCharToProcess::$5 = ! getCharToProcess::$4
if(getCharToProcess::$5) goto getCharToProcess::@4
to:getCharToProcess::@6
getCharToProcess::@6: scope:[getCharToProcess] from getCharToProcess::@5
SCREEN_COPY#22 = phi( getCharToProcess::@5/SCREEN_COPY#21 )
getCharToProcess::dist_line#7 = phi( getCharToProcess::@5/getCharToProcess::dist_line#2 )
getCharToProcess::screen_line#7 = phi( getCharToProcess::@5/getCharToProcess::screen_line#6 )
getCharToProcess::dist#1 = phi( getCharToProcess::@5/getCharToProcess::dist#0 )
getCharToProcess::y#2 = phi( getCharToProcess::@5/getCharToProcess::y#4 )
getCharToProcess::x#5 = phi( getCharToProcess::@5/getCharToProcess::x#4 )
getCharToProcess::closest_x#1 = getCharToProcess::x#5
getCharToProcess::closest_y#1 = getCharToProcess::y#2
getCharToProcess::closest_dist#1 = getCharToProcess::dist#1
to:getCharToProcess::@4
getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@4
SCREEN_COPY#13 = phi( getCharToProcess::@4/SCREEN_COPY#16 )
getCharToProcess::closest_y#5 = phi( getCharToProcess::@4/getCharToProcess::closest_y#6 )
getCharToProcess::closest_x#5 = phi( getCharToProcess::@4/getCharToProcess::closest_x#6 )
getCharToProcess::closest_dist#6 = phi( getCharToProcess::@4/getCharToProcess::closest_dist#9 )
getCharToProcess::y#3 = phi( getCharToProcess::@4/getCharToProcess::y#5 )
getCharToProcess::dist_line#3 = phi( getCharToProcess::@4/getCharToProcess::dist_line#5 )
getCharToProcess::screen_line#3 = phi( getCharToProcess::@4/getCharToProcess::screen_line#5 )
getCharToProcess::screen_line#1 = getCharToProcess::screen_line#3 + $28
getCharToProcess::dist_line#1 = getCharToProcess::dist_line#3 + $28
getCharToProcess::y#1 = getCharToProcess::y#3 + rangenext(0,$18)
getCharToProcess::$7 = getCharToProcess::y#1 != rangelast(0,$18)
if(getCharToProcess::$7) goto getCharToProcess::@2
to:getCharToProcess::@8
getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7
SCREEN_COPY#8 = phi( getCharToProcess::@7/SCREEN_COPY#13 )
getCharToProcess::closest_y#4 = phi( getCharToProcess::@7/getCharToProcess::closest_y#5 )
getCharToProcess::closest_x#4 = phi( getCharToProcess::@7/getCharToProcess::closest_x#5 )
getCharToProcess::closest_dist#3 = phi( getCharToProcess::@7/getCharToProcess::closest_dist#6 )
getCharToProcess::$0 = getCharToProcess::closest_dist#3 != NOT_FOUND
getCharToProcess::$1 = ! getCharToProcess::$0
if(getCharToProcess::$1) goto getCharToProcess::@1
to:getCharToProcess::@9
getCharToProcess::@1: scope:[getCharToProcess] from getCharToProcess::@8 getCharToProcess::@9
getCharToProcess::closest_dist#4 = phi( getCharToProcess::@8/getCharToProcess::closest_dist#3, getCharToProcess::@9/getCharToProcess::closest_dist#7 )
getCharToProcess::closest_y#2 = phi( getCharToProcess::@8/getCharToProcess::closest_y#4, getCharToProcess::@9/getCharToProcess::closest_y#3 )
getCharToProcess::closest_x#2 = phi( getCharToProcess::@8/getCharToProcess::closest_x#4, getCharToProcess::@9/getCharToProcess::closest_x#3 )
getCharToProcess::return_x#1 = getCharToProcess::closest_x#2
getCharToProcess::return_y#1 = getCharToProcess::closest_y#2
getCharToProcess::return_dist#1 = getCharToProcess::closest_dist#4
getCharToProcess::return#0 = struct-unwound {getCharToProcess::return_x#1, getCharToProcess::return_y#1, getCharToProcess::return_dist#1}
to:getCharToProcess::@return
getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@8
getCharToProcess::closest_dist#7 = phi( getCharToProcess::@8/getCharToProcess::closest_dist#3 )
getCharToProcess::closest_x#3 = phi( getCharToProcess::@8/getCharToProcess::closest_x#4 )
SCREEN_COPY#4 = phi( getCharToProcess::@8/SCREEN_COPY#8 )
getCharToProcess::closest_y#3 = phi( getCharToProcess::@8/getCharToProcess::closest_y#4 )
getCharToProcess::$11 = (word)getCharToProcess::closest_y#3
getCharToProcess::$8 = getCharToProcess::$11 * $28
getCharToProcess::$9 = SCREEN_COPY#4 + getCharToProcess::$8
getCharToProcess::$10 = getCharToProcess::$9 + getCharToProcess::closest_x#3
*getCharToProcess::$10 = ' '
to:getCharToProcess::@1
getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@1
getCharToProcess::return_dist#4 = phi( getCharToProcess::@1/getCharToProcess::return_dist#1 )
getCharToProcess::return_y#4 = phi( getCharToProcess::@1/getCharToProcess::return_y#1 )
getCharToProcess::return_x#4 = phi( getCharToProcess::@1/getCharToProcess::return_x#1 )
getCharToProcess::return_x#2 = getCharToProcess::return_x#4
getCharToProcess::return_y#2 = getCharToProcess::return_y#4
getCharToProcess::return_dist#2 = getCharToProcess::return_dist#4
getCharToProcess::return#1 = struct-unwound {getCharToProcess::return_x#2, getCharToProcess::return_y#2, getCharToProcess::return_dist#2}
return
to:@return
void startProcessing(byte startProcessing::center_x , byte startProcessing::center_y , byte startProcessing::center_dist)
startProcessing: scope:[startProcessing] from main::@7
startProcessing::center_x#9 = phi( main::@7/startProcessing::center_x#0 )
startProcessing::center_y#9 = phi( main::@7/startProcessing::center_y#0 )
startProcessing::freeIdx#0 = $ff
to:startProcessing::@1
startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@4
startProcessing::center_x#8 = phi( startProcessing/startProcessing::center_x#9, startProcessing::@4/startProcessing::center_x#3 )
startProcessing::center_y#8 = phi( startProcessing/startProcessing::center_y#9, startProcessing::@4/startProcessing::center_y#3 )
startProcessing::freeIdx#6 = phi( startProcessing/startProcessing::freeIdx#0, startProcessing::@4/startProcessing::freeIdx#2 )
startProcessing::i#0 = 0
to:startProcessing::@2
startProcessing::@2: scope:[startProcessing] from startProcessing::@1 startProcessing::@3
startProcessing::center_x#7 = phi( startProcessing::@1/startProcessing::center_x#8, startProcessing::@3/startProcessing::center_x#5 )
startProcessing::center_y#7 = phi( startProcessing::@1/startProcessing::center_y#8, startProcessing::@3/startProcessing::center_y#5 )
startProcessing::freeIdx#5 = phi( startProcessing::@1/startProcessing::freeIdx#6, startProcessing::@3/startProcessing::freeIdx#4 )
startProcessing::i#2 = phi( startProcessing::@1/startProcessing::i#0, startProcessing::@3/startProcessing::i#1 )
startProcessing::$21 = startProcessing::i#2 * SIZEOF_STRUCT_PROCESSINGSPRITE
startProcessing::$16 = ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$21] == STATUS_FREE
startProcessing::$17 = ! startProcessing::$16
if(startProcessing::$17) goto startProcessing::@3
to:startProcessing::@5
startProcessing::@3: scope:[startProcessing] from startProcessing::@2
startProcessing::center_x#5 = phi( startProcessing::@2/startProcessing::center_x#7 )
startProcessing::center_y#5 = phi( startProcessing::@2/startProcessing::center_y#7 )
startProcessing::freeIdx#4 = phi( startProcessing::@2/startProcessing::freeIdx#5 )
startProcessing::i#3 = phi( startProcessing::@2/startProcessing::i#2 )
startProcessing::i#1 = startProcessing::i#3 + rangenext(0,NUM_PROCESSING-1)
startProcessing::$18 = startProcessing::i#1 != rangelast(0,NUM_PROCESSING-1)
if(startProcessing::$18) goto startProcessing::@2
to:startProcessing::@4
startProcessing::@5: scope:[startProcessing] from startProcessing::@2
startProcessing::center_x#6 = phi( startProcessing::@2/startProcessing::center_x#7 )
startProcessing::center_y#6 = phi( startProcessing::@2/startProcessing::center_y#7 )
startProcessing::i#4 = phi( startProcessing::@2/startProcessing::i#2 )
startProcessing::freeIdx#1 = startProcessing::i#4
to:startProcessing::@4
startProcessing::@4: scope:[startProcessing] from startProcessing::@3 startProcessing::@5
startProcessing::center_x#3 = phi( startProcessing::@3/startProcessing::center_x#5, startProcessing::@5/startProcessing::center_x#6 )
startProcessing::center_y#3 = phi( startProcessing::@3/startProcessing::center_y#5, startProcessing::@5/startProcessing::center_y#6 )
startProcessing::freeIdx#2 = phi( startProcessing::@3/startProcessing::freeIdx#4, startProcessing::@5/startProcessing::freeIdx#1 )
startProcessing::$19 = startProcessing::freeIdx#2 == $ff
if(startProcessing::$19) goto startProcessing::@1
to:startProcessing::@6
startProcessing::@6: scope:[startProcessing] from startProcessing::@4
startProcessing::center_x#1 = phi( startProcessing::@4/startProcessing::center_x#3 )
startProcessing::center_y#1 = phi( startProcessing::@4/startProcessing::center_y#3 )
startProcessing::freeIdx#3 = phi( startProcessing::@4/startProcessing::freeIdx#2 )
startProcessing::spriteIdx#0 = startProcessing::freeIdx#3
startProcessing::$23 = (word)startProcessing::center_y#1
startProcessing::$0 = startProcessing::$23 * $28
startProcessing::$1 = startProcessing::$0 + startProcessing::center_x#1
startProcessing::offset#0 = startProcessing::$1
startProcessing::$2 = COLS + startProcessing::offset#0
startProcessing::colPtr#0 = startProcessing::$2
startProcessing::spriteCol#0 = *startProcessing::colPtr#0
startProcessing::$3 = SCREEN + startProcessing::offset#0
startProcessing::screenPtr#0 = startProcessing::$3
startProcessing::$24 = (word)startProcessing::spriteIdx#0
startProcessing::$4 = startProcessing::$24 * $40
startProcessing::$5 = SPRITE_DATA + startProcessing::$4
startProcessing::spriteData#0 = startProcessing::$5
startProcessing::ch#0 = *startProcessing::screenPtr#0
startProcessing::$25 = (word)startProcessing::ch#0
startProcessing::$6 = startProcessing::$25 * 8
startProcessing::$7 = CHARGEN + startProcessing::$6
startProcessing::chargenData#0 = startProcessing::$7
asm { sei }
*PROCPORT = PROCPORT_RAM_CHARROM
startProcessing::i1#0 = 0
to:startProcessing::@7
startProcessing::@7: scope:[startProcessing] from startProcessing::@6 startProcessing::@7
startProcessing::screenPtr#2 = phi( startProcessing::@6/startProcessing::screenPtr#0, startProcessing::@7/startProcessing::screenPtr#2 )
startProcessing::spriteCol#2 = phi( startProcessing::@6/startProcessing::spriteCol#0, startProcessing::@7/startProcessing::spriteCol#2 )
startProcessing::spriteIdx#2 = phi( startProcessing::@6/startProcessing::spriteIdx#0, startProcessing::@7/startProcessing::spriteIdx#2 )
startProcessing::center_y#4 = phi( startProcessing::@6/startProcessing::center_y#1, startProcessing::@7/startProcessing::center_y#4 )
startProcessing::center_x#4 = phi( startProcessing::@6/startProcessing::center_x#1, startProcessing::@7/startProcessing::center_x#4 )
startProcessing::i1#2 = phi( startProcessing::@6/startProcessing::i1#0, startProcessing::@7/startProcessing::i1#1 )
startProcessing::spriteData#2 = phi( startProcessing::@6/startProcessing::spriteData#0, startProcessing::@7/startProcessing::spriteData#1 )
startProcessing::chargenData#2 = phi( startProcessing::@6/startProcessing::chargenData#0, startProcessing::@7/startProcessing::chargenData#1 )
*startProcessing::spriteData#2 = *startProcessing::chargenData#2
startProcessing::spriteData#1 = startProcessing::spriteData#2 + 3
startProcessing::chargenData#1 = ++ startProcessing::chargenData#2
startProcessing::i1#1 = startProcessing::i1#2 + rangenext(0,7)
startProcessing::$20 = startProcessing::i1#1 != rangelast(0,7)
if(startProcessing::$20) goto startProcessing::@7
to:startProcessing::@8
startProcessing::@8: scope:[startProcessing] from startProcessing::@7
startProcessing::screenPtr#1 = phi( startProcessing::@7/startProcessing::screenPtr#2 )
startProcessing::spriteCol#1 = phi( startProcessing::@7/startProcessing::spriteCol#2 )
startProcessing::spriteIdx#1 = phi( startProcessing::@7/startProcessing::spriteIdx#2 )
startProcessing::center_y#2 = phi( startProcessing::@7/startProcessing::center_y#4 )
startProcessing::center_x#2 = phi( startProcessing::@7/startProcessing::center_x#4 )
*PROCPORT = PROCPORT_RAM_IO
asm { cli }
startProcessing::$26 = (word)startProcessing::center_x#2
startProcessing::$8 = startProcessing::$26 * 8
startProcessing::$9 = BORDER_XPOS_LEFT + startProcessing::$8
startProcessing::$10 = startProcessing::$9 << 4
startProcessing::spriteX#0 = startProcessing::$10
startProcessing::$27 = (word)startProcessing::center_y#2
startProcessing::$11 = startProcessing::$27 * 8
startProcessing::$12 = BORDER_YPOS_TOP + startProcessing::$11
startProcessing::$13 = startProcessing::$12 << 4
startProcessing::spriteY#0 = startProcessing::$13
startProcessing::$14 = (byte)SPRITE_DATA/$40 + startProcessing::spriteIdx#1
startProcessing::spritePtr#0 = startProcessing::$14
startProcessing::$15 = startProcessing::spriteIdx#1 * 8
startProcessing::$22 = startProcessing::spriteIdx#1 * SIZEOF_STRUCT_PROCESSINGSPRITE
((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_X)[startProcessing::$22] = startProcessing::spriteX#0
((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y)[startProcessing::$22] = startProcessing::spriteY#0
((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX)[startProcessing::$22] = (word)startProcessing::$15
((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY)[startProcessing::$22] = $3c
((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID)[startProcessing::$22] = startProcessing::spriteIdx#1
((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR)[startProcessing::$22] = startProcessing::spritePtr#0
((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL)[startProcessing::$22] = startProcessing::spriteCol#1
((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$22] = STATUS_NEW
((byte**)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)[startProcessing::$22] = startProcessing::screenPtr#1
to:startProcessing::@return
startProcessing::@return: scope:[startProcessing] from startProcessing::@8
return
to:@return
void processChars()
processChars: scope:[processChars] from irqBottom::@1
processChars::numActive#0 = 0
processChars::i#0 = 0
to:processChars::@1
processChars::@1: scope:[processChars] from processChars processChars::@2
processChars::numActive#9 = phi( processChars/processChars::numActive#0, processChars::@2/processChars::numActive#8 )
processChars::i#2 = phi( processChars/processChars::i#0, processChars::@2/processChars::i#1 )
processChars::$28 = processChars::i#2 * SIZEOF_STRUCT_PROCESSINGSPRITE
processChars::$1 = PROCESSING + processChars::$28
processChars::processing#0 = processChars::$1
processChars::$57 = (byte*)processChars::processing#0
processChars::$31 = processChars::$57 + OFFSET_STRUCT_PROCESSINGSPRITE_ID
processChars::$2 = 1 << *processChars::$31
processChars::bitmask#0 = processChars::$2
processChars::$58 = (byte*)processChars::processing#0
processChars::$32 = processChars::$58 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
processChars::$3 = *processChars::$32 != STATUS_FREE
processChars::$4 = ! processChars::$3
if(processChars::$4) goto processChars::@2
to:processChars::@10
processChars::@2: scope:[processChars] from processChars::@1 processChars::@7
processChars::numActive#8 = phi( processChars::@1/processChars::numActive#9, processChars::@7/processChars::numActive#1 )
processChars::i#3 = phi( processChars::@1/processChars::i#2, processChars::@7/processChars::i#5 )
processChars::i#1 = processChars::i#3 + rangenext(0,NUM_PROCESSING-1)
processChars::$26 = processChars::i#1 != rangelast(0,NUM_PROCESSING-1)
if(processChars::$26) goto processChars::@1
to:processChars::@12
processChars::@10: scope:[processChars] from processChars::@1
processChars::numActive#13 = phi( processChars::@1/processChars::numActive#9 )
processChars::i#11 = phi( processChars::@1/processChars::i#2 )
processChars::bitmask#5 = phi( processChars::@1/processChars::bitmask#0 )
processChars::processing#1 = phi( processChars::@1/processChars::processing#0 )
processChars::$59 = (byte*)processChars::processing#1
processChars::$33 = processChars::$59 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
processChars::$5 = *processChars::$33 == STATUS_NEW
processChars::$6 = ! processChars::$5
if(processChars::$6) goto processChars::@3
to:processChars::@11
processChars::@3: scope:[processChars] from processChars::@10 processChars::@11
processChars::numActive#12 = phi( processChars::@10/processChars::numActive#13, processChars::@11/processChars::numActive#14 )
processChars::i#8 = phi( processChars::@10/processChars::i#11, processChars::@11/processChars::i#12 )
processChars::bitmask#6 = phi( processChars::@10/processChars::bitmask#5, processChars::@11/processChars::bitmask#1 )
processChars::processing#2 = phi( processChars::@10/processChars::processing#1, processChars::@11/processChars::processing#3 )
processChars::$60 = (word*)processChars::processing#2
processChars::$34 = processChars::$60 + OFFSET_STRUCT_PROCESSINGSPRITE_X
processChars::$8 = *processChars::$34 >> 4
processChars::xpos#0 = processChars::$8
processChars::$9 = > processChars::xpos#0
processChars::$85 = 0 != processChars::$9
if(processChars::$85) goto processChars::@4
to:processChars::@8
processChars::@11: scope:[processChars] from processChars::@10
processChars::numActive#14 = phi( processChars::@10/processChars::numActive#13 )
processChars::i#12 = phi( processChars::@10/processChars::i#11 )
processChars::bitmask#1 = phi( processChars::@10/processChars::bitmask#5 )
processChars::processing#3 = phi( processChars::@10/processChars::processing#1 )
processChars::$61 = (byte**)processChars::processing#3
processChars::$35 = processChars::$61 + OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
*(*processChars::$35) = ' '
*SPRITES_ENABLE = *SPRITES_ENABLE | processChars::bitmask#1
processChars::$62 = (byte*)processChars::processing#3
processChars::$36 = processChars::$62 + OFFSET_STRUCT_PROCESSINGSPRITE_COL
processChars::$63 = (byte*)processChars::processing#3
processChars::$37 = processChars::$63 + OFFSET_STRUCT_PROCESSINGSPRITE_ID
SPRITES_COLOR[*processChars::$37] = *processChars::$36
processChars::$64 = (byte*)processChars::processing#3
processChars::$38 = processChars::$64 + OFFSET_STRUCT_PROCESSINGSPRITE_ID
processChars::$7 = SCREEN+OFFSET_SPRITE_PTRS + *processChars::$38
processChars::$65 = (byte*)processChars::processing#3
processChars::$39 = processChars::$65 + OFFSET_STRUCT_PROCESSINGSPRITE_PTR
*processChars::$7 = *processChars::$39
processChars::$66 = (byte*)processChars::processing#3
processChars::$40 = processChars::$66 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
*processChars::$40 = STATUS_PROCESSING
to:processChars::@3
processChars::@4: scope:[processChars] from processChars::@3
processChars::numActive#10 = phi( processChars::@3/processChars::numActive#12 )
processChars::processing#7 = phi( processChars::@3/processChars::processing#2 )
processChars::xpos#3 = phi( processChars::@3/processChars::xpos#0 )
processChars::i#6 = phi( processChars::@3/processChars::i#8 )
processChars::bitmask#2 = phi( processChars::@3/processChars::bitmask#6 )
*SPRITES_XMSB = *SPRITES_XMSB | processChars::bitmask#2
to:processChars::@5
processChars::@8: scope:[processChars] from processChars::@3
processChars::numActive#11 = phi( processChars::@3/processChars::numActive#12 )
processChars::processing#8 = phi( processChars::@3/processChars::processing#2 )
processChars::xpos#4 = phi( processChars::@3/processChars::xpos#0 )
processChars::i#7 = phi( processChars::@3/processChars::i#8 )
processChars::bitmask#3 = phi( processChars::@3/processChars::bitmask#6 )
processChars::$10 = $ff ^ processChars::bitmask#3
*SPRITES_XMSB = *SPRITES_XMSB & processChars::$10
to:processChars::@5
processChars::@5: scope:[processChars] from processChars::@4 processChars::@8
processChars::numActive#7 = phi( processChars::@4/processChars::numActive#10, processChars::@8/processChars::numActive#11 )
processChars::bitmask#7 = phi( processChars::@4/processChars::bitmask#2, processChars::@8/processChars::bitmask#3 )
processChars::processing#4 = phi( processChars::@4/processChars::processing#7, processChars::@8/processChars::processing#8 )
processChars::xpos#1 = phi( processChars::@4/processChars::xpos#3, processChars::@8/processChars::xpos#4 )
processChars::i#4 = phi( processChars::@4/processChars::i#6, processChars::@8/processChars::i#7 )
processChars::$11 = processChars::i#4 * 2
SPRITES_XPOS[processChars::$11] = (byte)processChars::xpos#1
processChars::$67 = (word*)processChars::processing#4
processChars::$41 = processChars::$67 + OFFSET_STRUCT_PROCESSINGSPRITE_Y
processChars::$12 = *processChars::$41 >> 4
processChars::ypos#0 = (byte)processChars::$12
processChars::$13 = processChars::i#4 * 2
SPRITES_YPOS[processChars::$13] = processChars::ypos#0
processChars::$68 = (word*)processChars::processing#4
processChars::$42 = processChars::$68 + OFFSET_STRUCT_PROCESSINGSPRITE_X
processChars::$14 = *processChars::$42 < XPOS_LEFTMOST
processChars::$69 = (word*)processChars::processing#4
processChars::$43 = processChars::$69 + OFFSET_STRUCT_PROCESSINGSPRITE_X
processChars::$15 = *processChars::$43 > XPOS_RIGHTMOST
processChars::$16 = processChars::$14 || processChars::$15
processChars::$70 = (word*)processChars::processing#4
processChars::$44 = processChars::$70 + OFFSET_STRUCT_PROCESSINGSPRITE_Y
processChars::$17 = *processChars::$44 < YPOS_TOPMOST
processChars::$18 = processChars::$16 || processChars::$17
processChars::$71 = (word*)processChars::processing#4
processChars::$45 = processChars::$71 + OFFSET_STRUCT_PROCESSINGSPRITE_Y
processChars::$19 = *processChars::$45 > YPOS_BOTTOMMOST
processChars::$20 = processChars::$18 || processChars::$19
if(processChars::$20) goto processChars::@6
to:processChars::@9
processChars::@6: scope:[processChars] from processChars::@5
processChars::i#9 = phi( processChars::@5/processChars::i#4 )
processChars::numActive#4 = phi( processChars::@5/processChars::numActive#7 )
processChars::bitmask#4 = phi( processChars::@5/processChars::bitmask#7 )
processChars::processing#5 = phi( processChars::@5/processChars::processing#4 )
processChars::$72 = (byte*)processChars::processing#5
processChars::$46 = processChars::$72 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
*processChars::$46 = STATUS_FREE
processChars::$25 = $ff ^ processChars::bitmask#4
*SPRITES_ENABLE = *SPRITES_ENABLE & processChars::$25
to:processChars::@7
processChars::@9: scope:[processChars] from processChars::@5
processChars::i#10 = phi( processChars::@5/processChars::i#4 )
processChars::numActive#5 = phi( processChars::@5/processChars::numActive#7 )
processChars::ypos#1 = phi( processChars::@5/processChars::ypos#0 )
processChars::processing#6 = phi( processChars::@5/processChars::processing#4 )
processChars::xpos#2 = phi( processChars::@5/processChars::xpos#1 )
processChars::$21 = processChars::xpos#2 / 8
processChars::$73 = (byte)processChars::$21
processChars::$22 = processChars::$73 - BORDER_XPOS_LEFT/8
processChars::xchar#0 = processChars::$22
processChars::$29 = processChars::xchar#0 * SIZEOF_WORD
processChars::$74 = (word*)processChars::processing#6
processChars::$47 = processChars::$74 + OFFSET_STRUCT_PROCESSINGSPRITE_VX
processChars::$75 = (word*)processChars::processing#6
processChars::$48 = processChars::$75 + OFFSET_STRUCT_PROCESSINGSPRITE_VX
*processChars::$48 = *processChars::$47 + VXSIN[processChars::$29]
processChars::$76 = (word*)processChars::processing#6
processChars::$49 = processChars::$76 + OFFSET_STRUCT_PROCESSINGSPRITE_X
processChars::$77 = (word*)processChars::processing#6
processChars::$50 = processChars::$77 + OFFSET_STRUCT_PROCESSINGSPRITE_VX
processChars::$78 = (word*)processChars::processing#6
processChars::$51 = processChars::$78 + OFFSET_STRUCT_PROCESSINGSPRITE_X
*processChars::$51 = *processChars::$49 + *processChars::$50
processChars::$23 = processChars::ypos#1 / 8
processChars::$79 = (byte)processChars::$23
processChars::$24 = processChars::$79 - BORDER_YPOS_TOP/8
processChars::ychar#0 = processChars::$24
processChars::$30 = processChars::ychar#0 * SIZEOF_WORD
processChars::$80 = (word*)processChars::processing#6
processChars::$52 = processChars::$80 + OFFSET_STRUCT_PROCESSINGSPRITE_VY
processChars::$81 = (word*)processChars::processing#6
processChars::$53 = processChars::$81 + OFFSET_STRUCT_PROCESSINGSPRITE_VY
*processChars::$53 = *processChars::$52 + VYSIN[processChars::$30]
processChars::$82 = (word*)processChars::processing#6
processChars::$54 = processChars::$82 + OFFSET_STRUCT_PROCESSINGSPRITE_Y
processChars::$83 = (word*)processChars::processing#6
processChars::$55 = processChars::$83 + OFFSET_STRUCT_PROCESSINGSPRITE_VY
processChars::$84 = (word*)processChars::processing#6
processChars::$56 = processChars::$84 + OFFSET_STRUCT_PROCESSINGSPRITE_Y
*processChars::$56 = *processChars::$54 + *processChars::$55
to:processChars::@7
processChars::@7: scope:[processChars] from processChars::@6 processChars::@9
processChars::i#5 = phi( processChars::@6/processChars::i#9, processChars::@9/processChars::i#10 )
processChars::numActive#2 = phi( processChars::@6/processChars::numActive#4, processChars::@9/processChars::numActive#5 )
processChars::numActive#1 = ++ processChars::numActive#2
to:processChars::@2
processChars::@12: scope:[processChars] from processChars::@2
processChars::numActive#6 = phi( processChars::@2/processChars::numActive#8 )
processChars::$0 = ! DEBUG
if(processChars::$0) goto processChars::@return
to:processChars::@13
processChars::@13: scope:[processChars] from processChars::@12
processChars::numActive#3 = phi( processChars::@12/processChars::numActive#6 )
processChars::$27 = '0' + processChars::numActive#3
*(SCREEN+$3e7) = processChars::$27
to:processChars::@return
processChars::@return: scope:[processChars] from processChars::@12 processChars::@13
return
to:@return
void init_angle_screen(byte* init_angle_screen::screen)
init_angle_screen: scope:[init_angle_screen] from main
init_angle_screen::screen#1 = phi( main/init_angle_screen::screen#0 )
init_angle_screen::$0 = init_angle_screen::screen#1 + $28*$c
init_angle_screen::screen_topline#0 = init_angle_screen::$0
init_angle_screen::$1 = init_angle_screen::screen#1 + $28*$c
init_angle_screen::screen_bottomline#0 = init_angle_screen::$1
init_angle_screen::y#0 = 0
to:init_angle_screen::@1
init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4
init_angle_screen::screen_bottomline#6 = phi( init_angle_screen/init_angle_screen::screen_bottomline#0, init_angle_screen::@4/init_angle_screen::screen_bottomline#1 )
init_angle_screen::screen_topline#6 = phi( init_angle_screen/init_angle_screen::screen_topline#0, init_angle_screen::@4/init_angle_screen::screen_topline#1 )
init_angle_screen::y#5 = phi( init_angle_screen/init_angle_screen::y#0, init_angle_screen::@4/init_angle_screen::y#1 )
init_angle_screen::x#0 = 0
init_angle_screen::xb#0 = $27
to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5
init_angle_screen::xb#4 = phi( init_angle_screen::@1/init_angle_screen::xb#0, init_angle_screen::@5/init_angle_screen::xb#1 )
init_angle_screen::screen_bottomline#5 = phi( init_angle_screen::@1/init_angle_screen::screen_bottomline#6, init_angle_screen::@5/init_angle_screen::screen_bottomline#2 )
init_angle_screen::screen_topline#5 = phi( init_angle_screen::@1/init_angle_screen::screen_topline#6, init_angle_screen::@5/init_angle_screen::screen_topline#2 )
init_angle_screen::y#4 = phi( init_angle_screen::@1/init_angle_screen::y#5, init_angle_screen::@5/init_angle_screen::y#6 )
init_angle_screen::x#2 = phi( init_angle_screen::@1/init_angle_screen::x#0, init_angle_screen::@5/init_angle_screen::x#1 )
init_angle_screen::$2 = init_angle_screen::x#2 <= $13
if(init_angle_screen::$2) goto init_angle_screen::@3
to:init_angle_screen::@4
init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2
init_angle_screen::screen_topline#4 = phi( init_angle_screen::@2/init_angle_screen::screen_topline#5 )
init_angle_screen::xb#3 = phi( init_angle_screen::@2/init_angle_screen::xb#4 )
init_angle_screen::screen_bottomline#4 = phi( init_angle_screen::@2/init_angle_screen::screen_bottomline#5 )
init_angle_screen::y#2 = phi( init_angle_screen::@2/init_angle_screen::y#4 )
init_angle_screen::x#3 = phi( init_angle_screen::@2/init_angle_screen::x#2 )
init_angle_screen::$3 = init_angle_screen::x#3 * 2
init_angle_screen::$4 = $27 - init_angle_screen::$3
init_angle_screen::xw#0 = (signed word)(word){ init_angle_screen::$4, 0 }
init_angle_screen::$5 = init_angle_screen::y#2 * 2
init_angle_screen::yw#0 = (signed word)(word){ init_angle_screen::$5, 0 }
atan2_16::x#0 = init_angle_screen::xw#0
atan2_16::y#0 = init_angle_screen::yw#0
call atan2_16
atan2_16::return#2 = atan2_16::return#1
to:init_angle_screen::@5
init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3
init_angle_screen::y#6 = phi( init_angle_screen::@3/init_angle_screen::y#2 )
init_angle_screen::x#4 = phi( init_angle_screen::@3/init_angle_screen::x#3 )
init_angle_screen::screen_topline#2 = phi( init_angle_screen::@3/init_angle_screen::screen_topline#4 )
init_angle_screen::xb#2 = phi( init_angle_screen::@3/init_angle_screen::xb#3 )
init_angle_screen::screen_bottomline#2 = phi( init_angle_screen::@3/init_angle_screen::screen_bottomline#4 )
atan2_16::return#4 = phi( init_angle_screen::@3/atan2_16::return#2 )
init_angle_screen::$6 = atan2_16::return#4
init_angle_screen::angle_w#0 = init_angle_screen::$6
init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80
init_angle_screen::$8 = > init_angle_screen::$7
init_angle_screen::ang_w#0 = init_angle_screen::$8
init_angle_screen::screen_bottomline#2[init_angle_screen::xb#2] = init_angle_screen::ang_w#0
init_angle_screen::$9 = - init_angle_screen::ang_w#0
init_angle_screen::screen_topline#2[init_angle_screen::xb#2] = init_angle_screen::$9
init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0
init_angle_screen::screen_topline#2[init_angle_screen::x#4] = init_angle_screen::$10
init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0
init_angle_screen::screen_bottomline#2[init_angle_screen::x#4] = init_angle_screen::$11
init_angle_screen::x#1 = ++ init_angle_screen::x#4
init_angle_screen::xb#1 = -- init_angle_screen::xb#2
to:init_angle_screen::@2
init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2
init_angle_screen::y#3 = phi( init_angle_screen::@2/init_angle_screen::y#4 )
init_angle_screen::screen_bottomline#3 = phi( init_angle_screen::@2/init_angle_screen::screen_bottomline#5 )
init_angle_screen::screen_topline#3 = phi( init_angle_screen::@2/init_angle_screen::screen_topline#5 )
init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#3 - $28
init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#3 + $28
init_angle_screen::y#1 = init_angle_screen::y#3 + rangenext(0,$c)
init_angle_screen::$12 = init_angle_screen::y#1 != rangelast(0,$c)
if(init_angle_screen::$12) goto init_angle_screen::@1
to:init_angle_screen::@return
init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4
return
to:@return
void initSprites()
initSprites: scope:[initSprites] from main::@5
initSprites::sp#0 = SPRITE_DATA
to:initSprites::@1
initSprites::@1: scope:[initSprites] from initSprites initSprites::@2
initSprites::sp#2 = phi( initSprites/initSprites::sp#0, initSprites::@2/initSprites::sp#1 )
initSprites::$0 = initSprites::sp#2 < SPRITE_DATA+NUM_PROCESSING*$40
if(initSprites::$0) goto initSprites::@2
to:initSprites::@3
initSprites::@2: scope:[initSprites] from initSprites::@1
initSprites::sp#3 = phi( initSprites::@1/initSprites::sp#2 )
*initSprites::sp#3 = 0
initSprites::sp#1 = ++ initSprites::sp#3
to:initSprites::@1
initSprites::@3: scope:[initSprites] from initSprites::@1
initSprites::i#0 = 0
to:initSprites::@4
initSprites::@4: scope:[initSprites] from initSprites::@3 initSprites::@4
initSprites::i#2 = phi( initSprites::@3/initSprites::i#0, initSprites::@4/initSprites::i#1 )
SPRITES_COLOR[initSprites::i#2] = LIGHT_BLUE
initSprites::i#1 = initSprites::i#2 + rangenext(0,7)
initSprites::$1 = initSprites::i#1 != rangelast(0,7)
if(initSprites::$1) goto initSprites::@4
to:initSprites::@5
initSprites::@5: scope:[initSprites] from initSprites::@4
*SPRITES_MC = 0
*SPRITES_EXPAND_X = 0
*SPRITES_EXPAND_Y = 0
to:initSprites::@return
initSprites::@return: scope:[initSprites] from initSprites::@5
return
to:@return
void setupRasterIrq(word setupRasterIrq::raster , void()* setupRasterIrq::irqRoutine)
setupRasterIrq: scope:[setupRasterIrq] from main::@11
setupRasterIrq::irqRoutine#4 = phi( main::@11/setupRasterIrq::irqRoutine#0 )
setupRasterIrq::raster#1 = phi( main::@11/setupRasterIrq::raster#0 )
asm { sei }
*PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
*PROCPORT = PROCPORT_RAM_IO
*((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR
setupRasterIrq::$0 = setupRasterIrq::raster#1 < $100
if(setupRasterIrq::$0) goto setupRasterIrq::@1
to:setupRasterIrq::@3
setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq
setupRasterIrq::irqRoutine#2 = phi( setupRasterIrq/setupRasterIrq::irqRoutine#4 )
setupRasterIrq::raster#3 = phi( setupRasterIrq/setupRasterIrq::raster#1 )
*VICII_CONTROL = *VICII_CONTROL & $7f
to:setupRasterIrq::@2
setupRasterIrq::@3: scope:[setupRasterIrq] from setupRasterIrq
setupRasterIrq::irqRoutine#3 = phi( setupRasterIrq/setupRasterIrq::irqRoutine#4 )
setupRasterIrq::raster#4 = phi( setupRasterIrq/setupRasterIrq::raster#1 )
*VICII_CONTROL = *VICII_CONTROL | $80
to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1 setupRasterIrq::@3
setupRasterIrq::irqRoutine#1 = phi( setupRasterIrq::@1/setupRasterIrq::irqRoutine#2, setupRasterIrq::@3/setupRasterIrq::irqRoutine#3 )
setupRasterIrq::raster#2 = phi( setupRasterIrq::@1/setupRasterIrq::raster#3, setupRasterIrq::@3/setupRasterIrq::raster#4 )
setupRasterIrq::$1 = < setupRasterIrq::raster#2
*RASTER = setupRasterIrq::$1
*IRQ_ENABLE = IRQ_RASTER
*HARDWARE_IRQ = setupRasterIrq::irqRoutine#1
asm { cli }
to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2
return
to:@return
__interrupt(hardware_clobber) void irqTop()
irqTop: scope:[irqTop] from
irqTop::$0 = ! DEBUG
if(irqTop::$0) goto irqTop::@1
to:irqTop::@2
irqTop::@1: scope:[irqTop] from irqTop irqTop::@6
*RASTER = RASTER_IRQ_MIDDLE
*HARDWARE_IRQ = &irqBottom
*IRQ_STATUS = IRQ_RASTER
to:irqTop::@return
irqTop::@2: scope:[irqTop] from irqTop
irqTop::i#0 = 0
to:irqTop::@3
irqTop::@3: scope:[irqTop] from irqTop::@2 irqTop::@3
irqTop::i#2 = phi( irqTop::@2/irqTop::i#0, irqTop::@3/irqTop::i#1 )
irqTop::i#1 = irqTop::i#2 + rangenext(0,4)
irqTop::$1 = irqTop::i#1 != rangelast(0,4)
if(irqTop::$1) goto irqTop::@3
to:irqTop::@4
irqTop::@4: scope:[irqTop] from irqTop::@3
*BORDER_COLOR = WHITE
*BG_COLOR = WHITE
irqTop::i1#0 = 0
to:irqTop::@5
irqTop::@5: scope:[irqTop] from irqTop::@4 irqTop::@5
irqTop::i1#2 = phi( irqTop::@4/irqTop::i1#0, irqTop::@5/irqTop::i1#1 )
irqTop::i1#1 = irqTop::i1#2 + rangenext(0,7)
irqTop::$2 = irqTop::i1#1 != rangelast(0,7)
if(irqTop::$2) goto irqTop::@5
to:irqTop::@6
irqTop::@6: scope:[irqTop] from irqTop::@5
*BORDER_COLOR = LIGHT_BLUE
*BG_COLOR = BLUE
to:irqTop::@1
irqTop::@return: scope:[irqTop] from irqTop::@1
return
to:@return
__interrupt(hardware_clobber) void irqBottom()
irqBottom: scope:[irqBottom] from
irqBottom::$0 = ! DEBUG
if(irqBottom::$0) goto irqBottom::@1
to:irqBottom::@3
irqBottom::@1: scope:[irqBottom] from irqBottom irqBottom::@6
call processChars
to:irqBottom::@7
irqBottom::@7: scope:[irqBottom] from irqBottom::@1
irqBottom::$2 = ! DEBUG
if(irqBottom::$2) goto irqBottom::@2
to:irqBottom::@4
irqBottom::@3: scope:[irqBottom] from irqBottom
irqBottom::i#0 = 0
to:irqBottom::@5
irqBottom::@5: scope:[irqBottom] from irqBottom::@3 irqBottom::@5
irqBottom::i#2 = phi( irqBottom::@3/irqBottom::i#0, irqBottom::@5/irqBottom::i#1 )
irqBottom::i#1 = irqBottom::i#2 + rangenext(0,4)
irqBottom::$3 = irqBottom::i#1 != rangelast(0,4)
if(irqBottom::$3) goto irqBottom::@5
to:irqBottom::@6
irqBottom::@6: scope:[irqBottom] from irqBottom::@5
*BORDER_COLOR = WHITE
*BG_COLOR = WHITE
to:irqBottom::@1
irqBottom::@2: scope:[irqBottom] from irqBottom::@4 irqBottom::@7
*RASTER = RASTER_IRQ_TOP
*HARDWARE_IRQ = &irqTop
*IRQ_STATUS = IRQ_RASTER
to:irqBottom::@return
irqBottom::@4: scope:[irqBottom] from irqBottom::@7
*BORDER_COLOR = LIGHT_BLUE
*BG_COLOR = BLUE
to:irqBottom::@2
irqBottom::@return: scope:[irqBottom] from irqBottom::@2
return
to:@return
void __start()
__start: scope:[__start] from
to:__start::__init1
__start::__init1: scope:[__start] from __start
heap_head#2 = HEAP_TOP
malloc::size#0 = $3e8
call malloc
malloc::return#2 = malloc::return#1
to:__start::@2
__start::@2: scope:[__start] from __start::__init1
heap_head#8 = phi( __start::__init1/heap_head#1 )
malloc::return#5 = phi( __start::__init1/malloc::return#2 )
__start::__init1_$0 = malloc::return#5
heap_head#3 = heap_head#8
SCREEN_COPY#0 = ((byte*)) __start::__init1_$0
malloc::size#1 = $3e8
call malloc
malloc::return#3 = malloc::return#1
to:__start::@3
__start::@3: scope:[__start] from __start::@2
SCREEN_COPY#17 = phi( __start::@2/SCREEN_COPY#0 )
heap_head#9 = phi( __start::@2/heap_head#1 )
malloc::return#6 = phi( __start::@2/malloc::return#3 )
__start::__init1_$1 = malloc::return#6
heap_head#4 = heap_head#9
SCREEN_DIST#0 = ((byte*)) __start::__init1_$1
to:__start::@1
__start::@1: scope:[__start] from __start::@3
heap_head#12 = phi( __start::@3/heap_head#4 )
SCREEN_COPY#10 = phi( __start::@3/SCREEN_COPY#17 )
SCREEN_DIST#5 = phi( __start::@3/SCREEN_DIST#0 )
call main
to:__start::@4
__start::@4: scope:[__start] from __start::@1
SCREEN_DIST#7 = phi( __start::@1/SCREEN_DIST#5 )
SCREEN_COPY#9 = phi( __start::@1/SCREEN_COPY#10 )
heap_head#11 = phi( __start::@1/heap_head#12 )
to:__start::@return
__start::@return: scope:[__start] from __start::@4
SCREEN_DIST#4 = phi( __start::@4/SCREEN_DIST#7 )
SCREEN_COPY#5 = phi( __start::@4/SCREEN_COPY#9 )
heap_head#10 = phi( __start::@4/heap_head#11 )
heap_head#5 = heap_head#10
SCREEN_COPY#1 = SCREEN_COPY#5
SCREEN_DIST#1 = SCREEN_DIST#4
return
to:@return
SYMBOL TABLE SSA
const struct ProcessingSprite $0 = { x: 0, y: 0, vx: 0, vy: 0, id: 0, ptr: 0, col: 0, status: STATUS_FREE, screenPtr: (byte*)0 }
const nomodify byte* BG_COLOR = (byte*)$d021
const nomodify byte BLUE = 6
const nomodify byte* BORDER_COLOR = (byte*)$d020
const nomodify byte BORDER_XPOS_LEFT = $18
const nomodify word BORDER_XPOS_RIGHT = $158
const nomodify byte BORDER_YPOS_BOTTOM = $fa
const nomodify byte BORDER_YPOS_TOP = $32
const nomodify byte* CHARGEN = (byte*)$d000
const nomodify struct MOS6526_CIA* CIA1 = (struct MOS6526_CIA*)$dc00
const nomodify byte CIA_INTERRUPT_CLEAR = $7f
const nomodify byte* COLS = (byte*)$d800
const word* CORDIC_ATAN2_ANGLES_16[CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
}}
const nomodify byte CORDIC_ITERATIONS_16 = $f
const nomodify bool DEBUG = false
const nomodify void()** HARDWARE_IRQ = (void()**)$fffe
const byte* HEAP_TOP = (byte*)$a000
const nomodify byte* IRQ_ENABLE = (byte*)$d01a
const nomodify byte IRQ_RASTER = 1
const nomodify byte* IRQ_STATUS = (byte*)$d019
const nomodify byte LIGHT_BLUE = $e
const nomodify byte NOT_FOUND = $ff
const nomodify byte NUM_PROCESSING = 8
const nomodify word OFFSET_SPRITE_PTRS = $3f8
const byte OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
const byte OFFSET_STRUCT_PROCESSINGSPRITE_COL = $a
const byte OFFSET_STRUCT_PROCESSINGSPRITE_ID = 8
const byte OFFSET_STRUCT_PROCESSINGSPRITE_PTR = 9
const byte OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $c
const byte OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = $b
const byte OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4
const byte OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6
const byte OFFSET_STRUCT_PROCESSINGSPRITE_X = 0
const byte OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2
const struct ProcessingSprite* PROCESSING[NUM_PROCESSING] = { fill( NUM_PROCESSING, 0) }
const nomodify byte* PROCPORT = (byte*)1
const nomodify byte* PROCPORT_DDR = (byte*)0
const nomodify byte PROCPORT_DDR_MEMORY_MASK = 7
const nomodify byte PROCPORT_RAM_CHARROM = 1
const nomodify byte PROCPORT_RAM_IO = 5
const byte RADIX::BINARY = 2
const byte RADIX::DECIMAL = $a
const byte RADIX::HEXADECIMAL = $10
const byte RADIX::OCTAL = 8
const nomodify byte* RASTER = (byte*)$d012
const nomodify byte RASTER_IRQ_MIDDLE = $ff
const nomodify byte RASTER_IRQ_TOP = $30
const nomodify byte* SCREEN = (byte*)$400
byte* SCREEN_COPY
byte* SCREEN_COPY#0
byte* SCREEN_COPY#1
byte* SCREEN_COPY#10
byte* SCREEN_COPY#11
byte* SCREEN_COPY#12
byte* SCREEN_COPY#13
byte* SCREEN_COPY#14
byte* SCREEN_COPY#15
byte* SCREEN_COPY#16
byte* SCREEN_COPY#17
byte* SCREEN_COPY#18
byte* SCREEN_COPY#19
byte* SCREEN_COPY#2
byte* SCREEN_COPY#20
byte* SCREEN_COPY#21
byte* SCREEN_COPY#22
byte* SCREEN_COPY#23
byte* SCREEN_COPY#24
byte* SCREEN_COPY#25
byte* SCREEN_COPY#26
byte* SCREEN_COPY#27
byte* SCREEN_COPY#3
byte* SCREEN_COPY#4
byte* SCREEN_COPY#5
byte* SCREEN_COPY#6
byte* SCREEN_COPY#7
byte* SCREEN_COPY#8
byte* SCREEN_COPY#9
byte* SCREEN_DIST
byte* SCREEN_DIST#0
byte* SCREEN_DIST#1
byte* SCREEN_DIST#10
byte* SCREEN_DIST#11
byte* SCREEN_DIST#12
byte* SCREEN_DIST#13
byte* SCREEN_DIST#14
byte* SCREEN_DIST#15
byte* SCREEN_DIST#16
byte* SCREEN_DIST#17
byte* SCREEN_DIST#18
byte* SCREEN_DIST#2
byte* SCREEN_DIST#3
byte* SCREEN_DIST#4
byte* SCREEN_DIST#5
byte* SCREEN_DIST#6
byte* SCREEN_DIST#7
byte* SCREEN_DIST#8
byte* SCREEN_DIST#9
const byte SIZEOF_STRUCT_PROCESSINGSPRITE = $e
const byte SIZEOF_WORD = 2
const nomodify byte* SPRITES_COLOR = (byte*)$d027
const nomodify byte* SPRITES_ENABLE = (byte*)$d015
const nomodify byte* SPRITES_EXPAND_X = (byte*)$d01d
const nomodify byte* SPRITES_EXPAND_Y = (byte*)$d017
const nomodify byte* SPRITES_MC = (byte*)$d01c
const nomodify byte* SPRITES_XMSB = (byte*)$d010
const nomodify byte* SPRITES_XPOS = (byte*)$d000
const nomodify byte* SPRITES_YPOS = (byte*)$d001
const nomodify byte* SPRITE_DATA = (byte*)$2000
const byte STATUS_FREE = 0
const byte STATUS_NEW = 1
const byte STATUS_PROCESSING = 2
const nomodify byte* VICII_CONTROL = (byte*)$d011
const to_nomodify word* VXSIN[$28] = kickasm {{ .for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
}}
const to_nomodify word* VYSIN[$19] = kickasm {{ .for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
}}
const nomodify byte WHITE = 1
const nomodify word XPOS_LEFTMOST = (word)BORDER_XPOS_LEFT-8<<4
const nomodify word XPOS_RIGHTMOST = (word)BORDER_XPOS_RIGHT<<4
const nomodify word YPOS_BOTTOMMOST = (word)BORDER_YPOS_BOTTOM<<4
const nomodify word YPOS_TOPMOST = (word)BORDER_YPOS_TOP-8<<4
void __start()
void*~ __start::__init1_$0
void*~ __start::__init1_$1
word atan2_16(signed word atan2_16::x , signed word atan2_16::y)
bool~ atan2_16::$0
signed word~ atan2_16::$1
bool~ atan2_16::$10
bool~ atan2_16::$11
number~ atan2_16::$12
bool~ atan2_16::$13
bool~ atan2_16::$14
word~ atan2_16::$15
bool~ atan2_16::$16
bool~ atan2_16::$17
bool~ atan2_16::$18
bool~ atan2_16::$19
signed word~ atan2_16::$2
bool~ atan2_16::$20
bool~ atan2_16::$21
byte~ atan2_16::$22
byte~ atan2_16::$23
bool~ atan2_16::$24
signed word~ atan2_16::$3
signed word~ atan2_16::$4
bool~ atan2_16::$5
signed word~ atan2_16::$6
signed word~ atan2_16::$7
signed word~ atan2_16::$8
signed word~ atan2_16::$9
word atan2_16::angle
word atan2_16::angle#0
word atan2_16::angle#1
word atan2_16::angle#10
word atan2_16::angle#11
word atan2_16::angle#12
word atan2_16::angle#13
word atan2_16::angle#14
word atan2_16::angle#15
word atan2_16::angle#16
word atan2_16::angle#17
word atan2_16::angle#18
word atan2_16::angle#19
word atan2_16::angle#2
word atan2_16::angle#20
word atan2_16::angle#3
word atan2_16::angle#4
word atan2_16::angle#5
word atan2_16::angle#6
word atan2_16::angle#7
word atan2_16::angle#8
word atan2_16::angle#9
byte atan2_16::i
byte atan2_16::i#0
byte atan2_16::i#1
byte atan2_16::i#10
byte atan2_16::i#11
byte atan2_16::i#2
byte atan2_16::i#3
byte atan2_16::i#4
byte atan2_16::i#5
byte atan2_16::i#6
byte atan2_16::i#7
byte atan2_16::i#8
byte atan2_16::i#9
word atan2_16::return
word atan2_16::return#0
word atan2_16::return#1
word atan2_16::return#2
word atan2_16::return#3
word atan2_16::return#4
byte atan2_16::shift
byte atan2_16::shift#0
byte atan2_16::shift#1
byte atan2_16::shift#2
byte atan2_16::shift#3
byte atan2_16::shift#4
signed word atan2_16::x
signed word atan2_16::x#0
signed word atan2_16::x#1
signed word atan2_16::x#10
signed word atan2_16::x#11
signed word atan2_16::x#12
signed word atan2_16::x#13
signed word atan2_16::x#14
signed word atan2_16::x#15
signed word atan2_16::x#16
signed word atan2_16::x#17
signed word atan2_16::x#18
signed word atan2_16::x#2
signed word atan2_16::x#3
signed word atan2_16::x#4
signed word atan2_16::x#5
signed word atan2_16::x#6
signed word atan2_16::x#7
signed word atan2_16::x#8
signed word atan2_16::x#9
signed word atan2_16::xd
signed word atan2_16::xd#0
signed word atan2_16::xd#1
signed word atan2_16::xd#2
signed word atan2_16::xd#3
signed word atan2_16::xd#4
signed word atan2_16::xd#5
signed word atan2_16::xd#6
signed word atan2_16::xd#7
signed word atan2_16::xd#8
signed word atan2_16::xd#9
signed word atan2_16::xi
signed word atan2_16::xi#0
signed word atan2_16::xi#1
signed word atan2_16::xi#10
signed word atan2_16::xi#11
signed word atan2_16::xi#12
signed word atan2_16::xi#2
signed word atan2_16::xi#3
signed word atan2_16::xi#4
signed word atan2_16::xi#5
signed word atan2_16::xi#6
signed word atan2_16::xi#7
signed word atan2_16::xi#8
signed word atan2_16::xi#9
signed word atan2_16::y
signed word atan2_16::y#0
signed word atan2_16::y#1
signed word atan2_16::y#10
signed word atan2_16::y#11
signed word atan2_16::y#12
signed word atan2_16::y#13
signed word atan2_16::y#14
signed word atan2_16::y#15
signed word atan2_16::y#16
signed word atan2_16::y#17
signed word atan2_16::y#18
signed word atan2_16::y#19
signed word atan2_16::y#2
signed word atan2_16::y#20
signed word atan2_16::y#3
signed word atan2_16::y#4
signed word atan2_16::y#5
signed word atan2_16::y#6
signed word atan2_16::y#7
signed word atan2_16::y#8
signed word atan2_16::y#9
signed word atan2_16::yd
signed word atan2_16::yd#0
signed word atan2_16::yd#1
signed word atan2_16::yd#2
signed word atan2_16::yd#3
signed word atan2_16::yd#4
signed word atan2_16::yd#5
signed word atan2_16::yd#6
signed word atan2_16::yd#7
signed word atan2_16::yd#8
signed word atan2_16::yd#9
signed word atan2_16::yi
signed word atan2_16::yi#0
signed word atan2_16::yi#1
signed word atan2_16::yi#10
signed word atan2_16::yi#11
signed word atan2_16::yi#12
signed word atan2_16::yi#13
signed word atan2_16::yi#14
signed word atan2_16::yi#15
signed word atan2_16::yi#2
signed word atan2_16::yi#3
signed word atan2_16::yi#4
signed word atan2_16::yi#5
signed word atan2_16::yi#6
signed word atan2_16::yi#7
signed word atan2_16::yi#8
signed word atan2_16::yi#9
struct ProcessingChar getCharToProcess()
bool~ getCharToProcess::$0
bool~ getCharToProcess::$1
byte*~ getCharToProcess::$10
word~ getCharToProcess::$11
bool~ getCharToProcess::$2
bool~ getCharToProcess::$3
bool~ getCharToProcess::$4
bool~ getCharToProcess::$5
bool~ getCharToProcess::$6
bool~ getCharToProcess::$7
number~ getCharToProcess::$8
byte*~ getCharToProcess::$9
byte getCharToProcess::closest_dist
byte getCharToProcess::closest_dist#0
byte getCharToProcess::closest_dist#1
byte getCharToProcess::closest_dist#2
byte getCharToProcess::closest_dist#3
byte getCharToProcess::closest_dist#4
byte getCharToProcess::closest_dist#5
byte getCharToProcess::closest_dist#6
byte getCharToProcess::closest_dist#7
byte getCharToProcess::closest_dist#8
byte getCharToProcess::closest_dist#9
byte getCharToProcess::closest_x
byte getCharToProcess::closest_x#0
byte getCharToProcess::closest_x#1
byte getCharToProcess::closest_x#2
byte getCharToProcess::closest_x#3
byte getCharToProcess::closest_x#4
byte getCharToProcess::closest_x#5
byte getCharToProcess::closest_x#6
byte getCharToProcess::closest_x#7
byte getCharToProcess::closest_x#8
byte getCharToProcess::closest_x#9
byte getCharToProcess::closest_y
byte getCharToProcess::closest_y#0
byte getCharToProcess::closest_y#1
byte getCharToProcess::closest_y#2
byte getCharToProcess::closest_y#3
byte getCharToProcess::closest_y#4
byte getCharToProcess::closest_y#5
byte getCharToProcess::closest_y#6
byte getCharToProcess::closest_y#7
byte getCharToProcess::closest_y#8
byte getCharToProcess::closest_y#9
byte getCharToProcess::dist
byte getCharToProcess::dist#0
byte getCharToProcess::dist#1
byte* getCharToProcess::dist_line
byte* getCharToProcess::dist_line#0
byte* getCharToProcess::dist_line#1
byte* getCharToProcess::dist_line#2
byte* getCharToProcess::dist_line#3
byte* getCharToProcess::dist_line#4
byte* getCharToProcess::dist_line#5
byte* getCharToProcess::dist_line#6
byte* getCharToProcess::dist_line#7
struct ProcessingChar getCharToProcess::return
struct ProcessingChar getCharToProcess::return#0
struct ProcessingChar getCharToProcess::return#1
byte getCharToProcess::return_dist
byte getCharToProcess::return_dist#0
byte getCharToProcess::return_dist#1
byte getCharToProcess::return_dist#2
byte getCharToProcess::return_dist#3
byte getCharToProcess::return_dist#4
byte getCharToProcess::return_x
byte getCharToProcess::return_x#0
byte getCharToProcess::return_x#1
byte getCharToProcess::return_x#2
byte getCharToProcess::return_x#3
byte getCharToProcess::return_x#4
byte getCharToProcess::return_y
byte getCharToProcess::return_y#0
byte getCharToProcess::return_y#1
byte getCharToProcess::return_y#2
byte getCharToProcess::return_y#3
byte getCharToProcess::return_y#4
byte* getCharToProcess::screen_line
byte* getCharToProcess::screen_line#0
byte* getCharToProcess::screen_line#1
byte* getCharToProcess::screen_line#2
byte* getCharToProcess::screen_line#3
byte* getCharToProcess::screen_line#4
byte* getCharToProcess::screen_line#5
byte* getCharToProcess::screen_line#6
byte* getCharToProcess::screen_line#7
byte getCharToProcess::x
byte getCharToProcess::x#0
byte getCharToProcess::x#1
byte getCharToProcess::x#2
byte getCharToProcess::x#3
byte getCharToProcess::x#4
byte getCharToProcess::x#5
byte getCharToProcess::y
byte getCharToProcess::y#0
byte getCharToProcess::y#1
byte getCharToProcess::y#2
byte getCharToProcess::y#3
byte getCharToProcess::y#4
byte getCharToProcess::y#5
byte getCharToProcess::y#6
byte getCharToProcess::y#7
byte* heap_head
byte* heap_head#0
byte* heap_head#1
byte* heap_head#10
byte* heap_head#11
byte* heap_head#12
byte* heap_head#2
byte* heap_head#3
byte* heap_head#4
byte* heap_head#5
byte* heap_head#6
byte* heap_head#7
byte* heap_head#8
byte* heap_head#9
void initSprites()
bool~ initSprites::$0
bool~ initSprites::$1
byte initSprites::i
byte initSprites::i#0
byte initSprites::i#1
byte initSprites::i#2
byte* initSprites::sp
byte* initSprites::sp#0
byte* initSprites::sp#1
byte* initSprites::sp#2
byte* initSprites::sp#3
void init_angle_screen(byte* init_angle_screen::screen)
byte*~ init_angle_screen::$0
byte*~ init_angle_screen::$1
number~ init_angle_screen::$10
number~ init_angle_screen::$11
bool~ init_angle_screen::$12
bool~ init_angle_screen::$2
number~ init_angle_screen::$3
number~ init_angle_screen::$4
number~ init_angle_screen::$5
word~ init_angle_screen::$6
number~ init_angle_screen::$7
number~ init_angle_screen::$8
byte~ init_angle_screen::$9
byte init_angle_screen::ang_w
byte init_angle_screen::ang_w#0
word init_angle_screen::angle_w
word init_angle_screen::angle_w#0
byte* init_angle_screen::screen
byte* init_angle_screen::screen#0
byte* init_angle_screen::screen#1
byte* init_angle_screen::screen_bottomline
byte* init_angle_screen::screen_bottomline#0
byte* init_angle_screen::screen_bottomline#1
byte* init_angle_screen::screen_bottomline#2
byte* init_angle_screen::screen_bottomline#3
byte* init_angle_screen::screen_bottomline#4
byte* init_angle_screen::screen_bottomline#5
byte* init_angle_screen::screen_bottomline#6
byte* init_angle_screen::screen_topline
byte* init_angle_screen::screen_topline#0
byte* init_angle_screen::screen_topline#1
byte* init_angle_screen::screen_topline#2
byte* init_angle_screen::screen_topline#3
byte* init_angle_screen::screen_topline#4
byte* init_angle_screen::screen_topline#5
byte* init_angle_screen::screen_topline#6
byte init_angle_screen::x
byte init_angle_screen::x#0
byte init_angle_screen::x#1
byte init_angle_screen::x#2
byte init_angle_screen::x#3
byte init_angle_screen::x#4
byte init_angle_screen::xb
byte init_angle_screen::xb#0
byte init_angle_screen::xb#1
byte init_angle_screen::xb#2
byte init_angle_screen::xb#3
byte init_angle_screen::xb#4
signed word init_angle_screen::xw
signed word init_angle_screen::xw#0
byte init_angle_screen::y
byte init_angle_screen::y#0
byte init_angle_screen::y#1
byte init_angle_screen::y#2
byte init_angle_screen::y#3
byte init_angle_screen::y#4
byte init_angle_screen::y#5
byte init_angle_screen::y#6
signed word init_angle_screen::yw
signed word init_angle_screen::yw#0
__interrupt(hardware_clobber) void irqBottom()
bool~ irqBottom::$0
bool~ irqBottom::$2
bool~ irqBottom::$3
byte irqBottom::i
byte irqBottom::i#0
byte irqBottom::i#1
byte irqBottom::i#2
__interrupt(hardware_clobber) void irqTop()
bool~ irqTop::$0
bool~ irqTop::$1
bool~ irqTop::$2
byte irqTop::i
byte irqTop::i#0
byte irqTop::i#1
byte irqTop::i#2
byte irqTop::i1
byte irqTop::i1#0
byte irqTop::i1#1
byte irqTop::i1#2
void main()
byte~ main::$10
bool~ main::$3
bool~ main::$4
byte~ main::$5_dist
byte~ main::$5_x
byte~ main::$5_y
bool~ main::$6
bool~ main::$7
byte main::center_dist
byte main::center_dist#0
byte main::center_dist#1
byte main::center_x
byte main::center_x#0
byte main::center_x#1
byte main::center_y
byte main::center_y#0
byte main::center_y#1
byte* main::dst
byte* main::dst#0
byte* main::dst#1
byte* main::dst#2
byte* main::dst#3
byte main::i
byte main::i#0
byte main::i#1
byte main::i#2
byte* main::src
byte* main::src#0
byte* main::src#1
byte* main::src#2
byte* main::src#3
void* malloc(word malloc::size)
byte*~ malloc::$0
byte* malloc::mem
byte* malloc::mem#0
void* malloc::return
void* malloc::return#0
void* malloc::return#1
void* malloc::return#2
void* malloc::return#3
void* malloc::return#4
void* malloc::return#5
void* malloc::return#6
word malloc::size
word malloc::size#0
word malloc::size#1
word malloc::size#2
void processChars()
bool~ processChars::$0
struct ProcessingSprite*~ processChars::$1
number~ processChars::$10
number~ processChars::$11
word~ processChars::$12
number~ processChars::$13
bool~ processChars::$14
bool~ processChars::$15
bool~ processChars::$16
bool~ processChars::$17
bool~ processChars::$18
bool~ processChars::$19
number~ processChars::$2
bool~ processChars::$20
number~ processChars::$21
number~ processChars::$22
number~ processChars::$23
number~ processChars::$24
number~ processChars::$25
bool~ processChars::$26
byte~ processChars::$27
byte~ processChars::$28
byte~ processChars::$29
bool~ processChars::$3
byte~ processChars::$30
byte*~ processChars::$31
byte*~ processChars::$32
byte*~ processChars::$33
word*~ processChars::$34
byte**~ processChars::$35
byte*~ processChars::$36
byte*~ processChars::$37
byte*~ processChars::$38
byte*~ processChars::$39
bool~ processChars::$4
byte*~ processChars::$40
word*~ processChars::$41
word*~ processChars::$42
word*~ processChars::$43
word*~ processChars::$44
word*~ processChars::$45
byte*~ processChars::$46
word*~ processChars::$47
word*~ processChars::$48
word*~ processChars::$49
bool~ processChars::$5
word*~ processChars::$50
word*~ processChars::$51
word*~ processChars::$52
word*~ processChars::$53
word*~ processChars::$54
word*~ processChars::$55
word*~ processChars::$56
byte*~ processChars::$57
byte*~ processChars::$58
byte*~ processChars::$59
bool~ processChars::$6
word*~ processChars::$60
byte**~ processChars::$61
byte*~ processChars::$62
byte*~ processChars::$63
byte*~ processChars::$64
byte*~ processChars::$65
byte*~ processChars::$66
word*~ processChars::$67
word*~ processChars::$68
word*~ processChars::$69
byte*~ processChars::$7
word*~ processChars::$70
word*~ processChars::$71
byte*~ processChars::$72
byte~ processChars::$73
word*~ processChars::$74
word*~ processChars::$75
word*~ processChars::$76
word*~ processChars::$77
word*~ processChars::$78
byte~ processChars::$79
word~ processChars::$8
word*~ processChars::$80
word*~ processChars::$81
word*~ processChars::$82
word*~ processChars::$83
word*~ processChars::$84
bool~ processChars::$85
byte~ processChars::$9
byte processChars::bitmask
byte processChars::bitmask#0
byte processChars::bitmask#1
byte processChars::bitmask#2
byte processChars::bitmask#3
byte processChars::bitmask#4
byte processChars::bitmask#5
byte processChars::bitmask#6
byte processChars::bitmask#7
byte processChars::i
byte processChars::i#0
byte processChars::i#1
byte processChars::i#10
byte processChars::i#11
byte processChars::i#12
byte processChars::i#2
byte processChars::i#3
byte processChars::i#4
byte processChars::i#5
byte processChars::i#6
byte processChars::i#7
byte processChars::i#8
byte processChars::i#9
byte processChars::numActive
byte processChars::numActive#0
byte processChars::numActive#1
byte processChars::numActive#10
byte processChars::numActive#11
byte processChars::numActive#12
byte processChars::numActive#13
byte processChars::numActive#14
byte processChars::numActive#2
byte processChars::numActive#3
byte processChars::numActive#4
byte processChars::numActive#5
byte processChars::numActive#6
byte processChars::numActive#7
byte processChars::numActive#8
byte processChars::numActive#9
struct ProcessingSprite* processChars::processing
struct ProcessingSprite* processChars::processing#0
struct ProcessingSprite* processChars::processing#1
struct ProcessingSprite* processChars::processing#2
struct ProcessingSprite* processChars::processing#3
struct ProcessingSprite* processChars::processing#4
struct ProcessingSprite* processChars::processing#5
struct ProcessingSprite* processChars::processing#6
struct ProcessingSprite* processChars::processing#7
struct ProcessingSprite* processChars::processing#8
byte processChars::xchar
byte processChars::xchar#0
word processChars::xpos
word processChars::xpos#0
word processChars::xpos#1
word processChars::xpos#2
word processChars::xpos#3
word processChars::xpos#4
byte processChars::ychar
byte processChars::ychar#0
byte processChars::ypos
byte processChars::ypos#0
byte processChars::ypos#1
void setupRasterIrq(word setupRasterIrq::raster , void()* setupRasterIrq::irqRoutine)
bool~ setupRasterIrq::$0
byte~ setupRasterIrq::$1
void()* setupRasterIrq::irqRoutine
void()* setupRasterIrq::irqRoutine#0
void()* setupRasterIrq::irqRoutine#1
void()* setupRasterIrq::irqRoutine#2
void()* setupRasterIrq::irqRoutine#3
void()* setupRasterIrq::irqRoutine#4
word setupRasterIrq::raster
word setupRasterIrq::raster#0
word setupRasterIrq::raster#1
word setupRasterIrq::raster#2
word setupRasterIrq::raster#3
word setupRasterIrq::raster#4
void startProcessing(byte startProcessing::center_x , byte startProcessing::center_y , byte startProcessing::center_dist)
number~ startProcessing::$0
number~ startProcessing::$1
number~ startProcessing::$10
number~ startProcessing::$11
number~ startProcessing::$12
number~ startProcessing::$13
byte~ startProcessing::$14
number~ startProcessing::$15
bool~ startProcessing::$16
bool~ startProcessing::$17
bool~ startProcessing::$18
bool~ startProcessing::$19
byte*~ startProcessing::$2
bool~ startProcessing::$20
byte~ startProcessing::$21
byte~ startProcessing::$22
word~ startProcessing::$23
word~ startProcessing::$24
word~ startProcessing::$25
word~ startProcessing::$26
word~ startProcessing::$27
byte*~ startProcessing::$3
number~ startProcessing::$4
byte*~ startProcessing::$5
number~ startProcessing::$6
byte*~ startProcessing::$7
number~ startProcessing::$8
number~ startProcessing::$9
struct ProcessingChar startProcessing::center
byte startProcessing::center_dist
byte startProcessing::center_dist#0
byte startProcessing::center_x
byte startProcessing::center_x#0
byte startProcessing::center_x#1
byte startProcessing::center_x#2
byte startProcessing::center_x#3
byte startProcessing::center_x#4
byte startProcessing::center_x#5
byte startProcessing::center_x#6
byte startProcessing::center_x#7
byte startProcessing::center_x#8
byte startProcessing::center_x#9
byte startProcessing::center_y
byte startProcessing::center_y#0
byte startProcessing::center_y#1
byte startProcessing::center_y#2
byte startProcessing::center_y#3
byte startProcessing::center_y#4
byte startProcessing::center_y#5
byte startProcessing::center_y#6
byte startProcessing::center_y#7
byte startProcessing::center_y#8
byte startProcessing::center_y#9
byte startProcessing::ch
byte startProcessing::ch#0
byte* startProcessing::chargenData
byte* startProcessing::chargenData#0
byte* startProcessing::chargenData#1
byte* startProcessing::chargenData#2
byte* startProcessing::colPtr
byte* startProcessing::colPtr#0
byte startProcessing::freeIdx
byte startProcessing::freeIdx#0
byte startProcessing::freeIdx#1
byte startProcessing::freeIdx#2
byte startProcessing::freeIdx#3
byte startProcessing::freeIdx#4
byte startProcessing::freeIdx#5
byte startProcessing::freeIdx#6
byte startProcessing::i
byte startProcessing::i#0
byte startProcessing::i#1
byte startProcessing::i#2
byte startProcessing::i#3
byte startProcessing::i#4
byte startProcessing::i1
byte startProcessing::i1#0
byte startProcessing::i1#1
byte startProcessing::i1#2
word startProcessing::offset
word startProcessing::offset#0
byte* startProcessing::screenPtr
byte* startProcessing::screenPtr#0
byte* startProcessing::screenPtr#1
byte* startProcessing::screenPtr#2
byte startProcessing::spriteCol
byte startProcessing::spriteCol#0
byte startProcessing::spriteCol#1
byte startProcessing::spriteCol#2
byte* startProcessing::spriteData
byte* startProcessing::spriteData#0
byte* startProcessing::spriteData#1
byte* startProcessing::spriteData#2
byte startProcessing::spriteIdx
byte startProcessing::spriteIdx#0
byte startProcessing::spriteIdx#1
byte startProcessing::spriteIdx#2
byte startProcessing::spritePtr
byte startProcessing::spritePtr#0
word startProcessing::spriteX
word startProcessing::spriteX#0
word startProcessing::spriteY
word startProcessing::spriteY#0
Fixing inline constructor with init_angle_screen::$13 = (byte)init_angle_screen::$4 w= (byte)0
Fixing inline constructor with init_angle_screen::$14 = (byte)init_angle_screen::$5 w= (byte)0
Successful SSA optimization Pass2FixInlineConstructors
Adding number conversion cast (unumber) 4 in
Adding number conversion cast (unumber) 8 in
Adding number conversion cast (unumber) 4 in
Adding number conversion cast (unumber) 4 in
Adding number conversion cast (unumber) 8 in
Adding number conversion cast (unumber) 4 in
Adding number conversion cast (snumber) 0 in atan2_16::$0 = atan2_16::y#1 >= 0
Adding number conversion cast (snumber) 0 in atan2_16::$5 = atan2_16::x#1 >= 0
Adding number conversion cast (snumber) 0 in atan2_16::$16 = atan2_16::yi#3 == 0
Adding number conversion cast (unumber) 2 in atan2_16::angle#1 = atan2_16::angle#6 / 2
Adding number conversion cast (snumber) 0 in atan2_16::$10 = atan2_16::x#4 < 0
Adding number conversion cast (unumber) 2 in atan2_16::$18 = atan2_16::shift#2 >= 2
Adding number conversion cast (snumber) 2 in atan2_16::xd#1 = atan2_16::xd#3 >> 2
Adding number conversion cast (snumber) 2 in atan2_16::yd#1 = atan2_16::yd#3 >> 2
Adding number conversion cast (unumber) 2 in atan2_16::shift#1 = atan2_16::shift#3 - 2
Adding number conversion cast (unumber) 0 in atan2_16::$24 = 0 != atan2_16::shift#4
Adding number conversion cast (snumber) 0 in atan2_16::$20 = atan2_16::yi#5 >= 0
Adding number conversion cast (snumber) 1 in atan2_16::xd#2 = atan2_16::xd#4 >> 1
Adding number conversion cast (snumber) 1 in atan2_16::yd#2 = atan2_16::yd#4 >> 1
Adding number conversion cast (unumber) 1 in atan2_16::i#1 = atan2_16::i#5 + rangenext(0,CORDIC_ITERATIONS_16-1)
Adding number conversion cast (snumber) 0 in atan2_16::$13 = atan2_16::y#4 < 0
Adding number conversion cast (unumber) $8000 in atan2_16::$12 = $8000 - atan2_16::angle#9
Adding number conversion cast (unumber) atan2_16::$12 in atan2_16::$12 = (unumber)$8000 - atan2_16::angle#9
Adding number conversion cast (unumber) $3e8 in main::$3 = main::src#2 != SCREEN+$3e8
Adding number conversion cast (unumber) 1 in main::i#1 = main::i#2 + rangenext(0,NUM_PROCESSING-1)
Adding number conversion cast (unumber) $3e7 in *(SCREEN+$3e7) = '.'
Adding number conversion cast (unumber) $3e7 in *(COLS+$3e7) = ++ *(COLS+$3e7)
Adding number conversion cast (unumber) $28 in getCharToProcess::screen_line#1 = getCharToProcess::screen_line#3 + $28
Adding number conversion cast (unumber) $28 in getCharToProcess::dist_line#1 = getCharToProcess::dist_line#3 + $28
Adding number conversion cast (unumber) $28 in getCharToProcess::$8 = getCharToProcess::$11 * $28
Adding number conversion cast (unumber) getCharToProcess::$8 in getCharToProcess::$8 = getCharToProcess::$11 * (unumber)$28
Adding number conversion cast (unumber) 1 in startProcessing::i#1 = startProcessing::i#3 + rangenext(0,NUM_PROCESSING-1)
Adding number conversion cast (unumber) $ff in startProcessing::$19 = startProcessing::freeIdx#2 == $ff
Adding number conversion cast (unumber) $28 in startProcessing::$0 = startProcessing::$23 * $28
Adding number conversion cast (unumber) startProcessing::$0 in startProcessing::$0 = startProcessing::$23 * (unumber)$28
Adding number conversion cast (unumber) startProcessing::$1 in startProcessing::$1 = startProcessing::$0 + startProcessing::center_x#1
Adding number conversion cast (unumber) $40 in startProcessing::$4 = startProcessing::$24 * $40
Adding number conversion cast (unumber) startProcessing::$4 in startProcessing::$4 = startProcessing::$24 * (unumber)$40
Adding number conversion cast (unumber) 8 in startProcessing::$6 = startProcessing::$25 * 8
Adding number conversion cast (unumber) startProcessing::$6 in startProcessing::$6 = startProcessing::$25 * (unumber)8
Adding number conversion cast (unumber) 3 in startProcessing::spriteData#1 = startProcessing::spriteData#2 + 3
Adding number conversion cast (unumber) 8 in startProcessing::$8 = startProcessing::$26 * 8
Adding number conversion cast (unumber) startProcessing::$8 in startProcessing::$8 = startProcessing::$26 * (unumber)8
Adding number conversion cast (unumber) startProcessing::$9 in startProcessing::$9 = BORDER_XPOS_LEFT + startProcessing::$8
Adding number conversion cast (unumber) 4 in startProcessing::$10 = startProcessing::$9 << 4
Adding number conversion cast (unumber) startProcessing::$10 in startProcessing::$10 = startProcessing::$9 << (unumber)4
Adding number conversion cast (unumber) 8 in startProcessing::$11 = startProcessing::$27 * 8
Adding number conversion cast (unumber) startProcessing::$11 in startProcessing::$11 = startProcessing::$27 * (unumber)8
Adding number conversion cast (unumber) startProcessing::$12 in startProcessing::$12 = BORDER_YPOS_TOP + startProcessing::$11
Adding number conversion cast (unumber) 4 in startProcessing::$13 = startProcessing::$12 << 4
Adding number conversion cast (unumber) startProcessing::$13 in startProcessing::$13 = startProcessing::$12 << (unumber)4
Adding number conversion cast (unumber) $40 in startProcessing::$14 = (byte)SPRITE_DATA/$40 + startProcessing::spriteIdx#1
Adding number conversion cast (unumber) 8 in startProcessing::$15 = startProcessing::spriteIdx#1 * 8
Adding number conversion cast (unumber) startProcessing::$15 in startProcessing::$15 = startProcessing::spriteIdx#1 * (unumber)8
Adding number conversion cast (unumber) 1 in processChars::$2 = 1 << *processChars::$31
Adding number conversion cast (unumber) processChars::$2 in processChars::$2 = (unumber)1 << *processChars::$31
Adding number conversion cast (unumber) 1 in processChars::i#1 = processChars::i#3 + rangenext(0,NUM_PROCESSING-1)
Adding number conversion cast (unumber) 4 in processChars::$8 = *processChars::$34 >> 4
Adding number conversion cast (unumber) 0 in processChars::$85 = 0 != processChars::$9
Adding number conversion cast (unumber) $ff in processChars::$10 = $ff ^ processChars::bitmask#3
Adding number conversion cast (unumber) processChars::$10 in processChars::$10 = (unumber)$ff ^ processChars::bitmask#3
Adding number conversion cast (unumber) 2 in processChars::$11 = processChars::i#4 * 2
Adding number conversion cast (unumber) processChars::$11 in processChars::$11 = processChars::i#4 * (unumber)2
Adding number conversion cast (unumber) 4 in processChars::$12 = *processChars::$41 >> 4
Adding number conversion cast (unumber) 2 in processChars::$13 = processChars::i#4 * 2
Adding number conversion cast (unumber) processChars::$13 in processChars::$13 = processChars::i#4 * (unumber)2
Adding number conversion cast (unumber) $ff in processChars::$25 = $ff ^ processChars::bitmask#4
Adding number conversion cast (unumber) processChars::$25 in processChars::$25 = (unumber)$ff ^ processChars::bitmask#4
Adding number conversion cast (unumber) 8 in processChars::$21 = processChars::xpos#2 / 8
Adding number conversion cast (unumber) processChars::$21 in processChars::$21 = processChars::xpos#2 / (unumber)8
Adding number conversion cast (unumber) BORDER_XPOS_LEFT/8 in processChars::$22 = processChars::$73 - BORDER_XPOS_LEFT/8
Adding number conversion cast (unumber) processChars::$22 in processChars::$22 = processChars::$73 - (unumber)BORDER_XPOS_LEFT/8
Adding number conversion cast (unumber) 8 in processChars::$22 = processChars::$73 - (unumber)BORDER_XPOS_LEFT/8
Adding number conversion cast (unumber) 8 in processChars::$23 = processChars::ypos#1 / 8
Adding number conversion cast (unumber) processChars::$23 in processChars::$23 = processChars::ypos#1 / (unumber)8
Adding number conversion cast (unumber) BORDER_YPOS_TOP/8 in processChars::$24 = processChars::$79 - BORDER_YPOS_TOP/8
Adding number conversion cast (unumber) processChars::$24 in processChars::$24 = processChars::$79 - (unumber)BORDER_YPOS_TOP/8
Adding number conversion cast (unumber) 8 in processChars::$24 = processChars::$79 - (unumber)BORDER_YPOS_TOP/8
Adding number conversion cast (unumber) $3e7 in *(SCREEN+$3e7) = processChars::$27
Adding number conversion cast (unumber) $28*$c in init_angle_screen::$0 = init_angle_screen::screen#1 + $28*$c
Adding number conversion cast (unumber) $28*$c in init_angle_screen::$1 = init_angle_screen::screen#1 + $28*$c
Adding number conversion cast (unumber) $13 in init_angle_screen::$2 = init_angle_screen::x#2 <= $13
Adding number conversion cast (unumber) 2 in init_angle_screen::$3 = init_angle_screen::x#3 * 2
Adding number conversion cast (unumber) init_angle_screen::$3 in init_angle_screen::$3 = init_angle_screen::x#3 * (unumber)2
Adding number conversion cast (unumber) $27 in init_angle_screen::$4 = $27 - init_angle_screen::$3
Adding number conversion cast (unumber) init_angle_screen::$4 in init_angle_screen::$4 = (unumber)$27 - init_angle_screen::$3
Adding number conversion cast (unumber) 2 in init_angle_screen::$5 = init_angle_screen::y#2 * 2
Adding number conversion cast (unumber) init_angle_screen::$5 in init_angle_screen::$5 = init_angle_screen::y#2 * (unumber)2
Adding number conversion cast (unumber) $80 in init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80
Adding number conversion cast (unumber) init_angle_screen::$7 in init_angle_screen::$7 = init_angle_screen::angle_w#0 + (unumber)$80
Adding number conversion cast (unumber) init_angle_screen::$8 in init_angle_screen::$8 = > init_angle_screen::$7
Adding number conversion cast (unumber) $80 in init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0
Adding number conversion cast (unumber) init_angle_screen::$10 in init_angle_screen::$10 = (unumber)$80 + init_angle_screen::ang_w#0
Adding number conversion cast (unumber) $80 in init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0
Adding number conversion cast (unumber) init_angle_screen::$11 in init_angle_screen::$11 = (unumber)$80 - init_angle_screen::ang_w#0
Adding number conversion cast (unumber) $28 in init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#3 - $28
Adding number conversion cast (unumber) $28 in init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#3 + $28
Adding number conversion cast (unumber) NUM_PROCESSING*$40 in initSprites::$0 = initSprites::sp#2 < SPRITE_DATA+NUM_PROCESSING*$40
Adding number conversion cast (unumber) $40 in initSprites::$0 = initSprites::sp#2 < SPRITE_DATA+(unumber)NUM_PROCESSING*$40
Adding number conversion cast (unumber) 0 in *initSprites::sp#3 = 0
Adding number conversion cast (unumber) 0 in *SPRITES_MC = 0
Adding number conversion cast (unumber) 0 in *SPRITES_EXPAND_X = 0
Adding number conversion cast (unumber) 0 in *SPRITES_EXPAND_Y = 0
Adding number conversion cast (unumber) $100 in setupRasterIrq::$0 = setupRasterIrq::raster#1 < $100
Adding number conversion cast (unumber) $7f in *VICII_CONTROL = *VICII_CONTROL & $7f
Adding number conversion cast (unumber) $80 in *VICII_CONTROL = *VICII_CONTROL | $80
Adding number conversion cast (unumber) $3e8 in malloc::size#0 = $3e8
Adding number conversion cast (unumber) $3e8 in malloc::size#1 = $3e8
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast malloc::return#0 = (void*)malloc::mem#0
Inlining cast *initSprites::sp#3 = (unumber)0
Inlining cast *SPRITES_MC = (unumber)0
Inlining cast *SPRITES_EXPAND_X = (unumber)0
Inlining cast *SPRITES_EXPAND_Y = (unumber)0
Inlining cast malloc::size#0 = (unumber)$3e8
Inlining cast SCREEN_COPY#0 = (byte*)__start::__init1_$0
Inlining cast malloc::size#1 = (unumber)$3e8
Inlining cast SCREEN_DIST#0 = (byte*)__start::__init1_$1
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*) 53271
Simplifying constant pointer cast (byte*) 53276
Simplifying constant pointer cast (byte*) 53277
Simplifying constant pointer cast (byte*) 53266
Simplifying constant pointer cast (byte*) 53280
Simplifying constant pointer cast (byte*) 53281
Simplifying constant pointer cast (byte*) 53265
Simplifying constant pointer cast (byte*) 53273
Simplifying constant pointer cast (byte*) 53274
Simplifying constant pointer cast (byte*) 0
Simplifying constant pointer cast (byte*) 1
Simplifying constant pointer cast (byte*) 53248
Simplifying constant pointer cast (byte*) 55296
Simplifying constant pointer cast (struct MOS6526_CIA*) 56320
Simplifying constant pointer cast (void()**) 65534
Simplifying constant pointer cast (byte*) 1024
Simplifying constant pointer cast (byte*) 8192
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast BORDER_XPOS_RIGHT
Simplifying constant integer cast 4
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant pointer cast (byte*) 0
Simplifying constant pointer cast (byte*) 40960
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast $8000
Simplifying constant integer cast $3e8
Simplifying constant integer cast 1
Simplifying constant integer cast $3e7
Simplifying constant integer cast $3e7
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast 1
Simplifying constant integer cast $ff
Simplifying constant integer cast $28
Simplifying constant integer cast $40
Simplifying constant integer cast 8
Simplifying constant integer cast 3
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast $40
Simplifying constant integer cast 8
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant integer cast 4
Simplifying constant integer cast 0
Simplifying constant integer cast $ff
Simplifying constant integer cast 2
Simplifying constant integer cast 4
Simplifying constant integer cast 2
Simplifying constant integer cast $ff
Simplifying constant integer cast 8
Simplifying constant integer cast BORDER_XPOS_LEFT/(unumber)8
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast BORDER_YPOS_TOP/(unumber)8
Simplifying constant integer cast 8
Simplifying constant integer cast $3e7
Simplifying constant integer cast $13
Simplifying constant integer cast 2
Simplifying constant integer cast $27
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $80
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast NUM_PROCESSING*(unumber)$40
Simplifying constant integer cast $40
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $100
Simplifying constant integer cast $7f
Simplifying constant integer cast $80
Simplifying constant integer cast $3e8
Simplifying constant integer cast $3e8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 4
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 2
Finalized signed number type (signed byte) 0
Finalized unsigned number type (byte) 2
Finalized signed number type (signed byte) 2
Finalized signed number type (signed byte) 2
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 0
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 1
Finalized signed number type (signed byte) 1
Finalized unsigned number type (byte) 1
Finalized signed number type (signed byte) 0
Finalized unsigned number type (word) $8000
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $ff
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 8
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (byte) $13
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $27
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $100
Finalized unsigned number type (byte) $7f
Finalized unsigned number type (byte) $80
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (word) $3e8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to word in atan2_16::$12 = $8000 - atan2_16::angle#9
Inferred type updated to word in getCharToProcess::$8 = getCharToProcess::$11 * $28
Inferred type updated to word in startProcessing::$0 = startProcessing::$23 * $28
Inferred type updated to word in startProcessing::$1 = startProcessing::$0 + startProcessing::center_x#1
Inferred type updated to word in startProcessing::$4 = startProcessing::$24 * $40
Inferred type updated to word in startProcessing::$6 = startProcessing::$25 * 8
Inferred type updated to word in startProcessing::$8 = startProcessing::$26 * 8
Inferred type updated to word in startProcessing::$9 = BORDER_XPOS_LEFT + startProcessing::$8
Inferred type updated to word in startProcessing::$10 = startProcessing::$9 << 4
Inferred type updated to word in startProcessing::$11 = startProcessing::$27 * 8
Inferred type updated to word in startProcessing::$12 = BORDER_YPOS_TOP + startProcessing::$11
Inferred type updated to word in startProcessing::$13 = startProcessing::$12 << 4
Inferred type updated to byte in startProcessing::$15 = startProcessing::spriteIdx#1 * 8
Inferred type updated to byte in processChars::$2 = 1 << *processChars::$31
Inferred type updated to byte in processChars::$10 = $ff ^ processChars::bitmask#3
Inferred type updated to byte in processChars::$11 = processChars::i#4 * 2
Inferred type updated to byte in processChars::$13 = processChars::i#4 * 2
Inferred type updated to byte in processChars::$25 = $ff ^ processChars::bitmask#4
Inferred type updated to word in processChars::$21 = processChars::xpos#2 / 8
Inferred type updated to byte in processChars::$22 = processChars::$73 - BORDER_XPOS_LEFT/8
Inferred type updated to byte in processChars::$23 = processChars::ypos#1 / 8
Inferred type updated to byte in processChars::$24 = processChars::$79 - BORDER_YPOS_TOP/8
Inferred type updated to byte in init_angle_screen::$3 = init_angle_screen::x#3 * 2
Inferred type updated to byte in init_angle_screen::$4 = $27 - init_angle_screen::$3
Inferred type updated to byte in init_angle_screen::$5 = init_angle_screen::y#2 * 2
Inferred type updated to word in init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80
Inferred type updated to byte in init_angle_screen::$8 = > init_angle_screen::$7
Inferred type updated to byte in init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0
Inferred type updated to byte in init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0
Inversing boolean not [32] atan2_16::$17 = atan2_16::yi#3 != 0 from [31] atan2_16::$16 = atan2_16::yi#3 == 0
Inversing boolean not [41] atan2_16::$11 = atan2_16::x#4 >= 0 from [40] atan2_16::$10 = atan2_16::x#4 < 0
Inversing boolean not [52] atan2_16::$19 = 0 == atan2_16::shift#4 from [51] atan2_16::$24 = 0 != atan2_16::shift#4
Inversing boolean not [76] atan2_16::$14 = atan2_16::y#4 >= 0 from [75] atan2_16::$13 = atan2_16::y#4 < 0
Inversing boolean not [130] main::$7 = main::center_dist#0 != NOT_FOUND from [129] main::$6 = main::center_dist#0 == NOT_FOUND
Inversing boolean not [154] getCharToProcess::$3 = getCharToProcess::screen_line#2[getCharToProcess::x#2] == ' ' from [153] getCharToProcess::$2 = getCharToProcess::screen_line#2[getCharToProcess::x#2] != ' '
Inversing boolean not [163] getCharToProcess::$5 = getCharToProcess::dist#0 >= getCharToProcess::closest_dist#2 from [162] getCharToProcess::$4 = getCharToProcess::dist#0 < getCharToProcess::closest_dist#2
Inversing boolean not [177] getCharToProcess::$1 = getCharToProcess::closest_dist#3 == NOT_FOUND from [176] getCharToProcess::$0 = getCharToProcess::closest_dist#3 != NOT_FOUND
Inversing boolean not [203] startProcessing::$17 = ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$21] != STATUS_FREE from [202] startProcessing::$16 = ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$21] == STATUS_FREE
Inversing boolean not [284] processChars::$4 = *processChars::$32 == STATUS_FREE from [283] processChars::$3 = *processChars::$32 != STATUS_FREE
Inversing boolean not [294] processChars::$6 = *processChars::$33 != STATUS_NEW from [293] processChars::$5 = *processChars::$33 == STATUS_NEW
Successful SSA optimization Pass2UnaryNotSimplification
Alias malloc::mem#0 = malloc::$0
Alias malloc::return#0 = malloc::return#4 malloc::return#1
Alias heap_head#0 = heap_head#7 heap_head#1
Alias atan2_16::y#1 = atan2_16::y#2 atan2_16::$3 atan2_16::y#3
Alias atan2_16::x#5 = atan2_16::x#9 atan2_16::x#6
Alias atan2_16::$2 = atan2_16::$1
Alias atan2_16::yi#0 = atan2_16::$4 atan2_16::yi#12 atan2_16::yi#13
Alias atan2_16::x#1 = atan2_16::x#2 atan2_16::$8 atan2_16::x#3
Alias atan2_16::y#12 = atan2_16::y#15 atan2_16::y#13
Alias atan2_16::$7 = atan2_16::$6
Alias atan2_16::xi#0 = atan2_16::$9
Alias atan2_16::xi#3 = atan2_16::xi#6 atan2_16::xd#0
Alias atan2_16::yi#3 = atan2_16::yi#4 atan2_16::yd#0
Alias atan2_16::i#2 = atan2_16::i#6 atan2_16::shift#0
Alias atan2_16::angle#12 = atan2_16::angle#19
Alias atan2_16::x#17 = atan2_16::x#7
Alias atan2_16::y#19 = atan2_16::y#7
Alias atan2_16::xd#3 = atan2_16::xd#7 atan2_16::xd#8 atan2_16::xd#4
Alias atan2_16::yd#3 = atan2_16::yd#7 atan2_16::yd#8 atan2_16::yd#4
Alias atan2_16::shift#2 = atan2_16::shift#3 atan2_16::shift#4
Alias atan2_16::yi#10 = atan2_16::yi#15 atan2_16::yi#14 atan2_16::yi#11
Alias atan2_16::xi#10 = atan2_16::xi#12 atan2_16::xi#11 atan2_16::xi#9
Alias atan2_16::i#10 = atan2_16::i#11 atan2_16::i#8 atan2_16::i#9
Alias atan2_16::angle#16 = atan2_16::angle#20 atan2_16::angle#18 atan2_16::angle#17
Alias atan2_16::x#14 = atan2_16::x#18 atan2_16::x#16 atan2_16::x#15
Alias atan2_16::y#16 = atan2_16::y#20 atan2_16::y#18 atan2_16::y#17
Alias atan2_16::xi#4 = atan2_16::xi#7 atan2_16::xi#5
Alias atan2_16::yd#5 = atan2_16::yd#9 atan2_16::yd#6
Alias atan2_16::yi#5 = atan2_16::yi#6 atan2_16::yi#7
Alias atan2_16::xd#5 = atan2_16::xd#9 atan2_16::xd#6
Alias atan2_16::i#3 = atan2_16::i#7 atan2_16::i#4
Alias atan2_16::angle#14 = atan2_16::angle#7 atan2_16::angle#8
Alias atan2_16::x#11 = atan2_16::x#13 atan2_16::x#12
Alias atan2_16::y#10 = atan2_16::y#14 atan2_16::y#11
Alias atan2_16::angle#1 = atan2_16::angle#9
Alias atan2_16::y#5 = atan2_16::y#6
Alias atan2_16::angle#4 = atan2_16::$12
Alias atan2_16::return#0 = atan2_16::angle#10 atan2_16::return#3 atan2_16::return#1
Alias atan2_16::angle#11 = atan2_16::angle#15
Alias atan2_16::angle#5 = atan2_16::$15
Alias SCREEN_COPY#2 = SCREEN_COPY#6
Alias SCREEN_DIST#17 = SCREEN_DIST#2
Alias main::src#2 = main::src#3
Alias main::dst#2 = main::dst#3
Alias SCREEN_COPY#25 = SCREEN_COPY#27 SCREEN_COPY#26
Alias SCREEN_DIST#15 = SCREEN_DIST#18 SCREEN_DIST#16
Alias SCREEN_COPY#11 = SCREEN_COPY#18 SCREEN_COPY#23 SCREEN_COPY#14
Alias SCREEN_DIST#10 = SCREEN_DIST#12 SCREEN_DIST#14 SCREEN_DIST#8
Alias getCharToProcess::return_x#0 = getCharToProcess::return_x#3
Alias getCharToProcess::return_y#0 = getCharToProcess::return_y#3
Alias getCharToProcess::return_dist#0 = getCharToProcess::return_dist#3
Alias SCREEN_COPY#12 = SCREEN_COPY#19 SCREEN_COPY#7 SCREEN_COPY#15
Alias SCREEN_DIST#11 = SCREEN_DIST#13 SCREEN_DIST#6 SCREEN_DIST#9
Alias main::center_x#0 = main::$5_x main::center_x#1
Alias main::center_y#0 = main::$5_y main::center_y#1
Alias main::center_dist#0 = main::$5_dist main::center_dist#1
Alias getCharToProcess::dist_line#2 = getCharToProcess::dist_line#4 getCharToProcess::dist_line#7
Alias getCharToProcess::x#2 = getCharToProcess::x#4 getCharToProcess::x#5 getCharToProcess::closest_x#1
Alias getCharToProcess::closest_dist#2 = getCharToProcess::closest_dist#5
Alias getCharToProcess::y#2 = getCharToProcess::y#4 getCharToProcess::y#6 getCharToProcess::closest_y#1
Alias getCharToProcess::screen_line#2 = getCharToProcess::screen_line#6 getCharToProcess::screen_line#7
Alias getCharToProcess::closest_x#7 = getCharToProcess::closest_x#8
Alias getCharToProcess::closest_y#7 = getCharToProcess::closest_y#8
Alias SCREEN_COPY#20 = SCREEN_COPY#21 SCREEN_COPY#22
Alias getCharToProcess::dist#0 = getCharToProcess::dist#1 getCharToProcess::closest_dist#1
Alias getCharToProcess::screen_line#3 = getCharToProcess::screen_line#5
Alias getCharToProcess::dist_line#3 = getCharToProcess::dist_line#5
Alias getCharToProcess::y#3 = getCharToProcess::y#5
Alias getCharToProcess::closest_dist#3 = getCharToProcess::closest_dist#6 getCharToProcess::closest_dist#9 getCharToProcess::closest_dist#7
Alias getCharToProcess::closest_x#3 = getCharToProcess::closest_x#5 getCharToProcess::closest_x#6 getCharToProcess::closest_x#4
Alias getCharToProcess::closest_y#3 = getCharToProcess::closest_y#5 getCharToProcess::closest_y#6 getCharToProcess::closest_y#4
Alias SCREEN_COPY#13 = SCREEN_COPY#16 SCREEN_COPY#8 SCREEN_COPY#4
Alias getCharToProcess::return_x#1 = getCharToProcess::closest_x#2 getCharToProcess::return_x#4 getCharToProcess::return_x#2
Alias getCharToProcess::return_y#1 = getCharToProcess::closest_y#2 getCharToProcess::return_y#4 getCharToProcess::return_y#2
Alias getCharToProcess::return_dist#1 = getCharToProcess::closest_dist#4 getCharToProcess::return_dist#4 getCharToProcess::return_dist#2
Alias startProcessing::i#2 = startProcessing::i#3 startProcessing::i#4 startProcessing::freeIdx#1
Alias startProcessing::freeIdx#4 = startProcessing::freeIdx#5
Alias startProcessing::center_y#5 = startProcessing::center_y#7 startProcessing::center_y#6
Alias startProcessing::center_x#5 = startProcessing::center_x#7 startProcessing::center_x#6
Alias startProcessing::freeIdx#2 = startProcessing::freeIdx#3 startProcessing::spriteIdx#0
Alias startProcessing::center_y#1 = startProcessing::center_y#3
Alias startProcessing::center_x#1 = startProcessing::center_x#3
Alias startProcessing::offset#0 = startProcessing::$1
Alias startProcessing::colPtr#0 = startProcessing::$2
Alias startProcessing::screenPtr#0 = startProcessing::$3
Alias startProcessing::spriteData#0 = startProcessing::$5
Alias startProcessing::chargenData#0 = startProcessing::$7
Alias startProcessing::center_x#2 = startProcessing::center_x#4
Alias startProcessing::center_y#2 = startProcessing::center_y#4
Alias startProcessing::spriteIdx#1 = startProcessing::spriteIdx#2
Alias startProcessing::spriteCol#1 = startProcessing::spriteCol#2
Alias startProcessing::screenPtr#1 = startProcessing::screenPtr#2
Alias startProcessing::spriteX#0 = startProcessing::$10
Alias startProcessing::spriteY#0 = startProcessing::$13
Alias startProcessing::spritePtr#0 = startProcessing::$14
Alias processChars::processing#0 = processChars::$1 processChars::processing#1 processChars::processing#3
Alias processChars::bitmask#0 = processChars::$2 processChars::bitmask#5 processChars::bitmask#1
Alias processChars::i#11 = processChars::i#2 processChars::i#12
Alias processChars::numActive#13 = processChars::numActive#9 processChars::numActive#14
Alias processChars::xpos#0 = processChars::$8 processChars::xpos#3 processChars::xpos#4
Alias processChars::bitmask#2 = processChars::bitmask#6 processChars::bitmask#3
Alias processChars::i#6 = processChars::i#8 processChars::i#7
Alias processChars::processing#2 = processChars::processing#7 processChars::processing#8
Alias processChars::numActive#10 = processChars::numActive#12 processChars::numActive#11
Alias processChars::processing#4 = processChars::processing#5 processChars::processing#6
Alias processChars::bitmask#4 = processChars::bitmask#7
Alias processChars::numActive#4 = processChars::numActive#7 processChars::numActive#5
Alias processChars::i#10 = processChars::i#9 processChars::i#4
Alias processChars::xpos#1 = processChars::xpos#2
Alias processChars::ypos#0 = processChars::ypos#1
Alias processChars::xchar#0 = processChars::$22
Alias processChars::ychar#0 = processChars::$24
Alias processChars::numActive#3 = processChars::numActive#6 processChars::numActive#8
Alias init_angle_screen::screen_topline#0 = init_angle_screen::$0
Alias init_angle_screen::screen_bottomline#0 = init_angle_screen::$1
Alias init_angle_screen::x#2 = init_angle_screen::x#3 init_angle_screen::x#4
Alias init_angle_screen::y#2 = init_angle_screen::y#4 init_angle_screen::y#6 init_angle_screen::y#3
Alias init_angle_screen::screen_bottomline#2 = init_angle_screen::screen_bottomline#4 init_angle_screen::screen_bottomline#5 init_angle_screen::screen_bottomline#3
Alias init_angle_screen::xb#2 = init_angle_screen::xb#3 init_angle_screen::xb#4
Alias init_angle_screen::screen_topline#2 = init_angle_screen::screen_topline#4 init_angle_screen::screen_topline#5 init_angle_screen::screen_topline#3
Alias atan2_16::return#2 = atan2_16::return#4
Alias init_angle_screen::angle_w#0 = init_angle_screen::$6
Alias init_angle_screen::ang_w#0 = init_angle_screen::$8
Alias initSprites::sp#2 = initSprites::sp#3
Alias setupRasterIrq::raster#1 = setupRasterIrq::raster#3 setupRasterIrq::raster#4
Alias setupRasterIrq::irqRoutine#2 = setupRasterIrq::irqRoutine#4 setupRasterIrq::irqRoutine#3
Alias malloc::return#2 = malloc::return#5
Alias heap_head#3 = heap_head#8
Alias malloc::return#3 = malloc::return#6
Alias SCREEN_COPY#0 = SCREEN_COPY#17 SCREEN_COPY#10 SCREEN_COPY#9 SCREEN_COPY#5 SCREEN_COPY#1
Alias heap_head#10 = heap_head#4 heap_head#9 heap_head#12 heap_head#11 heap_head#5
Alias SCREEN_DIST#0 = SCREEN_DIST#5 SCREEN_DIST#7 SCREEN_DIST#4 SCREEN_DIST#1
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) getCharToProcess::x#2 = getCharToProcess::x#3
Alias candidate removed (phi-usage) getCharToProcess::y#2 = getCharToProcess::y#3
Alias atan2_16::x#1 = atan2_16::x#5 atan2_16::x#10
Alias atan2_16::y#1 = atan2_16::y#12 atan2_16::y#9
Alias atan2_16::yi#0 = atan2_16::yi#9
Alias atan2_16::yi#10 = atan2_16::yi#5
Alias atan2_16::xi#10 = atan2_16::xi#4
Alias atan2_16::i#10 = atan2_16::i#3 atan2_16::i#5
Alias atan2_16::angle#14 = atan2_16::angle#16
Alias atan2_16::x#11 = atan2_16::x#14 atan2_16::x#8
Alias atan2_16::y#10 = atan2_16::y#16 atan2_16::y#8
Alias atan2_16::y#4 = atan2_16::y#5
Alias getCharToProcess::screen_line#2 = getCharToProcess::screen_line#3
Alias getCharToProcess::dist_line#2 = getCharToProcess::dist_line#3
Alias SCREEN_COPY#13 = SCREEN_COPY#20
Alias getCharToProcess::return_x#1 = getCharToProcess::closest_x#3
Alias getCharToProcess::return_y#1 = getCharToProcess::closest_y#3
Alias getCharToProcess::return_dist#1 = getCharToProcess::closest_dist#3
Alias startProcessing::center_y#1 = startProcessing::center_y#5
Alias startProcessing::center_x#1 = startProcessing::center_x#5
Alias processChars::processing#0 = processChars::processing#2 processChars::processing#4
Alias processChars::bitmask#0 = processChars::bitmask#2 processChars::bitmask#4
Alias processChars::i#10 = processChars::i#6 processChars::i#11 processChars::i#5
Alias processChars::numActive#10 = processChars::numActive#13 processChars::numActive#4 processChars::numActive#2
Alias processChars::xpos#0 = processChars::xpos#1
Alias setupRasterIrq::raster#1 = setupRasterIrq::raster#2
Alias setupRasterIrq::irqRoutine#1 = setupRasterIrq::irqRoutine#2
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) getCharToProcess::x#2 = getCharToProcess::x#3
Alias candidate removed (phi-usage) getCharToProcess::y#2 = getCharToProcess::y#3
Alias processChars::i#10 = processChars::i#3
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) getCharToProcess::x#2 = getCharToProcess::x#3
Alias candidate removed (phi-usage) getCharToProcess::y#2 = getCharToProcess::y#3
Identical Phi Values atan2_16::y#1 atan2_16::y#0
Identical Phi Values atan2_16::x#1 atan2_16::x#0
Identical Phi Values atan2_16::yi#10 atan2_16::yi#3
Identical Phi Values atan2_16::xi#10 atan2_16::xi#3
Identical Phi Values atan2_16::i#10 atan2_16::i#2
Identical Phi Values atan2_16::angle#14 atan2_16::angle#12
Identical Phi Values atan2_16::x#11 atan2_16::x#17
Identical Phi Values atan2_16::y#10 atan2_16::y#19
Identical Phi Values SCREEN_DIST#17 SCREEN_DIST#0
Identical Phi Values SCREEN_COPY#2 SCREEN_COPY#0
Identical Phi Values SCREEN_COPY#25 SCREEN_COPY#2
Identical Phi Values SCREEN_DIST#15 SCREEN_DIST#17
Identical Phi Values SCREEN_COPY#11 SCREEN_COPY#25
Identical Phi Values SCREEN_DIST#10 SCREEN_DIST#15
Identical Phi Values SCREEN_COPY#12 SCREEN_COPY#11
Identical Phi Values SCREEN_DIST#11 SCREEN_DIST#10
Identical Phi Values SCREEN_COPY#3 SCREEN_COPY#12
Identical Phi Values SCREEN_DIST#3 SCREEN_DIST#11
Identical Phi Values getCharToProcess::screen_line#2 getCharToProcess::screen_line#4
Identical Phi Values getCharToProcess::dist_line#2 getCharToProcess::dist_line#6
Identical Phi Values SCREEN_COPY#13 SCREEN_COPY#24
Identical Phi Values getCharToProcess::x#3 getCharToProcess::x#2
Identical Phi Values getCharToProcess::y#3 getCharToProcess::y#2
Identical Phi Values startProcessing::center_y#9 startProcessing::center_y#0
Identical Phi Values startProcessing::center_x#9 startProcessing::center_x#0
Identical Phi Values startProcessing::freeIdx#4 startProcessing::freeIdx#6
Identical Phi Values startProcessing::center_y#1 startProcessing::center_y#8
Identical Phi Values startProcessing::center_x#1 startProcessing::center_x#8
Identical Phi Values startProcessing::center_x#2 startProcessing::center_x#1
Identical Phi Values startProcessing::center_y#2 startProcessing::center_y#1
Identical Phi Values startProcessing::spriteIdx#1 startProcessing::freeIdx#2
Identical Phi Values startProcessing::spriteCol#1 startProcessing::spriteCol#0
Identical Phi Values startProcessing::screenPtr#1 startProcessing::screenPtr#0
Identical Phi Values init_angle_screen::screen#1 init_angle_screen::screen#0
Identical Phi Values init_angle_screen::y#2 init_angle_screen::y#5
Identical Phi Values init_angle_screen::screen_topline#2 init_angle_screen::screen_topline#6
Identical Phi Values init_angle_screen::screen_bottomline#2 init_angle_screen::screen_bottomline#6
Identical Phi Values setupRasterIrq::raster#1 setupRasterIrq::raster#0
Identical Phi Values setupRasterIrq::irqRoutine#1 setupRasterIrq::irqRoutine#0
Identical Phi Values heap_head#3 heap_head#0
Identical Phi Values heap_head#10 heap_head#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values atan2_16::x#17 atan2_16::x#0
Identical Phi Values atan2_16::y#19 atan2_16::y#0
Identical Phi Values atan2_16::x#4 atan2_16::x#17
Identical Phi Values atan2_16::y#4 atan2_16::y#19
Identical Phi Values SCREEN_COPY#24 SCREEN_COPY#0
Identical Phi Values getCharToProcess::y#2 getCharToProcess::y#7
Identical Phi Values startProcessing::center_y#8 startProcessing::center_y#0
Identical Phi Values startProcessing::center_x#8 startProcessing::center_x#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [335] processChars::$13 = processChars::i#10 * 2
Identified duplicate assignment right side [406] init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0 + (word)$28*$c
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition atan2_16::$0 [7] if(atan2_16::y#0>=0) goto atan2_16::@1
Simple Condition atan2_16::$5 [11] if(atan2_16::x#0>=0) goto atan2_16::@4
Simple Condition atan2_16::$17 [18] if(atan2_16::yi#3!=0) goto atan2_16::@11
Simple Condition atan2_16::$11 [22] if(atan2_16::x#0>=0) goto atan2_16::@7
Simple Condition atan2_16::$18 [25] if(atan2_16::shift#2>=2) goto atan2_16::@14
Simple Condition atan2_16::$19 [30] if(0==atan2_16::shift#2) goto atan2_16::@17
Simple Condition atan2_16::$20 [33] if(atan2_16::yi#3>=0) goto atan2_16::@18
Simple Condition atan2_16::$21 [47] if(atan2_16::i#1!=rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@10
Simple Condition atan2_16::$14 [50] if(atan2_16::y#0>=0) goto atan2_16::@8
Simple Condition main::$3 [62] if(main::src#2!=SCREEN+$3e8) goto main::@2
Simple Condition main::$4 [72] if(main::i#1!=rangelast(0,NUM_PROCESSING-1)) goto main::@4
Simple Condition main::$7 [86] if(main::center_dist#0!=NOT_FOUND) goto main::@7
Simple Condition getCharToProcess::$3 [107] if(getCharToProcess::screen_line#4[getCharToProcess::x#2]==' ') goto getCharToProcess::@4
Simple Condition getCharToProcess::$6 [111] if(getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@3
Simple Condition getCharToProcess::$5 [114] if(getCharToProcess::dist#0>=getCharToProcess::closest_dist#2) goto getCharToProcess::@4
Simple Condition getCharToProcess::$7 [119] if(getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@2
Simple Condition getCharToProcess::$1 [121] if(getCharToProcess::return_dist#1==NOT_FOUND) goto getCharToProcess::@1
Simple Condition startProcessing::$17 [137] if(((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$21]!=STATUS_FREE) goto startProcessing::@3
Simple Condition startProcessing::$18 [140] if(startProcessing::i#1!=rangelast(0,NUM_PROCESSING-1)) goto startProcessing::@2
Simple Condition startProcessing::$19 [143] if(startProcessing::freeIdx#2==$ff) goto startProcessing::@1
Simple Condition startProcessing::$20 [166] if(startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@7
Simple Condition processChars::$4 [201] if(*processChars::$32==STATUS_FREE) goto processChars::@2
Simple Condition processChars::$26 [205] if(processChars::i#1!=rangelast(0,NUM_PROCESSING-1)) goto processChars::@1
Simple Condition processChars::$6 [209] if(*processChars::$33!=STATUS_NEW) goto processChars::@3
Simple Condition processChars::$85 [215] if(0!=processChars::$9) goto processChars::@4
Simple Condition init_angle_screen::$2 [313] if(init_angle_screen::x#2<=$13) goto init_angle_screen::@3
Simple Condition init_angle_screen::$12 [341] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1
Simple Condition initSprites::$0 [346] if(initSprites::sp#2<SPRITE_DATA+NUM_PROCESSING*$40) goto initSprites::@2
Simple Condition initSprites::$1 [354] if(initSprites::i#1!=rangelast(0,7)) goto initSprites::@4
Simple Condition setupRasterIrq::$0 [365] if(setupRasterIrq::raster#0<$100) goto setupRasterIrq::@1
Simple Condition irqTop::$1 [383] if(irqTop::i#1!=rangelast(0,4)) goto irqTop::@3
Simple Condition irqTop::$2 [390] if(irqTop::i1#1!=rangelast(0,7)) goto irqTop::@5
Simple Condition irqBottom::$3 [403] if(irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@5
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting || if()-condition to two if()s [259] processChars::$20 = processChars::$18 || processChars::$19
Rewriting || if()-condition to two if()s [255] processChars::$18 = processChars::$16 || processChars::$17
Rewriting || if()-condition to two if()s [251] processChars::$16 = processChars::$14 || processChars::$15
Rewriting ! if()-condition to reversed if() [299] processChars::$0 = ! DEBUG
Rewriting ! if()-condition to reversed if() [374] irqTop::$0 = ! DEBUG
Rewriting ! if()-condition to reversed if() [394] irqBottom::$0 = ! DEBUG
Rewriting ! if()-condition to reversed if() [397] irqBottom::$2 = ! DEBUG
Successful SSA optimization Pass2ConditionalAndOrRewriting
Negating conditional jump and destination [47] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12
Constant atan2_16::angle#0 = 0
Constant atan2_16::i#0 = 0
Constant main::src#0 = SCREEN
Constant main::i#0 = 0
Constant setupRasterIrq::raster#0 = RASTER_IRQ_TOP
Constant setupRasterIrq::irqRoutine#0 = &irqTop
Constant getCharToProcess::closest_x#0 = 0
Constant getCharToProcess::closest_y#0 = 0
Constant getCharToProcess::closest_dist#0 = NOT_FOUND
Constant getCharToProcess::y#0 = 0
Constant getCharToProcess::x#0 = 0
Constant startProcessing::freeIdx#0 = $ff
Constant startProcessing::i#0 = 0
Constant startProcessing::i1#0 = 0
Constant processChars::numActive#0 = 0
Constant processChars::i#0 = 0
Constant init_angle_screen::y#0 = 0
Constant init_angle_screen::x#0 = 0
Constant init_angle_screen::xb#0 = $27
Constant initSprites::sp#0 = SPRITE_DATA
Constant initSprites::i#0 = 0
Constant irqTop::i#0 = 0
Constant irqTop::i1#0 = 0
Constant irqBottom::i#0 = 0
Constant heap_head#2 = HEAP_TOP
Constant malloc::size#0 = $3e8
Constant malloc::size#1 = $3e8
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [91] if(true) goto main::@6
if() condition always true - replacing block destination [94] if(true) goto main::@9
if() condition always false - eliminating [300] if(DEBUG) goto processChars::@13
if() condition always true - replacing block destination [365] if(setupRasterIrq::raster#0<$100) goto setupRasterIrq::@1
if() condition always false - eliminating [375] if(DEBUG) goto irqTop::@2
if() condition always false - eliminating [395] if(DEBUG) goto irqBottom::@3
if() condition always false - eliminating [398] if(DEBUG) goto irqBottom::@4
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [45] atan2_16::i#1 = ++ atan2_16::i#2 to ++
Resolved ranged comparison value [47] if(atan2_16::i#1==rangelast(0,CORDIC_ITERATIONS_16-1)) goto atan2_16::@12 to CORDIC_ITERATIONS_16-1+1
Resolved ranged next value [70] main::i#1 = ++ main::i#2 to ++
Resolved ranged comparison value [72] if(main::i#1!=rangelast(0,NUM_PROCESSING-1)) goto main::@4 to NUM_PROCESSING-1+1
Resolved ranged next value [109] getCharToProcess::x#1 = ++ getCharToProcess::x#2 to ++
Resolved ranged comparison value [111] if(getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@3 to $28
Resolved ranged next value [117] getCharToProcess::y#1 = ++ getCharToProcess::y#7 to ++
Resolved ranged comparison value [119] if(getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@2 to $19
Resolved ranged next value [138] startProcessing::i#1 = ++ startProcessing::i#2 to ++
Resolved ranged comparison value [140] if(startProcessing::i#1!=rangelast(0,NUM_PROCESSING-1)) goto startProcessing::@2 to NUM_PROCESSING-1+1
Resolved ranged next value [164] startProcessing::i1#1 = ++ startProcessing::i1#2 to ++
Resolved ranged comparison value [166] if(startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@7 to 8
Resolved ranged next value [203] processChars::i#1 = ++ processChars::i#10 to ++
Resolved ranged comparison value [205] if(processChars::i#1!=rangelast(0,NUM_PROCESSING-1)) goto processChars::@1 to NUM_PROCESSING-1+1
Resolved ranged next value [339] init_angle_screen::y#1 = ++ init_angle_screen::y#5 to ++
Resolved ranged comparison value [341] if(init_angle_screen::y#1!=rangelast(0,$c)) goto init_angle_screen::@1 to $d
Resolved ranged next value [352] initSprites::i#1 = ++ initSprites::i#2 to ++
Resolved ranged comparison value [354] if(initSprites::i#1!=rangelast(0,7)) goto initSprites::@4 to 8
Resolved ranged next value [381] irqTop::i#1 = ++ irqTop::i#2 to ++
Resolved ranged comparison value [383] if(irqTop::i#1!=rangelast(0,4)) goto irqTop::@3 to 5
Resolved ranged next value [388] irqTop::i1#1 = ++ irqTop::i1#2 to ++
Resolved ranged comparison value [390] if(irqTop::i1#1!=rangelast(0,7)) goto irqTop::@5 to 8
Resolved ranged next value [401] irqBottom::i#1 = ++ irqBottom::i#2 to ++
Resolved ranged comparison value [403] if(irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@5 to 5
Rewriting conditional comparison [313] if(init_angle_screen::x#2<=$13) goto init_angle_screen::@3
Converting *(pointer+n) to pointer[n] [127] *getCharToProcess::$10 = ' ' -- getCharToProcess::$9[getCharToProcess::return_x#1]
Converting *(pointer+n) to pointer[n] [197] processChars::bitmask#0 = 1 << *processChars::$31 -- processChars::$57[OFFSET_STRUCT_PROCESSINGSPRITE_ID]
Converting *(pointer+n) to pointer[n] [201] if(*processChars::$32==STATUS_FREE) goto processChars::@2 -- processChars::$58[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]
Converting *(pointer+n) to pointer[n] [209] if(*processChars::$33!=STATUS_NEW) goto processChars::@3 -- processChars::$59[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]
Converting *(pointer+n) to pointer[n] [212] processChars::xpos#0 = *processChars::$34 >> 4 -- processChars::$60[OFFSET_STRUCT_PROCESSINGSPRITE_X]
Converting *(pointer+n) to pointer[n] [218] *(*processChars::$35) = ' ' -- processChars::$61[OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR]
Converting *(pointer+n) to pointer[n] [224] SPRITES_COLOR[*processChars::$37] = *processChars::$36 -- processChars::$62[OFFSET_STRUCT_PROCESSINGSPRITE_COL]
Converting *(pointer+n) to pointer[n] [224] SPRITES_COLOR[*processChars::$37] = processChars::$62[OFFSET_STRUCT_PROCESSINGSPRITE_COL] -- processChars::$63[OFFSET_STRUCT_PROCESSINGSPRITE_ID]
Converting *(pointer+n) to pointer[n] [227] processChars::$7 = SCREEN+OFFSET_SPRITE_PTRS + *processChars::$38 -- processChars::$64[OFFSET_STRUCT_PROCESSINGSPRITE_ID]
Converting *(pointer+n) to pointer[n] [230] *processChars::$7 = *processChars::$39 -- processChars::$65[OFFSET_STRUCT_PROCESSINGSPRITE_PTR]
Converting *(pointer+n) to pointer[n] [230] *processChars::$7 = processChars::$65[OFFSET_STRUCT_PROCESSINGSPRITE_PTR] -- (SCREEN+OFFSET_SPRITE_PTRS)[processChars::$64[OFFSET_STRUCT_PROCESSINGSPRITE_ID]]
Converting *(pointer+n) to pointer[n] [233] *processChars::$40 = STATUS_PROCESSING -- processChars::$66[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]
Converting *(pointer+n) to pointer[n] [241] processChars::$12 = *processChars::$41 >> 4 -- processChars::$67[OFFSET_STRUCT_PROCESSINGSPRITE_Y]
Converting *(pointer+n) to pointer[n] [247] processChars::$14 = *processChars::$42 < XPOS_LEFTMOST -- processChars::$68[OFFSET_STRUCT_PROCESSINGSPRITE_X]
Converting *(pointer+n) to pointer[n] [250] processChars::$15 = *processChars::$43 > XPOS_RIGHTMOST -- processChars::$69[OFFSET_STRUCT_PROCESSINGSPRITE_X]
Converting *(pointer+n) to pointer[n] [254] processChars::$17 = *processChars::$44 < YPOS_TOPMOST -- processChars::$70[OFFSET_STRUCT_PROCESSINGSPRITE_Y]
Converting *(pointer+n) to pointer[n] [258] processChars::$19 = *processChars::$45 > YPOS_BOTTOMMOST -- processChars::$71[OFFSET_STRUCT_PROCESSINGSPRITE_Y]
Converting *(pointer+n) to pointer[n] [263] *processChars::$46 = STATUS_FREE -- processChars::$72[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]
Converting *(pointer+n) to pointer[n] [274] *processChars::$48 = *processChars::$47 + VXSIN[processChars::$29] -- processChars::$74[OFFSET_STRUCT_PROCESSINGSPRITE_VX]
Converting *(pointer+n) to pointer[n] [274] *processChars::$48 = processChars::$74[OFFSET_STRUCT_PROCESSINGSPRITE_VX] + VXSIN[processChars::$29] -- processChars::$75[OFFSET_STRUCT_PROCESSINGSPRITE_VX]
Converting *(pointer+n) to pointer[n] [281] *processChars::$51 = *processChars::$49 + *processChars::$50 -- processChars::$76[OFFSET_STRUCT_PROCESSINGSPRITE_X]
Converting *(pointer+n) to pointer[n] [281] *processChars::$51 = processChars::$76[OFFSET_STRUCT_PROCESSINGSPRITE_X] + *processChars::$50 -- processChars::$77[OFFSET_STRUCT_PROCESSINGSPRITE_VX]
Converting *(pointer+n) to pointer[n] [281] *processChars::$51 = processChars::$76[OFFSET_STRUCT_PROCESSINGSPRITE_X] + processChars::$77[OFFSET_STRUCT_PROCESSINGSPRITE_VX] -- processChars::$78[OFFSET_STRUCT_PROCESSINGSPRITE_X]
Converting *(pointer+n) to pointer[n] [290] *processChars::$53 = *processChars::$52 + VYSIN[processChars::$30] -- processChars::$80[OFFSET_STRUCT_PROCESSINGSPRITE_VY]
Converting *(pointer+n) to pointer[n] [290] *processChars::$53 = processChars::$80[OFFSET_STRUCT_PROCESSINGSPRITE_VY] + VYSIN[processChars::$30] -- processChars::$81[OFFSET_STRUCT_PROCESSINGSPRITE_VY]
Converting *(pointer+n) to pointer[n] [297] *processChars::$56 = *processChars::$54 + *processChars::$55 -- processChars::$82[OFFSET_STRUCT_PROCESSINGSPRITE_Y]
Converting *(pointer+n) to pointer[n] [297] *processChars::$56 = processChars::$82[OFFSET_STRUCT_PROCESSINGSPRITE_Y] + *processChars::$55 -- processChars::$83[OFFSET_STRUCT_PROCESSINGSPRITE_VY]
Converting *(pointer+n) to pointer[n] [297] *processChars::$56 = processChars::$82[OFFSET_STRUCT_PROCESSINGSPRITE_Y] + processChars::$83[OFFSET_STRUCT_PROCESSINGSPRITE_VY] -- processChars::$84[OFFSET_STRUCT_PROCESSINGSPRITE_Y]
Successful SSA optimization Pass2InlineDerefIdx
Simplifying expression containing zero (word*)PROCESSING in [180] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_X)[startProcessing::$22] = startProcessing::spriteX#0
Simplifying expression containing zero processChars::$60 in [211] processChars::$34 = processChars::$60 + OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero processChars::$60 in [212] processChars::xpos#0 = processChars::$60[OFFSET_STRUCT_PROCESSINGSPRITE_X] >> 4
Simplifying expression containing zero processChars::$68 in [246] processChars::$42 = processChars::$68 + OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero processChars::$68 in [247] processChars::$14 = processChars::$68[OFFSET_STRUCT_PROCESSINGSPRITE_X] < XPOS_LEFTMOST
Simplifying expression containing zero processChars::$69 in [249] processChars::$43 = processChars::$69 + OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero processChars::$69 in [250] processChars::$15 = processChars::$69[OFFSET_STRUCT_PROCESSINGSPRITE_X] > XPOS_RIGHTMOST
Simplifying expression containing zero processChars::$76 in [276] processChars::$49 = processChars::$76 + OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero processChars::$78 in [280] processChars::$51 = processChars::$78 + OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero processChars::$76 in [281] processChars::$78[OFFSET_STRUCT_PROCESSINGSPRITE_X] = processChars::$76[OFFSET_STRUCT_PROCESSINGSPRITE_X] + processChars::$77[OFFSET_STRUCT_PROCESSINGSPRITE_VX]
Simplifying expression containing zero processChars::$78 in [281] processChars::$78[OFFSET_STRUCT_PROCESSINGSPRITE_X] = *processChars::$76 + processChars::$77[OFFSET_STRUCT_PROCESSINGSPRITE_VX]
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused variable startProcessing::center_dist#0 and assignment [68] startProcessing::center_dist#0 = main::center_dist#0
Eliminating unused variable getCharToProcess::return#0 and assignment [88] getCharToProcess::return#0 = struct-unwound {getCharToProcess::return_x#1, getCharToProcess::return_y#1, getCharToProcess::return_dist#1}
Eliminating unused variable getCharToProcess::$10 and assignment [92] getCharToProcess::$10 = getCharToProcess::$9 + getCharToProcess::return_x#1
Eliminating unused variable getCharToProcess::return#1 and assignment [94] getCharToProcess::return#1 = struct-unwound {getCharToProcess::return_x#1, getCharToProcess::return_y#1, getCharToProcess::return_dist#1}
Eliminating unused variable processChars::$31 and assignment [152] processChars::$31 = processChars::$57 + OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable processChars::$32 and assignment [155] processChars::$32 = processChars::$58 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable processChars::$33 and assignment [161] processChars::$33 = processChars::$59 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable processChars::$34 and assignment [164] processChars::$34 = processChars::$60
Eliminating unused variable processChars::$35 and assignment [169] processChars::$35 = processChars::$61 + OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Eliminating unused variable processChars::$36 and assignment [173] processChars::$36 = processChars::$62 + OFFSET_STRUCT_PROCESSINGSPRITE_COL
Eliminating unused variable processChars::$37 and assignment [175] processChars::$37 = processChars::$63 + OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable processChars::$38 and assignment [178] processChars::$38 = processChars::$64 + OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable processChars::$7 and assignment [179] processChars::$7 = SCREEN+OFFSET_SPRITE_PTRS + processChars::$64[OFFSET_STRUCT_PROCESSINGSPRITE_ID]
Eliminating unused variable processChars::$39 and assignment [181] processChars::$39 = processChars::$65 + OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Eliminating unused variable processChars::$40 and assignment [184] processChars::$40 = processChars::$66 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable processChars::$41 and assignment [192] processChars::$41 = processChars::$67 + OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable processChars::$42 and assignment [198] processChars::$42 = processChars::$68
Eliminating unused variable processChars::$43 and assignment [201] processChars::$43 = processChars::$69
Eliminating unused variable processChars::$44 and assignment [204] processChars::$44 = processChars::$70 + OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable processChars::$45 and assignment [207] processChars::$45 = processChars::$71 + OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable processChars::$46 and assignment [211] processChars::$46 = processChars::$72 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable processChars::$47 and assignment [220] processChars::$47 = processChars::$74 + OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable processChars::$48 and assignment [222] processChars::$48 = processChars::$75 + OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable processChars::$49 and assignment [225] processChars::$49 = processChars::$76
Eliminating unused variable processChars::$50 and assignment [227] processChars::$50 = processChars::$77 + OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable processChars::$51 and assignment [229] processChars::$51 = processChars::$78
Eliminating unused variable processChars::$52 and assignment [236] processChars::$52 = processChars::$80 + OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable processChars::$53 and assignment [238] processChars::$53 = processChars::$81 + OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable processChars::$54 and assignment [241] processChars::$54 = processChars::$82 + OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable processChars::$55 and assignment [243] processChars::$55 = processChars::$83 + OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable processChars::$56 and assignment [245] processChars::$56 = processChars::$84 + OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused constant DEBUG
Eliminating unused constant OFFSET_STRUCT_PROCESSINGSPRITE_X
Successful SSA optimization PassNEliminateUnusedVars
Eliminating variable processChars::$27 from unused block processChars::@13
Eliminating variable irqTop::i#2 from unused block irqTop::@3
Eliminating variable irqTop::i#1 from unused block irqTop::@3
Eliminating variable irqTop::i1#2 from unused block irqTop::@5
Eliminating variable irqTop::i1#1 from unused block irqTop::@5
Eliminating variable irqBottom::i#2 from unused block irqBottom::@5
Eliminating variable irqBottom::i#1 from unused block irqBottom::@5
Removing unused block main::@return
Removing unused block processChars::@13
Removing unused block setupRasterIrq::@3
Removing PHI-reference to removed block (irqTop::@2) in block irqTop::@3
Removing unused block irqTop::@2
Removing unused block irqTop::@3
Removing PHI-reference to removed block (irqTop::@4) in block irqTop::@5
Removing unused block irqTop::@4
Removing unused block irqTop::@5
Removing unused block irqTop::@6
Removing PHI-reference to removed block (irqBottom::@3) in block irqBottom::@5
Removing unused block irqBottom::@3
Removing unused block irqBottom::@5
Removing unused block irqBottom::@6
Removing unused block irqBottom::@4
Successful SSA optimization Pass2EliminateUnusedBlocks
Adding number conversion cast (unumber) CORDIC_ITERATIONS_16-1+1 in if(atan2_16::i#1==CORDIC_ITERATIONS_16-1+1) goto atan2_16::@12
Adding number conversion cast (unumber) 1 in if(atan2_16::i#1==(unumber)CORDIC_ITERATIONS_16-1+1) goto atan2_16::@12
Adding number conversion cast (unumber) NUM_PROCESSING-1+1 in if(main::i#1!=NUM_PROCESSING-1+1) goto main::@4
Adding number conversion cast (unumber) 1 in if(main::i#1!=(unumber)NUM_PROCESSING-1+1) goto main::@4
Adding number conversion cast (unumber) $28 in if(getCharToProcess::x#1!=$28) goto getCharToProcess::@3
Adding number conversion cast (unumber) $19 in if(getCharToProcess::y#1!=$19) goto getCharToProcess::@2
Adding number conversion cast (unumber) NUM_PROCESSING-1+1 in if(startProcessing::i#1!=NUM_PROCESSING-1+1) goto startProcessing::@2
Adding number conversion cast (unumber) 1 in if(startProcessing::i#1!=(unumber)NUM_PROCESSING-1+1) goto startProcessing::@2
Adding number conversion cast (unumber) 8 in if(startProcessing::i1#1!=8) goto startProcessing::@7
Adding number conversion cast (unumber) NUM_PROCESSING-1+1 in if(processChars::i#1!=NUM_PROCESSING-1+1) goto processChars::@1
Adding number conversion cast (unumber) 1 in if(processChars::i#1!=(unumber)NUM_PROCESSING-1+1) goto processChars::@1
Adding number conversion cast (unumber) $13+1 in if(init_angle_screen::x#2<$13+1) goto init_angle_screen::@3
Adding number conversion cast (unumber) 1 in if(init_angle_screen::x#2<(unumber)$13+1) goto init_angle_screen::@3
Adding number conversion cast (unumber) $d in if(init_angle_screen::y#1!=$d) goto init_angle_screen::@1
Adding number conversion cast (unumber) 8 in if(initSprites::i#1!=8) goto initSprites::@4
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast CORDIC_ITERATIONS_16-1+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast NUM_PROCESSING-1+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast $28
Simplifying constant integer cast $19
Simplifying constant integer cast NUM_PROCESSING-1+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast 8
Simplifying constant integer cast NUM_PROCESSING-1+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast processChars::$23
Simplifying constant integer cast $13+(unumber)1
Simplifying constant integer cast 1
Simplifying constant integer cast init_angle_screen::$4
Simplifying constant integer cast init_angle_screen::$5
Simplifying constant integer cast $d
Simplifying constant integer cast 8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $d
Finalized unsigned number type (byte) 8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias processChars::$13 = processChars::$11
Alias processChars::$79 = processChars::$23
Alias init_angle_screen::screen_bottomline#0 = init_angle_screen::screen_topline#0
Successful SSA optimization Pass2AliasElimination
Simple Condition processChars::$14 [187] if(*processChars::$68<XPOS_LEFTMOST) goto processChars::@6
Simple Condition processChars::$19 [289] if(processChars::$71[OFFSET_STRUCT_PROCESSINGSPRITE_Y]>YPOS_BOTTOMMOST) goto processChars::@6
Simple Condition processChars::$17 [290] if(processChars::$70[OFFSET_STRUCT_PROCESSINGSPRITE_Y]<YPOS_TOPMOST) goto processChars::@6
Simple Condition processChars::$15 [291] if(*processChars::$69>XPOS_RIGHTMOST) goto processChars::@6
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [264] setupRasterIrq::$1 = < setupRasterIrq::raster#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant setupRasterIrq::$1 = <setupRasterIrq::raster#0
Successful SSA optimization Pass2ConstantIdentification
Eliminating unused constant BORDER_COLOR
Eliminating unused constant BG_COLOR
Eliminating unused constant WHITE
Eliminating unused constant BLUE
Eliminating unused constant irqTop::i#0
Eliminating unused constant irqTop::i1#0
Eliminating unused constant irqBottom::i#0
Successful SSA optimization PassNEliminateUnusedVars
Inlining Noop Cast [3] malloc::return#0 = (void*)malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [146] processChars::$57 = (byte*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [148] processChars::$58 = (byte*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [153] processChars::$59 = (byte*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [155] processChars::$60 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [159] processChars::$61 = (byte**)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [162] processChars::$62 = (byte*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [163] processChars::$63 = (byte*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [165] processChars::$64 = (byte*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [166] processChars::$65 = (byte*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [168] processChars::$66 = (byte*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [175] processChars::$67 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [179] processChars::$68 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [180] processChars::$69 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [181] processChars::$70 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [182] processChars::$71 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [184] processChars::$72 = (byte*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [192] processChars::$74 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [193] processChars::$75 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [195] processChars::$76 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [196] processChars::$77 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [197] processChars::$78 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [202] processChars::$80 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [203] processChars::$81 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [205] processChars::$82 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [206] processChars::$83 = (word*)processChars::processing#0 keeping processChars::processing#0
Inlining Noop Cast [207] processChars::$84 = (word*)processChars::processing#0 keeping processChars::processing#0
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [218] init_angle_screen::xw#0 = (signed word)init_angle_screen::$13 keeping init_angle_screen::xw#0
Inlining Noop Cast [221] init_angle_screen::yw#0 = (signed word)init_angle_screen::$14 keeping init_angle_screen::yw#0
Inlining Noop Cast [277] SCREEN_COPY#0 = (byte*)__start::__init1_$0 keeping SCREEN_COPY#0
Inlining Noop Cast [281] SCREEN_DIST#0 = (byte*)__start::__init1_$1 keeping SCREEN_DIST#0
Successful SSA optimization Pass2NopCastInlining
Inlining Noop Cast [275] malloc::return#2 = (void*)malloc::mem#0 keeping malloc::mem#0
Inlining Noop Cast [279] malloc::return#3 = (void*)malloc::mem#0 keeping malloc::mem#0
Successful SSA optimization Pass2NopCastInlining
Rewriting division to use shift [14] atan2_16::angle#1 = atan2_16::angle#6 / 2
Rewriting multiplication to use shift [28] atan2_16::$22 = atan2_16::i#2 * SIZEOF_WORD
Rewriting multiplication to use shift [32] atan2_16::$23 = atan2_16::i#2 * SIZEOF_WORD
Rewriting multiplication to use shift and addition[52] main::$10 = main::i#2 * SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[87] getCharToProcess::$8 = getCharToProcess::$11 * $28
Rewriting multiplication to use shift and addition[93] startProcessing::$21 = startProcessing::i#2 * SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[100] startProcessing::$0 = startProcessing::$23 * $28
Rewriting multiplication to use shift [106] startProcessing::$4 = startProcessing::$24 * $40
Rewriting multiplication to use shift [110] startProcessing::$6 = startProcessing::$25 * 8
Rewriting multiplication to use shift [123] startProcessing::$8 = startProcessing::$26 * 8
Rewriting multiplication to use shift [127] startProcessing::$11 = startProcessing::$27 * 8
Rewriting multiplication to use shift [131] startProcessing::$15 = startProcessing::freeIdx#2 * 8
Rewriting multiplication to use shift and addition[132] startProcessing::$22 = startProcessing::freeIdx#2 * SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[144] processChars::$28 = processChars::i#10 * SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift [173] processChars::$13 = processChars::i#10 * 2
Rewriting division to use shift [188] processChars::$21 = processChars::xpos#0 / 8
Rewriting multiplication to use shift [191] processChars::$29 = processChars::xchar#0 * SIZEOF_WORD
Rewriting division to use shift [199] processChars::$79 = processChars::ypos#0 / 8
Rewriting multiplication to use shift [201] processChars::$30 = processChars::ychar#0 * SIZEOF_WORD
Rewriting multiplication to use shift [215] init_angle_screen::$3 = init_angle_screen::x#2 * 2
Rewriting multiplication to use shift [219] init_angle_screen::$5 = init_angle_screen::y#5 * 2
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings malloc::size#0
Inlining constant with var siblings malloc::size#1
Inlining constant with var siblings atan2_16::angle#0
Inlining constant with var siblings atan2_16::i#0
Inlining constant with var siblings main::src#0
Inlining constant with var siblings main::i#0
Inlining constant with var siblings getCharToProcess::closest_x#0
Inlining constant with var siblings getCharToProcess::closest_y#0
Inlining constant with var siblings getCharToProcess::closest_dist#0
Inlining constant with var siblings getCharToProcess::y#0
Inlining constant with var siblings getCharToProcess::x#0
Inlining constant with var siblings startProcessing::freeIdx#0
Inlining constant with var siblings startProcessing::i#0
Inlining constant with var siblings startProcessing::i1#0
Inlining constant with var siblings processChars::numActive#0
Inlining constant with var siblings processChars::i#0
Inlining constant with var siblings init_angle_screen::y#0
Inlining constant with var siblings init_angle_screen::x#0
Inlining constant with var siblings init_angle_screen::xb#0
Inlining constant with var siblings initSprites::sp#0
Inlining constant with var siblings initSprites::i#0
Inlining constant with var siblings heap_head#2
Constant inlined startProcessing::freeIdx#0 = $ff
Constant inlined init_angle_screen::y#0 = 0
Constant inlined init_angle_screen::x#0 = 0
Constant inlined main::src#0 = SCREEN
Constant inlined atan2_16::angle#0 = 0
Constant inlined getCharToProcess::x#0 = 0
Constant inlined initSprites::sp#0 = SPRITE_DATA
Constant inlined getCharToProcess::y#0 = 0
Constant inlined setupRasterIrq::raster#0 = RASTER_IRQ_TOP
Constant inlined getCharToProcess::closest_y#0 = 0
Constant inlined processChars::numActive#0 = 0
Constant inlined main::i#0 = 0
Constant inlined getCharToProcess::closest_x#0 = 0
Constant inlined ProcessingSprite::$0::STATUS_FREE = 0
Constant inlined startProcessing::i1#0 = 0
Constant inlined init_angle_screen::xb#0 = $27
Constant inlined atan2_16::i#0 = 0
Constant inlined malloc::size#1 = $3e8
Constant inlined malloc::size#0 = $3e8
Constant inlined ProcessingSprite::$0::STATUS_NEW = 1
Constant inlined setupRasterIrq::$1 = <RASTER_IRQ_TOP
Constant inlined startProcessing::i#0 = 0
Constant inlined ProcessingSprite::$0::STATUS_PROCESSING = 2
Constant inlined processChars::i#0 = 0
Constant inlined heap_head#2 = HEAP_TOP
Constant inlined getCharToProcess::closest_dist#0 = NOT_FOUND
Constant inlined initSprites::i#0 = 0
Successful SSA optimization Pass2ConstantInlining
Alias main::$10 = main::$15
Alias getCharToProcess::$8 = getCharToProcess::$14
Alias startProcessing::$21 = startProcessing::$32
Alias startProcessing::$0 = startProcessing::$35
Alias startProcessing::$22 = startProcessing::$40
Alias processChars::$28 = processChars::$90
Successful SSA optimization Pass2AliasElimination
Identical Phi Values malloc::size#2 $3e8
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [188] processChars::$13 = processChars::i#10 << 1
Successful SSA optimization Pass2DuplicateRValueIdentification
Eliminating unused constant SIZEOF_WORD
Successful SSA optimization PassNEliminateUnusedVars
Alias processChars::$13 = processChars::$86
Successful SSA optimization Pass2AliasElimination
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $a
Finalized unsigned number type (byte) $10
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $c
Successful SSA optimization PassNFinalizeNumberTypeConversions
Added new block during phi lifting atan2_16::@22(between atan2_16::@19 and atan2_16::@10)
Added new block during phi lifting atan2_16::@23(between atan2_16::@10 and atan2_16::@12)
Added new block during phi lifting atan2_16::@24(between atan2_16::@19 and atan2_16::@12)
Added new block during phi lifting atan2_16::@25(between atan2_16::@15 and atan2_16::@17)
Added new block during phi lifting atan2_16::@26(between atan2_16::@12 and atan2_16::@7)
Added new block during phi lifting atan2_16::@27(between atan2_16::@7 and atan2_16::@8)
Added new block during phi lifting main::@15(between main::@4 and main::@4)
Added new block during phi lifting getCharToProcess::@10(between getCharToProcess::@7 and getCharToProcess::@2)
Added new block during phi lifting getCharToProcess::@11(between getCharToProcess::@4 and getCharToProcess::@3)
Added new block during phi lifting getCharToProcess::@12(between getCharToProcess::@3 and getCharToProcess::@4)
Added new block during phi lifting getCharToProcess::@13(between getCharToProcess::@5 and getCharToProcess::@4)
Added new block during phi lifting startProcessing::@9(between startProcessing::@4 and startProcessing::@1)
Added new block during phi lifting startProcessing::@10(between startProcessing::@3 and startProcessing::@2)
Added new block during phi lifting startProcessing::@11(between startProcessing::@3 and startProcessing::@4)
Added new block during phi lifting startProcessing::@12(between startProcessing::@7 and startProcessing::@7)
Added new block during phi lifting processChars::@17(between processChars::@2 and processChars::@1)
Added new block during phi lifting processChars::@18(between processChars::@1 and processChars::@2)
Added new block during phi lifting init_angle_screen::@6(between init_angle_screen::@4 and init_angle_screen::@1)
Added new block during phi lifting initSprites::@6(between initSprites::@4 and initSprites::@4)
Adding NOP phi() at start of __start
Adding NOP phi() at start of __start::__init1
Adding NOP phi() at start of __start::@1
Adding NOP phi() at start of __start::@4
Adding NOP phi() at start of irqBottom
Adding NOP phi() at start of irqBottom::@1
Adding NOP phi() at start of irqBottom::@7
Adding NOP phi() at start of irqTop
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@14
Adding NOP phi() at start of processChars
Adding NOP phi() at start of processChars::@12
Adding NOP phi() at start of initSprites
Adding NOP phi() at start of initSprites::@3
Adding NOP phi() at start of getCharToProcess::@1
Adding NOP phi() at start of startProcessing
CALL GRAPH
Calls in [__start] to malloc:2 malloc:5 main:8
Calls in [irqBottom] to processChars:13
Calls in [main] to init_angle_screen:29 initSprites:45 setupRasterIrq:47 getCharToProcess:50 startProcessing:62
Calls in [init_angle_screen] to atan2_16:145
Created 50 initial phi equivalence classes
Coalesced [4] heap_head#13 = heap_head#0
Not coalescing [26] heap_head#0 = malloc::mem#0
Coalesced [31] main::dst#4 = main::dst#0
Coalesced [64] main::i#3 = main::i#1
Coalesced [68] main::src#4 = main::src#1
Coalesced [69] main::dst#5 = main::dst#1
Coalesced [111] processChars::numActive#17 = processChars::numActive#1
Coalesced [117] processChars::i#13 = processChars::i#1
Coalesced [118] processChars::numActive#15 = processChars::numActive#3
Coalesced (already) [123] processChars::numActive#16 = processChars::numActive#10
Not coalescing [125] init_angle_screen::screen_topline#7 = init_angle_screen::screen_bottomline#0
Coalesced [126] init_angle_screen::screen_bottomline#7 = init_angle_screen::screen_bottomline#0
Coalesced [135] init_angle_screen::y#7 = init_angle_screen::y#1
Coalesced [136] init_angle_screen::screen_topline#8 = init_angle_screen::screen_topline#1
Coalesced [137] init_angle_screen::screen_bottomline#8 = init_angle_screen::screen_bottomline#1
Coalesced [159] init_angle_screen::x#5 = init_angle_screen::x#1
Coalesced [160] init_angle_screen::xb#5 = init_angle_screen::xb#1
Coalesced [173] initSprites::i#3 = initSprites::i#1
Coalesced [176] initSprites::sp#4 = initSprites::sp#1
Coalesced [189] getCharToProcess::screen_line#8 = getCharToProcess::screen_line#0
Coalesced [190] getCharToProcess::dist_line#8 = getCharToProcess::dist_line#0
Coalesced [192] getCharToProcess::closest_dist#11 = getCharToProcess::closest_dist#8
Coalesced [193] getCharToProcess::closest_x#11 = getCharToProcess::closest_x#9
Coalesced [194] getCharToProcess::closest_y#11 = getCharToProcess::closest_y#9
Coalesced [199] getCharToProcess::return_dist#7 = getCharToProcess::dist#0
Not coalescing [200] getCharToProcess::return_x#7 = getCharToProcess::x#2
Not coalescing [201] getCharToProcess::return_y#7 = getCharToProcess::y#7
Coalesced [218] getCharToProcess::screen_line#9 = getCharToProcess::screen_line#1
Coalesced [219] getCharToProcess::dist_line#9 = getCharToProcess::dist_line#1
Not coalescing [220] getCharToProcess::closest_dist#10 = getCharToProcess::return_dist#1
Coalesced [221] getCharToProcess::y#8 = getCharToProcess::y#1
Coalesced [222] getCharToProcess::closest_x#10 = getCharToProcess::return_x#1
Coalesced [223] getCharToProcess::closest_y#10 = getCharToProcess::return_y#1
Coalesced [224] getCharToProcess::x#6 = getCharToProcess::x#1
Not coalescing [225] getCharToProcess::closest_dist#12 = getCharToProcess::return_dist#1
Coalesced (already) [226] getCharToProcess::closest_x#12 = getCharToProcess::return_x#1
Coalesced (already) [227] getCharToProcess::closest_y#12 = getCharToProcess::return_y#1
Not coalescing [228] getCharToProcess::return_dist#6 = getCharToProcess::closest_dist#2
Coalesced (already) [229] getCharToProcess::return_x#6 = getCharToProcess::closest_x#7
Coalesced (already) [230] getCharToProcess::return_y#6 = getCharToProcess::closest_y#7
Not coalescing [231] getCharToProcess::return_dist#5 = getCharToProcess::closest_dist#2
Coalesced (already) [232] getCharToProcess::return_x#5 = getCharToProcess::closest_x#7
Coalesced (already) [233] getCharToProcess::return_y#5 = getCharToProcess::closest_y#7
Coalesced [243] startProcessing::freeIdx#9 = startProcessing::i#2
Coalesced [263] startProcessing::chargenData#3 = startProcessing::chargenData#0
Coalesced [264] startProcessing::spriteData#3 = startProcessing::spriteData#0
Coalesced [298] startProcessing::chargenData#4 = startProcessing::chargenData#1
Coalesced [299] startProcessing::spriteData#4 = startProcessing::spriteData#1
Coalesced [300] startProcessing::i1#3 = startProcessing::i1#1
Not coalescing [301] startProcessing::freeIdx#7 = startProcessing::freeIdx#2
Not coalescing [304] startProcessing::freeIdx#8 = startProcessing::freeIdx#6
Coalesced [305] startProcessing::i#5 = startProcessing::i#1
Coalesced [308] atan2_16::yi#17 = atan2_16::$2
Coalesced [312] atan2_16::xi#14 = atan2_16::$7
Coalesced [314] atan2_16::yi#19 = atan2_16::yi#0
Coalesced [315] atan2_16::xi#16 = atan2_16::xi#0
Coalesced [318] atan2_16::angle#22 = atan2_16::angle#12
Coalesced [323] atan2_16::angle#27 = atan2_16::angle#4
Coalesced [327] atan2_16::return#6 = atan2_16::angle#5
Coalesced [330] atan2_16::return#5 = atan2_16::angle#11
Coalesced [331] atan2_16::angle#26 = atan2_16::angle#1
Not coalescing [332] atan2_16::shift#5 = atan2_16::i#2
Not coalescing [333] atan2_16::xd#10 = atan2_16::xi#3
Not coalescing [334] atan2_16::yd#10 = atan2_16::yi#3
Coalesced [340] atan2_16::yd#13 = atan2_16::yd#2
Coalesced [341] atan2_16::xd#13 = atan2_16::xd#2
Coalesced [348] atan2_16::yi#21 = atan2_16::yi#2
Coalesced [349] atan2_16::angle#25 = atan2_16::angle#3
Coalesced [350] atan2_16::xi#18 = atan2_16::xi#2
Coalesced [354] atan2_16::yi#18 = atan2_16::yi#8
Coalesced [355] atan2_16::xi#15 = atan2_16::xi#8
Coalesced [356] atan2_16::i#12 = atan2_16::i#1
Coalesced [357] atan2_16::angle#21 = atan2_16::angle#13
Coalesced (already) [358] atan2_16::angle#23 = atan2_16::angle#13
Coalesced [363] atan2_16::yi#20 = atan2_16::yi#1
Coalesced [364] atan2_16::angle#24 = atan2_16::angle#2
Coalesced [365] atan2_16::xi#17 = atan2_16::xi#1
Coalesced [366] atan2_16::yd#12 = atan2_16::yd#3
Coalesced [367] atan2_16::xd#12 = atan2_16::xd#3
Coalesced [371] atan2_16::shift#6 = atan2_16::shift#1
Coalesced [372] atan2_16::xd#11 = atan2_16::xd#1
Coalesced [373] atan2_16::yd#11 = atan2_16::yd#1
Not coalescing [374] atan2_16::xi#13 = atan2_16::x#0
Not coalescing [375] atan2_16::yi#16 = atan2_16::y#0
Coalesced down to 37 phi equivalence classes
Culled Empty Block label __start::@4
Culled Empty Block label irqBottom::@7
Culled Empty Block label main::@3
Culled Empty Block label main::@12
Culled Empty Block label main::@14
Culled Empty Block label main::@15
Culled Empty Block label processChars::@12
Culled Empty Block label processChars::@17
Culled Empty Block label processChars::@18
Culled Empty Block label init_angle_screen::@6
Culled Empty Block label initSprites::@3
Culled Empty Block label initSprites::@6
Culled Empty Block label getCharToProcess::@1
Culled Empty Block label startProcessing::@5
Culled Empty Block label startProcessing::@12
Culled Empty Block label startProcessing::@10
Culled Empty Block label atan2_16::@23
Culled Empty Block label atan2_16::@27
Culled Empty Block label atan2_16::@26
Culled Empty Block label atan2_16::@22
Culled Empty Block label atan2_16::@24
Culled Empty Block label atan2_16::@25
Renumbering block main::@4 to main::@3
Renumbering block main::@5 to main::@4
Renumbering block main::@6 to main::@5
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 getCharToProcess::@2 to getCharToProcess::@1
Renumbering block getCharToProcess::@3 to getCharToProcess::@2
Renumbering block getCharToProcess::@4 to getCharToProcess::@3
Renumbering block getCharToProcess::@5 to getCharToProcess::@4
Renumbering block getCharToProcess::@6 to getCharToProcess::@5
Renumbering block getCharToProcess::@7 to getCharToProcess::@6
Renumbering block getCharToProcess::@8 to getCharToProcess::@7
Renumbering block getCharToProcess::@9 to getCharToProcess::@8
Renumbering block getCharToProcess::@10 to getCharToProcess::@9
Renumbering block getCharToProcess::@11 to getCharToProcess::@10
Renumbering block getCharToProcess::@12 to getCharToProcess::@11
Renumbering block getCharToProcess::@13 to getCharToProcess::@12
Renumbering block startProcessing::@6 to startProcessing::@5
Renumbering block startProcessing::@7 to startProcessing::@6
Renumbering block startProcessing::@8 to startProcessing::@7
Renumbering block startProcessing::@9 to startProcessing::@8
Renumbering block startProcessing::@11 to startProcessing::@9
Renumbering block processChars::@14 to processChars::@12
Renumbering block processChars::@15 to processChars::@13
Renumbering block processChars::@16 to processChars::@14
Renumbering block initSprites::@4 to initSprites::@3
Renumbering block initSprites::@5 to initSprites::@4
Adding NOP phi() at start of __start
Adding NOP phi() at start of __start::__init1
Adding NOP phi() at start of __start::@1
Adding NOP phi() at start of irqBottom
Adding NOP phi() at start of irqBottom::@1
Adding NOP phi() at start of irqTop
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of processChars
Adding NOP phi() at start of initSprites
Adding NOP phi() at start of startProcessing
FINAL CONTROL FLOW GRAPH
void __start()
__start: scope:[__start] from
[0] phi()
to:__start::__init1
__start::__init1: scope:[__start] from __start
[1] phi()
[2] call malloc
to:__start::@2
__start::@2: scope:[__start] from __start::__init1
[3] SCREEN_COPY#0 = (void*)malloc::mem#0
[4] call malloc
to:__start::@3
__start::@3: scope:[__start] from __start::@2
[5] SCREEN_DIST#0 = (void*)malloc::mem#0
to:__start::@1
__start::@1: scope:[__start] from __start::@3
[6] phi()
[7] call main
to:__start::@return
__start::@return: scope:[__start] from __start::@1
[8] return
to:@return
__interrupt(hardware_clobber) void irqBottom()
irqBottom: scope:[irqBottom] from
[9] phi()
to:irqBottom::@1
irqBottom::@1: scope:[irqBottom] from irqBottom
[10] phi()
[11] call processChars
to:irqBottom::@2
irqBottom::@2: scope:[irqBottom] from irqBottom::@1
[12] *RASTER = RASTER_IRQ_TOP
[13] *HARDWARE_IRQ = &irqTop
[14] *IRQ_STATUS = IRQ_RASTER
to:irqBottom::@return
irqBottom::@return: scope:[irqBottom] from irqBottom::@2
[15] return
to:@return
__interrupt(hardware_clobber) void irqTop()
irqTop: scope:[irqTop] from
[16] phi()
to:irqTop::@1
irqTop::@1: scope:[irqTop] from irqTop
[17] *RASTER = RASTER_IRQ_MIDDLE
[18] *HARDWARE_IRQ = &irqBottom
[19] *IRQ_STATUS = IRQ_RASTER
to:irqTop::@return
irqTop::@return: scope:[irqTop] from irqTop::@1
[20] return
to:@return
void* malloc(word malloc::size)
malloc: scope:[malloc] from __start::@2 __start::__init1
[21] heap_head#6 = phi( __start::@2/heap_head#0, __start::__init1/HEAP_TOP )
[22] malloc::mem#0 = heap_head#6 - $3e8
[23] heap_head#0 = malloc::mem#0
to:malloc::@return
malloc::@return: scope:[malloc] from malloc
[24] return
to:@return
void main()
main: scope:[main] from __start::@1
[25] init_angle_screen::screen#0 = (byte*)SCREEN_DIST#0
[26] call init_angle_screen
to:main::@9
main::@9: scope:[main] from main
[27] main::dst#0 = (byte*)SCREEN_COPY#0
to:main::@1
main::@1: scope:[main] from main::@2 main::@9
[28] main::dst#2 = phi( main::@9/main::dst#0, main::@2/main::dst#1 )
[28] main::src#2 = phi( main::@9/SCREEN, main::@2/main::src#1 )
[29] if(main::src#2!=SCREEN+$3e8) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@1 main::@3
[30] main::i#2 = phi( main::@1/0, main::@3/main::i#1 )
[31] main::$11 = main::i#2 << 1
[32] main::$12 = main::$11 + main::i#2
[33] main::$13 = main::$12 << 1
[34] main::$14 = main::$13 + main::i#2
[35] main::$10 = main::$14 << 1
[36] PROCESSING[main::$10] = memcpy(*(&$0), struct ProcessingSprite, SIZEOF_STRUCT_PROCESSINGSPRITE)
[37] main::i#1 = ++ main::i#2
[38] if(main::i#1!=NUM_PROCESSING-1+1) goto main::@3
to:main::@4
main::@4: scope:[main] from main::@3
[39] phi()
[40] call initSprites
to:main::@10
main::@10: scope:[main] from main::@4
[41] phi()
[42] call setupRasterIrq
to:main::@5
main::@5: scope:[main] from main::@10 main::@6
[43] phi()
[44] call getCharToProcess
[45] getCharToProcess::return_x#0 = getCharToProcess::return_x#1
[46] getCharToProcess::return_y#0 = getCharToProcess::return_y#1
[47] getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1
to:main::@11
main::@11: scope:[main] from main::@5
[48] main::center_x#0 = getCharToProcess::return_x#0
[49] main::center_y#0 = getCharToProcess::return_y#0
[50] main::center_dist#0 = getCharToProcess::return_dist#0
[51] if(main::center_dist#0!=NOT_FOUND) goto main::@6
to:main::@7
main::@7: scope:[main] from main::@11
[52] *(SCREEN+$3e7) = '.'
to:main::@8
main::@8: scope:[main] from main::@7 main::@8
[53] *(COLS+$3e7) = ++ *(COLS+$3e7)
to:main::@8
main::@6: scope:[main] from main::@11
[54] startProcessing::center_x#0 = main::center_x#0
[55] startProcessing::center_y#0 = main::center_y#0
[56] call startProcessing
to:main::@5
main::@2: scope:[main] from main::@1
[57] *main::dst#2 = *main::src#2
[58] main::src#1 = ++ main::src#2
[59] main::dst#1 = ++ main::dst#2
to:main::@1
void processChars()
processChars: scope:[processChars] from irqBottom::@1
[60] phi()
to:processChars::@1
processChars::@1: scope:[processChars] from processChars processChars::@2
[61] processChars::numActive#10 = phi( processChars/0, processChars::@2/processChars::numActive#3 )
[61] processChars::i#10 = phi( processChars/0, processChars::@2/processChars::i#1 )
[62] processChars::$13 = processChars::i#10 << 1
[63] processChars::$87 = processChars::$13 + processChars::i#10
[64] processChars::$88 = processChars::$87 << 1
[65] processChars::$89 = processChars::$88 + processChars::i#10
[66] processChars::$28 = processChars::$89 << 1
[67] processChars::processing#0 = PROCESSING + processChars::$28
[68] processChars::bitmask#0 = 1 << ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]
[69] if(((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]==STATUS_FREE) goto processChars::@2
to:processChars::@10
processChars::@10: scope:[processChars] from processChars::@1
[70] if(((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]!=STATUS_NEW) goto processChars::@3
to:processChars::@11
processChars::@11: scope:[processChars] from processChars::@10
[71] *(((byte**)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR]) = ' '
[72] *SPRITES_ENABLE = *SPRITES_ENABLE | processChars::bitmask#0
[73] SPRITES_COLOR[((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]] = ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_COL]
[74] (SCREEN+OFFSET_SPRITE_PTRS)[((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]] = ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_PTR]
[75] ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS] = STATUS_PROCESSING
to:processChars::@3
processChars::@3: scope:[processChars] from processChars::@10 processChars::@11
[76] processChars::xpos#0 = *((word*)processChars::processing#0) >> 4
[77] processChars::$9 = > processChars::xpos#0
[78] if(0!=processChars::$9) goto processChars::@4
to:processChars::@8
processChars::@8: scope:[processChars] from processChars::@3
[79] processChars::$10 = $ff ^ processChars::bitmask#0
[80] *SPRITES_XMSB = *SPRITES_XMSB & processChars::$10
to:processChars::@5
processChars::@5: scope:[processChars] from processChars::@4 processChars::@8
[81] SPRITES_XPOS[processChars::$13] = (byte)processChars::xpos#0
[82] processChars::$12 = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] >> 4
[83] processChars::ypos#0 = (byte)processChars::$12
[84] SPRITES_YPOS[processChars::$13] = processChars::ypos#0
[85] if(*((word*)processChars::processing#0)<XPOS_LEFTMOST) goto processChars::@6
to:processChars::@14
processChars::@14: scope:[processChars] from processChars::@5
[86] if(*((word*)processChars::processing#0)>XPOS_RIGHTMOST) goto processChars::@6
to:processChars::@13
processChars::@13: scope:[processChars] from processChars::@14
[87] if(((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y]<YPOS_TOPMOST) goto processChars::@6
to:processChars::@12
processChars::@12: scope:[processChars] from processChars::@13
[88] if(((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y]>YPOS_BOTTOMMOST) goto processChars::@6
to:processChars::@9
processChars::@9: scope:[processChars] from processChars::@12
[89] processChars::$21 = processChars::xpos#0 >> 3
[90] processChars::$73 = (byte)processChars::$21
[91] processChars::xchar#0 = processChars::$73 - BORDER_XPOS_LEFT/8
[92] processChars::$29 = processChars::xchar#0 << 1
[93] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] + VXSIN[processChars::$29]
[94] *((word*)processChars::processing#0) = *((word*)processChars::processing#0) + ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX]
[95] processChars::$79 = processChars::ypos#0 >> 3
[96] processChars::ychar#0 = processChars::$79 - BORDER_YPOS_TOP/8
[97] processChars::$30 = processChars::ychar#0 << 1
[98] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] + VYSIN[processChars::$30]
[99] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] + ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY]
to:processChars::@7
processChars::@7: scope:[processChars] from processChars::@6 processChars::@9
[100] processChars::numActive#1 = ++ processChars::numActive#10
to:processChars::@2
processChars::@2: scope:[processChars] from processChars::@1 processChars::@7
[101] processChars::numActive#3 = phi( processChars::@1/processChars::numActive#10, processChars::@7/processChars::numActive#1 )
[102] processChars::i#1 = ++ processChars::i#10
[103] if(processChars::i#1!=NUM_PROCESSING-1+1) goto processChars::@1
to:processChars::@return
processChars::@return: scope:[processChars] from processChars::@2
[104] return
to:@return
processChars::@6: scope:[processChars] from processChars::@12 processChars::@13 processChars::@14 processChars::@5
[105] ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS] = STATUS_FREE
[106] processChars::$25 = $ff ^ processChars::bitmask#0
[107] *SPRITES_ENABLE = *SPRITES_ENABLE & processChars::$25
to:processChars::@7
processChars::@4: scope:[processChars] from processChars::@3
[108] *SPRITES_XMSB = *SPRITES_XMSB | processChars::bitmask#0
to:processChars::@5
void init_angle_screen(byte* init_angle_screen::screen)
init_angle_screen: scope:[init_angle_screen] from main
[109] init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0 + (word)$28*$c
[110] init_angle_screen::screen_topline#7 = init_angle_screen::screen_bottomline#0
to:init_angle_screen::@1
init_angle_screen::@1: scope:[init_angle_screen] from init_angle_screen init_angle_screen::@4
[111] init_angle_screen::screen_bottomline#6 = phi( init_angle_screen/init_angle_screen::screen_bottomline#0, init_angle_screen::@4/init_angle_screen::screen_bottomline#1 )
[111] init_angle_screen::screen_topline#6 = phi( init_angle_screen/init_angle_screen::screen_topline#7, init_angle_screen::@4/init_angle_screen::screen_topline#1 )
[111] init_angle_screen::y#5 = phi( init_angle_screen/0, init_angle_screen::@4/init_angle_screen::y#1 )
to:init_angle_screen::@2
init_angle_screen::@2: scope:[init_angle_screen] from init_angle_screen::@1 init_angle_screen::@5
[112] init_angle_screen::xb#2 = phi( init_angle_screen::@1/$27, init_angle_screen::@5/init_angle_screen::xb#1 )
[112] init_angle_screen::x#2 = phi( init_angle_screen::@1/0, init_angle_screen::@5/init_angle_screen::x#1 )
[113] if(init_angle_screen::x#2<$13+1) goto init_angle_screen::@3
to:init_angle_screen::@4
init_angle_screen::@4: scope:[init_angle_screen] from init_angle_screen::@2
[114] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28
[115] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28
[116] init_angle_screen::y#1 = ++ init_angle_screen::y#5
[117] if(init_angle_screen::y#1!=$d) goto init_angle_screen::@1
to:init_angle_screen::@return
init_angle_screen::@return: scope:[init_angle_screen] from init_angle_screen::@4
[118] return
to:@return
init_angle_screen::@3: scope:[init_angle_screen] from init_angle_screen::@2
[119] init_angle_screen::$3 = init_angle_screen::x#2 << 1
[120] init_angle_screen::$4 = $27 - init_angle_screen::$3
[121] init_angle_screen::xw#0 = init_angle_screen::$4 w= 0
[122] init_angle_screen::$5 = init_angle_screen::y#5 << 1
[123] init_angle_screen::yw#0 = init_angle_screen::$5 w= 0
[124] atan2_16::x#0 = (signed word)init_angle_screen::xw#0
[125] atan2_16::y#0 = (signed word)init_angle_screen::yw#0
[126] call atan2_16
[127] atan2_16::return#2 = atan2_16::return#0
to:init_angle_screen::@5
init_angle_screen::@5: scope:[init_angle_screen] from init_angle_screen::@3
[128] init_angle_screen::angle_w#0 = atan2_16::return#2
[129] init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80
[130] init_angle_screen::ang_w#0 = > init_angle_screen::$7
[131] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0
[132] init_angle_screen::$9 = - init_angle_screen::ang_w#0
[133] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$9
[134] init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0
[135] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$10
[136] init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0
[137] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$11
[138] init_angle_screen::x#1 = ++ init_angle_screen::x#2
[139] init_angle_screen::xb#1 = -- init_angle_screen::xb#2
to:init_angle_screen::@2
void initSprites()
initSprites: scope:[initSprites] from main::@4
[140] phi()
to:initSprites::@1
initSprites::@1: scope:[initSprites] from initSprites initSprites::@2
[141] initSprites::sp#2 = phi( initSprites/SPRITE_DATA, initSprites::@2/initSprites::sp#1 )
[142] if(initSprites::sp#2<SPRITE_DATA+NUM_PROCESSING*$40) goto initSprites::@2
to:initSprites::@3
initSprites::@3: scope:[initSprites] from initSprites::@1 initSprites::@3
[143] initSprites::i#2 = phi( initSprites::@1/0, initSprites::@3/initSprites::i#1 )
[144] SPRITES_COLOR[initSprites::i#2] = LIGHT_BLUE
[145] initSprites::i#1 = ++ initSprites::i#2
[146] if(initSprites::i#1!=8) goto initSprites::@3
to:initSprites::@4
initSprites::@4: scope:[initSprites] from initSprites::@3
[147] *SPRITES_MC = 0
[148] *SPRITES_EXPAND_X = 0
[149] *SPRITES_EXPAND_Y = 0
to:initSprites::@return
initSprites::@return: scope:[initSprites] from initSprites::@4
[150] return
to:@return
initSprites::@2: scope:[initSprites] from initSprites::@1
[151] *initSprites::sp#2 = 0
[152] initSprites::sp#1 = ++ initSprites::sp#2
to:initSprites::@1
void setupRasterIrq(word setupRasterIrq::raster , void()* setupRasterIrq::irqRoutine)
setupRasterIrq: scope:[setupRasterIrq] from main::@10
asm { sei }
[154] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
[155] *PROCPORT = PROCPORT_RAM_IO
[156] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR
to:setupRasterIrq::@1
setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq
[157] *VICII_CONTROL = *VICII_CONTROL & $7f
to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1
[158] *RASTER = <RASTER_IRQ_TOP
[159] *IRQ_ENABLE = IRQ_RASTER
[160] *HARDWARE_IRQ = setupRasterIrq::irqRoutine#0
asm { cli }
to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2
[162] return
to:@return
struct ProcessingChar getCharToProcess()
getCharToProcess: scope:[getCharToProcess] from main::@5
[163] getCharToProcess::screen_line#0 = (byte*)SCREEN_COPY#0
[164] getCharToProcess::dist_line#0 = (byte*)SCREEN_DIST#0
to:getCharToProcess::@1
getCharToProcess::@1: scope:[getCharToProcess] from getCharToProcess getCharToProcess::@9
[165] getCharToProcess::closest_y#9 = phi( getCharToProcess/0, getCharToProcess::@9/getCharToProcess::return_y#1 )
[165] getCharToProcess::closest_x#9 = phi( getCharToProcess/0, getCharToProcess::@9/getCharToProcess::return_x#1 )
[165] getCharToProcess::y#7 = phi( getCharToProcess/0, getCharToProcess::@9/getCharToProcess::y#1 )
[165] getCharToProcess::closest_dist#8 = phi( getCharToProcess/NOT_FOUND, getCharToProcess::@9/getCharToProcess::closest_dist#10 )
[165] getCharToProcess::dist_line#6 = phi( getCharToProcess/getCharToProcess::dist_line#0, getCharToProcess::@9/getCharToProcess::dist_line#1 )
[165] getCharToProcess::screen_line#4 = phi( getCharToProcess/getCharToProcess::screen_line#0, getCharToProcess::@9/getCharToProcess::screen_line#1 )
to:getCharToProcess::@2
getCharToProcess::@2: scope:[getCharToProcess] from getCharToProcess::@1 getCharToProcess::@10
[166] getCharToProcess::closest_y#7 = phi( getCharToProcess::@1/getCharToProcess::closest_y#9, getCharToProcess::@10/getCharToProcess::return_y#1 )
[166] getCharToProcess::closest_x#7 = phi( getCharToProcess::@1/getCharToProcess::closest_x#9, getCharToProcess::@10/getCharToProcess::return_x#1 )
[166] getCharToProcess::closest_dist#2 = phi( getCharToProcess::@1/getCharToProcess::closest_dist#8, getCharToProcess::@10/getCharToProcess::closest_dist#12 )
[166] getCharToProcess::x#2 = phi( getCharToProcess::@1/0, getCharToProcess::@10/getCharToProcess::x#1 )
[167] if(getCharToProcess::screen_line#4[getCharToProcess::x#2]==' ') goto getCharToProcess::@11
to:getCharToProcess::@4
getCharToProcess::@4: scope:[getCharToProcess] from getCharToProcess::@2
[168] getCharToProcess::dist#0 = getCharToProcess::dist_line#6[getCharToProcess::x#2]
[169] if(getCharToProcess::dist#0>=getCharToProcess::closest_dist#2) goto getCharToProcess::@12
to:getCharToProcess::@5
getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@4
[170] getCharToProcess::return_x#7 = getCharToProcess::x#2
[171] getCharToProcess::return_y#7 = getCharToProcess::y#7
to:getCharToProcess::@3
getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5
[172] getCharToProcess::return_y#1 = phi( getCharToProcess::@11/getCharToProcess::closest_y#7, getCharToProcess::@12/getCharToProcess::closest_y#7, getCharToProcess::@5/getCharToProcess::return_y#7 )
[172] getCharToProcess::return_x#1 = phi( getCharToProcess::@11/getCharToProcess::closest_x#7, getCharToProcess::@12/getCharToProcess::closest_x#7, getCharToProcess::@5/getCharToProcess::return_x#7 )
[172] getCharToProcess::return_dist#1 = phi( getCharToProcess::@11/getCharToProcess::return_dist#5, getCharToProcess::@12/getCharToProcess::return_dist#6, getCharToProcess::@5/getCharToProcess::dist#0 )
[173] getCharToProcess::x#1 = ++ getCharToProcess::x#2
[174] if(getCharToProcess::x#1!=$28) goto getCharToProcess::@10
to:getCharToProcess::@6
getCharToProcess::@6: scope:[getCharToProcess] from getCharToProcess::@3
[175] getCharToProcess::screen_line#1 = getCharToProcess::screen_line#4 + $28
[176] getCharToProcess::dist_line#1 = getCharToProcess::dist_line#6 + $28
[177] getCharToProcess::y#1 = ++ getCharToProcess::y#7
[178] if(getCharToProcess::y#1!=$19) goto getCharToProcess::@9
to:getCharToProcess::@7
getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@6
[179] if(getCharToProcess::return_dist#1==NOT_FOUND) goto getCharToProcess::@return
to:getCharToProcess::@8
getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7
[180] getCharToProcess::$11 = (word)getCharToProcess::return_y#1
[181] getCharToProcess::$12 = getCharToProcess::$11 << 2
[182] getCharToProcess::$13 = getCharToProcess::$12 + getCharToProcess::$11
[183] getCharToProcess::$8 = getCharToProcess::$13 << 3
[184] getCharToProcess::$9 = (byte*)SCREEN_COPY#0 + getCharToProcess::$8
[185] getCharToProcess::$9[getCharToProcess::return_x#1] = ' '
to:getCharToProcess::@return
getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8
[186] return
to:@return
getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@6
[187] getCharToProcess::closest_dist#10 = getCharToProcess::return_dist#1
to:getCharToProcess::@1
getCharToProcess::@10: scope:[getCharToProcess] from getCharToProcess::@3
[188] getCharToProcess::closest_dist#12 = getCharToProcess::return_dist#1
to:getCharToProcess::@2
getCharToProcess::@12: scope:[getCharToProcess] from getCharToProcess::@4
[189] getCharToProcess::return_dist#6 = getCharToProcess::closest_dist#2
to:getCharToProcess::@3
getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@2
[190] getCharToProcess::return_dist#5 = getCharToProcess::closest_dist#2
to:getCharToProcess::@3
void startProcessing(byte startProcessing::center_x , byte startProcessing::center_y , byte startProcessing::center_dist)
startProcessing: scope:[startProcessing] from main::@6
[191] phi()
to:startProcessing::@1
startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@8
[192] startProcessing::freeIdx#6 = phi( startProcessing/$ff, startProcessing::@8/startProcessing::freeIdx#7 )
to:startProcessing::@2
startProcessing::@2: scope:[startProcessing] from startProcessing::@1 startProcessing::@3
[193] startProcessing::i#2 = phi( startProcessing::@1/0, startProcessing::@3/startProcessing::i#1 )
[194] startProcessing::$28 = startProcessing::i#2 << 1
[195] startProcessing::$29 = startProcessing::$28 + startProcessing::i#2
[196] startProcessing::$30 = startProcessing::$29 << 1
[197] startProcessing::$31 = startProcessing::$30 + startProcessing::i#2
[198] startProcessing::$21 = startProcessing::$31 << 1
[199] if(((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$21]!=STATUS_FREE) goto startProcessing::@3
to:startProcessing::@4
startProcessing::@4: scope:[startProcessing] from startProcessing::@2 startProcessing::@9
[200] startProcessing::freeIdx#2 = phi( startProcessing::@9/startProcessing::freeIdx#8, startProcessing::@2/startProcessing::i#2 )
[201] if(startProcessing::freeIdx#2==$ff) goto startProcessing::@8
to:startProcessing::@5
startProcessing::@5: scope:[startProcessing] from startProcessing::@4
[202] startProcessing::$23 = (word)startProcessing::center_y#0
[203] startProcessing::$33 = startProcessing::$23 << 2
[204] startProcessing::$34 = startProcessing::$33 + startProcessing::$23
[205] startProcessing::$0 = startProcessing::$34 << 3
[206] startProcessing::offset#0 = startProcessing::$0 + startProcessing::center_x#0
[207] startProcessing::colPtr#0 = COLS + startProcessing::offset#0
[208] startProcessing::spriteCol#0 = *startProcessing::colPtr#0
[209] startProcessing::screenPtr#0 = SCREEN + startProcessing::offset#0
[210] startProcessing::$24 = (word)startProcessing::freeIdx#2
[211] startProcessing::$4 = startProcessing::$24 << 6
[212] startProcessing::spriteData#0 = SPRITE_DATA + startProcessing::$4
[213] startProcessing::ch#0 = *startProcessing::screenPtr#0
[214] startProcessing::$25 = (word)startProcessing::ch#0
[215] startProcessing::$6 = startProcessing::$25 << 3
[216] startProcessing::chargenData#0 = CHARGEN + startProcessing::$6
asm { sei }
[218] *PROCPORT = PROCPORT_RAM_CHARROM
to:startProcessing::@6
startProcessing::@6: scope:[startProcessing] from startProcessing::@5 startProcessing::@6
[219] startProcessing::i1#2 = phi( startProcessing::@5/0, startProcessing::@6/startProcessing::i1#1 )
[219] startProcessing::spriteData#2 = phi( startProcessing::@5/startProcessing::spriteData#0, startProcessing::@6/startProcessing::spriteData#1 )
[219] startProcessing::chargenData#2 = phi( startProcessing::@5/startProcessing::chargenData#0, startProcessing::@6/startProcessing::chargenData#1 )
[220] *startProcessing::spriteData#2 = *startProcessing::chargenData#2
[221] startProcessing::spriteData#1 = startProcessing::spriteData#2 + 3
[222] startProcessing::chargenData#1 = ++ startProcessing::chargenData#2
[223] startProcessing::i1#1 = ++ startProcessing::i1#2
[224] if(startProcessing::i1#1!=8) goto startProcessing::@6
to:startProcessing::@7
startProcessing::@7: scope:[startProcessing] from startProcessing::@6
[225] *PROCPORT = PROCPORT_RAM_IO
asm { cli }
[227] startProcessing::$26 = (word)startProcessing::center_x#0
[228] startProcessing::$8 = startProcessing::$26 << 3
[229] startProcessing::$9 = BORDER_XPOS_LEFT + startProcessing::$8
[230] startProcessing::spriteX#0 = startProcessing::$9 << 4
[231] startProcessing::$27 = (word)startProcessing::center_y#0
[232] startProcessing::$11 = startProcessing::$27 << 3
[233] startProcessing::$12 = BORDER_YPOS_TOP + startProcessing::$11
[234] startProcessing::spriteY#0 = startProcessing::$12 << 4
[235] startProcessing::spritePtr#0 = (byte)SPRITE_DATA/$40 + startProcessing::freeIdx#2
[236] startProcessing::$15 = startProcessing::freeIdx#2 << 3
[237] startProcessing::$36 = startProcessing::freeIdx#2 << 1
[238] startProcessing::$37 = startProcessing::$36 + startProcessing::freeIdx#2
[239] startProcessing::$38 = startProcessing::$37 << 1
[240] startProcessing::$39 = startProcessing::$38 + startProcessing::freeIdx#2
[241] startProcessing::$22 = startProcessing::$39 << 1
[242] ((word*)PROCESSING)[startProcessing::$22] = startProcessing::spriteX#0
[243] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y)[startProcessing::$22] = startProcessing::spriteY#0
[244] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX)[startProcessing::$22] = (word)startProcessing::$15
[245] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY)[startProcessing::$22] = $3c
[246] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID)[startProcessing::$22] = startProcessing::freeIdx#2
[247] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR)[startProcessing::$22] = startProcessing::spritePtr#0
[248] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL)[startProcessing::$22] = startProcessing::spriteCol#0
[249] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$22] = STATUS_NEW
[250] ((byte**)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)[startProcessing::$22] = startProcessing::screenPtr#0
to:startProcessing::@return
startProcessing::@return: scope:[startProcessing] from startProcessing::@7
[251] return
to:@return
startProcessing::@8: scope:[startProcessing] from startProcessing::@4
[252] startProcessing::freeIdx#7 = startProcessing::freeIdx#2
to:startProcessing::@1
startProcessing::@3: scope:[startProcessing] from startProcessing::@2
[253] startProcessing::i#1 = ++ startProcessing::i#2
[254] if(startProcessing::i#1!=NUM_PROCESSING-1+1) goto startProcessing::@2
to:startProcessing::@9
startProcessing::@9: scope:[startProcessing] from startProcessing::@3
[255] startProcessing::freeIdx#8 = startProcessing::freeIdx#6
to:startProcessing::@4
word atan2_16(signed word atan2_16::x , signed word atan2_16::y)
atan2_16: scope:[atan2_16] from init_angle_screen::@3
[256] if(atan2_16::y#0>=0) goto atan2_16::@1
to:atan2_16::@2
atan2_16::@2: scope:[atan2_16] from atan2_16
[257] atan2_16::$2 = - atan2_16::y#0
to:atan2_16::@3
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
[258] atan2_16::yi#0 = phi( atan2_16::@1/atan2_16::yi#16, atan2_16::@2/atan2_16::$2 )
[259] if(atan2_16::x#0>=0) goto atan2_16::@4
to:atan2_16::@5
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
[260] atan2_16::$7 = - atan2_16::x#0
to:atan2_16::@6
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
[261] atan2_16::xi#0 = phi( atan2_16::@4/atan2_16::xi#13, atan2_16::@5/atan2_16::$7 )
to:atan2_16::@10
atan2_16::@10: scope:[atan2_16] from atan2_16::@19 atan2_16::@6
[262] atan2_16::angle#12 = phi( atan2_16::@19/atan2_16::angle#13, atan2_16::@6/0 )
[262] atan2_16::i#2 = phi( atan2_16::@19/atan2_16::i#1, atan2_16::@6/0 )
[262] atan2_16::xi#3 = phi( atan2_16::@19/atan2_16::xi#8, atan2_16::@6/atan2_16::xi#0 )
[262] atan2_16::yi#3 = phi( atan2_16::@19/atan2_16::yi#8, atan2_16::@6/atan2_16::yi#0 )
[263] if(atan2_16::yi#3!=0) goto atan2_16::@11
to:atan2_16::@12
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@19
[264] atan2_16::angle#6 = phi( atan2_16::@10/atan2_16::angle#12, atan2_16::@19/atan2_16::angle#13 )
[265] atan2_16::angle#1 = atan2_16::angle#6 >> 1
[266] if(atan2_16::x#0>=0) goto atan2_16::@7
to:atan2_16::@21
atan2_16::@21: scope:[atan2_16] from atan2_16::@12
[267] atan2_16::angle#4 = $8000 - atan2_16::angle#1
to:atan2_16::@7
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@21
[268] atan2_16::angle#11 = phi( atan2_16::@12/atan2_16::angle#1, atan2_16::@21/atan2_16::angle#4 )
[269] if(atan2_16::y#0>=0) goto atan2_16::@8
to:atan2_16::@9
atan2_16::@9: scope:[atan2_16] from atan2_16::@7
[270] atan2_16::angle#5 = - atan2_16::angle#11
to:atan2_16::@8
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
[271] atan2_16::return#0 = phi( atan2_16::@7/atan2_16::angle#11, atan2_16::@9/atan2_16::angle#5 )
to:atan2_16::@return
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
[272] return
to:@return
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
[273] atan2_16::shift#5 = atan2_16::i#2
[274] atan2_16::xd#10 = atan2_16::xi#3
[275] atan2_16::yd#10 = atan2_16::yi#3
to:atan2_16::@13
atan2_16::@13: scope:[atan2_16] from atan2_16::@11 atan2_16::@14
[276] atan2_16::yd#3 = phi( atan2_16::@11/atan2_16::yd#10, atan2_16::@14/atan2_16::yd#1 )
[276] atan2_16::xd#3 = phi( atan2_16::@11/atan2_16::xd#10, atan2_16::@14/atan2_16::xd#1 )
[276] atan2_16::shift#2 = phi( atan2_16::@11/atan2_16::shift#5, atan2_16::@14/atan2_16::shift#1 )
[277] if(atan2_16::shift#2>=2) goto atan2_16::@14
to:atan2_16::@15
atan2_16::@15: scope:[atan2_16] from atan2_16::@13
[278] if(0==atan2_16::shift#2) goto atan2_16::@17
to:atan2_16::@16
atan2_16::@16: scope:[atan2_16] from atan2_16::@15
[279] atan2_16::xd#2 = atan2_16::xd#3 >> 1
[280] atan2_16::yd#2 = atan2_16::yd#3 >> 1
to:atan2_16::@17
atan2_16::@17: scope:[atan2_16] from atan2_16::@15 atan2_16::@16
[281] atan2_16::xd#5 = phi( atan2_16::@15/atan2_16::xd#3, atan2_16::@16/atan2_16::xd#2 )
[281] atan2_16::yd#5 = phi( atan2_16::@15/atan2_16::yd#3, atan2_16::@16/atan2_16::yd#2 )
[282] if(atan2_16::yi#3>=0) goto atan2_16::@18
to:atan2_16::@20
atan2_16::@20: scope:[atan2_16] from atan2_16::@17
[283] atan2_16::xi#2 = atan2_16::xi#3 - atan2_16::yd#5
[284] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5
[285] atan2_16::$23 = atan2_16::i#2 << 1
[286] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23]
to:atan2_16::@19
atan2_16::@19: scope:[atan2_16] from atan2_16::@18 atan2_16::@20
[287] atan2_16::xi#8 = phi( atan2_16::@18/atan2_16::xi#1, atan2_16::@20/atan2_16::xi#2 )
[287] atan2_16::angle#13 = phi( atan2_16::@18/atan2_16::angle#2, atan2_16::@20/atan2_16::angle#3 )
[287] atan2_16::yi#8 = phi( atan2_16::@18/atan2_16::yi#1, atan2_16::@20/atan2_16::yi#2 )
[288] atan2_16::i#1 = ++ atan2_16::i#2
[289] if(atan2_16::i#1==CORDIC_ITERATIONS_16-1+1) goto atan2_16::@12
to:atan2_16::@10
atan2_16::@18: scope:[atan2_16] from atan2_16::@17
[290] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5
[291] atan2_16::yi#1 = atan2_16::yi#3 - atan2_16::xd#5
[292] atan2_16::$22 = atan2_16::i#2 << 1
[293] atan2_16::angle#2 = atan2_16::angle#12 + CORDIC_ATAN2_ANGLES_16[atan2_16::$22]
to:atan2_16::@19
atan2_16::@14: scope:[atan2_16] from atan2_16::@13
[294] atan2_16::xd#1 = atan2_16::xd#3 >> 2
[295] atan2_16::yd#1 = atan2_16::yd#3 >> 2
[296] atan2_16::shift#1 = atan2_16::shift#2 - 2
to:atan2_16::@13
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
[297] atan2_16::xi#13 = atan2_16::x#0
to:atan2_16::@6
atan2_16::@1: scope:[atan2_16] from atan2_16
[298] atan2_16::yi#16 = atan2_16::y#0
to:atan2_16::@3
VARIABLE REGISTER WEIGHTS
byte* SCREEN_COPY
void* SCREEN_COPY#0 0.03076923076923077
byte* SCREEN_DIST
void* SCREEN_DIST#0 0.031746031746031744
void __start()
word atan2_16(signed word atan2_16::x , signed word atan2_16::y)
signed word~ atan2_16::$2 200002.0
byte~ atan2_16::$22 2.00000002E8
byte~ atan2_16::$23 2.00000002E8
signed word~ atan2_16::$7 200002.0
word atan2_16::angle
word atan2_16::angle#1 150001.5
word atan2_16::angle#11 200002.0
word atan2_16::angle#12 1.904761923809524E7
word atan2_16::angle#13 1.3333333466666667E8
word atan2_16::angle#2 2.00000002E8
word atan2_16::angle#3 2.00000002E8
word atan2_16::angle#4 200002.0
word atan2_16::angle#5 200002.0
word atan2_16::angle#6 2.00100003E8
byte atan2_16::i
byte atan2_16::i#1 1.500000015E8
byte atan2_16::i#2 2.0833333541666668E7
word atan2_16::return
word atan2_16::return#0 70001.0
word atan2_16::return#2 20002.0
byte atan2_16::shift
byte atan2_16::shift#1 2.000000002E9
byte atan2_16::shift#2 8.0000000125E8
byte atan2_16::shift#5 6.6666667333333336E7
signed word atan2_16::x
signed word atan2_16::x#0 10789.605263157895
signed word atan2_16::xd
signed word atan2_16::xd#1 6.666666673333334E8
signed word atan2_16::xd#10 1.00000001E8
signed word atan2_16::xd#2 1.00000001E8
signed word atan2_16::xd#3 7.666666683333335E8
signed word atan2_16::xd#5 1.00000001E8
signed word atan2_16::xi
signed word atan2_16::xi#0 300003.0
signed word atan2_16::xi#1 5.00000005E7
signed word atan2_16::xi#13 200002.0
signed word atan2_16::xi#2 5.00000005E7
signed word atan2_16::xi#3 2.6673333666666668E7
signed word atan2_16::xi#8 1.00000001E8
signed word atan2_16::y
signed word atan2_16::y#0 10250.125
signed word atan2_16::yd
signed word atan2_16::yd#1 1.000000001E9
signed word atan2_16::yd#10 2.00000002E8
signed word atan2_16::yd#2 2.00000002E8
signed word atan2_16::yd#3 4.6000000099999994E8
signed word atan2_16::yd#5 2.00000002E8
signed word atan2_16::yi
signed word atan2_16::yi#0 60000.600000000006
signed word atan2_16::yi#1 6.6666667333333336E7
signed word atan2_16::yi#16 200002.0
signed word atan2_16::yi#2 6.6666667333333336E7
signed word atan2_16::yi#3 3.53000004117647E7
signed word atan2_16::yi#8 1.00000001E8
struct ProcessingChar getCharToProcess()
word~ getCharToProcess::$11 1501.5
word~ getCharToProcess::$12 2002.0
word~ getCharToProcess::$13 2002.0
word~ getCharToProcess::$8 2002.0
byte*~ getCharToProcess::$9 2002.0
byte getCharToProcess::closest_dist
byte getCharToProcess::closest_dist#10 200002.0
byte getCharToProcess::closest_dist#12 2000002.0
byte getCharToProcess::closest_dist#2 1025001.25
byte getCharToProcess::closest_dist#8 200002.0
byte getCharToProcess::closest_x
byte getCharToProcess::closest_x#7 516667.3333333334
byte getCharToProcess::closest_x#9 200002.0
byte getCharToProcess::closest_y
byte getCharToProcess::closest_y#7 516667.3333333334
byte getCharToProcess::closest_y#9 200002.0
byte getCharToProcess::dist
byte getCharToProcess::dist#0 750000.75
byte* getCharToProcess::dist_line
byte* getCharToProcess::dist_line#0 2002.0
byte* getCharToProcess::dist_line#1 50000.5
byte* getCharToProcess::dist_line#6 85785.99999999999
struct ProcessingChar getCharToProcess::return
byte getCharToProcess::return_dist
byte getCharToProcess::return_dist#0 67.33333333333333
byte getCharToProcess::return_dist#1 227839.2777777778
byte getCharToProcess::return_dist#5 2000002.0
byte getCharToProcess::return_dist#6 2000002.0
byte getCharToProcess::return_x
byte getCharToProcess::return_x#0 67.33333333333333
byte getCharToProcess::return_x#1 227839.2777777778
byte getCharToProcess::return_x#7 1000001.0
byte getCharToProcess::return_y
byte getCharToProcess::return_y#0 67.33333333333333
byte getCharToProcess::return_y#1 215795.05263157893
byte getCharToProcess::return_y#7 2000002.0
byte* getCharToProcess::screen_line
byte* getCharToProcess::screen_line#0 1001.0
byte* getCharToProcess::screen_line#1 40000.4
byte* getCharToProcess::screen_line#4 92384.92307692306
byte getCharToProcess::x
byte getCharToProcess::x#1 1000001.0
byte getCharToProcess::x#2 555556.1111111111
byte getCharToProcess::y
byte getCharToProcess::y#1 100001.0
byte getCharToProcess::y#7 80000.20000000001
byte* heap_head
byte* heap_head#0 3.25
byte* heap_head#6 13.0
void initSprites()
byte initSprites::i
byte initSprites::i#1 1501.5
byte initSprites::i#2 1501.5
byte* initSprites::sp
byte* initSprites::sp#1 2002.0
byte* initSprites::sp#2 1334.6666666666667
void init_angle_screen(byte* init_angle_screen::screen)
byte~ init_angle_screen::$10 20002.0
byte~ init_angle_screen::$11 20002.0
byte~ init_angle_screen::$3 20002.0
byte~ init_angle_screen::$4 20002.0
byte~ init_angle_screen::$5 20002.0
word~ init_angle_screen::$7 20002.0
byte~ init_angle_screen::$9 20002.0
byte init_angle_screen::ang_w
byte init_angle_screen::ang_w#0 8334.166666666666
word init_angle_screen::angle_w
word init_angle_screen::angle_w#0 20002.0
byte* init_angle_screen::screen
byte* init_angle_screen::screen#0 112.0
byte* init_angle_screen::screen_bottomline
byte* init_angle_screen::screen_bottomline#0 151.5
byte* init_angle_screen::screen_bottomline#1 667.3333333333334
byte* init_angle_screen::screen_bottomline#6 884.2
byte* init_angle_screen::screen_topline
byte* init_angle_screen::screen_topline#1 500.5
byte* init_angle_screen::screen_topline#6 921.0416666666666
byte* init_angle_screen::screen_topline#7 202.0
byte init_angle_screen::x
byte init_angle_screen::x#1 10001.0
byte init_angle_screen::x#2 2857.4285714285716
byte init_angle_screen::xb
byte init_angle_screen::xb#1 20002.0
byte init_angle_screen::xb#2 1818.3636363636363
signed word init_angle_screen::xw
word init_angle_screen::xw#0 3333.6666666666665
byte init_angle_screen::y
byte init_angle_screen::y#1 1501.5
byte init_angle_screen::y#5 461.65384615384613
signed word init_angle_screen::yw
word init_angle_screen::yw#0 5000.5
__interrupt(hardware_clobber) void irqBottom()
byte irqBottom::i
__interrupt(hardware_clobber) void irqTop()
byte irqTop::i
byte irqTop::i1
void main()
byte~ main::$10 202.0
byte~ main::$11 202.0
byte~ main::$12 202.0
byte~ main::$13 202.0
byte~ main::$14 202.0
byte main::center_dist
byte main::center_dist#0 202.0
byte main::center_x
byte main::center_x#0 50.5
byte main::center_y
byte main::center_y#0 50.5
byte* main::dst
byte* main::dst#0 22.0
byte* main::dst#1 202.0
byte* main::dst#2 78.5
byte main::i
byte main::i#1 151.5
byte main::i#2 72.14285714285714
byte* main::src
byte* main::src#1 101.0
byte* main::src#2 134.66666666666666
void* malloc(word malloc::size)
byte* malloc::mem
byte* malloc::mem#0 4.4
void* malloc::return
word malloc::size
void processChars()
byte~ processChars::$10 202.0
word~ processChars::$12 101.0
byte~ processChars::$13 17.565217391304348
word~ processChars::$21 101.0
byte~ processChars::$25 202.0
byte~ processChars::$28 202.0
byte~ processChars::$29 202.0
byte~ processChars::$30 202.0
byte~ processChars::$73 202.0
byte~ processChars::$79 202.0
byte~ processChars::$87 202.0
byte~ processChars::$88 202.0
byte~ processChars::$89 202.0
byte~ processChars::$9 202.0
byte processChars::bitmask
byte processChars::bitmask#0 21.956521739130434
byte processChars::i
byte processChars::i#1 151.5
byte processChars::i#10 11.222222222222221
byte processChars::numActive
byte processChars::numActive#1 202.0
byte processChars::numActive#10 7.046511627906977
byte processChars::numActive#3 101.0
struct ProcessingSprite* processChars::processing
struct ProcessingSprite* processChars::processing#0 3.0606060606060606
byte processChars::xchar
byte processChars::xchar#0 202.0
word processChars::xpos
word processChars::xpos#0 21.642857142857142
byte processChars::ychar
byte processChars::ychar#0 202.0
byte processChars::ypos
byte processChars::ypos#0 25.25
void setupRasterIrq(word setupRasterIrq::raster , void()* setupRasterIrq::irqRoutine)
void()* setupRasterIrq::irqRoutine
word setupRasterIrq::raster
void startProcessing(byte startProcessing::center_x , byte startProcessing::center_y , byte startProcessing::center_dist)
word~ startProcessing::$0 2002.0
word~ startProcessing::$11 2002.0
word~ startProcessing::$12 2002.0
byte~ startProcessing::$15 125.125
byte~ startProcessing::$21 2000002.0
byte~ startProcessing::$22 1112.222222222222
word~ startProcessing::$23 1501.5
word~ startProcessing::$24 2002.0
word~ startProcessing::$25 2002.0
word~ startProcessing::$26 2002.0
word~ startProcessing::$27 2002.0
byte~ startProcessing::$28 2000002.0
byte~ startProcessing::$29 2000002.0
byte~ startProcessing::$30 2000002.0
byte~ startProcessing::$31 2000002.0
word~ startProcessing::$33 2002.0
word~ startProcessing::$34 2002.0
byte~ startProcessing::$36 2002.0
byte~ startProcessing::$37 2002.0
byte~ startProcessing::$38 2002.0
byte~ startProcessing::$39 2002.0
word~ startProcessing::$4 2002.0
word~ startProcessing::$6 2002.0
word~ startProcessing::$8 2002.0
word~ startProcessing::$9 2002.0
struct ProcessingChar startProcessing::center
byte startProcessing::center_dist
byte startProcessing::center_x
byte startProcessing::center_x#0 26.238095238095237
byte startProcessing::center_y
byte startProcessing::center_y#0 2.2444444444444445
byte startProcessing::ch
byte startProcessing::ch#0 1001.0
byte* startProcessing::chargenData
byte* startProcessing::chargenData#0 667.3333333333334
byte* startProcessing::chargenData#1 66667.33333333333
byte* startProcessing::chargenData#2 100334.66666666666
byte* startProcessing::colPtr
byte* startProcessing::colPtr#0 2002.0
byte startProcessing::freeIdx
byte startProcessing::freeIdx#2 28391.52173913043
byte startProcessing::freeIdx#6 20000.2
byte startProcessing::freeIdx#7 200002.0
byte startProcessing::freeIdx#8 200002.0
byte startProcessing::i
byte startProcessing::i#1 1500001.5
byte startProcessing::i#2 857143.7142857142
byte startProcessing::i1
byte startProcessing::i1#1 150001.5
byte startProcessing::i1#2 50000.5
word startProcessing::offset
word startProcessing::offset#0 1001.0
byte* startProcessing::screenPtr
byte* startProcessing::screenPtr#0 73.2439024390244
byte startProcessing::spriteCol
byte startProcessing::spriteCol#0 50.05
byte* startProcessing::spriteData
byte* startProcessing::spriteData#0 286.0
byte* startProcessing::spriteData#1 50000.5
byte* startProcessing::spriteData#2 150502.0
byte startProcessing::spriteIdx
byte startProcessing::spritePtr
byte startProcessing::spritePtr#0 166.83333333333334
word startProcessing::spriteX
word startProcessing::spriteX#0 166.83333333333334
word startProcessing::spriteY
word startProcessing::spriteY#0 222.44444444444446
Initial phi equivalence classes
[ heap_head#6 heap_head#0 ]
[ main::src#2 main::src#1 ]
[ main::dst#2 main::dst#0 main::dst#1 ]
[ main::i#2 main::i#1 ]
[ processChars::i#10 processChars::i#1 ]
[ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
[ init_angle_screen::y#5 init_angle_screen::y#1 ]
[ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ]
[ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
[ init_angle_screen::x#2 init_angle_screen::x#1 ]
[ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
[ initSprites::sp#2 initSprites::sp#1 ]
[ initSprites::i#2 initSprites::i#1 ]
[ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ]
[ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ]
[ getCharToProcess::y#7 getCharToProcess::y#1 ]
[ getCharToProcess::x#2 getCharToProcess::x#1 ]
[ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
[ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
[ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
[ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
[ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
[ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
[ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ]
[ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ]
[ startProcessing::i1#2 startProcessing::i1#1 ]
[ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
[ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
[ atan2_16::i#2 atan2_16::i#1 ]
[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
[ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
[ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
[ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
[ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Added variable SCREEN_COPY#0 to live range equivalence class [ SCREEN_COPY#0 ]
Added variable SCREEN_DIST#0 to live range equivalence class [ SCREEN_DIST#0 ]
Added variable malloc::mem#0 to live range equivalence class [ malloc::mem#0 ]
Added variable init_angle_screen::screen#0 to live range equivalence class [ init_angle_screen::screen#0 ]
Added variable main::$11 to live range equivalence class [ main::$11 ]
Added variable main::$12 to live range equivalence class [ main::$12 ]
Added variable main::$13 to live range equivalence class [ main::$13 ]
Added variable main::$14 to live range equivalence class [ main::$14 ]
Added variable main::$10 to live range equivalence class [ main::$10 ]
Added variable getCharToProcess::return_x#0 to live range equivalence class [ getCharToProcess::return_x#0 ]
Added variable getCharToProcess::return_y#0 to live range equivalence class [ getCharToProcess::return_y#0 ]
Added variable getCharToProcess::return_dist#0 to live range equivalence class [ getCharToProcess::return_dist#0 ]
Added variable main::center_x#0 to live range equivalence class [ main::center_x#0 ]
Added variable main::center_y#0 to live range equivalence class [ main::center_y#0 ]
Added variable main::center_dist#0 to live range equivalence class [ main::center_dist#0 ]
Added variable startProcessing::center_x#0 to live range equivalence class [ startProcessing::center_x#0 ]
Added variable startProcessing::center_y#0 to live range equivalence class [ startProcessing::center_y#0 ]
Added variable processChars::$13 to live range equivalence class [ processChars::$13 ]
Added variable processChars::$87 to live range equivalence class [ processChars::$87 ]
Added variable processChars::$88 to live range equivalence class [ processChars::$88 ]
Added variable processChars::$89 to live range equivalence class [ processChars::$89 ]
Added variable processChars::$28 to live range equivalence class [ processChars::$28 ]
Added variable processChars::processing#0 to live range equivalence class [ processChars::processing#0 ]
Added variable processChars::bitmask#0 to live range equivalence class [ processChars::bitmask#0 ]
Added variable processChars::xpos#0 to live range equivalence class [ processChars::xpos#0 ]
Added variable processChars::$9 to live range equivalence class [ processChars::$9 ]
Added variable processChars::$10 to live range equivalence class [ processChars::$10 ]
Added variable processChars::$12 to live range equivalence class [ processChars::$12 ]
Added variable processChars::ypos#0 to live range equivalence class [ processChars::ypos#0 ]
Added variable processChars::$21 to live range equivalence class [ processChars::$21 ]
Added variable processChars::$73 to live range equivalence class [ processChars::$73 ]
Added variable processChars::xchar#0 to live range equivalence class [ processChars::xchar#0 ]
Added variable processChars::$29 to live range equivalence class [ processChars::$29 ]
Added variable processChars::$79 to live range equivalence class [ processChars::$79 ]
Added variable processChars::ychar#0 to live range equivalence class [ processChars::ychar#0 ]
Added variable processChars::$30 to live range equivalence class [ processChars::$30 ]
Added variable processChars::$25 to live range equivalence class [ processChars::$25 ]
Added variable init_angle_screen::$3 to live range equivalence class [ init_angle_screen::$3 ]
Added variable init_angle_screen::$4 to live range equivalence class [ init_angle_screen::$4 ]
Added variable init_angle_screen::xw#0 to live range equivalence class [ init_angle_screen::xw#0 ]
Added variable init_angle_screen::$5 to live range equivalence class [ init_angle_screen::$5 ]
Added variable init_angle_screen::yw#0 to live range equivalence class [ init_angle_screen::yw#0 ]
Added variable atan2_16::x#0 to live range equivalence class [ atan2_16::x#0 ]
Added variable atan2_16::y#0 to live range equivalence class [ atan2_16::y#0 ]
Added variable atan2_16::return#2 to live range equivalence class [ atan2_16::return#2 ]
Added variable init_angle_screen::angle_w#0 to live range equivalence class [ init_angle_screen::angle_w#0 ]
Added variable init_angle_screen::$7 to live range equivalence class [ init_angle_screen::$7 ]
Added variable init_angle_screen::ang_w#0 to live range equivalence class [ init_angle_screen::ang_w#0 ]
Added variable init_angle_screen::$9 to live range equivalence class [ init_angle_screen::$9 ]
Added variable init_angle_screen::$10 to live range equivalence class [ init_angle_screen::$10 ]
Added variable init_angle_screen::$11 to live range equivalence class [ init_angle_screen::$11 ]
Added variable getCharToProcess::$11 to live range equivalence class [ getCharToProcess::$11 ]
Added variable getCharToProcess::$12 to live range equivalence class [ getCharToProcess::$12 ]
Added variable getCharToProcess::$13 to live range equivalence class [ getCharToProcess::$13 ]
Added variable getCharToProcess::$8 to live range equivalence class [ getCharToProcess::$8 ]
Added variable getCharToProcess::$9 to live range equivalence class [ getCharToProcess::$9 ]
Added variable startProcessing::$28 to live range equivalence class [ startProcessing::$28 ]
Added variable startProcessing::$29 to live range equivalence class [ startProcessing::$29 ]
Added variable startProcessing::$30 to live range equivalence class [ startProcessing::$30 ]
Added variable startProcessing::$31 to live range equivalence class [ startProcessing::$31 ]
Added variable startProcessing::$21 to live range equivalence class [ startProcessing::$21 ]
Added variable startProcessing::$23 to live range equivalence class [ startProcessing::$23 ]
Added variable startProcessing::$33 to live range equivalence class [ startProcessing::$33 ]
Added variable startProcessing::$34 to live range equivalence class [ startProcessing::$34 ]
Added variable startProcessing::$0 to live range equivalence class [ startProcessing::$0 ]
Added variable startProcessing::offset#0 to live range equivalence class [ startProcessing::offset#0 ]
Added variable startProcessing::colPtr#0 to live range equivalence class [ startProcessing::colPtr#0 ]
Added variable startProcessing::spriteCol#0 to live range equivalence class [ startProcessing::spriteCol#0 ]
Added variable startProcessing::screenPtr#0 to live range equivalence class [ startProcessing::screenPtr#0 ]
Added variable startProcessing::$24 to live range equivalence class [ startProcessing::$24 ]
Added variable startProcessing::$4 to live range equivalence class [ startProcessing::$4 ]
Added variable startProcessing::ch#0 to live range equivalence class [ startProcessing::ch#0 ]
Added variable startProcessing::$25 to live range equivalence class [ startProcessing::$25 ]
Added variable startProcessing::$6 to live range equivalence class [ startProcessing::$6 ]
Added variable startProcessing::$26 to live range equivalence class [ startProcessing::$26 ]
Added variable startProcessing::$8 to live range equivalence class [ startProcessing::$8 ]
Added variable startProcessing::$9 to live range equivalence class [ startProcessing::$9 ]
Added variable startProcessing::spriteX#0 to live range equivalence class [ startProcessing::spriteX#0 ]
Added variable startProcessing::$27 to live range equivalence class [ startProcessing::$27 ]
Added variable startProcessing::$11 to live range equivalence class [ startProcessing::$11 ]
Added variable startProcessing::$12 to live range equivalence class [ startProcessing::$12 ]
Added variable startProcessing::spriteY#0 to live range equivalence class [ startProcessing::spriteY#0 ]
Added variable startProcessing::spritePtr#0 to live range equivalence class [ startProcessing::spritePtr#0 ]
Added variable startProcessing::$15 to live range equivalence class [ startProcessing::$15 ]
Added variable startProcessing::$36 to live range equivalence class [ startProcessing::$36 ]
Added variable startProcessing::$37 to live range equivalence class [ startProcessing::$37 ]
Added variable startProcessing::$38 to live range equivalence class [ startProcessing::$38 ]
Added variable startProcessing::$39 to live range equivalence class [ startProcessing::$39 ]
Added variable startProcessing::$22 to live range equivalence class [ startProcessing::$22 ]
Added variable atan2_16::$23 to live range equivalence class [ atan2_16::$23 ]
Added variable atan2_16::$22 to live range equivalence class [ atan2_16::$22 ]
Complete equivalence classes
[ heap_head#6 heap_head#0 ]
[ main::src#2 main::src#1 ]
[ main::dst#2 main::dst#0 main::dst#1 ]
[ main::i#2 main::i#1 ]
[ processChars::i#10 processChars::i#1 ]
[ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
[ init_angle_screen::y#5 init_angle_screen::y#1 ]
[ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ]
[ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
[ init_angle_screen::x#2 init_angle_screen::x#1 ]
[ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
[ initSprites::sp#2 initSprites::sp#1 ]
[ initSprites::i#2 initSprites::i#1 ]
[ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ]
[ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ]
[ getCharToProcess::y#7 getCharToProcess::y#1 ]
[ getCharToProcess::x#2 getCharToProcess::x#1 ]
[ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
[ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
[ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
[ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
[ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
[ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
[ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ]
[ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ]
[ startProcessing::i1#2 startProcessing::i1#1 ]
[ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
[ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
[ atan2_16::i#2 atan2_16::i#1 ]
[ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
[ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
[ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
[ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
[ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
[ SCREEN_COPY#0 ]
[ SCREEN_DIST#0 ]
[ malloc::mem#0 ]
[ init_angle_screen::screen#0 ]
[ main::$11 ]
[ main::$12 ]
[ main::$13 ]
[ main::$14 ]
[ main::$10 ]
[ getCharToProcess::return_x#0 ]
[ getCharToProcess::return_y#0 ]
[ getCharToProcess::return_dist#0 ]
[ main::center_x#0 ]
[ main::center_y#0 ]
[ main::center_dist#0 ]
[ startProcessing::center_x#0 ]
[ startProcessing::center_y#0 ]
[ processChars::$13 ]
[ processChars::$87 ]
[ processChars::$88 ]
[ processChars::$89 ]
[ processChars::$28 ]
[ processChars::processing#0 ]
[ processChars::bitmask#0 ]
[ processChars::xpos#0 ]
[ processChars::$9 ]
[ processChars::$10 ]
[ processChars::$12 ]
[ processChars::ypos#0 ]
[ processChars::$21 ]
[ processChars::$73 ]
[ processChars::xchar#0 ]
[ processChars::$29 ]
[ processChars::$79 ]
[ processChars::ychar#0 ]
[ processChars::$30 ]
[ processChars::$25 ]
[ init_angle_screen::$3 ]
[ init_angle_screen::$4 ]
[ init_angle_screen::xw#0 ]
[ init_angle_screen::$5 ]
[ init_angle_screen::yw#0 ]
[ atan2_16::x#0 ]
[ atan2_16::y#0 ]
[ atan2_16::return#2 ]
[ init_angle_screen::angle_w#0 ]
[ init_angle_screen::$7 ]
[ init_angle_screen::ang_w#0 ]
[ init_angle_screen::$9 ]
[ init_angle_screen::$10 ]
[ init_angle_screen::$11 ]
[ getCharToProcess::$11 ]
[ getCharToProcess::$12 ]
[ getCharToProcess::$13 ]
[ getCharToProcess::$8 ]
[ getCharToProcess::$9 ]
[ startProcessing::$28 ]
[ startProcessing::$29 ]
[ startProcessing::$30 ]
[ startProcessing::$31 ]
[ startProcessing::$21 ]
[ startProcessing::$23 ]
[ startProcessing::$33 ]
[ startProcessing::$34 ]
[ startProcessing::$0 ]
[ startProcessing::offset#0 ]
[ startProcessing::colPtr#0 ]
[ startProcessing::spriteCol#0 ]
[ startProcessing::screenPtr#0 ]
[ startProcessing::$24 ]
[ startProcessing::$4 ]
[ startProcessing::ch#0 ]
[ startProcessing::$25 ]
[ startProcessing::$6 ]
[ startProcessing::$26 ]
[ startProcessing::$8 ]
[ startProcessing::$9 ]
[ startProcessing::spriteX#0 ]
[ startProcessing::$27 ]
[ startProcessing::$11 ]
[ startProcessing::$12 ]
[ startProcessing::spriteY#0 ]
[ startProcessing::spritePtr#0 ]
[ startProcessing::$15 ]
[ startProcessing::$36 ]
[ startProcessing::$37 ]
[ startProcessing::$38 ]
[ startProcessing::$39 ]
[ startProcessing::$22 ]
[ atan2_16::$23 ]
[ atan2_16::$22 ]
Allocated zp[2]:2 [ heap_head#6 heap_head#0 ]
Allocated zp[2]:4 [ main::src#2 main::src#1 ]
Allocated zp[2]:6 [ main::dst#2 main::dst#0 main::dst#1 ]
Allocated zp[1]:8 [ main::i#2 main::i#1 ]
Allocated zp[1]:9 [ processChars::i#10 processChars::i#1 ]
Allocated zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Allocated zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Allocated zp[2]:12 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ]
Allocated zp[2]:14 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ]
Allocated zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Allocated zp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Allocated zp[2]:18 [ initSprites::sp#2 initSprites::sp#1 ]
Allocated zp[1]:20 [ initSprites::i#2 initSprites::i#1 ]
Allocated zp[2]:21 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ]
Allocated zp[2]:23 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ]
Allocated zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Allocated zp[1]:26 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Allocated zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Allocated zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Allocated zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Allocated zp[1]:30 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
Allocated zp[1]:31 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Allocated zp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Allocated zp[2]:33 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ]
Allocated zp[2]:35 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ]
Allocated zp[1]:37 [ startProcessing::i1#2 startProcessing::i1#1 ]
Allocated zp[2]:38 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
Allocated zp[2]:40 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
Allocated zp[1]:42 [ atan2_16::i#2 atan2_16::i#1 ]
Allocated zp[2]:43 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ]
Allocated zp[2]:45 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ]
Allocated zp[1]:47 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Allocated zp[2]:48 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated zp[2]:50 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated zp[2]:52 [ SCREEN_COPY#0 ]
Allocated zp[2]:54 [ SCREEN_DIST#0 ]
Allocated zp[2]:56 [ malloc::mem#0 ]
Allocated zp[2]:58 [ init_angle_screen::screen#0 ]
Allocated zp[1]:60 [ main::$11 ]
Allocated zp[1]:61 [ main::$12 ]
Allocated zp[1]:62 [ main::$13 ]
Allocated zp[1]:63 [ main::$14 ]
Allocated zp[1]:64 [ main::$10 ]
Allocated zp[1]:65 [ getCharToProcess::return_x#0 ]
Allocated zp[1]:66 [ getCharToProcess::return_y#0 ]
Allocated zp[1]:67 [ getCharToProcess::return_dist#0 ]
Allocated zp[1]:68 [ main::center_x#0 ]
Allocated zp[1]:69 [ main::center_y#0 ]
Allocated zp[1]:70 [ main::center_dist#0 ]
Allocated zp[1]:71 [ startProcessing::center_x#0 ]
Allocated zp[1]:72 [ startProcessing::center_y#0 ]
Allocated zp[1]:73 [ processChars::$13 ]
Allocated zp[1]:74 [ processChars::$87 ]
Allocated zp[1]:75 [ processChars::$88 ]
Allocated zp[1]:76 [ processChars::$89 ]
Allocated zp[1]:77 [ processChars::$28 ]
Allocated zp[2]:78 [ processChars::processing#0 ]
Allocated zp[1]:80 [ processChars::bitmask#0 ]
Allocated zp[2]:81 [ processChars::xpos#0 ]
Allocated zp[1]:83 [ processChars::$9 ]
Allocated zp[1]:84 [ processChars::$10 ]
Allocated zp[2]:85 [ processChars::$12 ]
Allocated zp[1]:87 [ processChars::ypos#0 ]
Allocated zp[2]:88 [ processChars::$21 ]
Allocated zp[1]:90 [ processChars::$73 ]
Allocated zp[1]:91 [ processChars::xchar#0 ]
Allocated zp[1]:92 [ processChars::$29 ]
Allocated zp[1]:93 [ processChars::$79 ]
Allocated zp[1]:94 [ processChars::ychar#0 ]
Allocated zp[1]:95 [ processChars::$30 ]
Allocated zp[1]:96 [ processChars::$25 ]
Allocated zp[1]:97 [ init_angle_screen::$3 ]
Allocated zp[1]:98 [ init_angle_screen::$4 ]
Allocated zp[2]:99 [ init_angle_screen::xw#0 ]
Allocated zp[1]:101 [ init_angle_screen::$5 ]
Allocated zp[2]:102 [ init_angle_screen::yw#0 ]
Allocated zp[2]:104 [ atan2_16::x#0 ]
Allocated zp[2]:106 [ atan2_16::y#0 ]
Allocated zp[2]:108 [ atan2_16::return#2 ]
Allocated zp[2]:110 [ init_angle_screen::angle_w#0 ]
Allocated zp[2]:112 [ init_angle_screen::$7 ]
Allocated zp[1]:114 [ init_angle_screen::ang_w#0 ]
Allocated zp[1]:115 [ init_angle_screen::$9 ]
Allocated zp[1]:116 [ init_angle_screen::$10 ]
Allocated zp[1]:117 [ init_angle_screen::$11 ]
Allocated zp[2]:118 [ getCharToProcess::$11 ]
Allocated zp[2]:120 [ getCharToProcess::$12 ]
Allocated zp[2]:122 [ getCharToProcess::$13 ]
Allocated zp[2]:124 [ getCharToProcess::$8 ]
Allocated zp[2]:126 [ getCharToProcess::$9 ]
Allocated zp[1]:128 [ startProcessing::$28 ]
Allocated zp[1]:129 [ startProcessing::$29 ]
Allocated zp[1]:130 [ startProcessing::$30 ]
Allocated zp[1]:131 [ startProcessing::$31 ]
Allocated zp[1]:132 [ startProcessing::$21 ]
Allocated zp[2]:133 [ startProcessing::$23 ]
Allocated zp[2]:135 [ startProcessing::$33 ]
Allocated zp[2]:137 [ startProcessing::$34 ]
Allocated zp[2]:139 [ startProcessing::$0 ]
Allocated zp[2]:141 [ startProcessing::offset#0 ]
Allocated zp[2]:143 [ startProcessing::colPtr#0 ]
Allocated zp[1]:145 [ startProcessing::spriteCol#0 ]
Allocated zp[2]:146 [ startProcessing::screenPtr#0 ]
Allocated zp[2]:148 [ startProcessing::$24 ]
Allocated zp[2]:150 [ startProcessing::$4 ]
Allocated zp[1]:152 [ startProcessing::ch#0 ]
Allocated zp[2]:153 [ startProcessing::$25 ]
Allocated zp[2]:155 [ startProcessing::$6 ]
Allocated zp[2]:157 [ startProcessing::$26 ]
Allocated zp[2]:159 [ startProcessing::$8 ]
Allocated zp[2]:161 [ startProcessing::$9 ]
Allocated zp[2]:163 [ startProcessing::spriteX#0 ]
Allocated zp[2]:165 [ startProcessing::$27 ]
Allocated zp[2]:167 [ startProcessing::$11 ]
Allocated zp[2]:169 [ startProcessing::$12 ]
Allocated zp[2]:171 [ startProcessing::spriteY#0 ]
Allocated zp[1]:173 [ startProcessing::spritePtr#0 ]
Allocated zp[1]:174 [ startProcessing::$15 ]
Allocated zp[1]:175 [ startProcessing::$36 ]
Allocated zp[1]:176 [ startProcessing::$37 ]
Allocated zp[1]:177 [ startProcessing::$38 ]
Allocated zp[1]:178 [ startProcessing::$39 ]
Allocated zp[1]:179 [ startProcessing::$22 ]
Allocated zp[1]:180 [ atan2_16::$23 ]
Allocated zp[1]:181 [ atan2_16::$22 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [3] SCREEN_COPY#0 = (void*)malloc::mem#0 [ SCREEN_COPY#0 heap_head#0 ] ( [ SCREEN_COPY#0 heap_head#0 ] { { heap_head#0 = heap_head#6 } } ) always clobbers reg byte a
Statement [5] SCREEN_DIST#0 = (void*)malloc::mem#0 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ( [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [12] *RASTER = RASTER_IRQ_TOP [ ] ( [ ] { } ) always clobbers reg byte a
Statement [13] *HARDWARE_IRQ = &irqTop [ ] ( [ ] { } ) always clobbers reg byte a
Statement [14] *IRQ_STATUS = IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a
Statement [15] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y
Statement [17] *RASTER = RASTER_IRQ_MIDDLE [ ] ( [ ] { } ) always clobbers reg byte a
Statement [18] *HARDWARE_IRQ = &irqBottom [ ] ( [ ] { } ) always clobbers reg byte a
Statement [19] *IRQ_STATUS = IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a
Statement [20] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y
Statement [22] malloc::mem#0 = heap_head#6 - $3e8 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] { } malloc:4 [ SCREEN_COPY#0 malloc::mem#0 ] { { heap_head#0 = heap_head#6 } } ) always clobbers reg byte a
Statement [23] heap_head#0 = malloc::mem#0 [ malloc::mem#0 heap_head#0 ] ( malloc:2 [ malloc::mem#0 heap_head#0 ] { } malloc:4 [ SCREEN_COPY#0 malloc::mem#0 heap_head#0 ] { { heap_head#0 = heap_head#6 } } ) always clobbers reg byte a
Statement [25] init_angle_screen::screen#0 = (byte*)SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] { } ) always clobbers reg byte a
Statement [27] main::dst#0 = (byte*)SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] { } ) always clobbers reg byte a
Statement [29] if(main::src#2!=SCREEN+$3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] { } ) always clobbers reg byte a
Statement [31] main::$11 = main::i#2 << 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:8 [ main::i#2 main::i#1 ]
Statement [32] main::$12 = main::$11 + main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] { } ) always clobbers reg byte a
Statement [33] main::$13 = main::$12 << 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] { } ) always clobbers reg byte a
Statement [34] main::$14 = main::$13 + main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] { } ) always clobbers reg byte a
Statement [35] main::$10 = main::$14 << 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] { } ) always clobbers reg byte a
Statement [36] PROCESSING[main::$10] = memcpy(*(&$0), struct ProcessingSprite, SIZEOF_STRUCT_PROCESSINGSPRITE) [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y
Removing always clobbered register reg byte x as potential for zp[1]:8 [ main::i#2 main::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:8 [ main::i#2 main::i#1 ]
Statement [38] if(main::i#1!=NUM_PROCESSING-1+1) goto main::@3 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] { } ) always clobbers reg byte a
Statement [52] *(SCREEN+$3e7) = '.' [ ] ( main:7 [ ] { } ) always clobbers reg byte a
Statement [57] *main::dst#2 = *main::src#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] { } ) always clobbers reg byte a reg byte y
Statement [62] processChars::$13 = processChars::i#10 << 1 [ processChars::i#10 processChars::numActive#10 processChars::$13 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:9 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Statement [63] processChars::$87 = processChars::$13 + processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$87 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$87 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:73 [ processChars::$13 ]
Statement [64] processChars::$88 = processChars::$87 << 1 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$88 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$88 ] { } ) always clobbers reg byte a
Statement [65] processChars::$89 = processChars::$88 + processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$89 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$89 ] { } ) always clobbers reg byte a
Statement [66] processChars::$28 = processChars::$89 << 1 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$28 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$28 ] { } ) always clobbers reg byte a
Statement [67] processChars::processing#0 = PROCESSING + processChars::$28 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 ] { } ) always clobbers reg byte a
Statement [68] processChars::bitmask#0 = 1 << ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID] [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:9 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:73 [ processChars::$13 ]
Statement [69] if(((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]==STATUS_FREE) goto processChars::@2 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp[1]:80 [ processChars::bitmask#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:80 [ processChars::bitmask#0 ]
Statement [70] if(((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]!=STATUS_NEW) goto processChars::@3 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [71] *(((byte**)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR]) = ' ' [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte x reg byte y
Removing always clobbered register reg byte x as potential for zp[1]:9 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Removing always clobbered register reg byte x as potential for zp[1]:73 [ processChars::$13 ]
Removing always clobbered register reg byte x as potential for zp[1]:80 [ processChars::bitmask#0 ]
Statement [72] *SPRITES_ENABLE = *SPRITES_ENABLE | processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a
Statement [73] SPRITES_COLOR[((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]] = ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_COL] [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [74] (SCREEN+OFFSET_SPRITE_PTRS)[((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]] = ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_PTR] [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [75] ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS] = STATUS_PROCESSING [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [76] processChars::xpos#0 = *((word*)processChars::processing#0) >> 4 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [79] processChars::$10 = $ff ^ processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] { } ) always clobbers reg byte a
Statement [80] *SPRITES_XMSB = *SPRITES_XMSB & processChars::$10 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] { } ) always clobbers reg byte a
Statement [81] SPRITES_XPOS[processChars::$13] = (byte)processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [82] processChars::$12 = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] >> 4 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] { } ) always clobbers reg byte a reg byte y
Statement [83] processChars::ypos#0 = (byte)processChars::$12 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a
Statement [84] SPRITES_YPOS[processChars::$13] = processChars::ypos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:87 [ processChars::ypos#0 ]
Statement [85] if(*((word*)processChars::processing#0)<XPOS_LEFTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp[1]:87 [ processChars::ypos#0 ]
Statement [86] if(*((word*)processChars::processing#0)>XPOS_RIGHTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [87] if(((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y]<YPOS_TOPMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [88] if(((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y]>YPOS_BOTTOMMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [89] processChars::$21 = processChars::xpos#0 >> 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$21 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$21 ] { } ) always clobbers reg byte a
Statement [90] processChars::$73 = (byte)processChars::$21 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$73 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$73 ] { } ) always clobbers reg byte a
Statement [92] processChars::$29 = processChars::xchar#0 << 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$29 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$29 ] { } ) always clobbers reg byte a
Statement [93] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] + VXSIN[processChars::$29] [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [94] *((word*)processChars::processing#0) = *((word*)processChars::processing#0) + ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [95] processChars::$79 = processChars::ypos#0 >> 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$79 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$79 ] { } ) always clobbers reg byte a
Statement [97] processChars::$30 = processChars::ychar#0 << 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$30 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$30 ] { } ) always clobbers reg byte a
Statement [98] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] + VYSIN[processChars::$30] [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] { } ) always clobbers reg byte a reg byte y
Statement [99] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] + ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] [ processChars::i#10 processChars::numActive#10 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 ] { } ) always clobbers reg byte a reg byte y
Statement [103] if(processChars::i#1!=NUM_PROCESSING-1+1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:11 [ processChars::i#1 processChars::numActive#3 ] { } ) always clobbers reg byte a
Statement [105] ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS] = STATUS_FREE [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [106] processChars::$25 = $ff ^ processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$25 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$25 ] { } ) always clobbers reg byte a
Statement [107] *SPRITES_ENABLE = *SPRITES_ENABLE & processChars::$25 [ processChars::i#10 processChars::numActive#10 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 ] { } ) always clobbers reg byte a
Statement [108] *SPRITES_XMSB = *SPRITES_XMSB | processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] { } ) always clobbers reg byte a
Statement [109] init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0 + (word)$28*$c [ init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_bottomline#0 ] { } ) always clobbers reg byte a
Statement [110] init_angle_screen::screen_topline#7 = init_angle_screen::screen_bottomline#0 [ init_angle_screen::screen_bottomline#0 init_angle_screen::screen_topline#7 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_topline#7 ] { } ) always clobbers reg byte a
Statement [114] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Statement [115] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] { } ) always clobbers reg byte a
Statement [119] init_angle_screen::$3 = init_angle_screen::x#2 << 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [120] init_angle_screen::$4 = $27 - init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [121] init_angle_screen::xw#0 = init_angle_screen::$4 w= 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Statement [122] init_angle_screen::$5 = init_angle_screen::y#5 << 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$5 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [123] init_angle_screen::yw#0 = init_angle_screen::$5 w= 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Statement [124] atan2_16::x#0 = (signed word)init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [125] atan2_16::y#0 = (signed word)init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [127] atan2_16::return#2 = atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [128] init_angle_screen::angle_w#0 = atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] { } ) always clobbers reg byte a
Statement [129] init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$7 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$7 ] { } ) always clobbers reg byte a
Statement [131] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:114 [ init_angle_screen::ang_w#0 ]
Statement [132] init_angle_screen::$9 = - init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$9 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$9 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:114 [ init_angle_screen::ang_w#0 ]
Statement [133] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$9 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Statement [134] init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$10 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$10 ] { } ) always clobbers reg byte a
Statement [135] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Statement [136] init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] { } ) always clobbers reg byte a
Statement [137] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] { } ) always clobbers reg byte y
Statement [142] if(initSprites::sp#2<SPRITE_DATA+NUM_PROCESSING*$40) goto initSprites::@2 [ initSprites::sp#2 ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] { } ) always clobbers reg byte a
Statement [144] SPRITES_COLOR[initSprites::i#2] = LIGHT_BLUE [ initSprites::i#2 ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:20 [ initSprites::i#2 initSprites::i#1 ]
Statement [147] *SPRITES_MC = 0 [ ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [148] *SPRITES_EXPAND_X = 0 [ ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [149] *SPRITES_EXPAND_Y = 0 [ ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [151] *initSprites::sp#2 = 0 [ initSprites::sp#2 ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] { } ) always clobbers reg byte a reg byte y
Statement [154] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [155] *PROCPORT = PROCPORT_RAM_IO [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [156] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [157] *VICII_CONTROL = *VICII_CONTROL & $7f [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [158] *RASTER = <RASTER_IRQ_TOP [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [159] *IRQ_ENABLE = IRQ_RASTER [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [160] *HARDWARE_IRQ = setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [163] getCharToProcess::screen_line#0 = (byte*)SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [164] getCharToProcess::dist_line#0 = (byte*)SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [167] if(getCharToProcess::screen_line#4[getCharToProcess::x#2]==' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:26 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Removing always clobbered register reg byte a as potential for zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Removing always clobbered register reg byte a as potential for zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Statement [168] getCharToProcess::dist#0 = getCharToProcess::dist_line#6[getCharToProcess::x#2] [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [175] getCharToProcess::screen_line#1 = getCharToProcess::screen_line#4 + $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:30 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
Statement [176] getCharToProcess::dist_line#1 = getCharToProcess::dist_line#6 + $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [180] getCharToProcess::$11 = (word)getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [181] getCharToProcess::$12 = getCharToProcess::$11 << 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 getCharToProcess::$12 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 getCharToProcess::$12 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [182] getCharToProcess::$13 = getCharToProcess::$12 + getCharToProcess::$11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [183] getCharToProcess::$8 = getCharToProcess::$13 << 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [184] getCharToProcess::$9 = (byte*)SCREEN_COPY#0 + getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [185] getCharToProcess::$9[getCharToProcess::return_x#1] = ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [194] startProcessing::$28 = startProcessing::i#2 << 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$28 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$28 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:71 [ startProcessing::center_x#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:72 [ startProcessing::center_y#0 ]
Removing always clobbered register reg byte a as potential for zp[1]:31 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Removing always clobbered register reg byte a as potential for zp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Statement [195] startProcessing::$29 = startProcessing::$28 + startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [196] startProcessing::$30 = startProcessing::$29 << 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [197] startProcessing::$31 = startProcessing::$30 + startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$31 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$31 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [198] startProcessing::$21 = startProcessing::$31 << 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$21 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$21 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [199] if(((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$21]!=STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [202] startProcessing::$23 = (word)startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$23 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$23 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [203] startProcessing::$33 = startProcessing::$23 << 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$23 startProcessing::$33 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$23 startProcessing::$33 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [204] startProcessing::$34 = startProcessing::$33 + startProcessing::$23 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$34 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$34 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [205] startProcessing::$0 = startProcessing::$34 << 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [206] startProcessing::offset#0 = startProcessing::$0 + startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [207] startProcessing::colPtr#0 = COLS + startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [208] startProcessing::spriteCol#0 = *startProcessing::colPtr#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:71 [ startProcessing::center_x#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:72 [ startProcessing::center_y#0 ]
Removing always clobbered register reg byte y as potential for zp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Statement [209] startProcessing::screenPtr#0 = SCREEN + startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:145 [ startProcessing::spriteCol#0 ]
Statement [210] startProcessing::$24 = (word)startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$24 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$24 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [211] startProcessing::$4 = startProcessing::$24 << 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$4 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$4 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [212] startProcessing::spriteData#0 = SPRITE_DATA + startProcessing::$4 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [213] startProcessing::ch#0 = *startProcessing::screenPtr#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:145 [ startProcessing::spriteCol#0 ]
Statement [214] startProcessing::$25 = (word)startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$25 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$25 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [215] startProcessing::$6 = startProcessing::$25 << 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$6 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$6 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [216] startProcessing::chargenData#0 = CHARGEN + startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [218] *PROCPORT = PROCPORT_RAM_CHARROM [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [220] *startProcessing::spriteData#2 = *startProcessing::chargenData#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte a as potential for zp[1]:37 [ startProcessing::i1#2 startProcessing::i1#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:37 [ startProcessing::i1#2 startProcessing::i1#1 ]
Statement [221] startProcessing::spriteData#1 = startProcessing::spriteData#2 + 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [225] *PROCPORT = PROCPORT_RAM_IO [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [227] startProcessing::$26 = (word)startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$26 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$26 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [228] startProcessing::$8 = startProcessing::$26 << 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$8 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$8 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [229] startProcessing::$9 = BORDER_XPOS_LEFT + startProcessing::$8 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$9 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$9 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [230] startProcessing::spriteX#0 = startProcessing::$9 << 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [231] startProcessing::$27 = (word)startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$27 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$27 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [232] startProcessing::$11 = startProcessing::$27 << 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$11 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$11 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [233] startProcessing::$12 = BORDER_YPOS_TOP + startProcessing::$11 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$12 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$12 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [234] startProcessing::spriteY#0 = startProcessing::$12 << 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [235] startProcessing::spritePtr#0 = (byte)SPRITE_DATA/$40 + startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [236] startProcessing::$15 = startProcessing::freeIdx#2 << 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:173 [ startProcessing::spritePtr#0 ]
Statement [237] startProcessing::$36 = startProcessing::freeIdx#2 << 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$36 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$36 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:174 [ startProcessing::$15 ]
Statement [238] startProcessing::$37 = startProcessing::$36 + startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$37 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$37 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [239] startProcessing::$38 = startProcessing::$37 << 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$38 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$38 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [240] startProcessing::$39 = startProcessing::$38 + startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$39 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$39 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [241] startProcessing::$22 = startProcessing::$39 << 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [242] ((word*)PROCESSING)[startProcessing::$22] = startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:179 [ startProcessing::$22 ]
Statement [243] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y)[startProcessing::$22] = startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [244] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX)[startProcessing::$22] = (word)startProcessing::$15 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [245] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY)[startProcessing::$22] = $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [246] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID)[startProcessing::$22] = startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [247] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR)[startProcessing::$22] = startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [248] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL)[startProcessing::$22] = startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [249] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$22] = STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [250] ((byte**)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)[startProcessing::$22] = startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [256] if(atan2_16::y#0>=0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [257] atan2_16::$2 = - atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [259] if(atan2_16::x#0>=0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [260] atan2_16::$7 = - atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [263] if(atan2_16::yi#3!=0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:42 [ atan2_16::i#2 atan2_16::i#1 ]
Statement [265] atan2_16::angle#1 = atan2_16::angle#6 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [266] if(atan2_16::x#0>=0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [267] atan2_16::angle#4 = $8000 - atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [269] if(atan2_16::y#0>=0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [270] atan2_16::angle#5 = - atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [274] atan2_16::xd#10 = atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:47 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
Statement [275] atan2_16::yd#10 = atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [279] atan2_16::xd#2 = atan2_16::xd#3 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [280] atan2_16::yd#2 = atan2_16::yd#3 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [282] if(atan2_16::yi#3>=0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [283] atan2_16::xi#2 = atan2_16::xi#3 - atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [284] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [285] atan2_16::$23 = atan2_16::i#2 << 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [286] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23] [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [290] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [291] atan2_16::yi#1 = atan2_16::yi#3 - atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [292] atan2_16::$22 = atan2_16::i#2 << 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [293] atan2_16::angle#2 = atan2_16::angle#12 + CORDIC_ATAN2_ANGLES_16[atan2_16::$22] [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [294] atan2_16::xd#1 = atan2_16::xd#3 >> 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [295] atan2_16::yd#1 = atan2_16::yd#3 >> 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [297] atan2_16::xi#13 = atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [298] atan2_16::yi#16 = atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [3] SCREEN_COPY#0 = (void*)malloc::mem#0 [ SCREEN_COPY#0 heap_head#0 ] ( [ SCREEN_COPY#0 heap_head#0 ] { { heap_head#0 = heap_head#6 } } ) always clobbers reg byte a
Statement [5] SCREEN_DIST#0 = (void*)malloc::mem#0 [ SCREEN_COPY#0 SCREEN_DIST#0 ] ( [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [12] *RASTER = RASTER_IRQ_TOP [ ] ( [ ] { } ) always clobbers reg byte a
Statement [13] *HARDWARE_IRQ = &irqTop [ ] ( [ ] { } ) always clobbers reg byte a
Statement [14] *IRQ_STATUS = IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a
Statement [15] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y
Statement [17] *RASTER = RASTER_IRQ_MIDDLE [ ] ( [ ] { } ) always clobbers reg byte a
Statement [18] *HARDWARE_IRQ = &irqBottom [ ] ( [ ] { } ) always clobbers reg byte a
Statement [19] *IRQ_STATUS = IRQ_RASTER [ ] ( [ ] { } ) always clobbers reg byte a
Statement [20] return [ ] ( [ ] { } ) always clobbers reg byte a reg byte x reg byte y
Statement [22] malloc::mem#0 = heap_head#6 - $3e8 [ malloc::mem#0 ] ( malloc:2 [ malloc::mem#0 ] { } malloc:4 [ SCREEN_COPY#0 malloc::mem#0 ] { { heap_head#0 = heap_head#6 } } ) always clobbers reg byte a
Statement [23] heap_head#0 = malloc::mem#0 [ malloc::mem#0 heap_head#0 ] ( malloc:2 [ malloc::mem#0 heap_head#0 ] { } malloc:4 [ SCREEN_COPY#0 malloc::mem#0 heap_head#0 ] { { heap_head#0 = heap_head#6 } } ) always clobbers reg byte a
Statement [25] init_angle_screen::screen#0 = (byte*)SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen#0 ] { } ) always clobbers reg byte a
Statement [27] main::dst#0 = (byte*)SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::dst#0 ] { } ) always clobbers reg byte a
Statement [29] if(main::src#2!=SCREEN+$3e8) goto main::@2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] { } ) always clobbers reg byte a
Statement [31] main::$11 = main::i#2 << 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$11 ] { } ) always clobbers reg byte a
Statement [32] main::$12 = main::$11 + main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$12 ] { } ) always clobbers reg byte a
Statement [33] main::$13 = main::$12 << 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$13 ] { } ) always clobbers reg byte a
Statement [34] main::$14 = main::$13 + main::i#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$14 ] { } ) always clobbers reg byte a
Statement [35] main::$10 = main::$14 << 1 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 main::$10 ] { } ) always clobbers reg byte a
Statement [36] PROCESSING[main::$10] = memcpy(*(&$0), struct ProcessingSprite, SIZEOF_STRUCT_PROCESSINGSPRITE) [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#2 ] { } ) always clobbers reg byte a reg byte x reg byte y
Statement [38] if(main::i#1!=NUM_PROCESSING-1+1) goto main::@3 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::i#1 ] { } ) always clobbers reg byte a
Statement [52] *(SCREEN+$3e7) = '.' [ ] ( main:7 [ ] { } ) always clobbers reg byte a
Statement [57] *main::dst#2 = *main::src#2 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] ( main:7 [ SCREEN_COPY#0 SCREEN_DIST#0 main::src#2 main::dst#2 ] { } ) always clobbers reg byte a reg byte y
Statement [62] processChars::$13 = processChars::i#10 << 1 [ processChars::i#10 processChars::numActive#10 processChars::$13 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 ] { } ) always clobbers reg byte a
Statement [63] processChars::$87 = processChars::$13 + processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$87 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$87 ] { } ) always clobbers reg byte a
Statement [64] processChars::$88 = processChars::$87 << 1 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$88 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$88 ] { } ) always clobbers reg byte a
Statement [65] processChars::$89 = processChars::$88 + processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$89 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$89 ] { } ) always clobbers reg byte a
Statement [66] processChars::$28 = processChars::$89 << 1 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$28 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::$28 ] { } ) always clobbers reg byte a
Statement [67] processChars::processing#0 = PROCESSING + processChars::$28 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 ] { } ) always clobbers reg byte a
Statement [68] processChars::bitmask#0 = 1 << ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID] [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [69] if(((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]==STATUS_FREE) goto processChars::@2 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [70] if(((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]!=STATUS_NEW) goto processChars::@3 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [71] *(((byte**)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR]) = ' ' [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte x reg byte y
Statement [72] *SPRITES_ENABLE = *SPRITES_ENABLE | processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a
Statement [73] SPRITES_COLOR[((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]] = ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_COL] [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [74] (SCREEN+OFFSET_SPRITE_PTRS)[((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]] = ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_PTR] [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [75] ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS] = STATUS_PROCESSING [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [76] processChars::xpos#0 = *((word*)processChars::processing#0) >> 4 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [79] processChars::$10 = $ff ^ processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$10 ] { } ) always clobbers reg byte a
Statement [80] *SPRITES_XMSB = *SPRITES_XMSB & processChars::$10 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] { } ) always clobbers reg byte a
Statement [81] SPRITES_XPOS[processChars::$13] = (byte)processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [82] processChars::$12 = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] >> 4 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] { } ) always clobbers reg byte a reg byte y
Statement [83] processChars::ypos#0 = (byte)processChars::$12 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a
Statement [84] SPRITES_YPOS[processChars::$13] = processChars::ypos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [85] if(*((word*)processChars::processing#0)<XPOS_LEFTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [86] if(*((word*)processChars::processing#0)>XPOS_RIGHTMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [87] if(((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y]<YPOS_TOPMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [88] if(((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y]>YPOS_BOTTOMMOST) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [89] processChars::$21 = processChars::xpos#0 >> 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$21 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$21 ] { } ) always clobbers reg byte a
Statement [90] processChars::$73 = (byte)processChars::$21 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$73 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$73 ] { } ) always clobbers reg byte a
Statement [92] processChars::$29 = processChars::xchar#0 << 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$29 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$29 ] { } ) always clobbers reg byte a
Statement [93] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] + VXSIN[processChars::$29] [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [94] *((word*)processChars::processing#0) = *((word*)processChars::processing#0) + ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] { } ) always clobbers reg byte a reg byte y
Statement [95] processChars::$79 = processChars::ypos#0 >> 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$79 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$79 ] { } ) always clobbers reg byte a
Statement [97] processChars::$30 = processChars::ychar#0 << 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$30 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$30 ] { } ) always clobbers reg byte a
Statement [98] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] + VYSIN[processChars::$30] [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] { } ) always clobbers reg byte a reg byte y
Statement [99] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] + ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] [ processChars::i#10 processChars::numActive#10 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 ] { } ) always clobbers reg byte a reg byte y
Statement [103] if(processChars::i#1!=NUM_PROCESSING-1+1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:11 [ processChars::i#1 processChars::numActive#3 ] { } ) always clobbers reg byte a
Statement [105] ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS] = STATUS_FREE [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] { } ) always clobbers reg byte a reg byte y
Statement [106] processChars::$25 = $ff ^ processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$25 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$25 ] { } ) always clobbers reg byte a
Statement [107] *SPRITES_ENABLE = *SPRITES_ENABLE & processChars::$25 [ processChars::i#10 processChars::numActive#10 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 ] { } ) always clobbers reg byte a
Statement [108] *SPRITES_XMSB = *SPRITES_XMSB | processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:11 [ processChars::i#10 processChars::numActive#10 processChars::$13 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] { } ) always clobbers reg byte a
Statement [109] init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0 + (word)$28*$c [ init_angle_screen::screen_bottomline#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_bottomline#0 ] { } ) always clobbers reg byte a
Statement [110] init_angle_screen::screen_topline#7 = init_angle_screen::screen_bottomline#0 [ init_angle_screen::screen_bottomline#0 init_angle_screen::screen_topline#7 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_topline#7 ] { } ) always clobbers reg byte a
Statement [114] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28 [ init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_topline#1 ] { } ) always clobbers reg byte a
Statement [115] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28 [ init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#1 init_angle_screen::screen_bottomline#1 ] { } ) always clobbers reg byte a
Statement [119] init_angle_screen::$3 = init_angle_screen::x#2 << 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [120] init_angle_screen::$4 = $27 - init_angle_screen::$3 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [121] init_angle_screen::xw#0 = init_angle_screen::$4 w= 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Statement [122] init_angle_screen::$5 = init_angle_screen::y#5 << 1 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$5 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::$5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [123] init_angle_screen::yw#0 = init_angle_screen::$5 w= 0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::xw#0 init_angle_screen::yw#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte y
Statement [124] atan2_16::x#0 = (signed word)init_angle_screen::xw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::yw#0 atan2_16::x#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [125] atan2_16::y#0 = (signed word)init_angle_screen::yw#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [127] atan2_16::return#2 = atan2_16::return#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::return#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [128] init_angle_screen::angle_w#0 = atan2_16::return#2 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::angle_w#0 ] { } ) always clobbers reg byte a
Statement [129] init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$7 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$7 ] { } ) always clobbers reg byte a
Statement [131] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte a reg byte y
Statement [132] init_angle_screen::$9 = - init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$9 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$9 ] { } ) always clobbers reg byte a
Statement [133] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$9 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Statement [134] init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$10 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 init_angle_screen::$10 ] { } ) always clobbers reg byte a
Statement [135] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$10 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::ang_w#0 ] { } ) always clobbers reg byte y
Statement [136] init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 init_angle_screen::$11 ] { } ) always clobbers reg byte a
Statement [137] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$11 [ init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] ( main:7::init_angle_screen:26 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 ] { } ) always clobbers reg byte y
Statement [142] if(initSprites::sp#2<SPRITE_DATA+NUM_PROCESSING*$40) goto initSprites::@2 [ initSprites::sp#2 ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] { } ) always clobbers reg byte a
Statement [144] SPRITES_COLOR[initSprites::i#2] = LIGHT_BLUE [ initSprites::i#2 ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::i#2 ] { } ) always clobbers reg byte a
Statement [147] *SPRITES_MC = 0 [ ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [148] *SPRITES_EXPAND_X = 0 [ ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [149] *SPRITES_EXPAND_Y = 0 [ ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [151] *initSprites::sp#2 = 0 [ initSprites::sp#2 ] ( main:7::initSprites:40 [ SCREEN_COPY#0 SCREEN_DIST#0 initSprites::sp#2 ] { } ) always clobbers reg byte a reg byte y
Statement [154] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [155] *PROCPORT = PROCPORT_RAM_IO [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [156] *((byte*)CIA1+OFFSET_STRUCT_MOS6526_CIA_INTERRUPT) = CIA_INTERRUPT_CLEAR [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [157] *VICII_CONTROL = *VICII_CONTROL & $7f [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [158] *RASTER = <RASTER_IRQ_TOP [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [159] *IRQ_ENABLE = IRQ_RASTER [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [160] *HARDWARE_IRQ = setupRasterIrq::irqRoutine#0 [ ] ( main:7::setupRasterIrq:42 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { } ) always clobbers reg byte a
Statement [163] getCharToProcess::screen_line#0 = (byte*)SCREEN_COPY#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [164] getCharToProcess::dist_line#0 = (byte*)SCREEN_DIST#0 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#0 getCharToProcess::dist_line#0 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [167] if(getCharToProcess::screen_line#4[getCharToProcess::x#2]==' ') goto getCharToProcess::@11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [168] getCharToProcess::dist#0 = getCharToProcess::dist_line#6[getCharToProcess::x#2] [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::screen_line#4 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [175] getCharToProcess::screen_line#1 = getCharToProcess::screen_line#4 + $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::dist_line#6 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [176] getCharToProcess::dist_line#1 = getCharToProcess::dist_line#6 + $28 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 getCharToProcess::dist_line#1 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [180] getCharToProcess::$11 = (word)getCharToProcess::return_y#1 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [181] getCharToProcess::$12 = getCharToProcess::$11 << 2 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 getCharToProcess::$12 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 getCharToProcess::$12 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [182] getCharToProcess::$13 = getCharToProcess::$12 + getCharToProcess::$11 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$13 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [183] getCharToProcess::$8 = getCharToProcess::$13 << 3 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$8 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [184] getCharToProcess::$9 = (byte*)SCREEN_COPY#0 + getCharToProcess::$8 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [185] getCharToProcess::$9[getCharToProcess::return_x#1] = ' ' [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:7::getCharToProcess:44 [ SCREEN_COPY#0 SCREEN_DIST#0 getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] { { getCharToProcess::return_x#0 = getCharToProcess::return_x#1 } { getCharToProcess::return_y#0 = getCharToProcess::return_y#1 } { getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1 } } ) always clobbers reg byte a
Statement [194] startProcessing::$28 = startProcessing::i#2 << 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$28 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$28 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [195] startProcessing::$29 = startProcessing::$28 + startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [196] startProcessing::$30 = startProcessing::$29 << 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$30 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [197] startProcessing::$31 = startProcessing::$30 + startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$31 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$31 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [198] startProcessing::$21 = startProcessing::$31 << 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$21 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$21 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [199] if(((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$21]!=STATUS_FREE) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [202] startProcessing::$23 = (word)startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$23 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$23 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [203] startProcessing::$33 = startProcessing::$23 << 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$23 startProcessing::$33 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$23 startProcessing::$33 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [204] startProcessing::$34 = startProcessing::$33 + startProcessing::$23 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$34 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$34 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [205] startProcessing::$0 = startProcessing::$34 << 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [206] startProcessing::offset#0 = startProcessing::$0 + startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [207] startProcessing::colPtr#0 = COLS + startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::colPtr#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [208] startProcessing::spriteCol#0 = *startProcessing::colPtr#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::offset#0 startProcessing::spriteCol#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a reg byte y
Statement [209] startProcessing::screenPtr#0 = SCREEN + startProcessing::offset#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [210] startProcessing::$24 = (word)startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$24 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$24 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [211] startProcessing::$4 = startProcessing::$24 << 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$4 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$4 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [212] startProcessing::spriteData#0 = SPRITE_DATA + startProcessing::$4 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [213] startProcessing::ch#0 = *startProcessing::screenPtr#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a reg byte y
Statement [214] startProcessing::$25 = (word)startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$25 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$25 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [215] startProcessing::$6 = startProcessing::$25 << 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$6 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$6 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [216] startProcessing::chargenData#0 = CHARGEN + startProcessing::$6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [218] *PROCPORT = PROCPORT_RAM_CHARROM [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [220] *startProcessing::spriteData#2 = *startProcessing::chargenData#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a reg byte y
Statement [221] startProcessing::spriteData#1 = startProcessing::spriteData#2 + 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [225] *PROCPORT = PROCPORT_RAM_IO [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [227] startProcessing::$26 = (word)startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$26 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$26 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [228] startProcessing::$8 = startProcessing::$26 << 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$8 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$8 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [229] startProcessing::$9 = BORDER_XPOS_LEFT + startProcessing::$8 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$9 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$9 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [230] startProcessing::spriteX#0 = startProcessing::$9 << 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [231] startProcessing::$27 = (word)startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$27 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$27 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [232] startProcessing::$11 = startProcessing::$27 << 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$11 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$11 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [233] startProcessing::$12 = BORDER_YPOS_TOP + startProcessing::$11 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$12 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$12 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [234] startProcessing::spriteY#0 = startProcessing::$12 << 4 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [235] startProcessing::spritePtr#0 = (byte)SPRITE_DATA/$40 + startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [236] startProcessing::$15 = startProcessing::freeIdx#2 << 3 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [237] startProcessing::$36 = startProcessing::freeIdx#2 << 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$36 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$36 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [238] startProcessing::$37 = startProcessing::$36 + startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$37 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$37 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [239] startProcessing::$38 = startProcessing::$37 << 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$38 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$38 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [240] startProcessing::$39 = startProcessing::$38 + startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$39 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$39 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [241] startProcessing::$22 = startProcessing::$39 << 1 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [242] ((word*)PROCESSING)[startProcessing::$22] = startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [243] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y)[startProcessing::$22] = startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$15 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [244] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX)[startProcessing::$22] = (word)startProcessing::$15 [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [245] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY)[startProcessing::$22] = $3c [ startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::freeIdx#2 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [246] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID)[startProcessing::$22] = startProcessing::freeIdx#2 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [247] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR)[startProcessing::$22] = startProcessing::spritePtr#0 [ startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::spriteCol#0 startProcessing::screenPtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [248] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL)[startProcessing::$22] = startProcessing::spriteCol#0 [ startProcessing::screenPtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [249] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$22] = STATUS_NEW [ startProcessing::screenPtr#0 startProcessing::$22 ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 startProcessing::screenPtr#0 startProcessing::$22 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [250] ((byte**)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)[startProcessing::$22] = startProcessing::screenPtr#0 [ ] ( main:7::startProcessing:56 [ SCREEN_COPY#0 SCREEN_DIST#0 ] { { startProcessing::center_x#0 = main::center_x#0 } { startProcessing::center_y#0 = main::center_y#0 } } ) always clobbers reg byte a
Statement [256] if(atan2_16::y#0>=0) goto atan2_16::@1 [ atan2_16::x#0 atan2_16::y#0 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [257] atan2_16::$2 = - atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::$2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [259] if(atan2_16::x#0>=0) goto atan2_16::@4 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [260] atan2_16::$7 = - atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::$7 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [263] if(atan2_16::yi#3!=0) goto atan2_16::@11 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [265] atan2_16::angle#1 = atan2_16::angle#6 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [266] if(atan2_16::x#0>=0) goto atan2_16::@7 [ atan2_16::y#0 atan2_16::angle#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [267] atan2_16::angle#4 = $8000 - atan2_16::angle#1 [ atan2_16::y#0 atan2_16::angle#4 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::y#0 atan2_16::angle#4 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [269] if(atan2_16::y#0>=0) goto atan2_16::@8 [ atan2_16::angle#11 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#11 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [270] atan2_16::angle#5 = - atan2_16::angle#11 [ atan2_16::angle#5 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::angle#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [274] atan2_16::xd#10 = atan2_16::xi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [275] atan2_16::yd#10 = atan2_16::yi#3 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#5 atan2_16::xd#10 atan2_16::yd#10 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [279] atan2_16::xd#2 = atan2_16::xd#3 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#3 atan2_16::xd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [280] atan2_16::yd#2 = atan2_16::yd#3 >> 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#2 atan2_16::yd#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [282] if(atan2_16::yi#3>=0) goto atan2_16::@18 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::yd#5 atan2_16::xd#5 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [283] atan2_16::xi#2 = atan2_16::xi#3 - atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [284] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [285] atan2_16::$23 = atan2_16::i#2 << 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::xi#2 atan2_16::yi#2 atan2_16::$23 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [286] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23] [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::xi#2 atan2_16::yi#2 atan2_16::angle#3 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [290] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::xd#5 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [291] atan2_16::yi#1 = atan2_16::yi#3 - atan2_16::xd#5 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [292] atan2_16::$22 = atan2_16::i#2 << 1 [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::angle#12 atan2_16::yi#1 atan2_16::xi#1 atan2_16::$22 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [293] atan2_16::angle#2 = atan2_16::angle#12 + CORDIC_ATAN2_ANGLES_16[atan2_16::$22] [ atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::i#2 atan2_16::yi#1 atan2_16::angle#2 atan2_16::xi#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [294] atan2_16::xd#1 = atan2_16::xd#3 >> 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::yd#3 atan2_16::xd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [295] atan2_16::yd#1 = atan2_16::yd#3 >> 2 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#3 atan2_16::xi#3 atan2_16::i#2 atan2_16::angle#12 atan2_16::shift#2 atan2_16::xd#1 atan2_16::yd#1 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [297] atan2_16::xi#13 = atan2_16::x#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#0 atan2_16::xi#13 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Statement [298] atan2_16::yi#16 = atan2_16::y#0 [ atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] ( main:7::init_angle_screen:26::atan2_16:126 [ SCREEN_COPY#0 SCREEN_DIST#0 init_angle_screen::y#5 init_angle_screen::screen_topline#6 init_angle_screen::screen_bottomline#6 init_angle_screen::x#2 init_angle_screen::xb#2 atan2_16::x#0 atan2_16::y#0 atan2_16::yi#16 ] { { atan2_16::return#0 = atan2_16::return#2 } } ) always clobbers reg byte a
Potential registers zp[2]:2 [ heap_head#6 heap_head#0 ] : zp[2]:2 ,
Potential registers zp[2]:4 [ main::src#2 main::src#1 ] : zp[2]:4 ,
Potential registers zp[2]:6 [ main::dst#2 main::dst#0 main::dst#1 ] : zp[2]:6 ,
Potential registers zp[1]:8 [ main::i#2 main::i#1 ] : zp[1]:8 ,
Potential registers zp[1]:9 [ processChars::i#10 processChars::i#1 ] : zp[1]:9 ,
Potential registers zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] : zp[1]:10 ,
Potential registers zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ] : zp[1]:11 , reg byte x ,
Potential registers zp[2]:12 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] : zp[2]:12 ,
Potential registers zp[2]:14 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] : zp[2]:14 ,
Potential registers zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ] : zp[1]:16 , reg byte x ,
Potential registers zp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] : zp[1]:17 , reg byte x ,
Potential registers zp[2]:18 [ initSprites::sp#2 initSprites::sp#1 ] : zp[2]:18 ,
Potential registers zp[1]:20 [ initSprites::i#2 initSprites::i#1 ] : zp[1]:20 , reg byte x , reg byte y ,
Potential registers zp[2]:21 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] : zp[2]:21 ,
Potential registers zp[2]:23 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] : zp[2]:23 ,
Potential registers zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ] : zp[1]:25 , reg byte x , reg byte y ,
Potential registers zp[1]:26 [ getCharToProcess::x#2 getCharToProcess::x#1 ] : zp[1]:26 , reg byte x , reg byte y ,
Potential registers zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] : zp[1]:27 , reg byte x , reg byte y ,
Potential registers zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] : zp[1]:28 , reg byte x , reg byte y ,
Potential registers zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] : zp[1]:29 , reg byte x , reg byte y ,
Potential registers zp[1]:30 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] : zp[1]:30 , reg byte x , reg byte y ,
Potential registers zp[1]:31 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] : zp[1]:31 , reg byte x , reg byte y ,
Potential registers zp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] : zp[1]:32 , reg byte x ,
Potential registers zp[2]:33 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] : zp[2]:33 ,
Potential registers zp[2]:35 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] : zp[2]:35 ,
Potential registers zp[1]:37 [ startProcessing::i1#2 startProcessing::i1#1 ] : zp[1]:37 , reg byte x ,
Potential registers zp[2]:38 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] : zp[2]:38 ,
Potential registers zp[2]:40 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] : zp[2]:40 ,
Potential registers zp[1]:42 [ atan2_16::i#2 atan2_16::i#1 ] : zp[1]:42 , reg byte x , reg byte y ,
Potential registers zp[2]:43 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] : zp[2]:43 ,
Potential registers zp[2]:45 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] : zp[2]:45 ,
Potential registers zp[1]:47 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] : zp[1]:47 , reg byte x , reg byte y ,
Potential registers zp[2]:48 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] : zp[2]:48 ,
Potential registers zp[2]:50 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] : zp[2]:50 ,
Potential registers zp[2]:52 [ SCREEN_COPY#0 ] : zp[2]:52 ,
Potential registers zp[2]:54 [ SCREEN_DIST#0 ] : zp[2]:54 ,
Potential registers zp[2]:56 [ malloc::mem#0 ] : zp[2]:56 ,
Potential registers zp[2]:58 [ init_angle_screen::screen#0 ] : zp[2]:58 ,
Potential registers zp[1]:60 [ main::$11 ] : zp[1]:60 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:61 [ main::$12 ] : zp[1]:61 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:62 [ main::$13 ] : zp[1]:62 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:63 [ main::$14 ] : zp[1]:63 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:64 [ main::$10 ] : zp[1]:64 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:65 [ getCharToProcess::return_x#0 ] : zp[1]:65 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:66 [ getCharToProcess::return_y#0 ] : zp[1]:66 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:67 [ getCharToProcess::return_dist#0 ] : zp[1]:67 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:68 [ main::center_x#0 ] : zp[1]:68 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:69 [ main::center_y#0 ] : zp[1]:69 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:70 [ main::center_dist#0 ] : zp[1]:70 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:71 [ startProcessing::center_x#0 ] : zp[1]:71 , reg byte x ,
Potential registers zp[1]:72 [ startProcessing::center_y#0 ] : zp[1]:72 , reg byte x ,
Potential registers zp[1]:73 [ processChars::$13 ] : zp[1]:73 ,
Potential registers zp[1]:74 [ processChars::$87 ] : zp[1]:74 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:75 [ processChars::$88 ] : zp[1]:75 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:76 [ processChars::$89 ] : zp[1]:76 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:77 [ processChars::$28 ] : zp[1]:77 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:78 [ processChars::processing#0 ] : zp[2]:78 ,
Potential registers zp[1]:80 [ processChars::bitmask#0 ] : zp[1]:80 ,
Potential registers zp[2]:81 [ processChars::xpos#0 ] : zp[2]:81 ,
Potential registers zp[1]:83 [ processChars::$9 ] : zp[1]:83 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:84 [ processChars::$10 ] : zp[1]:84 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:85 [ processChars::$12 ] : zp[2]:85 ,
Potential registers zp[1]:87 [ processChars::ypos#0 ] : zp[1]:87 , reg byte x ,
Potential registers zp[2]:88 [ processChars::$21 ] : zp[2]:88 ,
Potential registers zp[1]:90 [ processChars::$73 ] : zp[1]:90 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:91 [ processChars::xchar#0 ] : zp[1]:91 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:92 [ processChars::$29 ] : zp[1]:92 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:93 [ processChars::$79 ] : zp[1]:93 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:94 [ processChars::ychar#0 ] : zp[1]:94 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:95 [ processChars::$30 ] : zp[1]:95 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:96 [ processChars::$25 ] : zp[1]:96 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:97 [ init_angle_screen::$3 ] : zp[1]:97 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:98 [ init_angle_screen::$4 ] : zp[1]:98 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:99 [ init_angle_screen::xw#0 ] : zp[2]:99 ,
Potential registers zp[1]:101 [ init_angle_screen::$5 ] : zp[1]:101 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:102 [ init_angle_screen::yw#0 ] : zp[2]:102 ,
Potential registers zp[2]:104 [ atan2_16::x#0 ] : zp[2]:104 ,
Potential registers zp[2]:106 [ atan2_16::y#0 ] : zp[2]:106 ,
Potential registers zp[2]:108 [ atan2_16::return#2 ] : zp[2]:108 ,
Potential registers zp[2]:110 [ init_angle_screen::angle_w#0 ] : zp[2]:110 ,
Potential registers zp[2]:112 [ init_angle_screen::$7 ] : zp[2]:112 ,
Potential registers zp[1]:114 [ init_angle_screen::ang_w#0 ] : zp[1]:114 , reg byte x ,
Potential registers zp[1]:115 [ init_angle_screen::$9 ] : zp[1]:115 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:116 [ init_angle_screen::$10 ] : zp[1]:116 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:117 [ init_angle_screen::$11 ] : zp[1]:117 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:118 [ getCharToProcess::$11 ] : zp[2]:118 ,
Potential registers zp[2]:120 [ getCharToProcess::$12 ] : zp[2]:120 ,
Potential registers zp[2]:122 [ getCharToProcess::$13 ] : zp[2]:122 ,
Potential registers zp[2]:124 [ getCharToProcess::$8 ] : zp[2]:124 ,
Potential registers zp[2]:126 [ getCharToProcess::$9 ] : zp[2]:126 ,
Potential registers zp[1]:128 [ startProcessing::$28 ] : zp[1]:128 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:129 [ startProcessing::$29 ] : zp[1]:129 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:130 [ startProcessing::$30 ] : zp[1]:130 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:131 [ startProcessing::$31 ] : zp[1]:131 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:132 [ startProcessing::$21 ] : zp[1]:132 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:133 [ startProcessing::$23 ] : zp[2]:133 ,
Potential registers zp[2]:135 [ startProcessing::$33 ] : zp[2]:135 ,
Potential registers zp[2]:137 [ startProcessing::$34 ] : zp[2]:137 ,
Potential registers zp[2]:139 [ startProcessing::$0 ] : zp[2]:139 ,
Potential registers zp[2]:141 [ startProcessing::offset#0 ] : zp[2]:141 ,
Potential registers zp[2]:143 [ startProcessing::colPtr#0 ] : zp[2]:143 ,
Potential registers zp[1]:145 [ startProcessing::spriteCol#0 ] : zp[1]:145 , reg byte x ,
Potential registers zp[2]:146 [ startProcessing::screenPtr#0 ] : zp[2]:146 ,
Potential registers zp[2]:148 [ startProcessing::$24 ] : zp[2]:148 ,
Potential registers zp[2]:150 [ startProcessing::$4 ] : zp[2]:150 ,
Potential registers zp[1]:152 [ startProcessing::ch#0 ] : zp[1]:152 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[2]:153 [ startProcessing::$25 ] : zp[2]:153 ,
Potential registers zp[2]:155 [ startProcessing::$6 ] : zp[2]:155 ,
Potential registers zp[2]:157 [ startProcessing::$26 ] : zp[2]:157 ,
Potential registers zp[2]:159 [ startProcessing::$8 ] : zp[2]:159 ,
Potential registers zp[2]:161 [ startProcessing::$9 ] : zp[2]:161 ,
Potential registers zp[2]:163 [ startProcessing::spriteX#0 ] : zp[2]:163 ,
Potential registers zp[2]:165 [ startProcessing::$27 ] : zp[2]:165 ,
Potential registers zp[2]:167 [ startProcessing::$11 ] : zp[2]:167 ,
Potential registers zp[2]:169 [ startProcessing::$12 ] : zp[2]:169 ,
Potential registers zp[2]:171 [ startProcessing::spriteY#0 ] : zp[2]:171 ,
Potential registers zp[1]:173 [ startProcessing::spritePtr#0 ] : zp[1]:173 , reg byte x , reg byte y ,
Potential registers zp[1]:174 [ startProcessing::$15 ] : zp[1]:174 , reg byte x , reg byte y ,
Potential registers zp[1]:175 [ startProcessing::$36 ] : zp[1]:175 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:176 [ startProcessing::$37 ] : zp[1]:176 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:177 [ startProcessing::$38 ] : zp[1]:177 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:178 [ startProcessing::$39 ] : zp[1]:178 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:179 [ startProcessing::$22 ] : zp[1]:179 , reg byte x , reg byte y ,
Potential registers zp[1]:180 [ atan2_16::$23 ] : zp[1]:180 , reg byte a , reg byte x , reg byte y ,
Potential registers zp[1]:181 [ atan2_16::$22 ] : zp[1]:181 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [atan2_16] 2,866,666,670.58: zp[1]:47 [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] 2,060,000,008: zp[2]:48 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] 1,733,333,338.67: zp[2]:50 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] 752,480,960.9: zp[2]:43 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] 269,093,340.68: zp[2]:38 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] 227,373,342.67: zp[2]:40 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] 200,000,002: zp[1]:180 [ atan2_16::$23 ] 200,000,002: zp[1]:181 [ atan2_16::$22 ] 170,833,335.04: zp[1]:42 [ atan2_16::i#2 atan2_16::i#1 ] 820,008.5: zp[2]:45 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] 20,002: zp[2]:108 [ atan2_16::return#2 ] 10,789.61: zp[2]:104 [ atan2_16::x#0 ] 10,250.12: zp[2]:106 [ atan2_16::y#0 ]
Uplift Scope [getCharToProcess] 4,977,844.03: zp[1]:30 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] 3,425,007.25: zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] 2,932,466.39: zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] 1,944,509.61: zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] 1,555,557.11: zp[1]:26 [ getCharToProcess::x#2 getCharToProcess::x#1 ] 180,001.2: zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ] 137,788.5: zp[2]:23 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] 133,386.32: zp[2]:21 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] 2,002: zp[2]:120 [ getCharToProcess::$12 ] 2,002: zp[2]:122 [ getCharToProcess::$13 ] 2,002: zp[2]:124 [ getCharToProcess::$8 ] 2,002: zp[2]:126 [ getCharToProcess::$9 ] 1,501.5: zp[2]:118 [ getCharToProcess::$11 ] 67.33: zp[1]:65 [ getCharToProcess::return_x#0 ] 67.33: zp[1]:66 [ getCharToProcess::return_y#0 ] 67.33: zp[1]:67 [ getCharToProcess::return_dist#0 ]
Uplift Scope [startProcessing] 2,585,538.74: zp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] 2,000,002: zp[1]:128 [ startProcessing::$28 ] 2,000,002: zp[1]:129 [ startProcessing::$29 ] 2,000,002: zp[1]:130 [ startProcessing::$30 ] 2,000,002: zp[1]:131 [ startProcessing::$31 ] 2,000,002: zp[1]:132 [ startProcessing::$21 ] 220,002.2: zp[1]:31 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] 200,788.5: zp[2]:35 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] 200,002: zp[1]:37 [ startProcessing::i1#2 startProcessing::i1#1 ] 167,669.33: zp[2]:33 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] 2,002: zp[2]:135 [ startProcessing::$33 ] 2,002: zp[2]:137 [ startProcessing::$34 ] 2,002: zp[2]:139 [ startProcessing::$0 ] 2,002: zp[2]:143 [ startProcessing::colPtr#0 ] 2,002: zp[2]:148 [ startProcessing::$24 ] 2,002: zp[2]:150 [ startProcessing::$4 ] 2,002: zp[2]:153 [ startProcessing::$25 ] 2,002: zp[2]:155 [ startProcessing::$6 ] 2,002: zp[2]:157 [ startProcessing::$26 ] 2,002: zp[2]:159 [ startProcessing::$8 ] 2,002: zp[2]:161 [ startProcessing::$9 ] 2,002: zp[2]:165 [ startProcessing::$27 ] 2,002: zp[2]:167 [ startProcessing::$11 ] 2,002: zp[2]:169 [ startProcessing::$12 ] 2,002: zp[1]:175 [ startProcessing::$36 ] 2,002: zp[1]:176 [ startProcessing::$37 ] 2,002: zp[1]:177 [ startProcessing::$38 ] 2,002: zp[1]:178 [ startProcessing::$39 ] 1,501.5: zp[2]:133 [ startProcessing::$23 ] 1,112.22: zp[1]:179 [ startProcessing::$22 ] 1,001: zp[2]:141 [ startProcessing::offset#0 ] 1,001: zp[1]:152 [ startProcessing::ch#0 ] 222.44: zp[2]:171 [ startProcessing::spriteY#0 ] 166.83: zp[2]:163 [ startProcessing::spriteX#0 ] 166.83: zp[1]:173 [ startProcessing::spritePtr#0 ] 125.12: zp[1]:174 [ startProcessing::$15 ] 73.24: zp[2]:146 [ startProcessing::screenPtr#0 ] 50.05: zp[1]:145 [ startProcessing::spriteCol#0 ] 26.24: zp[1]:71 [ startProcessing::center_x#0 ] 2.24: zp[1]:72 [ startProcessing::center_y#0 ]
Uplift Scope [init_angle_screen] 21,820.36: zp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] 20,002: zp[1]:97 [ init_angle_screen::$3 ] 20,002: zp[1]:98 [ init_angle_screen::$4 ] 20,002: zp[1]:101 [ init_angle_screen::$5 ] 20,002: zp[2]:110 [ init_angle_screen::angle_w#0 ] 20,002: zp[2]:112 [ init_angle_screen::$7 ] 20,002: zp[1]:115 [ init_angle_screen::$9 ] 20,002: zp[1]:116 [ init_angle_screen::$10 ] 20,002: zp[1]:117 [ init_angle_screen::$11 ] 12,858.43: zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ] 8,334.17: zp[1]:114 [ init_angle_screen::ang_w#0 ] 5,000.5: zp[2]:102 [ init_angle_screen::yw#0 ] 3,333.67: zp[2]:99 [ init_angle_screen::xw#0 ] 1,963.15: zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ] 1,703.03: zp[2]:14 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] 1,623.54: zp[2]:12 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] 112: zp[2]:58 [ init_angle_screen::screen#0 ]
Uplift Scope [initSprites] 3,336.67: zp[2]:18 [ initSprites::sp#2 initSprites::sp#1 ] 3,003: zp[1]:20 [ initSprites::i#2 initSprites::i#1 ]
Uplift Scope [processChars] 310.05: zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] 202: zp[1]:74 [ processChars::$87 ] 202: zp[1]:75 [ processChars::$88 ] 202: zp[1]:76 [ processChars::$89 ] 202: zp[1]:77 [ processChars::$28 ] 202: zp[1]:83 [ processChars::$9 ] 202: zp[1]:84 [ processChars::$10 ] 202: zp[1]:90 [ processChars::$73 ] 202: zp[1]:91 [ processChars::xchar#0 ] 202: zp[1]:92 [ processChars::$29 ] 202: zp[1]:93 [ processChars::$79 ] 202: zp[1]:94 [ processChars::ychar#0 ] 202: zp[1]:95 [ processChars::$30 ] 202: zp[1]:96 [ processChars::$25 ] 162.72: zp[1]:9 [ processChars::i#10 processChars::i#1 ] 101: zp[2]:85 [ processChars::$12 ] 101: zp[2]:88 [ processChars::$21 ] 25.25: zp[1]:87 [ processChars::ypos#0 ] 21.96: zp[1]:80 [ processChars::bitmask#0 ] 21.64: zp[2]:81 [ processChars::xpos#0 ] 17.57: zp[1]:73 [ processChars::$13 ] 3.06: zp[2]:78 [ processChars::processing#0 ]
Uplift Scope [main] 302.5: zp[2]:6 [ main::dst#2 main::dst#0 main::dst#1 ] 235.67: zp[2]:4 [ main::src#2 main::src#1 ] 223.64: zp[1]:8 [ main::i#2 main::i#1 ] 202: zp[1]:60 [ main::$11 ] 202: zp[1]:61 [ main::$12 ] 202: zp[1]:62 [ main::$13 ] 202: zp[1]:63 [ main::$14 ] 202: zp[1]:64 [ main::$10 ] 202: zp[1]:70 [ main::center_dist#0 ] 50.5: zp[1]:68 [ main::center_x#0 ] 50.5: zp[1]:69 [ main::center_y#0 ]
Uplift Scope [] 16.25: zp[2]:2 [ heap_head#6 heap_head#0 ] 0.03: zp[2]:54 [ SCREEN_DIST#0 ] 0.03: zp[2]:52 [ SCREEN_COPY#0 ]
Uplift Scope [malloc] 4.4: zp[2]:56 [ malloc::mem#0 ]
Uplift Scope [RADIX]
Uplift Scope [MOS6526_CIA]
Uplift Scope [MOS6569_VICII]
Uplift Scope [MOS6581_SID]
Uplift Scope [ProcessingChar]
Uplift Scope [ProcessingSprite]
Uplift Scope [ProcessingSprite::$0]
Uplift Scope [setupRasterIrq]
Uplift Scope [irqTop]
Uplift Scope [irqBottom]
Uplift Scope [__start]
Uplifting [atan2_16] best 1276648 combination reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ] zp[2]:48 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] zp[2]:50 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] zp[2]:43 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] zp[2]:38 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] zp[2]:40 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] reg byte a [ atan2_16::$23 ] reg byte a [ atan2_16::$22 ] reg byte x [ atan2_16::i#2 atan2_16::i#1 ] zp[2]:45 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] zp[2]:108 [ atan2_16::return#2 ] zp[2]:104 [ atan2_16::x#0 ] zp[2]:106 [ atan2_16::y#0 ]
Limited combination testing to 100 combinations of 144 possible.
Uplifting [getCharToProcess] best 1263315 combination reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] zp[1]:26 [ getCharToProcess::x#2 getCharToProcess::x#1 ] zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ] zp[2]:23 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] zp[2]:21 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] zp[2]:120 [ getCharToProcess::$12 ] zp[2]:122 [ getCharToProcess::$13 ] zp[2]:124 [ getCharToProcess::$8 ] zp[2]:126 [ getCharToProcess::$9 ] zp[2]:118 [ getCharToProcess::$11 ] zp[1]:65 [ getCharToProcess::return_x#0 ] zp[1]:66 [ getCharToProcess::return_y#0 ] zp[1]:67 [ getCharToProcess::return_dist#0 ]
Limited combination testing to 100 combinations of 46656 possible.
Uplifting [init_angle_screen] best 1261715 combination zp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] reg byte a [ init_angle_screen::$3 ] reg byte a [ init_angle_screen::$4 ] reg byte a [ init_angle_screen::$5 ] zp[2]:110 [ init_angle_screen::angle_w#0 ] zp[2]:112 [ init_angle_screen::$7 ] zp[1]:115 [ init_angle_screen::$9 ] zp[1]:116 [ init_angle_screen::$10 ] zp[1]:117 [ init_angle_screen::$11 ] zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ] zp[1]:114 [ init_angle_screen::ang_w#0 ] zp[2]:102 [ init_angle_screen::yw#0 ] zp[2]:99 [ init_angle_screen::xw#0 ] zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ] zp[2]:14 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] zp[2]:12 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] zp[2]:58 [ init_angle_screen::screen#0 ]
Limited combination testing to 100 combinations of 65536 possible.
Uplifting [initSprites] best 1261595 combination zp[2]:18 [ initSprites::sp#2 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ]
Uplifting [processChars] best 1261355 combination zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] reg byte a [ processChars::$87 ] reg byte a [ processChars::$88 ] reg byte a [ processChars::$89 ] reg byte a [ processChars::$28 ] zp[1]:83 [ processChars::$9 ] zp[1]:84 [ processChars::$10 ] zp[1]:90 [ processChars::$73 ] zp[1]:91 [ processChars::xchar#0 ] zp[1]:92 [ processChars::$29 ] zp[1]:93 [ processChars::$79 ] zp[1]:94 [ processChars::ychar#0 ] zp[1]:95 [ processChars::$30 ] zp[1]:96 [ processChars::$25 ] zp[1]:9 [ processChars::i#10 processChars::i#1 ] zp[2]:85 [ processChars::$12 ] zp[2]:88 [ processChars::$21 ] zp[1]:87 [ processChars::ypos#0 ] zp[1]:80 [ processChars::bitmask#0 ] zp[2]:81 [ processChars::xpos#0 ] zp[1]:73 [ processChars::$13 ] zp[2]:78 [ processChars::processing#0 ]
Limited combination testing to 100 combinations of 134217728 possible.
Uplifting [main] best 1261115 combination zp[2]:6 [ main::dst#2 main::dst#0 main::dst#1 ] zp[2]:4 [ main::src#2 main::src#1 ] zp[1]:8 [ main::i#2 main::i#1 ] reg byte a [ main::$11 ] reg byte a [ main::$12 ] reg byte a [ main::$13 ] reg byte a [ main::$14 ] zp[1]:64 [ main::$10 ] zp[1]:70 [ main::center_dist#0 ] zp[1]:68 [ main::center_x#0 ] zp[1]:69 [ main::center_y#0 ]
Limited combination testing to 100 combinations of 65536 possible.
Uplifting [] best 1261115 combination zp[2]:2 [ heap_head#6 heap_head#0 ] zp[2]:54 [ SCREEN_DIST#0 ] zp[2]:52 [ SCREEN_COPY#0 ]
Uplifting [malloc] best 1261115 combination zp[2]:56 [ malloc::mem#0 ]
Uplifting [RADIX] best 1261115 combination
Uplifting [MOS6526_CIA] best 1261115 combination
Uplifting [MOS6569_VICII] best 1261115 combination
Uplifting [MOS6581_SID] best 1261115 combination
Uplifting [ProcessingChar] best 1261115 combination
Uplifting [ProcessingSprite] best 1261115 combination
Uplifting [ProcessingSprite::$0] best 1261115 combination
Uplifting [setupRasterIrq] best 1261115 combination
Uplifting [irqTop] best 1261115 combination
Uplifting [irqBottom] best 1261115 combination
Uplifting [__start] best 1261115 combination
Attempting to uplift remaining variables inzp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Uplifting [getCharToProcess] best 1261115 combination zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Attempting to uplift remaining variables inzp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Uplifting [getCharToProcess] best 1261115 combination zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Attempting to uplift remaining variables inzp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Uplifting [startProcessing] best 1261115 combination zp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Attempting to uplift remaining variables inzp[1]:128 [ startProcessing::$28 ]
Uplifting [startProcessing] best 1255115 combination reg byte a [ startProcessing::$28 ]
Attempting to uplift remaining variables inzp[1]:129 [ startProcessing::$29 ]
Uplifting [startProcessing] best 1249115 combination reg byte a [ startProcessing::$29 ]
Attempting to uplift remaining variables inzp[1]:130 [ startProcessing::$30 ]
Uplifting [startProcessing] best 1243115 combination reg byte a [ startProcessing::$30 ]
Attempting to uplift remaining variables inzp[1]:131 [ startProcessing::$31 ]
Uplifting [startProcessing] best 1237115 combination reg byte a [ startProcessing::$31 ]
Attempting to uplift remaining variables inzp[1]:132 [ startProcessing::$21 ]
Uplifting [startProcessing] best 1233115 combination reg byte a [ startProcessing::$21 ]
Attempting to uplift remaining variables inzp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Uplifting [getCharToProcess] best 1233115 combination zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Attempting to uplift remaining variables inzp[1]:26 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Uplifting [getCharToProcess] best 1215115 combination reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Attempting to uplift remaining variables inzp[1]:31 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Uplifting [startProcessing] best 1214215 combination reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Attempting to uplift remaining variables inzp[1]:37 [ startProcessing::i1#2 startProcessing::i1#1 ]
Uplifting [startProcessing] best 1213315 combination reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ]
Attempting to uplift remaining variables inzp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Uplifting [getCharToProcess] best 1213315 combination zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Attempting to uplift remaining variables inzp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Uplifting [init_angle_screen] best 1213315 combination zp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Attempting to uplift remaining variables inzp[1]:115 [ init_angle_screen::$9 ]
Uplifting [init_angle_screen] best 1212715 combination reg byte a [ init_angle_screen::$9 ]
Attempting to uplift remaining variables inzp[1]:116 [ init_angle_screen::$10 ]
Uplifting [init_angle_screen] best 1212315 combination reg byte a [ init_angle_screen::$10 ]
Attempting to uplift remaining variables inzp[1]:117 [ init_angle_screen::$11 ]
Uplifting [init_angle_screen] best 1211715 combination reg byte a [ init_angle_screen::$11 ]
Attempting to uplift remaining variables inzp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Uplifting [init_angle_screen] best 1211715 combination zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ]
Attempting to uplift remaining variables inzp[1]:114 [ init_angle_screen::ang_w#0 ]
Uplifting [init_angle_screen] best 1211715 combination zp[1]:114 [ init_angle_screen::ang_w#0 ]
Attempting to uplift remaining variables inzp[1]:175 [ startProcessing::$36 ]
Uplifting [startProcessing] best 1211709 combination reg byte a [ startProcessing::$36 ]
Attempting to uplift remaining variables inzp[1]:176 [ startProcessing::$37 ]
Uplifting [startProcessing] best 1211703 combination reg byte a [ startProcessing::$37 ]
Attempting to uplift remaining variables inzp[1]:177 [ startProcessing::$38 ]
Uplifting [startProcessing] best 1211697 combination reg byte a [ startProcessing::$38 ]
Attempting to uplift remaining variables inzp[1]:178 [ startProcessing::$39 ]
Uplifting [startProcessing] best 1211691 combination reg byte a [ startProcessing::$39 ]
Attempting to uplift remaining variables inzp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Uplifting [init_angle_screen] best 1211691 combination zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ]
Attempting to uplift remaining variables inzp[1]:179 [ startProcessing::$22 ]
Uplifting [startProcessing] best 1211663 combination reg byte x [ startProcessing::$22 ]
Attempting to uplift remaining variables inzp[1]:152 [ startProcessing::ch#0 ]
Uplifting [startProcessing] best 1211657 combination reg byte a [ startProcessing::ch#0 ]
Attempting to uplift remaining variables inzp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Uplifting [processChars] best 1211657 combination zp[1]:10 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Attempting to uplift remaining variables inzp[1]:8 [ main::i#2 main::i#1 ]
Uplifting [main] best 1211657 combination zp[1]:8 [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp[1]:64 [ main::$10 ]
Uplifting [main] best 1211617 combination reg byte a [ main::$10 ]
Attempting to uplift remaining variables inzp[1]:70 [ main::center_dist#0 ]
Uplifting [main] best 1211557 combination reg byte a [ main::center_dist#0 ]
Attempting to uplift remaining variables inzp[1]:83 [ processChars::$9 ]
Uplifting [processChars] best 1211497 combination reg byte a [ processChars::$9 ]
Attempting to uplift remaining variables inzp[1]:84 [ processChars::$10 ]
Uplifting [processChars] best 1211437 combination reg byte a [ processChars::$10 ]
Attempting to uplift remaining variables inzp[1]:90 [ processChars::$73 ]
Uplifting [processChars] best 1211397 combination reg byte a [ processChars::$73 ]
Attempting to uplift remaining variables inzp[1]:91 [ processChars::xchar#0 ]
Uplifting [processChars] best 1211337 combination reg byte a [ processChars::xchar#0 ]
Attempting to uplift remaining variables inzp[1]:92 [ processChars::$29 ]
Uplifting [processChars] best 1211297 combination reg byte a [ processChars::$29 ]
Attempting to uplift remaining variables inzp[1]:93 [ processChars::$79 ]
Uplifting [processChars] best 1211257 combination reg byte a [ processChars::$79 ]
Attempting to uplift remaining variables inzp[1]:94 [ processChars::ychar#0 ]
Uplifting [processChars] best 1211197 combination reg byte a [ processChars::ychar#0 ]
Attempting to uplift remaining variables inzp[1]:95 [ processChars::$30 ]
Uplifting [processChars] best 1211157 combination reg byte a [ processChars::$30 ]
Attempting to uplift remaining variables inzp[1]:96 [ processChars::$25 ]
Uplifting [processChars] best 1211097 combination reg byte a [ processChars::$25 ]
Attempting to uplift remaining variables inzp[1]:173 [ startProcessing::spritePtr#0 ]
Uplifting [startProcessing] best 1211097 combination zp[1]:173 [ startProcessing::spritePtr#0 ]
Attempting to uplift remaining variables inzp[1]:9 [ processChars::i#10 processChars::i#1 ]
Uplifting [processChars] best 1211097 combination zp[1]:9 [ processChars::i#10 processChars::i#1 ]
Attempting to uplift remaining variables inzp[1]:174 [ startProcessing::$15 ]
Uplifting [startProcessing] best 1211095 combination reg byte y [ startProcessing::$15 ]
Attempting to uplift remaining variables inzp[1]:65 [ getCharToProcess::return_x#0 ]
Uplifting [getCharToProcess] best 1211035 combination reg byte y [ getCharToProcess::return_x#0 ]
Attempting to uplift remaining variables inzp[1]:66 [ getCharToProcess::return_y#0 ]
Uplifting [getCharToProcess] best 1210975 combination reg byte a [ getCharToProcess::return_y#0 ]
Attempting to uplift remaining variables inzp[1]:67 [ getCharToProcess::return_dist#0 ]
Uplifting [getCharToProcess] best 1210935 combination reg byte x [ getCharToProcess::return_dist#0 ]
Attempting to uplift remaining variables inzp[1]:68 [ main::center_x#0 ]
Uplifting [main] best 1210875 combination reg byte y [ main::center_x#0 ]
Attempting to uplift remaining variables inzp[1]:69 [ main::center_y#0 ]
Uplifting [main] best 1210875 combination zp[1]:69 [ main::center_y#0 ]
Attempting to uplift remaining variables inzp[1]:145 [ startProcessing::spriteCol#0 ]
Uplifting [startProcessing] best 1210875 combination zp[1]:145 [ startProcessing::spriteCol#0 ]
Attempting to uplift remaining variables inzp[1]:71 [ startProcessing::center_x#0 ]
Uplifting [startProcessing] best 1210875 combination zp[1]:71 [ startProcessing::center_x#0 ]
Attempting to uplift remaining variables inzp[1]:87 [ processChars::ypos#0 ]
Uplifting [processChars] best 1210875 combination zp[1]:87 [ processChars::ypos#0 ]
Attempting to uplift remaining variables inzp[1]:80 [ processChars::bitmask#0 ]
Uplifting [processChars] best 1210875 combination zp[1]:80 [ processChars::bitmask#0 ]
Attempting to uplift remaining variables inzp[1]:73 [ processChars::$13 ]
Uplifting [processChars] best 1210875 combination zp[1]:73 [ processChars::$13 ]
Attempting to uplift remaining variables inzp[1]:72 [ startProcessing::center_y#0 ]
Uplifting [startProcessing] best 1210875 combination zp[1]:72 [ startProcessing::center_y#0 ]
Coalescing zero page register [ zp[2]:14 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 ] ] with [ zp[2]:58 [ init_angle_screen::screen#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:33 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] ] with [ zp[2]:155 [ startProcessing::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:35 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] ] with [ zp[2]:150 [ startProcessing::$4 ] ] - score: 1
Coalescing zero page register [ zp[2]:43 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 ] ] with [ zp[2]:45 [ atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] - score: 1
Coalescing zero page register [ zp[1]:69 [ main::center_y#0 ] ] with [ zp[1]:72 [ startProcessing::center_y#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:81 [ processChars::xpos#0 ] ] with [ zp[2]:88 [ processChars::$21 ] ] - score: 1
Coalescing zero page register [ zp[2]:99 [ init_angle_screen::xw#0 ] ] with [ zp[2]:104 [ atan2_16::x#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:102 [ init_angle_screen::yw#0 ] ] with [ zp[2]:106 [ atan2_16::y#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:108 [ atan2_16::return#2 ] ] with [ zp[2]:110 [ init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:118 [ getCharToProcess::$11 ] ] with [ zp[2]:122 [ getCharToProcess::$13 ] ] - score: 1
Coalescing zero page register [ zp[2]:124 [ getCharToProcess::$8 ] ] with [ zp[2]:126 [ getCharToProcess::$9 ] ] - score: 1
Coalescing zero page register [ zp[2]:133 [ startProcessing::$23 ] ] with [ zp[2]:137 [ startProcessing::$34 ] ] - score: 1
Coalescing zero page register [ zp[2]:139 [ startProcessing::$0 ] ] with [ zp[2]:141 [ startProcessing::offset#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:157 [ startProcessing::$26 ] ] with [ zp[2]:159 [ startProcessing::$8 ] ] - score: 1
Coalescing zero page register [ zp[2]:161 [ startProcessing::$9 ] ] with [ zp[2]:163 [ startProcessing::spriteX#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:165 [ startProcessing::$27 ] ] with [ zp[2]:167 [ startProcessing::$11 ] ] - score: 1
Coalescing zero page register [ zp[2]:169 [ startProcessing::$12 ] ] with [ zp[2]:171 [ startProcessing::spriteY#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:33 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$6 ] ] with [ zp[2]:153 [ startProcessing::$25 ] ] - score: 1
Coalescing zero page register [ zp[2]:35 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$4 ] ] with [ zp[2]:148 [ startProcessing::$24 ] ] - score: 1
Coalescing zero page register [ zp[2]:43 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 ] ] with [ zp[2]:108 [ atan2_16::return#2 init_angle_screen::angle_w#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:118 [ getCharToProcess::$11 getCharToProcess::$13 ] ] with [ zp[2]:124 [ getCharToProcess::$8 getCharToProcess::$9 ] ] - score: 1
Coalescing zero page register [ zp[2]:133 [ startProcessing::$23 startProcessing::$34 ] ] with [ zp[2]:139 [ startProcessing::$0 startProcessing::offset#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:157 [ startProcessing::$26 startProcessing::$8 ] ] with [ zp[2]:161 [ startProcessing::$9 startProcessing::spriteX#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:165 [ startProcessing::$27 startProcessing::$11 ] ] with [ zp[2]:169 [ startProcessing::$12 startProcessing::spriteY#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:43 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 ] ] with [ zp[2]:112 [ init_angle_screen::$7 ] ] - score: 1
Coalescing zero page register [ zp[2]:133 [ startProcessing::$23 startProcessing::$34 startProcessing::$0 startProcessing::offset#0 ] ] with [ zp[2]:146 [ startProcessing::screenPtr#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:18 [ initSprites::sp#2 initSprites::sp#1 ] ] with [ zp[2]:12 [ init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] ]
Coalescing zero page register [ zp[2]:21 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 ] ] with [ zp[2]:14 [ init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ]
Coalescing zero page register [ zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 ] ] with [ zp[1]:11 [ init_angle_screen::y#5 init_angle_screen::y#1 ] ]
Coalescing zero page register [ zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] ] with [ zp[1]:16 [ init_angle_screen::x#2 init_angle_screen::x#1 ] ]
Coalescing zero page register [ zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] ] with [ zp[1]:17 [ init_angle_screen::xb#2 init_angle_screen::xb#1 ] ]
Coalescing zero page register [ zp[1]:32 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] ] with [ zp[1]:29 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] ]
Coalescing zero page register [ zp[2]:33 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$6 startProcessing::$25 ] ] with [ zp[2]:23 [ getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] ]
Coalescing zero page register [ zp[2]:38 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ] ] with [ zp[2]:35 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$4 startProcessing::$24 ] ]
Coalescing zero page register [ zp[2]:56 [ malloc::mem#0 ] ] with [ zp[2]:4 [ main::src#2 main::src#1 ] ]
Coalescing zero page register [ zp[1]:114 [ init_angle_screen::ang_w#0 ] ] with [ zp[1]:71 [ startProcessing::center_x#0 ] ]
Coalescing zero page register [ zp[2]:118 [ getCharToProcess::$11 getCharToProcess::$13 getCharToProcess::$8 getCharToProcess::$9 ] ] with [ zp[2]:40 [ atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ]
Coalescing zero page register [ zp[2]:120 [ getCharToProcess::$12 ] ] with [ zp[2]:43 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$7 ] ]
Coalescing zero page register [ zp[2]:133 [ startProcessing::$23 startProcessing::$34 startProcessing::$0 startProcessing::offset#0 startProcessing::screenPtr#0 ] ] with [ zp[2]:48 [ atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ] ]
Coalescing zero page register [ zp[2]:135 [ startProcessing::$33 ] ] with [ zp[2]:50 [ atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ] ]
Coalescing zero page register [ zp[2]:143 [ startProcessing::colPtr#0 ] ] with [ zp[2]:99 [ init_angle_screen::xw#0 atan2_16::x#0 ] ]
Coalescing zero page register [ zp[2]:157 [ startProcessing::$26 startProcessing::$8 startProcessing::$9 startProcessing::spriteX#0 ] ] with [ zp[2]:102 [ init_angle_screen::yw#0 atan2_16::y#0 ] ]
Coalescing zero page register [ zp[2]:33 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$6 startProcessing::$25 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 ] ] with [ zp[2]:18 [ initSprites::sp#2 initSprites::sp#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ] ]
Coalescing zero page register [ zp[2]:56 [ malloc::mem#0 main::src#2 main::src#1 ] ] with [ zp[2]:21 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ] ]
Coalescing zero page register [ zp[1]:69 [ main::center_y#0 startProcessing::center_y#0 ] ] with [ zp[1]:25 [ getCharToProcess::y#7 getCharToProcess::y#1 init_angle_screen::y#5 init_angle_screen::y#1 ] ]
Coalescing zero page register [ zp[1]:145 [ startProcessing::spriteCol#0 ] ] with [ zp[1]:27 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 init_angle_screen::x#2 init_angle_screen::x#1 ] ]
Coalescing zero page register [ zp[2]:165 [ startProcessing::$27 startProcessing::$11 startProcessing::$12 startProcessing::spriteY#0 ] ] with [ zp[2]:118 [ getCharToProcess::$11 getCharToProcess::$13 getCharToProcess::$8 getCharToProcess::$9 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ] ]
Coalescing zero page register [ zp[1]:173 [ startProcessing::spritePtr#0 ] ] with [ zp[1]:28 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 init_angle_screen::xb#2 init_angle_screen::xb#1 ] ]
Allocated (was zp[2]:6) zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ]
Allocated (was zp[1]:8) zp[1]:6 [ main::i#2 main::i#1 ]
Allocated (was zp[1]:9) zp[1]:7 [ processChars::i#10 processChars::i#1 ]
Allocated (was zp[1]:10) zp[1]:8 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Allocated (was zp[1]:32) zp[1]:9 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Allocated (was zp[2]:33) zp[2]:10 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$6 startProcessing::$25 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 initSprites::sp#2 initSprites::sp#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ]
Allocated (was zp[2]:38) zp[2]:12 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$4 startProcessing::$24 ]
Allocated (was zp[2]:52) zp[2]:14 [ SCREEN_COPY#0 ]
Allocated (was zp[2]:54) zp[2]:16 [ SCREEN_DIST#0 ]
Allocated (was zp[2]:56) zp[2]:18 [ malloc::mem#0 main::src#2 main::src#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ]
Allocated (was zp[1]:69) zp[1]:20 [ main::center_y#0 startProcessing::center_y#0 getCharToProcess::y#7 getCharToProcess::y#1 init_angle_screen::y#5 init_angle_screen::y#1 ]
Allocated (was zp[1]:73) zp[1]:21 [ processChars::$13 ]
Allocated (was zp[2]:78) zp[2]:22 [ processChars::processing#0 ]
Allocated (was zp[1]:80) zp[1]:24 [ processChars::bitmask#0 ]
Allocated (was zp[2]:81) zp[2]:25 [ processChars::xpos#0 processChars::$21 ]
Allocated (was zp[2]:85) zp[2]:27 [ processChars::$12 ]
Allocated (was zp[1]:87) zp[1]:29 [ processChars::ypos#0 ]
Allocated (was zp[1]:114) zp[1]:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ]
Allocated (was zp[2]:120) zp[2]:31 [ getCharToProcess::$12 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$7 ]
Allocated (was zp[2]:133) zp[2]:33 [ startProcessing::$23 startProcessing::$34 startProcessing::$0 startProcessing::offset#0 startProcessing::screenPtr#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
Allocated (was zp[2]:135) zp[2]:35 [ startProcessing::$33 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
Allocated (was zp[2]:143) zp[2]:37 [ startProcessing::colPtr#0 init_angle_screen::xw#0 atan2_16::x#0 ]
Allocated (was zp[1]:145) zp[1]:39 [ startProcessing::spriteCol#0 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 init_angle_screen::x#2 init_angle_screen::x#1 ]
Allocated (was zp[2]:157) zp[2]:40 [ startProcessing::$26 startProcessing::$8 startProcessing::$9 startProcessing::spriteX#0 init_angle_screen::yw#0 atan2_16::y#0 ]
Allocated (was zp[2]:165) zp[2]:42 [ startProcessing::$27 startProcessing::$11 startProcessing::$12 startProcessing::spriteY#0 getCharToProcess::$11 getCharToProcess::$13 getCharToProcess::$8 getCharToProcess::$9 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
Allocated (was zp[1]:173) zp[1]:44 [ startProcessing::spritePtr#0 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 init_angle_screen::xb#2 init_angle_screen::xb#1 ]
Interrupt procedure irqTop clobbers AnzP
Interrupt procedure irqBottom clobbers AXYcnzvPS
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
// Clears start screen throwing around the letters (by turning them into sprites)
// C standard library stdlib.h
// Implementation of functions found int C stdlib.h / stdlib.c
// C standard library string.h
// Functions to manipulate C strings and arrays.
// Upstart
// Commodore 64 PRG executable file
.file [name="clearscreen.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
// The number of iterations performed during 16-bit CORDIC atan2 calculation
.const CORDIC_ITERATIONS_16 = $f
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// Positions of the border (in sprite positions)
.const BORDER_XPOS_LEFT = $18
.const BORDER_XPOS_RIGHT = $158
.const BORDER_YPOS_TOP = $32
.const BORDER_YPOS_BOTTOM = $fa
// The offset of the sprite pointers from the screen start address
.const OFFSET_SPRITE_PTRS = $3f8
// Bits for the VICII IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
// RAM in 0xA000, 0xE000 I/O in 0xD000
.const PROCPORT_RAM_IO = 5
// RAM in 0xA000, 0xE000 CHAR ROM in 0xD000
.const PROCPORT_RAM_CHARROM = 1
.const LIGHT_BLUE = $e
// Max number of chars processed at once
.const NUM_PROCESSING = 8
// Distance value meaning not found
.const NOT_FOUND = $ff
.const STATUS_FREE = 0
.const STATUS_NEW = 1
.const STATUS_PROCESSING = 2
.const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
.const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
.const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
.const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
.const RASTER_IRQ_TOP = $30
.const RASTER_IRQ_MIDDLE = $ff
.const SIZEOF_STRUCT_PROCESSINGSPRITE = $e
.const OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2
.const OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4
.const OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6
.const OFFSET_STRUCT_PROCESSINGSPRITE_ID = 8
.const OFFSET_STRUCT_PROCESSINGSPRITE_PTR = 9
.const OFFSET_STRUCT_PROCESSINGSPRITE_COL = $a
.const OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = $b
.const OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $c
.const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label SPRITES_XMSB = $d010
.label SPRITES_COLOR = $d027
.label SPRITES_ENABLE = $d015
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label RASTER = $d012
.label VICII_CONTROL = $d011
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Processor port data direction register
.label PROCPORT_DDR = 0
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// The address of the CHARGEN character set
.label CHARGEN = $d000
// Color Ram
.label COLS = $d800
// The CIA#1: keyboard matrix, joystick #1/#2
.label CIA1 = $dc00
// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
// Address of the screen
.label SCREEN = $400
// Sprite data for the animating sprites
.label SPRITE_DATA = $2000
// Top of the heap used by malloc()
.label HEAP_TOP = $a000
// Head of the heap. Moved backward each malloc()
.label heap_head = 2
// Copy of the screen used for finding chars to process
.label SCREEN_COPY = $e
// Screen containing bytes representing the distance to the center
.label SCREEN_DIST = $10
.segment Code
// __start
__start: {
// [1] phi from __start to __start::__init1 [phi:__start->__start::__init1]
__init1_from___start:
jmp __init1
// __start::__init1
__init1:
// [2] call malloc
// [21] phi from __start::__init1 to malloc [phi:__start::__init1->malloc]
malloc_from___init1:
// [21] phi heap_head#6 = HEAP_TOP [phi:__start::__init1->malloc#0] -- pbuz1=pbuc1
lda #<HEAP_TOP
sta.z heap_head
lda #>HEAP_TOP
sta.z heap_head+1
jsr malloc
jmp __b2
// __start::@2
__b2:
// [3] SCREEN_COPY#0 = (void*)malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SCREEN_COPY
lda.z malloc.mem+1
sta.z SCREEN_COPY+1
// [4] call malloc
// [21] phi from __start::@2 to malloc [phi:__start::@2->malloc]
malloc_from___b2:
// [21] phi heap_head#6 = heap_head#0 [phi:__start::@2->malloc#0] -- register_copy
jsr malloc
jmp __b3
// __start::@3
__b3:
// [5] SCREEN_DIST#0 = (void*)malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SCREEN_DIST
lda.z malloc.mem+1
sta.z SCREEN_DIST+1
// [6] phi from __start::@3 to __start::@1 [phi:__start::@3->__start::@1]
__b1_from___b3:
jmp __b1
// __start::@1
__b1:
// [7] call main
jsr main
jmp __breturn
// __start::@return
__breturn:
// [8] return
rts
}
// irqBottom
// Raster Interrupt at the bottom of the screen
irqBottom: {
// interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry
sta rega+1
stx regx+1
sty regy+1
// [10] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
__b1_from_irqBottom:
jmp __b1
// irqBottom::@1
__b1:
// [11] call processChars
// [60] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars]
processChars_from___b1:
jsr processChars
jmp __b2
// irqBottom::@2
__b2:
// [12] *RASTER = RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2
// Trigger IRQ at the top of the screen
lda #RASTER_IRQ_TOP
sta RASTER
// [13] *HARDWARE_IRQ = &irqTop -- _deref_qprc1=pprc2
lda #<irqTop
sta HARDWARE_IRQ
lda #>irqTop
sta HARDWARE_IRQ+1
// [14] *IRQ_STATUS = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
jmp __breturn
// irqBottom::@return
__breturn:
// [15] return
// interrupt(isr_hardware_clobber_exit) -- isr_hardware_all_exit
rega:
lda #0
regx:
ldx #0
regy:
ldy #0
rti
}
// irqTop
// Raster Interrupt at the top of the screen
irqTop: {
// interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry
sta rega+1
jmp __b1
// irqTop::@1
__b1:
// [17] *RASTER = RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2
// Trigger IRQ at the middle of the screen
lda #RASTER_IRQ_MIDDLE
sta RASTER
// [18] *HARDWARE_IRQ = &irqBottom -- _deref_qprc1=pprc2
lda #<irqBottom
sta HARDWARE_IRQ
lda #>irqBottom
sta HARDWARE_IRQ+1
// [19] *IRQ_STATUS = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
jmp __breturn
// irqTop::@return
__breturn:
// [20] return
// interrupt(isr_hardware_clobber_exit) -- isr_hardware_all_exit
rega:
lda #0
rti
}
// malloc
// Allocates a block of size chars of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
malloc: {
.label mem = $12
// [22] malloc::mem#0 = heap_head#6 - $3e8 -- pbuz1=pbuz2_minus_vwuc1
lda.z heap_head
sec
sbc #<$3e8
sta.z mem
lda.z heap_head+1
sbc #>$3e8
sta.z mem+1
// [23] heap_head#0 = malloc::mem#0 -- pbuz1=pbuz2
lda.z mem
sta.z heap_head
lda.z mem+1
sta.z heap_head+1
jmp __breturn
// malloc::@return
__breturn:
// [24] return
rts
}
// main
main: {
.label dst = 4
.label src = $12
.label i = 6
.label center_y = $14
// [25] init_angle_screen::screen#0 = (byte*)SCREEN_DIST#0 -- pbuz1=pbuz2
lda.z SCREEN_DIST
sta.z init_angle_screen.screen
lda.z SCREEN_DIST+1
sta.z init_angle_screen.screen+1
// [26] call init_angle_screen
// Initialize the screen containing distance to the center
jsr init_angle_screen
jmp __b9
// main::@9
__b9:
// [27] main::dst#0 = (byte*)SCREEN_COPY#0 -- pbuz1=pbuz2
lda.z SCREEN_COPY
sta.z dst
lda.z SCREEN_COPY+1
sta.z dst+1
// [28] phi from main::@9 to main::@1 [phi:main::@9->main::@1]
__b1_from___b9:
// [28] phi main::dst#2 = main::dst#0 [phi:main::@9->main::@1#0] -- register_copy
// [28] phi main::src#2 = SCREEN [phi:main::@9->main::@1#1] -- pbuz1=pbuc1
lda #<SCREEN
sta.z src
lda #>SCREEN
sta.z src+1
jmp __b1
// Copy screen to screen copy
// main::@1
__b1:
// [29] if(main::src#2!=SCREEN+$3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1
lda.z src+1
cmp #>SCREEN+$3e8
bne __b2
lda.z src
cmp #<SCREEN+$3e8
bne __b2
// [30] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
__b3_from___b1:
// [30] phi main::i#2 = 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1
lda #0
sta.z i
jmp __b3
// Init processing array
// [30] phi from main::@3 to main::@3 [phi:main::@3->main::@3]
__b3_from___b3:
// [30] phi main::i#2 = main::i#1 [phi:main::@3->main::@3#0] -- register_copy
jmp __b3
// main::@3
__b3:
// [31] main::$11 = main::i#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z i
asl
// [32] main::$12 = main::$11 + main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [33] main::$13 = main::$12 << 1 -- vbuaa=vbuaa_rol_1
asl
// [34] main::$14 = main::$13 + main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [35] main::$10 = main::$14 << 1 -- vbuaa=vbuaa_rol_1
asl
// [36] PROCESSING[main::$10] = memcpy(*(&$0), struct ProcessingSprite, SIZEOF_STRUCT_PROCESSINGSPRITE) -- pssc1_derefidx_vbuaa=_deref_pssc2_memcpy_vbuc3
tax
ldy #0
!:
lda __0,y
sta PROCESSING,x
inx
iny
cpy #SIZEOF_STRUCT_PROCESSINGSPRITE
bne !-
// [37] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1
inc.z i
// [38] if(main::i#1!=NUM_PROCESSING-1+1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp.z i
bne __b3_from___b3
// [39] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
__b4_from___b3:
jmp __b4
// main::@4
__b4:
// [40] call initSprites
// Init sprites
// [140] phi from main::@4 to initSprites [phi:main::@4->initSprites]
initSprites_from___b4:
jsr initSprites
// [41] phi from main::@4 to main::@10 [phi:main::@4->main::@10]
__b10_from___b4:
jmp __b10
// main::@10
__b10:
// [42] call setupRasterIrq
// Set-up raster interrupts
jsr setupRasterIrq
// [43] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5]
__b5_from___b10:
__b5_from___b6:
jmp __b5
// Main loop
// main::@5
__b5:
// [44] call getCharToProcess
jsr getCharToProcess
// [45] getCharToProcess::return_x#0 = getCharToProcess::return_x#1 -- vbuyy=vbuz1
ldy.z getCharToProcess.return_x
// [46] getCharToProcess::return_y#0 = getCharToProcess::return_y#1 -- vbuaa=vbuz1
lda.z getCharToProcess.return_y
// [47] getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1
jmp __b11
// main::@11
__b11:
// [48] main::center_x#0 = getCharToProcess::return_x#0
// [49] main::center_y#0 = getCharToProcess::return_y#0 -- vbuz1=vbuaa
sta.z center_y
// [50] main::center_dist#0 = getCharToProcess::return_dist#0 -- vbuaa=vbuxx
txa
// [51] if(main::center_dist#0!=NOT_FOUND) goto main::@6 -- vbuaa_neq_vbuc1_then_la1
cmp #NOT_FOUND
bne __b6
jmp __b7
// main::@7
__b7:
// [52] *(SCREEN+$3e7) = '.' -- _deref_pbuc1=vbuc2
lda #'.'
sta SCREEN+$3e7
jmp __b8
// main::@8
__b8:
// [53] *(COLS+$3e7) = ++ *(COLS+$3e7) -- _deref_pbuc1=_inc__deref_pbuc1
inc COLS+$3e7
jmp __b8
// main::@6
__b6:
// [54] startProcessing::center_x#0 = main::center_x#0 -- vbuz1=vbuyy
sty.z startProcessing.center_x
// [55] startProcessing::center_y#0 = main::center_y#0
// [56] call startProcessing
// [191] phi from main::@6 to startProcessing [phi:main::@6->startProcessing]
startProcessing_from___b6:
jsr startProcessing
jmp __b5_from___b6
// main::@2
__b2:
// [57] *main::dst#2 = *main::src#2 -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (src),y
ldy #0
sta (dst),y
// [58] main::src#1 = ++ main::src#2 -- pbuz1=_inc_pbuz1
inc.z src
bne !+
inc.z src+1
!:
// [59] main::dst#1 = ++ main::dst#2 -- pbuz1=_inc_pbuz1
inc.z dst
bne !+
inc.z dst+1
!:
// [28] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
__b1_from___b2:
// [28] phi main::dst#2 = main::dst#1 [phi:main::@2->main::@1#0] -- register_copy
// [28] phi main::src#2 = main::src#1 [phi:main::@2->main::@1#1] -- register_copy
jmp __b1
}
// processChars
// Process any chars in the PROCESSING array
processChars: {
.label __12 = $1b
.label __13 = $15
.label __21 = $19
.label processing = $16
.label bitmask = $18
.label i = 7
.label xpos = $19
.label ypos = $1d
.label numActive = 8
// [61] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
__b1_from_processChars:
// [61] phi processChars::numActive#10 = 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1
lda #0
sta.z numActive
// [61] phi processChars::i#10 = 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1
lda #0
sta.z i
jmp __b1
// [61] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
__b1_from___b2:
// [61] phi processChars::numActive#10 = processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy
// [61] phi processChars::i#10 = processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy
jmp __b1
// processChars::@1
__b1:
// [62] processChars::$13 = processChars::i#10 << 1 -- vbuz1=vbuz2_rol_1
lda.z i
asl
sta.z __13
// [63] processChars::$87 = processChars::$13 + processChars::i#10 -- vbuaa=vbuz1_plus_vbuz2
lda.z __13
clc
adc.z i
// [64] processChars::$88 = processChars::$87 << 1 -- vbuaa=vbuaa_rol_1
asl
// [65] processChars::$89 = processChars::$88 + processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [66] processChars::$28 = processChars::$89 << 1 -- vbuaa=vbuaa_rol_1
asl
// [67] processChars::processing#0 = PROCESSING + processChars::$28 -- pssz1=pssc1_plus_vbuaa
clc
adc #<PROCESSING
sta.z processing
lda #>PROCESSING
adc #0
sta.z processing+1
// [68] processChars::bitmask#0 = 1 << ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID] -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
lda (processing),y
tay
lda #1
cpy #0
beq !e+
!:
asl
dey
bne !-
!e:
sta.z bitmask
// [69] if(((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]==STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1
lda #STATUS_FREE
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
cmp (processing),y
beq __b2_from___b1
jmp __b10
// processChars::@10
__b10:
// [70] if(((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]!=STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
lda (processing),y
cmp #STATUS_NEW
bne __b3
jmp __b11
// processChars::@11
__b11:
// [71] *(((byte**)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR]) = ' ' -- _deref_(qbuz1_derefidx_vbuc1)=vbuc2
// Clear the char on the screen
ldx #' '
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
lda (processing),y
sta !+ +1
iny
lda (processing),y
sta !+ +2
!:
stx $ffff
// [72] *SPRITES_ENABLE = *SPRITES_ENABLE | processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
// Enable the sprite
lda SPRITES_ENABLE
ora.z bitmask
sta SPRITES_ENABLE
// [73] SPRITES_COLOR[((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]] = ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_COL] -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3
// Set the sprite color
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_COL
lda (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
pha
lda (processing),y
tay
pla
sta SPRITES_COLOR,y
// [74] (SCREEN+OFFSET_SPRITE_PTRS)[((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]] = ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_PTR] -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3
// Set sprite pointer
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_PTR
lda (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
pha
lda (processing),y
tay
pla
sta SCREEN+OFFSET_SPRITE_PTRS,y
// [75] ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS] = STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2
// Set status
lda #STATUS_PROCESSING
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
jmp __b3
// processChars::@3
__b3:
// [76] processChars::xpos#0 = *((word*)processChars::processing#0) >> 4 -- vwuz1=_deref_pwuz2_ror_4
ldy #0
lda (processing),y
sta.z xpos
iny
lda (processing),y
sta.z xpos+1
lsr.z xpos+1
ror.z xpos
lsr.z xpos+1
ror.z xpos
lsr.z xpos+1
ror.z xpos
lsr.z xpos+1
ror.z xpos
// [77] processChars::$9 = > processChars::xpos#0 -- vbuaa=_hi_vwuz1
lda.z xpos+1
// [78] if(0!=processChars::$9) goto processChars::@4 -- 0_neq_vbuaa_then_la1
// Set sprite position
cmp #0
bne __b4
jmp __b8
// processChars::@8
__b8:
// [79] processChars::$10 = $ff ^ processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1
lda #$ff
eor.z bitmask
// [80] *SPRITES_XMSB = *SPRITES_XMSB & processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
and SPRITES_XMSB
sta SPRITES_XMSB
jmp __b5
// processChars::@5
__b5:
// [81] SPRITES_XPOS[processChars::$13] = (byte)processChars::xpos#0 -- pbuc1_derefidx_vbuz1=_byte_vwuz2
ldy.z __13
lda.z xpos
sta SPRITES_XPOS,y
// [82] processChars::$12 = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] >> 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
lda (processing),y
sta.z __12
iny
lda (processing),y
sta.z __12+1
lsr.z __12+1
ror.z __12
lsr.z __12+1
ror.z __12
lsr.z __12+1
ror.z __12
lsr.z __12+1
ror.z __12
// [83] processChars::ypos#0 = (byte)processChars::$12 -- vbuz1=_byte_vwuz2
lda.z __12
sta.z ypos
// [84] SPRITES_YPOS[processChars::$13] = processChars::ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2
lda.z ypos
ldy.z __13
sta SPRITES_YPOS,y
// [85] if(*((word*)processChars::processing#0)<XPOS_LEFTMOST) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1
// Move sprite
ldy #1
lda (processing),y
cmp #>XPOS_LEFTMOST
bcc __b6
bne !+
dey
lda (processing),y
cmp #<XPOS_LEFTMOST
bcc __b6
!:
jmp __b14
// processChars::@14
__b14:
// [86] if(*((word*)processChars::processing#0)>XPOS_RIGHTMOST) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1
ldy #1
lda #>XPOS_RIGHTMOST
cmp (processing),y
bcc __b6
bne !+
dey
lda #<XPOS_RIGHTMOST
cmp (processing),y
bcc __b6
!:
jmp __b13
// processChars::@13
__b13:
// [87] if(((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y]<YPOS_TOPMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
iny
lda (processing),y
cmp #>YPOS_TOPMOST
bcc __b6
bne !+
dey
lda (processing),y
cmp #<YPOS_TOPMOST
bcc __b6
!:
jmp __b12
// processChars::@12
__b12:
// [88] if(((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y]>YPOS_BOTTOMMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
iny
lda #>YPOS_BOTTOMMOST
cmp (processing),y
bcc __b6
bne !+
dey
lda #<YPOS_BOTTOMMOST
cmp (processing),y
bcc __b6
!:
jmp __b9
// processChars::@9
__b9:
// [89] processChars::$21 = processChars::xpos#0 >> 3 -- vwuz1=vwuz1_ror_3
lsr.z __21+1
ror.z __21
lsr.z __21+1
ror.z __21
lsr.z __21+1
ror.z __21
// [90] processChars::$73 = (byte)processChars::$21 -- vbuaa=_byte_vwuz1
lda.z __21
// [91] processChars::xchar#0 = processChars::$73 - BORDER_XPOS_LEFT/8 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #BORDER_XPOS_LEFT/8
// [92] processChars::$29 = processChars::xchar#0 << 1 -- vbuaa=vbuaa_rol_1
asl
// [93] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] + VXSIN[processChars::$29] -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
tax
clc
lda (processing),y
adc VXSIN,x
sta (processing),y
iny
lda (processing),y
adc VXSIN+1,x
sta (processing),y
// [94] *((word*)processChars::processing#0) = *((word*)processChars::processing#0) + ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
sty.z $ff
clc
lda (processing),y
ldy #0
adc (processing),y
sta (processing),y
ldy.z $ff
iny
lda (processing),y
ldy #1
adc (processing),y
sta (processing),y
// [95] processChars::$79 = processChars::ypos#0 >> 3 -- vbuaa=vbuz1_ror_3
lda.z ypos
lsr
lsr
lsr
// [96] processChars::ychar#0 = processChars::$79 - BORDER_YPOS_TOP/8 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #BORDER_YPOS_TOP/8
// [97] processChars::$30 = processChars::ychar#0 << 1 -- vbuaa=vbuaa_rol_1
asl
// [98] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] + VYSIN[processChars::$30] -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
tax
clc
lda (processing),y
adc VYSIN,x
sta (processing),y
iny
lda (processing),y
adc VYSIN+1,x
sta (processing),y
// [99] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] + ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
clc
lda (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
adc (processing),y
sta (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY+1
lda (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y+1
adc (processing),y
sta (processing),y
jmp __b7
// processChars::@7
__b7:
// [100] processChars::numActive#1 = ++ processChars::numActive#10 -- vbuz1=_inc_vbuz1
inc.z numActive
// [101] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
__b2_from___b1:
__b2_from___b7:
// [101] phi processChars::numActive#3 = processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy
jmp __b2
// processChars::@2
__b2:
// [102] processChars::i#1 = ++ processChars::i#10 -- vbuz1=_inc_vbuz1
inc.z i
// [103] if(processChars::i#1!=NUM_PROCESSING-1+1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp.z i
bne __b1_from___b2
jmp __breturn
// processChars::@return
__breturn:
// [104] return
rts
// processChars::@6
__b6:
// [105] ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS] = STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2
// Set status to FREE
lda #STATUS_FREE
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
// [106] processChars::$25 = $ff ^ processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1
lda #$ff
eor.z bitmask
// [107] *SPRITES_ENABLE = *SPRITES_ENABLE & processChars::$25 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
// Disable the sprite
and SPRITES_ENABLE
sta SPRITES_ENABLE
jmp __b7
// processChars::@4
__b4:
// [108] *SPRITES_XMSB = *SPRITES_XMSB | processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
lda SPRITES_XMSB
ora.z bitmask
sta SPRITES_XMSB
jmp __b5
}
// init_angle_screen
// Populates 1000 chars (a screen) with values representing the angle to the center.
// Utilizes symmetry around the center
// init_angle_screen(byte* zp($12) screen)
init_angle_screen: {
.label __7 = $1f
.label screen = $12
.label screen_bottomline = $12
.label xw = $25
.label yw = $28
.label angle_w = $1f
.label ang_w = $1e
.label x = $27
.label xb = $2c
.label screen_topline = $a
.label y = $14
// [109] init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0 + (word)$28*$c -- pbuz1=pbuz1_plus_vwuc1
clc
lda.z screen_bottomline
adc #<$28*$c
sta.z screen_bottomline
lda.z screen_bottomline+1
adc #>$28*$c
sta.z screen_bottomline+1
// [110] init_angle_screen::screen_topline#7 = init_angle_screen::screen_bottomline#0 -- pbuz1=pbuz2
lda.z screen_bottomline
sta.z screen_topline
lda.z screen_bottomline+1
sta.z screen_topline+1
// [111] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
__b1_from_init_angle_screen:
// [111] phi init_angle_screen::screen_bottomline#6 = init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy
// [111] phi init_angle_screen::screen_topline#6 = init_angle_screen::screen_topline#7 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy
// [111] phi init_angle_screen::y#5 = 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
jmp __b1
// [111] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
__b1_from___b4:
// [111] phi init_angle_screen::screen_bottomline#6 = init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy
// [111] phi init_angle_screen::screen_topline#6 = init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy
// [111] phi init_angle_screen::y#5 = init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy
jmp __b1
// init_angle_screen::@1
__b1:
// [112] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
__b2_from___b1:
// [112] phi init_angle_screen::xb#2 = $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1
lda #$27
sta.z xb
// [112] phi init_angle_screen::x#2 = 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1
lda #0
sta.z x
jmp __b2
// init_angle_screen::@2
__b2:
// [113] if(init_angle_screen::x#2<$13+1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1
lda.z x
cmp #$13+1
bcc __b3
jmp __b4
// init_angle_screen::@4
__b4:
// [114] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28 -- pbuz1=pbuz1_minus_vbuc1
sec
lda.z screen_topline
sbc #$28
sta.z screen_topline
lda.z screen_topline+1
sbc #0
sta.z screen_topline+1
// [115] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_bottomline
sta.z screen_bottomline
bcc !+
inc.z screen_bottomline+1
!:
// [116] init_angle_screen::y#1 = ++ init_angle_screen::y#5 -- vbuz1=_inc_vbuz1
inc.z y
// [117] if(init_angle_screen::y#1!=$d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$d
cmp.z y
bne __b1_from___b4
jmp __breturn
// init_angle_screen::@return
__breturn:
// [118] return
rts
// init_angle_screen::@3
__b3:
// [119] init_angle_screen::$3 = init_angle_screen::x#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z x
asl
// [120] init_angle_screen::$4 = $27 - init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa
eor #$ff
sec
adc #$27
// [121] init_angle_screen::xw#0 = init_angle_screen::$4 w= 0 -- vwuz1=vbuaa_word_vbuc1
ldy #0
sta.z xw+1
sty.z xw
// [122] init_angle_screen::$5 = init_angle_screen::y#5 << 1 -- vbuaa=vbuz1_rol_1
lda.z y
asl
// [123] init_angle_screen::yw#0 = init_angle_screen::$5 w= 0 -- vwuz1=vbuaa_word_vbuc1
ldy #0
sta.z yw+1
sty.z yw
// [124] atan2_16::x#0 = (signed word)init_angle_screen::xw#0
// [125] atan2_16::y#0 = (signed word)init_angle_screen::yw#0
// [126] call atan2_16
jsr atan2_16
// [127] atan2_16::return#2 = atan2_16::return#0
jmp __b5
// init_angle_screen::@5
__b5:
// [128] init_angle_screen::angle_w#0 = atan2_16::return#2
// [129] init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80 -- vwuz1=vwuz1_plus_vbuc1
lda #$80
clc
adc.z __7
sta.z __7
bcc !+
inc.z __7+1
!:
// [130] init_angle_screen::ang_w#0 = > init_angle_screen::$7 -- vbuz1=_hi_vwuz2
lda.z __7+1
sta.z ang_w
// [131] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3
lda.z ang_w
ldy.z xb
sta (screen_bottomline),y
// [132] init_angle_screen::$9 = - init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1
lda.z ang_w
eor #$ff
clc
adc #1
// [133] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$9 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z xb
sta (screen_topline),y
// [134] init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1
lda #$80
clc
adc.z ang_w
// [135] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$10 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_topline),y
// [136] init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1
lda #$80
sec
sbc.z ang_w
// [137] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$11 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_bottomline),y
// [138] init_angle_screen::x#1 = ++ init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
inc.z x
// [139] init_angle_screen::xb#1 = -- init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
dec.z xb
// [112] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
__b2_from___b5:
// [112] phi init_angle_screen::xb#2 = init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy
// [112] phi init_angle_screen::x#2 = init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy
jmp __b2
}
// initSprites
// Initialize sprites
initSprites: {
.label sp = $a
// [141] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1]
__b1_from_initSprites:
// [141] phi initSprites::sp#2 = SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1
lda #<SPRITE_DATA
sta.z sp
lda #>SPRITE_DATA
sta.z sp+1
jmp __b1
// Clear sprite data
// initSprites::@1
__b1:
// [142] if(initSprites::sp#2<SPRITE_DATA+NUM_PROCESSING*$40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1
lda.z sp+1
cmp #>SPRITE_DATA+NUM_PROCESSING*$40
bcc __b2
bne !+
lda.z sp
cmp #<SPRITE_DATA+NUM_PROCESSING*$40
bcc __b2
!:
// [143] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3]
__b3_from___b1:
// [143] phi initSprites::i#2 = 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1
ldx #0
jmp __b3
// Initialize sprite registers
// [143] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3]
__b3_from___b3:
// [143] phi initSprites::i#2 = initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy
jmp __b3
// initSprites::@3
__b3:
// [144] SPRITES_COLOR[initSprites::i#2] = LIGHT_BLUE -- pbuc1_derefidx_vbuxx=vbuc2
lda #LIGHT_BLUE
sta SPRITES_COLOR,x
// [145] initSprites::i#1 = ++ initSprites::i#2 -- vbuxx=_inc_vbuxx
inx
// [146] if(initSprites::i#1!=8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne __b3_from___b3
jmp __b4
// initSprites::@4
__b4:
// [147] *SPRITES_MC = 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_MC
// [148] *SPRITES_EXPAND_X = 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_EXPAND_X
// [149] *SPRITES_EXPAND_Y = 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_EXPAND_Y
jmp __breturn
// initSprites::@return
__breturn:
// [150] return
rts
// initSprites::@2
__b2:
// [151] *initSprites::sp#2 = 0 -- _deref_pbuz1=vbuc1
lda #0
ldy #0
sta (sp),y
// [152] initSprites::sp#1 = ++ initSprites::sp#2 -- pbuz1=_inc_pbuz1
inc.z sp
bne !+
inc.z sp+1
!:
// [141] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1]
__b1_from___b2:
// [141] phi initSprites::sp#2 = initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy
jmp __b1
}
// setupRasterIrq
// Setup Raster IRQ
setupRasterIrq: {
.label irqRoutine = irqTop
// asm { sei }
sei
// [154] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
// [155] *PROCPORT = PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
// [156] *((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
jmp __b1
// setupRasterIrq::@1
__b1:
// [157] *VICII_CONTROL = *VICII_CONTROL & $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
lda #$7f
and VICII_CONTROL
sta VICII_CONTROL
jmp __b2
// setupRasterIrq::@2
__b2:
// [158] *RASTER = <RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2
lda #RASTER_IRQ_TOP
sta RASTER
// [159] *IRQ_ENABLE = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
// [160] *HARDWARE_IRQ = setupRasterIrq::irqRoutine#0 -- _deref_qprc1=pprc2
// Set the IRQ routine
lda #<irqRoutine
sta HARDWARE_IRQ
lda #>irqRoutine
sta HARDWARE_IRQ+1
// asm { cli }
cli
jmp __breturn
// setupRasterIrq::@return
__breturn:
// [162] return
rts
}
// getCharToProcess
// Find the non-space char closest to the center of the screen
// If no non-space char is found the distance will be 0xffff
getCharToProcess: {
.label __8 = $2a
.label __9 = $2a
.label __11 = $2a
.label screen_line = $12
.label dist_line = $a
.label y = $14
.label return_x = $2c
.label return_y = 9
.label closest_dist = $27
.label closest_x = $2c
.label closest_y = 9
.label __12 = $1f
.label __13 = $2a
// [163] getCharToProcess::screen_line#0 = (byte*)SCREEN_COPY#0 -- pbuz1=pbuz2
lda.z SCREEN_COPY
sta.z screen_line
lda.z SCREEN_COPY+1
sta.z screen_line+1
// [164] getCharToProcess::dist_line#0 = (byte*)SCREEN_DIST#0 -- pbuz1=pbuz2
lda.z SCREEN_DIST
sta.z dist_line
lda.z SCREEN_DIST+1
sta.z dist_line+1
// [165] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
__b1_from_getCharToProcess:
// [165] phi getCharToProcess::closest_y#9 = 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1
lda #0
sta.z closest_y
// [165] phi getCharToProcess::closest_x#9 = 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1
lda #0
sta.z closest_x
// [165] phi getCharToProcess::y#7 = 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
// [165] phi getCharToProcess::closest_dist#8 = NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1
lda #NOT_FOUND
sta.z closest_dist
// [165] phi getCharToProcess::dist_line#6 = getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy
// [165] phi getCharToProcess::screen_line#4 = getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy
jmp __b1
// getCharToProcess::@1
__b1:
// [166] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
__b2_from___b1:
// [166] phi getCharToProcess::closest_y#7 = getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy
// [166] phi getCharToProcess::closest_x#7 = getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy
// [166] phi getCharToProcess::closest_dist#2 = getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy
// [166] phi getCharToProcess::x#2 = 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuyy=vbuc1
ldy #0
jmp __b2
// getCharToProcess::@2
__b2:
// [167] if(getCharToProcess::screen_line#4[getCharToProcess::x#2]==' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1
lda #' '
cmp (screen_line),y
beq __b11
jmp __b4
// getCharToProcess::@4
__b4:
// [168] getCharToProcess::dist#0 = getCharToProcess::dist_line#6[getCharToProcess::x#2] -- vbuxx=pbuz1_derefidx_vbuyy
lda (dist_line),y
tax
// [169] if(getCharToProcess::dist#0>=getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuxx_ge_vbuz1_then_la1
cpx.z closest_dist
bcs __b12
jmp __b5
// getCharToProcess::@5
__b5:
// [170] getCharToProcess::return_x#7 = getCharToProcess::x#2 -- vbuz1=vbuyy
sty.z return_x
// [171] getCharToProcess::return_y#7 = getCharToProcess::y#7 -- vbuz1=vbuz2
lda.z y
sta.z return_y
// [172] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3]
__b3_from___b11:
__b3_from___b12:
__b3_from___b5:
// [172] phi getCharToProcess::return_y#1 = getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy
// [172] phi getCharToProcess::return_x#1 = getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy
// [172] phi getCharToProcess::return_dist#1 = getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy
jmp __b3
// getCharToProcess::@3
__b3:
// [173] getCharToProcess::x#1 = ++ getCharToProcess::x#2 -- vbuyy=_inc_vbuyy
iny
// [174] if(getCharToProcess::x#1!=$28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1
cpy #$28
bne __b10
jmp __b6
// getCharToProcess::@6
__b6:
// [175] getCharToProcess::screen_line#1 = getCharToProcess::screen_line#4 + $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_line
sta.z screen_line
bcc !+
inc.z screen_line+1
!:
// [176] getCharToProcess::dist_line#1 = getCharToProcess::dist_line#6 + $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z dist_line
sta.z dist_line
bcc !+
inc.z dist_line+1
!:
// [177] getCharToProcess::y#1 = ++ getCharToProcess::y#7 -- vbuz1=_inc_vbuz1
inc.z y
// [178] if(getCharToProcess::y#1!=$19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp.z y
bne __b9
jmp __b7
// getCharToProcess::@7
__b7:
// [179] if(getCharToProcess::return_dist#1==NOT_FOUND) goto getCharToProcess::@return -- vbuxx_eq_vbuc1_then_la1
cpx #NOT_FOUND
beq __breturn
jmp __b8
// getCharToProcess::@8
__b8:
// [180] getCharToProcess::$11 = (word)getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2
lda.z return_y
sta.z __11
lda #0
sta.z __11+1
// [181] getCharToProcess::$12 = getCharToProcess::$11 << 2 -- vwuz1=vwuz2_rol_2
lda.z __11
asl
sta.z __12
lda.z __11+1
rol
sta.z __12+1
asl.z __12
rol.z __12+1
// [182] getCharToProcess::$13 = getCharToProcess::$12 + getCharToProcess::$11 -- vwuz1=vwuz2_plus_vwuz1
lda.z __13
clc
adc.z __12
sta.z __13
lda.z __13+1
adc.z __12+1
sta.z __13+1
// [183] getCharToProcess::$8 = getCharToProcess::$13 << 3 -- vwuz1=vwuz1_rol_3
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
// [184] getCharToProcess::$9 = (byte*)SCREEN_COPY#0 + getCharToProcess::$8 -- pbuz1=pbuz2_plus_vwuz1
lda.z __9
clc
adc.z SCREEN_COPY
sta.z __9
lda.z __9+1
adc.z SCREEN_COPY+1
sta.z __9+1
// [185] getCharToProcess::$9[getCharToProcess::return_x#1] = ' ' -- pbuz1_derefidx_vbuz2=vbuc1
// clear the found char on the screen copy
lda #' '
ldy.z return_x
sta (__9),y
jmp __breturn
// getCharToProcess::@return
__breturn:
// [186] return
rts
// getCharToProcess::@9
__b9:
// [187] getCharToProcess::closest_dist#10 = getCharToProcess::return_dist#1 -- vbuz1=vbuxx
stx.z closest_dist
// [165] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
__b1_from___b9:
// [165] phi getCharToProcess::closest_y#9 = getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy
// [165] phi getCharToProcess::closest_x#9 = getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy
// [165] phi getCharToProcess::y#7 = getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy
// [165] phi getCharToProcess::closest_dist#8 = getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy
// [165] phi getCharToProcess::dist_line#6 = getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy
// [165] phi getCharToProcess::screen_line#4 = getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy
jmp __b1
// getCharToProcess::@10
__b10:
// [188] getCharToProcess::closest_dist#12 = getCharToProcess::return_dist#1 -- vbuz1=vbuxx
stx.z closest_dist
// [166] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
__b2_from___b10:
// [166] phi getCharToProcess::closest_y#7 = getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy
// [166] phi getCharToProcess::closest_x#7 = getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy
// [166] phi getCharToProcess::closest_dist#2 = getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy
// [166] phi getCharToProcess::x#2 = getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy
jmp __b2
// getCharToProcess::@12
__b12:
// [189] getCharToProcess::return_dist#6 = getCharToProcess::closest_dist#2 -- vbuxx=vbuz1
ldx.z closest_dist
jmp __b3_from___b12
// getCharToProcess::@11
__b11:
// [190] getCharToProcess::return_dist#5 = getCharToProcess::closest_dist#2 -- vbuxx=vbuz1
ldx.z closest_dist
jmp __b3_from___b11
}
// startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zp($1e) center_x, byte zp($14) center_y)
startProcessing: {
.label __0 = $21
.label __4 = $c
.label __6 = $a
.label __8 = $28
.label __9 = $28
.label __11 = $2a
.label __12 = $2a
.label __23 = $21
.label __24 = $c
.label __25 = $a
.label __26 = $28
.label __27 = $2a
.label center_x = $1e
.label center_y = $14
.label i = 9
.label offset = $21
.label colPtr = $25
.label spriteCol = $27
.label screenPtr = $21
.label spriteData = $c
.label chargenData = $a
.label spriteX = $28
.label spriteY = $2a
.label spritePtr = $2c
// Busy-wait while finding an empty slot in the PROCESSING array
.label freeIdx = 9
.label __33 = $23
.label __34 = $21
// [192] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
__b1_from_startProcessing:
// [192] phi startProcessing::freeIdx#6 = $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1
ldx #$ff
jmp __b1
// startProcessing::@1
__b1:
// [193] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
__b2_from___b1:
// [193] phi startProcessing::i#2 = 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1
lda #0
sta.z i
jmp __b2
// [193] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
__b2_from___b3:
// [193] phi startProcessing::i#2 = startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy
jmp __b2
// startProcessing::@2
__b2:
// [194] startProcessing::$28 = startProcessing::i#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z i
asl
// [195] startProcessing::$29 = startProcessing::$28 + startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [196] startProcessing::$30 = startProcessing::$29 << 1 -- vbuaa=vbuaa_rol_1
asl
// [197] startProcessing::$31 = startProcessing::$30 + startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [198] startProcessing::$21 = startProcessing::$31 << 1 -- vbuaa=vbuaa_rol_1
asl
// [199] if(((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$21]!=STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1
tay
lda #STATUS_FREE
cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
bne __b3
// [200] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
__b4_from___b2:
__b4_from___b9:
// [200] phi startProcessing::freeIdx#2 = startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy
jmp __b4
// startProcessing::@4
__b4:
// [201] if(startProcessing::freeIdx#2==$ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1
lda #$ff
cmp.z freeIdx
beq __b8
jmp __b5
// startProcessing::@5
__b5:
// [202] startProcessing::$23 = (word)startProcessing::center_y#0 -- vwuz1=_word_vbuz2
lda.z center_y
sta.z __23
lda #0
sta.z __23+1
// [203] startProcessing::$33 = startProcessing::$23 << 2 -- vwuz1=vwuz2_rol_2
lda.z __23
asl
sta.z __33
lda.z __23+1
rol
sta.z __33+1
asl.z __33
rol.z __33+1
// [204] startProcessing::$34 = startProcessing::$33 + startProcessing::$23 -- vwuz1=vwuz2_plus_vwuz1
lda.z __34
clc
adc.z __33
sta.z __34
lda.z __34+1
adc.z __33+1
sta.z __34+1
// [205] startProcessing::$0 = startProcessing::$34 << 3 -- vwuz1=vwuz1_rol_3
asl.z __0
rol.z __0+1
asl.z __0
rol.z __0+1
asl.z __0
rol.z __0+1
// [206] startProcessing::offset#0 = startProcessing::$0 + startProcessing::center_x#0 -- vwuz1=vwuz1_plus_vbuz2
lda.z center_x
clc
adc.z offset
sta.z offset
bcc !+
inc.z offset+1
!:
// [207] startProcessing::colPtr#0 = COLS + startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2
clc
lda.z offset
adc #<COLS
sta.z colPtr
lda.z offset+1
adc #>COLS
sta.z colPtr+1
// [208] startProcessing::spriteCol#0 = *startProcessing::colPtr#0 -- vbuz1=_deref_pbuz2
ldy #0
lda (colPtr),y
sta.z spriteCol
// [209] startProcessing::screenPtr#0 = SCREEN + startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz1
clc
lda.z screenPtr
adc #<SCREEN
sta.z screenPtr
lda.z screenPtr+1
adc #>SCREEN
sta.z screenPtr+1
// [210] startProcessing::$24 = (word)startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2
lda.z freeIdx
sta.z __24
lda #0
sta.z __24+1
// [211] startProcessing::$4 = startProcessing::$24 << 6 -- vwuz1=vwuz1_rol_6
lda.z __4+1
lsr
sta.z $ff
lda.z __4
ror
sta.z __4+1
lda #0
ror
sta.z __4
lsr.z $ff
ror.z __4+1
ror.z __4
// [212] startProcessing::spriteData#0 = SPRITE_DATA + startProcessing::$4 -- pbuz1=pbuc1_plus_vwuz1
clc
lda.z spriteData
adc #<SPRITE_DATA
sta.z spriteData
lda.z spriteData+1
adc #>SPRITE_DATA
sta.z spriteData+1
// [213] startProcessing::ch#0 = *startProcessing::screenPtr#0 -- vbuaa=_deref_pbuz1
ldy #0
lda (screenPtr),y
// [214] startProcessing::$25 = (word)startProcessing::ch#0 -- vwuz1=_word_vbuaa
sta.z __25
lda #0
sta.z __25+1
// [215] startProcessing::$6 = startProcessing::$25 << 3 -- vwuz1=vwuz1_rol_3
asl.z __6
rol.z __6+1
asl.z __6
rol.z __6+1
asl.z __6
rol.z __6+1
// [216] startProcessing::chargenData#0 = CHARGEN + startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz1
clc
lda.z chargenData
adc #<CHARGEN
sta.z chargenData
lda.z chargenData+1
adc #>CHARGEN
sta.z chargenData+1
// asm { sei }
sei
// [218] *PROCPORT = PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_CHARROM
sta PROCPORT
// [219] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
__b6_from___b5:
// [219] phi startProcessing::i1#2 = 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1
ldx #0
// [219] phi startProcessing::spriteData#2 = startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy
// [219] phi startProcessing::chargenData#2 = startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy
jmp __b6
// [219] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
__b6_from___b6:
// [219] phi startProcessing::i1#2 = startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy
// [219] phi startProcessing::spriteData#2 = startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy
// [219] phi startProcessing::chargenData#2 = startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy
jmp __b6
// startProcessing::@6
__b6:
// [220] *startProcessing::spriteData#2 = *startProcessing::chargenData#2 -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (chargenData),y
ldy #0
sta (spriteData),y
// [221] startProcessing::spriteData#1 = startProcessing::spriteData#2 + 3 -- pbuz1=pbuz1_plus_vbuc1
lda #3
clc
adc.z spriteData
sta.z spriteData
bcc !+
inc.z spriteData+1
!:
// [222] startProcessing::chargenData#1 = ++ startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1
inc.z chargenData
bne !+
inc.z chargenData+1
!:
// [223] startProcessing::i1#1 = ++ startProcessing::i1#2 -- vbuxx=_inc_vbuxx
inx
// [224] if(startProcessing::i1#1!=8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne __b6_from___b6
jmp __b7
// startProcessing::@7
__b7:
// [225] *PROCPORT = PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
// asm { cli }
cli
// [227] startProcessing::$26 = (word)startProcessing::center_x#0 -- vwuz1=_word_vbuz2
lda.z center_x
sta.z __26
lda #0
sta.z __26+1
// [228] startProcessing::$8 = startProcessing::$26 << 3 -- vwuz1=vwuz1_rol_3
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
// [229] startProcessing::$9 = BORDER_XPOS_LEFT + startProcessing::$8 -- vwuz1=vbuc1_plus_vwuz1
lda #BORDER_XPOS_LEFT
clc
adc.z __9
sta.z __9
bcc !+
inc.z __9+1
!:
// [230] startProcessing::spriteX#0 = startProcessing::$9 << 4 -- vwuz1=vwuz1_rol_4
asl.z spriteX
rol.z spriteX+1
asl.z spriteX
rol.z spriteX+1
asl.z spriteX
rol.z spriteX+1
asl.z spriteX
rol.z spriteX+1
// [231] startProcessing::$27 = (word)startProcessing::center_y#0 -- vwuz1=_word_vbuz2
lda.z center_y
sta.z __27
lda #0
sta.z __27+1
// [232] startProcessing::$11 = startProcessing::$27 << 3 -- vwuz1=vwuz1_rol_3
asl.z __11
rol.z __11+1
asl.z __11
rol.z __11+1
asl.z __11
rol.z __11+1
// [233] startProcessing::$12 = BORDER_YPOS_TOP + startProcessing::$11 -- vwuz1=vbuc1_plus_vwuz1
lda #BORDER_YPOS_TOP
clc
adc.z __12
sta.z __12
bcc !+
inc.z __12+1
!:
// [234] startProcessing::spriteY#0 = startProcessing::$12 << 4 -- vwuz1=vwuz1_rol_4
asl.z spriteY
rol.z spriteY+1
asl.z spriteY
rol.z spriteY+1
asl.z spriteY
rol.z spriteY+1
asl.z spriteY
rol.z spriteY+1
// [235] startProcessing::spritePtr#0 = (byte)SPRITE_DATA/$40 + startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2
lax.z freeIdx
axs #-[SPRITE_DATA/$40]
stx.z spritePtr
// [236] startProcessing::$15 = startProcessing::freeIdx#2 << 3 -- vbuyy=vbuz1_rol_3
lda.z freeIdx
asl
asl
asl
tay
// [237] startProcessing::$36 = startProcessing::freeIdx#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z freeIdx
asl
// [238] startProcessing::$37 = startProcessing::$36 + startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z freeIdx
// [239] startProcessing::$38 = startProcessing::$37 << 1 -- vbuaa=vbuaa_rol_1
asl
// [240] startProcessing::$39 = startProcessing::$38 + startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z freeIdx
// [241] startProcessing::$22 = startProcessing::$39 << 1 -- vbuxx=vbuaa_rol_1
asl
tax
// [242] ((word*)PROCESSING)[startProcessing::$22] = startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1
lda.z spriteX
sta PROCESSING,x
lda.z spriteX+1
sta PROCESSING+1,x
// [243] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y)[startProcessing::$22] = startProcessing::spriteY#0 -- pwuc1_derefidx_vbuxx=vwuz1
lda.z spriteY
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
lda.z spriteY+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
// [244] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX)[startProcessing::$22] = (word)startProcessing::$15 -- pwuc1_derefidx_vbuxx=_word_vbuyy
tya
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
// [245] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY)[startProcessing::$22] = $3c -- pwuc1_derefidx_vbuxx=vwuc2
lda #<$3c
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
lda #>$3c
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
// [246] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID)[startProcessing::$22] = startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1
lda.z freeIdx
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
// [247] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR)[startProcessing::$22] = startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda.z spritePtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
// [248] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL)[startProcessing::$22] = startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda.z spriteCol
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x
// [249] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$22] = STATUS_NEW -- pbuc1_derefidx_vbuxx=vbuc2
lda #STATUS_NEW
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
// [250] ((byte**)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)[startProcessing::$22] = startProcessing::screenPtr#0 -- qbuc1_derefidx_vbuxx=pbuz1
lda.z screenPtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
lda.z screenPtr+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
jmp __breturn
// startProcessing::@return
__breturn:
// [251] return
rts
// startProcessing::@8
__b8:
// [252] startProcessing::freeIdx#7 = startProcessing::freeIdx#2 -- vbuxx=vbuz1
ldx.z freeIdx
// [192] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
__b1_from___b8:
// [192] phi startProcessing::freeIdx#6 = startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy
jmp __b1
// startProcessing::@3
__b3:
// [253] startProcessing::i#1 = ++ startProcessing::i#2 -- vbuz1=_inc_vbuz1
inc.z i
// [254] if(startProcessing::i#1!=NUM_PROCESSING-1+1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp.z i
bne __b2_from___b3
jmp __b9
// startProcessing::@9
__b9:
// [255] startProcessing::freeIdx#8 = startProcessing::freeIdx#6 -- vbuz1=vbuxx
stx.z freeIdx
jmp __b4_from___b9
}
// atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($25) x, signed word zp($28) y)
atan2_16: {
.label __2 = $c
.label __7 = $2a
.label yi = $c
.label xi = $2a
.label angle = $1f
.label xd = $23
.label yd = $21
.label return = $1f
.label x = $25
.label y = $28
// [256] if(atan2_16::y#0>=0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b1
jmp __b2
// atan2_16::@2
__b2:
// [257] atan2_16::$2 = - atan2_16::y#0 -- vwsz1=_neg_vwsz2
sec
lda #0
sbc.z y
sta.z __2
lda #0
sbc.z y+1
sta.z __2+1
// [258] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
__b3_from___b1:
__b3_from___b2:
// [258] phi atan2_16::yi#0 = atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy
jmp __b3
// atan2_16::@3
__b3:
// [259] if(atan2_16::x#0>=0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b4
jmp __b5
// atan2_16::@5
__b5:
// [260] atan2_16::$7 = - atan2_16::x#0 -- vwsz1=_neg_vwsz2
sec
lda #0
sbc.z x
sta.z __7
lda #0
sbc.z x+1
sta.z __7+1
// [261] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
__b6_from___b4:
__b6_from___b5:
// [261] phi atan2_16::xi#0 = atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy
jmp __b6
// atan2_16::@6
__b6:
// [262] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
__b10_from___b6:
// [262] phi atan2_16::angle#12 = 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
lda #<0
sta.z angle
lda #>0
sta.z angle+1
// [262] phi atan2_16::i#2 = 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
ldx #0
// [262] phi atan2_16::xi#3 = atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
// [262] phi atan2_16::yi#3 = atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@10
__b10:
// [263] if(atan2_16::yi#3!=0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
lda.z yi+1
ora.z yi
bne __b11
// [264] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
__b12_from___b10:
__b12_from___b19:
// [264] phi atan2_16::angle#6 = atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy
jmp __b12
// atan2_16::@12
__b12:
// [265] atan2_16::angle#1 = atan2_16::angle#6 >> 1 -- vwuz1=vwuz1_ror_1
lsr.z angle+1
ror.z angle
// [266] if(atan2_16::x#0>=0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b7_from___b12
jmp __b21
// atan2_16::@21
__b21:
// [267] atan2_16::angle#4 = $8000 - atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
sec
lda #<$8000
sbc.z angle
sta.z angle
lda #>$8000
sbc.z angle+1
sta.z angle+1
// [268] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
__b7_from___b12:
__b7_from___b21:
// [268] phi atan2_16::angle#11 = atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy
jmp __b7
// atan2_16::@7
__b7:
// [269] if(atan2_16::y#0>=0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b8_from___b7
jmp __b9
// atan2_16::@9
__b9:
// [270] atan2_16::angle#5 = - atan2_16::angle#11 -- vwuz1=_neg_vwuz1
sec
lda #0
sbc.z angle
sta.z angle
lda #0
sbc.z angle+1
sta.z angle+1
// [271] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
__b8_from___b7:
__b8_from___b9:
// [271] phi atan2_16::return#0 = atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy
jmp __b8
// atan2_16::@8
__b8:
jmp __breturn
// atan2_16::@return
__breturn:
// [272] return
rts
// atan2_16::@11
__b11:
// [273] atan2_16::shift#5 = atan2_16::i#2 -- vbuyy=vbuxx
txa
tay
// [274] atan2_16::xd#10 = atan2_16::xi#3 -- vwsz1=vwsz2
lda.z xi
sta.z xd
lda.z xi+1
sta.z xd+1
// [275] atan2_16::yd#10 = atan2_16::yi#3 -- vwsz1=vwsz2
lda.z yi
sta.z yd
lda.z yi+1
sta.z yd+1
// [276] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
__b13_from___b11:
__b13_from___b14:
// [276] phi atan2_16::yd#3 = atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
// [276] phi atan2_16::xd#3 = atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
// [276] phi atan2_16::shift#2 = atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy
jmp __b13
// atan2_16::@13
__b13:
// [277] if(atan2_16::shift#2>=2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1
cpy #2
bcs __b14
jmp __b15
// atan2_16::@15
__b15:
// [278] if(0==atan2_16::shift#2) goto atan2_16::@17 -- 0_eq_vbuyy_then_la1
cpy #0
beq __b17_from___b15
jmp __b16
// atan2_16::@16
__b16:
// [279] atan2_16::xd#2 = atan2_16::xd#3 >> 1 -- vwsz1=vwsz1_ror_1
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// [280] atan2_16::yd#2 = atan2_16::yd#3 >> 1 -- vwsz1=vwsz1_ror_1
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// [281] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
__b17_from___b15:
__b17_from___b16:
// [281] phi atan2_16::xd#5 = atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
// [281] phi atan2_16::yd#5 = atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy
jmp __b17
// atan2_16::@17
__b17:
// [282] if(atan2_16::yi#3>=0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1
lda.z yi+1
bpl __b18
jmp __b20
// atan2_16::@20
__b20:
// [283] atan2_16::xi#2 = atan2_16::xi#3 - atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2
lda.z xi
sec
sbc.z yd
sta.z xi
lda.z xi+1
sbc.z yd+1
sta.z xi+1
// [284] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
lda.z yi
clc
adc.z xd
sta.z yi
lda.z yi+1
adc.z xd+1
sta.z yi+1
// [285] atan2_16::$23 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [286] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23] -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa
tay
sec
lda.z angle
sbc CORDIC_ATAN2_ANGLES_16,y
sta.z angle
lda.z angle+1
sbc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle+1
// [287] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
__b19_from___b18:
__b19_from___b20:
// [287] phi atan2_16::xi#8 = atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
// [287] phi atan2_16::angle#13 = atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
// [287] phi atan2_16::yi#8 = atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy
jmp __b19
// atan2_16::@19
__b19:
// [288] atan2_16::i#1 = ++ atan2_16::i#2 -- vbuxx=_inc_vbuxx
inx
// [289] if(atan2_16::i#1==CORDIC_ITERATIONS_16-1+1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1
cpx #CORDIC_ITERATIONS_16-1+1
beq __b12_from___b19
// [262] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
__b10_from___b19:
// [262] phi atan2_16::angle#12 = atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
// [262] phi atan2_16::i#2 = atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
// [262] phi atan2_16::xi#3 = atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
// [262] phi atan2_16::yi#3 = atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@18
__b18:
// [290] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
lda.z xi
clc
adc.z yd
sta.z xi
lda.z xi+1
adc.z yd+1
sta.z xi+1
// [291] atan2_16::yi#1 = atan2_16::yi#3 - atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2
lda.z yi
sec
sbc.z xd
sta.z yi
lda.z yi+1
sbc.z xd+1
sta.z yi+1
// [292] atan2_16::$22 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [293] atan2_16::angle#2 = atan2_16::angle#12 + CORDIC_ATAN2_ANGLES_16[atan2_16::$22] -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa
tay
clc
lda.z angle
adc CORDIC_ATAN2_ANGLES_16,y
sta.z angle
lda.z angle+1
adc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle+1
jmp __b19_from___b18
// atan2_16::@14
__b14:
// [294] atan2_16::xd#1 = atan2_16::xd#3 >> 2 -- vwsz1=vwsz1_ror_2
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// [295] atan2_16::yd#1 = atan2_16::yd#3 >> 2 -- vwsz1=vwsz1_ror_2
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// [296] atan2_16::shift#1 = atan2_16::shift#2 - 2 -- vbuyy=vbuyy_minus_2
dey
dey
jmp __b13_from___b14
// atan2_16::@4
__b4:
// [297] atan2_16::xi#13 = atan2_16::x#0 -- vwsz1=vwsz2
lda.z x
sta.z xi
lda.z x+1
sta.z xi+1
jmp __b6_from___b4
// atan2_16::@1
__b1:
// [298] atan2_16::yi#16 = atan2_16::y#0 -- vwsz1=vwsz2
lda.z y
sta.z yi
lda.z y+1
sta.z yi+1
jmp __b3_from___b1
}
// File Data
.segment Data
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
CORDIC_ATAN2_ANGLES_16:
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
// Values added to VX
VXSIN:
.for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
// Values added to VY
VYSIN:
.for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
// Sprites currently being processed in the interrupt
PROCESSING: .fill $e*NUM_PROCESSING, 0
__0: .word 0, 0, 0, 0
.byte 0, 0, 0, STATUS_FREE
.word 0
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __init1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Removing instruction jmp __b9
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b10
Removing instruction jmp __b5
Removing instruction jmp __b11
Removing instruction jmp __b7
Removing instruction jmp __b8
Removing instruction jmp __b1
Removing instruction jmp __b10
Removing instruction jmp __b11
Removing instruction jmp __b3
Removing instruction jmp __b8
Removing instruction jmp __b5
Removing instruction jmp __b14
Removing instruction jmp __b13
Removing instruction jmp __b12
Removing instruction jmp __b9
Removing instruction jmp __b7
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b3
Removing instruction jmp __b6
Removing instruction jmp __b7
Removing instruction jmp __b8
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b6
Removing instruction jmp __b7
Removing instruction jmp __breturn
Removing instruction jmp __b9
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b6
Removing instruction jmp __b10
Removing instruction jmp __b12
Removing instruction jmp __b21
Removing instruction jmp __b7
Removing instruction jmp __b9
Removing instruction jmp __b8
Removing instruction jmp __breturn
Removing instruction jmp __b13
Removing instruction jmp __b15
Removing instruction jmp __b16
Removing instruction jmp __b17
Removing instruction jmp __b20
Removing instruction jmp __b19
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #0
Removing instruction lda #0
Removing instruction lda.z __13
Removing instruction lda.z ypos
Removing instruction ldy #0
Removing instruction lda.z ang_w
Removing instruction lda.z ang_w
Removing instruction ldy.z xb
Removing instruction ldy.z x
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction ldy #0 with TAY
Removing instruction lda #0
Removing instruction lda #0
Replacing instruction lda #0 with TYA
Replacing instruction lda #0 with TYA
Removing instruction ldy #0
Replacing instruction lda #0 with TYA
Removing instruction ldy #0
Removing instruction lda #>0
Replacing instruction ldx #0 with TAX
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __b3_from___b3 with __b3
Replacing label __b2_from___b1 with __b2
Replacing label __b1_from___b2 with __b1
Replacing label __b1_from___b4 with __b1
Replacing label __b3_from___b3 with __b3
Replacing label __b3_from___b12 with __b3
Replacing label __b3_from___b11 with __b3
Replacing label __b6_from___b6 with __b6
Replacing label __b2_from___b3 with __b2
Replacing label __b4_from___b9 with __b4
Replacing label __b7_from___b12 with __b7
Replacing label __b8_from___b7 with __b8
Replacing label __b17_from___b15 with __b17
Replacing label __b12_from___b19 with __b12
Replacing label __b19_from___b18 with __b19
Replacing label __b13_from___b14 with __b13
Replacing label __b6_from___b4 with __b6
Replacing label __b3_from___b1 with __b3
Removing instruction __init1_from___start:
Removing instruction malloc_from___init1:
Removing instruction __b1_from___b3:
Removing instruction __b1_from_irqBottom:
Removing instruction processChars_from___b1:
Removing instruction __breturn:
Removing instruction __breturn:
Removing instruction __b3_from___b3:
Removing instruction __b4_from___b3:
Removing instruction __b10_from___b4:
Removing instruction __b5_from___b10:
Removing instruction __b1_from___b2:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b7:
Removing instruction __b1_from___b4:
Removing instruction __b2_from___b1:
Removing instruction __b3_from___b3:
Removing instruction __b2_from___b1:
Removing instruction __b3_from___b11:
Removing instruction __b3_from___b12:
Removing instruction __b3_from___b5:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b3:
Removing instruction __b4_from___b2:
Removing instruction __b4_from___b9:
Removing instruction __b6_from___b6:
Removing instruction __b3_from___b1:
Removing instruction __b3_from___b2:
Removing instruction __b6_from___b4:
Removing instruction __b6_from___b5:
Removing instruction __b10_from___b6:
Removing instruction __b12_from___b10:
Removing instruction __b12_from___b19:
Removing instruction __b7_from___b12:
Removing instruction __b7_from___b21:
Removing instruction __b8_from___b7:
Removing instruction __b8_from___b9:
Removing instruction __breturn:
Removing instruction __b13_from___b11:
Removing instruction __b13_from___b14:
Removing instruction __b17_from___b15:
Removing instruction __b17_from___b16:
Removing instruction __b19_from___b18:
Removing instruction __b19_from___b20:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __init1:
Removing instruction __b2:
Removing instruction malloc_from___b2:
Removing instruction __b3:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction __b1:
Removing instruction __b2:
Removing instruction __b1:
Removing instruction __breturn:
Removing instruction __b9:
Removing instruction __b1_from___b9:
Removing instruction __b3_from___b1:
Removing instruction __b4:
Removing instruction initSprites_from___b4:
Removing instruction __b10:
Removing instruction __b5:
Removing instruction __b11:
Removing instruction __b7:
Removing instruction startProcessing_from___b6:
Removing instruction __b1_from___b2:
Removing instruction __b1_from_processChars:
Removing instruction __b10:
Removing instruction __b11:
Removing instruction __b8:
Removing instruction __b14:
Removing instruction __b13:
Removing instruction __b12:
Removing instruction __b9:
Removing instruction __breturn:
Removing instruction __b1_from_init_angle_screen:
Removing instruction __b4:
Removing instruction __breturn:
Removing instruction __b5:
Removing instruction __b2_from___b5:
Removing instruction __b1_from_initSprites:
Removing instruction __b3_from___b1:
Removing instruction __b4:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction __b1:
Removing instruction __b2:
Removing instruction __breturn:
Removing instruction __b1_from_getCharToProcess:
Removing instruction __b4:
Removing instruction __b5:
Removing instruction __b6:
Removing instruction __b7:
Removing instruction __b8:
Removing instruction __b1_from___b9:
Removing instruction __b2_from___b10:
Removing instruction __b1_from_startProcessing:
Removing instruction __b5:
Removing instruction __b6_from___b5:
Removing instruction __b7:
Removing instruction __breturn:
Removing instruction __b1_from___b8:
Removing instruction __b9:
Removing instruction __b2:
Removing instruction __b5:
Removing instruction __b21:
Removing instruction __b9:
Removing instruction __b15:
Removing instruction __b16:
Removing instruction __b20:
Removing instruction __b10_from___b19:
Succesful ASM optimization Pass5UnusedLabelElimination
Relabelling long label __b5_from___b6 to __b4
Succesful ASM optimization Pass5RelabelLongLabels
Removing instruction jmp __b3
Removing instruction jmp __b1
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __b2
Removing instruction jmp __b6
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Fixing long branch [499] bne __b1 to beq
Fixing long branch [1073] bne __b2 to beq
Fixing long branch [1200] beq __b12 to bne
Fixing long branch [304] beq __b2 to bne
Fixing long branch [364] bne __b4 to beq
Fixing long branch [397] bcc __b6 to bcs
Fixing long branch [404] bcc __b6 to bcs
Fixing long branch [411] bcc __b6 to bcs
Fixing long branch [418] bcc __b6 to bcs
Fixing long branch [426] bcc __b6 to bcs
Fixing long branch [433] bcc __b6 to bcs
Fixing long branch [441] bcc __b6 to bcs
Fixing long branch [739] beq __b11 to bne
Fixing long branch [871] bne __b3 to beq
Fixing long branch [877] beq __b8 to bne
Fixing long branch [1119] bpl __b1 to bmi
Fixing long branch [1131] bpl __b4 to bmi
FINAL SYMBOL TABLE
const struct ProcessingSprite $0 = { x: 0, y: 0, vx: 0, vy: 0, id: 0, ptr: 0, col: 0, status: STATUS_FREE, screenPtr: (byte*) 0 }
const nomodify byte BORDER_XPOS_LEFT = $18
const nomodify word BORDER_XPOS_RIGHT = $158
const nomodify byte BORDER_YPOS_BOTTOM = $fa
const nomodify byte BORDER_YPOS_TOP = $32
const nomodify byte* CHARGEN = (byte*) 53248
const nomodify struct MOS6526_CIA* CIA1 = (struct MOS6526_CIA*) 56320
const nomodify byte CIA_INTERRUPT_CLEAR = $7f
const nomodify byte* COLS = (byte*) 55296
const word* CORDIC_ATAN2_ANGLES_16[CORDIC_ITERATIONS_16] = kickasm {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
}}
const nomodify byte CORDIC_ITERATIONS_16 = $f
const nomodify void()** HARDWARE_IRQ = (void()**) 65534
const byte* HEAP_TOP = (byte*) 40960
const nomodify byte* IRQ_ENABLE = (byte*) 53274
const nomodify byte IRQ_RASTER = 1
const nomodify byte* IRQ_STATUS = (byte*) 53273
const nomodify byte LIGHT_BLUE = $e
const nomodify byte NOT_FOUND = $ff
const nomodify byte NUM_PROCESSING = 8
const nomodify word OFFSET_SPRITE_PTRS = $3f8
const byte OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
const byte OFFSET_STRUCT_PROCESSINGSPRITE_COL = $a
const byte OFFSET_STRUCT_PROCESSINGSPRITE_ID = 8
const byte OFFSET_STRUCT_PROCESSINGSPRITE_PTR = 9
const byte OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $c
const byte OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = $b
const byte OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4
const byte OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6
const byte OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2
const struct ProcessingSprite* PROCESSING[NUM_PROCESSING] = { fill( NUM_PROCESSING, 0) }
const nomodify byte* PROCPORT = (byte*) 1
const nomodify byte* PROCPORT_DDR = (byte*) 0
const nomodify byte PROCPORT_DDR_MEMORY_MASK = 7
const nomodify byte PROCPORT_RAM_CHARROM = 1
const nomodify byte PROCPORT_RAM_IO = 5
const byte RADIX::BINARY = 2
const byte RADIX::DECIMAL = $a
const byte RADIX::HEXADECIMAL = $10
const byte RADIX::OCTAL = 8
const nomodify byte* RASTER = (byte*) 53266
const nomodify byte RASTER_IRQ_MIDDLE = $ff
const nomodify byte RASTER_IRQ_TOP = $30
const nomodify byte* SCREEN = (byte*) 1024
byte* SCREEN_COPY
void* SCREEN_COPY#0 SCREEN_COPY zp[2]:14 0.03076923076923077
byte* SCREEN_DIST
void* SCREEN_DIST#0 SCREEN_DIST zp[2]:16 0.031746031746031744
const byte SIZEOF_STRUCT_PROCESSINGSPRITE = $e
const nomodify byte* SPRITES_COLOR = (byte*) 53287
const nomodify byte* SPRITES_ENABLE = (byte*) 53269
const nomodify byte* SPRITES_EXPAND_X = (byte*) 53277
const nomodify byte* SPRITES_EXPAND_Y = (byte*) 53271
const nomodify byte* SPRITES_MC = (byte*) 53276
const nomodify byte* SPRITES_XMSB = (byte*) 53264
const nomodify byte* SPRITES_XPOS = (byte*) 53248
const nomodify byte* SPRITES_YPOS = (byte*) 53249
const nomodify byte* SPRITE_DATA = (byte*) 8192
const byte STATUS_FREE = 0
const byte STATUS_NEW = 1
const byte STATUS_PROCESSING = 2
const nomodify byte* VICII_CONTROL = (byte*) 53265
const to_nomodify word* VXSIN[$28] = kickasm {{ .for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
}}
const to_nomodify word* VYSIN[$19] = kickasm {{ .for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
}}
const nomodify word XPOS_LEFTMOST = (word)BORDER_XPOS_LEFT-8<<4
const nomodify word XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
const nomodify word YPOS_BOTTOMMOST = (word)BORDER_YPOS_BOTTOM<<4
const nomodify word YPOS_TOPMOST = (word)BORDER_YPOS_TOP-8<<4
void __start()
word atan2_16(signed word atan2_16::x , signed word atan2_16::y)
signed word~ atan2_16::$2 zp[2]:12 200002.0
byte~ atan2_16::$22 reg byte a 2.00000002E8
byte~ atan2_16::$23 reg byte a 2.00000002E8
signed word~ atan2_16::$7 zp[2]:42 200002.0
word atan2_16::angle
word atan2_16::angle#1 angle zp[2]:31 150001.5
word atan2_16::angle#11 angle zp[2]:31 200002.0
word atan2_16::angle#12 angle zp[2]:31 1.904761923809524E7
word atan2_16::angle#13 angle zp[2]:31 1.3333333466666667E8
word atan2_16::angle#2 angle zp[2]:31 2.00000002E8
word atan2_16::angle#3 angle zp[2]:31 2.00000002E8
word atan2_16::angle#4 angle zp[2]:31 200002.0
word atan2_16::angle#5 angle zp[2]:31 200002.0
word atan2_16::angle#6 angle zp[2]:31 2.00100003E8
byte atan2_16::i
byte atan2_16::i#1 reg byte x 1.500000015E8
byte atan2_16::i#2 reg byte x 2.0833333541666668E7
word atan2_16::return
word atan2_16::return#0 return zp[2]:31 70001.0
word atan2_16::return#2 return zp[2]:31 20002.0
byte atan2_16::shift
byte atan2_16::shift#1 reg byte y 2.000000002E9
byte atan2_16::shift#2 reg byte y 8.0000000125E8
byte atan2_16::shift#5 reg byte y 6.6666667333333336E7
signed word atan2_16::x
signed word atan2_16::x#0 x zp[2]:37 10789.605263157895
signed word atan2_16::xd
signed word atan2_16::xd#1 xd zp[2]:35 6.666666673333334E8
signed word atan2_16::xd#10 xd zp[2]:35 1.00000001E8
signed word atan2_16::xd#2 xd zp[2]:35 1.00000001E8
signed word atan2_16::xd#3 xd zp[2]:35 7.666666683333335E8
signed word atan2_16::xd#5 xd zp[2]:35 1.00000001E8
signed word atan2_16::xi
signed word atan2_16::xi#0 xi zp[2]:42 300003.0
signed word atan2_16::xi#1 xi zp[2]:42 5.00000005E7
signed word atan2_16::xi#13 xi zp[2]:42 200002.0
signed word atan2_16::xi#2 xi zp[2]:42 5.00000005E7
signed word atan2_16::xi#3 xi zp[2]:42 2.6673333666666668E7
signed word atan2_16::xi#8 xi zp[2]:42 1.00000001E8
signed word atan2_16::y
signed word atan2_16::y#0 y zp[2]:40 10250.125
signed word atan2_16::yd
signed word atan2_16::yd#1 yd zp[2]:33 1.000000001E9
signed word atan2_16::yd#10 yd zp[2]:33 2.00000002E8
signed word atan2_16::yd#2 yd zp[2]:33 2.00000002E8
signed word atan2_16::yd#3 yd zp[2]:33 4.6000000099999994E8
signed word atan2_16::yd#5 yd zp[2]:33 2.00000002E8
signed word atan2_16::yi
signed word atan2_16::yi#0 yi zp[2]:12 60000.600000000006
signed word atan2_16::yi#1 yi zp[2]:12 6.6666667333333336E7
signed word atan2_16::yi#16 yi zp[2]:12 200002.0
signed word atan2_16::yi#2 yi zp[2]:12 6.6666667333333336E7
signed word atan2_16::yi#3 yi zp[2]:12 3.53000004117647E7
signed word atan2_16::yi#8 yi zp[2]:12 1.00000001E8
struct ProcessingChar getCharToProcess()
word~ getCharToProcess::$11 zp[2]:42 1501.5
word~ getCharToProcess::$12 zp[2]:31 2002.0
word~ getCharToProcess::$13 zp[2]:42 2002.0
word~ getCharToProcess::$8 zp[2]:42 2002.0
byte*~ getCharToProcess::$9 zp[2]:42 2002.0
byte getCharToProcess::closest_dist
byte getCharToProcess::closest_dist#10 closest_dist zp[1]:39 200002.0
byte getCharToProcess::closest_dist#12 closest_dist zp[1]:39 2000002.0
byte getCharToProcess::closest_dist#2 closest_dist zp[1]:39 1025001.25
byte getCharToProcess::closest_dist#8 closest_dist zp[1]:39 200002.0
byte getCharToProcess::closest_x
byte getCharToProcess::closest_x#7 closest_x zp[1]:44 516667.3333333334
byte getCharToProcess::closest_x#9 closest_x zp[1]:44 200002.0
byte getCharToProcess::closest_y
byte getCharToProcess::closest_y#7 closest_y zp[1]:9 516667.3333333334
byte getCharToProcess::closest_y#9 closest_y zp[1]:9 200002.0
byte getCharToProcess::dist
byte getCharToProcess::dist#0 reg byte x 750000.75
byte* getCharToProcess::dist_line
byte* getCharToProcess::dist_line#0 dist_line zp[2]:10 2002.0
byte* getCharToProcess::dist_line#1 dist_line zp[2]:10 50000.5
byte* getCharToProcess::dist_line#6 dist_line zp[2]:10 85785.99999999999
struct ProcessingChar getCharToProcess::return
byte getCharToProcess::return_dist
byte getCharToProcess::return_dist#0 reg byte x 67.33333333333333
byte getCharToProcess::return_dist#1 reg byte x 227839.2777777778
byte getCharToProcess::return_dist#5 reg byte x 2000002.0
byte getCharToProcess::return_dist#6 reg byte x 2000002.0
byte getCharToProcess::return_x
byte getCharToProcess::return_x#0 reg byte y 67.33333333333333
byte getCharToProcess::return_x#1 return_x zp[1]:44 227839.2777777778
byte getCharToProcess::return_x#7 return_x zp[1]:44 1000001.0
byte getCharToProcess::return_y
byte getCharToProcess::return_y#0 reg byte a 67.33333333333333
byte getCharToProcess::return_y#1 return_y zp[1]:9 215795.05263157893
byte getCharToProcess::return_y#7 return_y zp[1]:9 2000002.0
byte* getCharToProcess::screen_line
byte* getCharToProcess::screen_line#0 screen_line zp[2]:18 1001.0
byte* getCharToProcess::screen_line#1 screen_line zp[2]:18 40000.4
byte* getCharToProcess::screen_line#4 screen_line zp[2]:18 92384.92307692306
byte getCharToProcess::x
byte getCharToProcess::x#1 reg byte y 1000001.0
byte getCharToProcess::x#2 reg byte y 555556.1111111111
byte getCharToProcess::y
byte getCharToProcess::y#1 y zp[1]:20 100001.0
byte getCharToProcess::y#7 y zp[1]:20 80000.20000000001
byte* heap_head
byte* heap_head#0 heap_head zp[2]:2 3.25
byte* heap_head#6 heap_head zp[2]:2 13.0
void initSprites()
byte initSprites::i
byte initSprites::i#1 reg byte x 1501.5
byte initSprites::i#2 reg byte x 1501.5
byte* initSprites::sp
byte* initSprites::sp#1 sp zp[2]:10 2002.0
byte* initSprites::sp#2 sp zp[2]:10 1334.6666666666667
void init_angle_screen(byte* init_angle_screen::screen)
byte~ init_angle_screen::$10 reg byte a 20002.0
byte~ init_angle_screen::$11 reg byte a 20002.0
byte~ init_angle_screen::$3 reg byte a 20002.0
byte~ init_angle_screen::$4 reg byte a 20002.0
byte~ init_angle_screen::$5 reg byte a 20002.0
word~ init_angle_screen::$7 zp[2]:31 20002.0
byte~ init_angle_screen::$9 reg byte a 20002.0
byte init_angle_screen::ang_w
byte init_angle_screen::ang_w#0 ang_w zp[1]:30 8334.166666666666
word init_angle_screen::angle_w
word init_angle_screen::angle_w#0 angle_w zp[2]:31 20002.0
byte* init_angle_screen::screen
byte* init_angle_screen::screen#0 screen zp[2]:18 112.0
byte* init_angle_screen::screen_bottomline
byte* init_angle_screen::screen_bottomline#0 screen_bottomline zp[2]:18 151.5
byte* init_angle_screen::screen_bottomline#1 screen_bottomline zp[2]:18 667.3333333333334
byte* init_angle_screen::screen_bottomline#6 screen_bottomline zp[2]:18 884.2
byte* init_angle_screen::screen_topline
byte* init_angle_screen::screen_topline#1 screen_topline zp[2]:10 500.5
byte* init_angle_screen::screen_topline#6 screen_topline zp[2]:10 921.0416666666666
byte* init_angle_screen::screen_topline#7 screen_topline zp[2]:10 202.0
byte init_angle_screen::x
byte init_angle_screen::x#1 x zp[1]:39 10001.0
byte init_angle_screen::x#2 x zp[1]:39 2857.4285714285716
byte init_angle_screen::xb
byte init_angle_screen::xb#1 xb zp[1]:44 20002.0
byte init_angle_screen::xb#2 xb zp[1]:44 1818.3636363636363
signed word init_angle_screen::xw
word init_angle_screen::xw#0 xw zp[2]:37 3333.6666666666665
byte init_angle_screen::y
byte init_angle_screen::y#1 y zp[1]:20 1501.5
byte init_angle_screen::y#5 y zp[1]:20 461.65384615384613
signed word init_angle_screen::yw
word init_angle_screen::yw#0 yw zp[2]:40 5000.5
__interrupt(hardware_clobber) void irqBottom()
byte irqBottom::i
__interrupt(hardware_clobber) void irqTop()
byte irqTop::i
byte irqTop::i1
void main()
byte~ main::$10 reg byte a 202.0
byte~ main::$11 reg byte a 202.0
byte~ main::$12 reg byte a 202.0
byte~ main::$13 reg byte a 202.0
byte~ main::$14 reg byte a 202.0
byte main::center_dist
byte main::center_dist#0 reg byte a 202.0
byte main::center_x
byte main::center_x#0 reg byte y 50.5
byte main::center_y
byte main::center_y#0 center_y zp[1]:20 50.5
byte* main::dst
byte* main::dst#0 dst zp[2]:4 22.0
byte* main::dst#1 dst zp[2]:4 202.0
byte* main::dst#2 dst zp[2]:4 78.5
byte main::i
byte main::i#1 i zp[1]:6 151.5
byte main::i#2 i zp[1]:6 72.14285714285714
byte* main::src
byte* main::src#1 src zp[2]:18 101.0
byte* main::src#2 src zp[2]:18 134.66666666666666
void* malloc(word malloc::size)
byte* malloc::mem
byte* malloc::mem#0 mem zp[2]:18 4.4
void* malloc::return
word malloc::size
void processChars()
byte~ processChars::$10 reg byte a 202.0
word~ processChars::$12 zp[2]:27 101.0
byte~ processChars::$13 zp[1]:21 17.565217391304348
word~ processChars::$21 zp[2]:25 101.0
byte~ processChars::$25 reg byte a 202.0
byte~ processChars::$28 reg byte a 202.0
byte~ processChars::$29 reg byte a 202.0
byte~ processChars::$30 reg byte a 202.0
byte~ processChars::$73 reg byte a 202.0
byte~ processChars::$79 reg byte a 202.0
byte~ processChars::$87 reg byte a 202.0
byte~ processChars::$88 reg byte a 202.0
byte~ processChars::$89 reg byte a 202.0
byte~ processChars::$9 reg byte a 202.0
byte processChars::bitmask
byte processChars::bitmask#0 bitmask zp[1]:24 21.956521739130434
byte processChars::i
byte processChars::i#1 i zp[1]:7 151.5
byte processChars::i#10 i zp[1]:7 11.222222222222221
byte processChars::numActive
byte processChars::numActive#1 numActive zp[1]:8 202.0
byte processChars::numActive#10 numActive zp[1]:8 7.046511627906977
byte processChars::numActive#3 numActive zp[1]:8 101.0
struct ProcessingSprite* processChars::processing
struct ProcessingSprite* processChars::processing#0 processing zp[2]:22 3.0606060606060606
byte processChars::xchar
byte processChars::xchar#0 reg byte a 202.0
word processChars::xpos
word processChars::xpos#0 xpos zp[2]:25 21.642857142857142
byte processChars::ychar
byte processChars::ychar#0 reg byte a 202.0
byte processChars::ypos
byte processChars::ypos#0 ypos zp[1]:29 25.25
void setupRasterIrq(word setupRasterIrq::raster , void()* setupRasterIrq::irqRoutine)
void()* setupRasterIrq::irqRoutine
const void()* setupRasterIrq::irqRoutine#0 irqRoutine = &irqTop
word setupRasterIrq::raster
void startProcessing(byte startProcessing::center_x , byte startProcessing::center_y , byte startProcessing::center_dist)
word~ startProcessing::$0 zp[2]:33 2002.0
word~ startProcessing::$11 zp[2]:42 2002.0
word~ startProcessing::$12 zp[2]:42 2002.0
byte~ startProcessing::$15 reg byte y 125.125
byte~ startProcessing::$21 reg byte a 2000002.0
byte~ startProcessing::$22 reg byte x 1112.222222222222
word~ startProcessing::$23 zp[2]:33 1501.5
word~ startProcessing::$24 zp[2]:12 2002.0
word~ startProcessing::$25 zp[2]:10 2002.0
word~ startProcessing::$26 zp[2]:40 2002.0
word~ startProcessing::$27 zp[2]:42 2002.0
byte~ startProcessing::$28 reg byte a 2000002.0
byte~ startProcessing::$29 reg byte a 2000002.0
byte~ startProcessing::$30 reg byte a 2000002.0
byte~ startProcessing::$31 reg byte a 2000002.0
word~ startProcessing::$33 zp[2]:35 2002.0
word~ startProcessing::$34 zp[2]:33 2002.0
byte~ startProcessing::$36 reg byte a 2002.0
byte~ startProcessing::$37 reg byte a 2002.0
byte~ startProcessing::$38 reg byte a 2002.0
byte~ startProcessing::$39 reg byte a 2002.0
word~ startProcessing::$4 zp[2]:12 2002.0
word~ startProcessing::$6 zp[2]:10 2002.0
word~ startProcessing::$8 zp[2]:40 2002.0
word~ startProcessing::$9 zp[2]:40 2002.0
struct ProcessingChar startProcessing::center
byte startProcessing::center_dist
byte startProcessing::center_x
byte startProcessing::center_x#0 center_x zp[1]:30 26.238095238095237
byte startProcessing::center_y
byte startProcessing::center_y#0 center_y zp[1]:20 2.2444444444444445
byte startProcessing::ch
byte startProcessing::ch#0 reg byte a 1001.0
byte* startProcessing::chargenData
byte* startProcessing::chargenData#0 chargenData zp[2]:10 667.3333333333334
byte* startProcessing::chargenData#1 chargenData zp[2]:10 66667.33333333333
byte* startProcessing::chargenData#2 chargenData zp[2]:10 100334.66666666666
byte* startProcessing::colPtr
byte* startProcessing::colPtr#0 colPtr zp[2]:37 2002.0
byte startProcessing::freeIdx
byte startProcessing::freeIdx#2 freeIdx zp[1]:9 28391.52173913043
byte startProcessing::freeIdx#6 reg byte x 20000.2
byte startProcessing::freeIdx#7 reg byte x 200002.0
byte startProcessing::freeIdx#8 freeIdx zp[1]:9 200002.0
byte startProcessing::i
byte startProcessing::i#1 i zp[1]:9 1500001.5
byte startProcessing::i#2 i zp[1]:9 857143.7142857142
byte startProcessing::i1
byte startProcessing::i1#1 reg byte x 150001.5
byte startProcessing::i1#2 reg byte x 50000.5
word startProcessing::offset
word startProcessing::offset#0 offset zp[2]:33 1001.0
byte* startProcessing::screenPtr
byte* startProcessing::screenPtr#0 screenPtr zp[2]:33 73.2439024390244
byte startProcessing::spriteCol
byte startProcessing::spriteCol#0 spriteCol zp[1]:39 50.05
byte* startProcessing::spriteData
byte* startProcessing::spriteData#0 spriteData zp[2]:12 286.0
byte* startProcessing::spriteData#1 spriteData zp[2]:12 50000.5
byte* startProcessing::spriteData#2 spriteData zp[2]:12 150502.0
byte startProcessing::spriteIdx
byte startProcessing::spritePtr
byte startProcessing::spritePtr#0 spritePtr zp[1]:44 166.83333333333334
word startProcessing::spriteX
word startProcessing::spriteX#0 spriteX zp[2]:40 166.83333333333334
word startProcessing::spriteY
word startProcessing::spriteY#0 spriteY zp[2]:42 222.44444444444446
zp[2]:2 [ heap_head#6 heap_head#0 ]
zp[2]:4 [ main::dst#2 main::dst#0 main::dst#1 ]
zp[1]:6 [ main::i#2 main::i#1 ]
zp[1]:7 [ processChars::i#10 processChars::i#1 ]
zp[1]:8 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
reg byte x [ initSprites::i#2 initSprites::i#1 ]
reg byte y [ getCharToProcess::x#2 getCharToProcess::x#1 ]
reg byte x [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
zp[1]:9 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
zp[2]:10 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$6 startProcessing::$25 getCharToProcess::dist_line#6 getCharToProcess::dist_line#0 getCharToProcess::dist_line#1 initSprites::sp#2 initSprites::sp#1 init_angle_screen::screen_topline#6 init_angle_screen::screen_topline#7 init_angle_screen::screen_topline#1 ]
reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ]
zp[2]:12 [ atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 atan2_16::yi#16 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$4 startProcessing::$24 ]
reg byte x [ atan2_16::i#2 atan2_16::i#1 ]
reg byte y [ atan2_16::shift#2 atan2_16::shift#5 atan2_16::shift#1 ]
zp[2]:14 [ SCREEN_COPY#0 ]
zp[2]:16 [ SCREEN_DIST#0 ]
zp[2]:18 [ malloc::mem#0 main::src#2 main::src#1 getCharToProcess::screen_line#4 getCharToProcess::screen_line#0 getCharToProcess::screen_line#1 init_angle_screen::screen_bottomline#6 init_angle_screen::screen_bottomline#0 init_angle_screen::screen_bottomline#1 init_angle_screen::screen#0 ]
reg byte a [ main::$11 ]
reg byte a [ main::$12 ]
reg byte a [ main::$13 ]
reg byte a [ main::$14 ]
reg byte a [ main::$10 ]
reg byte y [ getCharToProcess::return_x#0 ]
reg byte a [ getCharToProcess::return_y#0 ]
reg byte x [ getCharToProcess::return_dist#0 ]
reg byte y [ main::center_x#0 ]
zp[1]:20 [ main::center_y#0 startProcessing::center_y#0 getCharToProcess::y#7 getCharToProcess::y#1 init_angle_screen::y#5 init_angle_screen::y#1 ]
reg byte a [ main::center_dist#0 ]
zp[1]:21 [ processChars::$13 ]
reg byte a [ processChars::$87 ]
reg byte a [ processChars::$88 ]
reg byte a [ processChars::$89 ]
reg byte a [ processChars::$28 ]
zp[2]:22 [ processChars::processing#0 ]
zp[1]:24 [ processChars::bitmask#0 ]
zp[2]:25 [ processChars::xpos#0 processChars::$21 ]
reg byte a [ processChars::$9 ]
reg byte a [ processChars::$10 ]
zp[2]:27 [ processChars::$12 ]
zp[1]:29 [ processChars::ypos#0 ]
reg byte a [ processChars::$73 ]
reg byte a [ processChars::xchar#0 ]
reg byte a [ processChars::$29 ]
reg byte a [ processChars::$79 ]
reg byte a [ processChars::ychar#0 ]
reg byte a [ processChars::$30 ]
reg byte a [ processChars::$25 ]
reg byte a [ init_angle_screen::$3 ]
reg byte a [ init_angle_screen::$4 ]
reg byte a [ init_angle_screen::$5 ]
zp[1]:30 [ init_angle_screen::ang_w#0 startProcessing::center_x#0 ]
reg byte a [ init_angle_screen::$9 ]
reg byte a [ init_angle_screen::$10 ]
reg byte a [ init_angle_screen::$11 ]
zp[2]:31 [ getCharToProcess::$12 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$7 ]
reg byte a [ startProcessing::$28 ]
reg byte a [ startProcessing::$29 ]
reg byte a [ startProcessing::$30 ]
reg byte a [ startProcessing::$31 ]
reg byte a [ startProcessing::$21 ]
zp[2]:33 [ startProcessing::$23 startProcessing::$34 startProcessing::$0 startProcessing::offset#0 startProcessing::screenPtr#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp[2]:35 [ startProcessing::$33 atan2_16::xd#5 atan2_16::xd#3 atan2_16::xd#10 atan2_16::xd#1 atan2_16::xd#2 ]
zp[2]:37 [ startProcessing::colPtr#0 init_angle_screen::xw#0 atan2_16::x#0 ]
zp[1]:39 [ startProcessing::spriteCol#0 getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 init_angle_screen::x#2 init_angle_screen::x#1 ]
reg byte a [ startProcessing::ch#0 ]
zp[2]:40 [ startProcessing::$26 startProcessing::$8 startProcessing::$9 startProcessing::spriteX#0 init_angle_screen::yw#0 atan2_16::y#0 ]
zp[2]:42 [ startProcessing::$27 startProcessing::$11 startProcessing::$12 startProcessing::spriteY#0 getCharToProcess::$11 getCharToProcess::$13 getCharToProcess::$8 getCharToProcess::$9 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
zp[1]:44 [ startProcessing::spritePtr#0 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 init_angle_screen::xb#2 init_angle_screen::xb#1 ]
reg byte y [ startProcessing::$15 ]
reg byte a [ startProcessing::$36 ]
reg byte a [ startProcessing::$37 ]
reg byte a [ startProcessing::$38 ]
reg byte a [ startProcessing::$39 ]
reg byte x [ startProcessing::$22 ]
reg byte a [ atan2_16::$23 ]
reg byte a [ atan2_16::$22 ]
FINAL ASSEMBLER
Score: 1110954
// File Comments
// Clears start screen throwing around the letters (by turning them into sprites)
// C standard library stdlib.h
// Implementation of functions found int C stdlib.h / stdlib.c
// C standard library string.h
// Functions to manipulate C strings and arrays.
// Upstart
// Commodore 64 PRG executable file
.file [name="clearscreen.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
// The number of iterations performed during 16-bit CORDIC atan2 calculation
.const CORDIC_ITERATIONS_16 = $f
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// Positions of the border (in sprite positions)
.const BORDER_XPOS_LEFT = $18
.const BORDER_XPOS_RIGHT = $158
.const BORDER_YPOS_TOP = $32
.const BORDER_YPOS_BOTTOM = $fa
// The offset of the sprite pointers from the screen start address
.const OFFSET_SPRITE_PTRS = $3f8
// Bits for the VICII IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
// RAM in 0xA000, 0xE000 I/O in 0xD000
.const PROCPORT_RAM_IO = 5
// RAM in 0xA000, 0xE000 CHAR ROM in 0xD000
.const PROCPORT_RAM_CHARROM = 1
.const LIGHT_BLUE = $e
// Max number of chars processed at once
.const NUM_PROCESSING = 8
// Distance value meaning not found
.const NOT_FOUND = $ff
.const STATUS_FREE = 0
.const STATUS_NEW = 1
.const STATUS_PROCESSING = 2
.const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
.const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
.const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
.const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
.const RASTER_IRQ_TOP = $30
.const RASTER_IRQ_MIDDLE = $ff
.const SIZEOF_STRUCT_PROCESSINGSPRITE = $e
.const OFFSET_STRUCT_PROCESSINGSPRITE_Y = 2
.const OFFSET_STRUCT_PROCESSINGSPRITE_VX = 4
.const OFFSET_STRUCT_PROCESSINGSPRITE_VY = 6
.const OFFSET_STRUCT_PROCESSINGSPRITE_ID = 8
.const OFFSET_STRUCT_PROCESSINGSPRITE_PTR = 9
.const OFFSET_STRUCT_PROCESSINGSPRITE_COL = $a
.const OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = $b
.const OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $c
.const OFFSET_STRUCT_MOS6526_CIA_INTERRUPT = $d
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label SPRITES_XMSB = $d010
.label SPRITES_COLOR = $d027
.label SPRITES_ENABLE = $d015
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label RASTER = $d012
.label VICII_CONTROL = $d011
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Processor port data direction register
.label PROCPORT_DDR = 0
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// The address of the CHARGEN character set
.label CHARGEN = $d000
// Color Ram
.label COLS = $d800
// The CIA#1: keyboard matrix, joystick #1/#2
.label CIA1 = $dc00
// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
// Address of the screen
.label SCREEN = $400
// Sprite data for the animating sprites
.label SPRITE_DATA = $2000
// Top of the heap used by malloc()
.label HEAP_TOP = $a000
// Head of the heap. Moved backward each malloc()
.label heap_head = 2
// Copy of the screen used for finding chars to process
.label SCREEN_COPY = $e
// Screen containing bytes representing the distance to the center
.label SCREEN_DIST = $10
.segment Code
// __start
__start: {
// [1] phi from __start to __start::__init1 [phi:__start->__start::__init1]
// __start::__init1
// malloc(1000)
// [2] call malloc
// [21] phi from __start::__init1 to malloc [phi:__start::__init1->malloc]
// [21] phi heap_head#6 = HEAP_TOP [phi:__start::__init1->malloc#0] -- pbuz1=pbuc1
lda #<HEAP_TOP
sta.z heap_head
lda #>HEAP_TOP
sta.z heap_head+1
jsr malloc
// __start::@2
// malloc(1000)
// [3] SCREEN_COPY#0 = (void*)malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SCREEN_COPY
lda.z malloc.mem+1
sta.z SCREEN_COPY+1
// [4] call malloc
// [21] phi from __start::@2 to malloc [phi:__start::@2->malloc]
// [21] phi heap_head#6 = heap_head#0 [phi:__start::@2->malloc#0] -- register_copy
jsr malloc
// __start::@3
// malloc(1000)
// [5] SCREEN_DIST#0 = (void*)malloc::mem#0 -- pvoz1=pvoz2
lda.z malloc.mem
sta.z SCREEN_DIST
lda.z malloc.mem+1
sta.z SCREEN_DIST+1
// [6] phi from __start::@3 to __start::@1 [phi:__start::@3->__start::@1]
// __start::@1
// [7] call main
jsr main
// __start::@return
// [8] return
rts
}
// irqBottom
// Raster Interrupt at the bottom of the screen
irqBottom: {
// interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry
sta rega+1
stx regx+1
sty regy+1
// [10] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
// irqBottom::@1
// processChars()
// [11] call processChars
// [60] phi from irqBottom::@1 to processChars [phi:irqBottom::@1->processChars]
jsr processChars
// irqBottom::@2
// *RASTER = RASTER_IRQ_TOP
// [12] *RASTER = RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2
// Trigger IRQ at the top of the screen
lda #RASTER_IRQ_TOP
sta RASTER
// *HARDWARE_IRQ = &irqTop
// [13] *HARDWARE_IRQ = &irqTop -- _deref_qprc1=pprc2
lda #<irqTop
sta HARDWARE_IRQ
lda #>irqTop
sta HARDWARE_IRQ+1
// *IRQ_STATUS = IRQ_RASTER
// [14] *IRQ_STATUS = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
// irqBottom::@return
// }
// [15] return
// interrupt(isr_hardware_clobber_exit) -- isr_hardware_all_exit
rega:
lda #0
regx:
ldx #0
regy:
ldy #0
rti
}
// irqTop
// Raster Interrupt at the top of the screen
irqTop: {
// interrupt(isr_hardware_clobber_entry) -- isr_hardware_all_entry
sta rega+1
// irqTop::@1
// *RASTER = RASTER_IRQ_MIDDLE
// [17] *RASTER = RASTER_IRQ_MIDDLE -- _deref_pbuc1=vbuc2
// Trigger IRQ at the middle of the screen
lda #RASTER_IRQ_MIDDLE
sta RASTER
// *HARDWARE_IRQ = &irqBottom
// [18] *HARDWARE_IRQ = &irqBottom -- _deref_qprc1=pprc2
lda #<irqBottom
sta HARDWARE_IRQ
lda #>irqBottom
sta HARDWARE_IRQ+1
// *IRQ_STATUS = IRQ_RASTER
// [19] *IRQ_STATUS = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
// irqTop::@return
// }
// [20] return
// interrupt(isr_hardware_clobber_exit) -- isr_hardware_all_exit
rega:
lda #0
rti
}
// malloc
// Allocates a block of size chars of memory, returning a pointer to the beginning of the block.
// The content of the newly allocated block of memory is not initialized, remaining with indeterminate values.
malloc: {
.label mem = $12
// mem = heap_head-size
// [22] malloc::mem#0 = heap_head#6 - $3e8 -- pbuz1=pbuz2_minus_vwuc1
lda.z heap_head
sec
sbc #<$3e8
sta.z mem
lda.z heap_head+1
sbc #>$3e8
sta.z mem+1
// heap_head = mem
// [23] heap_head#0 = malloc::mem#0 -- pbuz1=pbuz2
lda.z mem
sta.z heap_head
lda.z mem+1
sta.z heap_head+1
// malloc::@return
// }
// [24] return
rts
}
// main
main: {
.label dst = 4
.label src = $12
.label i = 6
.label center_y = $14
// init_angle_screen(SCREEN_DIST)
// [25] init_angle_screen::screen#0 = (byte*)SCREEN_DIST#0 -- pbuz1=pbuz2
lda.z SCREEN_DIST
sta.z init_angle_screen.screen
lda.z SCREEN_DIST+1
sta.z init_angle_screen.screen+1
// [26] call init_angle_screen
// Initialize the screen containing distance to the center
jsr init_angle_screen
// main::@9
// dst=SCREEN_COPY
// [27] main::dst#0 = (byte*)SCREEN_COPY#0 -- pbuz1=pbuz2
lda.z SCREEN_COPY
sta.z dst
lda.z SCREEN_COPY+1
sta.z dst+1
// [28] phi from main::@9 to main::@1 [phi:main::@9->main::@1]
// [28] phi main::dst#2 = main::dst#0 [phi:main::@9->main::@1#0] -- register_copy
// [28] phi main::src#2 = SCREEN [phi:main::@9->main::@1#1] -- pbuz1=pbuc1
lda #<SCREEN
sta.z src
lda #>SCREEN
sta.z src+1
// Copy screen to screen copy
// main::@1
__b1:
// for( char *src=SCREEN, *dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++)
// [29] if(main::src#2!=SCREEN+$3e8) goto main::@2 -- pbuz1_neq_pbuc1_then_la1
lda.z src+1
cmp #>SCREEN+$3e8
bne __b2
lda.z src
cmp #<SCREEN+$3e8
bne __b2
// [30] phi from main::@1 to main::@3 [phi:main::@1->main::@3]
// [30] phi main::i#2 = 0 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1
lda #0
sta.z i
// Init processing array
// [30] phi from main::@3 to main::@3 [phi:main::@3->main::@3]
// [30] phi main::i#2 = main::i#1 [phi:main::@3->main::@3#0] -- register_copy
// main::@3
__b3:
// PROCESSING[i] = { 0, 0, 0, 0, 0, 0, 0, STATUS_FREE, 0}
// [31] main::$11 = main::i#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z i
asl
// [32] main::$12 = main::$11 + main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [33] main::$13 = main::$12 << 1 -- vbuaa=vbuaa_rol_1
asl
// [34] main::$14 = main::$13 + main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [35] main::$10 = main::$14 << 1 -- vbuaa=vbuaa_rol_1
asl
// [36] PROCESSING[main::$10] = memcpy(*(&$0), struct ProcessingSprite, SIZEOF_STRUCT_PROCESSINGSPRITE) -- pssc1_derefidx_vbuaa=_deref_pssc2_memcpy_vbuc3
tax
ldy #0
!:
lda __0,y
sta PROCESSING,x
inx
iny
cpy #SIZEOF_STRUCT_PROCESSINGSPRITE
bne !-
// for( char i: 0..NUM_PROCESSING-1 )
// [37] main::i#1 = ++ main::i#2 -- vbuz1=_inc_vbuz1
inc.z i
// [38] if(main::i#1!=NUM_PROCESSING-1+1) goto main::@3 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp.z i
bne __b3
// [39] phi from main::@3 to main::@4 [phi:main::@3->main::@4]
// main::@4
// initSprites()
// [40] call initSprites
// Init sprites
// [140] phi from main::@4 to initSprites [phi:main::@4->initSprites]
jsr initSprites
// [41] phi from main::@4 to main::@10 [phi:main::@4->main::@10]
// main::@10
// setupRasterIrq(RASTER_IRQ_TOP, &irqTop)
// [42] call setupRasterIrq
// Set-up raster interrupts
jsr setupRasterIrq
// [43] phi from main::@10 main::@6 to main::@5 [phi:main::@10/main::@6->main::@5]
__b4:
// Main loop
// main::@5
// getCharToProcess()
// [44] call getCharToProcess
jsr getCharToProcess
// [45] getCharToProcess::return_x#0 = getCharToProcess::return_x#1 -- vbuyy=vbuz1
ldy.z getCharToProcess.return_x
// [46] getCharToProcess::return_y#0 = getCharToProcess::return_y#1 -- vbuaa=vbuz1
lda.z getCharToProcess.return_y
// [47] getCharToProcess::return_dist#0 = getCharToProcess::return_dist#1
// main::@11
// center = getCharToProcess()
// [48] main::center_x#0 = getCharToProcess::return_x#0
// [49] main::center_y#0 = getCharToProcess::return_y#0 -- vbuz1=vbuaa
sta.z center_y
// [50] main::center_dist#0 = getCharToProcess::return_dist#0 -- vbuaa=vbuxx
txa
// if(center.dist==NOT_FOUND)
// [51] if(main::center_dist#0!=NOT_FOUND) goto main::@6 -- vbuaa_neq_vbuc1_then_la1
cmp #NOT_FOUND
bne __b6
// main::@7
// (*(SCREEN+999)) = '.'
// [52] *(SCREEN+$3e7) = '.' -- _deref_pbuc1=vbuc2
lda #'.'
sta SCREEN+$3e7
// main::@8
__b8:
// (*(COLS+999))++;
// [53] *(COLS+$3e7) = ++ *(COLS+$3e7) -- _deref_pbuc1=_inc__deref_pbuc1
inc COLS+$3e7
jmp __b8
// main::@6
__b6:
// startProcessing(center)
// [54] startProcessing::center_x#0 = main::center_x#0 -- vbuz1=vbuyy
sty.z startProcessing.center_x
// [55] startProcessing::center_y#0 = main::center_y#0
// [56] call startProcessing
// [191] phi from main::@6 to startProcessing [phi:main::@6->startProcessing]
jsr startProcessing
jmp __b4
// main::@2
__b2:
// *dst = *src
// [57] *main::dst#2 = *main::src#2 -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (src),y
sta (dst),y
// for( char *src=SCREEN, *dst=SCREEN_COPY; src!=SCREEN+1000; src++, dst++)
// [58] main::src#1 = ++ main::src#2 -- pbuz1=_inc_pbuz1
inc.z src
bne !+
inc.z src+1
!:
// [59] main::dst#1 = ++ main::dst#2 -- pbuz1=_inc_pbuz1
inc.z dst
bne !+
inc.z dst+1
!:
// [28] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
// [28] phi main::dst#2 = main::dst#1 [phi:main::@2->main::@1#0] -- register_copy
// [28] phi main::src#2 = main::src#1 [phi:main::@2->main::@1#1] -- register_copy
jmp __b1
}
// processChars
// Process any chars in the PROCESSING array
processChars: {
.label __12 = $1b
.label __13 = $15
.label __21 = $19
.label processing = $16
.label bitmask = $18
.label i = 7
.label xpos = $19
.label ypos = $1d
.label numActive = 8
// [61] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
// [61] phi processChars::numActive#10 = 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1
lda #0
sta.z numActive
// [61] phi processChars::i#10 = 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1
sta.z i
// [61] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
// [61] phi processChars::numActive#10 = processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy
// [61] phi processChars::i#10 = processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy
// processChars::@1
__b1:
// PROCESSING+i
// [62] processChars::$13 = processChars::i#10 << 1 -- vbuz1=vbuz2_rol_1
lda.z i
asl
sta.z __13
// [63] processChars::$87 = processChars::$13 + processChars::i#10 -- vbuaa=vbuz1_plus_vbuz2
clc
adc.z i
// [64] processChars::$88 = processChars::$87 << 1 -- vbuaa=vbuaa_rol_1
asl
// [65] processChars::$89 = processChars::$88 + processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [66] processChars::$28 = processChars::$89 << 1 -- vbuaa=vbuaa_rol_1
asl
// processing = PROCESSING+i
// [67] processChars::processing#0 = PROCESSING + processChars::$28 -- pssz1=pssc1_plus_vbuaa
clc
adc #<PROCESSING
sta.z processing
lda #>PROCESSING
adc #0
sta.z processing+1
// bitmask = 1<<processing->id
// [68] processChars::bitmask#0 = 1 << ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID] -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
lda (processing),y
tay
lda #1
cpy #0
beq !e+
!:
asl
dey
bne !-
!e:
sta.z bitmask
// if(processing->status!=STATUS_FREE)
// [69] if(((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]==STATUS_FREE) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1
lda #STATUS_FREE
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
cmp (processing),y
bne !__b2+
jmp __b2
!__b2:
// processChars::@10
// if(processing->status==STATUS_NEW)
// [70] if(((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS]!=STATUS_NEW) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1
lda (processing),y
cmp #STATUS_NEW
bne __b3
// processChars::@11
// *(processing->screenPtr) = ' '
// [71] *(((byte**)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR]) = ' ' -- _deref_(qbuz1_derefidx_vbuc1)=vbuc2
// Clear the char on the screen
ldx #' '
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
lda (processing),y
sta !+ +1
iny
lda (processing),y
sta !+ +2
!:
stx $ffff
// *SPRITES_ENABLE |= bitmask
// [72] *SPRITES_ENABLE = *SPRITES_ENABLE | processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
// Enable the sprite
lda SPRITES_ENABLE
ora.z bitmask
sta SPRITES_ENABLE
// SPRITES_COLOR[processing->id] = processing->col
// [73] SPRITES_COLOR[((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]] = ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_COL] -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3
// Set the sprite color
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_COL
lda (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
pha
lda (processing),y
tay
pla
sta SPRITES_COLOR,y
// *(SCREEN+OFFSET_SPRITE_PTRS+processing->id) = processing->ptr
// [74] (SCREEN+OFFSET_SPRITE_PTRS)[((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_ID]] = ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_PTR] -- pbuc1_derefidx_(pbuz1_derefidx_vbuc2)=pbuz1_derefidx_vbuc3
// Set sprite pointer
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_PTR
lda (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
pha
lda (processing),y
tay
pla
sta SCREEN+OFFSET_SPRITE_PTRS,y
// processing->status = STATUS_PROCESSING
// [75] ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS] = STATUS_PROCESSING -- pbuz1_derefidx_vbuc1=vbuc2
// Set status
lda #STATUS_PROCESSING
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
// processChars::@3
__b3:
// xpos = processing->x >> 4
// [76] processChars::xpos#0 = *((word*)processChars::processing#0) >> 4 -- vwuz1=_deref_pwuz2_ror_4
ldy #0
lda (processing),y
sta.z xpos
iny
lda (processing),y
sta.z xpos+1
lsr.z xpos+1
ror.z xpos
lsr.z xpos+1
ror.z xpos
lsr.z xpos+1
ror.z xpos
lsr.z xpos+1
ror.z xpos
// >xpos
// [77] processChars::$9 = > processChars::xpos#0 -- vbuaa=_hi_vwuz1
lda.z xpos+1
// if(>xpos)
// [78] if(0!=processChars::$9) goto processChars::@4 -- 0_neq_vbuaa_then_la1
// Set sprite position
cmp #0
beq !__b4+
jmp __b4
!__b4:
// processChars::@8
// 0xff ^ bitmask
// [79] processChars::$10 = $ff ^ processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1
lda #$ff
eor.z bitmask
// *SPRITES_XMSB &= 0xff ^ bitmask
// [80] *SPRITES_XMSB = *SPRITES_XMSB & processChars::$10 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
and SPRITES_XMSB
sta SPRITES_XMSB
// processChars::@5
__b5:
// SPRITES_XPOS[i*2] = (char)xpos
// [81] SPRITES_XPOS[processChars::$13] = (byte)processChars::xpos#0 -- pbuc1_derefidx_vbuz1=_byte_vwuz2
ldy.z __13
lda.z xpos
sta SPRITES_XPOS,y
// processing->y>>4
// [82] processChars::$12 = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] >> 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
lda (processing),y
sta.z __12
iny
lda (processing),y
sta.z __12+1
lsr.z __12+1
ror.z __12
lsr.z __12+1
ror.z __12
lsr.z __12+1
ror.z __12
lsr.z __12+1
ror.z __12
// ypos = (char)(processing->y>>4)
// [83] processChars::ypos#0 = (byte)processChars::$12 -- vbuz1=_byte_vwuz2
lda.z __12
sta.z ypos
// SPRITES_YPOS[i*2] = ypos
// [84] SPRITES_YPOS[processChars::$13] = processChars::ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2
ldy.z __13
sta SPRITES_YPOS,y
// if(processing->x < XPOS_LEFTMOST || processing->x > XPOS_RIGHTMOST || processing->y < YPOS_TOPMOST|| processing->y > YPOS_BOTTOMMOST )
// [85] if(*((word*)processChars::processing#0)<XPOS_LEFTMOST) goto processChars::@6 -- _deref_pwuz1_lt_vwuc1_then_la1
// Move sprite
ldy #1
lda (processing),y
cmp #>XPOS_LEFTMOST
bcs !__b6+
jmp __b6
!__b6:
bne !+
dey
lda (processing),y
cmp #<XPOS_LEFTMOST
bcs !__b6+
jmp __b6
!__b6:
!:
// processChars::@14
// [86] if(*((word*)processChars::processing#0)>XPOS_RIGHTMOST) goto processChars::@6 -- _deref_pwuz1_gt_vwuc1_then_la1
ldy #1
lda #>XPOS_RIGHTMOST
cmp (processing),y
bcs !__b6+
jmp __b6
!__b6:
bne !+
dey
lda #<XPOS_RIGHTMOST
cmp (processing),y
bcs !__b6+
jmp __b6
!__b6:
!:
// processChars::@13
// [87] if(((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y]<YPOS_TOPMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_lt_vwuc2_then_la1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
iny
lda (processing),y
cmp #>YPOS_TOPMOST
bcs !__b6+
jmp __b6
!__b6:
bne !+
dey
lda (processing),y
cmp #<YPOS_TOPMOST
bcs !__b6+
jmp __b6
!__b6:
!:
// processChars::@12
// [88] if(((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y]>YPOS_BOTTOMMOST) goto processChars::@6 -- pwuz1_derefidx_vbuc1_gt_vwuc2_then_la1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
iny
lda #>YPOS_BOTTOMMOST
cmp (processing),y
bcs !__b6+
jmp __b6
!__b6:
bne !+
dey
lda #<YPOS_BOTTOMMOST
cmp (processing),y
bcc __b6
!:
// processChars::@9
// xpos/8
// [89] processChars::$21 = processChars::xpos#0 >> 3 -- vwuz1=vwuz1_ror_3
lsr.z __21+1
ror.z __21
lsr.z __21+1
ror.z __21
lsr.z __21+1
ror.z __21
// (char)(xpos/8) - BORDER_XPOS_LEFT/8
// [90] processChars::$73 = (byte)processChars::$21 -- vbuaa=_byte_vwuz1
lda.z __21
// xchar = (char)(xpos/8) - BORDER_XPOS_LEFT/8
// [91] processChars::xchar#0 = processChars::$73 - BORDER_XPOS_LEFT/8 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #BORDER_XPOS_LEFT/8
// processing->vx += VXSIN[xchar]
// [92] processChars::$29 = processChars::xchar#0 << 1 -- vbuaa=vbuaa_rol_1
asl
// [93] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] + VXSIN[processChars::$29] -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
tax
clc
lda (processing),y
adc VXSIN,x
sta (processing),y
iny
lda (processing),y
adc VXSIN+1,x
sta (processing),y
// processing->x += processing->vx
// [94] *((word*)processChars::processing#0) = *((word*)processChars::processing#0) + ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VX] -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
sty.z $ff
clc
lda (processing),y
ldy #0
adc (processing),y
sta (processing),y
ldy.z $ff
iny
lda (processing),y
ldy #1
adc (processing),y
sta (processing),y
// (char)(ypos/8) - BORDER_YPOS_TOP/8
// [95] processChars::$79 = processChars::ypos#0 >> 3 -- vbuaa=vbuz1_ror_3
lda.z ypos
lsr
lsr
lsr
// ychar = (char)(ypos/8) - BORDER_YPOS_TOP/8
// [96] processChars::ychar#0 = processChars::$79 - BORDER_YPOS_TOP/8 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #BORDER_YPOS_TOP/8
// processing->vy += VYSIN[ychar]
// [97] processChars::$30 = processChars::ychar#0 << 1 -- vbuaa=vbuaa_rol_1
asl
// [98] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] + VYSIN[processChars::$30] -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuaa
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
tax
clc
lda (processing),y
adc VYSIN,x
sta (processing),y
iny
lda (processing),y
adc VYSIN+1,x
sta (processing),y
// processing->y += processing->vy
// [99] ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] = ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_Y] + ((word*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_VY] -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuz1_derefidx_vbuc2
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
clc
lda (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
adc (processing),y
sta (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY+1
lda (processing),y
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y+1
adc (processing),y
sta (processing),y
// processChars::@7
__b7:
// numActive++;
// [100] processChars::numActive#1 = ++ processChars::numActive#10 -- vbuz1=_inc_vbuz1
inc.z numActive
// [101] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
// [101] phi processChars::numActive#3 = processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy
// processChars::@2
__b2:
// for( char i: 0..NUM_PROCESSING-1 )
// [102] processChars::i#1 = ++ processChars::i#10 -- vbuz1=_inc_vbuz1
inc.z i
// [103] if(processChars::i#1!=NUM_PROCESSING-1+1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp.z i
beq !__b1+
jmp __b1
!__b1:
// processChars::@return
// }
// [104] return
rts
// processChars::@6
__b6:
// processing->status = STATUS_FREE
// [105] ((byte*)processChars::processing#0)[OFFSET_STRUCT_PROCESSINGSPRITE_STATUS] = STATUS_FREE -- pbuz1_derefidx_vbuc1=vbuc2
// Set status to FREE
lda #STATUS_FREE
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
// 0xff ^ bitmask
// [106] processChars::$25 = $ff ^ processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1
lda #$ff
eor.z bitmask
// *SPRITES_ENABLE &= 0xff ^ bitmask
// [107] *SPRITES_ENABLE = *SPRITES_ENABLE & processChars::$25 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
// Disable the sprite
and SPRITES_ENABLE
sta SPRITES_ENABLE
jmp __b7
// processChars::@4
__b4:
// *SPRITES_XMSB |= bitmask
// [108] *SPRITES_XMSB = *SPRITES_XMSB | processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
lda SPRITES_XMSB
ora.z bitmask
sta SPRITES_XMSB
jmp __b5
}
// init_angle_screen
// Populates 1000 chars (a screen) with values representing the angle to the center.
// Utilizes symmetry around the center
// init_angle_screen(byte* zp($12) screen)
init_angle_screen: {
.label __7 = $1f
.label screen = $12
.label screen_bottomline = $12
.label xw = $25
.label yw = $28
.label angle_w = $1f
.label ang_w = $1e
.label x = $27
.label xb = $2c
.label screen_topline = $a
.label y = $14
// screen_topline = screen+40*12
// [109] init_angle_screen::screen_bottomline#0 = init_angle_screen::screen#0 + (word)$28*$c -- pbuz1=pbuz1_plus_vwuc1
clc
lda.z screen_bottomline
adc #<$28*$c
sta.z screen_bottomline
lda.z screen_bottomline+1
adc #>$28*$c
sta.z screen_bottomline+1
// [110] init_angle_screen::screen_topline#7 = init_angle_screen::screen_bottomline#0 -- pbuz1=pbuz2
lda.z screen_bottomline
sta.z screen_topline
lda.z screen_bottomline+1
sta.z screen_topline+1
// [111] phi from init_angle_screen to init_angle_screen::@1 [phi:init_angle_screen->init_angle_screen::@1]
// [111] phi init_angle_screen::screen_bottomline#6 = init_angle_screen::screen_bottomline#0 [phi:init_angle_screen->init_angle_screen::@1#0] -- register_copy
// [111] phi init_angle_screen::screen_topline#6 = init_angle_screen::screen_topline#7 [phi:init_angle_screen->init_angle_screen::@1#1] -- register_copy
// [111] phi init_angle_screen::y#5 = 0 [phi:init_angle_screen->init_angle_screen::@1#2] -- vbuz1=vbuc1
lda #0
sta.z y
// [111] phi from init_angle_screen::@4 to init_angle_screen::@1 [phi:init_angle_screen::@4->init_angle_screen::@1]
// [111] phi init_angle_screen::screen_bottomline#6 = init_angle_screen::screen_bottomline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#0] -- register_copy
// [111] phi init_angle_screen::screen_topline#6 = init_angle_screen::screen_topline#1 [phi:init_angle_screen::@4->init_angle_screen::@1#1] -- register_copy
// [111] phi init_angle_screen::y#5 = init_angle_screen::y#1 [phi:init_angle_screen::@4->init_angle_screen::@1#2] -- register_copy
// init_angle_screen::@1
__b1:
// [112] phi from init_angle_screen::@1 to init_angle_screen::@2 [phi:init_angle_screen::@1->init_angle_screen::@2]
// [112] phi init_angle_screen::xb#2 = $27 [phi:init_angle_screen::@1->init_angle_screen::@2#0] -- vbuz1=vbuc1
lda #$27
sta.z xb
// [112] phi init_angle_screen::x#2 = 0 [phi:init_angle_screen::@1->init_angle_screen::@2#1] -- vbuz1=vbuc1
lda #0
sta.z x
// init_angle_screen::@2
__b2:
// for( char x=0,xb=39; x<=19; x++, xb--)
// [113] if(init_angle_screen::x#2<$13+1) goto init_angle_screen::@3 -- vbuz1_lt_vbuc1_then_la1
lda.z x
cmp #$13+1
bcc __b3
// init_angle_screen::@4
// screen_topline -= 40
// [114] init_angle_screen::screen_topline#1 = init_angle_screen::screen_topline#6 - $28 -- pbuz1=pbuz1_minus_vbuc1
sec
lda.z screen_topline
sbc #$28
sta.z screen_topline
lda.z screen_topline+1
sbc #0
sta.z screen_topline+1
// screen_bottomline += 40
// [115] init_angle_screen::screen_bottomline#1 = init_angle_screen::screen_bottomline#6 + $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_bottomline
sta.z screen_bottomline
bcc !+
inc.z screen_bottomline+1
!:
// for(char y: 0..12)
// [116] init_angle_screen::y#1 = ++ init_angle_screen::y#5 -- vbuz1=_inc_vbuz1
inc.z y
// [117] if(init_angle_screen::y#1!=$d) goto init_angle_screen::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$d
cmp.z y
bne __b1
// init_angle_screen::@return
// }
// [118] return
rts
// init_angle_screen::@3
__b3:
// x*2
// [119] init_angle_screen::$3 = init_angle_screen::x#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z x
asl
// 39-x*2
// [120] init_angle_screen::$4 = $27 - init_angle_screen::$3 -- vbuaa=vbuc1_minus_vbuaa
eor #$ff
sec
adc #$27
// xw = (signed int)(unsigned int){ 39-x*2, 0 }
// [121] init_angle_screen::xw#0 = init_angle_screen::$4 w= 0 -- vwuz1=vbuaa_word_vbuc1
ldy #0
sta.z xw+1
sty.z xw
// y*2
// [122] init_angle_screen::$5 = init_angle_screen::y#5 << 1 -- vbuaa=vbuz1_rol_1
lda.z y
asl
// yw = (signed int)(unsigned int){ y*2, 0 }
// [123] init_angle_screen::yw#0 = init_angle_screen::$5 w= 0 -- vwuz1=vbuaa_word_vbuc1
sta.z yw+1
sty.z yw
// atan2_16(xw, yw)
// [124] atan2_16::x#0 = (signed word)init_angle_screen::xw#0
// [125] atan2_16::y#0 = (signed word)init_angle_screen::yw#0
// [126] call atan2_16
jsr atan2_16
// [127] atan2_16::return#2 = atan2_16::return#0
// init_angle_screen::@5
// angle_w = atan2_16(xw, yw)
// [128] init_angle_screen::angle_w#0 = atan2_16::return#2
// angle_w+0x0080
// [129] init_angle_screen::$7 = init_angle_screen::angle_w#0 + $80 -- vwuz1=vwuz1_plus_vbuc1
lda #$80
clc
adc.z __7
sta.z __7
bcc !+
inc.z __7+1
!:
// ang_w = >(angle_w+0x0080)
// [130] init_angle_screen::ang_w#0 = > init_angle_screen::$7 -- vbuz1=_hi_vwuz2
lda.z __7+1
sta.z ang_w
// screen_bottomline[xb] = ang_w
// [131] init_angle_screen::screen_bottomline#6[init_angle_screen::xb#2] = init_angle_screen::ang_w#0 -- pbuz1_derefidx_vbuz2=vbuz3
ldy.z xb
sta (screen_bottomline),y
// -ang_w
// [132] init_angle_screen::$9 = - init_angle_screen::ang_w#0 -- vbuaa=_neg_vbuz1
eor #$ff
clc
adc #1
// screen_topline[xb] = -ang_w
// [133] init_angle_screen::screen_topline#6[init_angle_screen::xb#2] = init_angle_screen::$9 -- pbuz1_derefidx_vbuz2=vbuaa
sta (screen_topline),y
// 0x80+ang_w
// [134] init_angle_screen::$10 = $80 + init_angle_screen::ang_w#0 -- vbuaa=vbuc1_plus_vbuz1
lda #$80
clc
adc.z ang_w
// screen_topline[x] = 0x80+ang_w
// [135] init_angle_screen::screen_topline#6[init_angle_screen::x#2] = init_angle_screen::$10 -- pbuz1_derefidx_vbuz2=vbuaa
ldy.z x
sta (screen_topline),y
// 0x80-ang_w
// [136] init_angle_screen::$11 = $80 - init_angle_screen::ang_w#0 -- vbuaa=vbuc1_minus_vbuz1
lda #$80
sec
sbc.z ang_w
// screen_bottomline[x] = 0x80-ang_w
// [137] init_angle_screen::screen_bottomline#6[init_angle_screen::x#2] = init_angle_screen::$11 -- pbuz1_derefidx_vbuz2=vbuaa
sta (screen_bottomline),y
// for( char x=0,xb=39; x<=19; x++, xb--)
// [138] init_angle_screen::x#1 = ++ init_angle_screen::x#2 -- vbuz1=_inc_vbuz1
inc.z x
// [139] init_angle_screen::xb#1 = -- init_angle_screen::xb#2 -- vbuz1=_dec_vbuz1
dec.z xb
// [112] phi from init_angle_screen::@5 to init_angle_screen::@2 [phi:init_angle_screen::@5->init_angle_screen::@2]
// [112] phi init_angle_screen::xb#2 = init_angle_screen::xb#1 [phi:init_angle_screen::@5->init_angle_screen::@2#0] -- register_copy
// [112] phi init_angle_screen::x#2 = init_angle_screen::x#1 [phi:init_angle_screen::@5->init_angle_screen::@2#1] -- register_copy
jmp __b2
}
// initSprites
// Initialize sprites
initSprites: {
.label sp = $a
// [141] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1]
// [141] phi initSprites::sp#2 = SPRITE_DATA [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1
lda #<SPRITE_DATA
sta.z sp
lda #>SPRITE_DATA
sta.z sp+1
// Clear sprite data
// initSprites::@1
__b1:
// for( char* sp = SPRITE_DATA; sp<SPRITE_DATA+NUM_PROCESSING*64; sp++)
// [142] if(initSprites::sp#2<SPRITE_DATA+NUM_PROCESSING*$40) goto initSprites::@2 -- pbuz1_lt_pbuc1_then_la1
lda.z sp+1
cmp #>SPRITE_DATA+NUM_PROCESSING*$40
bcc __b2
bne !+
lda.z sp
cmp #<SPRITE_DATA+NUM_PROCESSING*$40
bcc __b2
!:
// [143] phi from initSprites::@1 to initSprites::@3 [phi:initSprites::@1->initSprites::@3]
// [143] phi initSprites::i#2 = 0 [phi:initSprites::@1->initSprites::@3#0] -- vbuxx=vbuc1
ldx #0
// Initialize sprite registers
// [143] phi from initSprites::@3 to initSprites::@3 [phi:initSprites::@3->initSprites::@3]
// [143] phi initSprites::i#2 = initSprites::i#1 [phi:initSprites::@3->initSprites::@3#0] -- register_copy
// initSprites::@3
__b3:
// SPRITES_COLOR[i] = LIGHT_BLUE
// [144] SPRITES_COLOR[initSprites::i#2] = LIGHT_BLUE -- pbuc1_derefidx_vbuxx=vbuc2
lda #LIGHT_BLUE
sta SPRITES_COLOR,x
// for( char i: 0..7)
// [145] initSprites::i#1 = ++ initSprites::i#2 -- vbuxx=_inc_vbuxx
inx
// [146] if(initSprites::i#1!=8) goto initSprites::@3 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne __b3
// initSprites::@4
// *SPRITES_MC = 0
// [147] *SPRITES_MC = 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_MC
// *SPRITES_EXPAND_X = 0
// [148] *SPRITES_EXPAND_X = 0 -- _deref_pbuc1=vbuc2
sta SPRITES_EXPAND_X
// *SPRITES_EXPAND_Y = 0
// [149] *SPRITES_EXPAND_Y = 0 -- _deref_pbuc1=vbuc2
sta SPRITES_EXPAND_Y
// initSprites::@return
// }
// [150] return
rts
// initSprites::@2
__b2:
// *sp = 0
// [151] *initSprites::sp#2 = 0 -- _deref_pbuz1=vbuc1
lda #0
tay
sta (sp),y
// for( char* sp = SPRITE_DATA; sp<SPRITE_DATA+NUM_PROCESSING*64; sp++)
// [152] initSprites::sp#1 = ++ initSprites::sp#2 -- pbuz1=_inc_pbuz1
inc.z sp
bne !+
inc.z sp+1
!:
// [141] phi from initSprites::@2 to initSprites::@1 [phi:initSprites::@2->initSprites::@1]
// [141] phi initSprites::sp#2 = initSprites::sp#1 [phi:initSprites::@2->initSprites::@1#0] -- register_copy
jmp __b1
}
// setupRasterIrq
// Setup Raster IRQ
setupRasterIrq: {
.label irqRoutine = irqTop
// asm
// asm { sei }
sei
// *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
// [154] *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
// *PROCPORT = PROCPORT_RAM_IO
// [155] *PROCPORT = PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
// CIA1->INTERRUPT = CIA_INTERRUPT_CLEAR
// [156] *((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
// setupRasterIrq::@1
// *VICII_CONTROL &=0x7f
// [157] *VICII_CONTROL = *VICII_CONTROL & $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
lda #$7f
and VICII_CONTROL
sta VICII_CONTROL
// setupRasterIrq::@2
// *RASTER = <raster
// [158] *RASTER = <RASTER_IRQ_TOP -- _deref_pbuc1=vbuc2
lda #RASTER_IRQ_TOP
sta RASTER
// *IRQ_ENABLE = IRQ_RASTER
// [159] *IRQ_ENABLE = IRQ_RASTER -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
// *HARDWARE_IRQ = irqRoutine
// [160] *HARDWARE_IRQ = setupRasterIrq::irqRoutine#0 -- _deref_qprc1=pprc2
// Set the IRQ routine
lda #<irqRoutine
sta HARDWARE_IRQ
lda #>irqRoutine
sta HARDWARE_IRQ+1
// asm
// asm { cli }
cli
// setupRasterIrq::@return
// }
// [162] return
rts
}
// getCharToProcess
// Find the non-space char closest to the center of the screen
// If no non-space char is found the distance will be 0xffff
getCharToProcess: {
.label __8 = $2a
.label __9 = $2a
.label __11 = $2a
.label screen_line = $12
.label dist_line = $a
.label y = $14
.label return_x = $2c
.label return_y = 9
.label closest_dist = $27
.label closest_x = $2c
.label closest_y = 9
.label __12 = $1f
.label __13 = $2a
// screen_line = SCREEN_COPY
// [163] getCharToProcess::screen_line#0 = (byte*)SCREEN_COPY#0 -- pbuz1=pbuz2
lda.z SCREEN_COPY
sta.z screen_line
lda.z SCREEN_COPY+1
sta.z screen_line+1
// dist_line = SCREEN_DIST
// [164] getCharToProcess::dist_line#0 = (byte*)SCREEN_DIST#0 -- pbuz1=pbuz2
lda.z SCREEN_DIST
sta.z dist_line
lda.z SCREEN_DIST+1
sta.z dist_line+1
// [165] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
// [165] phi getCharToProcess::closest_y#9 = 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1
lda #0
sta.z closest_y
// [165] phi getCharToProcess::closest_x#9 = 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1
sta.z closest_x
// [165] phi getCharToProcess::y#7 = 0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vbuz1=vbuc1
sta.z y
// [165] phi getCharToProcess::closest_dist#8 = NOT_FOUND [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1
lda #NOT_FOUND
sta.z closest_dist
// [165] phi getCharToProcess::dist_line#6 = getCharToProcess::dist_line#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- register_copy
// [165] phi getCharToProcess::screen_line#4 = getCharToProcess::screen_line#0 [phi:getCharToProcess->getCharToProcess::@1#5] -- register_copy
// getCharToProcess::@1
__b1:
// [166] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
// [166] phi getCharToProcess::closest_y#7 = getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy
// [166] phi getCharToProcess::closest_x#7 = getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy
// [166] phi getCharToProcess::closest_dist#2 = getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy
// [166] phi getCharToProcess::x#2 = 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuyy=vbuc1
ldy #0
// getCharToProcess::@2
__b2:
// if(screen_line[x]!=' ')
// [167] if(getCharToProcess::screen_line#4[getCharToProcess::x#2]==' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuyy_eq_vbuc1_then_la1
lda #' '
cmp (screen_line),y
bne !__b11+
jmp __b11
!__b11:
// getCharToProcess::@4
// dist = dist_line[x]
// [168] getCharToProcess::dist#0 = getCharToProcess::dist_line#6[getCharToProcess::x#2] -- vbuxx=pbuz1_derefidx_vbuyy
lda (dist_line),y
tax
// if(dist<closest.dist)
// [169] if(getCharToProcess::dist#0>=getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vbuxx_ge_vbuz1_then_la1
cpx.z closest_dist
bcs __b12
// getCharToProcess::@5
// [170] getCharToProcess::return_x#7 = getCharToProcess::x#2 -- vbuz1=vbuyy
sty.z return_x
// [171] getCharToProcess::return_y#7 = getCharToProcess::y#7 -- vbuz1=vbuz2
lda.z y
sta.z return_y
// [172] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3]
// [172] phi getCharToProcess::return_y#1 = getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy
// [172] phi getCharToProcess::return_x#1 = getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy
// [172] phi getCharToProcess::return_dist#1 = getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy
// getCharToProcess::@3
__b3:
// for( char x: 0..39)
// [173] getCharToProcess::x#1 = ++ getCharToProcess::x#2 -- vbuyy=_inc_vbuyy
iny
// [174] if(getCharToProcess::x#1!=$28) goto getCharToProcess::@10 -- vbuyy_neq_vbuc1_then_la1
cpy #$28
bne __b10
// getCharToProcess::@6
// screen_line += 40
// [175] getCharToProcess::screen_line#1 = getCharToProcess::screen_line#4 + $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z screen_line
sta.z screen_line
bcc !+
inc.z screen_line+1
!:
// dist_line += 40
// [176] getCharToProcess::dist_line#1 = getCharToProcess::dist_line#6 + $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc.z dist_line
sta.z dist_line
bcc !+
inc.z dist_line+1
!:
// for( char y: 0..24)
// [177] getCharToProcess::y#1 = ++ getCharToProcess::y#7 -- vbuz1=_inc_vbuz1
inc.z y
// [178] if(getCharToProcess::y#1!=$19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp.z y
bne __b9
// getCharToProcess::@7
// if(closest.dist != NOT_FOUND)
// [179] if(getCharToProcess::return_dist#1==NOT_FOUND) goto getCharToProcess::@return -- vbuxx_eq_vbuc1_then_la1
cpx #NOT_FOUND
beq __breturn
// getCharToProcess::@8
// (unsigned int)closest.y*40
// [180] getCharToProcess::$11 = (word)getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2
lda.z return_y
sta.z __11
lda #0
sta.z __11+1
// [181] getCharToProcess::$12 = getCharToProcess::$11 << 2 -- vwuz1=vwuz2_rol_2
lda.z __11
asl
sta.z __12
lda.z __11+1
rol
sta.z __12+1
asl.z __12
rol.z __12+1
// [182] getCharToProcess::$13 = getCharToProcess::$12 + getCharToProcess::$11 -- vwuz1=vwuz2_plus_vwuz1
lda.z __13
clc
adc.z __12
sta.z __13
lda.z __13+1
adc.z __12+1
sta.z __13+1
// [183] getCharToProcess::$8 = getCharToProcess::$13 << 3 -- vwuz1=vwuz1_rol_3
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
// SCREEN_COPY+(unsigned int)closest.y*40
// [184] getCharToProcess::$9 = (byte*)SCREEN_COPY#0 + getCharToProcess::$8 -- pbuz1=pbuz2_plus_vwuz1
lda.z __9
clc
adc.z SCREEN_COPY
sta.z __9
lda.z __9+1
adc.z SCREEN_COPY+1
sta.z __9+1
// *(SCREEN_COPY+(unsigned int)closest.y*40+closest.x) = ' '
// [185] getCharToProcess::$9[getCharToProcess::return_x#1] = ' ' -- pbuz1_derefidx_vbuz2=vbuc1
// clear the found char on the screen copy
lda #' '
ldy.z return_x
sta (__9),y
// getCharToProcess::@return
__breturn:
// }
// [186] return
rts
// getCharToProcess::@9
__b9:
// [187] getCharToProcess::closest_dist#10 = getCharToProcess::return_dist#1 -- vbuz1=vbuxx
stx.z closest_dist
// [165] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
// [165] phi getCharToProcess::closest_y#9 = getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy
// [165] phi getCharToProcess::closest_x#9 = getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy
// [165] phi getCharToProcess::y#7 = getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy
// [165] phi getCharToProcess::closest_dist#8 = getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy
// [165] phi getCharToProcess::dist_line#6 = getCharToProcess::dist_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy
// [165] phi getCharToProcess::screen_line#4 = getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#5] -- register_copy
jmp __b1
// getCharToProcess::@10
__b10:
// [188] getCharToProcess::closest_dist#12 = getCharToProcess::return_dist#1 -- vbuz1=vbuxx
stx.z closest_dist
// [166] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
// [166] phi getCharToProcess::closest_y#7 = getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy
// [166] phi getCharToProcess::closest_x#7 = getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy
// [166] phi getCharToProcess::closest_dist#2 = getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy
// [166] phi getCharToProcess::x#2 = getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy
jmp __b2
// getCharToProcess::@12
__b12:
// [189] getCharToProcess::return_dist#6 = getCharToProcess::closest_dist#2 -- vbuxx=vbuz1
ldx.z closest_dist
jmp __b3
// getCharToProcess::@11
__b11:
// [190] getCharToProcess::return_dist#5 = getCharToProcess::closest_dist#2 -- vbuxx=vbuz1
ldx.z closest_dist
jmp __b3
}
// startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zp($1e) center_x, byte zp($14) center_y)
startProcessing: {
.label __0 = $21
.label __4 = $c
.label __6 = $a
.label __8 = $28
.label __9 = $28
.label __11 = $2a
.label __12 = $2a
.label __23 = $21
.label __24 = $c
.label __25 = $a
.label __26 = $28
.label __27 = $2a
.label center_x = $1e
.label center_y = $14
.label i = 9
.label offset = $21
.label colPtr = $25
.label spriteCol = $27
.label screenPtr = $21
.label spriteData = $c
.label chargenData = $a
.label spriteX = $28
.label spriteY = $2a
.label spritePtr = $2c
// Busy-wait while finding an empty slot in the PROCESSING array
.label freeIdx = 9
.label __33 = $23
.label __34 = $21
// [192] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
// [192] phi startProcessing::freeIdx#6 = $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1
ldx #$ff
// startProcessing::@1
__b1:
// [193] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
// [193] phi startProcessing::i#2 = 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1
lda #0
sta.z i
// [193] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
// [193] phi startProcessing::i#2 = startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy
// startProcessing::@2
__b2:
// PROCESSING[i].status==STATUS_FREE
// [194] startProcessing::$28 = startProcessing::i#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z i
asl
// [195] startProcessing::$29 = startProcessing::$28 + startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [196] startProcessing::$30 = startProcessing::$29 << 1 -- vbuaa=vbuaa_rol_1
asl
// [197] startProcessing::$31 = startProcessing::$30 + startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z i
// [198] startProcessing::$21 = startProcessing::$31 << 1 -- vbuaa=vbuaa_rol_1
asl
// if(PROCESSING[i].status==STATUS_FREE)
// [199] if(((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$21]!=STATUS_FREE) goto startProcessing::@3 -- pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1
tay
lda #STATUS_FREE
cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
beq !__b3+
jmp __b3
!__b3:
// [200] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
// [200] phi startProcessing::freeIdx#2 = startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy
// startProcessing::@4
__b4:
// while (freeIdx==0xff)
// [201] if(startProcessing::freeIdx#2==$ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1
lda #$ff
cmp.z freeIdx
bne !__b8+
jmp __b8
!__b8:
// startProcessing::@5
// (unsigned int)center.y*40
// [202] startProcessing::$23 = (word)startProcessing::center_y#0 -- vwuz1=_word_vbuz2
lda.z center_y
sta.z __23
lda #0
sta.z __23+1
// [203] startProcessing::$33 = startProcessing::$23 << 2 -- vwuz1=vwuz2_rol_2
lda.z __23
asl
sta.z __33
lda.z __23+1
rol
sta.z __33+1
asl.z __33
rol.z __33+1
// [204] startProcessing::$34 = startProcessing::$33 + startProcessing::$23 -- vwuz1=vwuz2_plus_vwuz1
lda.z __34
clc
adc.z __33
sta.z __34
lda.z __34+1
adc.z __33+1
sta.z __34+1
// [205] startProcessing::$0 = startProcessing::$34 << 3 -- vwuz1=vwuz1_rol_3
asl.z __0
rol.z __0+1
asl.z __0
rol.z __0+1
asl.z __0
rol.z __0+1
// offset = (unsigned int)center.y*40+center.x
// [206] startProcessing::offset#0 = startProcessing::$0 + startProcessing::center_x#0 -- vwuz1=vwuz1_plus_vbuz2
lda.z center_x
clc
adc.z offset
sta.z offset
bcc !+
inc.z offset+1
!:
// colPtr = COLS+offset
// [207] startProcessing::colPtr#0 = COLS + startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz2
clc
lda.z offset
adc #<COLS
sta.z colPtr
lda.z offset+1
adc #>COLS
sta.z colPtr+1
// spriteCol = *colPtr
// [208] startProcessing::spriteCol#0 = *startProcessing::colPtr#0 -- vbuz1=_deref_pbuz2
ldy #0
lda (colPtr),y
sta.z spriteCol
// screenPtr = SCREEN+offset
// [209] startProcessing::screenPtr#0 = SCREEN + startProcessing::offset#0 -- pbuz1=pbuc1_plus_vwuz1
clc
lda.z screenPtr
adc #<SCREEN
sta.z screenPtr
lda.z screenPtr+1
adc #>SCREEN
sta.z screenPtr+1
// (unsigned int)spriteIdx*64
// [210] startProcessing::$24 = (word)startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2
lda.z freeIdx
sta.z __24
tya
sta.z __24+1
// [211] startProcessing::$4 = startProcessing::$24 << 6 -- vwuz1=vwuz1_rol_6
lda.z __4+1
lsr
sta.z $ff
lda.z __4
ror
sta.z __4+1
tya
ror
sta.z __4
lsr.z $ff
ror.z __4+1
ror.z __4
// spriteData = SPRITE_DATA+(unsigned int)spriteIdx*64
// [212] startProcessing::spriteData#0 = SPRITE_DATA + startProcessing::$4 -- pbuz1=pbuc1_plus_vwuz1
clc
lda.z spriteData
adc #<SPRITE_DATA
sta.z spriteData
lda.z spriteData+1
adc #>SPRITE_DATA
sta.z spriteData+1
// ch = (*screenPtr)
// [213] startProcessing::ch#0 = *startProcessing::screenPtr#0 -- vbuaa=_deref_pbuz1
lda (screenPtr),y
// (unsigned int)ch*8
// [214] startProcessing::$25 = (word)startProcessing::ch#0 -- vwuz1=_word_vbuaa
sta.z __25
tya
sta.z __25+1
// [215] startProcessing::$6 = startProcessing::$25 << 3 -- vwuz1=vwuz1_rol_3
asl.z __6
rol.z __6+1
asl.z __6
rol.z __6+1
asl.z __6
rol.z __6+1
// chargenData = CHARGEN+(unsigned int)ch*8
// [216] startProcessing::chargenData#0 = CHARGEN + startProcessing::$6 -- pbuz1=pbuc1_plus_vwuz1
clc
lda.z chargenData
adc #<CHARGEN
sta.z chargenData
lda.z chargenData+1
adc #>CHARGEN
sta.z chargenData+1
// asm
// asm { sei }
sei
// *PROCPORT = PROCPORT_RAM_CHARROM
// [218] *PROCPORT = PROCPORT_RAM_CHARROM -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_CHARROM
sta PROCPORT
// [219] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
// [219] phi startProcessing::i1#2 = 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1
ldx #0
// [219] phi startProcessing::spriteData#2 = startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy
// [219] phi startProcessing::chargenData#2 = startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy
// [219] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
// [219] phi startProcessing::i1#2 = startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy
// [219] phi startProcessing::spriteData#2 = startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy
// [219] phi startProcessing::chargenData#2 = startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy
// startProcessing::@6
__b6:
// *spriteData = *chargenData
// [220] *startProcessing::spriteData#2 = *startProcessing::chargenData#2 -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (chargenData),y
sta (spriteData),y
// spriteData += 3
// [221] startProcessing::spriteData#1 = startProcessing::spriteData#2 + 3 -- pbuz1=pbuz1_plus_vbuc1
lda #3
clc
adc.z spriteData
sta.z spriteData
bcc !+
inc.z spriteData+1
!:
// chargenData++;
// [222] startProcessing::chargenData#1 = ++ startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1
inc.z chargenData
bne !+
inc.z chargenData+1
!:
// for( char i: 0..7)
// [223] startProcessing::i1#1 = ++ startProcessing::i1#2 -- vbuxx=_inc_vbuxx
inx
// [224] if(startProcessing::i1#1!=8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne __b6
// startProcessing::@7
// *PROCPORT = PROCPORT_RAM_IO
// [225] *PROCPORT = PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
// asm
// asm { cli }
cli
// (unsigned int)center.x*8
// [227] startProcessing::$26 = (word)startProcessing::center_x#0 -- vwuz1=_word_vbuz2
lda.z center_x
sta.z __26
lda #0
sta.z __26+1
// [228] startProcessing::$8 = startProcessing::$26 << 3 -- vwuz1=vwuz1_rol_3
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
asl.z __8
rol.z __8+1
// BORDER_XPOS_LEFT + (unsigned int)center.x*8
// [229] startProcessing::$9 = BORDER_XPOS_LEFT + startProcessing::$8 -- vwuz1=vbuc1_plus_vwuz1
lda #BORDER_XPOS_LEFT
clc
adc.z __9
sta.z __9
bcc !+
inc.z __9+1
!:
// spriteX = (BORDER_XPOS_LEFT + (unsigned int)center.x*8) << 4
// [230] startProcessing::spriteX#0 = startProcessing::$9 << 4 -- vwuz1=vwuz1_rol_4
asl.z spriteX
rol.z spriteX+1
asl.z spriteX
rol.z spriteX+1
asl.z spriteX
rol.z spriteX+1
asl.z spriteX
rol.z spriteX+1
// (unsigned int)center.y*8
// [231] startProcessing::$27 = (word)startProcessing::center_y#0 -- vwuz1=_word_vbuz2
lda.z center_y
sta.z __27
lda #0
sta.z __27+1
// [232] startProcessing::$11 = startProcessing::$27 << 3 -- vwuz1=vwuz1_rol_3
asl.z __11
rol.z __11+1
asl.z __11
rol.z __11+1
asl.z __11
rol.z __11+1
// BORDER_YPOS_TOP + (unsigned int)center.y*8
// [233] startProcessing::$12 = BORDER_YPOS_TOP + startProcessing::$11 -- vwuz1=vbuc1_plus_vwuz1
lda #BORDER_YPOS_TOP
clc
adc.z __12
sta.z __12
bcc !+
inc.z __12+1
!:
// spriteY = (BORDER_YPOS_TOP + (unsigned int)center.y*8) << 4
// [234] startProcessing::spriteY#0 = startProcessing::$12 << 4 -- vwuz1=vwuz1_rol_4
asl.z spriteY
rol.z spriteY+1
asl.z spriteY
rol.z spriteY+1
asl.z spriteY
rol.z spriteY+1
asl.z spriteY
rol.z spriteY+1
// spritePtr = (char)(SPRITE_DATA/64)+spriteIdx
// [235] startProcessing::spritePtr#0 = (byte)SPRITE_DATA/$40 + startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2
lax.z freeIdx
axs #-[SPRITE_DATA/$40]
stx.z spritePtr
// spriteIdx*8
// [236] startProcessing::$15 = startProcessing::freeIdx#2 << 3 -- vbuyy=vbuz1_rol_3
lda.z freeIdx
asl
asl
asl
tay
// PROCESSING[spriteIdx] = { spriteX, spriteY, (unsigned int)(spriteIdx*8), 60, spriteIdx, spritePtr, spriteCol, STATUS_NEW, screenPtr }
// [237] startProcessing::$36 = startProcessing::freeIdx#2 << 1 -- vbuaa=vbuz1_rol_1
lda.z freeIdx
asl
// [238] startProcessing::$37 = startProcessing::$36 + startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z freeIdx
// [239] startProcessing::$38 = startProcessing::$37 << 1 -- vbuaa=vbuaa_rol_1
asl
// [240] startProcessing::$39 = startProcessing::$38 + startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc.z freeIdx
// [241] startProcessing::$22 = startProcessing::$39 << 1 -- vbuxx=vbuaa_rol_1
asl
tax
// [242] ((word*)PROCESSING)[startProcessing::$22] = startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1
lda.z spriteX
sta PROCESSING,x
lda.z spriteX+1
sta PROCESSING+1,x
// [243] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y)[startProcessing::$22] = startProcessing::spriteY#0 -- pwuc1_derefidx_vbuxx=vwuz1
lda.z spriteY
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
lda.z spriteY+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
// [244] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX)[startProcessing::$22] = (word)startProcessing::$15 -- pwuc1_derefidx_vbuxx=_word_vbuyy
tya
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
// [245] ((word*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY)[startProcessing::$22] = $3c -- pwuc1_derefidx_vbuxx=vwuc2
lda #<$3c
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
lda #>$3c
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
// [246] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID)[startProcessing::$22] = startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1
lda.z freeIdx
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
// [247] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR)[startProcessing::$22] = startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda.z spritePtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
// [248] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL)[startProcessing::$22] = startProcessing::spriteCol#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda.z spriteCol
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_COL,x
// [249] ((byte*)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)[startProcessing::$22] = STATUS_NEW -- pbuc1_derefidx_vbuxx=vbuc2
lda #STATUS_NEW
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
// [250] ((byte**)PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)[startProcessing::$22] = startProcessing::screenPtr#0 -- qbuc1_derefidx_vbuxx=pbuz1
lda.z screenPtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
lda.z screenPtr+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
// startProcessing::@return
// }
// [251] return
rts
// startProcessing::@8
__b8:
// [252] startProcessing::freeIdx#7 = startProcessing::freeIdx#2 -- vbuxx=vbuz1
ldx.z freeIdx
// [192] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
// [192] phi startProcessing::freeIdx#6 = startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy
jmp __b1
// startProcessing::@3
__b3:
// for( char i: 0..NUM_PROCESSING-1 )
// [253] startProcessing::i#1 = ++ startProcessing::i#2 -- vbuz1=_inc_vbuz1
inc.z i
// [254] if(startProcessing::i#1!=NUM_PROCESSING-1+1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp.z i
beq !__b2+
jmp __b2
!__b2:
// startProcessing::@9
// [255] startProcessing::freeIdx#8 = startProcessing::freeIdx#6 -- vbuz1=vbuxx
stx.z freeIdx
jmp __b4
}
// atan2_16
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
// atan2_16(signed word zp($25) x, signed word zp($28) y)
atan2_16: {
.label __2 = $c
.label __7 = $2a
.label yi = $c
.label xi = $2a
.label angle = $1f
.label xd = $23
.label yd = $21
.label return = $1f
.label x = $25
.label y = $28
// (y>=0)?y:-y
// [256] if(atan2_16::y#0>=0) goto atan2_16::@1 -- vwsz1_ge_0_then_la1
lda.z y+1
bmi !__b1+
jmp __b1
!__b1:
// atan2_16::@2
// [257] atan2_16::$2 = - atan2_16::y#0 -- vwsz1=_neg_vwsz2
sec
lda #0
sbc.z y
sta.z __2
lda #0
sbc.z y+1
sta.z __2+1
// [258] phi from atan2_16::@1 atan2_16::@2 to atan2_16::@3 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3]
// [258] phi atan2_16::yi#0 = atan2_16::yi#16 [phi:atan2_16::@1/atan2_16::@2->atan2_16::@3#0] -- register_copy
// atan2_16::@3
__b3:
// (x>=0)?x:-x
// [259] if(atan2_16::x#0>=0) goto atan2_16::@4 -- vwsz1_ge_0_then_la1
lda.z x+1
bmi !__b4+
jmp __b4
!__b4:
// atan2_16::@5
// [260] atan2_16::$7 = - atan2_16::x#0 -- vwsz1=_neg_vwsz2
sec
lda #0
sbc.z x
sta.z __7
lda #0
sbc.z x+1
sta.z __7+1
// [261] phi from atan2_16::@4 atan2_16::@5 to atan2_16::@6 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6]
// [261] phi atan2_16::xi#0 = atan2_16::xi#13 [phi:atan2_16::@4/atan2_16::@5->atan2_16::@6#0] -- register_copy
// atan2_16::@6
__b6:
// [262] phi from atan2_16::@6 to atan2_16::@10 [phi:atan2_16::@6->atan2_16::@10]
// [262] phi atan2_16::angle#12 = 0 [phi:atan2_16::@6->atan2_16::@10#0] -- vwuz1=vwuc1
lda #<0
sta.z angle
sta.z angle+1
// [262] phi atan2_16::i#2 = 0 [phi:atan2_16::@6->atan2_16::@10#1] -- vbuxx=vbuc1
tax
// [262] phi atan2_16::xi#3 = atan2_16::xi#0 [phi:atan2_16::@6->atan2_16::@10#2] -- register_copy
// [262] phi atan2_16::yi#3 = atan2_16::yi#0 [phi:atan2_16::@6->atan2_16::@10#3] -- register_copy
// atan2_16::@10
__b10:
// if(yi==0)
// [263] if(atan2_16::yi#3!=0) goto atan2_16::@11 -- vwsz1_neq_0_then_la1
lda.z yi+1
ora.z yi
bne __b11
// [264] phi from atan2_16::@10 atan2_16::@19 to atan2_16::@12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12]
// [264] phi atan2_16::angle#6 = atan2_16::angle#12 [phi:atan2_16::@10/atan2_16::@19->atan2_16::@12#0] -- register_copy
// atan2_16::@12
__b12:
// angle /=2
// [265] atan2_16::angle#1 = atan2_16::angle#6 >> 1 -- vwuz1=vwuz1_ror_1
lsr.z angle+1
ror.z angle
// if(x<0)
// [266] if(atan2_16::x#0>=0) goto atan2_16::@7 -- vwsz1_ge_0_then_la1
lda.z x+1
bpl __b7
// atan2_16::@21
// angle = 0x8000-angle
// [267] atan2_16::angle#4 = $8000 - atan2_16::angle#1 -- vwuz1=vwuc1_minus_vwuz1
sec
lda #<$8000
sbc.z angle
sta.z angle
lda #>$8000
sbc.z angle+1
sta.z angle+1
// [268] phi from atan2_16::@12 atan2_16::@21 to atan2_16::@7 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7]
// [268] phi atan2_16::angle#11 = atan2_16::angle#1 [phi:atan2_16::@12/atan2_16::@21->atan2_16::@7#0] -- register_copy
// atan2_16::@7
__b7:
// if(y<0)
// [269] if(atan2_16::y#0>=0) goto atan2_16::@8 -- vwsz1_ge_0_then_la1
lda.z y+1
bpl __b8
// atan2_16::@9
// angle = -angle
// [270] atan2_16::angle#5 = - atan2_16::angle#11 -- vwuz1=_neg_vwuz1
sec
lda #0
sbc.z angle
sta.z angle
lda #0
sbc.z angle+1
sta.z angle+1
// [271] phi from atan2_16::@7 atan2_16::@9 to atan2_16::@8 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8]
// [271] phi atan2_16::return#0 = atan2_16::angle#11 [phi:atan2_16::@7/atan2_16::@9->atan2_16::@8#0] -- register_copy
// atan2_16::@8
__b8:
// atan2_16::@return
// }
// [272] return
rts
// atan2_16::@11
__b11:
// [273] atan2_16::shift#5 = atan2_16::i#2 -- vbuyy=vbuxx
txa
tay
// [274] atan2_16::xd#10 = atan2_16::xi#3 -- vwsz1=vwsz2
lda.z xi
sta.z xd
lda.z xi+1
sta.z xd+1
// [275] atan2_16::yd#10 = atan2_16::yi#3 -- vwsz1=vwsz2
lda.z yi
sta.z yd
lda.z yi+1
sta.z yd+1
// [276] phi from atan2_16::@11 atan2_16::@14 to atan2_16::@13 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13]
// [276] phi atan2_16::yd#3 = atan2_16::yd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#0] -- register_copy
// [276] phi atan2_16::xd#3 = atan2_16::xd#10 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#1] -- register_copy
// [276] phi atan2_16::shift#2 = atan2_16::shift#5 [phi:atan2_16::@11/atan2_16::@14->atan2_16::@13#2] -- register_copy
// atan2_16::@13
__b13:
// while(shift>=2)
// [277] if(atan2_16::shift#2>=2) goto atan2_16::@14 -- vbuyy_ge_vbuc1_then_la1
cpy #2
bcs __b14
// atan2_16::@15
// if(shift)
// [278] if(0==atan2_16::shift#2) goto atan2_16::@17 -- 0_eq_vbuyy_then_la1
cpy #0
beq __b17
// atan2_16::@16
// xd >>= 1
// [279] atan2_16::xd#2 = atan2_16::xd#3 >> 1 -- vwsz1=vwsz1_ror_1
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// yd >>= 1
// [280] atan2_16::yd#2 = atan2_16::yd#3 >> 1 -- vwsz1=vwsz1_ror_1
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// [281] phi from atan2_16::@15 atan2_16::@16 to atan2_16::@17 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17]
// [281] phi atan2_16::xd#5 = atan2_16::xd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#0] -- register_copy
// [281] phi atan2_16::yd#5 = atan2_16::yd#3 [phi:atan2_16::@15/atan2_16::@16->atan2_16::@17#1] -- register_copy
// atan2_16::@17
__b17:
// if(yi>=0)
// [282] if(atan2_16::yi#3>=0) goto atan2_16::@18 -- vwsz1_ge_0_then_la1
lda.z yi+1
bpl __b18
// atan2_16::@20
// xi -= yd
// [283] atan2_16::xi#2 = atan2_16::xi#3 - atan2_16::yd#5 -- vwsz1=vwsz1_minus_vwsz2
lda.z xi
sec
sbc.z yd
sta.z xi
lda.z xi+1
sbc.z yd+1
sta.z xi+1
// yi += xd
// [284] atan2_16::yi#2 = atan2_16::yi#3 + atan2_16::xd#5 -- vwsz1=vwsz1_plus_vwsz2
lda.z yi
clc
adc.z xd
sta.z yi
lda.z yi+1
adc.z xd+1
sta.z yi+1
// angle -= CORDIC_ATAN2_ANGLES_16[i]
// [285] atan2_16::$23 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [286] atan2_16::angle#3 = atan2_16::angle#12 - CORDIC_ATAN2_ANGLES_16[atan2_16::$23] -- vwuz1=vwuz1_minus_pwuc1_derefidx_vbuaa
tay
sec
lda.z angle
sbc CORDIC_ATAN2_ANGLES_16,y
sta.z angle
lda.z angle+1
sbc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle+1
// [287] phi from atan2_16::@18 atan2_16::@20 to atan2_16::@19 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19]
// [287] phi atan2_16::xi#8 = atan2_16::xi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#0] -- register_copy
// [287] phi atan2_16::angle#13 = atan2_16::angle#2 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#1] -- register_copy
// [287] phi atan2_16::yi#8 = atan2_16::yi#1 [phi:atan2_16::@18/atan2_16::@20->atan2_16::@19#2] -- register_copy
// atan2_16::@19
__b19:
// for( char i: 0..CORDIC_ITERATIONS_16-1)
// [288] atan2_16::i#1 = ++ atan2_16::i#2 -- vbuxx=_inc_vbuxx
inx
// [289] if(atan2_16::i#1==CORDIC_ITERATIONS_16-1+1) goto atan2_16::@12 -- vbuxx_eq_vbuc1_then_la1
cpx #CORDIC_ITERATIONS_16-1+1
bne !__b12+
jmp __b12
!__b12:
// [262] phi from atan2_16::@19 to atan2_16::@10 [phi:atan2_16::@19->atan2_16::@10]
// [262] phi atan2_16::angle#12 = atan2_16::angle#13 [phi:atan2_16::@19->atan2_16::@10#0] -- register_copy
// [262] phi atan2_16::i#2 = atan2_16::i#1 [phi:atan2_16::@19->atan2_16::@10#1] -- register_copy
// [262] phi atan2_16::xi#3 = atan2_16::xi#8 [phi:atan2_16::@19->atan2_16::@10#2] -- register_copy
// [262] phi atan2_16::yi#3 = atan2_16::yi#8 [phi:atan2_16::@19->atan2_16::@10#3] -- register_copy
jmp __b10
// atan2_16::@18
__b18:
// xi += yd
// [290] atan2_16::xi#1 = atan2_16::xi#3 + atan2_16::yd#5 -- vwsz1=vwsz1_plus_vwsz2
lda.z xi
clc
adc.z yd
sta.z xi
lda.z xi+1
adc.z yd+1
sta.z xi+1
// yi -= xd
// [291] atan2_16::yi#1 = atan2_16::yi#3 - atan2_16::xd#5 -- vwsz1=vwsz1_minus_vwsz2
lda.z yi
sec
sbc.z xd
sta.z yi
lda.z yi+1
sbc.z xd+1
sta.z yi+1
// angle += CORDIC_ATAN2_ANGLES_16[i]
// [292] atan2_16::$22 = atan2_16::i#2 << 1 -- vbuaa=vbuxx_rol_1
txa
asl
// [293] atan2_16::angle#2 = atan2_16::angle#12 + CORDIC_ATAN2_ANGLES_16[atan2_16::$22] -- vwuz1=vwuz1_plus_pwuc1_derefidx_vbuaa
tay
clc
lda.z angle
adc CORDIC_ATAN2_ANGLES_16,y
sta.z angle
lda.z angle+1
adc CORDIC_ATAN2_ANGLES_16+1,y
sta.z angle+1
jmp __b19
// atan2_16::@14
__b14:
// xd >>= 2
// [294] atan2_16::xd#1 = atan2_16::xd#3 >> 2 -- vwsz1=vwsz1_ror_2
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
lda.z xd+1
cmp #$80
ror.z xd+1
ror.z xd
// yd >>= 2
// [295] atan2_16::yd#1 = atan2_16::yd#3 >> 2 -- vwsz1=vwsz1_ror_2
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
lda.z yd+1
cmp #$80
ror.z yd+1
ror.z yd
// shift -=2
// [296] atan2_16::shift#1 = atan2_16::shift#2 - 2 -- vbuyy=vbuyy_minus_2
dey
dey
jmp __b13
// atan2_16::@4
__b4:
// (x>=0)?x:-x
// [297] atan2_16::xi#13 = atan2_16::x#0 -- vwsz1=vwsz2
lda.z x
sta.z xi
lda.z x+1
sta.z xi+1
jmp __b6
// atan2_16::@1
__b1:
// (y>=0)?y:-y
// [298] atan2_16::yi#16 = atan2_16::y#0 -- vwsz1=vwsz2
lda.z y
sta.z yi
lda.z y+1
sta.z yi+1
jmp __b3
}
// File Data
.segment Data
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
CORDIC_ATAN2_ANGLES_16:
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
.word 256*2*256*atan(1/pow(2,i))/PI/2
// Values added to VX
VXSIN:
.for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
// Values added to VY
VYSIN:
.for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
// Sprites currently being processed in the interrupt
PROCESSING: .fill $e*NUM_PROCESSING, 0
__0: .word 0, 0, 0, 0
.byte 0, 0, 0, STATUS_FREE
.word 0