1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-08-09 20:25:17 +00:00
Files
kickc/src/test/ref/complex/blackhole/blackhole.log
2019-06-16 01:06:52 +02:00

10836 lines
649 KiB
Plaintext

Resolved forward reference irqTop to interrupt(HARDWARE_ALL)(void()) irqTop()
Resolved forward reference RASTER_IRQ_TOP to (byte) RASTER_IRQ_TOP
Resolved forward reference SQUARES_X to (word[$28]) SQUARES_X
Resolved forward reference SQUARES_Y to (word[$19]) SQUARES_Y
Resolved forward reference RASTER_IRQ_MIDDLE to (byte) RASTER_IRQ_MIDDLE
Resolved forward reference irqBottom to interrupt(HARDWARE_ALL)(void()) irqBottom()
Fixing pointer addition (struct ProcessingSprite*~) processChars::$3 ← (struct ProcessingSprite[NUM_PROCESSING]) PROCESSING + (byte) processChars::i
Fixing pointer array-indexing *((struct ProcessingSprite[NUM_PROCESSING]) PROCESSING + (byte) main::i)
Fixing pointer array-indexing *((word[$28]) SQUARES_X + (byte) getCharToProcess::x)
Fixing pointer array-indexing *((word[$19]) SQUARES_Y + (byte) getCharToProcess::y)
Fixing pointer array-indexing *((struct ProcessingSprite[NUM_PROCESSING]) PROCESSING + (byte) startProcessing::i)
Fixing pointer array-indexing *((struct ProcessingSprite[NUM_PROCESSING]) PROCESSING + (byte) startProcessing::spriteIdx)
Fixing pointer array-indexing *((word*) VXSIN + (byte) processChars::xchar)
Fixing pointer array-indexing *((word*) VYSIN + (byte) processChars::ychar)
Fixing pointer array-indexing *((word[$28]) SQUARES_X + (byte) initSquareTables::x)
Fixing pointer array-indexing *((word[$19]) SQUARES_Y + (byte) initSquareTables::y)
Created struct value member variable (byte) main::center_x
Created struct value member variable (byte) main::center_y
Created struct value member variable (word) main::center_dist
Converted struct value to member variables (struct ProcessingChar) main::center
Created struct value member variable (byte) main::$9_x
Created struct value member variable (byte) main::$9_y
Created struct value member variable (word) main::$9_dist
Converted struct value to member variables (struct ProcessingChar~) main::$9
Created struct value member variable (byte) getCharToProcess::return_x
Created struct value member variable (byte) getCharToProcess::return_y
Created struct value member variable (word) getCharToProcess::return_dist
Converted struct value to member variables (struct ProcessingChar) getCharToProcess::return
Created struct value member variable (byte) getCharToProcess::closest_x
Created struct value member variable (byte) getCharToProcess::closest_y
Created struct value member variable (word) getCharToProcess::closest_dist
Converted struct value to member variables (struct ProcessingChar) getCharToProcess::closest
Created struct value member variable (byte) startProcessing::center_x
Created struct value member variable (byte) startProcessing::center_y
Created struct value member variable (word) startProcessing::center_dist
Converted struct value to member variables (struct ProcessingChar) startProcessing::center
Converted procedure struct value parameter to member variables (void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (word) startProcessing::center_dist)
Adding struct value list initializer *((word*) main::$17 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((word*) main::$18 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((word*) main::$19 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((word*) main::$20 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$21 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$22 + (byte~) main::$16) ← (number) 0
Adding struct value list initializer *((byte*) main::$23 + (byte~) main::$16) ← (byte) STATUS_FREE
Adding struct value list initializer *((byte**) main::$24 + (byte~) main::$16) ← (number) 0
Converted procedure call LValue to member variables { (byte) main::$9_x, (byte) main::$9_y, (word) main::$9_dist } ← call getCharToProcess
Adding struct value member variable copy (byte) main::center_x ← (byte) main::$9_x
Adding struct value member variable copy (byte) main::center_y ← (byte) main::$9_y
Adding struct value member variable copy (word) main::center_dist ← (word) main::$9_dist
Converted procedure struct value parameter to member variables in call (void~) main::$12 ← call startProcessing (byte) main::center_x (byte) main::center_y (word) main::center_dist
Adding struct value list initializer (byte) getCharToProcess::closest_x ← (number) 0
Adding struct value list initializer (byte) getCharToProcess::closest_y ← (number) 0
Adding struct value list initializer (word) getCharToProcess::closest_dist ← (word) NOT_FOUND
Adding struct value list initializer (byte) getCharToProcess::closest_x ← (byte) getCharToProcess::x
Adding struct value list initializer (byte) getCharToProcess::closest_y ← (byte) getCharToProcess::y
Adding struct value list initializer (word) getCharToProcess::closest_dist ← (word) getCharToProcess::dist
Adding struct value member variable copy (byte) getCharToProcess::return_x ← (byte) getCharToProcess::closest_x
Adding struct value member variable copy (byte) getCharToProcess::return_y ← (byte) getCharToProcess::closest_y
Adding struct value member variable copy (word) getCharToProcess::return_dist ← (word) getCharToProcess::closest_dist
Adding struct value member variable copy (byte) getCharToProcess::return_x ← (byte) getCharToProcess::return_x
Adding struct value member variable copy (byte) getCharToProcess::return_y ← (byte) getCharToProcess::return_y
Adding struct value member variable copy (word) getCharToProcess::return_dist ← (word) getCharToProcess::return_dist
Converted procedure struct return value to member variables return { (byte) getCharToProcess::return_x, (byte) getCharToProcess::return_y, (word) getCharToProcess::return_dist }
Adding struct value list initializer *((word*) startProcessing::$31 + (byte~) startProcessing::$30) ← (word) startProcessing::spriteX
Adding struct value list initializer *((word*) startProcessing::$32 + (byte~) startProcessing::$30) ← (word) startProcessing::spriteY
Adding struct value list initializer *((word*) startProcessing::$33 + (byte~) startProcessing::$30) ← (word~) startProcessing::$22
Adding struct value list initializer *((word*) startProcessing::$34 + (byte~) startProcessing::$30) ← (number) $3c
Adding struct value list initializer *((byte*) startProcessing::$35 + (byte~) startProcessing::$30) ← (byte) startProcessing::spriteIdx
Adding struct value list initializer *((byte*) startProcessing::$36 + (byte~) startProcessing::$30) ← (byte) startProcessing::spritePtr
Adding struct value list initializer *((byte*) startProcessing::$37 + (byte~) startProcessing::$30) ← (byte) STATUS_NEW
Adding struct value list initializer *((byte**) startProcessing::$38 + (byte~) startProcessing::$30) ← (byte*) startProcessing::screenPtr
Replacing struct member reference (struct ProcessingChar) main::center.dist with member variable reference (word) main::center_dist
Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.dist with member variable reference (word) getCharToProcess::closest_dist
Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.dist with member variable reference (word) getCharToProcess::closest_dist
Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.y with member variable reference (byte) getCharToProcess::closest_y
Replacing struct member reference (struct ProcessingChar) getCharToProcess::closest.x with member variable reference (byte) getCharToProcess::closest_x
Replacing struct member reference (struct ProcessingChar) startProcessing::center.y with member variable reference (byte) startProcessing::center_y
Replacing struct member reference (struct ProcessingChar) startProcessing::center.x with member variable reference (byte) startProcessing::center_x
Replacing struct member reference (struct ProcessingChar) startProcessing::center.x with member variable reference (byte) startProcessing::center_x
Replacing struct member reference (struct ProcessingChar) startProcessing::center.y with member variable reference (byte) startProcessing::center_y
Rewriting struct pointer member access *((struct ProcessingSprite[NUM_PROCESSING]) PROCESSING + (byte~) startProcessing::$29).status
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).id
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).status
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).status
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).x
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).screenPtr
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).id
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).ptr
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).status
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).y
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).x
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).x
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).y
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).y
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).status
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vx
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vx
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).x
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vx
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).x
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vy
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vy
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).y
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).vy
Rewriting struct pointer member access *((struct ProcessingSprite*) processChars::processing).y
Warning! Adding boolean cast to non-boolean condition (byte~) processChars::$12
Adding pointer type conversion cast (byte*) PROCPORT_DDR in (byte*) PROCPORT_DDR ← (number) 0
Adding pointer type conversion cast (byte*) PROCPORT in (byte*) PROCPORT ← (number) 1
Adding pointer type conversion cast (byte*) CHARGEN in (byte*) CHARGEN ← (number) $d000
Adding pointer type conversion cast (byte*) SPRITES_XPOS in (byte*) SPRITES_XPOS ← (number) $d000
Adding pointer type conversion cast (byte*) SPRITES_YPOS in (byte*) SPRITES_YPOS ← (number) $d001
Adding pointer type conversion cast (byte*) SPRITES_XMSB in (byte*) SPRITES_XMSB ← (number) $d010
Adding pointer type conversion cast (byte*) RASTER in (byte*) RASTER ← (number) $d012
Adding pointer type conversion cast (byte*) SPRITES_ENABLE in (byte*) SPRITES_ENABLE ← (number) $d015
Adding pointer type conversion cast (byte*) SPRITES_EXPAND_Y in (byte*) SPRITES_EXPAND_Y ← (number) $d017
Adding pointer type conversion cast (byte*) SPRITES_PRIORITY in (byte*) SPRITES_PRIORITY ← (number) $d01b
Adding pointer type conversion cast (byte*) SPRITES_MC in (byte*) SPRITES_MC ← (number) $d01c
Adding pointer type conversion cast (byte*) SPRITES_EXPAND_X in (byte*) SPRITES_EXPAND_X ← (number) $d01d
Adding pointer type conversion cast (byte*) BORDERCOL in (byte*) BORDERCOL ← (number) $d020
Adding pointer type conversion cast (byte*) BGCOL in (byte*) BGCOL ← (number) $d021
Adding pointer type conversion cast (byte*) BGCOL1 in (byte*) BGCOL1 ← (number) $d021
Adding pointer type conversion cast (byte*) BGCOL2 in (byte*) BGCOL2 ← (number) $d022
Adding pointer type conversion cast (byte*) BGCOL3 in (byte*) BGCOL3 ← (number) $d023
Adding pointer type conversion cast (byte*) BGCOL4 in (byte*) BGCOL4 ← (number) $d024
Adding pointer type conversion cast (byte*) SPRITES_MC1 in (byte*) SPRITES_MC1 ← (number) $d025
Adding pointer type conversion cast (byte*) SPRITES_MC2 in (byte*) SPRITES_MC2 ← (number) $d026
Adding pointer type conversion cast (byte*) SPRITES_COLS in (byte*) SPRITES_COLS ← (number) $d027
Adding pointer type conversion cast (byte*) VIC_CONTROL in (byte*) VIC_CONTROL ← (number) $d011
Adding pointer type conversion cast (byte*) D011 in (byte*) D011 ← (number) $d011
Adding pointer type conversion cast (byte*) VIC_CONTROL2 in (byte*) VIC_CONTROL2 ← (number) $d016
Adding pointer type conversion cast (byte*) D016 in (byte*) D016 ← (number) $d016
Adding pointer type conversion cast (byte*) D018 in (byte*) D018 ← (number) $d018
Adding pointer type conversion cast (byte*) VIC_MEMORY in (byte*) VIC_MEMORY ← (number) $d018
Adding pointer type conversion cast (byte*) LIGHTPEN_X in (byte*) LIGHTPEN_X ← (number) $d013
Adding pointer type conversion cast (byte*) LIGHTPEN_Y in (byte*) LIGHTPEN_Y ← (number) $d014
Adding pointer type conversion cast (byte*) IRQ_STATUS in (byte*) IRQ_STATUS ← (number) $d019
Adding pointer type conversion cast (byte*) IRQ_ENABLE in (byte*) IRQ_ENABLE ← (number) $d01a
Adding pointer type conversion cast (byte*) COLS in (byte*) COLS ← (number) $d800
Adding pointer type conversion cast (byte*) CIA1_PORT_A in (byte*) CIA1_PORT_A ← (number) $dc00
Adding pointer type conversion cast (byte*) CIA1_PORT_B in (byte*) CIA1_PORT_B ← (number) $dc01
Adding pointer type conversion cast (byte*) CIA1_PORT_A_DDR in (byte*) CIA1_PORT_A_DDR ← (number) $dc02
Adding pointer type conversion cast (byte*) CIA1_PORT_B_DDR in (byte*) CIA1_PORT_B_DDR ← (number) $dc03
Adding pointer type conversion cast (byte*) CIA1_INTERRUPT in (byte*) CIA1_INTERRUPT ← (number) $dc0d
Adding pointer type conversion cast (byte*) CIA2_PORT_A in (byte*) CIA2_PORT_A ← (number) $dd00
Adding pointer type conversion cast (byte*) CIA2_PORT_B in (byte*) CIA2_PORT_B ← (number) $dd01
Adding pointer type conversion cast (byte*) CIA2_PORT_A_DDR in (byte*) CIA2_PORT_A_DDR ← (number) $dd02
Adding pointer type conversion cast (byte*) CIA2_PORT_B_DDR in (byte*) CIA2_PORT_B_DDR ← (number) $dd03
Adding pointer type conversion cast (byte*) CIA2_INTERRUPT in (byte*) CIA2_INTERRUPT ← (number) $dd0d
Adding pointer type conversion cast (void()**) KERNEL_IRQ in (void()**) KERNEL_IRQ ← (number) $314
Adding pointer type conversion cast (void()**) HARDWARE_IRQ in (void()**) HARDWARE_IRQ ← (number) $fffe
Adding pointer type conversion cast (byte*) SCREEN in (byte*) SCREEN ← (number) $400
Adding pointer type conversion cast (byte*) SPRITE_DATA in (byte*) SPRITE_DATA ← (number) $2000
Adding pointer type conversion cast (word*) VXSIN in (word*) VXSIN ← (number) $2200
Adding pointer type conversion cast (word*) VYSIN in (word*) VYSIN ← (number) $2280
Adding pointer type conversion cast (byte*) *(main::$24 + main::$16) in *((byte**) main::$24 + (byte~) main::$16) ← (number) 0
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) mul8u::@5
Culled Empty Block (label) mul8u::@6
Culled Empty Block (label) mul8u::@8
Culled Empty Block (label) mul8u::@9
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) main::@8
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::@12
Culled Empty Block (label) @10
Culled Empty Block (label) getCharToProcess::@6
Culled Empty Block (label) getCharToProcess::@2
Culled Empty Block (label) @11
Culled Empty Block (label) startProcessing::@6
Culled Empty Block (label) startProcessing::@7
Culled Empty Block (label) processChars::@9
Culled Empty Block (label) processChars::@11
Culled Empty Block (label) initSquareTables::@5
Culled Empty Block (label) initSquareTables::@6
Culled Empty Block (label) initSquareTables::@12
Culled Empty Block (label) initSquareTables::@13
Culled Empty Block (label) initSquareTables::@14
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) setupRasterIrq::@4
Unwinding list assignment { (byte) main::$9_x, (byte) main::$9_y, (word) main::$9_dist } ← { (byte) getCharToProcess::return_x, (byte) getCharToProcess::return_y, (word) getCharToProcess::return_dist }
Unwinding list assignment { (byte) getCharToProcess::return_x#0, (byte) getCharToProcess::return_y#0, (word) getCharToProcess::return_dist#0 } ← { (byte) getCharToProcess::return_x#2, (byte) getCharToProcess::return_y#2, (word) getCharToProcess::return_dist#2 }
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) PROCPORT_DDR#0 ← ((byte*)) (number) 0
(byte) PROCPORT_DDR_MEMORY_MASK#0 ← (number) 7
(byte*) PROCPORT#0 ← ((byte*)) (number) 1
(byte) PROCPORT_RAM_IO#0 ← (number) $35
(byte) PROCPORT_RAM_CHARROM#0 ← (number) $31
(byte*) CHARGEN#0 ← ((byte*)) (number) $d000
(byte) BORDER_XPOS_LEFT#0 ← (number) $18
(word) BORDER_XPOS_RIGHT#0 ← (number) $158
(byte) BORDER_YPOS_TOP#0 ← (number) $32
(byte) BORDER_YPOS_BOTTOM#0 ← (number) $fa
(word) SPRITE_PTRS#0 ← (number) $3f8
(byte*) SPRITES_XPOS#0 ← ((byte*)) (number) $d000
(byte*) SPRITES_YPOS#0 ← ((byte*)) (number) $d001
(byte*) SPRITES_XMSB#0 ← ((byte*)) (number) $d010
(byte*) RASTER#0 ← ((byte*)) (number) $d012
(byte*) SPRITES_ENABLE#0 ← ((byte*)) (number) $d015
(byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (number) $d017
(byte*) SPRITES_MC#0 ← ((byte*)) (number) $d01c
(byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (number) $d01d
(byte*) SPRITES_COLS#0 ← ((byte*)) (number) $d027
(byte*) VIC_CONTROL#0 ← ((byte*)) (number) $d011
(byte*) IRQ_STATUS#0 ← ((byte*)) (number) $d019
(byte*) IRQ_ENABLE#0 ← ((byte*)) (number) $d01a
(byte) IRQ_RASTER#0 ← (number) 1
(byte*) COLS#0 ← ((byte*)) (number) $d800
(byte*) CIA1_INTERRUPT#0 ← ((byte*)) (number) $dc0d
(byte) CIA_INTERRUPT_CLEAR#0 ← (number) $7f
(void()**) HARDWARE_IRQ#0 ← ((void()**)) (number) $fffe
(byte) LIGHT_BLUE#0 ← (number) $e
to:@9
mul8u: scope:[mul8u] from initSquareTables::@11 initSquareTables::@4
(byte) mul8u::a#6 ← phi( initSquareTables::@11/(byte) mul8u::a#2 initSquareTables::@4/(byte) mul8u::a#1 )
(byte) mul8u::b#2 ← phi( initSquareTables::@11/(byte) mul8u::b#1 initSquareTables::@4/(byte) mul8u::b#0 )
(word) mul8u::res#0 ← (number) 0
(word) mul8u::mb#0 ← (byte) mul8u::b#2
to:mul8u::@1
mul8u::@1: scope:[mul8u] from mul8u mul8u::@4
(word) mul8u::mb#5 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@4/(word) mul8u::mb#1 )
(word) mul8u::res#4 ← phi( mul8u/(word) mul8u::res#0 mul8u::@4/(word) mul8u::res#6 )
(byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@4/(byte) mul8u::a#0 )
(bool~) mul8u::$0 ← (byte) mul8u::a#3 != (number) 0
if((bool~) mul8u::$0) goto mul8u::@2
to:mul8u::@3
mul8u::@2: scope:[mul8u] from mul8u::@1
(word) mul8u::res#5 ← phi( mul8u::@1/(word) mul8u::res#4 )
(word) mul8u::mb#4 ← phi( mul8u::@1/(word) mul8u::mb#5 )
(byte) mul8u::a#4 ← phi( mul8u::@1/(byte) mul8u::a#3 )
(number~) mul8u::$1 ← (byte) mul8u::a#4 & (number) 1
(bool~) mul8u::$2 ← (number~) mul8u::$1 != (number) 0
(bool~) mul8u::$3 ← ! (bool~) mul8u::$2
if((bool~) mul8u::$3) goto mul8u::@4
to:mul8u::@7
mul8u::@3: scope:[mul8u] from mul8u::@1
(word) mul8u::res#2 ← phi( mul8u::@1/(word) mul8u::res#4 )
(word) mul8u::return#0 ← (word) mul8u::res#2
to:mul8u::@return
mul8u::@4: scope:[mul8u] from mul8u::@2 mul8u::@7
(word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#5 mul8u::@7/(word) mul8u::res#1 )
(word) mul8u::mb#2 ← phi( mul8u::@2/(word) mul8u::mb#4 mul8u::@7/(word) mul8u::mb#3 )
(byte) mul8u::a#5 ← phi( mul8u::@2/(byte) mul8u::a#4 mul8u::@7/(byte) mul8u::a#7 )
(byte~) mul8u::$5 ← (byte) mul8u::a#5 >> (number) 1
(byte) mul8u::a#0 ← (byte~) mul8u::$5
(word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1
(word) mul8u::mb#1 ← (word~) mul8u::$6
to:mul8u::@1
mul8u::@7: scope:[mul8u] from mul8u::@2
(byte) mul8u::a#7 ← phi( mul8u::@2/(byte) mul8u::a#4 )
(word) mul8u::mb#3 ← phi( mul8u::@2/(word) mul8u::mb#4 )
(word) mul8u::res#3 ← phi( mul8u::@2/(word) mul8u::res#5 )
(word~) mul8u::$4 ← (word) mul8u::res#3 + (word) mul8u::mb#3
(word) mul8u::res#1 ← (word~) mul8u::$4
to:mul8u::@4
mul8u::@return: scope:[mul8u] from mul8u::@3
(word) mul8u::return#4 ← phi( mul8u::@3/(word) mul8u::return#0 )
(word) mul8u::return#1 ← (word) mul8u::return#4
return
to:@return
@9: scope:[] from @begin
(byte*) SCREEN#0 ← ((byte*)) (number) $400
(byte*) SPRITE_DATA#0 ← ((byte*)) (number) $2000
(word*) VXSIN#0 ← ((word*)) (number) $2200
(word*) VYSIN#0 ← ((word*)) (number) $2280
(byte[$3e8]) SCREEN_COPY#0 ← { fill( $3e8, 0) }
(byte) NUM_PROCESSING#0 ← (number) 8
(word) NOT_FOUND#0 ← (number) $ffff
(byte) STATUS_FREE#0 ← (number) 0
(byte) STATUS_NEW#0 ← (number) 1
(byte) STATUS_PROCESSING#0 ← (number) 2
(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 ← { fill( NUM_PROCESSING#0, 0) }
to:@12
main: scope:[main] from @18
call initSquareTables
to:main::@13
main::@13: scope:[main] from main
(byte*) main::src#0 ← (byte*) SCREEN#0
(byte*) main::dst#0 ← (byte[$3e8]) SCREEN_COPY#0
to:main::@1
main::@1: scope:[main] from main::@1 main::@13
(byte*) main::dst#2 ← phi( main::@1/(byte*) main::dst#1 main::@13/(byte*) main::dst#0 )
(byte*) main::src#2 ← phi( main::@1/(byte*) main::src#1 main::@13/(byte*) main::src#0 )
*((byte*) main::dst#2) ← *((byte*) main::src#2)
(byte*) main::src#1 ← ++ (byte*) main::src#2
(byte*) main::dst#1 ← ++ (byte*) main::dst#2
(byte*~) main::$5 ← (byte*) SCREEN#0 + (number) $3e8
(bool~) main::$6 ← (byte*) main::src#1 != (byte*~) main::$5
if((bool~) main::$6) goto main::@1
to:main::@2
main::@2: scope:[main] from main::@1
(number~) main::$7 ← (byte) NUM_PROCESSING#0 - (number) 1
(byte) main::i#0 ← (byte) 0
to:main::@3
main::@3: scope:[main] from main::@2 main::@3
(byte) main::i#2 ← phi( main::@2/(byte) main::i#0 main::@3/(byte) main::i#1 )
(byte~) main::$16 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
(word*) main::$17 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
*((word*) main::$17 + (byte~) main::$16) ← (number) 0
(word*) main::$18 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
*((word*) main::$18 + (byte~) main::$16) ← (number) 0
(word*) main::$19 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
*((word*) main::$19 + (byte~) main::$16) ← (number) 0
(word*) main::$20 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
*((word*) main::$20 + (byte~) main::$16) ← (number) 0
(byte*) main::$21 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
*((byte*) main::$21 + (byte~) main::$16) ← (number) 0
(byte*) main::$22 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
*((byte*) main::$22 + (byte~) main::$16) ← (number) 0
(byte*) main::$23 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
*((byte*) main::$23 + (byte~) main::$16) ← (byte) STATUS_FREE#0
(byte**) main::$24 ← (byte**)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
*((byte**) main::$24 + (byte~) main::$16) ← ((byte*)) (number) 0
(byte) main::i#1 ← (byte) main::i#2 + rangenext(0,main::$7)
(bool~) main::$8 ← (byte) main::i#1 != rangelast(0,main::$7)
if((bool~) main::$8) goto main::@3
to:main::@4
main::@4: scope:[main] from main::@3
call initSprites
to:main::@14
main::@14: scope:[main] from main::@4
(void()*~) main::$2 ← & interrupt(HARDWARE_ALL)(void()) irqTop()
(word) setupRasterIrq::raster#0 ← (byte) RASTER_IRQ_TOP#0
(void()*) setupRasterIrq::irqRoutine#0 ← (void()*~) main::$2
call setupRasterIrq
to:main::@15
main::@15: scope:[main] from main::@14
to:main::@5
main::@5: scope:[main] from main::@15 main::@17
call getCharToProcess
(byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#2
(byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#2
(word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#2
to:main::@16
main::@16: scope:[main] from main::@5
(word) getCharToProcess::return_dist#3 ← phi( main::@5/(word) getCharToProcess::return_dist#0 )
(byte) getCharToProcess::return_y#3 ← phi( main::@5/(byte) getCharToProcess::return_y#0 )
(byte) getCharToProcess::return_x#3 ← phi( main::@5/(byte) getCharToProcess::return_x#0 )
(byte) main::$9_x ← (byte) getCharToProcess::return_x#3
(byte) main::$9_y ← (byte) getCharToProcess::return_y#3
(word) main::$9_dist ← (word) getCharToProcess::return_dist#3
(byte) main::center_x#0 ← (byte) main::$9_x
(byte) main::center_y#0 ← (byte) main::$9_y
(word) main::center_dist#0 ← (word) main::$9_dist
(bool~) main::$10 ← (word) main::center_dist#0 == (word) NOT_FOUND#0
(bool~) main::$11 ← ! (bool~) main::$10
if((bool~) main::$11) goto main::@6
to:main::@7
main::@6: scope:[main] from main::@16
(word) main::center_dist#1 ← phi( main::@16/(word) main::center_dist#0 )
(byte) main::center_y#1 ← phi( main::@16/(byte) main::center_y#0 )
(byte) main::center_x#1 ← phi( main::@16/(byte) main::center_x#0 )
(byte) startProcessing::center_x#0 ← (byte) main::center_x#1
(byte) startProcessing::center_y#0 ← (byte) main::center_y#1
(word) startProcessing::center_dist#0 ← (word) main::center_dist#1
call startProcessing
to:main::@17
main::@17: scope:[main] from main::@6
if(true) goto main::@5
to:main::@7
main::@7: scope:[main] from main::@16 main::@17
(byte*~) main::$4 ← (byte*) SCREEN#0 + (number) $3e7
*((byte*~) main::$4) ← (byte) '.'
to:main::@11
main::@11: scope:[main] from main::@11 main::@7
(byte*~) main::$15 ← (byte*) COLS#0 + (number) $3e7
*((byte*~) main::$15) ← ++ *((byte*~) main::$15)
if(true) goto main::@11
to:main::@return
main::@return: scope:[main] from main::@11
return
to:@return
getCharToProcess: scope:[getCharToProcess] from main::@5
(byte) getCharToProcess::closest_x#0 ← (number) 0
(byte) getCharToProcess::closest_y#0 ← (number) 0
(word) getCharToProcess::closest_dist#0 ← (word) NOT_FOUND#0
(byte*) getCharToProcess::screen_line#0 ← (byte[$3e8]) SCREEN_COPY#0
(byte) getCharToProcess::y#0 ← (byte) 0
to:getCharToProcess::@3
getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess getCharToProcess::@9
(byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) getCharToProcess::closest_y#0 getCharToProcess::@9/(byte) getCharToProcess::closest_y#5 )
(byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) getCharToProcess::closest_x#0 getCharToProcess::@9/(byte) getCharToProcess::closest_x#5 )
(word) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(word) getCharToProcess::closest_dist#0 getCharToProcess::@9/(word) getCharToProcess::closest_dist#6 )
(byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) getCharToProcess::y#0 getCharToProcess::@9/(byte) getCharToProcess::y#1 )
(byte*) getCharToProcess::screen_line#4 ← phi( getCharToProcess/(byte*) getCharToProcess::screen_line#0 getCharToProcess::@9/(byte*) getCharToProcess::screen_line#1 )
(byte) getCharToProcess::x#0 ← (byte) 0
to:getCharToProcess::@4
getCharToProcess::@4: scope:[getCharToProcess] from getCharToProcess::@3 getCharToProcess::@5
(byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@3/(byte) getCharToProcess::closest_y#9 getCharToProcess::@5/(byte) getCharToProcess::closest_y#6 )
(byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@3/(byte) getCharToProcess::closest_x#9 getCharToProcess::@5/(byte) getCharToProcess::closest_x#6 )
(word) getCharToProcess::closest_dist#5 ← phi( getCharToProcess::@3/(word) getCharToProcess::closest_dist#8 getCharToProcess::@5/(word) getCharToProcess::closest_dist#9 )
(byte) getCharToProcess::y#5 ← phi( getCharToProcess::@3/(byte) getCharToProcess::y#7 getCharToProcess::@5/(byte) getCharToProcess::y#6 )
(byte) getCharToProcess::x#2 ← phi( getCharToProcess::@3/(byte) getCharToProcess::x#0 getCharToProcess::@5/(byte) getCharToProcess::x#1 )
(byte*) getCharToProcess::screen_line#2 ← phi( getCharToProcess::@3/(byte*) getCharToProcess::screen_line#4 getCharToProcess::@5/(byte*) getCharToProcess::screen_line#5 )
(bool~) getCharToProcess::$2 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) != (byte) ' '
(bool~) getCharToProcess::$3 ← ! (bool~) getCharToProcess::$2
if((bool~) getCharToProcess::$3) goto getCharToProcess::@5
to:getCharToProcess::@7
getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@4 getCharToProcess::@7 getCharToProcess::@8
(byte) getCharToProcess::closest_y#6 ← phi( getCharToProcess::@4/(byte) getCharToProcess::closest_y#7 getCharToProcess::@7/(byte) getCharToProcess::closest_y#8 getCharToProcess::@8/(byte) getCharToProcess::closest_y#1 )
(byte) getCharToProcess::closest_x#6 ← phi( getCharToProcess::@4/(byte) getCharToProcess::closest_x#7 getCharToProcess::@7/(byte) getCharToProcess::closest_x#8 getCharToProcess::@8/(byte) getCharToProcess::closest_x#1 )
(word) getCharToProcess::closest_dist#9 ← phi( getCharToProcess::@4/(word) getCharToProcess::closest_dist#5 getCharToProcess::@7/(word) getCharToProcess::closest_dist#2 getCharToProcess::@8/(word) getCharToProcess::closest_dist#1 )
(byte) getCharToProcess::y#6 ← phi( getCharToProcess::@4/(byte) getCharToProcess::y#5 getCharToProcess::@7/(byte) getCharToProcess::y#2 getCharToProcess::@8/(byte) getCharToProcess::y#3 )
(byte*) getCharToProcess::screen_line#5 ← phi( getCharToProcess::@4/(byte*) getCharToProcess::screen_line#2 getCharToProcess::@7/(byte*) getCharToProcess::screen_line#6 getCharToProcess::@8/(byte*) getCharToProcess::screen_line#7 )
(byte) getCharToProcess::x#3 ← phi( getCharToProcess::@4/(byte) getCharToProcess::x#2 getCharToProcess::@7/(byte) getCharToProcess::x#4 getCharToProcess::@8/(byte) getCharToProcess::x#5 )
(byte) getCharToProcess::x#1 ← (byte) getCharToProcess::x#3 + rangenext(0,$27)
(bool~) getCharToProcess::$7 ← (byte) getCharToProcess::x#1 != rangelast(0,$27)
if((bool~) getCharToProcess::$7) goto getCharToProcess::@4
to:getCharToProcess::@9
getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@4
(byte) getCharToProcess::closest_y#8 ← phi( getCharToProcess::@4/(byte) getCharToProcess::closest_y#7 )
(byte) getCharToProcess::closest_x#8 ← phi( getCharToProcess::@4/(byte) getCharToProcess::closest_x#7 )
(byte*) getCharToProcess::screen_line#6 ← phi( getCharToProcess::@4/(byte*) getCharToProcess::screen_line#2 )
(word) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@4/(word) getCharToProcess::closest_dist#5 )
(byte) getCharToProcess::y#2 ← phi( getCharToProcess::@4/(byte) getCharToProcess::y#5 )
(byte) getCharToProcess::x#4 ← phi( getCharToProcess::@4/(byte) getCharToProcess::x#2 )
(byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#4 * (const byte) SIZEOF_WORD
(byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#2 * (const byte) SIZEOF_WORD
(word~) getCharToProcess::$4 ← *((word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14)
(word) getCharToProcess::dist#0 ← (word~) getCharToProcess::$4
(bool~) getCharToProcess::$5 ← (word) getCharToProcess::dist#0 < (word) getCharToProcess::closest_dist#2
(bool~) getCharToProcess::$6 ← ! (bool~) getCharToProcess::$5
if((bool~) getCharToProcess::$6) goto getCharToProcess::@5
to:getCharToProcess::@8
getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7
(byte*) getCharToProcess::screen_line#7 ← phi( getCharToProcess::@7/(byte*) getCharToProcess::screen_line#6 )
(word) getCharToProcess::dist#1 ← phi( getCharToProcess::@7/(word) getCharToProcess::dist#0 )
(byte) getCharToProcess::y#3 ← phi( getCharToProcess::@7/(byte) getCharToProcess::y#2 )
(byte) getCharToProcess::x#5 ← phi( getCharToProcess::@7/(byte) getCharToProcess::x#4 )
(byte) getCharToProcess::closest_x#1 ← (byte) getCharToProcess::x#5
(byte) getCharToProcess::closest_y#1 ← (byte) getCharToProcess::y#3
(word) getCharToProcess::closest_dist#1 ← (word) getCharToProcess::dist#1
to:getCharToProcess::@5
getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@5
(byte) getCharToProcess::closest_y#5 ← phi( getCharToProcess::@5/(byte) getCharToProcess::closest_y#6 )
(byte) getCharToProcess::closest_x#5 ← phi( getCharToProcess::@5/(byte) getCharToProcess::closest_x#6 )
(word) getCharToProcess::closest_dist#6 ← phi( getCharToProcess::@5/(word) getCharToProcess::closest_dist#9 )
(byte) getCharToProcess::y#4 ← phi( getCharToProcess::@5/(byte) getCharToProcess::y#6 )
(byte*) getCharToProcess::screen_line#3 ← phi( getCharToProcess::@5/(byte*) getCharToProcess::screen_line#5 )
(byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#3 + (number) $28
(byte) getCharToProcess::y#1 ← (byte) getCharToProcess::y#4 + rangenext(0,$18)
(bool~) getCharToProcess::$8 ← (byte) getCharToProcess::y#1 != rangelast(0,$18)
if((bool~) getCharToProcess::$8) goto getCharToProcess::@3
to:getCharToProcess::@10
getCharToProcess::@10: scope:[getCharToProcess] from getCharToProcess::@9
(byte) getCharToProcess::closest_y#4 ← phi( getCharToProcess::@9/(byte) getCharToProcess::closest_y#5 )
(byte) getCharToProcess::closest_x#4 ← phi( getCharToProcess::@9/(byte) getCharToProcess::closest_x#5 )
(word) getCharToProcess::closest_dist#3 ← phi( getCharToProcess::@9/(word) getCharToProcess::closest_dist#6 )
(bool~) getCharToProcess::$0 ← (word) getCharToProcess::closest_dist#3 != (word) NOT_FOUND#0
(bool~) getCharToProcess::$1 ← ! (bool~) getCharToProcess::$0
if((bool~) getCharToProcess::$1) goto getCharToProcess::@1
to:getCharToProcess::@11
getCharToProcess::@1: scope:[getCharToProcess] from getCharToProcess::@10 getCharToProcess::@11
(word) getCharToProcess::closest_dist#4 ← phi( getCharToProcess::@10/(word) getCharToProcess::closest_dist#3 getCharToProcess::@11/(word) getCharToProcess::closest_dist#7 )
(byte) getCharToProcess::closest_y#2 ← phi( getCharToProcess::@10/(byte) getCharToProcess::closest_y#4 getCharToProcess::@11/(byte) getCharToProcess::closest_y#3 )
(byte) getCharToProcess::closest_x#2 ← phi( getCharToProcess::@10/(byte) getCharToProcess::closest_x#4 getCharToProcess::@11/(byte) getCharToProcess::closest_x#3 )
(byte) getCharToProcess::return_x#1 ← (byte) getCharToProcess::closest_x#2
(byte) getCharToProcess::return_y#1 ← (byte) getCharToProcess::closest_y#2
(word) getCharToProcess::return_dist#1 ← (word) getCharToProcess::closest_dist#4
to:getCharToProcess::@return
getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@10
(word) getCharToProcess::closest_dist#7 ← phi( getCharToProcess::@10/(word) getCharToProcess::closest_dist#3 )
(byte) getCharToProcess::closest_x#3 ← phi( getCharToProcess::@10/(byte) getCharToProcess::closest_x#4 )
(byte) getCharToProcess::closest_y#3 ← phi( getCharToProcess::@10/(byte) getCharToProcess::closest_y#4 )
(word~) getCharToProcess::$9 ← ((word)) (byte) getCharToProcess::closest_y#3
(number~) getCharToProcess::$10 ← (word~) getCharToProcess::$9 * (number) $28
(byte*~) getCharToProcess::$11 ← (byte[$3e8]) SCREEN_COPY#0 + (number~) getCharToProcess::$10
(byte*~) getCharToProcess::$12 ← (byte*~) getCharToProcess::$11 + (byte) getCharToProcess::closest_x#3
*((byte*~) getCharToProcess::$12) ← (byte) ' '
to:getCharToProcess::@1
getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@1
(word) getCharToProcess::return_dist#4 ← phi( getCharToProcess::@1/(word) getCharToProcess::return_dist#1 )
(byte) getCharToProcess::return_y#4 ← phi( getCharToProcess::@1/(byte) getCharToProcess::return_y#1 )
(byte) getCharToProcess::return_x#4 ← phi( getCharToProcess::@1/(byte) getCharToProcess::return_x#1 )
(byte) getCharToProcess::return_x#2 ← (byte) getCharToProcess::return_x#4
(byte) getCharToProcess::return_y#2 ← (byte) getCharToProcess::return_y#4
(word) getCharToProcess::return_dist#2 ← (word) getCharToProcess::return_dist#4
return
to:@return
startProcessing: scope:[startProcessing] from main::@6
(byte) startProcessing::center_x#9 ← phi( main::@6/(byte) startProcessing::center_x#0 )
(byte) startProcessing::center_y#9 ← phi( main::@6/(byte) startProcessing::center_y#0 )
(byte) startProcessing::freeIdx#0 ← (number) $ff
to:startProcessing::@1
startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@4
(byte) startProcessing::center_x#8 ← phi( startProcessing/(byte) startProcessing::center_x#9 startProcessing::@4/(byte) startProcessing::center_x#3 )
(byte) startProcessing::center_y#8 ← phi( startProcessing/(byte) startProcessing::center_y#9 startProcessing::@4/(byte) startProcessing::center_y#3 )
(byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) startProcessing::freeIdx#0 startProcessing::@4/(byte) startProcessing::freeIdx#2 )
(number~) startProcessing::$23 ← (byte) NUM_PROCESSING#0 - (number) 1
(byte) startProcessing::i#0 ← (byte) 0
to:startProcessing::@2
startProcessing::@2: scope:[startProcessing] from startProcessing::@1 startProcessing::@3
(byte) startProcessing::center_x#7 ← phi( startProcessing::@1/(byte) startProcessing::center_x#8 startProcessing::@3/(byte) startProcessing::center_x#5 )
(byte) startProcessing::center_y#7 ← phi( startProcessing::@1/(byte) startProcessing::center_y#8 startProcessing::@3/(byte) startProcessing::center_y#5 )
(byte) startProcessing::freeIdx#5 ← phi( startProcessing::@1/(byte) startProcessing::freeIdx#6 startProcessing::@3/(byte) startProcessing::freeIdx#4 )
(byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) startProcessing::i#0 startProcessing::@3/(byte) startProcessing::i#1 )
(byte~) startProcessing::$29 ← (byte) startProcessing::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
(byte*) startProcessing::$39 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
(bool~) startProcessing::$24 ← *((byte*) startProcessing::$39 + (byte~) startProcessing::$29) == (byte) STATUS_FREE#0
(bool~) startProcessing::$25 ← ! (bool~) startProcessing::$24
if((bool~) startProcessing::$25) goto startProcessing::@3
to:startProcessing::@5
startProcessing::@3: scope:[startProcessing] from startProcessing::@2
(byte) startProcessing::center_x#5 ← phi( startProcessing::@2/(byte) startProcessing::center_x#7 )
(byte) startProcessing::center_y#5 ← phi( startProcessing::@2/(byte) startProcessing::center_y#7 )
(byte) startProcessing::freeIdx#4 ← phi( startProcessing::@2/(byte) startProcessing::freeIdx#5 )
(byte) startProcessing::i#3 ← phi( startProcessing::@2/(byte) startProcessing::i#2 )
(byte) startProcessing::i#1 ← (byte) startProcessing::i#3 + rangenext(0,startProcessing::$23)
(bool~) startProcessing::$26 ← (byte) startProcessing::i#1 != rangelast(0,startProcessing::$23)
if((bool~) startProcessing::$26) goto startProcessing::@2
to:startProcessing::@4
startProcessing::@5: scope:[startProcessing] from startProcessing::@2
(byte) startProcessing::center_x#6 ← phi( startProcessing::@2/(byte) startProcessing::center_x#7 )
(byte) startProcessing::center_y#6 ← phi( startProcessing::@2/(byte) startProcessing::center_y#7 )
(byte) startProcessing::i#4 ← phi( startProcessing::@2/(byte) startProcessing::i#2 )
(byte) startProcessing::freeIdx#1 ← (byte) startProcessing::i#4
to:startProcessing::@4
startProcessing::@4: scope:[startProcessing] from startProcessing::@3 startProcessing::@5
(byte) startProcessing::center_x#3 ← phi( startProcessing::@3/(byte) startProcessing::center_x#5 startProcessing::@5/(byte) startProcessing::center_x#6 )
(byte) startProcessing::center_y#3 ← phi( startProcessing::@3/(byte) startProcessing::center_y#5 startProcessing::@5/(byte) startProcessing::center_y#6 )
(byte) startProcessing::freeIdx#2 ← phi( startProcessing::@3/(byte) startProcessing::freeIdx#4 startProcessing::@5/(byte) startProcessing::freeIdx#1 )
(bool~) startProcessing::$27 ← (byte) startProcessing::freeIdx#2 == (number) $ff
if((bool~) startProcessing::$27) goto startProcessing::@1
to:startProcessing::@8
startProcessing::@8: scope:[startProcessing] from startProcessing::@4
(byte) startProcessing::center_x#1 ← phi( startProcessing::@4/(byte) startProcessing::center_x#3 )
(byte) startProcessing::center_y#1 ← phi( startProcessing::@4/(byte) startProcessing::center_y#3 )
(byte) startProcessing::freeIdx#3 ← phi( startProcessing::@4/(byte) startProcessing::freeIdx#2 )
(byte) startProcessing::spriteIdx#0 ← (byte) startProcessing::freeIdx#3
(word~) startProcessing::$0 ← ((word)) (byte) startProcessing::center_y#1
(number~) startProcessing::$1 ← (word~) startProcessing::$0 * (number) $28
(byte*~) startProcessing::$2 ← (byte*) SCREEN#0 + (number~) startProcessing::$1
(byte*~) startProcessing::$3 ← (byte*~) startProcessing::$2 + (byte) startProcessing::center_x#1
(byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$3
(word~) startProcessing::$4 ← ((word)) (byte) startProcessing::spriteIdx#0
(number~) startProcessing::$5 ← (word~) startProcessing::$4 * (number) $40
(byte*~) startProcessing::$6 ← (byte*) SPRITE_DATA#0 + (number~) startProcessing::$5
(byte*) startProcessing::spriteData#0 ← (byte*~) startProcessing::$6
(byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0)
(word~) startProcessing::$7 ← ((word)) (byte) startProcessing::ch#0
(number~) startProcessing::$8 ← (word~) startProcessing::$7 * (number) 8
(byte*~) startProcessing::$9 ← (byte*) CHARGEN#0 + (number~) startProcessing::$8
(byte*) startProcessing::chargenData#0 ← (byte*~) startProcessing::$9
asm { sei }
*((byte*) PROCPORT#0) ← (byte) PROCPORT_RAM_CHARROM#0
(byte) startProcessing::i1#0 ← (byte) 0
to:startProcessing::@9
startProcessing::@9: scope:[startProcessing] from startProcessing::@8 startProcessing::@9
(byte*) startProcessing::screenPtr#2 ← phi( startProcessing::@8/(byte*) startProcessing::screenPtr#0 startProcessing::@9/(byte*) startProcessing::screenPtr#2 )
(byte) startProcessing::spriteIdx#2 ← phi( startProcessing::@8/(byte) startProcessing::spriteIdx#0 startProcessing::@9/(byte) startProcessing::spriteIdx#2 )
(byte) startProcessing::center_y#4 ← phi( startProcessing::@8/(byte) startProcessing::center_y#1 startProcessing::@9/(byte) startProcessing::center_y#4 )
(byte) startProcessing::center_x#4 ← phi( startProcessing::@8/(byte) startProcessing::center_x#1 startProcessing::@9/(byte) startProcessing::center_x#4 )
(byte) startProcessing::i1#2 ← phi( startProcessing::@8/(byte) startProcessing::i1#0 startProcessing::@9/(byte) startProcessing::i1#1 )
(byte*) startProcessing::spriteData#2 ← phi( startProcessing::@8/(byte*) startProcessing::spriteData#0 startProcessing::@9/(byte*) startProcessing::spriteData#1 )
(byte*) startProcessing::chargenData#2 ← phi( startProcessing::@8/(byte*) startProcessing::chargenData#0 startProcessing::@9/(byte*) startProcessing::chargenData#1 )
*((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2)
(byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (number) 3
(byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2
(byte) startProcessing::i1#1 ← (byte) startProcessing::i1#2 + rangenext(0,7)
(bool~) startProcessing::$28 ← (byte) startProcessing::i1#1 != rangelast(0,7)
if((bool~) startProcessing::$28) goto startProcessing::@9
to:startProcessing::@10
startProcessing::@10: scope:[startProcessing] from startProcessing::@9
(byte*) startProcessing::screenPtr#1 ← phi( startProcessing::@9/(byte*) startProcessing::screenPtr#2 )
(byte) startProcessing::spriteIdx#1 ← phi( startProcessing::@9/(byte) startProcessing::spriteIdx#2 )
(byte) startProcessing::center_y#2 ← phi( startProcessing::@9/(byte) startProcessing::center_y#4 )
(byte) startProcessing::center_x#2 ← phi( startProcessing::@9/(byte) startProcessing::center_x#4 )
*((byte*) PROCPORT#0) ← (byte) PROCPORT_RAM_IO#0
asm { cli }
(word~) startProcessing::$10 ← ((word)) (byte) startProcessing::center_x#2
(number~) startProcessing::$11 ← (word~) startProcessing::$10 * (number) 8
(number~) startProcessing::$12 ← (byte) BORDER_XPOS_LEFT#0 + (number~) startProcessing::$11
(number~) startProcessing::$13 ← (number~) startProcessing::$12 << (number) 4
(word) startProcessing::spriteX#0 ← (number~) startProcessing::$13
(word~) startProcessing::$14 ← ((word)) (byte) startProcessing::center_y#2
(number~) startProcessing::$15 ← (word~) startProcessing::$14 * (number) 8
(number~) startProcessing::$16 ← (byte) BORDER_YPOS_TOP#0 + (number~) startProcessing::$15
(number~) startProcessing::$17 ← (number~) startProcessing::$16 << (number) 4
(word) startProcessing::spriteY#0 ← (number~) startProcessing::$17
(byte*~) startProcessing::$18 ← (byte*) SPRITE_DATA#0 / (number) $40
(byte~) startProcessing::$19 ← ((byte)) (byte*~) startProcessing::$18
(byte~) startProcessing::$20 ← (byte~) startProcessing::$19 + (byte) startProcessing::spriteIdx#1
(byte) startProcessing::spritePtr#0 ← (byte~) startProcessing::$20
(number~) startProcessing::$21 ← (byte) startProcessing::spriteIdx#1 * (number) 8
(word~) startProcessing::$22 ← ((word)) (number~) startProcessing::$21
(byte~) startProcessing::$30 ← (byte) startProcessing::spriteIdx#1 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
(word*) startProcessing::$31 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
*((word*) startProcessing::$31 + (byte~) startProcessing::$30) ← (word) startProcessing::spriteX#0
(word*) startProcessing::$32 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
*((word*) startProcessing::$32 + (byte~) startProcessing::$30) ← (word) startProcessing::spriteY#0
(word*) startProcessing::$33 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
*((word*) startProcessing::$33 + (byte~) startProcessing::$30) ← (word~) startProcessing::$22
(word*) startProcessing::$34 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
*((word*) startProcessing::$34 + (byte~) startProcessing::$30) ← (number) $3c
(byte*) startProcessing::$35 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
*((byte*) startProcessing::$35 + (byte~) startProcessing::$30) ← (byte) startProcessing::spriteIdx#1
(byte*) startProcessing::$36 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
*((byte*) startProcessing::$36 + (byte~) startProcessing::$30) ← (byte) startProcessing::spritePtr#0
(byte*) startProcessing::$37 ← (byte*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
*((byte*) startProcessing::$37 + (byte~) startProcessing::$30) ← (byte) STATUS_NEW#0
(byte**) startProcessing::$38 ← (byte**)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
*((byte**) startProcessing::$38 + (byte~) startProcessing::$30) ← (byte*) startProcessing::screenPtr#1
to:startProcessing::@return
startProcessing::@return: scope:[startProcessing] from startProcessing::@10
return
to:@return
@12: scope:[] from @9
(number~) $0 ← (byte) BORDER_XPOS_LEFT#0 - (number) 8
(word~) $1 ← ((word)) (number~) $0
(word~) $2 ← (word~) $1 << (number) 4
(word) XPOS_LEFTMOST#0 ← (word~) $2
(word~) $3 ← ((word)) (word) BORDER_XPOS_RIGHT#0
(word~) $4 ← (word~) $3 << (number) 4
(word) XPOS_RIGHTMOST#0 ← (word~) $4
(number~) $5 ← (byte) BORDER_YPOS_TOP#0 - (number) 8
(word~) $6 ← ((word)) (number~) $5
(word~) $7 ← (word~) $6 << (number) 4
(word) YPOS_TOPMOST#0 ← (word~) $7
(word~) $8 ← ((word)) (byte) BORDER_YPOS_BOTTOM#0
(word~) $9 ← (word~) $8 << (number) 4
(word) YPOS_BOTTOMMOST#0 ← (word~) $9
kickasm(location (word*) VXSIN#0) {{ .for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
}}
kickasm(location (word*) VYSIN#0) {{ .for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
}}
to:@13
processChars: scope:[processChars] from irqBottom::@2
(byte) processChars::numActive#0 ← (number) 0
(number~) processChars::$2 ← (byte) NUM_PROCESSING#0 - (number) 1
(byte) processChars::i#0 ← (byte) 0
to:processChars::@1
processChars::@1: scope:[processChars] from processChars processChars::@2
(byte) processChars::numActive#7 ← phi( processChars/(byte) processChars::numActive#0 processChars::@2/(byte) processChars::numActive#6 )
(byte) processChars::i#2 ← phi( processChars/(byte) processChars::i#0 processChars::@2/(byte) processChars::i#1 )
(byte~) processChars::$36 ← (byte) processChars::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
(struct ProcessingSprite*~) processChars::$3 ← (struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$36
(struct ProcessingSprite*) processChars::processing#0 ← (struct ProcessingSprite*~) processChars::$3
(byte*) processChars::$39 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
(number~) processChars::$4 ← (number) 1 << *((byte*) processChars::$39)
(byte) processChars::bitmask#0 ← (number~) processChars::$4
(byte*) processChars::$40 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
(bool~) processChars::$5 ← *((byte*) processChars::$40) != (byte) STATUS_FREE#0
(bool~) processChars::$6 ← ! (bool~) processChars::$5
if((bool~) processChars::$6) goto processChars::@2
to:processChars::@12
processChars::@2: scope:[processChars] from processChars::@1 processChars::@7
(byte) processChars::numActive#6 ← phi( processChars::@1/(byte) processChars::numActive#7 processChars::@7/(byte) processChars::numActive#1 )
(byte) processChars::i#3 ← phi( processChars::@1/(byte) processChars::i#2 processChars::@7/(byte) processChars::i#5 )
(byte) processChars::i#1 ← (byte) processChars::i#3 + rangenext(0,processChars::$2)
(bool~) processChars::$35 ← (byte) processChars::i#1 != rangelast(0,processChars::$2)
if((bool~) processChars::$35) goto processChars::@1
to:processChars::@14
processChars::@12: scope:[processChars] from processChars::@1
(byte) processChars::numActive#12 ← phi( processChars::@1/(byte) processChars::numActive#7 )
(byte) processChars::i#11 ← phi( processChars::@1/(byte) processChars::i#2 )
(byte) processChars::bitmask#5 ← phi( processChars::@1/(byte) processChars::bitmask#0 )
(struct ProcessingSprite*) processChars::processing#1 ← phi( processChars::@1/(struct ProcessingSprite*) processChars::processing#0 )
(byte*) processChars::$41 ← (byte*)(struct ProcessingSprite*) processChars::processing#1 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
(bool~) processChars::$7 ← *((byte*) processChars::$41) == (byte) STATUS_NEW#0
(bool~) processChars::$8 ← ! (bool~) processChars::$7
if((bool~) processChars::$8) goto processChars::@3
to:processChars::@13
processChars::@3: scope:[processChars] from processChars::@12 processChars::@13
(byte) processChars::numActive#11 ← phi( processChars::@12/(byte) processChars::numActive#12 processChars::@13/(byte) processChars::numActive#13 )
(byte) processChars::i#8 ← phi( processChars::@12/(byte) processChars::i#11 processChars::@13/(byte) processChars::i#12 )
(byte) processChars::bitmask#6 ← phi( processChars::@12/(byte) processChars::bitmask#5 processChars::@13/(byte) processChars::bitmask#1 )
(struct ProcessingSprite*) processChars::processing#2 ← phi( processChars::@12/(struct ProcessingSprite*) processChars::processing#1 processChars::@13/(struct ProcessingSprite*) processChars::processing#3 )
(word*) processChars::$42 ← (word*)(struct ProcessingSprite*) processChars::processing#2 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
(word~) processChars::$11 ← *((word*) processChars::$42) >> (number) 4
(word) processChars::xpos#0 ← (word~) processChars::$11
(byte~) processChars::$12 ← > (word) processChars::xpos#0
(bool~) processChars::$63 ← (number) 0 != (byte~) processChars::$12
if((bool~) processChars::$63) goto processChars::@4
to:processChars::@8
processChars::@13: scope:[processChars] from processChars::@12
(byte) processChars::numActive#13 ← phi( processChars::@12/(byte) processChars::numActive#12 )
(byte) processChars::i#12 ← phi( processChars::@12/(byte) processChars::i#11 )
(byte) processChars::bitmask#1 ← phi( processChars::@12/(byte) processChars::bitmask#5 )
(struct ProcessingSprite*) processChars::processing#3 ← phi( processChars::@12/(struct ProcessingSprite*) processChars::processing#1 )
(byte**) processChars::$43 ← (byte**)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
*(*((byte**) processChars::$43)) ← (byte) ' '
*((byte*) SPRITES_ENABLE#0) ← *((byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#1
(byte*~) processChars::$9 ← (byte*) SCREEN#0 + (word) SPRITE_PTRS#0
(byte*) processChars::$44 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
(byte*~) processChars::$10 ← (byte*~) processChars::$9 + *((byte*) processChars::$44)
(byte*) processChars::$45 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
*((byte*~) processChars::$10) ← *((byte*) processChars::$45)
(byte*) processChars::$46 ← (byte*)(struct ProcessingSprite*) processChars::processing#3 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
*((byte*) processChars::$46) ← (byte) STATUS_PROCESSING#0
to:processChars::@3
processChars::@4: scope:[processChars] from processChars::@3
(byte) processChars::numActive#9 ← phi( processChars::@3/(byte) processChars::numActive#11 )
(struct ProcessingSprite*) processChars::processing#7 ← phi( processChars::@3/(struct ProcessingSprite*) processChars::processing#2 )
(word) processChars::xpos#3 ← phi( processChars::@3/(word) processChars::xpos#0 )
(byte) processChars::i#6 ← phi( processChars::@3/(byte) processChars::i#8 )
(byte) processChars::bitmask#2 ← phi( processChars::@3/(byte) processChars::bitmask#6 )
*((byte*) SPRITES_XMSB#0) ← *((byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#2
to:processChars::@5
processChars::@8: scope:[processChars] from processChars::@3
(byte) processChars::numActive#10 ← phi( processChars::@3/(byte) processChars::numActive#11 )
(struct ProcessingSprite*) processChars::processing#8 ← phi( processChars::@3/(struct ProcessingSprite*) processChars::processing#2 )
(word) processChars::xpos#4 ← phi( processChars::@3/(word) processChars::xpos#0 )
(byte) processChars::i#7 ← phi( processChars::@3/(byte) processChars::i#8 )
(byte) processChars::bitmask#3 ← phi( processChars::@3/(byte) processChars::bitmask#6 )
(number~) processChars::$13 ← (number) $ff ^ (byte) processChars::bitmask#3
*((byte*) SPRITES_XMSB#0) ← *((byte*) SPRITES_XMSB#0) & (number~) processChars::$13
to:processChars::@5
processChars::@5: scope:[processChars] from processChars::@4 processChars::@8
(byte) processChars::numActive#8 ← phi( processChars::@4/(byte) processChars::numActive#9 processChars::@8/(byte) processChars::numActive#10 )
(byte) processChars::bitmask#7 ← phi( processChars::@4/(byte) processChars::bitmask#2 processChars::@8/(byte) processChars::bitmask#3 )
(struct ProcessingSprite*) processChars::processing#4 ← phi( processChars::@4/(struct ProcessingSprite*) processChars::processing#7 processChars::@8/(struct ProcessingSprite*) processChars::processing#8 )
(word) processChars::xpos#1 ← phi( processChars::@4/(word) processChars::xpos#3 processChars::@8/(word) processChars::xpos#4 )
(byte) processChars::i#4 ← phi( processChars::@4/(byte) processChars::i#6 processChars::@8/(byte) processChars::i#7 )
(number~) processChars::$14 ← (byte) processChars::i#4 * (number) 2
(byte~) processChars::$15 ← ((byte)) (word) processChars::xpos#1
*((byte*) SPRITES_XPOS#0 + (number~) processChars::$14) ← (byte~) processChars::$15
(word*) processChars::$47 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
(word~) processChars::$16 ← *((word*) processChars::$47) >> (number) 4
(byte~) processChars::$17 ← ((byte)) (word~) processChars::$16
(byte) processChars::ypos#0 ← (byte~) processChars::$17
(number~) processChars::$18 ← (byte) processChars::i#4 * (number) 2
*((byte*) SPRITES_YPOS#0 + (number~) processChars::$18) ← (byte) processChars::ypos#0
(word*) processChars::$48 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
(bool~) processChars::$19 ← *((word*) processChars::$48) < (word) XPOS_LEFTMOST#0
(word*) processChars::$49 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
(bool~) processChars::$20 ← *((word*) processChars::$49) > (word) XPOS_RIGHTMOST#0
(bool~) processChars::$21 ← (bool~) processChars::$19 || (bool~) processChars::$20
(word*) processChars::$50 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
(bool~) processChars::$22 ← *((word*) processChars::$50) < (word) YPOS_TOPMOST#0
(bool~) processChars::$23 ← (bool~) processChars::$21 || (bool~) processChars::$22
(word*) processChars::$51 ← (word*)(struct ProcessingSprite*) processChars::processing#4 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
(bool~) processChars::$24 ← *((word*) processChars::$51) > (word) YPOS_BOTTOMMOST#0
(bool~) processChars::$25 ← (bool~) processChars::$23 || (bool~) processChars::$24
if((bool~) processChars::$25) goto processChars::@6
to:processChars::@10
processChars::@6: scope:[processChars] from processChars::@5
(byte) processChars::i#10 ← phi( processChars::@5/(byte) processChars::i#4 )
(byte) processChars::numActive#5 ← phi( processChars::@5/(byte) processChars::numActive#8 )
(byte) processChars::bitmask#4 ← phi( processChars::@5/(byte) processChars::bitmask#7 )
(struct ProcessingSprite*) processChars::processing#5 ← phi( processChars::@5/(struct ProcessingSprite*) processChars::processing#4 )
(byte*) processChars::$52 ← (byte*)(struct ProcessingSprite*) processChars::processing#5 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
*((byte*) processChars::$52) ← (byte) STATUS_FREE#0
(number~) processChars::$34 ← (number) $ff ^ (byte) processChars::bitmask#4
*((byte*) SPRITES_ENABLE#0) ← *((byte*) SPRITES_ENABLE#0) & (number~) processChars::$34
to:processChars::@7
processChars::@10: scope:[processChars] from processChars::@5
(byte) processChars::i#9 ← phi( processChars::@5/(byte) processChars::i#4 )
(byte) processChars::numActive#4 ← phi( processChars::@5/(byte) processChars::numActive#8 )
(byte) processChars::ypos#1 ← phi( processChars::@5/(byte) processChars::ypos#0 )
(struct ProcessingSprite*) processChars::processing#6 ← phi( processChars::@5/(struct ProcessingSprite*) processChars::processing#4 )
(word) processChars::xpos#2 ← phi( processChars::@5/(word) processChars::xpos#1 )
(number~) processChars::$26 ← (word) processChars::xpos#2 / (number) 8
(byte~) processChars::$27 ← ((byte)) (number~) processChars::$26
(number~) processChars::$28 ← (byte) BORDER_XPOS_LEFT#0 / (number) 8
(number~) processChars::$29 ← (byte~) processChars::$27 - (number~) processChars::$28
(byte) processChars::xchar#0 ← (number~) processChars::$29
(byte~) processChars::$37 ← (byte) processChars::xchar#0 * (const byte) SIZEOF_WORD
(word*) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
(word*) processChars::$54 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
*((word*) processChars::$54) ← *((word*) processChars::$53) + *((word*) VXSIN#0 + (byte~) processChars::$37)
(word*) processChars::$55 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
(word*) processChars::$56 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
(word*) processChars::$57 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
*((word*) processChars::$57) ← *((word*) processChars::$55) + *((word*) processChars::$56)
(number~) processChars::$30 ← (byte) processChars::ypos#1 / (number) 8
(byte~) processChars::$31 ← ((byte)) (number~) processChars::$30
(number~) processChars::$32 ← (byte) BORDER_YPOS_TOP#0 / (number) 8
(number~) processChars::$33 ← (byte~) processChars::$31 - (number~) processChars::$32
(byte) processChars::ychar#0 ← (number~) processChars::$33
(byte~) processChars::$38 ← (byte) processChars::ychar#0 * (const byte) SIZEOF_WORD
(word*) processChars::$58 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
(word*) processChars::$59 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
*((word*) processChars::$59) ← *((word*) processChars::$58) + *((word*) VYSIN#0 + (byte~) processChars::$38)
(word*) processChars::$60 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
(word*) processChars::$61 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
(word*) processChars::$62 ← (word*)(struct ProcessingSprite*) processChars::processing#6 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
*((word*) processChars::$62) ← *((word*) processChars::$60) + *((word*) processChars::$61)
to:processChars::@7
processChars::@7: scope:[processChars] from processChars::@10 processChars::@6
(byte) processChars::i#5 ← phi( processChars::@10/(byte) processChars::i#9 processChars::@6/(byte) processChars::i#10 )
(byte) processChars::numActive#2 ← phi( processChars::@10/(byte) processChars::numActive#4 processChars::@6/(byte) processChars::numActive#5 )
(byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#2
to:processChars::@2
processChars::@14: scope:[processChars] from processChars::@2
(byte) processChars::numActive#3 ← phi( processChars::@2/(byte) processChars::numActive#6 )
(byte*~) processChars::$0 ← (byte*) SCREEN#0 + (number) $3e7
(byte~) processChars::$1 ← (byte) '0' + (byte) processChars::numActive#3
*((byte*~) processChars::$0) ← (byte~) processChars::$1
to:processChars::@return
processChars::@return: scope:[processChars] from processChars::@14
return
to:@return
@13: scope:[] from @12
(word[$28]) SQUARES_X#0 ← { fill( $28, 0) }
(word[$19]) SQUARES_Y#0 ← { fill( $19, 0) }
to:@16
initSquareTables: scope:[initSquareTables] from main
(byte) initSquareTables::x#0 ← (byte) 0
to:initSquareTables::@1
initSquareTables::@1: scope:[initSquareTables] from initSquareTables initSquareTables::@15
(byte) initSquareTables::x#2 ← phi( initSquareTables/(byte) initSquareTables::x#0 initSquareTables::@15/(byte) initSquareTables::x#1 )
(bool~) initSquareTables::$0 ← (byte) initSquareTables::x#2 < (number) $14
if((bool~) initSquareTables::$0) goto initSquareTables::@2
to:initSquareTables::@3
initSquareTables::@2: scope:[initSquareTables] from initSquareTables::@1
(byte) initSquareTables::x#3 ← phi( initSquareTables::@1/(byte) initSquareTables::x#2 )
(number~) initSquareTables::$3 ← (number) $14 - (byte) initSquareTables::x#3
(number~) initSquareTables::$4 ← (number~) initSquareTables::$3
to:initSquareTables::@4
initSquareTables::@3: scope:[initSquareTables] from initSquareTables::@1
(byte) initSquareTables::x#4 ← phi( initSquareTables::@1/(byte) initSquareTables::x#2 )
(number~) initSquareTables::$1 ← (byte) initSquareTables::x#4 - (number) $14
(number~) initSquareTables::$2 ← (number~) initSquareTables::$1
to:initSquareTables::@4
initSquareTables::@4: scope:[initSquareTables] from initSquareTables::@2 initSquareTables::@3
(byte) initSquareTables::x#6 ← phi( initSquareTables::@2/(byte) initSquareTables::x#3 initSquareTables::@3/(byte) initSquareTables::x#4 )
(number~) initSquareTables::$5 ← phi( initSquareTables::@2/(number~) initSquareTables::$4 initSquareTables::@3/(number~) initSquareTables::$2 )
(byte) initSquareTables::x_dist#0 ← (number~) initSquareTables::$5
(byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0
(byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0
call mul8u
(word) mul8u::return#2 ← (word) mul8u::return#1
to:initSquareTables::@15
initSquareTables::@15: scope:[initSquareTables] from initSquareTables::@4
(byte) initSquareTables::x#5 ← phi( initSquareTables::@4/(byte) initSquareTables::x#6 )
(word) mul8u::return#5 ← phi( initSquareTables::@4/(word) mul8u::return#2 )
(word~) initSquareTables::$6 ← (word) mul8u::return#5
(byte~) initSquareTables::$16 ← (byte) initSquareTables::x#5 * (const byte) SIZEOF_WORD
*((word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6
(byte) initSquareTables::x#1 ← (byte) initSquareTables::x#5 + rangenext(0,$27)
(bool~) initSquareTables::$7 ← (byte) initSquareTables::x#1 != rangelast(0,$27)
if((bool~) initSquareTables::$7) goto initSquareTables::@1
to:initSquareTables::@7
initSquareTables::@7: scope:[initSquareTables] from initSquareTables::@15
(byte) initSquareTables::y#0 ← (byte) 0
to:initSquareTables::@8
initSquareTables::@8: scope:[initSquareTables] from initSquareTables::@16 initSquareTables::@7
(byte) initSquareTables::y#2 ← phi( initSquareTables::@16/(byte) initSquareTables::y#1 initSquareTables::@7/(byte) initSquareTables::y#0 )
(bool~) initSquareTables::$8 ← (byte) initSquareTables::y#2 < (number) $c
if((bool~) initSquareTables::$8) goto initSquareTables::@9
to:initSquareTables::@10
initSquareTables::@9: scope:[initSquareTables] from initSquareTables::@8
(byte) initSquareTables::y#3 ← phi( initSquareTables::@8/(byte) initSquareTables::y#2 )
(number~) initSquareTables::$11 ← (number) $c - (byte) initSquareTables::y#3
(number~) initSquareTables::$12 ← (number~) initSquareTables::$11
to:initSquareTables::@11
initSquareTables::@10: scope:[initSquareTables] from initSquareTables::@8
(byte) initSquareTables::y#4 ← phi( initSquareTables::@8/(byte) initSquareTables::y#2 )
(number~) initSquareTables::$9 ← (byte) initSquareTables::y#4 - (number) $c
(number~) initSquareTables::$10 ← (number~) initSquareTables::$9
to:initSquareTables::@11
initSquareTables::@11: scope:[initSquareTables] from initSquareTables::@10 initSquareTables::@9
(byte) initSquareTables::y#6 ← phi( initSquareTables::@10/(byte) initSquareTables::y#4 initSquareTables::@9/(byte) initSquareTables::y#3 )
(number~) initSquareTables::$13 ← phi( initSquareTables::@9/(number~) initSquareTables::$12 initSquareTables::@10/(number~) initSquareTables::$10 )
(byte) initSquareTables::y_dist#0 ← (number~) initSquareTables::$13
(byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0
(byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0
call mul8u
(word) mul8u::return#3 ← (word) mul8u::return#1
to:initSquareTables::@16
initSquareTables::@16: scope:[initSquareTables] from initSquareTables::@11
(byte) initSquareTables::y#5 ← phi( initSquareTables::@11/(byte) initSquareTables::y#6 )
(word) mul8u::return#6 ← phi( initSquareTables::@11/(word) mul8u::return#3 )
(word~) initSquareTables::$14 ← (word) mul8u::return#6
(byte~) initSquareTables::$17 ← (byte) initSquareTables::y#5 * (const byte) SIZEOF_WORD
*((word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14
(byte) initSquareTables::y#1 ← (byte) initSquareTables::y#5 + rangenext(0,$18)
(bool~) initSquareTables::$15 ← (byte) initSquareTables::y#1 != rangelast(0,$18)
if((bool~) initSquareTables::$15) goto initSquareTables::@8
to:initSquareTables::@return
initSquareTables::@return: scope:[initSquareTables] from initSquareTables::@16
return
to:@return
initSprites: scope:[initSprites] from main::@4
(byte*) initSprites::sp#0 ← (byte*) SPRITE_DATA#0
to:initSprites::@1
initSprites::@1: scope:[initSprites] from initSprites initSprites::@1
(byte*) initSprites::sp#2 ← phi( initSprites/(byte*) initSprites::sp#0 initSprites::@1/(byte*) initSprites::sp#1 )
*((byte*) initSprites::sp#2) ← (number) 0
(byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2
(number~) initSprites::$0 ← (byte) NUM_PROCESSING#0 * (number) $40
(byte*~) initSprites::$1 ← (byte*) SPRITE_DATA#0 + (number~) initSprites::$0
(bool~) initSprites::$2 ← (byte*) initSprites::sp#1 < (byte*~) initSprites::$1
if((bool~) initSprites::$2) goto initSprites::@1
to:initSprites::@2
initSprites::@2: scope:[initSprites] from initSprites::@1
(byte) initSprites::i#0 ← (byte) 0
to:initSprites::@3
initSprites::@3: scope:[initSprites] from initSprites::@2 initSprites::@3
(byte) initSprites::i#2 ← phi( initSprites::@2/(byte) initSprites::i#0 initSprites::@3/(byte) initSprites::i#1 )
*((byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (byte) LIGHT_BLUE#0
(byte) initSprites::i#1 ← (byte) initSprites::i#2 + rangenext(0,7)
(bool~) initSprites::$3 ← (byte) initSprites::i#1 != rangelast(0,7)
if((bool~) initSprites::$3) goto initSprites::@3
to:initSprites::@4
initSprites::@4: scope:[initSprites] from initSprites::@3
*((byte*) SPRITES_MC#0) ← (number) 0
*((byte*) SPRITES_EXPAND_X#0) ← (number) 0
*((byte*) SPRITES_EXPAND_Y#0) ← (number) 0
to:initSprites::@return
initSprites::@return: scope:[initSprites] from initSprites::@4
return
to:@return
setupRasterIrq: scope:[setupRasterIrq] from main::@14
(void()*) setupRasterIrq::irqRoutine#4 ← phi( main::@14/(void()*) setupRasterIrq::irqRoutine#0 )
(word) setupRasterIrq::raster#1 ← phi( main::@14/(word) setupRasterIrq::raster#0 )
asm { sei }
*((byte*) PROCPORT_DDR#0) ← (byte) PROCPORT_DDR_MEMORY_MASK#0
*((byte*) PROCPORT#0) ← (byte) PROCPORT_RAM_IO#0
*((byte*) CIA1_INTERRUPT#0) ← (byte) CIA_INTERRUPT_CLEAR#0
(bool~) setupRasterIrq::$0 ← (word) setupRasterIrq::raster#1 < (number) $100
if((bool~) setupRasterIrq::$0) goto setupRasterIrq::@1
to:setupRasterIrq::@3
setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq
(void()*) setupRasterIrq::irqRoutine#2 ← phi( setupRasterIrq/(void()*) setupRasterIrq::irqRoutine#4 )
(word) setupRasterIrq::raster#3 ← phi( setupRasterIrq/(word) setupRasterIrq::raster#1 )
*((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) & (number) $7f
to:setupRasterIrq::@2
setupRasterIrq::@3: scope:[setupRasterIrq] from setupRasterIrq
(void()*) setupRasterIrq::irqRoutine#3 ← phi( setupRasterIrq/(void()*) setupRasterIrq::irqRoutine#4 )
(word) setupRasterIrq::raster#4 ← phi( setupRasterIrq/(word) setupRasterIrq::raster#1 )
*((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) | (number) $80
to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1 setupRasterIrq::@3
(void()*) setupRasterIrq::irqRoutine#1 ← phi( setupRasterIrq::@1/(void()*) setupRasterIrq::irqRoutine#2 setupRasterIrq::@3/(void()*) setupRasterIrq::irqRoutine#3 )
(word) setupRasterIrq::raster#2 ← phi( setupRasterIrq::@1/(word) setupRasterIrq::raster#3 setupRasterIrq::@3/(word) setupRasterIrq::raster#4 )
(byte~) setupRasterIrq::$1 ← < (word) setupRasterIrq::raster#2
*((byte*) RASTER#0) ← (byte~) setupRasterIrq::$1
*((byte*) IRQ_ENABLE#0) ← (byte) IRQ_RASTER#0
*((void()**) HARDWARE_IRQ#0) ← (void()*) setupRasterIrq::irqRoutine#1
asm { cli }
to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2
return
to:@return
@16: scope:[] from @13
(byte) RASTER_IRQ_TOP#0 ← (number) $30
to:@17
irqTop: scope:[irqTop] from
(byte) irqTop::i#0 ← (byte) 0
to:irqTop::@1
irqTop::@1: scope:[irqTop] from irqTop irqTop::@1
(byte) irqTop::i#2 ← phi( irqTop/(byte) irqTop::i#0 irqTop::@1/(byte) irqTop::i#1 )
(byte) irqTop::i#1 ← (byte) irqTop::i#2 + rangenext(0,4)
(bool~) irqTop::$1 ← (byte) irqTop::i#1 != rangelast(0,4)
if((bool~) irqTop::$1) goto irqTop::@1
to:irqTop::@2
irqTop::@2: scope:[irqTop] from irqTop::@1
(byte) irqTop::i1#0 ← (byte) 0
to:irqTop::@3
irqTop::@3: scope:[irqTop] from irqTop::@2 irqTop::@3
(byte) irqTop::i1#2 ← phi( irqTop::@2/(byte) irqTop::i1#0 irqTop::@3/(byte) irqTop::i1#1 )
(byte) irqTop::i1#1 ← (byte) irqTop::i1#2 + rangenext(0,7)
(bool~) irqTop::$2 ← (byte) irqTop::i1#1 != rangelast(0,7)
if((bool~) irqTop::$2) goto irqTop::@3
to:irqTop::@4
irqTop::@4: scope:[irqTop] from irqTop::@3
*((byte*) RASTER#0) ← (byte) RASTER_IRQ_MIDDLE#0
(void()*~) irqTop::$0 ← & interrupt(HARDWARE_ALL)(void()) irqBottom()
*((void()**) HARDWARE_IRQ#0) ← (void()*~) irqTop::$0
*((byte*) IRQ_STATUS#0) ← (byte) IRQ_RASTER#0
to:irqTop::@return
irqTop::@return: scope:[irqTop] from irqTop::@4
return
to:@return
@17: scope:[] from @16
(byte) RASTER_IRQ_MIDDLE#0 ← (number) $ff
to:@18
irqBottom: scope:[irqBottom] from
(byte) irqBottom::i#0 ← (byte) 0
to:irqBottom::@1
irqBottom::@1: scope:[irqBottom] from irqBottom irqBottom::@1
(byte) irqBottom::i#2 ← phi( irqBottom/(byte) irqBottom::i#0 irqBottom::@1/(byte) irqBottom::i#1 )
(byte) irqBottom::i#1 ← (byte) irqBottom::i#2 + rangenext(0,4)
(bool~) irqBottom::$2 ← (byte) irqBottom::i#1 != rangelast(0,4)
if((bool~) irqBottom::$2) goto irqBottom::@1
to:irqBottom::@2
irqBottom::@2: scope:[irqBottom] from irqBottom::@1
call processChars
to:irqBottom::@3
irqBottom::@3: scope:[irqBottom] from irqBottom::@2
*((byte*) RASTER#0) ← (byte) RASTER_IRQ_TOP#0
(void()*~) irqBottom::$1 ← & interrupt(HARDWARE_ALL)(void()) irqTop()
*((void()**) HARDWARE_IRQ#0) ← (void()*~) irqBottom::$1
*((byte*) IRQ_STATUS#0) ← (byte) IRQ_RASTER#0
to:irqBottom::@return
irqBottom::@return: scope:[irqBottom] from irqBottom::@3
return
to:@return
@18: scope:[] from @17
call main
to:@19
@19: scope:[] from @18
to:@end
@end: scope:[] from @19
SYMBOL TABLE SSA
(number~) $0
(word~) $1
(word~) $2
(word~) $3
(word~) $4
(number~) $5
(word~) $6
(word~) $7
(word~) $8
(word~) $9
(label) @12
(label) @13
(label) @16
(label) @17
(label) @18
(label) @19
(label) @9
(label) @begin
(label) @end
(byte) BORDER_XPOS_LEFT
(byte) BORDER_XPOS_LEFT#0
(word) BORDER_XPOS_RIGHT
(word) BORDER_XPOS_RIGHT#0
(byte) BORDER_YPOS_BOTTOM
(byte) BORDER_YPOS_BOTTOM#0
(byte) BORDER_YPOS_TOP
(byte) BORDER_YPOS_TOP#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(word) NOT_FOUND
(word) NOT_FOUND#0
(byte) NUM_PROCESSING
(byte) NUM_PROCESSING#0
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID = (byte) 8
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR = (byte) 9
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = (byte) $b
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = (byte) $a
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX = (byte) 4
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY = (byte) 6
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X = (byte) 0
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y = (byte) 2
(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING
(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(word) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::vx
(word) ProcessingSprite::vy
(word) ProcessingSprite::x
(word) ProcessingSprite::y
(byte*) RASTER
(byte*) RASTER#0
(byte) RASTER_IRQ_MIDDLE
(byte) RASTER_IRQ_MIDDLE#0
(byte) RASTER_IRQ_TOP
(byte) RASTER_IRQ_TOP#0
(byte*) SCREEN
(byte*) SCREEN#0
(byte[$3e8]) SCREEN_COPY
(byte[$3e8]) SCREEN_COPY#0
(const byte) SIZEOF_STRUCT_PROCESSINGSPRITE = (byte) $d
(const byte) SIZEOF_WORD = (byte) 2
(byte*) SPRITES_COLS
(byte*) SPRITES_COLS#0
(byte*) SPRITES_ENABLE
(byte*) SPRITES_ENABLE#0
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_X#0
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_EXPAND_Y#0
(byte*) SPRITES_MC
(byte*) SPRITES_MC#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(byte*) SPRITE_DATA
(byte*) SPRITE_DATA#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(word[$28]) SQUARES_X
(word[$28]) SQUARES_X#0
(word[$19]) SQUARES_Y
(word[$19]) SQUARES_Y#0
(byte) STATUS_FREE
(byte) STATUS_FREE#0
(byte) STATUS_NEW
(byte) STATUS_NEW#0
(byte) STATUS_PROCESSING
(byte) STATUS_PROCESSING#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(word*) VXSIN
(word*) VXSIN#0
(word*) VYSIN
(word*) VYSIN#0
(word) XPOS_LEFTMOST
(word) XPOS_LEFTMOST#0
(word) XPOS_RIGHTMOST
(word) XPOS_RIGHTMOST#0
(word) YPOS_BOTTOMMOST
(word) YPOS_BOTTOMMOST#0
(word) YPOS_TOPMOST
(word) YPOS_TOPMOST#0
(struct ProcessingChar()) getCharToProcess()
(bool~) getCharToProcess::$0
(bool~) getCharToProcess::$1
(number~) getCharToProcess::$10
(byte*~) getCharToProcess::$11
(byte*~) getCharToProcess::$12
(byte~) getCharToProcess::$13
(byte~) getCharToProcess::$14
(bool~) getCharToProcess::$2
(bool~) getCharToProcess::$3
(word~) getCharToProcess::$4
(bool~) getCharToProcess::$5
(bool~) getCharToProcess::$6
(bool~) getCharToProcess::$7
(bool~) getCharToProcess::$8
(word~) getCharToProcess::$9
(label) getCharToProcess::@1
(label) getCharToProcess::@10
(label) getCharToProcess::@11
(label) getCharToProcess::@3
(label) getCharToProcess::@4
(label) getCharToProcess::@5
(label) getCharToProcess::@7
(label) getCharToProcess::@8
(label) getCharToProcess::@9
(label) getCharToProcess::@return
(struct ProcessingChar) getCharToProcess::closest
(word) getCharToProcess::closest_dist
(word) getCharToProcess::closest_dist#0
(word) getCharToProcess::closest_dist#1
(word) getCharToProcess::closest_dist#2
(word) getCharToProcess::closest_dist#3
(word) getCharToProcess::closest_dist#4
(word) getCharToProcess::closest_dist#5
(word) getCharToProcess::closest_dist#6
(word) getCharToProcess::closest_dist#7
(word) getCharToProcess::closest_dist#8
(word) 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
(word) getCharToProcess::dist
(word) getCharToProcess::dist#0
(word) getCharToProcess::dist#1
(struct ProcessingChar) getCharToProcess::return
(word) getCharToProcess::return_dist
(word) getCharToProcess::return_dist#0
(word) getCharToProcess::return_dist#1
(word) getCharToProcess::return_dist#2
(word) getCharToProcess::return_dist#3
(word) 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
(void()) initSprites()
(number~) initSprites::$0
(byte*~) initSprites::$1
(bool~) initSprites::$2
(bool~) initSprites::$3
(label) initSprites::@1
(label) initSprites::@2
(label) initSprites::@3
(label) initSprites::@4
(label) initSprites::@return
(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
(void()) initSquareTables()
(bool~) initSquareTables::$0
(number~) initSquareTables::$1
(number~) initSquareTables::$10
(number~) initSquareTables::$11
(number~) initSquareTables::$12
(number~) initSquareTables::$13
(word~) initSquareTables::$14
(bool~) initSquareTables::$15
(byte~) initSquareTables::$16
(byte~) initSquareTables::$17
(number~) initSquareTables::$2
(number~) initSquareTables::$3
(number~) initSquareTables::$4
(number~) initSquareTables::$5
(word~) initSquareTables::$6
(bool~) initSquareTables::$7
(bool~) initSquareTables::$8
(number~) initSquareTables::$9
(label) initSquareTables::@1
(label) initSquareTables::@10
(label) initSquareTables::@11
(label) initSquareTables::@15
(label) initSquareTables::@16
(label) initSquareTables::@2
(label) initSquareTables::@3
(label) initSquareTables::@4
(label) initSquareTables::@7
(label) initSquareTables::@8
(label) initSquareTables::@9
(label) initSquareTables::@return
(byte) initSquareTables::x
(byte) initSquareTables::x#0
(byte) initSquareTables::x#1
(byte) initSquareTables::x#2
(byte) initSquareTables::x#3
(byte) initSquareTables::x#4
(byte) initSquareTables::x#5
(byte) initSquareTables::x#6
(byte) initSquareTables::x_dist
(byte) initSquareTables::x_dist#0
(byte) initSquareTables::y
(byte) initSquareTables::y#0
(byte) initSquareTables::y#1
(byte) initSquareTables::y#2
(byte) initSquareTables::y#3
(byte) initSquareTables::y#4
(byte) initSquareTables::y#5
(byte) initSquareTables::y#6
(byte) initSquareTables::y_dist
(byte) initSquareTables::y_dist#0
interrupt(HARDWARE_ALL)(void()) irqBottom()
(void()*~) irqBottom::$1
(bool~) irqBottom::$2
(label) irqBottom::@1
(label) irqBottom::@2
(label) irqBottom::@3
(label) irqBottom::@return
(byte) irqBottom::i
(byte) irqBottom::i#0
(byte) irqBottom::i#1
(byte) irqBottom::i#2
interrupt(HARDWARE_ALL)(void()) irqTop()
(void()*~) irqTop::$0
(bool~) irqTop::$1
(bool~) irqTop::$2
(label) irqTop::@1
(label) irqTop::@2
(label) irqTop::@3
(label) irqTop::@4
(label) irqTop::@return
(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()
(bool~) main::$10
(bool~) main::$11
(byte*~) main::$15
(byte~) main::$16
(word*) main::$17
(word*) main::$18
(word*) main::$19
(void()*~) main::$2
(word*) main::$20
(byte*) main::$21
(byte*) main::$22
(byte*) main::$23
(byte**) main::$24
(byte*~) main::$4
(byte*~) main::$5
(bool~) main::$6
(number~) main::$7
(bool~) main::$8
(struct ProcessingChar~) main::$9
(word) main::$9_dist
(byte) main::$9_x
(byte) main::$9_y
(label) main::@1
(label) main::@11
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@16
(label) main::@17
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@return
(struct ProcessingChar) main::center
(word) main::center_dist
(word) main::center_dist#0
(word) 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::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
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
(bool~) mul8u::$0
(number~) mul8u::$1
(bool~) mul8u::$2
(bool~) mul8u::$3
(word~) mul8u::$4
(byte~) mul8u::$5
(word~) mul8u::$6
(label) mul8u::@1
(label) mul8u::@2
(label) mul8u::@3
(label) mul8u::@4
(label) mul8u::@7
(label) mul8u::@return
(byte) mul8u::a
(byte) mul8u::a#0
(byte) mul8u::a#1
(byte) mul8u::a#2
(byte) mul8u::a#3
(byte) mul8u::a#4
(byte) mul8u::a#5
(byte) mul8u::a#6
(byte) mul8u::a#7
(byte) mul8u::b
(byte) mul8u::b#0
(byte) mul8u::b#1
(byte) mul8u::b#2
(word) mul8u::mb
(word) mul8u::mb#0
(word) mul8u::mb#1
(word) mul8u::mb#2
(word) mul8u::mb#3
(word) mul8u::mb#4
(word) mul8u::mb#5
(word) mul8u::res
(word) mul8u::res#0
(word) mul8u::res#1
(word) mul8u::res#2
(word) mul8u::res#3
(word) mul8u::res#4
(word) mul8u::res#5
(word) mul8u::res#6
(word) mul8u::return
(word) mul8u::return#0
(word) mul8u::return#1
(word) mul8u::return#2
(word) mul8u::return#3
(word) mul8u::return#4
(word) mul8u::return#5
(word) mul8u::return#6
(void()) processChars()
(byte*~) processChars::$0
(byte~) processChars::$1
(byte*~) processChars::$10
(word~) processChars::$11
(byte~) processChars::$12
(number~) processChars::$13
(number~) processChars::$14
(byte~) processChars::$15
(word~) processChars::$16
(byte~) processChars::$17
(number~) processChars::$18
(bool~) processChars::$19
(number~) processChars::$2
(bool~) processChars::$20
(bool~) processChars::$21
(bool~) processChars::$22
(bool~) processChars::$23
(bool~) processChars::$24
(bool~) processChars::$25
(number~) processChars::$26
(byte~) processChars::$27
(number~) processChars::$28
(number~) processChars::$29
(struct ProcessingSprite*~) processChars::$3
(number~) processChars::$30
(byte~) processChars::$31
(number~) processChars::$32
(number~) processChars::$33
(number~) processChars::$34
(bool~) processChars::$35
(byte~) processChars::$36
(byte~) processChars::$37
(byte~) processChars::$38
(byte*) processChars::$39
(number~) processChars::$4
(byte*) processChars::$40
(byte*) processChars::$41
(word*) processChars::$42
(byte**) processChars::$43
(byte*) processChars::$44
(byte*) processChars::$45
(byte*) processChars::$46
(word*) processChars::$47
(word*) processChars::$48
(word*) processChars::$49
(bool~) processChars::$5
(word*) processChars::$50
(word*) processChars::$51
(byte*) processChars::$52
(word*) processChars::$53
(word*) processChars::$54
(word*) processChars::$55
(word*) processChars::$56
(word*) processChars::$57
(word*) processChars::$58
(word*) processChars::$59
(bool~) processChars::$6
(word*) processChars::$60
(word*) processChars::$61
(word*) processChars::$62
(bool~) processChars::$63
(bool~) processChars::$7
(bool~) processChars::$8
(byte*~) processChars::$9
(label) processChars::@1
(label) processChars::@10
(label) processChars::@12
(label) processChars::@13
(label) processChars::@14
(label) processChars::@2
(label) processChars::@3
(label) processChars::@4
(label) processChars::@5
(label) processChars::@6
(label) processChars::@7
(label) processChars::@8
(label) processChars::@return
(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#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
(label) setupRasterIrq::@1
(label) setupRasterIrq::@2
(label) setupRasterIrq::@3
(label) setupRasterIrq::@return
(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 , (word) startProcessing::center_dist)
(word~) startProcessing::$0
(number~) startProcessing::$1
(word~) startProcessing::$10
(number~) startProcessing::$11
(number~) startProcessing::$12
(number~) startProcessing::$13
(word~) startProcessing::$14
(number~) startProcessing::$15
(number~) startProcessing::$16
(number~) startProcessing::$17
(byte*~) startProcessing::$18
(byte~) startProcessing::$19
(byte*~) startProcessing::$2
(byte~) startProcessing::$20
(number~) startProcessing::$21
(word~) startProcessing::$22
(number~) startProcessing::$23
(bool~) startProcessing::$24
(bool~) startProcessing::$25
(bool~) startProcessing::$26
(bool~) startProcessing::$27
(bool~) startProcessing::$28
(byte~) startProcessing::$29
(byte*~) startProcessing::$3
(byte~) startProcessing::$30
(word*) startProcessing::$31
(word*) startProcessing::$32
(word*) startProcessing::$33
(word*) startProcessing::$34
(byte*) startProcessing::$35
(byte*) startProcessing::$36
(byte*) startProcessing::$37
(byte**) startProcessing::$38
(byte*) startProcessing::$39
(word~) startProcessing::$4
(number~) startProcessing::$5
(byte*~) startProcessing::$6
(word~) startProcessing::$7
(number~) startProcessing::$8
(byte*~) startProcessing::$9
(label) startProcessing::@1
(label) startProcessing::@10
(label) startProcessing::@2
(label) startProcessing::@3
(label) startProcessing::@4
(label) startProcessing::@5
(label) startProcessing::@8
(label) startProcessing::@9
(label) startProcessing::@return
(struct ProcessingChar) startProcessing::center
(word) startProcessing::center_dist
(word) 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::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
(byte*) startProcessing::screenPtr
(byte*) startProcessing::screenPtr#0
(byte*) startProcessing::screenPtr#1
(byte*) startProcessing::screenPtr#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
Adding number conversion cast (unumber) 7 in (byte) PROCPORT_DDR_MEMORY_MASK#0 ← (number) 7
Adding number conversion cast (unumber) $35 in (byte) PROCPORT_RAM_IO#0 ← (number) $35
Adding number conversion cast (unumber) $31 in (byte) PROCPORT_RAM_CHARROM#0 ← (number) $31
Adding number conversion cast (unumber) $18 in (byte) BORDER_XPOS_LEFT#0 ← (number) $18
Adding number conversion cast (unumber) $158 in (word) BORDER_XPOS_RIGHT#0 ← (number) $158
Adding number conversion cast (unumber) $32 in (byte) BORDER_YPOS_TOP#0 ← (number) $32
Adding number conversion cast (unumber) $fa in (byte) BORDER_YPOS_BOTTOM#0 ← (number) $fa
Adding number conversion cast (unumber) $3f8 in (word) SPRITE_PTRS#0 ← (number) $3f8
Adding number conversion cast (unumber) 1 in (byte) IRQ_RASTER#0 ← (number) 1
Adding number conversion cast (unumber) $7f in (byte) CIA_INTERRUPT_CLEAR#0 ← (number) $7f
Adding number conversion cast (unumber) $e in (byte) LIGHT_BLUE#0 ← (number) $e
Adding number conversion cast (unumber) 0 in (word) mul8u::res#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) mul8u::$0 ← (byte) mul8u::a#3 != (number) 0
Adding number conversion cast (unumber) 1 in (number~) mul8u::$1 ← (byte) mul8u::a#4 & (number) 1
Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (byte) mul8u::a#4 & (unumber)(number) 1
Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mul8u::$1 != (number) 0
Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#5 >> (number) 1
Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1
Adding number conversion cast (unumber) 8 in (byte) NUM_PROCESSING#0 ← (number) 8
Adding number conversion cast (unumber) $ffff in (word) NOT_FOUND#0 ← (number) $ffff
Adding number conversion cast (unumber) 0 in (byte) STATUS_FREE#0 ← (number) 0
Adding number conversion cast (unumber) 1 in (byte) STATUS_NEW#0 ← (number) 1
Adding number conversion cast (unumber) 2 in (byte) STATUS_PROCESSING#0 ← (number) 2
Adding number conversion cast (unumber) $3e8 in (byte*~) main::$5 ← (byte*) SCREEN#0 + (number) $3e8
Adding number conversion cast (unumber) 1 in (number~) main::$7 ← (byte) NUM_PROCESSING#0 - (number) 1
Adding number conversion cast (unumber) main::$7 in (number~) main::$7 ← (byte) NUM_PROCESSING#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 0 in *((word*) main::$17 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$18 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$19 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((word*) main::$20 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$21 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) main::$22 + (byte~) main::$16) ← (number) 0
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$4 ← (byte*) SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) $3e7 in (byte*~) main::$15 ← (byte*) COLS#0 + (number) $3e7
Adding number conversion cast (unumber) 0 in (byte) getCharToProcess::closest_x#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) getCharToProcess::closest_y#0 ← (number) 0
Adding number conversion cast (unumber) $28 in (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#3 + (number) $28
Adding number conversion cast (unumber) $28 in (number~) getCharToProcess::$10 ← (word~) getCharToProcess::$9 * (number) $28
Adding number conversion cast (unumber) getCharToProcess::$10 in (number~) getCharToProcess::$10 ← (word~) getCharToProcess::$9 * (unumber)(number) $28
Adding number conversion cast (unumber) $ff in (byte) startProcessing::freeIdx#0 ← (number) $ff
Adding number conversion cast (unumber) 1 in (number~) startProcessing::$23 ← (byte) NUM_PROCESSING#0 - (number) 1
Adding number conversion cast (unumber) startProcessing::$23 in (number~) startProcessing::$23 ← (byte) NUM_PROCESSING#0 - (unumber)(number) 1
Adding number conversion cast (unumber) $ff in (bool~) startProcessing::$27 ← (byte) startProcessing::freeIdx#2 == (number) $ff
Adding number conversion cast (unumber) $28 in (number~) startProcessing::$1 ← (word~) startProcessing::$0 * (number) $28
Adding number conversion cast (unumber) startProcessing::$1 in (number~) startProcessing::$1 ← (word~) startProcessing::$0 * (unumber)(number) $28
Adding number conversion cast (unumber) $40 in (number~) startProcessing::$5 ← (word~) startProcessing::$4 * (number) $40
Adding number conversion cast (unumber) startProcessing::$5 in (number~) startProcessing::$5 ← (word~) startProcessing::$4 * (unumber)(number) $40
Adding number conversion cast (unumber) 8 in (number~) startProcessing::$8 ← (word~) startProcessing::$7 * (number) 8
Adding number conversion cast (unumber) startProcessing::$8 in (number~) startProcessing::$8 ← (word~) startProcessing::$7 * (unumber)(number) 8
Adding number conversion cast (unumber) 3 in (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (number) 3
Adding number conversion cast (unumber) 8 in (number~) startProcessing::$11 ← (word~) startProcessing::$10 * (number) 8
Adding number conversion cast (unumber) startProcessing::$11 in (number~) startProcessing::$11 ← (word~) startProcessing::$10 * (unumber)(number) 8
Adding number conversion cast (unumber) startProcessing::$12 in (number~) startProcessing::$12 ← (byte) BORDER_XPOS_LEFT#0 + (unumber~) startProcessing::$11
Adding number conversion cast (unumber) 4 in (number~) startProcessing::$13 ← (unumber~) startProcessing::$12 << (number) 4
Adding number conversion cast (unumber) startProcessing::$13 in (number~) startProcessing::$13 ← (unumber~) startProcessing::$12 << (unumber)(number) 4
Adding number conversion cast (unumber) 8 in (number~) startProcessing::$15 ← (word~) startProcessing::$14 * (number) 8
Adding number conversion cast (unumber) startProcessing::$15 in (number~) startProcessing::$15 ← (word~) startProcessing::$14 * (unumber)(number) 8
Adding number conversion cast (unumber) startProcessing::$16 in (number~) startProcessing::$16 ← (byte) BORDER_YPOS_TOP#0 + (unumber~) startProcessing::$15
Adding number conversion cast (unumber) 4 in (number~) startProcessing::$17 ← (unumber~) startProcessing::$16 << (number) 4
Adding number conversion cast (unumber) startProcessing::$17 in (number~) startProcessing::$17 ← (unumber~) startProcessing::$16 << (unumber)(number) 4
Adding number conversion cast (unumber) $40 in (byte*~) startProcessing::$18 ← (byte*) SPRITE_DATA#0 / (number) $40
Adding number conversion cast (unumber) 8 in (number~) startProcessing::$21 ← (byte) startProcessing::spriteIdx#1 * (number) 8
Adding number conversion cast (unumber) startProcessing::$21 in (number~) startProcessing::$21 ← (byte) startProcessing::spriteIdx#1 * (unumber)(number) 8
Adding number conversion cast (unumber) $3c in *((word*) startProcessing::$34 + (byte~) startProcessing::$30) ← (number) $3c
Adding number conversion cast (unumber) 8 in (number~) $0 ← (byte) BORDER_XPOS_LEFT#0 - (number) 8
Adding number conversion cast (unumber) $0 in (number~) $0 ← (byte) BORDER_XPOS_LEFT#0 - (unumber)(number) 8
Adding number conversion cast (unumber) 4 in (word~) $2 ← (word~) $1 << (number) 4
Adding number conversion cast (unumber) 4 in (word~) $4 ← (word~) $3 << (number) 4
Adding number conversion cast (unumber) 8 in (number~) $5 ← (byte) BORDER_YPOS_TOP#0 - (number) 8
Adding number conversion cast (unumber) $5 in (number~) $5 ← (byte) BORDER_YPOS_TOP#0 - (unumber)(number) 8
Adding number conversion cast (unumber) 4 in (word~) $7 ← (word~) $6 << (number) 4
Adding number conversion cast (unumber) 4 in (word~) $9 ← (word~) $8 << (number) 4
Adding number conversion cast (unumber) 0 in (byte) processChars::numActive#0 ← (number) 0
Adding number conversion cast (unumber) 1 in (number~) processChars::$2 ← (byte) NUM_PROCESSING#0 - (number) 1
Adding number conversion cast (unumber) processChars::$2 in (number~) processChars::$2 ← (byte) NUM_PROCESSING#0 - (unumber)(number) 1
Adding number conversion cast (unumber) 1 in (number~) processChars::$4 ← (number) 1 << *((byte*) processChars::$39)
Adding number conversion cast (unumber) processChars::$4 in (number~) processChars::$4 ← (unumber)(number) 1 << *((byte*) processChars::$39)
Adding number conversion cast (unumber) 4 in (word~) processChars::$11 ← *((word*) processChars::$42) >> (number) 4
Adding number conversion cast (unumber) 0 in (bool~) processChars::$63 ← (number) 0 != (byte~) processChars::$12
Adding number conversion cast (unumber) $ff in (number~) processChars::$13 ← (number) $ff ^ (byte) processChars::bitmask#3
Adding number conversion cast (unumber) processChars::$13 in (number~) processChars::$13 ← (unumber)(number) $ff ^ (byte) processChars::bitmask#3
Adding number conversion cast (unumber) 2 in (number~) processChars::$14 ← (byte) processChars::i#4 * (number) 2
Adding number conversion cast (unumber) processChars::$14 in (number~) processChars::$14 ← (byte) processChars::i#4 * (unumber)(number) 2
Adding number conversion cast (unumber) 4 in (word~) processChars::$16 ← *((word*) processChars::$47) >> (number) 4
Adding number conversion cast (unumber) 2 in (number~) processChars::$18 ← (byte) processChars::i#4 * (number) 2
Adding number conversion cast (unumber) processChars::$18 in (number~) processChars::$18 ← (byte) processChars::i#4 * (unumber)(number) 2
Adding number conversion cast (unumber) $ff in (number~) processChars::$34 ← (number) $ff ^ (byte) processChars::bitmask#4
Adding number conversion cast (unumber) processChars::$34 in (number~) processChars::$34 ← (unumber)(number) $ff ^ (byte) processChars::bitmask#4
Adding number conversion cast (unumber) 8 in (number~) processChars::$26 ← (word) processChars::xpos#2 / (number) 8
Adding number conversion cast (unumber) processChars::$26 in (number~) processChars::$26 ← (word) processChars::xpos#2 / (unumber)(number) 8
Adding number conversion cast (unumber) 8 in (number~) processChars::$28 ← (byte) BORDER_XPOS_LEFT#0 / (number) 8
Adding number conversion cast (unumber) processChars::$28 in (number~) processChars::$28 ← (byte) BORDER_XPOS_LEFT#0 / (unumber)(number) 8
Adding number conversion cast (unumber) processChars::$29 in (number~) processChars::$29 ← (byte~) processChars::$27 - (unumber~) processChars::$28
Adding number conversion cast (unumber) 8 in (number~) processChars::$30 ← (byte) processChars::ypos#1 / (number) 8
Adding number conversion cast (unumber) processChars::$30 in (number~) processChars::$30 ← (byte) processChars::ypos#1 / (unumber)(number) 8
Adding number conversion cast (unumber) 8 in (number~) processChars::$32 ← (byte) BORDER_YPOS_TOP#0 / (number) 8
Adding number conversion cast (unumber) processChars::$32 in (number~) processChars::$32 ← (byte) BORDER_YPOS_TOP#0 / (unumber)(number) 8
Adding number conversion cast (unumber) processChars::$33 in (number~) processChars::$33 ← (byte~) processChars::$31 - (unumber~) processChars::$32
Adding number conversion cast (unumber) $3e7 in (byte*~) processChars::$0 ← (byte*) SCREEN#0 + (number) $3e7
Adding number conversion cast (unumber) $14 in (bool~) initSquareTables::$0 ← (byte) initSquareTables::x#2 < (number) $14
Adding number conversion cast (unumber) $14 in (number~) initSquareTables::$3 ← (number) $14 - (byte) initSquareTables::x#3
Adding number conversion cast (unumber) initSquareTables::$3 in (number~) initSquareTables::$3 ← (unumber)(number) $14 - (byte) initSquareTables::x#3
Adding number conversion cast (unumber) initSquareTables::$4 in (number~) initSquareTables::$4 ← (unumber~) initSquareTables::$3
Adding number conversion cast (unumber) $14 in (number~) initSquareTables::$1 ← (byte) initSquareTables::x#4 - (number) $14
Adding number conversion cast (unumber) initSquareTables::$1 in (number~) initSquareTables::$1 ← (byte) initSquareTables::x#4 - (unumber)(number) $14
Adding number conversion cast (unumber) initSquareTables::$2 in (number~) initSquareTables::$2 ← (unumber~) initSquareTables::$1
Adding number conversion cast (unumber) initSquareTables::$5 in (byte) initSquareTables::x#6 ← phi( initSquareTables::@2/(byte) initSquareTables::x#3 initSquareTables::@3/(byte) initSquareTables::x#4 )
(number~) initSquareTables::$5 ← phi( initSquareTables::@2/(unumber~) initSquareTables::$4 initSquareTables::@3/(unumber~) initSquareTables::$2 )
Adding number conversion cast (unumber) $c in (bool~) initSquareTables::$8 ← (byte) initSquareTables::y#2 < (number) $c
Adding number conversion cast (unumber) $c in (number~) initSquareTables::$11 ← (number) $c - (byte) initSquareTables::y#3
Adding number conversion cast (unumber) initSquareTables::$11 in (number~) initSquareTables::$11 ← (unumber)(number) $c - (byte) initSquareTables::y#3
Adding number conversion cast (unumber) initSquareTables::$12 in (number~) initSquareTables::$12 ← (unumber~) initSquareTables::$11
Adding number conversion cast (unumber) $c in (number~) initSquareTables::$9 ← (byte) initSquareTables::y#4 - (number) $c
Adding number conversion cast (unumber) initSquareTables::$9 in (number~) initSquareTables::$9 ← (byte) initSquareTables::y#4 - (unumber)(number) $c
Adding number conversion cast (unumber) initSquareTables::$10 in (number~) initSquareTables::$10 ← (unumber~) initSquareTables::$9
Adding number conversion cast (unumber) initSquareTables::$13 in (byte) initSquareTables::y#6 ← phi( initSquareTables::@10/(byte) initSquareTables::y#4 initSquareTables::@9/(byte) initSquareTables::y#3 )
(number~) initSquareTables::$13 ← phi( initSquareTables::@9/(unumber~) initSquareTables::$12 initSquareTables::@10/(unumber~) initSquareTables::$10 )
Adding number conversion cast (unumber) 0 in *((byte*) initSprites::sp#2) ← (number) 0
Adding number conversion cast (unumber) $40 in (number~) initSprites::$0 ← (byte) NUM_PROCESSING#0 * (number) $40
Adding number conversion cast (unumber) initSprites::$0 in (number~) initSprites::$0 ← (byte) NUM_PROCESSING#0 * (unumber)(number) $40
Adding number conversion cast (unumber) 0 in *((byte*) SPRITES_MC#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) SPRITES_EXPAND_X#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) SPRITES_EXPAND_Y#0) ← (number) 0
Adding number conversion cast (unumber) $100 in (bool~) setupRasterIrq::$0 ← (word) setupRasterIrq::raster#1 < (number) $100
Adding number conversion cast (unumber) $7f in *((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) & (number) $7f
Adding number conversion cast (unumber) $80 in *((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) | (number) $80
Adding number conversion cast (unumber) $30 in (byte) RASTER_IRQ_TOP#0 ← (number) $30
Adding number conversion cast (unumber) $ff in (byte) RASTER_IRQ_MIDDLE#0 ← (number) $ff
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*) PROCPORT_DDR#0 ← (byte*)(number) 0
Inlining cast (byte) PROCPORT_DDR_MEMORY_MASK#0 ← (unumber)(number) 7
Inlining cast (byte*) PROCPORT#0 ← (byte*)(number) 1
Inlining cast (byte) PROCPORT_RAM_IO#0 ← (unumber)(number) $35
Inlining cast (byte) PROCPORT_RAM_CHARROM#0 ← (unumber)(number) $31
Inlining cast (byte*) CHARGEN#0 ← (byte*)(number) $d000
Inlining cast (byte) BORDER_XPOS_LEFT#0 ← (unumber)(number) $18
Inlining cast (word) BORDER_XPOS_RIGHT#0 ← (unumber)(number) $158
Inlining cast (byte) BORDER_YPOS_TOP#0 ← (unumber)(number) $32
Inlining cast (byte) BORDER_YPOS_BOTTOM#0 ← (unumber)(number) $fa
Inlining cast (word) SPRITE_PTRS#0 ← (unumber)(number) $3f8
Inlining cast (byte*) SPRITES_XPOS#0 ← (byte*)(number) $d000
Inlining cast (byte*) SPRITES_YPOS#0 ← (byte*)(number) $d001
Inlining cast (byte*) SPRITES_XMSB#0 ← (byte*)(number) $d010
Inlining cast (byte*) RASTER#0 ← (byte*)(number) $d012
Inlining cast (byte*) SPRITES_ENABLE#0 ← (byte*)(number) $d015
Inlining cast (byte*) SPRITES_EXPAND_Y#0 ← (byte*)(number) $d017
Inlining cast (byte*) SPRITES_MC#0 ← (byte*)(number) $d01c
Inlining cast (byte*) SPRITES_EXPAND_X#0 ← (byte*)(number) $d01d
Inlining cast (byte*) SPRITES_COLS#0 ← (byte*)(number) $d027
Inlining cast (byte*) VIC_CONTROL#0 ← (byte*)(number) $d011
Inlining cast (byte*) IRQ_STATUS#0 ← (byte*)(number) $d019
Inlining cast (byte*) IRQ_ENABLE#0 ← (byte*)(number) $d01a
Inlining cast (byte) IRQ_RASTER#0 ← (unumber)(number) 1
Inlining cast (byte*) COLS#0 ← (byte*)(number) $d800
Inlining cast (byte*) CIA1_INTERRUPT#0 ← (byte*)(number) $dc0d
Inlining cast (byte) CIA_INTERRUPT_CLEAR#0 ← (unumber)(number) $7f
Inlining cast (void()**) HARDWARE_IRQ#0 ← (void()**)(number) $fffe
Inlining cast (byte) LIGHT_BLUE#0 ← (unumber)(number) $e
Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0
Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400
Inlining cast (byte*) SPRITE_DATA#0 ← (byte*)(number) $2000
Inlining cast (word*) VXSIN#0 ← (word*)(number) $2200
Inlining cast (word*) VYSIN#0 ← (word*)(number) $2280
Inlining cast (byte) NUM_PROCESSING#0 ← (unumber)(number) 8
Inlining cast (word) NOT_FOUND#0 ← (unumber)(number) $ffff
Inlining cast (byte) STATUS_FREE#0 ← (unumber)(number) 0
Inlining cast (byte) STATUS_NEW#0 ← (unumber)(number) 1
Inlining cast (byte) STATUS_PROCESSING#0 ← (unumber)(number) 2
Inlining cast *((word*) main::$17 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((word*) main::$18 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((word*) main::$19 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((word*) main::$20 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte*) main::$21 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte*) main::$22 + (byte~) main::$16) ← (unumber)(number) 0
Inlining cast *((byte**) main::$24 + (byte~) main::$16) ← (byte*)(number) 0
Inlining cast (byte) getCharToProcess::closest_x#0 ← (unumber)(number) 0
Inlining cast (byte) getCharToProcess::closest_y#0 ← (unumber)(number) 0
Inlining cast (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::closest_y#3
Inlining cast (byte) startProcessing::freeIdx#0 ← (unumber)(number) $ff
Inlining cast (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#1
Inlining cast (word~) startProcessing::$4 ← (word)(byte) startProcessing::spriteIdx#0
Inlining cast (word~) startProcessing::$7 ← (word)(byte) startProcessing::ch#0
Inlining cast (word~) startProcessing::$10 ← (word)(byte) startProcessing::center_x#2
Inlining cast (word~) startProcessing::$14 ← (word)(byte) startProcessing::center_y#2
Inlining cast (byte~) startProcessing::$19 ← (byte)(byte*~) startProcessing::$18
Inlining cast (word~) startProcessing::$22 ← (word)(unumber~) startProcessing::$21
Inlining cast *((word*) startProcessing::$34 + (byte~) startProcessing::$30) ← (unumber)(number) $3c
Inlining cast (word~) $1 ← (word)(unumber~) $0
Inlining cast (word~) $3 ← (word)(word) BORDER_XPOS_RIGHT#0
Inlining cast (word~) $6 ← (word)(unumber~) $5
Inlining cast (word~) $8 ← (word)(byte) BORDER_YPOS_BOTTOM#0
Inlining cast (byte) processChars::numActive#0 ← (unumber)(number) 0
Inlining cast (byte~) processChars::$15 ← (byte)(word) processChars::xpos#1
Inlining cast (byte~) processChars::$17 ← (byte)(word~) processChars::$16
Inlining cast (byte~) processChars::$27 ← (byte)(unumber~) processChars::$26
Inlining cast (byte~) processChars::$31 ← (byte)(unumber~) processChars::$30
Inlining cast *((byte*) initSprites::sp#2) ← (unumber)(number) 0
Inlining cast *((byte*) SPRITES_MC#0) ← (unumber)(number) 0
Inlining cast *((byte*) SPRITES_EXPAND_X#0) ← (unumber)(number) 0
Inlining cast *((byte*) SPRITES_EXPAND_Y#0) ← (unumber)(number) 0
Inlining cast (byte) RASTER_IRQ_TOP#0 ← (unumber)(number) $30
Inlining cast (byte) RASTER_IRQ_MIDDLE#0 ← (unumber)(number) $ff
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 0
Simplifying constant integer cast 7
Simplifying constant pointer cast (byte*) 1
Simplifying constant integer cast $35
Simplifying constant integer cast $31
Simplifying constant pointer cast (byte*) 53248
Simplifying constant integer cast $18
Simplifying constant integer cast $158
Simplifying constant integer cast $32
Simplifying constant integer cast $fa
Simplifying constant integer cast $3f8
Simplifying constant pointer cast (byte*) 53248
Simplifying constant pointer cast (byte*) 53249
Simplifying constant pointer cast (byte*) 53264
Simplifying constant pointer cast (byte*) 53266
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*) 53287
Simplifying constant pointer cast (byte*) 53265
Simplifying constant pointer cast (byte*) 53273
Simplifying constant pointer cast (byte*) 53274
Simplifying constant integer cast 1
Simplifying constant pointer cast (byte*) 55296
Simplifying constant pointer cast (byte*) 56333
Simplifying constant integer cast $7f
Simplifying constant pointer cast (void()**) 65534
Simplifying constant integer cast $e
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 1
Simplifying constant pointer cast (byte*) 1024
Simplifying constant pointer cast (byte*) 8192
Simplifying constant pointer cast (word*) 8704
Simplifying constant pointer cast (word*) 8832
Simplifying constant integer cast 8
Simplifying constant integer cast $ffff
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast $3e8
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 0
Simplifying constant integer cast $3e7
Simplifying constant integer cast $3e7
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast $28
Simplifying constant integer cast $ff
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 $3c
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast (word) BORDER_XPOS_RIGHT#0
Simplifying constant integer cast 4
Simplifying constant integer cast 8
Simplifying constant integer cast 4
Simplifying constant integer cast 4
Simplifying constant integer cast 0
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 8
Simplifying constant integer cast 8
Simplifying constant integer cast 8
Simplifying constant integer cast $3e7
Simplifying constant integer cast $14
Simplifying constant integer cast $14
Simplifying constant integer cast $14
Simplifying constant integer cast $c
Simplifying constant integer cast $c
Simplifying constant integer cast $c
Simplifying constant integer cast 0
Simplifying constant integer cast $40
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 $30
Simplifying constant integer cast $ff
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) $35
Finalized unsigned number type (byte) $31
Finalized unsigned number type (byte) $18
Finalized unsigned number type (word) $158
Finalized unsigned number type (byte) $32
Finalized unsigned number type (byte) $fa
Finalized unsigned number type (word) $3f8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) $7f
Finalized unsigned number type (byte) $e
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 8
Finalized unsigned number type (word) $ffff
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 1
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 (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (word) $3e7
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $ff
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) $3c
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 unsigned number type (byte) 0
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) $14
Finalized unsigned number type (byte) $14
Finalized unsigned number type (byte) $14
Finalized unsigned number type (byte) $c
Finalized unsigned number type (byte) $c
Finalized unsigned number type (byte) $c
Finalized unsigned number type (byte) 0
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 (word) $100
Finalized unsigned number type (byte) $7f
Finalized unsigned number type (byte) $80
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) $ff
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) mul8u::$1 ← (byte) mul8u::a#4 & (byte) 1
Inferred type updated to byte in (unumber~) main::$7 ← (byte) NUM_PROCESSING#0 - (byte) 1
Inferred type updated to word in (unumber~) getCharToProcess::$10 ← (word~) getCharToProcess::$9 * (byte) $28
Inferred type updated to byte in (unumber~) startProcessing::$23 ← (byte) NUM_PROCESSING#0 - (byte) 1
Inferred type updated to word in (unumber~) startProcessing::$1 ← (word~) startProcessing::$0 * (byte) $28
Inferred type updated to word in (unumber~) startProcessing::$5 ← (word~) startProcessing::$4 * (byte) $40
Inferred type updated to word in (unumber~) startProcessing::$8 ← (word~) startProcessing::$7 * (byte) 8
Inferred type updated to word in (unumber~) startProcessing::$11 ← (word~) startProcessing::$10 * (byte) 8
Inferred type updated to word in (unumber~) startProcessing::$12 ← (byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$11
Inferred type updated to word in (unumber~) startProcessing::$13 ← (word~) startProcessing::$12 << (byte) 4
Inferred type updated to word in (unumber~) startProcessing::$15 ← (word~) startProcessing::$14 * (byte) 8
Inferred type updated to word in (unumber~) startProcessing::$16 ← (byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$15
Inferred type updated to word in (unumber~) startProcessing::$17 ← (word~) startProcessing::$16 << (byte) 4
Inferred type updated to byte in (unumber~) startProcessing::$21 ← (byte) startProcessing::spriteIdx#1 * (byte) 8
Inferred type updated to byte in (unumber~) $0 ← (byte) BORDER_XPOS_LEFT#0 - (byte) 8
Inferred type updated to byte in (unumber~) $5 ← (byte) BORDER_YPOS_TOP#0 - (byte) 8
Inferred type updated to byte in (unumber~) processChars::$2 ← (byte) NUM_PROCESSING#0 - (byte) 1
Inferred type updated to byte in (unumber~) processChars::$4 ← (byte) 1 << *((byte*) processChars::$39)
Inferred type updated to byte in (unumber~) processChars::$13 ← (byte) $ff ^ (byte) processChars::bitmask#3
Inferred type updated to byte in (unumber~) processChars::$14 ← (byte) processChars::i#4 * (byte) 2
Inferred type updated to byte in (unumber~) processChars::$18 ← (byte) processChars::i#4 * (byte) 2
Inferred type updated to byte in (unumber~) processChars::$34 ← (byte) $ff ^ (byte) processChars::bitmask#4
Inferred type updated to word in (unumber~) processChars::$26 ← (word) processChars::xpos#2 / (byte) 8
Inferred type updated to byte in (unumber~) processChars::$28 ← (byte) BORDER_XPOS_LEFT#0 / (byte) 8
Inferred type updated to byte in (unumber~) processChars::$29 ← (byte~) processChars::$27 - (byte~) processChars::$28
Inferred type updated to byte in (unumber~) processChars::$30 ← (byte) processChars::ypos#1 / (byte) 8
Inferred type updated to byte in (unumber~) processChars::$32 ← (byte) BORDER_YPOS_TOP#0 / (byte) 8
Inferred type updated to byte in (unumber~) processChars::$33 ← (byte~) processChars::$31 - (byte~) processChars::$32
Inferred type updated to byte in (unumber~) initSquareTables::$3 ← (byte) $14 - (byte) initSquareTables::x#3
Inferred type updated to byte in (unumber~) initSquareTables::$4 ← (byte~) initSquareTables::$3
Inferred type updated to byte in (unumber~) initSquareTables::$1 ← (byte) initSquareTables::x#4 - (byte) $14
Inferred type updated to byte in (unumber~) initSquareTables::$2 ← (byte~) initSquareTables::$1
Inferred type updated to byte for (unumber~) initSquareTables::$5
Inferred type updated to byte in (unumber~) initSquareTables::$11 ← (byte) $c - (byte) initSquareTables::y#3
Inferred type updated to byte in (unumber~) initSquareTables::$12 ← (byte~) initSquareTables::$11
Inferred type updated to byte in (unumber~) initSquareTables::$9 ← (byte) initSquareTables::y#4 - (byte) $c
Inferred type updated to byte in (unumber~) initSquareTables::$10 ← (byte~) initSquareTables::$9
Inferred type updated to byte for (unumber~) initSquareTables::$13
Inferred type updated to byte in (unumber~) initSprites::$0 ← (byte) NUM_PROCESSING#0 * (byte) $40
Inversing boolean not [38] (bool~) mul8u::$3 ← (byte~) mul8u::$1 == (byte) 0 from [37] (bool~) mul8u::$2 ← (byte~) mul8u::$1 != (byte) 0
Inversing boolean not [114] (bool~) main::$11 ← (word) main::center_dist#0 != (word) NOT_FOUND#0 from [113] (bool~) main::$10 ← (word) main::center_dist#0 == (word) NOT_FOUND#0
Inversing boolean not [137] (bool~) getCharToProcess::$3 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) == (byte) ' ' from [136] (bool~) getCharToProcess::$2 ← *((byte*) getCharToProcess::screen_line#2 + (byte) getCharToProcess::x#2) != (byte) ' '
Inversing boolean not [149] (bool~) getCharToProcess::$6 ← (word) getCharToProcess::dist#0 >= (word) getCharToProcess::closest_dist#2 from [148] (bool~) getCharToProcess::$5 ← (word) getCharToProcess::dist#0 < (word) getCharToProcess::closest_dist#2
Inversing boolean not [162] (bool~) getCharToProcess::$1 ← (word) getCharToProcess::closest_dist#3 == (word) NOT_FOUND#0 from [161] (bool~) getCharToProcess::$0 ← (word) getCharToProcess::closest_dist#3 != (word) NOT_FOUND#0
Inversing boolean not [188] (bool~) startProcessing::$25 ← *((byte*) startProcessing::$39 + (byte~) startProcessing::$29) != (byte) STATUS_FREE#0 from [187] (bool~) startProcessing::$24 ← *((byte*) startProcessing::$39 + (byte~) startProcessing::$29) == (byte) STATUS_FREE#0
Inversing boolean not [290] (bool~) processChars::$6 ← *((byte*) processChars::$40) == (byte) STATUS_FREE#0 from [289] (bool~) processChars::$5 ← *((byte*) processChars::$40) != (byte) STATUS_FREE#0
Inversing boolean not [299] (bool~) processChars::$8 ← *((byte*) processChars::$41) != (byte) STATUS_NEW#0 from [298] (bool~) processChars::$7 ← *((byte*) processChars::$41) == (byte) STATUS_NEW#0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (word) mul8u::mb#0 = (byte) mul8u::b#2
Alias (byte) mul8u::a#3 = (byte) mul8u::a#4 (byte) mul8u::a#7
Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5
Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#4 (word) mul8u::return#1
Alias (byte) mul8u::a#0 = (byte~) mul8u::$5
Alias (word) mul8u::mb#1 = (word~) mul8u::$6
Alias (word) mul8u::res#1 = (word~) mul8u::$4
Alias (void()*) setupRasterIrq::irqRoutine#0 = (void()*~) main::$2
Alias (byte) getCharToProcess::return_x#0 = (byte) getCharToProcess::return_x#3
Alias (byte) getCharToProcess::return_y#0 = (byte) getCharToProcess::return_y#3
Alias (word) getCharToProcess::return_dist#0 = (word) getCharToProcess::return_dist#3
Alias (byte) main::center_x#0 = (byte) main::$9_x (byte) main::center_x#1
Alias (byte) main::center_y#0 = (byte) main::$9_y (byte) main::center_y#1
Alias (word) main::center_dist#0 = (word) main::$9_dist (word) main::center_dist#1
Alias (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#4 (byte) getCharToProcess::x#5 (byte) getCharToProcess::closest_x#1
Alias (byte) getCharToProcess::y#2 = (byte) getCharToProcess::y#5 (byte) getCharToProcess::y#3 (byte) getCharToProcess::closest_y#1
Alias (word) getCharToProcess::closest_dist#2 = (word) getCharToProcess::closest_dist#5
Alias (byte*) getCharToProcess::screen_line#2 = (byte*) getCharToProcess::screen_line#6 (byte*) getCharToProcess::screen_line#7
Alias (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#8
Alias (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#8
Alias (word) getCharToProcess::dist#0 = (word~) getCharToProcess::$4 (word) getCharToProcess::dist#1 (word) getCharToProcess::closest_dist#1
Alias (byte*) getCharToProcess::screen_line#3 = (byte*) getCharToProcess::screen_line#5
Alias (byte) getCharToProcess::y#4 = (byte) getCharToProcess::y#6
Alias (word) getCharToProcess::closest_dist#3 = (word) getCharToProcess::closest_dist#6 (word) getCharToProcess::closest_dist#9 (word) getCharToProcess::closest_dist#7
Alias (byte) getCharToProcess::closest_x#3 = (byte) getCharToProcess::closest_x#5 (byte) getCharToProcess::closest_x#6 (byte) getCharToProcess::closest_x#4
Alias (byte) getCharToProcess::closest_y#3 = (byte) getCharToProcess::closest_y#5 (byte) getCharToProcess::closest_y#6 (byte) getCharToProcess::closest_y#4
Alias (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#2 (byte) getCharToProcess::return_x#4 (byte) getCharToProcess::return_x#2
Alias (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#2 (byte) getCharToProcess::return_y#4 (byte) getCharToProcess::return_y#2
Alias (word) getCharToProcess::return_dist#1 = (word) getCharToProcess::closest_dist#4 (word) getCharToProcess::return_dist#4 (word) getCharToProcess::return_dist#2
Alias (byte) startProcessing::i#2 = (byte) startProcessing::i#3 (byte) startProcessing::i#4 (byte) startProcessing::freeIdx#1
Alias (byte) startProcessing::freeIdx#4 = (byte) startProcessing::freeIdx#5
Alias (byte) startProcessing::center_y#5 = (byte) startProcessing::center_y#7 (byte) startProcessing::center_y#6
Alias (byte) startProcessing::center_x#5 = (byte) startProcessing::center_x#7 (byte) startProcessing::center_x#6
Alias (byte) startProcessing::freeIdx#2 = (byte) startProcessing::freeIdx#3 (byte) startProcessing::spriteIdx#0
Alias (byte) startProcessing::center_y#1 = (byte) startProcessing::center_y#3
Alias (byte) startProcessing::center_x#1 = (byte) startProcessing::center_x#3
Alias (byte*) startProcessing::screenPtr#0 = (byte*~) startProcessing::$3
Alias (byte*) startProcessing::spriteData#0 = (byte*~) startProcessing::$6
Alias (byte*) startProcessing::chargenData#0 = (byte*~) startProcessing::$9
Alias (byte) startProcessing::center_x#2 = (byte) startProcessing::center_x#4
Alias (byte) startProcessing::center_y#2 = (byte) startProcessing::center_y#4
Alias (byte) startProcessing::spriteIdx#1 = (byte) startProcessing::spriteIdx#2
Alias (byte*) startProcessing::screenPtr#1 = (byte*) startProcessing::screenPtr#2
Alias (word) startProcessing::spriteX#0 = (word~) startProcessing::$13
Alias (word) startProcessing::spriteY#0 = (word~) startProcessing::$17
Alias (byte) startProcessing::spritePtr#0 = (byte~) startProcessing::$20
Alias (word) XPOS_LEFTMOST#0 = (word~) $2
Alias (word) BORDER_XPOS_RIGHT#0 = (word~) $3
Alias (word) XPOS_RIGHTMOST#0 = (word~) $4
Alias (word) YPOS_TOPMOST#0 = (word~) $7
Alias (word) YPOS_BOTTOMMOST#0 = (word~) $9
Alias (struct ProcessingSprite*) processChars::processing#0 = (struct ProcessingSprite*~) processChars::$3 (struct ProcessingSprite*) processChars::processing#1 (struct ProcessingSprite*) processChars::processing#3
Alias (byte) processChars::bitmask#0 = (byte~) processChars::$4 (byte) processChars::bitmask#5 (byte) processChars::bitmask#1
Alias (byte) processChars::i#11 = (byte) processChars::i#2 (byte) processChars::i#12
Alias (byte) processChars::numActive#12 = (byte) processChars::numActive#7 (byte) processChars::numActive#13
Alias (word) processChars::xpos#0 = (word~) processChars::$11 (word) processChars::xpos#3 (word) processChars::xpos#4
Alias (byte) processChars::bitmask#2 = (byte) processChars::bitmask#6 (byte) processChars::bitmask#3
Alias (byte) processChars::i#6 = (byte) processChars::i#8 (byte) processChars::i#7
Alias (struct ProcessingSprite*) processChars::processing#2 = (struct ProcessingSprite*) processChars::processing#7 (struct ProcessingSprite*) processChars::processing#8
Alias (byte) processChars::numActive#10 = (byte) processChars::numActive#9 (byte) processChars::numActive#11
Alias (byte) processChars::ypos#0 = (byte~) processChars::$17 (byte) processChars::ypos#1
Alias (struct ProcessingSprite*) processChars::processing#4 = (struct ProcessingSprite*) processChars::processing#5 (struct ProcessingSprite*) processChars::processing#6
Alias (byte) processChars::bitmask#4 = (byte) processChars::bitmask#7
Alias (byte) processChars::numActive#4 = (byte) processChars::numActive#5 (byte) processChars::numActive#8
Alias (byte) processChars::i#10 = (byte) processChars::i#4 (byte) processChars::i#9
Alias (word) processChars::xpos#1 = (word) processChars::xpos#2
Alias (byte) processChars::xchar#0 = (byte~) processChars::$29
Alias (byte) processChars::ychar#0 = (byte~) processChars::$33
Alias (byte) processChars::numActive#3 = (byte) processChars::numActive#6
Alias (byte) initSquareTables::x#2 = (byte) initSquareTables::x#3 (byte) initSquareTables::x#4
Alias (byte~) initSquareTables::$4 = (byte~) initSquareTables::$3
Alias (byte~) initSquareTables::$2 = (byte~) initSquareTables::$1
Alias (byte) initSquareTables::x_dist#0 = (byte~) initSquareTables::$5
Alias (word) mul8u::return#2 = (word) mul8u::return#5
Alias (byte) initSquareTables::x#5 = (byte) initSquareTables::x#6
Alias (byte) initSquareTables::y#2 = (byte) initSquareTables::y#3 (byte) initSquareTables::y#4
Alias (byte~) initSquareTables::$12 = (byte~) initSquareTables::$11
Alias (byte~) initSquareTables::$10 = (byte~) initSquareTables::$9
Alias (byte) initSquareTables::y_dist#0 = (byte~) initSquareTables::$13
Alias (word) mul8u::return#3 = (word) mul8u::return#6
Alias (byte) initSquareTables::y#5 = (byte) initSquareTables::y#6
Alias (word) setupRasterIrq::raster#1 = (word) setupRasterIrq::raster#3 (word) setupRasterIrq::raster#4
Alias (void()*) setupRasterIrq::irqRoutine#2 = (void()*) setupRasterIrq::irqRoutine#4 (void()*) setupRasterIrq::irqRoutine#3
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) (byte) getCharToProcess::x#2
Alias candidate removed (phi-usage) (byte) getCharToProcess::y#2
Alias candidate removed (solo) (byte) getCharToProcess::x#3 =
Alias candidate removed (solo) (byte) getCharToProcess::y#4 =
Alias (byte) mul8u::a#3 = (byte) mul8u::a#5
Alias (word) mul8u::mb#2 = (word) mul8u::mb#3
Alias (byte*) getCharToProcess::screen_line#2 = (byte*) getCharToProcess::screen_line#3
Alias (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#3
Alias (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#3
Alias (word) getCharToProcess::return_dist#1 = (word) getCharToProcess::closest_dist#3
Alias (byte) startProcessing::center_y#1 = (byte) startProcessing::center_y#5
Alias (byte) startProcessing::center_x#1 = (byte) startProcessing::center_x#5
Alias (struct ProcessingSprite*) processChars::processing#0 = (struct ProcessingSprite*) processChars::processing#2 (struct ProcessingSprite*) processChars::processing#4
Alias (byte) processChars::bitmask#0 = (byte) processChars::bitmask#2 (byte) processChars::bitmask#4
Alias (byte) processChars::i#10 = (byte) processChars::i#6 (byte) processChars::i#11 (byte) processChars::i#5
Alias (byte) processChars::numActive#10 = (byte) processChars::numActive#12 (byte) processChars::numActive#4 (byte) processChars::numActive#2
Alias (word) processChars::xpos#0 = (word) processChars::xpos#1
Alias (byte) initSquareTables::x#2 = (byte) initSquareTables::x#5
Alias (byte) initSquareTables::y#2 = (byte) initSquareTables::y#5
Alias (word) setupRasterIrq::raster#1 = (word) setupRasterIrq::raster#2
Alias (void()*) setupRasterIrq::irqRoutine#1 = (void()*) setupRasterIrq::irqRoutine#2
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) (byte) getCharToProcess::x#2
Alias candidate removed (phi-usage) (byte) getCharToProcess::y#2
Alias candidate removed (solo) (byte) getCharToProcess::x#3 =
Alias candidate removed (solo) (byte) getCharToProcess::y#4 =
Alias (byte) processChars::i#10 = (byte) processChars::i#3
Successful SSA optimization Pass2AliasElimination
Alias candidate removed (phi-usage) (byte) getCharToProcess::x#2
Alias candidate removed (phi-usage) (byte) getCharToProcess::y#2
Alias candidate removed (solo) (byte) getCharToProcess::x#3 =
Alias candidate removed (solo) (byte) getCharToProcess::y#4 =
Self Phi Eliminated (byte*) getCharToProcess::screen_line#2
Self Phi Eliminated (byte) startProcessing::freeIdx#4
Self Phi Eliminated (byte) startProcessing::center_y#1
Self Phi Eliminated (byte) startProcessing::center_x#1
Self Phi Eliminated (byte) startProcessing::center_x#2
Self Phi Eliminated (byte) startProcessing::center_y#2
Self Phi Eliminated (byte) startProcessing::spriteIdx#1
Self Phi Eliminated (byte*) startProcessing::screenPtr#1
Successful SSA optimization Pass2SelfPhiElimination
Identical Phi Values (byte*) getCharToProcess::screen_line#2 (byte*) getCharToProcess::screen_line#4
Identical Phi Values (byte) getCharToProcess::x#3 (byte) getCharToProcess::x#2
Identical Phi Values (byte) getCharToProcess::y#4 (byte) getCharToProcess::y#2
Identical Phi Values (byte) startProcessing::center_y#9 (byte) startProcessing::center_y#0
Identical Phi Values (byte) startProcessing::center_x#9 (byte) startProcessing::center_x#0
Identical Phi Values (byte) startProcessing::freeIdx#4 (byte) startProcessing::freeIdx#6
Identical Phi Values (byte) startProcessing::center_y#1 (byte) startProcessing::center_y#8
Identical Phi Values (byte) startProcessing::center_x#1 (byte) startProcessing::center_x#8
Identical Phi Values (byte) startProcessing::center_x#2 (byte) startProcessing::center_x#1
Identical Phi Values (byte) startProcessing::center_y#2 (byte) startProcessing::center_y#1
Identical Phi Values (byte) startProcessing::spriteIdx#1 (byte) startProcessing::freeIdx#2
Identical Phi Values (byte*) startProcessing::screenPtr#1 (byte*) startProcessing::screenPtr#0
Identical Phi Values (word) setupRasterIrq::raster#1 (word) setupRasterIrq::raster#0
Identical Phi Values (void()*) setupRasterIrq::irqRoutine#1 (void()*) setupRasterIrq::irqRoutine#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [332] (byte~) processChars::$18 ← (byte) processChars::i#10 * (byte) 2
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) mul8u::$0 [34] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2
Simple Condition (bool~) mul8u::$3 [39] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@4
Simple Condition (bool~) main::$6 [73] if((byte*) main::src#1!=(byte*~) main::$5) goto main::@1
Simple Condition (bool~) main::$8 [96] if((byte) main::i#1!=rangelast(0,main::$7)) goto main::@3
Simple Condition (bool~) main::$11 [115] if((word) main::center_dist#0!=(word) NOT_FOUND#0) goto main::@6
Simple Condition (bool~) getCharToProcess::$3 [138] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@5
Simple Condition (bool~) getCharToProcess::$7 [142] if((byte) getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4
Simple Condition (bool~) getCharToProcess::$6 [150] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@5
Simple Condition (bool~) getCharToProcess::$8 [159] if((byte) getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3
Simple Condition (bool~) getCharToProcess::$1 [163] if((word) getCharToProcess::return_dist#1==(word) NOT_FOUND#0) goto getCharToProcess::@1
Simple Condition (bool~) startProcessing::$25 [189] if(*((byte*) startProcessing::$39 + (byte~) startProcessing::$29)!=(byte) STATUS_FREE#0) goto startProcessing::@3
Simple Condition (bool~) startProcessing::$26 [193] if((byte) startProcessing::i#1!=rangelast(0,startProcessing::$23)) goto startProcessing::@2
Simple Condition (bool~) startProcessing::$27 [198] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@1
Simple Condition (bool~) startProcessing::$28 [224] if((byte) startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9
Simple Condition (bool~) processChars::$6 [291] if(*((byte*) processChars::$40)==(byte) STATUS_FREE#0) goto processChars::@2
Simple Condition (bool~) processChars::$35 [295] if((byte) processChars::i#1!=rangelast(0,processChars::$2)) goto processChars::@1
Simple Condition (bool~) processChars::$8 [300] if(*((byte*) processChars::$41)!=(byte) STATUS_NEW#0) goto processChars::@3
Simple Condition (bool~) processChars::$63 [307] if((byte) 0!=(byte~) processChars::$12) goto processChars::@4
Simple Condition (bool~) initSquareTables::$0 [390] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2
Simple Condition (bool~) initSquareTables::$7 [409] if((byte) initSquareTables::x#1!=rangelast(0,$27)) goto initSquareTables::@1
Simple Condition (bool~) initSquareTables::$8 [413] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@9
Simple Condition (bool~) initSquareTables::$15 [432] if((byte) initSquareTables::y#1!=rangelast(0,$18)) goto initSquareTables::@8
Simple Condition (bool~) initSprites::$2 [441] if((byte*) initSprites::sp#1<(byte*~) initSprites::$1) goto initSprites::@1
Simple Condition (bool~) initSprites::$3 [447] if((byte) initSprites::i#1!=rangelast(0,7)) goto initSprites::@3
Simple Condition (bool~) setupRasterIrq::$0 [458] if((word) setupRasterIrq::raster#0<(word) $100) goto setupRasterIrq::@1
Simple Condition (bool~) irqTop::$1 [475] if((byte) irqTop::i#1!=rangelast(0,4)) goto irqTop::@1
Simple Condition (bool~) irqTop::$2 [480] if((byte) irqTop::i1#1!=rangelast(0,7)) goto irqTop::@3
Simple Condition (bool~) irqBottom::$2 [491] if((byte) irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting || if()-condition to two if()s [344] (bool~) processChars::$25 ← (bool~) processChars::$23 || (bool~) processChars::$24
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting || if()-condition to two if()s [341] (bool~) processChars::$23 ← (bool~) processChars::$21 || (bool~) processChars::$22
Successful SSA optimization Pass2ConditionalAndOrRewriting
Rewriting || if()-condition to two if()s [338] (bool~) processChars::$21 ← (bool~) processChars::$19 || (bool~) processChars::$20
Successful SSA optimization Pass2ConditionalAndOrRewriting
Constant right-side identified [57] (byte[$3e8]) SCREEN_COPY#0 ← { fill( $3e8, 0) }
Constant right-side identified [98] (void()*) setupRasterIrq::irqRoutine#0 ← & interrupt(HARDWARE_ALL)(void()) irqTop()
Constant right-side identified [385] (word[$28]) SQUARES_X#0 ← { fill( $28, 0) }
Constant right-side identified [386] (word[$19]) SQUARES_Y#0 ← { fill( $19, 0) }
Constant right-side identified [482] (void()*~) irqTop::$0 ← & interrupt(HARDWARE_ALL)(void()) irqBottom()
Constant right-side identified [494] (void()*~) irqBottom::$1 ← & interrupt(HARDWARE_ALL)(void()) irqTop()
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) PROCPORT_DDR#0 = (byte*) 0
Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7
Constant (const byte*) PROCPORT#0 = (byte*) 1
Constant (const byte) PROCPORT_RAM_IO#0 = $35
Constant (const byte) PROCPORT_RAM_CHARROM#0 = $31
Constant (const byte*) CHARGEN#0 = (byte*) 53248
Constant (const byte) BORDER_XPOS_LEFT#0 = $18
Constant (const word) BORDER_XPOS_RIGHT#0 = $158
Constant (const byte) BORDER_YPOS_TOP#0 = $32
Constant (const byte) BORDER_YPOS_BOTTOM#0 = $fa
Constant (const word) SPRITE_PTRS#0 = $3f8
Constant (const byte*) SPRITES_XPOS#0 = (byte*) 53248
Constant (const byte*) SPRITES_YPOS#0 = (byte*) 53249
Constant (const byte*) SPRITES_XMSB#0 = (byte*) 53264
Constant (const byte*) RASTER#0 = (byte*) 53266
Constant (const byte*) SPRITES_ENABLE#0 = (byte*) 53269
Constant (const byte*) SPRITES_EXPAND_Y#0 = (byte*) 53271
Constant (const byte*) SPRITES_MC#0 = (byte*) 53276
Constant (const byte*) SPRITES_EXPAND_X#0 = (byte*) 53277
Constant (const byte*) SPRITES_COLS#0 = (byte*) 53287
Constant (const byte*) VIC_CONTROL#0 = (byte*) 53265
Constant (const byte*) IRQ_STATUS#0 = (byte*) 53273
Constant (const byte*) IRQ_ENABLE#0 = (byte*) 53274
Constant (const byte) IRQ_RASTER#0 = 1
Constant (const byte*) COLS#0 = (byte*) 55296
Constant (const byte*) CIA1_INTERRUPT#0 = (byte*) 56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = $7f
Constant (const void()**) HARDWARE_IRQ#0 = (void()**) 65534
Constant (const byte) LIGHT_BLUE#0 = $e
Constant (const word) mul8u::res#0 = 0
Constant (const byte*) SCREEN#0 = (byte*) 1024
Constant (const byte*) SPRITE_DATA#0 = (byte*) 8192
Constant (const word*) VXSIN#0 = (word*) 8704
Constant (const word*) VYSIN#0 = (word*) 8832
Constant (const byte[$3e8]) SCREEN_COPY#0 = { fill( $3e8, 0) }
Constant (const byte) NUM_PROCESSING#0 = 8
Constant (const word) NOT_FOUND#0 = $ffff
Constant (const byte) STATUS_FREE#0 = 0
Constant (const byte) STATUS_NEW#0 = 1
Constant (const byte) STATUS_PROCESSING#0 = 2
Constant (const byte) main::i#0 = 0
Constant (const void()*) setupRasterIrq::irqRoutine#0 = &irqTop
Constant (const byte) getCharToProcess::closest_x#0 = 0
Constant (const byte) getCharToProcess::closest_y#0 = 0
Constant (const byte) getCharToProcess::y#0 = 0
Constant (const byte) getCharToProcess::x#0 = 0
Constant (const byte) startProcessing::freeIdx#0 = $ff
Constant (const byte) startProcessing::i#0 = 0
Constant (const byte) startProcessing::i1#0 = 0
Constant (const byte) processChars::numActive#0 = 0
Constant (const byte) processChars::i#0 = 0
Constant (const word[$28]) SQUARES_X#0 = { fill( $28, 0) }
Constant (const word[$19]) SQUARES_Y#0 = { fill( $19, 0) }
Constant (const byte) initSquareTables::x#0 = 0
Constant (const byte) initSquareTables::y#0 = 0
Constant (const byte) initSprites::i#0 = 0
Constant (const byte) RASTER_IRQ_TOP#0 = $30
Constant (const byte) irqTop::i#0 = 0
Constant (const byte) irqTop::i1#0 = 0
Constant (const void()*) irqTop::$0 = &irqBottom
Constant (const byte) RASTER_IRQ_MIDDLE#0 = $ff
Constant (const byte) irqBottom::i#0 = 0
Constant (const void()*) irqBottom::$1 = &irqTop
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) main::src#0 = SCREEN#0
Constant (const byte*) main::dst#0 = SCREEN_COPY#0
Constant (const word) setupRasterIrq::raster#0 = RASTER_IRQ_TOP#0
Constant (const word) getCharToProcess::closest_dist#0 = NOT_FOUND#0
Constant (const byte*) getCharToProcess::screen_line#0 = SCREEN_COPY#0
Constant (const byte*) initSprites::sp#0 = SPRITE_DATA#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified { fill( NUM_PROCESSING#0, 0) } in [63] (struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 ← { fill( NUM_PROCESSING#0, 0) }
Constant value identified (word)BORDER_YPOS_BOTTOM#0 in [273] (word~) $8 ← (word)(const byte) BORDER_YPOS_BOTTOM#0
Successful SSA optimization Pass2ConstantValues
if() condition always true - replacing block destination [121] if(true) goto main::@5
if() condition always true - replacing block destination [126] if(true) goto main::@11
if() condition always true - replacing block destination [458] if((const word) setupRasterIrq::raster#0<(word) $100) goto setupRasterIrq::@1
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [140] getCharToProcess::x#1 ← ++ getCharToProcess::x#2 to ++
Resolved ranged comparison value [142] if(getCharToProcess::x#1!=rangelast(0,$27)) goto getCharToProcess::@4 to (number) $28
Resolved ranged next value [157] getCharToProcess::y#1 ← ++ getCharToProcess::y#2 to ++
Resolved ranged comparison value [159] if(getCharToProcess::y#1!=rangelast(0,$18)) goto getCharToProcess::@3 to (number) $19
Resolved ranged next value [222] startProcessing::i1#1 ← ++ startProcessing::i1#2 to ++
Resolved ranged comparison value [224] if(startProcessing::i1#1!=rangelast(0,7)) goto startProcessing::@9 to (number) 8
Resolved ranged next value [407] initSquareTables::x#1 ← ++ initSquareTables::x#2 to ++
Resolved ranged comparison value [409] if(initSquareTables::x#1!=rangelast(0,$27)) goto initSquareTables::@1 to (number) $28
Resolved ranged next value [430] initSquareTables::y#1 ← ++ initSquareTables::y#2 to ++
Resolved ranged comparison value [432] if(initSquareTables::y#1!=rangelast(0,$18)) goto initSquareTables::@8 to (number) $19
Resolved ranged next value [445] initSprites::i#1 ← ++ initSprites::i#2 to ++
Resolved ranged comparison value [447] if(initSprites::i#1!=rangelast(0,7)) goto initSprites::@3 to (number) 8
Resolved ranged next value [473] irqTop::i#1 ← ++ irqTop::i#2 to ++
Resolved ranged comparison value [475] if(irqTop::i#1!=rangelast(0,4)) goto irqTop::@1 to (number) 5
Resolved ranged next value [478] irqTop::i1#1 ← ++ irqTop::i1#2 to ++
Resolved ranged comparison value [480] if(irqTop::i1#1!=rangelast(0,7)) goto irqTop::@3 to (number) 8
Resolved ranged next value [489] irqBottom::i#1 ← ++ irqBottom::i#2 to ++
Resolved ranged comparison value [491] if(irqBottom::i#1!=rangelast(0,4)) goto irqBottom::@1 to (number) 5
Converting *(pointer+n) to pointer[n] [173] *((byte*~) getCharToProcess::$12) ← (byte) ' ' -- *(getCharToProcess::$11 + getCharToProcess::return_x#1)
Converting *(pointer+n) to pointer[n] [210] (byte) startProcessing::ch#0 ← *((byte*) startProcessing::screenPtr#0) -- *(startProcessing::$2 + startProcessing::center_x#8)
Converting *(pointer+n) to pointer[n] [286] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*) processChars::$39) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID)
Converting *(pointer+n) to pointer[n] [291] if(*((byte*) processChars::$40)==(const byte) STATUS_FREE#0) goto processChars::@2 -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [300] if(*((byte*) processChars::$41)!=(const byte) STATUS_NEW#0) goto processChars::@3 -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [303] (word) processChars::xpos#0 ← *((word*) processChars::$42) >> (byte) 4 -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [310] *(*((byte**) processChars::$43)) ← (byte) ' ' -- *((byte**)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)
Converting *(pointer+n) to pointer[n] [314] (byte*~) processChars::$10 ← (byte*~) processChars::$9 + *((byte*) processChars::$44) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID)
Converting *(pointer+n) to pointer[n] [316] *((byte*~) processChars::$10) ← *((byte*) processChars::$45) -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_PTR)
Converting *(pointer+n) to pointer[n] [316] *((byte*~) processChars::$10) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- *(processChars::$9 + *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_ID))
Converting *(pointer+n) to pointer[n] [318] *((byte*) processChars::$46) ← (const byte) STATUS_PROCESSING#0 -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [329] (word~) processChars::$16 ← *((word*) processChars::$47) >> (byte) 4 -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [335] (bool~) processChars::$19 ← *((word*) processChars::$48) < (word) XPOS_LEFTMOST#0 -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [337] (bool~) processChars::$20 ← *((word*) processChars::$49) > (word) XPOS_RIGHTMOST#0 -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [340] (bool~) processChars::$22 ← *((word*) processChars::$50) < (word) YPOS_TOPMOST#0 -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [343] (bool~) processChars::$24 ← *((word*) processChars::$51) > (word) YPOS_BOTTOMMOST#0 -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [348] *((byte*) processChars::$52) ← (const byte) STATUS_FREE#0 -- *((byte*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)
Converting *(pointer+n) to pointer[n] [360] *((word*) processChars::$54) ← *((word*) processChars::$53) + *((const word*) VXSIN#0 + (byte~) processChars::$37) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Converting *(pointer+n) to pointer[n] [360] *((word*) processChars::$54) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN#0 + (byte~) processChars::$37) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Converting *(pointer+n) to pointer[n] [364] *((word*) processChars::$57) ← *((word*) processChars::$55) + *((word*) processChars::$56) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [364] *((word*) processChars::$57) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*) processChars::$56) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Converting *(pointer+n) to pointer[n] [364] *((word*) processChars::$57) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_X)
Converting *(pointer+n) to pointer[n] [373] *((word*) processChars::$59) ← *((word*) processChars::$58) + *((const word*) VYSIN#0 + (byte~) processChars::$38) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY)
Converting *(pointer+n) to pointer[n] [373] *((word*) processChars::$59) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN#0 + (byte~) processChars::$38) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY)
Converting *(pointer+n) to pointer[n] [377] *((word*) processChars::$62) ← *((word*) processChars::$60) + *((word*) processChars::$61) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Converting *(pointer+n) to pointer[n] [377] *((word*) processChars::$62) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*) processChars::$61) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_VY)
Converting *(pointer+n) to pointer[n] [377] *((word*) processChars::$62) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- *((word*)processChars::processing#0 + OFFSET_STRUCT_PROCESSINGSPRITE_Y)
Successful SSA optimization Pass2InlineDerefIdx
Simplifying expression containing zero (word*)PROCESSING#0 in [78] (word*) main::$17 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)PROCESSING#0 in [245] (word*) startProcessing::$31 ← (word*)(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [302] (word*) processChars::$42 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [303] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) >> (byte) 4
Simplifying expression containing zero (word*)processChars::processing#0 in [334] (word*) processChars::$48 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [335] (bool~) processChars::$19 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) < (word) XPOS_LEFTMOST#0
Simplifying expression containing zero (word*)processChars::processing#0 in [336] (word*) processChars::$49 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [337] (bool~) processChars::$20 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) > (word) XPOS_RIGHTMOST#0
Simplifying expression containing zero (word*)processChars::processing#0 in [361] (word*) processChars::$55 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [363] (word*) processChars::$57 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Simplifying expression containing zero (word*)processChars::processing#0 in [364] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Simplifying expression containing zero (word*)processChars::processing#0 in [364] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused variable (word) startProcessing::center_dist#0 and assignment [51] (word) startProcessing::center_dist#0 ← (word) main::center_dist#0
Eliminating unused variable (byte*~) getCharToProcess::$12 and assignment [75] (byte*~) getCharToProcess::$12 ← (byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1
Eliminating unused variable (byte*) processChars::$39 and assignment [155] (byte*) processChars::$39 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable (byte*) processChars::$40 and assignment [157] (byte*) processChars::$40 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (byte*) processChars::$41 and assignment [162] (byte*) processChars::$41 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (word*) processChars::$42 and assignment [164] (word*) processChars::$42 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (byte**) processChars::$43 and assignment [168] (byte**) processChars::$43 ← (byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Eliminating unused variable (byte*) processChars::$44 and assignment [172] (byte*) processChars::$44 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Eliminating unused variable (byte*~) processChars::$10 and assignment [173] (byte*~) processChars::$10 ← (byte*~) processChars::$9 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
Eliminating unused variable (byte*) processChars::$45 and assignment [174] (byte*) processChars::$45 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Eliminating unused variable (byte*) processChars::$46 and assignment [176] (byte*) processChars::$46 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (word*) processChars::$47 and assignment [184] (word*) processChars::$47 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (word*) processChars::$48 and assignment [189] (word*) processChars::$48 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*) processChars::$49 and assignment [191] (word*) processChars::$49 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*) processChars::$50 and assignment [193] (word*) processChars::$50 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (word*) processChars::$51 and assignment [195] (word*) processChars::$51 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (byte*) processChars::$52 and assignment [198] (byte*) processChars::$52 ← (byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Eliminating unused variable (word*) processChars::$53 and assignment [207] (word*) processChars::$53 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable (word*) processChars::$54 and assignment [208] (word*) processChars::$54 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable (word*) processChars::$55 and assignment [210] (word*) processChars::$55 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*) processChars::$56 and assignment [211] (word*) processChars::$56 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Eliminating unused variable (word*) processChars::$57 and assignment [212] (word*) processChars::$57 ← (word*)(struct ProcessingSprite*) processChars::processing#0
Eliminating unused variable (word*) processChars::$58 and assignment [219] (word*) processChars::$58 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable (word*) processChars::$59 and assignment [220] (word*) processChars::$59 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable (word*) processChars::$60 and assignment [222] (word*) processChars::$60 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused variable (word*) processChars::$61 and assignment [223] (word*) processChars::$61 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Eliminating unused variable (word*) processChars::$62 and assignment [224] (word*) processChars::$62 ← (word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Eliminating unused constant (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_X
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block main::@return
Removing unused block setupRasterIrq::@3
Successful SSA optimization Pass2EliminateUnusedBlocks
Adding number conversion cast (unumber) $28 in if((byte) getCharToProcess::x#1!=(number) $28) goto getCharToProcess::@4
Adding number conversion cast (unumber) $19 in if((byte) getCharToProcess::y#1!=(number) $19) goto getCharToProcess::@3
Adding number conversion cast (unumber) 8 in if((byte) startProcessing::i1#1!=(number) 8) goto startProcessing::@9
Adding number conversion cast (unumber) $28 in if((byte) initSquareTables::x#1!=(number) $28) goto initSquareTables::@1
Adding number conversion cast (unumber) $19 in if((byte) initSquareTables::y#1!=(number) $19) goto initSquareTables::@8
Adding number conversion cast (unumber) 8 in if((byte) initSprites::i#1!=(number) 8) goto initSprites::@3
Adding number conversion cast (unumber) 5 in if((byte) irqTop::i#1!=(number) 5) goto irqTop::@1
Adding number conversion cast (unumber) 8 in if((byte) irqTop::i1#1!=(number) 8) goto irqTop::@3
Adding number conversion cast (unumber) 5 in if((byte) irqBottom::i#1!=(number) 5) goto irqBottom::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $28
Simplifying constant integer cast $19
Simplifying constant integer cast 8
Simplifying constant integer cast (byte~) processChars::$30
Simplifying constant integer cast $28
Simplifying constant integer cast $19
Simplifying constant integer cast 8
Simplifying constant integer cast 5
Simplifying constant integer cast 8
Simplifying constant integer cast 5
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) $19
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 5
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte~) processChars::$18 = (byte~) processChars::$14
Alias (byte~) processChars::$31 = (byte~) processChars::$30
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte) getCharToProcess::y#2
Self Phi Eliminated (byte) startProcessing::center_y#8
Self Phi Eliminated (byte) startProcessing::center_x#8
Successful SSA optimization Pass2SelfPhiElimination
Identical Phi Values (byte) getCharToProcess::y#2 (byte) getCharToProcess::y#7
Identical Phi Values (byte) startProcessing::center_y#8 (byte) startProcessing::center_y#0
Identical Phi Values (byte) startProcessing::center_x#8 (byte) startProcessing::center_x#0
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) processChars::$19 [180] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(word) XPOS_LEFTMOST#0) goto processChars::@6
Simple Condition (bool~) processChars::$24 [276] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(word) YPOS_BOTTOMMOST#0) goto processChars::@6
Simple Condition (bool~) processChars::$22 [277] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(word) YPOS_TOPMOST#0) goto processChars::@6
Simple Condition (bool~) processChars::$20 [278] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(word) XPOS_RIGHTMOST#0) goto processChars::@6
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [16] (byte*~) main::$5 ← (const byte*) SCREEN#0 + (word) $3e8
Constant right-side identified [18] (byte~) main::$7 ← (const byte) NUM_PROCESSING#0 - (byte) 1
Constant right-side identified [52] (byte*~) main::$4 ← (const byte*) SCREEN#0 + (word) $3e7
Constant right-side identified [54] (byte*~) main::$15 ← (const byte*) COLS#0 + (word) $3e7
Constant right-side identified [76] (byte~) startProcessing::$23 ← (const byte) NUM_PROCESSING#0 - (byte) 1
Constant right-side identified [114] (byte*~) startProcessing::$18 ← (const byte*) SPRITE_DATA#0 / (byte) $40
Constant right-side identified [137] (byte~) $0 ← (const byte) BORDER_XPOS_LEFT#0 - (byte) 8
Constant right-side identified [140] (word) XPOS_RIGHTMOST#0 ← (const word) BORDER_XPOS_RIGHT#0 << (byte) 4
Constant right-side identified [141] (byte~) $5 ← (const byte) BORDER_YPOS_TOP#0 - (byte) 8
Constant right-side identified [148] (byte~) processChars::$2 ← (const byte) NUM_PROCESSING#0 - (byte) 1
Constant right-side identified [163] (byte*~) processChars::$9 ← (const byte*) SCREEN#0 + (const word) SPRITE_PTRS#0
Constant right-side identified [186] (byte~) processChars::$28 ← (const byte) BORDER_XPOS_LEFT#0 / (byte) 8
Constant right-side identified [193] (byte~) processChars::$32 ← (const byte) BORDER_YPOS_TOP#0 / (byte) 8
Constant right-side identified [199] (byte*~) processChars::$0 ← (const byte*) SCREEN#0 + (word) $3e7
Constant right-side identified [235] (byte~) initSprites::$0 ← (const byte) NUM_PROCESSING#0 * (byte) $40
Constant right-side identified [251] (byte~) setupRasterIrq::$1 ← < (const word) setupRasterIrq::raster#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 = { fill( NUM_PROCESSING#0, 0) }
Constant (const byte*) main::$5 = SCREEN#0+$3e8
Constant (const byte) main::$7 = NUM_PROCESSING#0-1
Constant (const byte*) main::$4 = SCREEN#0+$3e7
Constant (const byte*) main::$15 = COLS#0+$3e7
Constant (const byte) startProcessing::$23 = NUM_PROCESSING#0-1
Constant (const byte*) startProcessing::$18 = SPRITE_DATA#0/$40
Constant (const byte) $0 = BORDER_XPOS_LEFT#0-8
Constant (const word) XPOS_RIGHTMOST#0 = BORDER_XPOS_RIGHT#0<<4
Constant (const byte) $5 = BORDER_YPOS_TOP#0-8
Constant (const word) $8 = (word)BORDER_YPOS_BOTTOM#0
Constant (const byte) processChars::$2 = NUM_PROCESSING#0-1
Constant (const byte*) processChars::$9 = SCREEN#0+SPRITE_PTRS#0
Constant (const byte) processChars::$28 = BORDER_XPOS_LEFT#0/8
Constant (const byte) processChars::$32 = BORDER_YPOS_TOP#0/8
Constant (const byte*) processChars::$0 = SCREEN#0+$3e7
Constant (const byte) initSprites::$0 = NUM_PROCESSING#0*$40
Constant (const byte) setupRasterIrq::$1 = <setupRasterIrq::raster#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (word*)PROCESSING#0 in [21] (word*) main::$17 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant value identified (word*)PROCESSING#0 in [23] (word*) main::$18 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant value identified (word*)PROCESSING#0 in [25] (word*) main::$19 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant value identified (word*)PROCESSING#0 in [27] (word*) main::$20 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant value identified (byte*)PROCESSING#0 in [29] (byte*) main::$21 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant value identified (byte*)PROCESSING#0 in [31] (byte*) main::$22 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant value identified (byte*)PROCESSING#0 in [33] (byte*) main::$23 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant value identified (byte**)PROCESSING#0 in [35] (byte**) main::$24 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant value identified (byte*)PROCESSING#0 in [79] (byte*) startProcessing::$39 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant value identified (byte)startProcessing::$18 in [115] (byte~) startProcessing::$19 ← (byte)(const byte*) startProcessing::$18
Constant value identified (word*)PROCESSING#0 in [120] (word*) startProcessing::$31 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant value identified (word*)PROCESSING#0 in [122] (word*) startProcessing::$32 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant value identified (word*)PROCESSING#0 in [124] (word*) startProcessing::$33 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant value identified (word*)PROCESSING#0 in [126] (word*) startProcessing::$34 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant value identified (byte*)PROCESSING#0 in [128] (byte*) startProcessing::$35 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant value identified (byte*)PROCESSING#0 in [130] (byte*) startProcessing::$36 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant value identified (byte*)PROCESSING#0 in [132] (byte*) startProcessing::$37 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant value identified (byte**)PROCESSING#0 in [134] (byte**) startProcessing::$38 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant value identified (word)$0 in [138] (word~) $1 ← (word)(const byte) $0
Constant value identified (word)$5 in [142] (word~) $6 ← (word)(const byte) $5
Successful SSA optimization Pass2ConstantValues
Resolved ranged next value [37] main::i#1 ← ++ main::i#2 to ++
Resolved ranged comparison value [38] if(main::i#1!=rangelast(0,main::$7)) goto main::@3 to (const byte) main::$7+(number) 1
Resolved ranged next value [81] startProcessing::i#1 ← ++ startProcessing::i#2 to ++
Resolved ranged comparison value [82] if(startProcessing::i#1!=rangelast(0,startProcessing::$23)) goto startProcessing::@2 to (const byte) startProcessing::$23+(number) 1
Resolved ranged next value [155] processChars::i#1 ← ++ processChars::i#10 to ++
Resolved ranged comparison value [156] if(processChars::i#1!=rangelast(0,processChars::$2)) goto processChars::@1 to (const byte) processChars::$2+(number) 1
Adding number conversion cast (unumber) main::$7+1 in if((byte) main::i#1!=(const byte) main::$7+(number) 1) goto main::@3
Adding number conversion cast (unumber) 1 in if((byte) main::i#1!=(unumber)(const byte) main::$7+(number) 1) goto main::@3
Adding number conversion cast (unumber) startProcessing::$23+1 in if((byte) startProcessing::i#1!=(const byte) startProcessing::$23+(number) 1) goto startProcessing::@2
Adding number conversion cast (unumber) 1 in if((byte) startProcessing::i#1!=(unumber)(const byte) startProcessing::$23+(number) 1) goto startProcessing::@2
Adding number conversion cast (unumber) processChars::$2+1 in if((byte) processChars::i#1!=(const byte) processChars::$2+(number) 1) goto processChars::@1
Adding number conversion cast (unumber) 1 in if((byte) processChars::i#1!=(unumber)(const byte) processChars::$2+(number) 1) goto processChars::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const byte) main::$7+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) startProcessing::$23+(unumber)(number) 1
Simplifying constant integer cast 1
Simplifying constant integer cast (const byte) processChars::$2+(unumber)(number) 1
Simplifying constant integer cast 1
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [20] (word*) main::$18 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant right-side identified [22] (word*) main::$19 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant right-side identified [24] (word*) main::$20 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant right-side identified [26] (byte*) main::$21 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant right-side identified [28] (byte*) main::$22 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant right-side identified [30] (byte*) main::$23 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant right-side identified [32] (byte**) main::$24 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant right-side identified [73] (byte*) startProcessing::$39 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant right-side identified [115] (word*) startProcessing::$32 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant right-side identified [117] (word*) startProcessing::$33 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant right-side identified [119] (word*) startProcessing::$34 ← (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant right-side identified [121] (byte*) startProcessing::$35 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant right-side identified [123] (byte*) startProcessing::$36 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant right-side identified [125] (byte*) startProcessing::$37 ← (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant right-side identified [127] (byte**) startProcessing::$38 ← (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant right-side identified [134] (word) YPOS_BOTTOMMOST#0 ← (const word) $8 << (byte) 4
Constant right-side identified [213] (byte*~) initSprites::$1 ← (const byte*) SPRITE_DATA#0 + (const byte) initSprites::$0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word*) main::$17 = (word*)PROCESSING#0
Constant (const word*) main::$18 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant (const word*) main::$19 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant (const word*) main::$20 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant (const byte*) main::$21 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant (const byte*) main::$22 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant (const byte*) main::$23 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant (const byte**) main::$24 = (byte**)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant (const byte*) startProcessing::$39 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant (const byte) startProcessing::$19 = (byte)startProcessing::$18
Constant (const word*) startProcessing::$31 = (word*)PROCESSING#0
Constant (const word*) startProcessing::$32 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant (const word*) startProcessing::$33 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant (const word*) startProcessing::$34 = (word*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant (const byte*) startProcessing::$35 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant (const byte*) startProcessing::$36 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant (const byte*) startProcessing::$37 = (byte*)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant (const byte**) startProcessing::$38 = (byte**)PROCESSING#0+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant (const word) $1 = (word)$0
Constant (const word) $6 = (word)$5
Constant (const word) YPOS_BOTTOMMOST#0 = $8<<4
Constant (const byte*) initSprites::$1 = SPRITE_DATA#0+initSprites::$0
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [112] (word) XPOS_LEFTMOST#0 ← (const word) $1 << (byte) 4
Constant right-side identified [113] (word) YPOS_TOPMOST#0 ← (const word) $6 << (byte) 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const word) XPOS_LEFTMOST#0 = $1<<4
Constant (const word) YPOS_TOPMOST#0 = $6<<4
Successful SSA optimization Pass2ConstantIdentification
Rewriting multiplication to use shift and addition[17] (byte~) main::$16 ← (byte) main::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift [49] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [50] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift and addition[58] (word~) getCharToProcess::$10 ← (word~) getCharToProcess::$9 * (byte) $28
Rewriting multiplication to use shift and addition[64] (byte~) startProcessing::$29 ← (byte) startProcessing::i#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[71] (word~) startProcessing::$1 ← (word~) startProcessing::$0 * (byte) $28
Rewriting multiplication to use shift [75] (word~) startProcessing::$5 ← (word~) startProcessing::$4 * (byte) $40
Rewriting multiplication to use shift [79] (word~) startProcessing::$8 ← (word~) startProcessing::$7 * (byte) 8
Rewriting multiplication to use shift [92] (word~) startProcessing::$11 ← (word~) startProcessing::$10 * (byte) 8
Rewriting multiplication to use shift [96] (word~) startProcessing::$15 ← (word~) startProcessing::$14 * (byte) 8
Rewriting multiplication to use shift [100] (byte~) startProcessing::$21 ← (byte) startProcessing::freeIdx#2 * (byte) 8
Rewriting multiplication to use shift and addition[102] (byte~) startProcessing::$30 ← (byte) startProcessing::freeIdx#2 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift and addition[115] (byte~) processChars::$36 ← (byte) processChars::i#10 * (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Rewriting multiplication to use shift [133] (byte~) processChars::$18 ← (byte) processChars::i#10 * (byte) 2
Rewriting division to use shift [143] (word~) processChars::$26 ← (word) processChars::xpos#0 / (byte) 8
Rewriting multiplication to use shift [146] (byte~) processChars::$37 ← (byte) processChars::xchar#0 * (const byte) SIZEOF_WORD
Rewriting division to use shift [149] (byte~) processChars::$31 ← (byte) processChars::ypos#0 / (byte) 8
Rewriting multiplication to use shift [151] (byte~) processChars::$38 ← (byte) processChars::ychar#0 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [168] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 * (const byte) SIZEOF_WORD
Rewriting multiplication to use shift [182] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 * (const byte) SIZEOF_WORD
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const word) mul8u::res#0
Inlining constant with var siblings (const byte) main::i#0
Inlining constant with var siblings (const byte*) main::src#0
Inlining constant with var siblings (const byte*) main::dst#0
Inlining constant with var siblings (const byte) getCharToProcess::closest_x#0
Inlining constant with var siblings (const byte) getCharToProcess::closest_y#0
Inlining constant with var siblings (const byte) getCharToProcess::y#0
Inlining constant with var siblings (const byte) getCharToProcess::x#0
Inlining constant with var siblings (const word) getCharToProcess::closest_dist#0
Inlining constant with var siblings (const byte*) getCharToProcess::screen_line#0
Inlining constant with var siblings (const byte) startProcessing::freeIdx#0
Inlining constant with var siblings (const byte) startProcessing::i#0
Inlining constant with var siblings (const byte) startProcessing::i1#0
Inlining constant with var siblings (const byte) processChars::numActive#0
Inlining constant with var siblings (const byte) processChars::i#0
Inlining constant with var siblings (const byte) initSquareTables::x#0
Inlining constant with var siblings (const byte) initSquareTables::y#0
Inlining constant with var siblings (const byte) initSprites::i#0
Inlining constant with var siblings (const byte*) initSprites::sp#0
Inlining constant with var siblings (const byte) irqTop::i#0
Inlining constant with var siblings (const byte) irqTop::i1#0
Inlining constant with var siblings (const byte) irqBottom::i#0
Constant inlined processChars::$32 = (const byte) BORDER_YPOS_TOP#0/(byte) 8
Constant inlined startProcessing::$19 = (byte)(const byte*) SPRITE_DATA#0/(byte) $40
Constant inlined startProcessing::$18 = (const byte*) SPRITE_DATA#0/(byte) $40
Constant inlined main::src#0 = (const byte*) SCREEN#0
Constant inlined main::$15 = (const byte*) COLS#0+(word) $3e7
Constant inlined $0 = (const byte) BORDER_XPOS_LEFT#0-(byte) 8
Constant inlined $1 = (word)(const byte) BORDER_XPOS_LEFT#0-(byte) 8
Constant inlined getCharToProcess::y#0 = (byte) 0
Constant inlined $5 = (const byte) BORDER_YPOS_TOP#0-(byte) 8
Constant inlined $6 = (word)(const byte) BORDER_YPOS_TOP#0-(byte) 8
Constant inlined setupRasterIrq::raster#0 = (const byte) RASTER_IRQ_TOP#0
Constant inlined $8 = (word)(const byte) BORDER_YPOS_BOTTOM#0
Constant inlined main::$17 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant inlined main::$18 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant inlined main::$19 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant inlined processChars::numActive#0 = (byte) 0
Constant inlined getCharToProcess::closest_x#0 = (byte) 0
Constant inlined startProcessing::i1#0 = (byte) 0
Constant inlined startProcessing::$23 = (const byte) NUM_PROCESSING#0-(byte) 1
Constant inlined irqTop::$0 = &interrupt(HARDWARE_ALL)(void()) irqBottom()
Constant inlined initSprites::$0 = (const byte) NUM_PROCESSING#0*(byte) $40
Constant inlined initSprites::$1 = (const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40
Constant inlined mul8u::res#0 = (byte) 0
Constant inlined irqBottom::i#0 = (byte) 0
Constant inlined processChars::$2 = (const byte) NUM_PROCESSING#0-(byte) 1
Constant inlined main::dst#0 = (const byte[$3e8]) SCREEN_COPY#0
Constant inlined processChars::i#0 = (byte) 0
Constant inlined initSquareTables::x#0 = (byte) 0
Constant inlined getCharToProcess::closest_dist#0 = (const word) NOT_FOUND#0
Constant inlined processChars::$0 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined initSprites::i#0 = (byte) 0
Constant inlined startProcessing::$35 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant inlined startProcessing::$34 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant inlined startProcessing::$37 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant inlined startProcessing::$36 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant inlined startProcessing::$39 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant inlined startProcessing::freeIdx#0 = (byte) $ff
Constant inlined startProcessing::$38 = (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant inlined processChars::$9 = (const byte*) SCREEN#0+(const word) SPRITE_PTRS#0
Constant inlined irqBottom::$1 = &interrupt(HARDWARE_ALL)(void()) irqTop()
Constant inlined getCharToProcess::x#0 = (byte) 0
Constant inlined initSprites::sp#0 = (const byte*) SPRITE_DATA#0
Constant inlined getCharToProcess::closest_y#0 = (byte) 0
Constant inlined main::i#0 = (byte) 0
Constant inlined startProcessing::$31 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0
Constant inlined startProcessing::$33 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX
Constant inlined startProcessing::$32 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y
Constant inlined main::$23 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Constant inlined main::$24 = (byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR
Constant inlined irqTop::i1#0 = (byte) 0
Constant inlined getCharToProcess::screen_line#0 = (const byte[$3e8]) SCREEN_COPY#0
Constant inlined processChars::$28 = (const byte) BORDER_XPOS_LEFT#0/(byte) 8
Constant inlined main::$20 = (word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY
Constant inlined main::$21 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID
Constant inlined main::$22 = (byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR
Constant inlined irqTop::i#0 = (byte) 0
Constant inlined setupRasterIrq::$1 = <(const byte) RASTER_IRQ_TOP#0
Constant inlined startProcessing::i#0 = (byte) 0
Constant inlined main::$5 = (const byte*) SCREEN#0+(word) $3e8
Constant inlined main::$4 = (const byte*) SCREEN#0+(word) $3e7
Constant inlined initSquareTables::y#0 = (byte) 0
Constant inlined main::$7 = (const byte) NUM_PROCESSING#0-(byte) 1
Successful SSA optimization Pass2ConstantInlining
Alias (byte~) main::$16 = (byte) main::$28
Alias (word~) getCharToProcess::$10 = (word) getCharToProcess::$17
Alias (byte~) startProcessing::$29 = (byte) startProcessing::$43
Alias (word~) startProcessing::$1 = (word) startProcessing::$46
Alias (byte~) startProcessing::$30 = (byte) startProcessing::$50
Alias (byte~) processChars::$36 = (byte) processChars::$67
Successful SSA optimization Pass2AliasElimination
Eliminating unused constant (const byte) SIZEOF_STRUCT_PROCESSINGSPRITE
Eliminating unused constant (const byte) SIZEOF_WORD
Successful SSA optimization PassNEliminateUnusedVars
Added new block during phi lifting mul8u::@10(between mul8u::@2 and mul8u::@4)
Added new block during phi lifting main::@18(between main::@1 and main::@1)
Added new block during phi lifting main::@19(between main::@3 and main::@3)
Added new block during phi lifting getCharToProcess::@12(between getCharToProcess::@9 and getCharToProcess::@3)
Added new block during phi lifting getCharToProcess::@13(between getCharToProcess::@5 and getCharToProcess::@4)
Added new block during phi lifting getCharToProcess::@14(between getCharToProcess::@4 and getCharToProcess::@5)
Added new block during phi lifting getCharToProcess::@15(between getCharToProcess::@7 and getCharToProcess::@5)
Added new block during phi lifting startProcessing::@11(between startProcessing::@4 and startProcessing::@1)
Added new block during phi lifting startProcessing::@12(between startProcessing::@3 and startProcessing::@2)
Added new block during phi lifting startProcessing::@13(between startProcessing::@3 and startProcessing::@4)
Added new block during phi lifting startProcessing::@14(between startProcessing::@9 and startProcessing::@9)
Added new block during phi lifting processChars::@18(between processChars::@2 and processChars::@1)
Added new block during phi lifting processChars::@19(between processChars::@1 and processChars::@2)
Added new block during phi lifting initSquareTables::@17(between initSquareTables::@15 and initSquareTables::@1)
Added new block during phi lifting initSquareTables::@18(between initSquareTables::@16 and initSquareTables::@8)
Added new block during phi lifting initSprites::@5(between initSprites::@1 and initSprites::@1)
Added new block during phi lifting initSprites::@6(between initSprites::@3 and initSprites::@3)
Added new block during phi lifting irqTop::@5(between irqTop::@1 and irqTop::@1)
Added new block during phi lifting irqTop::@6(between irqTop::@3 and irqTop::@3)
Added new block during phi lifting irqBottom::@4(between irqBottom::@1 and irqBottom::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @9
Adding NOP phi() at start of @13
Adding NOP phi() at start of @16
Adding NOP phi() at start of @17
Adding NOP phi() at start of @18
Adding NOP phi() at start of @19
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@13
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@14
Adding NOP phi() at start of main::@15
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@17
Adding NOP phi() at start of startProcessing
Adding NOP phi() at start of getCharToProcess
Adding NOP phi() at start of getCharToProcess::@1
Adding NOP phi() at start of initSprites
Adding NOP phi() at start of initSprites::@2
Adding NOP phi() at start of initSquareTables
Adding NOP phi() at start of initSquareTables::@7
Adding NOP phi() at start of mul8u::@3
Adding NOP phi() at start of irqBottom
Adding NOP phi() at start of irqBottom::@2
Adding NOP phi() at start of processChars
Adding NOP phi() at start of irqTop
Adding NOP phi() at start of irqTop::@2
CALL GRAPH
Calls in [] to main:8
Calls in [main] to initSquareTables:12 initSprites:36 setupRasterIrq:38 getCharToProcess:41 startProcessing:53
Calls in [initSquareTables] to mul8u:206 mul8u:223
Calls in [irqBottom] to processChars:260
Created 39 initial phi equivalence classes
Coalesced [55] main::i#3 ← main::i#1
Coalesced [56] main::src#3 ← main::src#1
Coalesced [57] main::dst#3 ← main::dst#1
Coalesced [66] startProcessing::freeIdx#9 ← startProcessing::i#2
Coalesced [84] startProcessing::chargenData#3 ← startProcessing::chargenData#0
Coalesced [85] startProcessing::spriteData#3 ← startProcessing::spriteData#0
Coalesced [118] startProcessing::chargenData#4 ← startProcessing::chargenData#1
Coalesced [119] startProcessing::spriteData#4 ← startProcessing::spriteData#1
Coalesced [120] startProcessing::i1#3 ← startProcessing::i1#1
Not coalescing [121] startProcessing::freeIdx#7 ← startProcessing::freeIdx#2
Not coalescing [124] startProcessing::freeIdx#8 ← startProcessing::freeIdx#6
Coalesced [125] startProcessing::i#5 ← startProcessing::i#1
Coalesced [128] getCharToProcess::closest_dist#11 ← getCharToProcess::closest_dist#8
Coalesced [129] getCharToProcess::closest_x#11 ← getCharToProcess::closest_x#9
Coalesced [130] getCharToProcess::closest_y#11 ← getCharToProcess::closest_y#9
Coalesced [137] getCharToProcess::return_dist#7 ← getCharToProcess::dist#0
Not coalescing [138] getCharToProcess::return_x#7 ← getCharToProcess::x#2
Not coalescing [139] getCharToProcess::return_y#7 ← getCharToProcess::y#7
Coalesced [155] getCharToProcess::screen_line#8 ← getCharToProcess::screen_line#1
Coalesced [156] getCharToProcess::y#8 ← getCharToProcess::y#1
Not coalescing [157] getCharToProcess::closest_dist#10 ← getCharToProcess::return_dist#1
Coalesced [158] getCharToProcess::closest_x#10 ← getCharToProcess::return_x#1
Coalesced [159] getCharToProcess::closest_y#10 ← getCharToProcess::return_y#1
Coalesced [160] getCharToProcess::x#6 ← getCharToProcess::x#1
Not coalescing [161] getCharToProcess::closest_dist#12 ← getCharToProcess::return_dist#1
Coalesced (already) [162] getCharToProcess::closest_x#12 ← getCharToProcess::return_x#1
Coalesced (already) [163] getCharToProcess::closest_y#12 ← getCharToProcess::return_y#1
Not coalescing [164] getCharToProcess::return_dist#6 ← getCharToProcess::closest_dist#2
Coalesced (already) [165] getCharToProcess::return_x#6 ← getCharToProcess::closest_x#7
Coalesced (already) [166] getCharToProcess::return_y#6 ← getCharToProcess::closest_y#7
Not coalescing [167] getCharToProcess::return_dist#5 ← getCharToProcess::closest_dist#2
Coalesced (already) [168] getCharToProcess::return_x#5 ← getCharToProcess::closest_x#7
Coalesced (already) [169] getCharToProcess::return_y#5 ← getCharToProcess::closest_y#7
Coalesced [194] initSprites::i#3 ← initSprites::i#1
Coalesced [195] initSprites::sp#3 ← initSprites::sp#1
Coalesced [200] initSquareTables::x_dist#2 ← initSquareTables::$2
Coalesced [204] mul8u::mb#7 ← mul8u::b#0
Coalesced [205] mul8u::a#9 ← mul8u::a#1
Coalesced [217] initSquareTables::y_dist#2 ← initSquareTables::$10
Coalesced [221] mul8u::mb#6 ← mul8u::b#1
Coalesced [222] mul8u::a#8 ← mul8u::a#2
Coalesced [231] initSquareTables::y#7 ← initSquareTables::y#1
Coalesced [233] initSquareTables::y_dist#1 ← initSquareTables::$12
Coalesced [234] initSquareTables::x#7 ← initSquareTables::x#1
Coalesced [236] initSquareTables::x_dist#1 ← initSquareTables::$4
Coalesced [238] mul8u::a#10 ← mul8u::a#6
Coalesced [239] mul8u::mb#8 ← mul8u::mb#0
Coalesced [247] mul8u::res#9 ← mul8u::res#1
Coalesced [251] mul8u::a#11 ← mul8u::a#0
Coalesced [252] mul8u::res#7 ← mul8u::res#6
Coalesced [253] mul8u::mb#9 ← mul8u::mb#1
Coalesced (already) [254] mul8u::res#8 ← mul8u::res#2
Coalesced [265] irqBottom::i#3 ← irqBottom::i#1
Coalesced [307] processChars::numActive#16 ← processChars::numActive#1
Coalesced [314] processChars::i#13 ← processChars::i#1
Coalesced [315] processChars::numActive#14 ← processChars::numActive#3
Coalesced (already) [320] processChars::numActive#15 ← processChars::numActive#10
Coalesced [333] irqTop::i1#3 ← irqTop::i1#1
Coalesced [334] irqTop::i#3 ← irqTop::i#1
Coalesced down to 29 phi equivalence classes
Culled Empty Block (label) @9
Culled Empty Block (label) @13
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) @19
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@15
Culled Empty Block (label) main::@17
Culled Empty Block (label) main::@19
Culled Empty Block (label) main::@18
Culled Empty Block (label) startProcessing::@5
Culled Empty Block (label) startProcessing::@14
Culled Empty Block (label) startProcessing::@12
Culled Empty Block (label) getCharToProcess::@1
Culled Empty Block (label) initSprites::@2
Culled Empty Block (label) initSprites::@6
Culled Empty Block (label) initSprites::@5
Culled Empty Block (label) initSquareTables::@7
Culled Empty Block (label) initSquareTables::@18
Culled Empty Block (label) initSquareTables::@17
Culled Empty Block (label) mul8u::@3
Culled Empty Block (label) mul8u::@10
Culled Empty Block (label) irqBottom::@4
Culled Empty Block (label) processChars::@18
Culled Empty Block (label) processChars::@19
Culled Empty Block (label) irqTop::@2
Culled Empty Block (label) irqTop::@6
Culled Empty Block (label) irqTop::@5
Renumbering block @12 to @1
Renumbering block @18 to @2
Renumbering block mul8u::@4 to mul8u::@3
Renumbering block mul8u::@7 to mul8u::@4
Renumbering block main::@3 to main::@2
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::@11 to main::@7
Renumbering block main::@14 to main::@8
Renumbering block main::@16 to main::@9
Renumbering block getCharToProcess::@3 to getCharToProcess::@1
Renumbering block getCharToProcess::@4 to getCharToProcess::@2
Renumbering block getCharToProcess::@5 to getCharToProcess::@3
Renumbering block getCharToProcess::@7 to getCharToProcess::@4
Renumbering block getCharToProcess::@8 to getCharToProcess::@5
Renumbering block getCharToProcess::@9 to getCharToProcess::@6
Renumbering block getCharToProcess::@10 to getCharToProcess::@7
Renumbering block getCharToProcess::@11 to getCharToProcess::@8
Renumbering block getCharToProcess::@12 to getCharToProcess::@9
Renumbering block getCharToProcess::@13 to getCharToProcess::@10
Renumbering block getCharToProcess::@14 to getCharToProcess::@11
Renumbering block getCharToProcess::@15 to getCharToProcess::@12
Renumbering block startProcessing::@8 to startProcessing::@5
Renumbering block startProcessing::@9 to startProcessing::@6
Renumbering block startProcessing::@10 to startProcessing::@7
Renumbering block startProcessing::@11 to startProcessing::@8
Renumbering block startProcessing::@13 to startProcessing::@9
Renumbering block processChars::@10 to processChars::@9
Renumbering block processChars::@12 to processChars::@10
Renumbering block processChars::@13 to processChars::@11
Renumbering block processChars::@14 to processChars::@12
Renumbering block processChars::@15 to processChars::@13
Renumbering block processChars::@16 to processChars::@14
Renumbering block processChars::@17 to processChars::@15
Renumbering block initSquareTables::@8 to initSquareTables::@5
Renumbering block initSquareTables::@9 to initSquareTables::@6
Renumbering block initSquareTables::@10 to initSquareTables::@7
Renumbering block initSquareTables::@11 to initSquareTables::@8
Renumbering block initSquareTables::@15 to initSquareTables::@9
Renumbering block initSquareTables::@16 to initSquareTables::@10
Renumbering block initSprites::@3 to initSprites::@2
Renumbering block initSprites::@4 to initSprites::@3
Renumbering block irqTop::@3 to irqTop::@2
Renumbering block irqTop::@4 to irqTop::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of startProcessing
Adding NOP phi() at start of getCharToProcess
Adding NOP phi() at start of initSprites
Adding NOP phi() at start of initSquareTables
Adding NOP phi() at start of irqBottom
Adding NOP phi() at start of irqBottom::@2
Adding NOP phi() at start of processChars
Adding NOP phi() at start of irqTop
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi()
to:@1
@1: scope:[] from @begin
kickasm(location (const word*) VXSIN#0) {{ .for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
}}
kickasm(location (const word*) VYSIN#0) {{ .for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
}}
to:@2
@2: scope:[] from @1
[3] phi()
[4] call main
to:@end
@end: scope:[] from @2
[5] phi()
main: scope:[main] from @2
[6] phi()
[7] call initSquareTables
to:main::@1
main::@1: scope:[main] from main main::@1
[8] (byte*) main::dst#2 ← phi( main::@1/(byte*) main::dst#1 main/(const byte[$3e8]) SCREEN_COPY#0 )
[8] (byte*) main::src#2 ← phi( main::@1/(byte*) main::src#1 main/(const byte*) SCREEN#0 )
[9] *((byte*) main::dst#2) ← *((byte*) main::src#2)
[10] (byte*) main::src#1 ← ++ (byte*) main::src#2
[11] (byte*) main::dst#1 ← ++ (byte*) main::dst#2
[12] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@1
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[13] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::i#1 )
[14] (byte) main::$25 ← (byte) main::i#2 << (byte) 1
[15] (byte) main::$26 ← (byte) main::$25 + (byte) main::i#2
[16] (byte) main::$27 ← (byte) main::$26 << (byte) 2
[17] (byte~) main::$16 ← (byte) main::$27 + (byte) main::i#2
[18] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0
[19] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0
[20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0
[21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0
[22] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0
[23] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0
[24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE#0
[25] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0
[26] (byte) main::i#1 ← ++ (byte) main::i#2
[27] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
[28] phi()
[29] call initSprites
to:main::@8
main::@8: scope:[main] from main::@3
[30] phi()
[31] call setupRasterIrq
to:main::@4
main::@4: scope:[main] from main::@5 main::@8
[32] phi()
[33] call getCharToProcess
[34] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1
[35] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1
[36] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1
to:main::@9
main::@9: scope:[main] from main::@4
[37] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
[38] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
[39] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0
[40] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@5
to:main::@6
main::@6: scope:[main] from main::@9
[41] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.'
to:main::@7
main::@7: scope:[main] from main::@6 main::@7
[42] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7)
to:main::@7
main::@5: scope:[main] from main::@9
[43] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0
[44] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0
[45] call startProcessing
to:main::@4
startProcessing: scope:[startProcessing] from main::@5
[46] phi()
to:startProcessing::@1
startProcessing::@1: scope:[startProcessing] from startProcessing startProcessing::@8
[47] (byte) startProcessing::freeIdx#6 ← phi( startProcessing/(byte) $ff startProcessing::@8/(byte~) startProcessing::freeIdx#7 )
to:startProcessing::@2
startProcessing::@2: scope:[startProcessing] from startProcessing::@1 startProcessing::@3
[48] (byte) startProcessing::i#2 ← phi( startProcessing::@1/(byte) 0 startProcessing::@3/(byte) startProcessing::i#1 )
[49] (byte) startProcessing::$40 ← (byte) startProcessing::i#2 << (byte) 1
[50] (byte) startProcessing::$41 ← (byte) startProcessing::$40 + (byte) startProcessing::i#2
[51] (byte) startProcessing::$42 ← (byte) startProcessing::$41 << (byte) 2
[52] (byte~) startProcessing::$29 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2
[53] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$29)!=(const byte) STATUS_FREE#0) goto startProcessing::@3
to:startProcessing::@4
startProcessing::@4: scope:[startProcessing] from startProcessing::@2 startProcessing::@9
[54] (byte) startProcessing::freeIdx#2 ← phi( startProcessing::@9/(byte~) startProcessing::freeIdx#8 startProcessing::@2/(byte) startProcessing::i#2 )
[55] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8
to:startProcessing::@5
startProcessing::@5: scope:[startProcessing] from startProcessing::@4
[56] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0
[57] (word) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2
[58] (word) startProcessing::$45 ← (word) startProcessing::$44 + (word~) startProcessing::$0
[59] (word~) startProcessing::$1 ← (word) startProcessing::$45 << (byte) 3
[60] (byte*~) startProcessing::$2 ← (const byte*) SCREEN#0 + (word~) startProcessing::$1
[61] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0
[62] (word~) startProcessing::$4 ← (word)(byte) startProcessing::freeIdx#2
[63] (word~) startProcessing::$5 ← (word~) startProcessing::$4 << (byte) 6
[64] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$5
[65] (byte) startProcessing::ch#0 ← *((byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0)
[66] (word~) startProcessing::$7 ← (word)(byte) startProcessing::ch#0
[67] (word~) startProcessing::$8 ← (word~) startProcessing::$7 << (byte) 3
[68] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$8
asm { sei }
[70] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0
to:startProcessing::@6
startProcessing::@6: scope:[startProcessing] from startProcessing::@5 startProcessing::@6
[71] (byte) startProcessing::i1#2 ← phi( startProcessing::@5/(byte) 0 startProcessing::@6/(byte) startProcessing::i1#1 )
[71] (byte*) startProcessing::spriteData#2 ← phi( startProcessing::@5/(byte*) startProcessing::spriteData#0 startProcessing::@6/(byte*) startProcessing::spriteData#1 )
[71] (byte*) startProcessing::chargenData#2 ← phi( startProcessing::@5/(byte*) startProcessing::chargenData#0 startProcessing::@6/(byte*) startProcessing::chargenData#1 )
[72] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2)
[73] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3
[74] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2
[75] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2
[76] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6
to:startProcessing::@7
startProcessing::@7: scope:[startProcessing] from startProcessing::@6
[77] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
asm { cli }
[79] (word~) startProcessing::$10 ← (word)(byte) startProcessing::center_x#0
[80] (word~) startProcessing::$11 ← (word~) startProcessing::$10 << (byte) 3
[81] (word~) startProcessing::$12 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$11
[82] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$12 << (byte) 4
[83] (word~) startProcessing::$14 ← (word)(byte) startProcessing::center_y#0
[84] (word~) startProcessing::$15 ← (word~) startProcessing::$14 << (byte) 3
[85] (word~) startProcessing::$16 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$15
[86] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$16 << (byte) 4
[87] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2
[88] (byte~) startProcessing::$21 ← (byte) startProcessing::freeIdx#2 << (byte) 3
[89] (word~) startProcessing::$22 ← (word)(byte~) startProcessing::$21
[90] (byte) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1
[91] (byte) startProcessing::$48 ← (byte) startProcessing::$47 + (byte) startProcessing::freeIdx#2
[92] (byte) startProcessing::$49 ← (byte) startProcessing::$48 << (byte) 2
[93] (byte~) startProcessing::$30 ← (byte) startProcessing::$49 + (byte) startProcessing::freeIdx#2
[94] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$30) ← (word) startProcessing::spriteX#0
[95] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$30) ← (word) startProcessing::spriteY#0
[96] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$30) ← (word~) startProcessing::$22
[97] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$30) ← (byte) $3c
[98] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$30) ← (byte) startProcessing::freeIdx#2
[99] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$30) ← (byte) startProcessing::spritePtr#0
[100] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30) ← (const byte) STATUS_NEW#0
[101] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$30) ← (byte*) startProcessing::screenPtr#0
to:startProcessing::@return
startProcessing::@return: scope:[startProcessing] from startProcessing::@7
[102] return
to:@return
startProcessing::@8: scope:[startProcessing] from startProcessing::@4
[103] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2
to:startProcessing::@1
startProcessing::@3: scope:[startProcessing] from startProcessing::@2
[104] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2
[105] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2
to:startProcessing::@9
startProcessing::@9: scope:[startProcessing] from startProcessing::@3
[106] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6
to:startProcessing::@4
getCharToProcess: scope:[getCharToProcess] from main::@4
[107] phi()
to:getCharToProcess::@1
getCharToProcess::@1: scope:[getCharToProcess] from getCharToProcess getCharToProcess::@9
[108] (byte) getCharToProcess::closest_y#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_y#1 )
[108] (byte) getCharToProcess::closest_x#9 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::return_x#1 )
[108] (word) getCharToProcess::closest_dist#8 ← phi( getCharToProcess/(const word) NOT_FOUND#0 getCharToProcess::@9/(word~) getCharToProcess::closest_dist#10 )
[108] (byte) getCharToProcess::y#7 ← phi( getCharToProcess/(byte) 0 getCharToProcess::@9/(byte) getCharToProcess::y#1 )
[108] (byte*) getCharToProcess::screen_line#4 ← phi( getCharToProcess/(const byte[$3e8]) SCREEN_COPY#0 getCharToProcess::@9/(byte*) getCharToProcess::screen_line#1 )
to:getCharToProcess::@2
getCharToProcess::@2: scope:[getCharToProcess] from getCharToProcess::@1 getCharToProcess::@10
[109] (byte) getCharToProcess::closest_y#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_y#9 getCharToProcess::@10/(byte) getCharToProcess::return_y#1 )
[109] (byte) getCharToProcess::closest_x#7 ← phi( getCharToProcess::@1/(byte) getCharToProcess::closest_x#9 getCharToProcess::@10/(byte) getCharToProcess::return_x#1 )
[109] (word) getCharToProcess::closest_dist#2 ← phi( getCharToProcess::@1/(word) getCharToProcess::closest_dist#8 getCharToProcess::@10/(word~) getCharToProcess::closest_dist#12 )
[109] (byte) getCharToProcess::x#2 ← phi( getCharToProcess::@1/(byte) 0 getCharToProcess::@10/(byte) getCharToProcess::x#1 )
[110] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11
to:getCharToProcess::@4
getCharToProcess::@4: scope:[getCharToProcess] from getCharToProcess::@2
[111] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 << (byte) 1
[112] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 << (byte) 1
[113] (word) getCharToProcess::dist#0 ← *((const word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((const word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14)
[114] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@12
to:getCharToProcess::@5
getCharToProcess::@5: scope:[getCharToProcess] from getCharToProcess::@4
[115] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2
[116] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7
to:getCharToProcess::@3
getCharToProcess::@3: scope:[getCharToProcess] from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5
[117] (byte) getCharToProcess::return_y#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_y#7 getCharToProcess::@12/(byte) getCharToProcess::closest_y#7 getCharToProcess::@5/(byte~) getCharToProcess::return_y#7 )
[117] (byte) getCharToProcess::return_x#1 ← phi( getCharToProcess::@11/(byte) getCharToProcess::closest_x#7 getCharToProcess::@12/(byte) getCharToProcess::closest_x#7 getCharToProcess::@5/(byte~) getCharToProcess::return_x#7 )
[117] (word) getCharToProcess::return_dist#1 ← phi( getCharToProcess::@11/(word~) getCharToProcess::return_dist#5 getCharToProcess::@12/(word~) getCharToProcess::return_dist#6 getCharToProcess::@5/(word) getCharToProcess::dist#0 )
[118] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2
[119] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10
to:getCharToProcess::@6
getCharToProcess::@6: scope:[getCharToProcess] from getCharToProcess::@3
[120] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28
[121] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7
[122] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9
to:getCharToProcess::@7
getCharToProcess::@7: scope:[getCharToProcess] from getCharToProcess::@6
[123] if((word) getCharToProcess::return_dist#1==(const word) NOT_FOUND#0) goto getCharToProcess::@return
to:getCharToProcess::@8
getCharToProcess::@8: scope:[getCharToProcess] from getCharToProcess::@7
[124] (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::return_y#1
[125] (word) getCharToProcess::$15 ← (word~) getCharToProcess::$9 << (byte) 2
[126] (word) getCharToProcess::$16 ← (word) getCharToProcess::$15 + (word~) getCharToProcess::$9
[127] (word~) getCharToProcess::$10 ← (word) getCharToProcess::$16 << (byte) 3
[128] (byte*~) getCharToProcess::$11 ← (const byte[$3e8]) SCREEN_COPY#0 + (word~) getCharToProcess::$10
[129] *((byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1) ← (byte) ' '
to:getCharToProcess::@return
getCharToProcess::@return: scope:[getCharToProcess] from getCharToProcess::@7 getCharToProcess::@8
[130] return
to:@return
getCharToProcess::@9: scope:[getCharToProcess] from getCharToProcess::@6
[131] (word~) getCharToProcess::closest_dist#10 ← (word) getCharToProcess::return_dist#1
to:getCharToProcess::@1
getCharToProcess::@10: scope:[getCharToProcess] from getCharToProcess::@3
[132] (word~) getCharToProcess::closest_dist#12 ← (word) getCharToProcess::return_dist#1
to:getCharToProcess::@2
getCharToProcess::@12: scope:[getCharToProcess] from getCharToProcess::@4
[133] (word~) getCharToProcess::return_dist#6 ← (word) getCharToProcess::closest_dist#2
to:getCharToProcess::@3
getCharToProcess::@11: scope:[getCharToProcess] from getCharToProcess::@2
[134] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2
to:getCharToProcess::@3
setupRasterIrq: scope:[setupRasterIrq] from main::@8
asm { sei }
[136] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0
[137] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0
[138] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0
to:setupRasterIrq::@1
setupRasterIrq::@1: scope:[setupRasterIrq] from setupRasterIrq
[139] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f
to:setupRasterIrq::@2
setupRasterIrq::@2: scope:[setupRasterIrq] from setupRasterIrq::@1
[140] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0
[141] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0
[142] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0
asm { cli }
to:setupRasterIrq::@return
setupRasterIrq::@return: scope:[setupRasterIrq] from setupRasterIrq::@2
[144] return
to:@return
initSprites: scope:[initSprites] from main::@3
[145] phi()
to:initSprites::@1
initSprites::@1: scope:[initSprites] from initSprites initSprites::@1
[146] (byte*) initSprites::sp#2 ← phi( initSprites/(const byte*) SPRITE_DATA#0 initSprites::@1/(byte*) initSprites::sp#1 )
[147] *((byte*) initSprites::sp#2) ← (byte) 0
[148] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2
[149] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1
to:initSprites::@2
initSprites::@2: scope:[initSprites] from initSprites::@1 initSprites::@2
[150] (byte) initSprites::i#2 ← phi( initSprites::@1/(byte) 0 initSprites::@2/(byte) initSprites::i#1 )
[151] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0
[152] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2
[153] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@2
to:initSprites::@3
initSprites::@3: scope:[initSprites] from initSprites::@2
[154] *((const byte*) SPRITES_MC#0) ← (byte) 0
[155] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0
[156] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0
to:initSprites::@return
initSprites::@return: scope:[initSprites] from initSprites::@3
[157] return
to:@return
initSquareTables: scope:[initSquareTables] from main
[158] phi()
to:initSquareTables::@1
initSquareTables::@1: scope:[initSquareTables] from initSquareTables initSquareTables::@9
[159] (byte) initSquareTables::x#2 ← phi( initSquareTables/(byte) 0 initSquareTables::@9/(byte) initSquareTables::x#1 )
[160] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2
to:initSquareTables::@3
initSquareTables::@3: scope:[initSquareTables] from initSquareTables::@1
[161] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14
to:initSquareTables::@4
initSquareTables::@4: scope:[initSquareTables] from initSquareTables::@2 initSquareTables::@3
[162] (byte) initSquareTables::x_dist#0 ← phi( initSquareTables::@2/(byte~) initSquareTables::$4 initSquareTables::@3/(byte~) initSquareTables::$2 )
[163] (byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0
[164] (byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0
[165] call mul8u
[166] (word) mul8u::return#2 ← (word) mul8u::res#2
to:initSquareTables::@9
initSquareTables::@9: scope:[initSquareTables] from initSquareTables::@4
[167] (word~) initSquareTables::$6 ← (word) mul8u::return#2
[168] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1
[169] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6
[170] (byte) initSquareTables::x#1 ← ++ (byte) initSquareTables::x#2
[171] if((byte) initSquareTables::x#1!=(byte) $28) goto initSquareTables::@1
to:initSquareTables::@5
initSquareTables::@5: scope:[initSquareTables] from initSquareTables::@10 initSquareTables::@9
[172] (byte) initSquareTables::y#2 ← phi( initSquareTables::@10/(byte) initSquareTables::y#1 initSquareTables::@9/(byte) 0 )
[173] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@6
to:initSquareTables::@7
initSquareTables::@7: scope:[initSquareTables] from initSquareTables::@5
[174] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c
to:initSquareTables::@8
initSquareTables::@8: scope:[initSquareTables] from initSquareTables::@6 initSquareTables::@7
[175] (byte) initSquareTables::y_dist#0 ← phi( initSquareTables::@6/(byte~) initSquareTables::$12 initSquareTables::@7/(byte~) initSquareTables::$10 )
[176] (byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0
[177] (byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0
[178] call mul8u
[179] (word) mul8u::return#3 ← (word) mul8u::res#2
to:initSquareTables::@10
initSquareTables::@10: scope:[initSquareTables] from initSquareTables::@8
[180] (word~) initSquareTables::$14 ← (word) mul8u::return#3
[181] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1
[182] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14
[183] (byte) initSquareTables::y#1 ← ++ (byte) initSquareTables::y#2
[184] if((byte) initSquareTables::y#1!=(byte) $19) goto initSquareTables::@5
to:initSquareTables::@return
initSquareTables::@return: scope:[initSquareTables] from initSquareTables::@10
[185] return
to:@return
initSquareTables::@6: scope:[initSquareTables] from initSquareTables::@5
[186] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2
to:initSquareTables::@8
initSquareTables::@2: scope:[initSquareTables] from initSquareTables::@1
[187] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2
to:initSquareTables::@4
mul8u: scope:[mul8u] from initSquareTables::@4 initSquareTables::@8
[188] (byte) mul8u::a#6 ← phi( initSquareTables::@8/(byte) mul8u::a#2 initSquareTables::@4/(byte) mul8u::a#1 )
[188] (word) mul8u::mb#0 ← phi( initSquareTables::@8/(byte) mul8u::b#1 initSquareTables::@4/(byte) mul8u::b#0 )
to:mul8u::@1
mul8u::@1: scope:[mul8u] from mul8u mul8u::@3
[189] (word) mul8u::mb#2 ← phi( mul8u/(word) mul8u::mb#0 mul8u::@3/(word) mul8u::mb#1 )
[189] (word) mul8u::res#2 ← phi( mul8u/(byte) 0 mul8u::@3/(word) mul8u::res#6 )
[189] (byte) mul8u::a#3 ← phi( mul8u/(byte) mul8u::a#6 mul8u::@3/(byte) mul8u::a#0 )
[190] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2
to:mul8u::@return
mul8u::@return: scope:[mul8u] from mul8u::@1
[191] return
to:@return
mul8u::@2: scope:[mul8u] from mul8u::@1
[192] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1
[193] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3
to:mul8u::@4
mul8u::@4: scope:[mul8u] from mul8u::@2
[194] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2
to:mul8u::@3
mul8u::@3: scope:[mul8u] from mul8u::@2 mul8u::@4
[195] (word) mul8u::res#6 ← phi( mul8u::@2/(word) mul8u::res#2 mul8u::@4/(word) mul8u::res#1 )
[196] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1
[197] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1
to:mul8u::@1
irqBottom: scope:[irqBottom] from
[198] phi()
to:irqBottom::@1
irqBottom::@1: scope:[irqBottom] from irqBottom irqBottom::@1
[199] (byte) irqBottom::i#2 ← phi( irqBottom/(byte) 0 irqBottom::@1/(byte) irqBottom::i#1 )
[200] (byte) irqBottom::i#1 ← ++ (byte) irqBottom::i#2
[201] if((byte) irqBottom::i#1!=(byte) 5) goto irqBottom::@1
to:irqBottom::@2
irqBottom::@2: scope:[irqBottom] from irqBottom::@1
[202] phi()
[203] call processChars
to:irqBottom::@3
irqBottom::@3: scope:[irqBottom] from irqBottom::@2
[204] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0
[205] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop()
[206] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqBottom::@return
irqBottom::@return: scope:[irqBottom] from irqBottom::@3
[207] return
to:@return
processChars: scope:[processChars] from irqBottom::@2
[208] phi()
to:processChars::@1
processChars::@1: scope:[processChars] from processChars processChars::@2
[209] (byte) processChars::numActive#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::numActive#3 )
[209] (byte) processChars::i#10 ← phi( processChars/(byte) 0 processChars::@2/(byte) processChars::i#1 )
[210] (byte) processChars::$64 ← (byte) processChars::i#10 << (byte) 1
[211] (byte) processChars::$65 ← (byte) processChars::$64 + (byte) processChars::i#10
[212] (byte) processChars::$66 ← (byte) processChars::$65 << (byte) 2
[213] (byte~) processChars::$36 ← (byte) processChars::$66 + (byte) processChars::i#10
[214] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$36
[215] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)
[216] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2
to:processChars::@10
processChars::@10: scope:[processChars] from processChars::@1
[217] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) goto processChars::@3
to:processChars::@11
processChars::@11: scope:[processChars] from processChars::@10
[218] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' '
[219] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0
[220] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR)
[221] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0
to:processChars::@3
processChars::@3: scope:[processChars] from processChars::@10 processChars::@11
[222] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4
[223] (byte~) processChars::$12 ← > (word) processChars::xpos#0
[224] if((byte) 0!=(byte~) processChars::$12) goto processChars::@4
to:processChars::@8
processChars::@8: scope:[processChars] from processChars::@3
[225] (byte~) processChars::$13 ← (byte) $ff ^ (byte) processChars::bitmask#0
[226] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$13
to:processChars::@5
processChars::@5: scope:[processChars] from processChars::@4 processChars::@8
[227] (byte~) processChars::$18 ← (byte) processChars::i#10 << (byte) 1
[228] (byte~) processChars::$15 ← (byte)(word) processChars::xpos#0
[229] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$18) ← (byte~) processChars::$15
[230] (word~) processChars::$16 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4
[231] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$16
[232] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$18) ← (byte) processChars::ypos#0
[233] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6
to:processChars::@15
processChars::@15: scope:[processChars] from processChars::@5
[234] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6
to:processChars::@14
processChars::@14: scope:[processChars] from processChars::@15
[235] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6
to:processChars::@13
processChars::@13: scope:[processChars] from processChars::@14
[236] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6
to:processChars::@9
processChars::@9: scope:[processChars] from processChars::@13
[237] (word~) processChars::$26 ← (word) processChars::xpos#0 >> (byte) 3
[238] (byte~) processChars::$27 ← (byte)(word~) processChars::$26
[239] (byte) processChars::xchar#0 ← (byte~) processChars::$27 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8
[240] (byte~) processChars::$37 ← (byte) processChars::xchar#0 << (byte) 1
[241] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN#0 + (byte~) processChars::$37)
[242] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX)
[243] (byte~) processChars::$31 ← (byte) processChars::ypos#0 >> (byte) 3
[244] (byte) processChars::ychar#0 ← (byte~) processChars::$31 - (const byte) BORDER_YPOS_TOP#0/(byte) 8
[245] (byte~) processChars::$38 ← (byte) processChars::ychar#0 << (byte) 1
[246] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN#0 + (byte~) processChars::$38)
[247] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY)
to:processChars::@7
processChars::@7: scope:[processChars] from processChars::@6 processChars::@9
[248] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10
to:processChars::@2
processChars::@2: scope:[processChars] from processChars::@1 processChars::@7
[249] (byte) processChars::numActive#3 ← phi( processChars::@1/(byte) processChars::numActive#10 processChars::@7/(byte) processChars::numActive#1 )
[250] (byte) processChars::i#1 ← ++ (byte) processChars::i#10
[251] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1
to:processChars::@12
processChars::@12: scope:[processChars] from processChars::@2
[252] (byte~) processChars::$1 ← (byte) '0' + (byte) processChars::numActive#3
[253] *((const byte*) SCREEN#0+(word) $3e7) ← (byte~) processChars::$1
to:processChars::@return
processChars::@return: scope:[processChars] from processChars::@12
[254] return
to:@return
processChars::@6: scope:[processChars] from processChars::@13 processChars::@14 processChars::@15 processChars::@5
[255] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0
[256] (byte~) processChars::$34 ← (byte) $ff ^ (byte) processChars::bitmask#0
[257] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$34
to:processChars::@7
processChars::@4: scope:[processChars] from processChars::@3
[258] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0
to:processChars::@5
irqTop: scope:[irqTop] from
[259] phi()
to:irqTop::@1
irqTop::@1: scope:[irqTop] from irqTop irqTop::@1
[260] (byte) irqTop::i#2 ← phi( irqTop/(byte) 0 irqTop::@1/(byte) irqTop::i#1 )
[261] (byte) irqTop::i#1 ← ++ (byte) irqTop::i#2
[262] if((byte) irqTop::i#1!=(byte) 5) goto irqTop::@1
to:irqTop::@2
irqTop::@2: scope:[irqTop] from irqTop::@1 irqTop::@2
[263] (byte) irqTop::i1#2 ← phi( irqTop::@1/(byte) 0 irqTop::@2/(byte) irqTop::i1#1 )
[264] (byte) irqTop::i1#1 ← ++ (byte) irqTop::i1#2
[265] if((byte) irqTop::i1#1!=(byte) 8) goto irqTop::@2
to:irqTop::@3
irqTop::@3: scope:[irqTop] from irqTop::@2
[266] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0
[267] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom()
[268] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
to:irqTop::@return
irqTop::@return: scope:[irqTop] from irqTop::@3
[269] return
to:@return
VARIABLE REGISTER WEIGHTS
(byte) BORDER_XPOS_LEFT
(word) BORDER_XPOS_RIGHT
(byte) BORDER_YPOS_BOTTOM
(byte) BORDER_YPOS_TOP
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(void()**) HARDWARE_IRQ
(byte*) IRQ_ENABLE
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(byte) LIGHT_BLUE
(word) NOT_FOUND
(byte) NUM_PROCESSING
(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING
(byte*) PROCPORT
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(word) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::vx
(word) ProcessingSprite::vy
(word) ProcessingSprite::x
(word) ProcessingSprite::y
(byte*) RASTER
(byte) RASTER_IRQ_MIDDLE
(byte) RASTER_IRQ_TOP
(byte*) SCREEN
(byte[$3e8]) SCREEN_COPY
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(byte*) SPRITE_DATA
(word) SPRITE_PTRS
(word[$28]) SQUARES_X
(word[$19]) SQUARES_Y
(byte) STATUS_FREE
(byte) STATUS_NEW
(byte) STATUS_PROCESSING
(byte*) VIC_CONTROL
(word*) VXSIN
(word*) VYSIN
(word) XPOS_LEFTMOST
(word) XPOS_RIGHTMOST
(word) YPOS_BOTTOMMOST
(word) YPOS_TOPMOST
(struct ProcessingChar()) getCharToProcess()
(word~) getCharToProcess::$10 4.0
(byte*~) getCharToProcess::$11 4.0
(byte~) getCharToProcess::$13 1001.0
(byte~) getCharToProcess::$14 2002.0
(word) getCharToProcess::$15 4.0
(word) getCharToProcess::$16 4.0
(word~) getCharToProcess::$9 3.0
(struct ProcessingChar) getCharToProcess::closest
(word) getCharToProcess::closest_dist
(word~) getCharToProcess::closest_dist#10 202.0
(word~) getCharToProcess::closest_dist#12 2002.0
(word) getCharToProcess::closest_dist#2 684.1666666666667
(word) getCharToProcess::closest_dist#8 202.0
(byte) getCharToProcess::closest_x
(byte) getCharToProcess::closest_x#7 388.0
(byte) getCharToProcess::closest_x#9 202.0
(byte) getCharToProcess::closest_y
(byte) getCharToProcess::closest_y#7 388.0
(byte) getCharToProcess::closest_y#9 202.0
(word) getCharToProcess::dist
(word) getCharToProcess::dist#0 750.75
(struct ProcessingChar) getCharToProcess::return
(word) getCharToProcess::return_dist
(word) getCharToProcess::return_dist#0 7.333333333333333
(word) getCharToProcess::return_dist#1 242.23529411764704
(word~) getCharToProcess::return_dist#5 2002.0
(word~) getCharToProcess::return_dist#6 2002.0
(byte) getCharToProcess::return_x
(byte) getCharToProcess::return_x#0 7.333333333333333
(byte) getCharToProcess::return_x#1 242.23529411764704
(byte~) getCharToProcess::return_x#7 1001.0
(byte) getCharToProcess::return_y
(byte) getCharToProcess::return_y#0 7.333333333333333
(byte) getCharToProcess::return_y#1 228.66666666666669
(byte~) getCharToProcess::return_y#7 2002.0
(byte*) getCharToProcess::screen_line
(byte*) getCharToProcess::screen_line#1 50.5
(byte*) getCharToProcess::screen_line#4 80.2
(byte) getCharToProcess::x
(byte) getCharToProcess::x#1 1001.0
(byte) getCharToProcess::x#2 455.0
(byte) getCharToProcess::y
(byte) getCharToProcess::y#1 101.0
(byte) getCharToProcess::y#7 137.75
(void()) initSprites()
(byte) initSprites::i
(byte) initSprites::i#1 16.5
(byte) initSprites::i#2 16.5
(byte*) initSprites::sp
(byte*) initSprites::sp#1 16.5
(byte*) initSprites::sp#2 16.5
(void()) initSquareTables()
(byte~) initSquareTables::$10 22.0
(byte~) initSquareTables::$12 22.0
(word~) initSquareTables::$14 11.0
(byte~) initSquareTables::$16 22.0
(byte~) initSquareTables::$17 22.0
(byte~) initSquareTables::$2 22.0
(byte~) initSquareTables::$4 22.0
(word~) initSquareTables::$6 11.0
(byte) initSquareTables::x
(byte) initSquareTables::x#1 16.5
(byte) initSquareTables::x#2 5.5
(byte) initSquareTables::x_dist
(byte) initSquareTables::x_dist#0 22.0
(byte) initSquareTables::y
(byte) initSquareTables::y#1 16.5
(byte) initSquareTables::y#2 5.5
(byte) initSquareTables::y_dist
(byte) initSquareTables::y_dist#0 22.0
interrupt(HARDWARE_ALL)(void()) irqBottom()
(byte) irqBottom::i
(byte) irqBottom::i#1 16.5
(byte) irqBottom::i#2 22.0
interrupt(HARDWARE_ALL)(void()) irqTop()
(byte) irqTop::i
(byte) irqTop::i#1 16.5
(byte) irqTop::i#2 22.0
(byte) irqTop::i1
(byte) irqTop::i1#1 16.5
(byte) irqTop::i1#2 22.0
(void()) main()
(byte~) main::$16 12.375
(byte) main::$25 22.0
(byte) main::$26 22.0
(byte) main::$27 22.0
(struct ProcessingChar~) main::$9
(struct ProcessingChar) main::center
(word) main::center_dist
(word) main::center_dist#0 22.0
(byte) main::center_x
(byte) main::center_x#0 5.5
(byte) main::center_y
(byte) main::center_y#0 5.5
(byte*) main::dst
(byte*) main::dst#1 11.0
(byte*) main::dst#2 11.0
(byte) main::i
(byte) main::i#1 16.5
(byte) main::i#2 4.230769230769231
(byte*) main::src
(byte*) main::src#1 11.0
(byte*) main::src#2 16.5
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
(byte~) mul8u::$1 202.0
(byte) mul8u::a
(byte) mul8u::a#0 101.0
(byte) mul8u::a#1 11.0
(byte) mul8u::a#2 11.0
(byte) mul8u::a#3 67.66666666666666
(byte) mul8u::a#6 24.0
(byte) mul8u::b
(byte) mul8u::b#0 22.0
(byte) mul8u::b#1 22.0
(word) mul8u::mb
(word) mul8u::mb#0 24.0
(word) mul8u::mb#1 202.0
(word) mul8u::mb#2 43.57142857142858
(word) mul8u::res
(word) mul8u::res#1 202.0
(word) mul8u::res#2 46.42857142857143
(word) mul8u::res#6 101.0
(word) mul8u::return
(word) mul8u::return#2 22.0
(word) mul8u::return#3 22.0
(void()) processChars()
(byte~) processChars::$1 4.0
(byte~) processChars::$12 22.0
(byte~) processChars::$13 22.0
(byte~) processChars::$15 22.0
(word~) processChars::$16 11.0
(byte~) processChars::$18 6.6000000000000005
(word~) processChars::$26 11.0
(byte~) processChars::$27 22.0
(byte~) processChars::$31 22.0
(byte~) processChars::$34 22.0
(byte~) processChars::$36 22.0
(byte~) processChars::$37 22.0
(byte~) processChars::$38 22.0
(byte) processChars::$64 22.0
(byte) processChars::$65 22.0
(byte) processChars::$66 22.0
(byte) processChars::bitmask
(byte) processChars::bitmask#0 2.2916666666666665
(byte) processChars::i
(byte) processChars::i#1 16.5
(byte) processChars::i#10 1.4666666666666666
(byte) processChars::numActive
(byte) processChars::numActive#1 22.0
(byte) processChars::numActive#10 0.7674418604651163
(byte) processChars::numActive#3 11.666666666666666
(struct ProcessingSprite*) processChars::processing
(struct ProcessingSprite*) processChars::processing#0 0.3235294117647059
(byte) processChars::xchar
(byte) processChars::xchar#0 22.0
(word) processChars::xpos
(word) processChars::xpos#0 2.0625
(byte) processChars::ychar
(byte) processChars::ychar#0 22.0
(byte) processChars::ypos
(byte) processChars::ypos#0 2.75
(void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine)
(void()*) setupRasterIrq::irqRoutine
(word) setupRasterIrq::raster
(void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (word) startProcessing::center_dist)
(word~) startProcessing::$0 3.0
(word~) startProcessing::$1 4.0
(word~) startProcessing::$10 4.0
(word~) startProcessing::$11 4.0
(word~) startProcessing::$12 4.0
(word~) startProcessing::$14 4.0
(word~) startProcessing::$15 4.0
(word~) startProcessing::$16 4.0
(byte*~) startProcessing::$2 1.2000000000000002
(byte~) startProcessing::$21 2.0
(word~) startProcessing::$22 0.5714285714285714
(byte~) startProcessing::$29 2002.0
(byte~) startProcessing::$30 2.25
(word~) startProcessing::$4 4.0
(byte) startProcessing::$40 2002.0
(byte) startProcessing::$41 2002.0
(byte) startProcessing::$42 2002.0
(word) startProcessing::$44 4.0
(word) startProcessing::$45 4.0
(byte) startProcessing::$47 4.0
(byte) startProcessing::$48 4.0
(byte) startProcessing::$49 4.0
(word~) startProcessing::$5 4.0
(word~) startProcessing::$7 4.0
(word~) startProcessing::$8 4.0
(struct ProcessingChar) startProcessing::center
(word) startProcessing::center_dist
(byte) startProcessing::center_x
(byte) startProcessing::center_x#0 0.3846153846153846
(byte) startProcessing::center_y
(byte) startProcessing::center_y#0 0.2619047619047619
(byte) startProcessing::ch
(byte) startProcessing::ch#0 2.0
(byte*) startProcessing::chargenData
(byte*) startProcessing::chargenData#0 1.3333333333333333
(byte*) startProcessing::chargenData#1 67.33333333333333
(byte*) startProcessing::chargenData#2 101.66666666666666
(byte) startProcessing::freeIdx
(byte) startProcessing::freeIdx#2 29.90909090909092
(byte) startProcessing::freeIdx#6 22.444444444444443
(byte~) startProcessing::freeIdx#7 202.0
(byte~) startProcessing::freeIdx#8 202.0
(byte) startProcessing::i
(byte) startProcessing::i#1 1501.5
(byte) startProcessing::i#2 1001.0000000000001
(byte) startProcessing::i1
(byte) startProcessing::i1#1 151.5
(byte) startProcessing::i1#2 50.5
(byte*) startProcessing::screenPtr
(byte*) startProcessing::screenPtr#0 0.1
(byte*) startProcessing::spriteData
(byte*) startProcessing::spriteData#0 0.5714285714285714
(byte*) startProcessing::spriteData#1 50.5
(byte*) startProcessing::spriteData#2 152.5
(byte) startProcessing::spriteIdx
(byte) startProcessing::spritePtr
(byte) startProcessing::spritePtr#0 0.3333333333333333
(word) startProcessing::spriteX
(word) startProcessing::spriteX#0 0.3333333333333333
(word) startProcessing::spriteY
(word) startProcessing::spriteY#0 0.4444444444444444
Not consolidating phi with different size mul8u::mb#0 mul8u::b#1
Not consolidating phi with different size mul8u::mb#0 mul8u::b#0
Initial phi equivalence classes
[ main::src#2 main::src#1 ]
[ main::dst#2 main::dst#1 ]
[ main::i#2 main::i#1 ]
[ 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 ]
[ getCharToProcess::screen_line#4 getCharToProcess::screen_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 ]
[ initSprites::sp#2 initSprites::sp#1 ]
[ initSprites::i#2 initSprites::i#1 ]
[ initSquareTables::x#2 initSquareTables::x#1 ]
[ initSquareTables::x_dist#0 initSquareTables::$4 initSquareTables::$2 ]
[ initSquareTables::y#2 initSquareTables::y#1 ]
[ initSquareTables::y_dist#0 initSquareTables::$12 initSquareTables::$10 ]
[ mul8u::b#1 ]
[ mul8u::b#0 ]
[ mul8u::a#3 mul8u::a#6 mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
[ irqBottom::i#2 irqBottom::i#1 ]
[ processChars::i#10 processChars::i#1 ]
[ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
[ irqTop::i#2 irqTop::i#1 ]
[ irqTop::i1#2 irqTop::i1#1 ]
Added variable main::$25 to zero page equivalence class [ main::$25 ]
Added variable main::$26 to zero page equivalence class [ main::$26 ]
Added variable main::$27 to zero page equivalence class [ main::$27 ]
Added variable main::$16 to zero page equivalence class [ main::$16 ]
Added variable getCharToProcess::return_x#0 to zero page equivalence class [ getCharToProcess::return_x#0 ]
Added variable getCharToProcess::return_y#0 to zero page equivalence class [ getCharToProcess::return_y#0 ]
Added variable getCharToProcess::return_dist#0 to zero page equivalence class [ getCharToProcess::return_dist#0 ]
Added variable main::center_x#0 to zero page equivalence class [ main::center_x#0 ]
Added variable main::center_y#0 to zero page equivalence class [ main::center_y#0 ]
Added variable main::center_dist#0 to zero page equivalence class [ main::center_dist#0 ]
Added variable startProcessing::center_x#0 to zero page equivalence class [ startProcessing::center_x#0 ]
Added variable startProcessing::center_y#0 to zero page equivalence class [ startProcessing::center_y#0 ]
Added variable startProcessing::$40 to zero page equivalence class [ startProcessing::$40 ]
Added variable startProcessing::$41 to zero page equivalence class [ startProcessing::$41 ]
Added variable startProcessing::$42 to zero page equivalence class [ startProcessing::$42 ]
Added variable startProcessing::$29 to zero page equivalence class [ startProcessing::$29 ]
Added variable startProcessing::$0 to zero page equivalence class [ startProcessing::$0 ]
Added variable startProcessing::$44 to zero page equivalence class [ startProcessing::$44 ]
Added variable startProcessing::$45 to zero page equivalence class [ startProcessing::$45 ]
Added variable startProcessing::$1 to zero page equivalence class [ startProcessing::$1 ]
Added variable startProcessing::$2 to zero page equivalence class [ startProcessing::$2 ]
Added variable startProcessing::screenPtr#0 to zero page equivalence class [ startProcessing::screenPtr#0 ]
Added variable startProcessing::$4 to zero page equivalence class [ startProcessing::$4 ]
Added variable startProcessing::$5 to zero page equivalence class [ startProcessing::$5 ]
Added variable startProcessing::ch#0 to zero page equivalence class [ startProcessing::ch#0 ]
Added variable startProcessing::$7 to zero page equivalence class [ startProcessing::$7 ]
Added variable startProcessing::$8 to zero page equivalence class [ startProcessing::$8 ]
Added variable startProcessing::$10 to zero page equivalence class [ startProcessing::$10 ]
Added variable startProcessing::$11 to zero page equivalence class [ startProcessing::$11 ]
Added variable startProcessing::$12 to zero page equivalence class [ startProcessing::$12 ]
Added variable startProcessing::spriteX#0 to zero page equivalence class [ startProcessing::spriteX#0 ]
Added variable startProcessing::$14 to zero page equivalence class [ startProcessing::$14 ]
Added variable startProcessing::$15 to zero page equivalence class [ startProcessing::$15 ]
Added variable startProcessing::$16 to zero page equivalence class [ startProcessing::$16 ]
Added variable startProcessing::spriteY#0 to zero page equivalence class [ startProcessing::spriteY#0 ]
Added variable startProcessing::spritePtr#0 to zero page equivalence class [ startProcessing::spritePtr#0 ]
Added variable startProcessing::$21 to zero page equivalence class [ startProcessing::$21 ]
Added variable startProcessing::$22 to zero page equivalence class [ startProcessing::$22 ]
Added variable startProcessing::$47 to zero page equivalence class [ startProcessing::$47 ]
Added variable startProcessing::$48 to zero page equivalence class [ startProcessing::$48 ]
Added variable startProcessing::$49 to zero page equivalence class [ startProcessing::$49 ]
Added variable startProcessing::$30 to zero page equivalence class [ startProcessing::$30 ]
Added variable getCharToProcess::$13 to zero page equivalence class [ getCharToProcess::$13 ]
Added variable getCharToProcess::$14 to zero page equivalence class [ getCharToProcess::$14 ]
Added variable getCharToProcess::$9 to zero page equivalence class [ getCharToProcess::$9 ]
Added variable getCharToProcess::$15 to zero page equivalence class [ getCharToProcess::$15 ]
Added variable getCharToProcess::$16 to zero page equivalence class [ getCharToProcess::$16 ]
Added variable getCharToProcess::$10 to zero page equivalence class [ getCharToProcess::$10 ]
Added variable getCharToProcess::$11 to zero page equivalence class [ getCharToProcess::$11 ]
Added variable mul8u::return#2 to zero page equivalence class [ mul8u::return#2 ]
Added variable initSquareTables::$6 to zero page equivalence class [ initSquareTables::$6 ]
Added variable initSquareTables::$16 to zero page equivalence class [ initSquareTables::$16 ]
Added variable mul8u::return#3 to zero page equivalence class [ mul8u::return#3 ]
Added variable initSquareTables::$14 to zero page equivalence class [ initSquareTables::$14 ]
Added variable initSquareTables::$17 to zero page equivalence class [ initSquareTables::$17 ]
Added variable mul8u::$1 to zero page equivalence class [ mul8u::$1 ]
Added variable processChars::$64 to zero page equivalence class [ processChars::$64 ]
Added variable processChars::$65 to zero page equivalence class [ processChars::$65 ]
Added variable processChars::$66 to zero page equivalence class [ processChars::$66 ]
Added variable processChars::$36 to zero page equivalence class [ processChars::$36 ]
Added variable processChars::processing#0 to zero page equivalence class [ processChars::processing#0 ]
Added variable processChars::bitmask#0 to zero page equivalence class [ processChars::bitmask#0 ]
Added variable processChars::xpos#0 to zero page equivalence class [ processChars::xpos#0 ]
Added variable processChars::$12 to zero page equivalence class [ processChars::$12 ]
Added variable processChars::$13 to zero page equivalence class [ processChars::$13 ]
Added variable processChars::$18 to zero page equivalence class [ processChars::$18 ]
Added variable processChars::$15 to zero page equivalence class [ processChars::$15 ]
Added variable processChars::$16 to zero page equivalence class [ processChars::$16 ]
Added variable processChars::ypos#0 to zero page equivalence class [ processChars::ypos#0 ]
Added variable processChars::$26 to zero page equivalence class [ processChars::$26 ]
Added variable processChars::$27 to zero page equivalence class [ processChars::$27 ]
Added variable processChars::xchar#0 to zero page equivalence class [ processChars::xchar#0 ]
Added variable processChars::$37 to zero page equivalence class [ processChars::$37 ]
Added variable processChars::$31 to zero page equivalence class [ processChars::$31 ]
Added variable processChars::ychar#0 to zero page equivalence class [ processChars::ychar#0 ]
Added variable processChars::$38 to zero page equivalence class [ processChars::$38 ]
Added variable processChars::$1 to zero page equivalence class [ processChars::$1 ]
Added variable processChars::$34 to zero page equivalence class [ processChars::$34 ]
Complete equivalence classes
[ main::src#2 main::src#1 ]
[ main::dst#2 main::dst#1 ]
[ main::i#2 main::i#1 ]
[ 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 ]
[ getCharToProcess::screen_line#4 getCharToProcess::screen_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 ]
[ initSprites::sp#2 initSprites::sp#1 ]
[ initSprites::i#2 initSprites::i#1 ]
[ initSquareTables::x#2 initSquareTables::x#1 ]
[ initSquareTables::x_dist#0 initSquareTables::$4 initSquareTables::$2 ]
[ initSquareTables::y#2 initSquareTables::y#1 ]
[ initSquareTables::y_dist#0 initSquareTables::$12 initSquareTables::$10 ]
[ mul8u::b#1 ]
[ mul8u::b#0 ]
[ mul8u::a#3 mul8u::a#6 mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
[ mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
[ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
[ irqBottom::i#2 irqBottom::i#1 ]
[ processChars::i#10 processChars::i#1 ]
[ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
[ irqTop::i#2 irqTop::i#1 ]
[ irqTop::i1#2 irqTop::i1#1 ]
[ main::$25 ]
[ main::$26 ]
[ main::$27 ]
[ main::$16 ]
[ 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 ]
[ startProcessing::$40 ]
[ startProcessing::$41 ]
[ startProcessing::$42 ]
[ startProcessing::$29 ]
[ startProcessing::$0 ]
[ startProcessing::$44 ]
[ startProcessing::$45 ]
[ startProcessing::$1 ]
[ startProcessing::$2 ]
[ startProcessing::screenPtr#0 ]
[ startProcessing::$4 ]
[ startProcessing::$5 ]
[ startProcessing::ch#0 ]
[ startProcessing::$7 ]
[ startProcessing::$8 ]
[ startProcessing::$10 ]
[ startProcessing::$11 ]
[ startProcessing::$12 ]
[ startProcessing::spriteX#0 ]
[ startProcessing::$14 ]
[ startProcessing::$15 ]
[ startProcessing::$16 ]
[ startProcessing::spriteY#0 ]
[ startProcessing::spritePtr#0 ]
[ startProcessing::$21 ]
[ startProcessing::$22 ]
[ startProcessing::$47 ]
[ startProcessing::$48 ]
[ startProcessing::$49 ]
[ startProcessing::$30 ]
[ getCharToProcess::$13 ]
[ getCharToProcess::$14 ]
[ getCharToProcess::$9 ]
[ getCharToProcess::$15 ]
[ getCharToProcess::$16 ]
[ getCharToProcess::$10 ]
[ getCharToProcess::$11 ]
[ mul8u::return#2 ]
[ initSquareTables::$6 ]
[ initSquareTables::$16 ]
[ mul8u::return#3 ]
[ initSquareTables::$14 ]
[ initSquareTables::$17 ]
[ mul8u::$1 ]
[ processChars::$64 ]
[ processChars::$65 ]
[ processChars::$66 ]
[ processChars::$36 ]
[ processChars::processing#0 ]
[ processChars::bitmask#0 ]
[ processChars::xpos#0 ]
[ processChars::$12 ]
[ processChars::$13 ]
[ processChars::$18 ]
[ processChars::$15 ]
[ processChars::$16 ]
[ processChars::ypos#0 ]
[ processChars::$26 ]
[ processChars::$27 ]
[ processChars::xchar#0 ]
[ processChars::$37 ]
[ processChars::$31 ]
[ processChars::ychar#0 ]
[ processChars::$38 ]
[ processChars::$1 ]
[ processChars::$34 ]
Allocated zp ZP_WORD:2 [ main::src#2 main::src#1 ]
Allocated zp ZP_WORD:4 [ main::dst#2 main::dst#1 ]
Allocated zp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Allocated zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Allocated zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Allocated zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ]
Allocated zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ]
Allocated zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Allocated zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#1 ]
Allocated zp ZP_BYTE:16 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Allocated zp ZP_BYTE:17 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Allocated zp ZP_WORD:18 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Allocated zp ZP_BYTE:20 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Allocated zp ZP_BYTE:21 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Allocated zp ZP_WORD:22 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ]
Allocated zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 ]
Allocated zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ]
Allocated zp ZP_BYTE:27 [ initSquareTables::x#2 initSquareTables::x#1 ]
Allocated zp ZP_BYTE:28 [ initSquareTables::x_dist#0 initSquareTables::$4 initSquareTables::$2 ]
Allocated zp ZP_BYTE:29 [ initSquareTables::y#2 initSquareTables::y#1 ]
Allocated zp ZP_BYTE:30 [ initSquareTables::y_dist#0 initSquareTables::$12 initSquareTables::$10 ]
Allocated zp ZP_BYTE:31 [ mul8u::b#1 ]
Allocated zp ZP_BYTE:32 [ mul8u::b#0 ]
Allocated zp ZP_BYTE:33 [ mul8u::a#3 mul8u::a#6 mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
Allocated zp ZP_WORD:34 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ]
Allocated zp ZP_WORD:36 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
Allocated zp ZP_BYTE:38 [ irqBottom::i#2 irqBottom::i#1 ]
Allocated zp ZP_BYTE:39 [ processChars::i#10 processChars::i#1 ]
Allocated zp ZP_BYTE:40 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Allocated zp ZP_BYTE:41 [ irqTop::i#2 irqTop::i#1 ]
Allocated zp ZP_BYTE:42 [ irqTop::i1#2 irqTop::i1#1 ]
Allocated zp ZP_BYTE:43 [ main::$25 ]
Allocated zp ZP_BYTE:44 [ main::$26 ]
Allocated zp ZP_BYTE:45 [ main::$27 ]
Allocated zp ZP_BYTE:46 [ main::$16 ]
Allocated zp ZP_BYTE:47 [ getCharToProcess::return_x#0 ]
Allocated zp ZP_BYTE:48 [ getCharToProcess::return_y#0 ]
Allocated zp ZP_WORD:49 [ getCharToProcess::return_dist#0 ]
Allocated zp ZP_BYTE:51 [ main::center_x#0 ]
Allocated zp ZP_BYTE:52 [ main::center_y#0 ]
Allocated zp ZP_WORD:53 [ main::center_dist#0 ]
Allocated zp ZP_BYTE:55 [ startProcessing::center_x#0 ]
Allocated zp ZP_BYTE:56 [ startProcessing::center_y#0 ]
Allocated zp ZP_BYTE:57 [ startProcessing::$40 ]
Allocated zp ZP_BYTE:58 [ startProcessing::$41 ]
Allocated zp ZP_BYTE:59 [ startProcessing::$42 ]
Allocated zp ZP_BYTE:60 [ startProcessing::$29 ]
Allocated zp ZP_WORD:61 [ startProcessing::$0 ]
Allocated zp ZP_WORD:63 [ startProcessing::$44 ]
Allocated zp ZP_WORD:65 [ startProcessing::$45 ]
Allocated zp ZP_WORD:67 [ startProcessing::$1 ]
Allocated zp ZP_WORD:69 [ startProcessing::$2 ]
Allocated zp ZP_WORD:71 [ startProcessing::screenPtr#0 ]
Allocated zp ZP_WORD:73 [ startProcessing::$4 ]
Allocated zp ZP_WORD:75 [ startProcessing::$5 ]
Allocated zp ZP_BYTE:77 [ startProcessing::ch#0 ]
Allocated zp ZP_WORD:78 [ startProcessing::$7 ]
Allocated zp ZP_WORD:80 [ startProcessing::$8 ]
Allocated zp ZP_WORD:82 [ startProcessing::$10 ]
Allocated zp ZP_WORD:84 [ startProcessing::$11 ]
Allocated zp ZP_WORD:86 [ startProcessing::$12 ]
Allocated zp ZP_WORD:88 [ startProcessing::spriteX#0 ]
Allocated zp ZP_WORD:90 [ startProcessing::$14 ]
Allocated zp ZP_WORD:92 [ startProcessing::$15 ]
Allocated zp ZP_WORD:94 [ startProcessing::$16 ]
Allocated zp ZP_WORD:96 [ startProcessing::spriteY#0 ]
Allocated zp ZP_BYTE:98 [ startProcessing::spritePtr#0 ]
Allocated zp ZP_BYTE:99 [ startProcessing::$21 ]
Allocated zp ZP_WORD:100 [ startProcessing::$22 ]
Allocated zp ZP_BYTE:102 [ startProcessing::$47 ]
Allocated zp ZP_BYTE:103 [ startProcessing::$48 ]
Allocated zp ZP_BYTE:104 [ startProcessing::$49 ]
Allocated zp ZP_BYTE:105 [ startProcessing::$30 ]
Allocated zp ZP_BYTE:106 [ getCharToProcess::$13 ]
Allocated zp ZP_BYTE:107 [ getCharToProcess::$14 ]
Allocated zp ZP_WORD:108 [ getCharToProcess::$9 ]
Allocated zp ZP_WORD:110 [ getCharToProcess::$15 ]
Allocated zp ZP_WORD:112 [ getCharToProcess::$16 ]
Allocated zp ZP_WORD:114 [ getCharToProcess::$10 ]
Allocated zp ZP_WORD:116 [ getCharToProcess::$11 ]
Allocated zp ZP_WORD:118 [ mul8u::return#2 ]
Allocated zp ZP_WORD:120 [ initSquareTables::$6 ]
Allocated zp ZP_BYTE:122 [ initSquareTables::$16 ]
Allocated zp ZP_WORD:123 [ mul8u::return#3 ]
Allocated zp ZP_WORD:125 [ initSquareTables::$14 ]
Allocated zp ZP_BYTE:127 [ initSquareTables::$17 ]
Allocated zp ZP_BYTE:128 [ mul8u::$1 ]
Allocated zp ZP_BYTE:129 [ processChars::$64 ]
Allocated zp ZP_BYTE:130 [ processChars::$65 ]
Allocated zp ZP_BYTE:131 [ processChars::$66 ]
Allocated zp ZP_BYTE:132 [ processChars::$36 ]
Allocated zp ZP_WORD:133 [ processChars::processing#0 ]
Allocated zp ZP_BYTE:135 [ processChars::bitmask#0 ]
Allocated zp ZP_WORD:136 [ processChars::xpos#0 ]
Allocated zp ZP_BYTE:138 [ processChars::$12 ]
Allocated zp ZP_BYTE:139 [ processChars::$13 ]
Allocated zp ZP_BYTE:140 [ processChars::$18 ]
Allocated zp ZP_BYTE:141 [ processChars::$15 ]
Allocated zp ZP_WORD:142 [ processChars::$16 ]
Allocated zp ZP_BYTE:144 [ processChars::ypos#0 ]
Allocated zp ZP_WORD:145 [ processChars::$26 ]
Allocated zp ZP_BYTE:147 [ processChars::$27 ]
Allocated zp ZP_BYTE:148 [ processChars::xchar#0 ]
Allocated zp ZP_BYTE:149 [ processChars::$37 ]
Allocated zp ZP_BYTE:150 [ processChars::$31 ]
Allocated zp ZP_BYTE:151 [ processChars::ychar#0 ]
Allocated zp ZP_BYTE:152 [ processChars::$38 ]
Allocated zp ZP_BYTE:153 [ processChars::$1 ]
Allocated zp ZP_BYTE:154 [ processChars::$34 ]
INITIAL ASM
//SEG0 File Comments
// Black Hole at the center of the BASIC screen sucking in letters
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
.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_STATUS = $a
.const OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $b
// Processor port data direction register
.label PROCPORT_DDR = 0
// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// RAM in $A000, $E000 I/O in $D000
.const PROCPORT_RAM_IO = $35
// RAM in $A000, $E000 CHAR ROM in $D000
.const PROCPORT_RAM_CHARROM = $31
// The address of the CHARGEN character set
.label CHARGEN = $d000
// 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 SPRITE_PTRS = $3f8
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label SPRITES_XMSB = $d010
.label RASTER = $d012
.label SPRITES_ENABLE = $d015
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label SPRITES_COLS = $d027
.label VIC_CONTROL = $d011
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Bits for the IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// Color Ram
.label COLS = $d800
// CIA#1 Interrupt Status & Control Register
.label CIA1_INTERRUPT = $dc0d
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
.const LIGHT_BLUE = $e
// Address of the screen
.label SCREEN = $400
// Sprite data for the animating sprites
.label SPRITE_DATA = $2000
// Values added to VX
.label VXSIN = $2200
// Values added to VY
.label VYSIN = $2280
// Max number of chars processed at once
.const NUM_PROCESSING = 8
// Distance value meaning not found
.const NOT_FOUND = $ffff
// Values for ProcessingSprite.status
.const STATUS_FREE = 0
.const STATUS_NEW = 1
.const STATUS_PROCESSING = 2
.const RASTER_IRQ_TOP = $30
.const RASTER_IRQ_MIDDLE = $ff
.const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
.const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
.const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
.const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
//SEG3 @begin
bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 kickasm(location (const word*) VXSIN#0) {{ .for(var i=0; i<40; i++) { .word -sin(toRadians([i*360]/40))*4 } }}
//SEG6 kickasm(location (const word*) VYSIN#0) {{ .for(var i=0; i<25; i++) { .word -sin(toRadians([i*360]/25))*4 } }}
//SEG7 [3] phi from @1 to @2 [phi:@1->@2]
b2_from_b1:
jmp b2
//SEG8 @2
b2:
//SEG9 [4] call main
//SEG10 [6] phi from @2 to main [phi:@2->main]
main_from_b2:
jsr main
//SEG11 [5] phi from @2 to @end [phi:@2->@end]
bend_from_b2:
jmp bend
//SEG12 @end
bend:
//SEG13 main
main: {
.label _16 = $2e
.label src = 2
.label dst = 4
.label i = 6
.label center_x = $33
.label center_y = $34
.label center_dist = $35
.label _25 = $2b
.label _26 = $2c
.label _27 = $2d
//SEG14 [7] call initSquareTables
//SEG15 [158] phi from main to initSquareTables [phi:main->initSquareTables]
initSquareTables_from_main:
jsr initSquareTables
//SEG16 [8] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG17 [8] phi (byte*) main::dst#2 = (const byte[$3e8]) SCREEN_COPY#0 [phi:main->main::@1#0] -- pbuz1=pbuc1
lda #<SCREEN_COPY
sta dst
lda #>SCREEN_COPY
sta dst+1
//SEG18 [8] phi (byte*) main::src#2 = (const byte*) SCREEN#0 [phi:main->main::@1#1] -- pbuz1=pbuc1
lda #<SCREEN
sta src
lda #>SCREEN
sta src+1
jmp b1
// Copy screen to screen copy
//SEG19 [8] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
b1_from_b1:
//SEG20 [8] phi (byte*) main::dst#2 = (byte*) main::dst#1 [phi:main::@1->main::@1#0] -- register_copy
//SEG21 [8] phi (byte*) main::src#2 = (byte*) main::src#1 [phi:main::@1->main::@1#1] -- register_copy
jmp b1
//SEG22 main::@1
b1:
//SEG23 [9] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (src),y
ldy #0
sta (dst),y
//SEG24 [10] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1
inc src
bne !+
inc src+1
!:
//SEG25 [11] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1
inc dst
bne !+
inc dst+1
!:
//SEG26 [12] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@1 -- pbuz1_neq_pbuc1_then_la1
lda src+1
cmp #>SCREEN+$3e8
bne b1_from_b1
lda src
cmp #<SCREEN+$3e8
bne b1_from_b1
//SEG27 [13] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
//SEG28 [13] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
lda #0
sta i
jmp b2
// Init processing array
//SEG29 [13] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
b2_from_b2:
//SEG30 [13] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@2#0] -- register_copy
jmp b2
//SEG31 main::@2
b2:
//SEG32 [14] (byte) main::$25 ← (byte) main::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda i
asl
sta _25
//SEG33 [15] (byte) main::$26 ← (byte) main::$25 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3
lda _25
clc
adc i
sta _26
//SEG34 [16] (byte) main::$27 ← (byte) main::$26 << (byte) 2 -- vbuz1=vbuz2_rol_2
lda _26
asl
asl
sta _27
//SEG35 [17] (byte~) main::$16 ← (byte) main::$27 + (byte) main::i#2 -- vbuz1=vbuz2_plus_vbuz3
lda _27
clc
adc i
sta _16
//SEG36 [18] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda _16
ldx #0
tay
txa
sta PROCESSING,y
//SEG37 [19] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda _16
ldx #0
tay
txa
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y
//SEG38 [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda _16
ldx #0
tay
txa
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y
//SEG39 [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuz1=vbuc2
lda _16
ldx #0
tay
txa
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y
//SEG40 [22] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #0
ldy _16
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y
//SEG41 [23] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #0
ldy _16
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y
//SEG42 [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE#0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #STATUS_FREE
ldy _16
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
//SEG43 [25] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuz1=pbuc2
ldy _16
lda #<0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,y
lda #>0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,y
//SEG44 [26] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG45 [27] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp i
bne b2_from_b2
//SEG46 [28] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
b3_from_b2:
jmp b3
//SEG47 main::@3
b3:
//SEG48 [29] call initSprites
//SEG49 [145] phi from main::@3 to initSprites [phi:main::@3->initSprites]
initSprites_from_b3:
jsr initSprites
//SEG50 [30] phi from main::@3 to main::@8 [phi:main::@3->main::@8]
b8_from_b3:
jmp b8
//SEG51 main::@8
b8:
//SEG52 [31] call setupRasterIrq
jsr setupRasterIrq
//SEG53 [32] phi from main::@5 main::@8 to main::@4 [phi:main::@5/main::@8->main::@4]
b4_from_b5:
b4_from_b8:
jmp b4
// Main loop
//SEG54 main::@4
b4:
//SEG55 [33] call getCharToProcess
//SEG56 [107] phi from main::@4 to getCharToProcess [phi:main::@4->getCharToProcess]
getCharToProcess_from_b4:
jsr getCharToProcess
//SEG57 [34] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuz1=vbuz2
lda getCharToProcess.return_x_1
sta getCharToProcess.return_x
//SEG58 [35] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuz1=vbuz2
lda getCharToProcess.return_y_1
sta getCharToProcess.return_y
//SEG59 [36] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1 -- vwuz1=vwuz2
lda getCharToProcess.return_dist_1
sta getCharToProcess.return_dist
lda getCharToProcess.return_dist_1+1
sta getCharToProcess.return_dist+1
jmp b9
//SEG60 main::@9
b9:
//SEG61 [37] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0 -- vbuz1=vbuz2
lda getCharToProcess.return_x
sta center_x
//SEG62 [38] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0 -- vbuz1=vbuz2
lda getCharToProcess.return_y
sta center_y
//SEG63 [39] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0 -- vwuz1=vwuz2
lda getCharToProcess.return_dist
sta center_dist
lda getCharToProcess.return_dist+1
sta center_dist+1
//SEG64 [40] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@5 -- vwuz1_neq_vwuc1_then_la1
lda center_dist+1
cmp #>NOT_FOUND
bne b5
lda center_dist
cmp #<NOT_FOUND
bne b5
jmp b6
//SEG65 main::@6
b6:
//SEG66 [41] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2
lda #'.'
sta SCREEN+$3e7
jmp b7
//SEG67 main::@7
b7:
//SEG68 [42] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1
inc COLS+$3e7
jmp b7
//SEG69 main::@5
b5:
//SEG70 [43] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuz2
lda center_x
sta startProcessing.center_x
//SEG71 [44] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 -- vbuz1=vbuz2
lda center_y
sta startProcessing.center_y
//SEG72 [45] call startProcessing
//SEG73 [46] phi from main::@5 to startProcessing [phi:main::@5->startProcessing]
startProcessing_from_b5:
jsr startProcessing
jmp b4_from_b5
}
//SEG74 startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zeropage($37) center_x, byte zeropage($38) center_y)
startProcessing: {
.label _0 = $3d
.label _1 = $43
.label _2 = $45
.label _4 = $49
.label _5 = $4b
.label _7 = $4e
.label _8 = $50
.label _10 = $52
.label _11 = $54
.label _12 = $56
.label _14 = $5a
.label _15 = $5c
.label _16 = $5e
.label _21 = $63
.label _22 = $64
.label _29 = $3c
.label _30 = $69
.label center_x = $37
.label center_y = $38
.label i = 8
.label screenPtr = $47
.label spriteData = $b
.label ch = $4d
.label chargenData = 9
.label i1 = $d
.label spriteX = $58
.label spriteY = $60
.label spritePtr = $62
.label freeIdx = 8
.label freeIdx_6 = 7
.label _40 = $39
.label _41 = $3a
.label _42 = $3b
.label _44 = $3f
.label _45 = $41
.label _47 = $66
.label _48 = $67
.label _49 = $68
.label freeIdx_7 = 7
//SEG75 [47] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
b1_from_startProcessing:
//SEG76 [47] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuz1=vbuc1
lda #$ff
sta freeIdx_6
jmp b1
//SEG77 startProcessing::@1
b1:
//SEG78 [48] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
b2_from_b1:
//SEG79 [48] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1
lda #0
sta i
jmp b2
//SEG80 [48] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
b2_from_b3:
//SEG81 [48] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy
jmp b2
//SEG82 startProcessing::@2
b2:
//SEG83 [49] (byte) startProcessing::$40 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda i
asl
sta _40
//SEG84 [50] (byte) startProcessing::$41 ← (byte) startProcessing::$40 + (byte) startProcessing::i#2 -- vbuz1=vbuz2_plus_vbuz3
lda _40
clc
adc i
sta _41
//SEG85 [51] (byte) startProcessing::$42 ← (byte) startProcessing::$41 << (byte) 2 -- vbuz1=vbuz2_rol_2
lda _41
asl
asl
sta _42
//SEG86 [52] (byte~) startProcessing::$29 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 -- vbuz1=vbuz2_plus_vbuz3
lda _42
clc
adc i
sta _29
//SEG87 [53] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$29)!=(const byte) STATUS_FREE#0) goto startProcessing::@3 -- pbuc1_derefidx_vbuz1_neq_vbuc2_then_la1
lda #STATUS_FREE
ldy _29
cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
bne b3
//SEG88 [54] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
b4_from_b2:
b4_from_b9:
//SEG89 [54] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy
jmp b4
//SEG90 startProcessing::@4
b4:
//SEG91 [55] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1
lda #$ff
cmp freeIdx
beq b8
jmp b5
//SEG92 startProcessing::@5
b5:
//SEG93 [56] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2
lda center_y
sta _0
lda #0
sta _0+1
//SEG94 [57] (word) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2
lda _0
asl
sta _44
lda _0+1
rol
sta _44+1
asl _44
rol _44+1
//SEG95 [58] (word) startProcessing::$45 ← (word) startProcessing::$44 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz3
lda _44
clc
adc _0
sta _45
lda _44+1
adc _0+1
sta _45+1
//SEG96 [59] (word~) startProcessing::$1 ← (word) startProcessing::$45 << (byte) 3 -- vwuz1=vwuz2_rol_3
lda _45
asl
sta _1
lda _45+1
rol
sta _1+1
asl _1
rol _1+1
asl _1
rol _1+1
//SEG97 [60] (byte*~) startProcessing::$2 ← (const byte*) SCREEN#0 + (word~) startProcessing::$1 -- pbuz1=pbuc1_plus_vwuz2
lda _1
clc
adc #<SCREEN
sta _2
lda _1+1
adc #>SCREEN
sta _2+1
//SEG98 [61] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0 -- pbuz1=pbuz2_plus_vbuz3
lda center_x
clc
adc _2
sta screenPtr
lda #0
adc _2+1
sta screenPtr+1
//SEG99 [62] (word~) startProcessing::$4 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2
lda freeIdx
sta _4
lda #0
sta _4+1
//SEG100 [63] (word~) startProcessing::$5 ← (word~) startProcessing::$4 << (byte) 6 -- vwuz1=vwuz2_rol_6
lda _4
asl
sta _5
lda _4+1
rol
sta _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
//SEG101 [64] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$5 -- pbuz1=pbuc1_plus_vwuz2
lda _5
clc
adc #<SPRITE_DATA
sta spriteData
lda _5+1
adc #>SPRITE_DATA
sta spriteData+1
//SEG102 [65] (byte) startProcessing::ch#0 ← *((byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0) -- vbuz1=pbuz2_derefidx_vbuz3
ldy center_x
lda (_2),y
sta ch
//SEG103 [66] (word~) startProcessing::$7 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuz2
lda ch
sta _7
lda #0
sta _7+1
//SEG104 [67] (word~) startProcessing::$8 ← (word~) startProcessing::$7 << (byte) 3 -- vwuz1=vwuz2_rol_3
lda _7
asl
sta _8
lda _7+1
rol
sta _8+1
asl _8
rol _8+1
asl _8
rol _8+1
//SEG105 [68] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$8 -- pbuz1=pbuc1_plus_vwuz2
lda _8
clc
adc #<CHARGEN
sta chargenData
lda _8+1
adc #>CHARGEN
sta chargenData+1
//SEG106 asm { sei }
sei
//SEG107 [70] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_CHARROM
sta PROCPORT
//SEG108 [71] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
b6_from_b5:
//SEG109 [71] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuz1=vbuc1
lda #0
sta i1
//SEG110 [71] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy
//SEG111 [71] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy
jmp b6
//SEG112 [71] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
b6_from_b6:
//SEG113 [71] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy
//SEG114 [71] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy
//SEG115 [71] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy
jmp b6
//SEG116 startProcessing::@6
b6:
//SEG117 [72] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (chargenData),y
ldy #0
sta (spriteData),y
//SEG118 [73] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1
lda #3
clc
adc spriteData
sta spriteData
bcc !+
inc spriteData+1
!:
//SEG119 [74] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1
inc chargenData
bne !+
inc chargenData+1
!:
//SEG120 [75] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuz1=_inc_vbuz1
inc i1
//SEG121 [76] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp i1
bne b6_from_b6
jmp b7
//SEG122 startProcessing::@7
b7:
//SEG123 [77] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
//SEG124 asm { cli }
cli
//SEG125 [79] (word~) startProcessing::$10 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2
lda center_x
sta _10
lda #0
sta _10+1
//SEG126 [80] (word~) startProcessing::$11 ← (word~) startProcessing::$10 << (byte) 3 -- vwuz1=vwuz2_rol_3
lda _10
asl
sta _11
lda _10+1
rol
sta _11+1
asl _11
rol _11+1
asl _11
rol _11+1
//SEG127 [81] (word~) startProcessing::$12 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$11 -- vwuz1=vbuc1_plus_vwuz2
lda #BORDER_XPOS_LEFT
clc
adc _11
sta _12
lda #0
adc _11+1
sta _12+1
//SEG128 [82] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$12 << (byte) 4 -- vwuz1=vwuz2_rol_4
lda _12
asl
sta spriteX
lda _12+1
rol
sta spriteX+1
asl spriteX
rol spriteX+1
asl spriteX
rol spriteX+1
asl spriteX
rol spriteX+1
//SEG129 [83] (word~) startProcessing::$14 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2
lda center_y
sta _14
lda #0
sta _14+1
//SEG130 [84] (word~) startProcessing::$15 ← (word~) startProcessing::$14 << (byte) 3 -- vwuz1=vwuz2_rol_3
lda _14
asl
sta _15
lda _14+1
rol
sta _15+1
asl _15
rol _15+1
asl _15
rol _15+1
//SEG131 [85] (word~) startProcessing::$16 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$15 -- vwuz1=vbuc1_plus_vwuz2
lda #BORDER_YPOS_TOP
clc
adc _15
sta _16
lda #0
adc _15+1
sta _16+1
//SEG132 [86] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$16 << (byte) 4 -- vwuz1=vwuz2_rol_4
lda _16
asl
sta spriteY
lda _16+1
rol
sta spriteY+1
asl spriteY
rol spriteY+1
asl spriteY
rol spriteY+1
asl spriteY
rol spriteY+1
//SEG133 [87] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2
lax freeIdx
axs #-[SPRITE_DATA/$40]
stx spritePtr
//SEG134 [88] (byte~) startProcessing::$21 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuz1=vbuz2_rol_3
lda freeIdx
asl
asl
asl
sta _21
//SEG135 [89] (word~) startProcessing::$22 ← (word)(byte~) startProcessing::$21 -- vwuz1=_word_vbuz2
lda _21
sta _22
lda #0
sta _22+1
//SEG136 [90] (byte) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda freeIdx
asl
sta _47
//SEG137 [91] (byte) startProcessing::$48 ← (byte) startProcessing::$47 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2_plus_vbuz3
lda _47
clc
adc freeIdx
sta _48
//SEG138 [92] (byte) startProcessing::$49 ← (byte) startProcessing::$48 << (byte) 2 -- vbuz1=vbuz2_rol_2
lda _48
asl
asl
sta _49
//SEG139 [93] (byte~) startProcessing::$30 ← (byte) startProcessing::$49 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2_plus_vbuz3
lda _49
clc
adc freeIdx
sta _30
//SEG140 [94] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$30) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuz1=vwuz2
ldy _30
lda spriteX
sta PROCESSING,y
lda spriteX+1
sta PROCESSING+1,y
//SEG141 [95] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$30) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuz1=vwuz2
ldy _30
lda spriteY
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,y
lda spriteY+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,y
//SEG142 [96] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$30) ← (word~) startProcessing::$22 -- pwuc1_derefidx_vbuz1=vwuz2
ldy _30
lda _22
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,y
lda _22+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,y
//SEG143 [97] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$30) ← (byte) $3c -- pwuc1_derefidx_vbuz1=vbuc2
lda _30
ldx #$3c
tay
txa
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,y
//SEG144 [98] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$30) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuz1=vbuz2
lda freeIdx
ldy _30
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,y
//SEG145 [99] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$30) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuz1=vbuz2
lda spritePtr
ldy _30
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,y
//SEG146 [100] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30) ← (const byte) STATUS_NEW#0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #STATUS_NEW
ldy _30
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
//SEG147 [101] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$30) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuz1=pbuz2
ldy _30
lda screenPtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,y
lda screenPtr+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,y
jmp breturn
//SEG148 startProcessing::@return
breturn:
//SEG149 [102] return
rts
//SEG150 startProcessing::@8
b8:
//SEG151 [103] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuz1=vbuz2
lda freeIdx
sta freeIdx_7
//SEG152 [47] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
b1_from_b8:
//SEG153 [47] phi (byte) startProcessing::freeIdx#6 = (byte~) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy
jmp b1
//SEG154 startProcessing::@3
b3:
//SEG155 [104] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG156 [105] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp i
bne b2_from_b3
jmp b9
//SEG157 startProcessing::@9
b9:
//SEG158 [106] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuz2
lda freeIdx_6
sta freeIdx
jmp b4_from_b9
}
//SEG159 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 _9 = $6c
.label _10 = $72
.label _11 = $74
.label _13 = $6a
.label _14 = $6b
.label return_x = $2f
.label return_y = $30
.label return_dist = $31
.label x = $11
.label dist = $16
.label screen_line = $e
.label y = $10
.label return_x_1 = $14
.label return_y_1 = $15
.label return_dist_1 = $16
.label closest_dist = $12
.label closest_x = $14
.label closest_y = $15
.label _15 = $6e
.label _16 = $70
.label return_dist_5 = $16
.label return_dist_6 = $16
.label return_x_7 = $14
.label return_y_7 = $15
//SEG160 [108] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
b1_from_getCharToProcess:
//SEG161 [108] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1
lda #0
sta closest_y
//SEG162 [108] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1
lda #0
sta closest_x
//SEG163 [108] phi (word) getCharToProcess::closest_dist#8 = (const word) NOT_FOUND#0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vwuz1=vwuc1
lda #<NOT_FOUND
sta closest_dist
lda #>NOT_FOUND
sta closest_dist+1
//SEG164 [108] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1
lda #0
sta y
//SEG165 [108] phi (byte*) getCharToProcess::screen_line#4 = (const byte[$3e8]) SCREEN_COPY#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- pbuz1=pbuc1
lda #<SCREEN_COPY
sta screen_line
lda #>SCREEN_COPY
sta screen_line+1
jmp b1
//SEG166 getCharToProcess::@1
b1:
//SEG167 [109] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
b2_from_b1:
//SEG168 [109] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy
//SEG169 [109] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy
//SEG170 [109] phi (word) getCharToProcess::closest_dist#2 = (word) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy
//SEG171 [109] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuz1=vbuc1
lda #0
sta x
jmp b2
//SEG172 getCharToProcess::@2
b2:
//SEG173 [110] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1
ldy x
lda (screen_line),y
cmp #' '
beq b11
jmp b4
//SEG174 getCharToProcess::@4
b4:
//SEG175 [111] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda x
asl
sta _13
//SEG176 [112] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda y
asl
sta _14
//SEG177 [113] (word) getCharToProcess::dist#0 ← *((const word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((const word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14) -- vwuz1=pwuc1_derefidx_vbuz2_plus_pwuc2_derefidx_vbuz3
ldx _13
ldy _14
lda SQUARES_X,x
clc
adc SQUARES_Y,y
sta dist
lda SQUARES_X+1,x
adc SQUARES_Y+1,y
sta dist+1
//SEG178 [114] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vwuz1_ge_vwuz2_then_la1
lda closest_dist+1
cmp dist+1
bne !+
lda closest_dist
cmp dist
beq b12
!:
bcc b12
jmp b5
//SEG179 getCharToProcess::@5
b5:
//SEG180 [115] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuz2
lda x
sta return_x_7
//SEG181 [116] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2
lda y
sta return_y_7
//SEG182 [117] 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:
//SEG183 [117] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy
//SEG184 [117] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy
//SEG185 [117] phi (word) getCharToProcess::return_dist#1 = (word~) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy
jmp b3
//SEG186 getCharToProcess::@3
b3:
//SEG187 [118] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG188 [119] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuz1_neq_vbuc1_then_la1
lda #$28
cmp x
bne b10
jmp b6
//SEG189 getCharToProcess::@6
b6:
//SEG190 [120] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc screen_line
sta screen_line
bcc !+
inc screen_line+1
!:
//SEG191 [121] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1
inc y
//SEG192 [122] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp y
bne b9
jmp b7
//SEG193 getCharToProcess::@7
b7:
//SEG194 [123] if((word) getCharToProcess::return_dist#1==(const word) NOT_FOUND#0) goto getCharToProcess::@return -- vwuz1_eq_vwuc1_then_la1
lda return_dist_1
cmp #<NOT_FOUND
bne !+
lda return_dist_1+1
cmp #>NOT_FOUND
beq breturn
!:
jmp b8
//SEG195 getCharToProcess::@8
b8:
//SEG196 [124] (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2
lda return_y_1
sta _9
lda #0
sta _9+1
//SEG197 [125] (word) getCharToProcess::$15 ← (word~) getCharToProcess::$9 << (byte) 2 -- vwuz1=vwuz2_rol_2
lda _9
asl
sta _15
lda _9+1
rol
sta _15+1
asl _15
rol _15+1
//SEG198 [126] (word) getCharToProcess::$16 ← (word) getCharToProcess::$15 + (word~) getCharToProcess::$9 -- vwuz1=vwuz2_plus_vwuz3
lda _15
clc
adc _9
sta _16
lda _15+1
adc _9+1
sta _16+1
//SEG199 [127] (word~) getCharToProcess::$10 ← (word) getCharToProcess::$16 << (byte) 3 -- vwuz1=vwuz2_rol_3
lda _16
asl
sta _10
lda _16+1
rol
sta _10+1
asl _10
rol _10+1
asl _10
rol _10+1
//SEG200 [128] (byte*~) getCharToProcess::$11 ← (const byte[$3e8]) SCREEN_COPY#0 + (word~) getCharToProcess::$10 -- pbuz1=pbuc1_plus_vwuz2
lda _10
clc
adc #<SCREEN_COPY
sta _11
lda _10+1
adc #>SCREEN_COPY
sta _11+1
//SEG201 [129] *((byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1
// clear the found char on the screen copy
lda #' '
ldy return_x_1
sta (_11),y
jmp breturn
//SEG202 getCharToProcess::@return
breturn:
//SEG203 [130] return
rts
//SEG204 getCharToProcess::@9
b9:
//SEG205 [131] (word~) getCharToProcess::closest_dist#10 ← (word) getCharToProcess::return_dist#1 -- vwuz1=vwuz2
lda return_dist_1
sta closest_dist
lda return_dist_1+1
sta closest_dist+1
//SEG206 [108] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
b1_from_b9:
//SEG207 [108] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy
//SEG208 [108] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy
//SEG209 [108] phi (word) getCharToProcess::closest_dist#8 = (word~) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy
//SEG210 [108] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy
//SEG211 [108] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy
jmp b1
//SEG212 getCharToProcess::@10
b10:
//SEG213 [132] (word~) getCharToProcess::closest_dist#12 ← (word) getCharToProcess::return_dist#1 -- vwuz1=vwuz2
lda return_dist_1
sta closest_dist
lda return_dist_1+1
sta closest_dist+1
//SEG214 [109] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
b2_from_b10:
//SEG215 [109] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy
//SEG216 [109] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy
//SEG217 [109] phi (word) getCharToProcess::closest_dist#2 = (word~) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy
//SEG218 [109] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy
jmp b2
//SEG219 getCharToProcess::@12
b12:
//SEG220 [133] (word~) getCharToProcess::return_dist#6 ← (word) getCharToProcess::closest_dist#2 -- vwuz1=vwuz2
lda closest_dist
sta return_dist_6
lda closest_dist+1
sta return_dist_6+1
jmp b3_from_b12
//SEG221 getCharToProcess::@11
b11:
//SEG222 [134] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2 -- vwuz1=vwuz2
lda closest_dist
sta return_dist_5
lda closest_dist+1
sta return_dist_5+1
jmp b3_from_b11
}
//SEG223 setupRasterIrq
// Setup Raster IRQ
setupRasterIrq: {
.label irqRoutine = irqTop
//SEG224 asm { sei }
sei
//SEG225 [136] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
//SEG226 [137] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
//SEG227 [138] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
jmp b1
//SEG228 setupRasterIrq::@1
b1:
//SEG229 [139] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
jmp b2
//SEG230 setupRasterIrq::@2
b2:
//SEG231 [140] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2
lda #RASTER_IRQ_TOP
sta RASTER
//SEG232 [141] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
//SEG233 [142] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 -- _deref_pptc1=pprc2
// Set the IRQ routine
lda #<irqRoutine
sta HARDWARE_IRQ
lda #>irqRoutine
sta HARDWARE_IRQ+1
//SEG234 asm { cli }
cli
jmp breturn
//SEG235 setupRasterIrq::@return
breturn:
//SEG236 [144] return
rts
}
//SEG237 initSprites
// Initialize sprites
initSprites: {
.label sp = $18
.label i = $1a
//SEG238 [146] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1]
b1_from_initSprites:
//SEG239 [146] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1
lda #<SPRITE_DATA
sta sp
lda #>SPRITE_DATA
sta sp+1
jmp b1
// Clear sprite data
//SEG240 [146] phi from initSprites::@1 to initSprites::@1 [phi:initSprites::@1->initSprites::@1]
b1_from_b1:
//SEG241 [146] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@1->initSprites::@1#0] -- register_copy
jmp b1
//SEG242 initSprites::@1
b1:
//SEG243 [147] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1
lda #0
ldy #0
sta (sp),y
//SEG244 [148] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1
inc sp
bne !+
inc sp+1
!:
//SEG245 [149] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1 -- pbuz1_lt_pbuc1_then_la1
lda sp+1
cmp #>SPRITE_DATA+NUM_PROCESSING*$40
bcc b1_from_b1
bne !+
lda sp
cmp #<SPRITE_DATA+NUM_PROCESSING*$40
bcc b1_from_b1
!:
//SEG246 [150] phi from initSprites::@1 to initSprites::@2 [phi:initSprites::@1->initSprites::@2]
b2_from_b1:
//SEG247 [150] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@2#0] -- vbuz1=vbuc1
lda #0
sta i
jmp b2
// Initialize sprite registers
//SEG248 [150] phi from initSprites::@2 to initSprites::@2 [phi:initSprites::@2->initSprites::@2]
b2_from_b2:
//SEG249 [150] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@2->initSprites::@2#0] -- register_copy
jmp b2
//SEG250 initSprites::@2
b2:
//SEG251 [151] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuz1=vbuc2
lda #LIGHT_BLUE
ldy i
sta SPRITES_COLS,y
//SEG252 [152] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG253 [153] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@2 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp i
bne b2_from_b2
jmp b3
//SEG254 initSprites::@3
b3:
//SEG255 [154] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_MC
//SEG256 [155] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_EXPAND_X
//SEG257 [156] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_EXPAND_Y
jmp breturn
//SEG258 initSprites::@return
breturn:
//SEG259 [157] return
rts
}
//SEG260 initSquareTables
// initialize SQUARES table
initSquareTables: {
.label _2 = $1c
.label _4 = $1c
.label _6 = $78
.label _10 = $1e
.label _12 = $1e
.label _14 = $7d
.label _16 = $7a
.label _17 = $7f
.label x_dist = $1c
.label x = $1b
.label y_dist = $1e
.label y = $1d
//SEG261 [159] phi from initSquareTables to initSquareTables::@1 [phi:initSquareTables->initSquareTables::@1]
b1_from_initSquareTables:
//SEG262 [159] phi (byte) initSquareTables::x#2 = (byte) 0 [phi:initSquareTables->initSquareTables::@1#0] -- vbuz1=vbuc1
lda #0
sta x
jmp b1
//SEG263 [159] phi from initSquareTables::@9 to initSquareTables::@1 [phi:initSquareTables::@9->initSquareTables::@1]
b1_from_b9:
//SEG264 [159] phi (byte) initSquareTables::x#2 = (byte) initSquareTables::x#1 [phi:initSquareTables::@9->initSquareTables::@1#0] -- register_copy
jmp b1
//SEG265 initSquareTables::@1
b1:
//SEG266 [160] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2 -- vbuz1_lt_vbuc1_then_la1
lda x
cmp #$14
bcc b2
jmp b3
//SEG267 initSquareTables::@3
b3:
//SEG268 [161] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14 -- vbuz1=vbuz2_minus_vbuc1
lax x
axs #$14
stx _2
//SEG269 [162] phi from initSquareTables::@2 initSquareTables::@3 to initSquareTables::@4 [phi:initSquareTables::@2/initSquareTables::@3->initSquareTables::@4]
b4_from_b2:
b4_from_b3:
//SEG270 [162] phi (byte) initSquareTables::x_dist#0 = (byte~) initSquareTables::$4 [phi:initSquareTables::@2/initSquareTables::@3->initSquareTables::@4#0] -- register_copy
jmp b4
//SEG271 initSquareTables::@4
b4:
//SEG272 [163] (byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0 -- vbuz1=vbuz2
lda x_dist
sta mul8u.a
//SEG273 [164] (byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0 -- vbuz1=vbuz2
lda x_dist
sta mul8u.b
//SEG274 [165] call mul8u
//SEG275 [188] phi from initSquareTables::@4 to mul8u [phi:initSquareTables::@4->mul8u]
mul8u_from_b4:
//SEG276 [188] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:initSquareTables::@4->mul8u#0] -- register_copy
//SEG277 [188] phi (word) mul8u::mb#0 = (byte) mul8u::b#0 [phi:initSquareTables::@4->mul8u#1] -- vwuz1=vbuz2
lda mul8u.b
sta mul8u.mb
lda #0
sta mul8u.mb+1
jsr mul8u
//SEG278 [166] (word) mul8u::return#2 ← (word) mul8u::res#2 -- vwuz1=vwuz2
lda mul8u.res
sta mul8u.return
lda mul8u.res+1
sta mul8u.return+1
jmp b9
//SEG279 initSquareTables::@9
b9:
//SEG280 [167] (word~) initSquareTables::$6 ← (word) mul8u::return#2 -- vwuz1=vwuz2
lda mul8u.return
sta _6
lda mul8u.return+1
sta _6+1
//SEG281 [168] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda x
asl
sta _16
//SEG282 [169] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6 -- pwuc1_derefidx_vbuz1=vwuz2
ldy _16
lda _6
sta SQUARES_X,y
lda _6+1
sta SQUARES_X+1,y
//SEG283 [170] (byte) initSquareTables::x#1 ← ++ (byte) initSquareTables::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG284 [171] if((byte) initSquareTables::x#1!=(byte) $28) goto initSquareTables::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$28
cmp x
bne b1_from_b9
//SEG285 [172] phi from initSquareTables::@9 to initSquareTables::@5 [phi:initSquareTables::@9->initSquareTables::@5]
b5_from_b9:
//SEG286 [172] phi (byte) initSquareTables::y#2 = (byte) 0 [phi:initSquareTables::@9->initSquareTables::@5#0] -- vbuz1=vbuc1
lda #0
sta y
jmp b5
//SEG287 [172] phi from initSquareTables::@10 to initSquareTables::@5 [phi:initSquareTables::@10->initSquareTables::@5]
b5_from_b10:
//SEG288 [172] phi (byte) initSquareTables::y#2 = (byte) initSquareTables::y#1 [phi:initSquareTables::@10->initSquareTables::@5#0] -- register_copy
jmp b5
//SEG289 initSquareTables::@5
b5:
//SEG290 [173] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@6 -- vbuz1_lt_vbuc1_then_la1
lda y
cmp #$c
bcc b6
jmp b7
//SEG291 initSquareTables::@7
b7:
//SEG292 [174] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c -- vbuz1=vbuz2_minus_vbuc1
lax y
axs #$c
stx _10
//SEG293 [175] phi from initSquareTables::@6 initSquareTables::@7 to initSquareTables::@8 [phi:initSquareTables::@6/initSquareTables::@7->initSquareTables::@8]
b8_from_b6:
b8_from_b7:
//SEG294 [175] phi (byte) initSquareTables::y_dist#0 = (byte~) initSquareTables::$12 [phi:initSquareTables::@6/initSquareTables::@7->initSquareTables::@8#0] -- register_copy
jmp b8
//SEG295 initSquareTables::@8
b8:
//SEG296 [176] (byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0 -- vbuz1=vbuz2
lda y_dist
sta mul8u.a
//SEG297 [177] (byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0 -- vbuz1=vbuz2
lda y_dist
sta mul8u.b_1
//SEG298 [178] call mul8u
//SEG299 [188] phi from initSquareTables::@8 to mul8u [phi:initSquareTables::@8->mul8u]
mul8u_from_b8:
//SEG300 [188] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:initSquareTables::@8->mul8u#0] -- register_copy
//SEG301 [188] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:initSquareTables::@8->mul8u#1] -- vwuz1=vbuz2
lda mul8u.b_1
sta mul8u.mb
lda #0
sta mul8u.mb+1
jsr mul8u
//SEG302 [179] (word) mul8u::return#3 ← (word) mul8u::res#2 -- vwuz1=vwuz2
lda mul8u.res
sta mul8u.return_3
lda mul8u.res+1
sta mul8u.return_3+1
jmp b10
//SEG303 initSquareTables::@10
b10:
//SEG304 [180] (word~) initSquareTables::$14 ← (word) mul8u::return#3 -- vwuz1=vwuz2
lda mul8u.return_3
sta _14
lda mul8u.return_3+1
sta _14+1
//SEG305 [181] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda y
asl
sta _17
//SEG306 [182] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14 -- pwuc1_derefidx_vbuz1=vwuz2
ldy _17
lda _14
sta SQUARES_Y,y
lda _14+1
sta SQUARES_Y+1,y
//SEG307 [183] (byte) initSquareTables::y#1 ← ++ (byte) initSquareTables::y#2 -- vbuz1=_inc_vbuz1
inc y
//SEG308 [184] if((byte) initSquareTables::y#1!=(byte) $19) goto initSquareTables::@5 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp y
bne b5_from_b10
jmp breturn
//SEG309 initSquareTables::@return
breturn:
//SEG310 [185] return
rts
//SEG311 initSquareTables::@6
b6:
//SEG312 [186] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2 -- vbuz1=vbuc1_minus_vbuz2
lda #$c
sec
sbc y
sta _12
jmp b8_from_b6
//SEG313 initSquareTables::@2
b2:
//SEG314 [187] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2 -- vbuz1=vbuc1_minus_vbuz2
lda #$14
sec
sbc x
sta _4
jmp b4_from_b2
}
//SEG315 mul8u
// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
// mul8u(byte zeropage($21) a, byte zeropage($20) b)
mul8u: {
.label _1 = $80
.label mb = $24
.label a = $21
.label res = $22
.label b = $20
.label return = $76
.label b_1 = $1f
.label return_3 = $7b
//SEG316 [189] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1]
b1_from_mul8u:
//SEG317 [189] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy
//SEG318 [189] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1
lda #0
sta res
lda #0
sta res+1
//SEG319 [189] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy
jmp b1
//SEG320 mul8u::@1
b1:
//SEG321 [190] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuz1_neq_0_then_la1
lda a
cmp #0
bne b2
jmp breturn
//SEG322 mul8u::@return
breturn:
//SEG323 [191] return
rts
//SEG324 mul8u::@2
b2:
//SEG325 [192] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1
lda #1
and a
sta _1
//SEG326 [193] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuz1_eq_0_then_la1
lda _1
cmp #0
beq b3_from_b2
jmp b4
//SEG327 mul8u::@4
b4:
//SEG328 [194] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2
lda res
clc
adc mb
sta res
lda res+1
adc mb+1
sta res+1
//SEG329 [195] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3]
b3_from_b2:
b3_from_b4:
//SEG330 [195] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy
jmp b3
//SEG331 mul8u::@3
b3:
//SEG332 [196] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuz1=vbuz1_ror_1
lsr a
//SEG333 [197] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1
asl mb
rol mb+1
//SEG334 [189] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1]
b1_from_b3:
//SEG335 [189] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy
//SEG336 [189] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy
//SEG337 [189] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy
jmp b1
}
//SEG338 irqBottom
// Raster Interrupt at the middle of the screen
irqBottom: {
.label i = $26
//SEG339 entry interrupt(HARDWARE_ALL)
sta rega+1
stx regx+1
sty regy+1
//SEG340 [199] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
b1_from_irqBottom:
//SEG341 [199] phi (byte) irqBottom::i#2 = (byte) 0 [phi:irqBottom->irqBottom::@1#0] -- vbuz1=vbuc1
lda #0
sta i
jmp b1
//SEG342 [199] phi from irqBottom::@1 to irqBottom::@1 [phi:irqBottom::@1->irqBottom::@1]
b1_from_b1:
//SEG343 [199] phi (byte) irqBottom::i#2 = (byte) irqBottom::i#1 [phi:irqBottom::@1->irqBottom::@1#0] -- register_copy
jmp b1
//SEG344 irqBottom::@1
b1:
//SEG345 [200] (byte) irqBottom::i#1 ← ++ (byte) irqBottom::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG346 [201] if((byte) irqBottom::i#1!=(byte) 5) goto irqBottom::@1 -- vbuz1_neq_vbuc1_then_la1
lda #5
cmp i
bne b1_from_b1
//SEG347 [202] phi from irqBottom::@1 to irqBottom::@2 [phi:irqBottom::@1->irqBottom::@2]
b2_from_b1:
jmp b2
//SEG348 irqBottom::@2
b2:
//SEG349 [203] call processChars
//SEG350 [208] phi from irqBottom::@2 to processChars [phi:irqBottom::@2->processChars]
processChars_from_b2:
jsr processChars
jmp b3
//SEG351 irqBottom::@3
b3:
//SEG352 [204] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2
// Trigger IRQ at the top of the screen
lda #RASTER_IRQ_TOP
sta RASTER
//SEG353 [205] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2
lda #<irqTop
sta HARDWARE_IRQ
lda #>irqTop
sta HARDWARE_IRQ+1
//SEG354 [206] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
jmp breturn
//SEG355 irqBottom::@return
breturn:
//SEG356 [207] return - exit interrupt(HARDWARE_ALL)
rega:
lda #00
regx:
ldx #00
regy:
ldy #00
rti
}
//SEG357 processChars
// Process any chars in the PROCESSING array
processChars: {
.label _1 = $99
.label _12 = $8a
.label _13 = $8b
.label _15 = $8d
.label _16 = $8e
.label _18 = $8c
.label _26 = $91
.label _27 = $93
.label _31 = $96
.label _34 = $9a
.label _36 = $84
.label _37 = $95
.label _38 = $98
.label processing = $85
.label bitmask = $87
.label i = $27
.label xpos = $88
.label ypos = $90
.label xchar = $94
.label ychar = $97
.label numActive = $28
.label _64 = $81
.label _65 = $82
.label _66 = $83
//SEG358 [209] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
b1_from_processChars:
//SEG359 [209] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1
lda #0
sta numActive
//SEG360 [209] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1
lda #0
sta i
jmp b1
//SEG361 [209] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
b1_from_b2:
//SEG362 [209] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy
//SEG363 [209] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy
jmp b1
//SEG364 processChars::@1
b1:
//SEG365 [210] (byte) processChars::$64 ← (byte) processChars::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda i
asl
sta _64
//SEG366 [211] (byte) processChars::$65 ← (byte) processChars::$64 + (byte) processChars::i#10 -- vbuz1=vbuz2_plus_vbuz3
lda _64
clc
adc i
sta _65
//SEG367 [212] (byte) processChars::$66 ← (byte) processChars::$65 << (byte) 2 -- vbuz1=vbuz2_rol_2
lda _65
asl
asl
sta _66
//SEG368 [213] (byte~) processChars::$36 ← (byte) processChars::$66 + (byte) processChars::i#10 -- vbuz1=vbuz2_plus_vbuz3
lda _66
clc
adc i
sta _36
//SEG369 [214] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$36 -- pssz1=pssc1_plus_vbuz2
lda _36
clc
adc #<PROCESSING
sta processing
lda #>PROCESSING
adc #0
sta processing+1
//SEG370 [215] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
lda (processing),y
tax
lda #1
cpx #0
beq !e+
!:
asl
dex
bne !-
!e:
sta bitmask
//SEG371 [216] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
lda (processing),y
cmp #STATUS_FREE
beq b2_from_b1
jmp b10
//SEG372 processChars::@10
b10:
//SEG373 [217] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) 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
//SEG374 processChars::@11
b11:
//SEG375 [218] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_pptz1_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
txa
!:
sta $ffff
//SEG376 [219] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
// Enable the sprite
lda SPRITES_ENABLE
ora bitmask
sta SPRITES_ENABLE
//SEG377 [220] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- 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+SPRITE_PTRS,y
//SEG378 [221] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0 -- pbuz1_derefidx_vbuc1=vbuc2
// Set status
lda #STATUS_PROCESSING
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
jmp b3
//SEG379 processChars::@3
b3:
//SEG380 [222] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4
ldy #0
lda (processing),y
sta xpos
iny
lda (processing),y
sta xpos+1
lsr xpos+1
ror xpos
lsr xpos+1
ror xpos
lsr xpos+1
ror xpos
lsr xpos+1
ror xpos
//SEG381 [223] (byte~) processChars::$12 ← > (word) processChars::xpos#0 -- vbuz1=_hi_vwuz2
lda xpos+1
sta _12
//SEG382 [224] if((byte) 0!=(byte~) processChars::$12) goto processChars::@4 -- vbuc1_neq_vbuz1_then_la1
// Set sprite position
lda #0
cmp _12
bne b4
jmp b8
//SEG383 processChars::@8
b8:
//SEG384 [225] (byte~) processChars::$13 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuz1=vbuc1_bxor_vbuz2
lda #$ff
eor bitmask
sta _13
//SEG385 [226] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$13 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1
lda SPRITES_XMSB
and _13
sta SPRITES_XMSB
jmp b5
//SEG386 processChars::@5
b5:
//SEG387 [227] (byte~) processChars::$18 ← (byte) processChars::i#10 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda i
asl
sta _18
//SEG388 [228] (byte~) processChars::$15 ← (byte)(word) processChars::xpos#0 -- vbuz1=_byte_vwuz2
lda xpos
sta _15
//SEG389 [229] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$18) ← (byte~) processChars::$15 -- pbuc1_derefidx_vbuz1=vbuz2
lda _15
ldy _18
sta SPRITES_XPOS,y
//SEG390 [230] (word~) processChars::$16 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
lda (processing),y
sta _16
iny
lda (processing),y
sta _16+1
lsr _16+1
ror _16
lsr _16+1
ror _16
lsr _16+1
ror _16
lsr _16+1
ror _16
//SEG391 [231] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$16 -- vbuz1=_byte_vwuz2
lda _16
sta ypos
//SEG392 [232] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$18) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuz1=vbuz2
lda ypos
ldy _18
sta SPRITES_YPOS,y
//SEG393 [233] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) 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 b15
//SEG394 processChars::@15
b15:
//SEG395 [234] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) 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 b14
//SEG396 processChars::@14
b14:
//SEG397 [235] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) 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 b13
//SEG398 processChars::@13
b13:
//SEG399 [236] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) 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
//SEG400 processChars::@9
b9:
//SEG401 [237] (word~) processChars::$26 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz2_ror_3
lda xpos+1
lsr
sta _26+1
lda xpos
ror
sta _26
lsr _26+1
ror _26
lsr _26+1
ror _26
//SEG402 [238] (byte~) processChars::$27 ← (byte)(word~) processChars::$26 -- vbuz1=_byte_vwuz2
lda _26
sta _27
//SEG403 [239] (byte) processChars::xchar#0 ← (byte~) processChars::$27 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8 -- vbuz1=vbuz2_minus_vbuc1
lax _27
axs #BORDER_XPOS_LEFT/8
stx xchar
//SEG404 [240] (byte~) processChars::$37 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda xchar
asl
sta _37
//SEG405 [241] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN#0 + (byte~) processChars::$37) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2
ldx _37
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
clc
lda (processing),y
adc VXSIN,x
sta (processing),y
iny
lda (processing),y
adc VXSIN+1,x
sta (processing),y
//SEG406 [242] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
sty $ff
clc
lda (processing),y
ldy #0
adc (processing),y
sta (processing),y
ldy $ff
iny
lda (processing),y
ldy #1
adc (processing),y
sta (processing),y
//SEG407 [243] (byte~) processChars::$31 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuz1=vbuz2_ror_3
lda ypos
lsr
lsr
lsr
sta _31
//SEG408 [244] (byte) processChars::ychar#0 ← (byte~) processChars::$31 - (const byte) BORDER_YPOS_TOP#0/(byte) 8 -- vbuz1=vbuz2_minus_vbuc1
lax _31
axs #BORDER_YPOS_TOP/8
stx ychar
//SEG409 [245] (byte~) processChars::$38 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuz1=vbuz2_rol_1
lda ychar
asl
sta _38
//SEG410 [246] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN#0 + (byte~) processChars::$38) -- pwuz1_derefidx_vbuc1=pwuz1_derefidx_vbuc1_plus_pwuc2_derefidx_vbuz2
ldx _38
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VY
clc
lda (processing),y
adc VYSIN,x
sta (processing),y
iny
lda (processing),y
adc VYSIN+1,x
sta (processing),y
//SEG411 [247] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- 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
//SEG412 processChars::@7
b7:
//SEG413 [248] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1
inc numActive
//SEG414 [249] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
b2_from_b1:
b2_from_b7:
//SEG415 [249] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy
jmp b2
//SEG416 processChars::@2
b2:
//SEG417 [250] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1
inc i
//SEG418 [251] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp i
bne b1_from_b2
jmp b12
//SEG419 processChars::@12
b12:
//SEG420 [252] (byte~) processChars::$1 ← (byte) '0' + (byte) processChars::numActive#3 -- vbuz1=vbuc1_plus_vbuz2
lax numActive
axs #-['0']
stx _1
//SEG421 [253] *((const byte*) SCREEN#0+(word) $3e7) ← (byte~) processChars::$1 -- _deref_pbuc1=vbuz1
lda _1
sta SCREEN+$3e7
jmp breturn
//SEG422 processChars::@return
breturn:
//SEG423 [254] return
rts
//SEG424 processChars::@6
b6:
//SEG425 [255] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0 -- pbuz1_derefidx_vbuc1=vbuc2
// Set status to FREE
lda #STATUS_FREE
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
//SEG426 [256] (byte~) processChars::$34 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuz1=vbuc1_bxor_vbuz2
lda #$ff
eor bitmask
sta _34
//SEG427 [257] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$34 -- _deref_pbuc1=_deref_pbuc1_band_vbuz1
// Disable the sprite
lda SPRITES_ENABLE
and _34
sta SPRITES_ENABLE
jmp b7
//SEG428 processChars::@4
b4:
//SEG429 [258] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
lda SPRITES_XMSB
ora bitmask
sta SPRITES_XMSB
jmp b5
}
//SEG430 irqTop
// Raster Interrupt at the top of the screen
irqTop: {
.label i = $29
.label i1 = $2a
//SEG431 entry interrupt(HARDWARE_ALL)
sta rega+1
stx regx+1
sty regy+1
//SEG432 [260] phi from irqTop to irqTop::@1 [phi:irqTop->irqTop::@1]
b1_from_irqTop:
//SEG433 [260] phi (byte) irqTop::i#2 = (byte) 0 [phi:irqTop->irqTop::@1#0] -- vbuz1=vbuc1
lda #0
sta i
jmp b1
//SEG434 [260] phi from irqTop::@1 to irqTop::@1 [phi:irqTop::@1->irqTop::@1]
b1_from_b1:
//SEG435 [260] phi (byte) irqTop::i#2 = (byte) irqTop::i#1 [phi:irqTop::@1->irqTop::@1#0] -- register_copy
jmp b1
//SEG436 irqTop::@1
b1:
//SEG437 [261] (byte) irqTop::i#1 ← ++ (byte) irqTop::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG438 [262] if((byte) irqTop::i#1!=(byte) 5) goto irqTop::@1 -- vbuz1_neq_vbuc1_then_la1
lda #5
cmp i
bne b1_from_b1
//SEG439 [263] phi from irqTop::@1 to irqTop::@2 [phi:irqTop::@1->irqTop::@2]
b2_from_b1:
//SEG440 [263] phi (byte) irqTop::i1#2 = (byte) 0 [phi:irqTop::@1->irqTop::@2#0] -- vbuz1=vbuc1
lda #0
sta i1
jmp b2
//*BORDERCOL = WHITE;
//*BGCOL = WHITE;
//SEG441 [263] phi from irqTop::@2 to irqTop::@2 [phi:irqTop::@2->irqTop::@2]
b2_from_b2:
//SEG442 [263] phi (byte) irqTop::i1#2 = (byte) irqTop::i1#1 [phi:irqTop::@2->irqTop::@2#0] -- register_copy
jmp b2
//SEG443 irqTop::@2
b2:
//SEG444 [264] (byte) irqTop::i1#1 ← ++ (byte) irqTop::i1#2 -- vbuz1=_inc_vbuz1
inc i1
//SEG445 [265] if((byte) irqTop::i1#1!=(byte) 8) goto irqTop::@2 -- vbuz1_neq_vbuc1_then_la1
lda #8
cmp i1
bne b2_from_b2
jmp b3
//SEG446 irqTop::@3
b3:
//SEG447 [266] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 -- _deref_pbuc1=vbuc2
// Trigger IRQ at the middle of the screen
lda #RASTER_IRQ_MIDDLE
sta RASTER
//SEG448 [267] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2
lda #<irqBottom
sta HARDWARE_IRQ
lda #>irqBottom
sta HARDWARE_IRQ+1
//SEG449 [268] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
jmp breturn
//SEG450 irqTop::@return
breturn:
//SEG451 [269] return - exit interrupt(HARDWARE_ALL)
rega:
lda #00
regx:
ldx #00
regy:
ldy #00
rti
}
// Copy of the screen used for finding chars to process
SCREEN_COPY: .fill $3e8, 0
// SQUARES_X[i] = (i-20)*(i-20)
SQUARES_X: .fill 2*$28, 0
// SQUARES_Y[i] = (i-12)*(i-12)
SQUARES_Y: .fill 2*$19, 0
// Sprites currently being processed in the interrupt
PROCESSING: .fill $d*NUM_PROCESSING, 0
.pc = VXSIN "VXSIN"
.for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
.pc = VYSIN "VYSIN"
.for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [9] *((byte*) main::dst#2) ← *((byte*) main::src#2) [ main::src#2 main::dst#2 ] ( main:4 [ main::src#2 main::dst#2 ] ) always clobbers reg byte a reg byte y
Statement [12] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@1 [ main::src#1 main::dst#1 ] ( main:4 [ main::src#1 main::dst#1 ] ) always clobbers reg byte a
Statement [14] (byte) main::$25 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$25 ] ( main:4 [ main::i#2 main::$25 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Statement [15] (byte) main::$26 ← (byte) main::$25 + (byte) main::i#2 [ main::i#2 main::$26 ] ( main:4 [ main::i#2 main::$26 ] ) always clobbers reg byte a
Statement [16] (byte) main::$27 ← (byte) main::$26 << (byte) 2 [ main::i#2 main::$27 ] ( main:4 [ main::i#2 main::$27 ] ) always clobbers reg byte a
Statement [17] (byte~) main::$16 ← (byte) main::$27 + (byte) main::i#2 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [18] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:46 [ main::$16 ]
Statement [19] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [22] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [23] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE#0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [25] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [ main::i#2 ] ( main:4 [ main::i#2 ] ) always clobbers reg byte a
Statement [36] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1 [ getCharToProcess::return_x#0 getCharToProcess::return_y#0 getCharToProcess::return_dist#0 ] ( main:4 [ getCharToProcess::return_x#0 getCharToProcess::return_y#0 getCharToProcess::return_dist#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:47 [ getCharToProcess::return_x#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:48 [ getCharToProcess::return_y#0 ]
Statement [39] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0 [ main::center_x#0 main::center_y#0 main::center_dist#0 ] ( main:4 [ main::center_x#0 main::center_y#0 main::center_dist#0 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:51 [ main::center_x#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:52 [ main::center_y#0 ]
Statement [40] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@5 [ main::center_x#0 main::center_y#0 ] ( main:4 [ main::center_x#0 main::center_y#0 ] ) always clobbers reg byte a
Statement [41] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [ ] ( main:4 [ ] ) always clobbers reg byte a
Statement [49] (byte) startProcessing::$40 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:55 [ startProcessing::center_x#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:56 [ startProcessing::center_y#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Statement [50] (byte) startProcessing::$41 ← (byte) startProcessing::$40 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ) always clobbers reg byte a
Statement [51] (byte) startProcessing::$42 ← (byte) startProcessing::$41 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ) always clobbers reg byte a
Statement [52] (byte~) startProcessing::$29 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] ) always clobbers reg byte a
Statement [53] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$29)!=(const byte) STATUS_FREE#0) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a
Statement [56] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a
Statement [57] (word) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ) always clobbers reg byte a
Statement [58] (word) startProcessing::$45 ← (word) startProcessing::$44 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ) always clobbers reg byte a
Statement [59] (word~) startProcessing::$1 ← (word) startProcessing::$45 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a
Statement [60] (byte*~) startProcessing::$2 ← (const byte*) SCREEN#0 + (word~) startProcessing::$1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 ] ) always clobbers reg byte a
Statement [61] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 ] ) always clobbers reg byte a
Statement [62] (word~) startProcessing::$4 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::$4 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::$4 ] ) always clobbers reg byte a
Statement [63] (word~) startProcessing::$5 ← (word~) startProcessing::$4 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a
Statement [64] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$5 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a
Statement [65] (byte) startProcessing::ch#0 ← *((byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a
Statement [66] (word~) startProcessing::$7 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$7 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$7 ] ) always clobbers reg byte a
Statement [67] (word~) startProcessing::$8 ← (word~) startProcessing::$7 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a
Statement [68] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$8 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a
Statement [70] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a
Statement [72] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:55 [ startProcessing::center_x#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:56 [ startProcessing::center_y#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Statement [73] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a
Statement [77] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 ] ) always clobbers reg byte a
Statement [79] (word~) startProcessing::$10 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$10 ] ( main:4::startProcessing:45 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$10 ] ) always clobbers reg byte a
Statement [80] (word~) startProcessing::$11 ← (word~) startProcessing::$10 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:4::startProcessing:45 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a
Statement [81] (word~) startProcessing::$12 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$11 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:4::startProcessing:45 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a
Statement [82] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$12 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:4::startProcessing:45 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a
Statement [83] (word~) startProcessing::$14 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$14 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$14 ] ) always clobbers reg byte a
Statement [84] (word~) startProcessing::$15 ← (word~) startProcessing::$14 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a
Statement [85] (word~) startProcessing::$16 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$15 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a
Statement [86] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$16 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a
Statement [87] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a
Statement [88] (byte~) startProcessing::$21 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:98 [ startProcessing::spritePtr#0 ]
Statement [89] (word~) startProcessing::$22 ← (word)(byte~) startProcessing::$21 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ) always clobbers reg byte a
Statement [90] (byte) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$47 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$47 ] ) always clobbers reg byte a
Statement [91] (byte) startProcessing::$48 ← (byte) startProcessing::$47 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$48 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$48 ] ) always clobbers reg byte a
Statement [92] (byte) startProcessing::$49 ← (byte) startProcessing::$48 << (byte) 2 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$49 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$49 ] ) always clobbers reg byte a
Statement [93] (byte~) startProcessing::$30 ← (byte) startProcessing::$49 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ) always clobbers reg byte a
Statement [94] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$30) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:105 [ startProcessing::$30 ]
Statement [95] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$30) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ) always clobbers reg byte a
Statement [96] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$30) ← (word~) startProcessing::$22 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ) always clobbers reg byte a
Statement [97] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$30) ← (byte) $3c [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ) always clobbers reg byte a
Statement [98] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$30) ← (byte) startProcessing::freeIdx#2 [ startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ) always clobbers reg byte a
Statement [99] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$30) ← (byte) startProcessing::spritePtr#0 [ startProcessing::screenPtr#0 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::screenPtr#0 startProcessing::$30 ] ) always clobbers reg byte a
Statement [100] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30) ← (const byte) STATUS_NEW#0 [ startProcessing::screenPtr#0 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::screenPtr#0 startProcessing::$30 ] ) always clobbers reg byte a
Statement [101] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$30) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:4::startProcessing:45 [ ] ) always clobbers reg byte a
Statement [110] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:16 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:17 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ 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 ZP_BYTE:21 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Statement [111] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 << (byte) 1 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::$13 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::$13 ] ) always clobbers reg byte a
Statement [112] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 << (byte) 1 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::$13 getCharToProcess::$14 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::$13 getCharToProcess::$14 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:106 [ getCharToProcess::$13 ]
Statement [113] (word) getCharToProcess::dist#0 ← *((const word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((const word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14) [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a
Statement [114] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a
Statement [120] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a
Statement [123] if((word) getCharToProcess::return_dist#1==(const word) NOT_FOUND#0) goto getCharToProcess::@return [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a
Statement [124] (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::return_y#1 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a
Statement [125] (word) getCharToProcess::$15 ← (word~) getCharToProcess::$9 << (byte) 2 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 getCharToProcess::$15 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 getCharToProcess::$15 ] ) always clobbers reg byte a
Statement [126] (word) getCharToProcess::$16 ← (word) getCharToProcess::$15 + (word~) getCharToProcess::$9 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$16 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$16 ] ) always clobbers reg byte a
Statement [127] (word~) getCharToProcess::$10 ← (word) getCharToProcess::$16 << (byte) 3 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a
Statement [128] (byte*~) getCharToProcess::$11 ← (const byte[$3e8]) SCREEN_COPY#0 + (word~) getCharToProcess::$10 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 ] ) always clobbers reg byte a
Statement [129] *((byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a
Statement [131] (word~) getCharToProcess::closest_dist#10 ← (word) getCharToProcess::return_dist#1 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::screen_line#1 getCharToProcess::y#1 getCharToProcess::closest_dist#10 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::screen_line#1 getCharToProcess::y#1 getCharToProcess::closest_dist#10 ] ) always clobbers reg byte a
Statement [132] (word~) getCharToProcess::closest_dist#12 ← (word) getCharToProcess::return_dist#1 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#1 getCharToProcess::closest_dist#12 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#1 getCharToProcess::closest_dist#12 ] ) always clobbers reg byte a
Statement [133] (word~) getCharToProcess::return_dist#6 ← (word) getCharToProcess::closest_dist#2 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::return_dist#6 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::return_dist#6 ] ) always clobbers reg byte a
Statement [134] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::return_dist#5 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::return_dist#5 ] ) always clobbers reg byte a
Statement [136] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [137] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [138] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [139] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [140] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [141] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [142] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [147] *((byte*) initSprites::sp#2) ← (byte) 0 [ initSprites::sp#2 ] ( main:4::initSprites:29 [ initSprites::sp#2 ] ) always clobbers reg byte a reg byte y
Statement [149] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1 [ initSprites::sp#1 ] ( main:4::initSprites:29 [ initSprites::sp#1 ] ) always clobbers reg byte a
Statement [151] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 [ initSprites::i#2 ] ( main:4::initSprites:29 [ initSprites::i#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ]
Statement [154] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:4::initSprites:29 [ ] ) always clobbers reg byte a
Statement [155] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 [ ] ( main:4::initSprites:29 [ ] ) always clobbers reg byte a
Statement [156] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [ ] ( main:4::initSprites:29 [ ] ) always clobbers reg byte a
Statement [166] (word) mul8u::return#2 ← (word) mul8u::res#2 [ initSquareTables::x#2 mul8u::return#2 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 mul8u::return#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:27 [ initSquareTables::x#2 initSquareTables::x#1 ]
Statement [167] (word~) initSquareTables::$6 ← (word) mul8u::return#2 [ initSquareTables::x#2 initSquareTables::$6 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 initSquareTables::$6 ] ) always clobbers reg byte a
Statement [168] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1 [ initSquareTables::x#2 initSquareTables::$6 initSquareTables::$16 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 initSquareTables::$6 initSquareTables::$16 ] ) always clobbers reg byte a
Statement [169] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6 [ initSquareTables::x#2 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 ] ) always clobbers reg byte a
Statement [179] (word) mul8u::return#3 ← (word) mul8u::res#2 [ initSquareTables::y#2 mul8u::return#3 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 mul8u::return#3 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:29 [ initSquareTables::y#2 initSquareTables::y#1 ]
Statement [180] (word~) initSquareTables::$14 ← (word) mul8u::return#3 [ initSquareTables::y#2 initSquareTables::$14 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 initSquareTables::$14 ] ) always clobbers reg byte a
Statement [181] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1 [ initSquareTables::y#2 initSquareTables::$14 initSquareTables::$17 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 initSquareTables::$14 initSquareTables::$17 ] ) always clobbers reg byte a
Statement [182] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14 [ initSquareTables::y#2 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 ] ) always clobbers reg byte a
Statement [186] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2 [ initSquareTables::y#2 initSquareTables::$12 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 initSquareTables::$12 ] ) always clobbers reg byte a
Statement [187] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2 [ initSquareTables::x#2 initSquareTables::$4 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 initSquareTables::$4 ] ) always clobbers reg byte a
Statement [194] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:4::initSquareTables:7::mul8u:165 [ initSquareTables::x#2 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:4::initSquareTables:7::mul8u:178 [ initSquareTables::y#2 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:33 [ mul8u::a#3 mul8u::a#6 mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
Statement [204] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [205] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [ ] ( [ ] ) always clobbers reg byte a
Statement [206] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [207] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement [210] (byte) processChars::$64 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:39 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:40 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Statement [211] (byte) processChars::$65 ← (byte) processChars::$64 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ) always clobbers reg byte a
Statement [212] (byte) processChars::$66 ← (byte) processChars::$65 << (byte) 2 [ processChars::i#10 processChars::numActive#10 processChars::$66 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::$66 ] ) always clobbers reg byte a
Statement [213] (byte~) processChars::$36 ← (byte) processChars::$66 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$36 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::$36 ] ) always clobbers reg byte a
Statement [214] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$36 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a
Statement [215] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 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 ZP_BYTE:39 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:40 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Statement [216] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 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 ZP_BYTE:135 [ processChars::bitmask#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:135 [ processChars::bitmask#0 ]
Statement [217] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) goto processChars::@3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y
Statement [218] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 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 ZP_BYTE:39 [ processChars::i#10 processChars::i#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:40 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Removing always clobbered register reg byte x as potential for zp ZP_BYTE:135 [ processChars::bitmask#0 ]
Statement [219] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a
Statement [220] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y
Statement [221] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y
Statement [222] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a reg byte y
Statement [223] (byte~) processChars::$12 ← > (word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] ) always clobbers reg byte a
Statement [225] (byte~) processChars::$13 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$13 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$13 ] ) always clobbers reg byte a
Statement [226] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$13 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a
Statement [227] (byte~) processChars::$18 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 ] ) always clobbers reg byte a
Statement [228] (byte~) processChars::$15 ← (byte)(word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::$15 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::$15 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:140 [ processChars::$18 ]
Statement [230] (word~) processChars::$16 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::$16 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::$16 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:140 [ processChars::$18 ]
Statement [231] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$16 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::ypos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::ypos#0 ] ) always clobbers reg byte a
Statement [233] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:203 [ 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 ZP_BYTE:144 [ processChars::ypos#0 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:144 [ processChars::ypos#0 ]
Statement [234] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:203 [ 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 [235] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:203 [ 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 [236] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:203 [ 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 [237] (word~) processChars::$26 ← (word) processChars::xpos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$26 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$26 ] ) always clobbers reg byte a
Statement [238] (byte~) processChars::$27 ← (byte)(word~) processChars::$26 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$27 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$27 ] ) always clobbers reg byte a
Statement [240] (byte~) processChars::$37 ← (byte) processChars::xchar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$37 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$37 ] ) always clobbers reg byte a
Statement [241] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN#0 + (byte~) processChars::$37) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y
Statement [242] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y
Statement [243] (byte~) processChars::$31 ← (byte) processChars::ypos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$31 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$31 ] ) always clobbers reg byte a
Statement [245] (byte~) processChars::$38 ← (byte) processChars::ychar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$38 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$38 ] ) always clobbers reg byte a
Statement [246] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN#0 + (byte~) processChars::$38) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a reg byte y
Statement [247] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) [ processChars::i#10 processChars::numActive#10 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a reg byte y
Statement [251] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:203 [ processChars::i#1 processChars::numActive#3 ] ) always clobbers reg byte a
Statement [252] (byte~) processChars::$1 ← (byte) '0' + (byte) processChars::numActive#3 [ processChars::$1 ] ( processChars:203 [ processChars::$1 ] ) always clobbers reg byte a
Statement [255] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y
Statement [256] (byte~) processChars::$34 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$34 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::$34 ] ) always clobbers reg byte a
Statement [257] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$34 [ processChars::i#10 processChars::numActive#10 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a
Statement [258] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a
Statement [266] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [267] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] ( [ ] ) always clobbers reg byte a
Statement [268] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [269] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement [9] *((byte*) main::dst#2) ← *((byte*) main::src#2) [ main::src#2 main::dst#2 ] ( main:4 [ main::src#2 main::dst#2 ] ) always clobbers reg byte a reg byte y
Statement [12] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@1 [ main::src#1 main::dst#1 ] ( main:4 [ main::src#1 main::dst#1 ] ) always clobbers reg byte a
Statement [14] (byte) main::$25 ← (byte) main::i#2 << (byte) 1 [ main::i#2 main::$25 ] ( main:4 [ main::i#2 main::$25 ] ) always clobbers reg byte a
Statement [15] (byte) main::$26 ← (byte) main::$25 + (byte) main::i#2 [ main::i#2 main::$26 ] ( main:4 [ main::i#2 main::$26 ] ) always clobbers reg byte a
Statement [16] (byte) main::$27 ← (byte) main::$26 << (byte) 2 [ main::i#2 main::$27 ] ( main:4 [ main::i#2 main::$27 ] ) always clobbers reg byte a
Statement [17] (byte~) main::$16 ← (byte) main::$27 + (byte) main::i#2 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [18] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [19] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [22] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [23] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE#0 [ main::i#2 main::$16 ] ( main:4 [ main::i#2 main::$16 ] ) always clobbers reg byte a
Statement [25] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 [ main::i#2 ] ( main:4 [ main::i#2 ] ) always clobbers reg byte a
Statement [36] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1 [ getCharToProcess::return_x#0 getCharToProcess::return_y#0 getCharToProcess::return_dist#0 ] ( main:4 [ getCharToProcess::return_x#0 getCharToProcess::return_y#0 getCharToProcess::return_dist#0 ] ) always clobbers reg byte a
Statement [39] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0 [ main::center_x#0 main::center_y#0 main::center_dist#0 ] ( main:4 [ main::center_x#0 main::center_y#0 main::center_dist#0 ] ) always clobbers reg byte a
Statement [40] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@5 [ main::center_x#0 main::center_y#0 ] ( main:4 [ main::center_x#0 main::center_y#0 ] ) always clobbers reg byte a
Statement [41] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' [ ] ( main:4 [ ] ) always clobbers reg byte a
Statement [49] (byte) startProcessing::$40 ← (byte) startProcessing::i#2 << (byte) 1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$40 ] ) always clobbers reg byte a
Statement [50] (byte) startProcessing::$41 ← (byte) startProcessing::$40 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$41 ] ) always clobbers reg byte a
Statement [51] (byte) startProcessing::$42 ← (byte) startProcessing::$41 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$42 ] ) always clobbers reg byte a
Statement [52] (byte~) startProcessing::$29 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 startProcessing::$29 ] ) always clobbers reg byte a
Statement [53] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$29)!=(const byte) STATUS_FREE#0) goto startProcessing::@3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#6 startProcessing::i#2 ] ) always clobbers reg byte a
Statement [56] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 ] ) always clobbers reg byte a
Statement [57] (word) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$0 startProcessing::$44 ] ) always clobbers reg byte a
Statement [58] (word) startProcessing::$45 ← (word) startProcessing::$44 + (word~) startProcessing::$0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$45 ] ) always clobbers reg byte a
Statement [59] (word~) startProcessing::$1 ← (word) startProcessing::$45 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$1 ] ) always clobbers reg byte a
Statement [60] (byte*~) startProcessing::$2 ← (const byte*) SCREEN#0 + (word~) startProcessing::$1 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 ] ) always clobbers reg byte a
Statement [61] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 ] ) always clobbers reg byte a
Statement [62] (word~) startProcessing::$4 ← (word)(byte) startProcessing::freeIdx#2 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::$4 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::$4 ] ) always clobbers reg byte a
Statement [63] (word~) startProcessing::$5 ← (word~) startProcessing::$4 << (byte) 6 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::$5 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::$5 ] ) always clobbers reg byte a
Statement [64] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$5 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::$2 startProcessing::screenPtr#0 startProcessing::spriteData#0 ] ) always clobbers reg byte a
Statement [65] (byte) startProcessing::ch#0 ← *((byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::ch#0 ] ) always clobbers reg byte a reg byte y
Statement [66] (word~) startProcessing::$7 ← (word)(byte) startProcessing::ch#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$7 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$7 ] ) always clobbers reg byte a
Statement [67] (word~) startProcessing::$8 ← (word~) startProcessing::$7 << (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::$8 ] ) always clobbers reg byte a
Statement [68] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$8 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a
Statement [70] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteData#0 startProcessing::chargenData#0 ] ) always clobbers reg byte a
Statement [72] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::spriteData#2 startProcessing::i1#2 ] ) always clobbers reg byte a reg byte y
Statement [73] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::chargenData#2 startProcessing::i1#2 startProcessing::spriteData#1 ] ) always clobbers reg byte a
Statement [77] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 ] ( main:4::startProcessing:45 [ startProcessing::center_x#0 startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 ] ) always clobbers reg byte a
Statement [79] (word~) startProcessing::$10 ← (word)(byte) startProcessing::center_x#0 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$10 ] ( main:4::startProcessing:45 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$10 ] ) always clobbers reg byte a
Statement [80] (word~) startProcessing::$11 ← (word~) startProcessing::$10 << (byte) 3 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$11 ] ( main:4::startProcessing:45 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$11 ] ) always clobbers reg byte a
Statement [81] (word~) startProcessing::$12 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$11 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$12 ] ( main:4::startProcessing:45 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::$12 ] ) always clobbers reg byte a
Statement [82] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$12 << (byte) 4 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ( main:4::startProcessing:45 [ startProcessing::center_y#0 startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 ] ) always clobbers reg byte a
Statement [83] (word~) startProcessing::$14 ← (word)(byte) startProcessing::center_y#0 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$14 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$14 ] ) always clobbers reg byte a
Statement [84] (word~) startProcessing::$15 ← (word~) startProcessing::$14 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$15 ] ) always clobbers reg byte a
Statement [85] (word~) startProcessing::$16 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$15 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::$16 ] ) always clobbers reg byte a
Statement [86] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$16 << (byte) 4 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 ] ) always clobbers reg byte a
Statement [87] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 ] ) always clobbers reg byte a
Statement [88] (byte~) startProcessing::$21 ← (byte) startProcessing::freeIdx#2 << (byte) 3 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$21 ] ) always clobbers reg byte a
Statement [89] (word~) startProcessing::$22 ← (word)(byte~) startProcessing::$21 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 ] ) always clobbers reg byte a
Statement [90] (byte) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$47 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$47 ] ) always clobbers reg byte a
Statement [91] (byte) startProcessing::$48 ← (byte) startProcessing::$47 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$48 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$48 ] ) always clobbers reg byte a
Statement [92] (byte) startProcessing::$49 ← (byte) startProcessing::$48 << (byte) 2 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$49 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$49 ] ) always clobbers reg byte a
Statement [93] (byte~) startProcessing::$30 ← (byte) startProcessing::$49 + (byte) startProcessing::freeIdx#2 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteX#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ) always clobbers reg byte a
Statement [94] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$30) ← (word) startProcessing::spriteX#0 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spriteY#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ) always clobbers reg byte a
Statement [95] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$30) ← (word) startProcessing::spriteY#0 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$22 startProcessing::$30 ] ) always clobbers reg byte a
Statement [96] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$30) ← (word~) startProcessing::$22 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ) always clobbers reg byte a
Statement [97] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$30) ← (byte) $3c [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::freeIdx#2 startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ) always clobbers reg byte a
Statement [98] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$30) ← (byte) startProcessing::freeIdx#2 [ startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::screenPtr#0 startProcessing::spritePtr#0 startProcessing::$30 ] ) always clobbers reg byte a
Statement [99] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$30) ← (byte) startProcessing::spritePtr#0 [ startProcessing::screenPtr#0 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::screenPtr#0 startProcessing::$30 ] ) always clobbers reg byte a
Statement [100] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30) ← (const byte) STATUS_NEW#0 [ startProcessing::screenPtr#0 startProcessing::$30 ] ( main:4::startProcessing:45 [ startProcessing::screenPtr#0 startProcessing::$30 ] ) always clobbers reg byte a
Statement [101] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$30) ← (byte*) startProcessing::screenPtr#0 [ ] ( main:4::startProcessing:45 [ ] ) always clobbers reg byte a
Statement [110] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 ] ) always clobbers reg byte a
Statement [111] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 << (byte) 1 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::$13 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::$13 ] ) always clobbers reg byte a
Statement [112] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 << (byte) 1 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::$13 getCharToProcess::$14 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::$13 getCharToProcess::$14 ] ) always clobbers reg byte a
Statement [113] (word) getCharToProcess::dist#0 ← *((const word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((const word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14) [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a
Statement [114] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_dist#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::dist#0 ] ) always clobbers reg byte a
Statement [120] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::y#7 getCharToProcess::screen_line#1 ] ) always clobbers reg byte a
Statement [123] if((word) getCharToProcess::return_dist#1==(const word) NOT_FOUND#0) goto getCharToProcess::@return [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a
Statement [124] (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::return_y#1 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 ] ) always clobbers reg byte a
Statement [125] (word) getCharToProcess::$15 ← (word~) getCharToProcess::$9 << (byte) 2 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 getCharToProcess::$15 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$9 getCharToProcess::$15 ] ) always clobbers reg byte a
Statement [126] (word) getCharToProcess::$16 ← (word) getCharToProcess::$15 + (word~) getCharToProcess::$9 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$16 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$16 ] ) always clobbers reg byte a
Statement [127] (word~) getCharToProcess::$10 ← (word) getCharToProcess::$16 << (byte) 3 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$10 ] ) always clobbers reg byte a
Statement [128] (byte*~) getCharToProcess::$11 ← (const byte[$3e8]) SCREEN_COPY#0 + (word~) getCharToProcess::$10 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 getCharToProcess::$11 ] ) always clobbers reg byte a
Statement [129] *((byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::return_dist#1 ] ) always clobbers reg byte a
Statement [131] (word~) getCharToProcess::closest_dist#10 ← (word) getCharToProcess::return_dist#1 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::screen_line#1 getCharToProcess::y#1 getCharToProcess::closest_dist#10 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::screen_line#1 getCharToProcess::y#1 getCharToProcess::closest_dist#10 ] ) always clobbers reg byte a
Statement [132] (word~) getCharToProcess::closest_dist#12 ← (word) getCharToProcess::return_dist#1 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#1 getCharToProcess::closest_dist#12 ] ( main:4::getCharToProcess:33 [ getCharToProcess::return_x#1 getCharToProcess::return_y#1 getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#1 getCharToProcess::closest_dist#12 ] ) always clobbers reg byte a
Statement [133] (word~) getCharToProcess::return_dist#6 ← (word) getCharToProcess::closest_dist#2 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::return_dist#6 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::return_dist#6 ] ) always clobbers reg byte a
Statement [134] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::return_dist#5 ] ( main:4::getCharToProcess:33 [ getCharToProcess::screen_line#4 getCharToProcess::y#7 getCharToProcess::x#2 getCharToProcess::closest_x#7 getCharToProcess::closest_y#7 getCharToProcess::return_dist#5 ] ) always clobbers reg byte a
Statement [136] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [137] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [138] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [139] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [140] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [141] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [142] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 [ ] ( main:4::setupRasterIrq:31 [ ] ) always clobbers reg byte a
Statement [147] *((byte*) initSprites::sp#2) ← (byte) 0 [ initSprites::sp#2 ] ( main:4::initSprites:29 [ initSprites::sp#2 ] ) always clobbers reg byte a reg byte y
Statement [149] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1 [ initSprites::sp#1 ] ( main:4::initSprites:29 [ initSprites::sp#1 ] ) always clobbers reg byte a
Statement [151] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 [ initSprites::i#2 ] ( main:4::initSprites:29 [ initSprites::i#2 ] ) always clobbers reg byte a
Statement [154] *((const byte*) SPRITES_MC#0) ← (byte) 0 [ ] ( main:4::initSprites:29 [ ] ) always clobbers reg byte a
Statement [155] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 [ ] ( main:4::initSprites:29 [ ] ) always clobbers reg byte a
Statement [156] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 [ ] ( main:4::initSprites:29 [ ] ) always clobbers reg byte a
Statement [161] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14 [ initSquareTables::x#2 initSquareTables::$2 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 initSquareTables::$2 ] ) always clobbers reg byte a
Statement [166] (word) mul8u::return#2 ← (word) mul8u::res#2 [ initSquareTables::x#2 mul8u::return#2 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 mul8u::return#2 ] ) always clobbers reg byte a
Statement [167] (word~) initSquareTables::$6 ← (word) mul8u::return#2 [ initSquareTables::x#2 initSquareTables::$6 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 initSquareTables::$6 ] ) always clobbers reg byte a
Statement [168] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1 [ initSquareTables::x#2 initSquareTables::$6 initSquareTables::$16 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 initSquareTables::$6 initSquareTables::$16 ] ) always clobbers reg byte a
Statement [169] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6 [ initSquareTables::x#2 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 ] ) always clobbers reg byte a
Statement [174] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c [ initSquareTables::y#2 initSquareTables::$10 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 initSquareTables::$10 ] ) always clobbers reg byte a
Statement [179] (word) mul8u::return#3 ← (word) mul8u::res#2 [ initSquareTables::y#2 mul8u::return#3 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 mul8u::return#3 ] ) always clobbers reg byte a
Statement [180] (word~) initSquareTables::$14 ← (word) mul8u::return#3 [ initSquareTables::y#2 initSquareTables::$14 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 initSquareTables::$14 ] ) always clobbers reg byte a
Statement [181] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1 [ initSquareTables::y#2 initSquareTables::$14 initSquareTables::$17 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 initSquareTables::$14 initSquareTables::$17 ] ) always clobbers reg byte a
Statement [182] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14 [ initSquareTables::y#2 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 ] ) always clobbers reg byte a
Statement [186] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2 [ initSquareTables::y#2 initSquareTables::$12 ] ( main:4::initSquareTables:7 [ initSquareTables::y#2 initSquareTables::$12 ] ) always clobbers reg byte a
Statement [187] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2 [ initSquareTables::x#2 initSquareTables::$4 ] ( main:4::initSquareTables:7 [ initSquareTables::x#2 initSquareTables::$4 ] ) always clobbers reg byte a
Statement [192] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 [ mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ( main:4::initSquareTables:7::mul8u:165 [ initSquareTables::x#2 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] main:4::initSquareTables:7::mul8u:178 [ initSquareTables::y#2 mul8u::res#2 mul8u::a#3 mul8u::mb#2 mul8u::$1 ] ) always clobbers reg byte a
Statement [194] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 [ mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ( main:4::initSquareTables:7::mul8u:165 [ initSquareTables::x#2 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] main:4::initSquareTables:7::mul8u:178 [ initSquareTables::y#2 mul8u::a#3 mul8u::mb#2 mul8u::res#1 ] ) always clobbers reg byte a
Statement [204] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [205] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() [ ] ( [ ] ) always clobbers reg byte a
Statement [206] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [207] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Statement [210] (byte) processChars::$64 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::$64 ] ) always clobbers reg byte a
Statement [211] (byte) processChars::$65 ← (byte) processChars::$64 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::$65 ] ) always clobbers reg byte a
Statement [212] (byte) processChars::$66 ← (byte) processChars::$65 << (byte) 2 [ processChars::i#10 processChars::numActive#10 processChars::$66 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::$66 ] ) always clobbers reg byte a
Statement [213] (byte~) processChars::$36 ← (byte) processChars::$66 + (byte) processChars::i#10 [ processChars::i#10 processChars::numActive#10 processChars::$36 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::$36 ] ) always clobbers reg byte a
Statement [214] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$36 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a
Statement [215] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte x reg byte y
Statement [216] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y
Statement [217] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) goto processChars::@3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y
Statement [218] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte x reg byte y
Statement [219] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a
Statement [220] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y
Statement [221] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y
Statement [222] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a reg byte y
Statement [223] (byte~) processChars::$12 ← > (word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$12 ] ) always clobbers reg byte a
Statement [225] (byte~) processChars::$13 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$13 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$13 ] ) always clobbers reg byte a
Statement [226] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$13 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a
Statement [227] (byte~) processChars::$18 ← (byte) processChars::i#10 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 ] ) always clobbers reg byte a
Statement [228] (byte~) processChars::$15 ← (byte)(word) processChars::xpos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::$15 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::$15 ] ) always clobbers reg byte a
Statement [230] (word~) processChars::$16 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::$16 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::$16 ] ) always clobbers reg byte a reg byte y
Statement [231] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$16 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::ypos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::$18 processChars::ypos#0 ] ) always clobbers reg byte a
Statement [232] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$18) ← (byte) processChars::ypos#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ) always clobbers reg byte a
Statement [233] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:203 [ 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 [234] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:203 [ 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 [235] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:203 [ 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 [236] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) goto processChars::@6 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 processChars::ypos#0 ] ( processChars:203 [ 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 [237] (word~) processChars::$26 ← (word) processChars::xpos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$26 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$26 ] ) always clobbers reg byte a
Statement [238] (byte~) processChars::$27 ← (byte)(word~) processChars::$26 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$27 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$27 ] ) always clobbers reg byte a
Statement [240] (byte~) processChars::$37 ← (byte) processChars::xchar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$37 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 processChars::$37 ] ) always clobbers reg byte a
Statement [241] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN#0 + (byte~) processChars::$37) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y
Statement [242] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::ypos#0 ] ) always clobbers reg byte a reg byte y
Statement [243] (byte~) processChars::$31 ← (byte) processChars::ypos#0 >> (byte) 3 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$31 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$31 ] ) always clobbers reg byte a
Statement [245] (byte~) processChars::$38 ← (byte) processChars::ychar#0 << (byte) 1 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$38 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::$38 ] ) always clobbers reg byte a
Statement [246] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN#0 + (byte~) processChars::$38) [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 ] ) always clobbers reg byte a reg byte y
Statement [247] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) [ processChars::i#10 processChars::numActive#10 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a reg byte y
Statement [251] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 [ processChars::i#1 processChars::numActive#3 ] ( processChars:203 [ processChars::i#1 processChars::numActive#3 ] ) always clobbers reg byte a
Statement [252] (byte~) processChars::$1 ← (byte) '0' + (byte) processChars::numActive#3 [ processChars::$1 ] ( processChars:203 [ processChars::$1 ] ) always clobbers reg byte a
Statement [255] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::bitmask#0 ] ) always clobbers reg byte a reg byte y
Statement [256] (byte~) processChars::$34 ← (byte) $ff ^ (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::$34 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::$34 ] ) always clobbers reg byte a
Statement [257] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$34 [ processChars::i#10 processChars::numActive#10 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 ] ) always clobbers reg byte a
Statement [258] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ( processChars:203 [ processChars::i#10 processChars::numActive#10 processChars::processing#0 processChars::bitmask#0 processChars::xpos#0 ] ) always clobbers reg byte a
Statement [266] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [267] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() [ ] ( [ ] ) always clobbers reg byte a
Statement [268] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
Statement [269] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
Potential registers zp ZP_WORD:2 [ main::src#2 main::src#1 ] : zp ZP_WORD:2 ,
Potential registers zp ZP_WORD:4 [ main::dst#2 main::dst#1 ] : zp ZP_WORD:4 ,
Potential registers zp ZP_BYTE:6 [ main::i#2 main::i#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] : zp ZP_BYTE:7 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] : zp ZP_BYTE:8 , reg byte x ,
Potential registers zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] : zp ZP_WORD:9 ,
Potential registers zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] : zp ZP_WORD:11 ,
Potential registers zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ] : zp ZP_BYTE:13 , reg byte x ,
Potential registers zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#1 ] : zp ZP_WORD:14 ,
Potential registers zp ZP_BYTE:16 [ getCharToProcess::y#7 getCharToProcess::y#1 ] : zp ZP_BYTE:16 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:17 [ getCharToProcess::x#2 getCharToProcess::x#1 ] : zp ZP_BYTE:17 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:18 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] : zp ZP_WORD:18 ,
Potential registers zp ZP_BYTE:20 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] : zp ZP_BYTE:20 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:21 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] : zp ZP_BYTE:21 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:22 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] : zp ZP_WORD:22 ,
Potential registers zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 ] : zp ZP_WORD:24 ,
Potential registers zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ] : zp ZP_BYTE:26 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:27 [ initSquareTables::x#2 initSquareTables::x#1 ] : zp ZP_BYTE:27 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:28 [ initSquareTables::x_dist#0 initSquareTables::$4 initSquareTables::$2 ] : zp ZP_BYTE:28 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:29 [ initSquareTables::y#2 initSquareTables::y#1 ] : zp ZP_BYTE:29 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:30 [ initSquareTables::y_dist#0 initSquareTables::$12 initSquareTables::$10 ] : zp ZP_BYTE:30 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:31 [ mul8u::b#1 ] : zp ZP_BYTE:31 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:32 [ mul8u::b#0 ] : zp ZP_BYTE:32 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:33 [ mul8u::a#3 mul8u::a#6 mul8u::a#2 mul8u::a#1 mul8u::a#0 ] : zp ZP_BYTE:33 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:34 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] : zp ZP_WORD:34 ,
Potential registers zp ZP_WORD:36 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] : zp ZP_WORD:36 ,
Potential registers zp ZP_BYTE:38 [ irqBottom::i#2 irqBottom::i#1 ] : zp ZP_BYTE:38 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:39 [ processChars::i#10 processChars::i#1 ] : zp ZP_BYTE:39 ,
Potential registers zp ZP_BYTE:40 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] : zp ZP_BYTE:40 ,
Potential registers zp ZP_BYTE:41 [ irqTop::i#2 irqTop::i#1 ] : zp ZP_BYTE:41 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:42 [ irqTop::i1#2 irqTop::i1#1 ] : zp ZP_BYTE:42 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:43 [ main::$25 ] : zp ZP_BYTE:43 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:44 [ main::$26 ] : zp ZP_BYTE:44 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:45 [ main::$27 ] : zp ZP_BYTE:45 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:46 [ main::$16 ] : zp ZP_BYTE:46 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:47 [ getCharToProcess::return_x#0 ] : zp ZP_BYTE:47 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:48 [ getCharToProcess::return_y#0 ] : zp ZP_BYTE:48 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:49 [ getCharToProcess::return_dist#0 ] : zp ZP_WORD:49 ,
Potential registers zp ZP_BYTE:51 [ main::center_x#0 ] : zp ZP_BYTE:51 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:52 [ main::center_y#0 ] : zp ZP_BYTE:52 , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:53 [ main::center_dist#0 ] : zp ZP_WORD:53 ,
Potential registers zp ZP_BYTE:55 [ startProcessing::center_x#0 ] : zp ZP_BYTE:55 , reg byte x ,
Potential registers zp ZP_BYTE:56 [ startProcessing::center_y#0 ] : zp ZP_BYTE:56 , reg byte x ,
Potential registers zp ZP_BYTE:57 [ startProcessing::$40 ] : zp ZP_BYTE:57 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:58 [ startProcessing::$41 ] : zp ZP_BYTE:58 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:59 [ startProcessing::$42 ] : zp ZP_BYTE:59 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:60 [ startProcessing::$29 ] : zp ZP_BYTE:60 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:61 [ startProcessing::$0 ] : zp ZP_WORD:61 ,
Potential registers zp ZP_WORD:63 [ startProcessing::$44 ] : zp ZP_WORD:63 ,
Potential registers zp ZP_WORD:65 [ startProcessing::$45 ] : zp ZP_WORD:65 ,
Potential registers zp ZP_WORD:67 [ startProcessing::$1 ] : zp ZP_WORD:67 ,
Potential registers zp ZP_WORD:69 [ startProcessing::$2 ] : zp ZP_WORD:69 ,
Potential registers zp ZP_WORD:71 [ startProcessing::screenPtr#0 ] : zp ZP_WORD:71 ,
Potential registers zp ZP_WORD:73 [ startProcessing::$4 ] : zp ZP_WORD:73 ,
Potential registers zp ZP_WORD:75 [ startProcessing::$5 ] : zp ZP_WORD:75 ,
Potential registers zp ZP_BYTE:77 [ startProcessing::ch#0 ] : zp ZP_BYTE:77 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:78 [ startProcessing::$7 ] : zp ZP_WORD:78 ,
Potential registers zp ZP_WORD:80 [ startProcessing::$8 ] : zp ZP_WORD:80 ,
Potential registers zp ZP_WORD:82 [ startProcessing::$10 ] : zp ZP_WORD:82 ,
Potential registers zp ZP_WORD:84 [ startProcessing::$11 ] : zp ZP_WORD:84 ,
Potential registers zp ZP_WORD:86 [ startProcessing::$12 ] : zp ZP_WORD:86 ,
Potential registers zp ZP_WORD:88 [ startProcessing::spriteX#0 ] : zp ZP_WORD:88 ,
Potential registers zp ZP_WORD:90 [ startProcessing::$14 ] : zp ZP_WORD:90 ,
Potential registers zp ZP_WORD:92 [ startProcessing::$15 ] : zp ZP_WORD:92 ,
Potential registers zp ZP_WORD:94 [ startProcessing::$16 ] : zp ZP_WORD:94 ,
Potential registers zp ZP_WORD:96 [ startProcessing::spriteY#0 ] : zp ZP_WORD:96 ,
Potential registers zp ZP_BYTE:98 [ startProcessing::spritePtr#0 ] : zp ZP_BYTE:98 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:99 [ startProcessing::$21 ] : zp ZP_BYTE:99 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:100 [ startProcessing::$22 ] : zp ZP_WORD:100 ,
Potential registers zp ZP_BYTE:102 [ startProcessing::$47 ] : zp ZP_BYTE:102 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:103 [ startProcessing::$48 ] : zp ZP_BYTE:103 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:104 [ startProcessing::$49 ] : zp ZP_BYTE:104 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:105 [ startProcessing::$30 ] : zp ZP_BYTE:105 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:106 [ getCharToProcess::$13 ] : zp ZP_BYTE:106 , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:107 [ getCharToProcess::$14 ] : zp ZP_BYTE:107 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:108 [ getCharToProcess::$9 ] : zp ZP_WORD:108 ,
Potential registers zp ZP_WORD:110 [ getCharToProcess::$15 ] : zp ZP_WORD:110 ,
Potential registers zp ZP_WORD:112 [ getCharToProcess::$16 ] : zp ZP_WORD:112 ,
Potential registers zp ZP_WORD:114 [ getCharToProcess::$10 ] : zp ZP_WORD:114 ,
Potential registers zp ZP_WORD:116 [ getCharToProcess::$11 ] : zp ZP_WORD:116 ,
Potential registers zp ZP_WORD:118 [ mul8u::return#2 ] : zp ZP_WORD:118 ,
Potential registers zp ZP_WORD:120 [ initSquareTables::$6 ] : zp ZP_WORD:120 ,
Potential registers zp ZP_BYTE:122 [ initSquareTables::$16 ] : zp ZP_BYTE:122 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:123 [ mul8u::return#3 ] : zp ZP_WORD:123 ,
Potential registers zp ZP_WORD:125 [ initSquareTables::$14 ] : zp ZP_WORD:125 ,
Potential registers zp ZP_BYTE:127 [ initSquareTables::$17 ] : zp ZP_BYTE:127 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:128 [ mul8u::$1 ] : zp ZP_BYTE:128 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:129 [ processChars::$64 ] : zp ZP_BYTE:129 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:130 [ processChars::$65 ] : zp ZP_BYTE:130 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:131 [ processChars::$66 ] : zp ZP_BYTE:131 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:132 [ processChars::$36 ] : zp ZP_BYTE:132 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:133 [ processChars::processing#0 ] : zp ZP_WORD:133 ,
Potential registers zp ZP_BYTE:135 [ processChars::bitmask#0 ] : zp ZP_BYTE:135 ,
Potential registers zp ZP_WORD:136 [ processChars::xpos#0 ] : zp ZP_WORD:136 ,
Potential registers zp ZP_BYTE:138 [ processChars::$12 ] : zp ZP_BYTE:138 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:139 [ processChars::$13 ] : zp ZP_BYTE:139 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:140 [ processChars::$18 ] : zp ZP_BYTE:140 , reg byte x ,
Potential registers zp ZP_BYTE:141 [ processChars::$15 ] : zp ZP_BYTE:141 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_WORD:142 [ processChars::$16 ] : zp ZP_WORD:142 ,
Potential registers zp ZP_BYTE:144 [ processChars::ypos#0 ] : zp ZP_BYTE:144 , reg byte x ,
Potential registers zp ZP_WORD:145 [ processChars::$26 ] : zp ZP_WORD:145 ,
Potential registers zp ZP_BYTE:147 [ processChars::$27 ] : zp ZP_BYTE:147 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:148 [ processChars::xchar#0 ] : zp ZP_BYTE:148 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:149 [ processChars::$37 ] : zp ZP_BYTE:149 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:150 [ processChars::$31 ] : zp ZP_BYTE:150 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:151 [ processChars::ychar#0 ] : zp ZP_BYTE:151 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:152 [ processChars::$38 ] : zp ZP_BYTE:152 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:153 [ processChars::$1 ] : zp ZP_BYTE:153 , reg byte a , reg byte x , reg byte y ,
Potential registers zp ZP_BYTE:154 [ processChars::$34 ] : zp ZP_BYTE:154 , reg byte a , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [getCharToProcess] 4,996.99: zp ZP_WORD:22 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] 3,090.17: zp ZP_WORD:18 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] 2,820.67: zp ZP_BYTE:21 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] 2,002: zp ZP_BYTE:107 [ getCharToProcess::$14 ] 1,833.24: zp ZP_BYTE:20 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] 1,456: zp ZP_BYTE:17 [ getCharToProcess::x#2 getCharToProcess::x#1 ] 1,001: zp ZP_BYTE:106 [ getCharToProcess::$13 ] 238.75: zp ZP_BYTE:16 [ getCharToProcess::y#7 getCharToProcess::y#1 ] 130.7: zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#1 ] 7.33: zp ZP_BYTE:47 [ getCharToProcess::return_x#0 ] 7.33: zp ZP_BYTE:48 [ getCharToProcess::return_y#0 ] 7.33: zp ZP_WORD:49 [ getCharToProcess::return_dist#0 ] 4: zp ZP_WORD:110 [ getCharToProcess::$15 ] 4: zp ZP_WORD:112 [ getCharToProcess::$16 ] 4: zp ZP_WORD:114 [ getCharToProcess::$10 ] 4: zp ZP_WORD:116 [ getCharToProcess::$11 ] 3: zp ZP_WORD:108 [ getCharToProcess::$9 ]
Uplift Scope [startProcessing] 2,734.41: zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] 2,002: zp ZP_BYTE:57 [ startProcessing::$40 ] 2,002: zp ZP_BYTE:58 [ startProcessing::$41 ] 2,002: zp ZP_BYTE:59 [ startProcessing::$42 ] 2,002: zp ZP_BYTE:60 [ startProcessing::$29 ] 224.44: zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] 203.57: zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] 202: zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ] 170.33: zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] 4: zp ZP_WORD:63 [ startProcessing::$44 ] 4: zp ZP_WORD:65 [ startProcessing::$45 ] 4: zp ZP_WORD:67 [ startProcessing::$1 ] 4: zp ZP_WORD:73 [ startProcessing::$4 ] 4: zp ZP_WORD:75 [ startProcessing::$5 ] 4: zp ZP_WORD:78 [ startProcessing::$7 ] 4: zp ZP_WORD:80 [ startProcessing::$8 ] 4: zp ZP_WORD:82 [ startProcessing::$10 ] 4: zp ZP_WORD:84 [ startProcessing::$11 ] 4: zp ZP_WORD:86 [ startProcessing::$12 ] 4: zp ZP_WORD:90 [ startProcessing::$14 ] 4: zp ZP_WORD:92 [ startProcessing::$15 ] 4: zp ZP_WORD:94 [ startProcessing::$16 ] 4: zp ZP_BYTE:102 [ startProcessing::$47 ] 4: zp ZP_BYTE:103 [ startProcessing::$48 ] 4: zp ZP_BYTE:104 [ startProcessing::$49 ] 3: zp ZP_WORD:61 [ startProcessing::$0 ] 2.25: zp ZP_BYTE:105 [ startProcessing::$30 ] 2: zp ZP_BYTE:77 [ startProcessing::ch#0 ] 2: zp ZP_BYTE:99 [ startProcessing::$21 ] 1.2: zp ZP_WORD:69 [ startProcessing::$2 ] 0.57: zp ZP_WORD:100 [ startProcessing::$22 ] 0.44: zp ZP_WORD:96 [ startProcessing::spriteY#0 ] 0.38: zp ZP_BYTE:55 [ startProcessing::center_x#0 ] 0.33: zp ZP_WORD:88 [ startProcessing::spriteX#0 ] 0.33: zp ZP_BYTE:98 [ startProcessing::spritePtr#0 ] 0.26: zp ZP_BYTE:56 [ startProcessing::center_y#0 ] 0.1: zp ZP_WORD:71 [ startProcessing::screenPtr#0 ]
Uplift Scope [mul8u] 349.43: zp ZP_WORD:34 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] 269.57: zp ZP_WORD:36 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] 214.67: zp ZP_BYTE:33 [ mul8u::a#3 mul8u::a#6 mul8u::a#2 mul8u::a#1 mul8u::a#0 ] 202: zp ZP_BYTE:128 [ mul8u::$1 ] 22: zp ZP_BYTE:31 [ mul8u::b#1 ] 22: zp ZP_BYTE:32 [ mul8u::b#0 ] 22: zp ZP_WORD:118 [ mul8u::return#2 ] 22: zp ZP_WORD:123 [ mul8u::return#3 ]
Uplift Scope [processChars] 34.43: zp ZP_BYTE:40 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ] 22: zp ZP_BYTE:129 [ processChars::$64 ] 22: zp ZP_BYTE:130 [ processChars::$65 ] 22: zp ZP_BYTE:131 [ processChars::$66 ] 22: zp ZP_BYTE:132 [ processChars::$36 ] 22: zp ZP_BYTE:138 [ processChars::$12 ] 22: zp ZP_BYTE:139 [ processChars::$13 ] 22: zp ZP_BYTE:141 [ processChars::$15 ] 22: zp ZP_BYTE:147 [ processChars::$27 ] 22: zp ZP_BYTE:148 [ processChars::xchar#0 ] 22: zp ZP_BYTE:149 [ processChars::$37 ] 22: zp ZP_BYTE:150 [ processChars::$31 ] 22: zp ZP_BYTE:151 [ processChars::ychar#0 ] 22: zp ZP_BYTE:152 [ processChars::$38 ] 22: zp ZP_BYTE:154 [ processChars::$34 ] 17.97: zp ZP_BYTE:39 [ processChars::i#10 processChars::i#1 ] 11: zp ZP_WORD:142 [ processChars::$16 ] 11: zp ZP_WORD:145 [ processChars::$26 ] 6.6: zp ZP_BYTE:140 [ processChars::$18 ] 4: zp ZP_BYTE:153 [ processChars::$1 ] 2.75: zp ZP_BYTE:144 [ processChars::ypos#0 ] 2.29: zp ZP_BYTE:135 [ processChars::bitmask#0 ] 2.06: zp ZP_WORD:136 [ processChars::xpos#0 ] 0.32: zp ZP_WORD:133 [ processChars::processing#0 ]
Uplift Scope [initSquareTables] 66: zp ZP_BYTE:28 [ initSquareTables::x_dist#0 initSquareTables::$4 initSquareTables::$2 ] 66: zp ZP_BYTE:30 [ initSquareTables::y_dist#0 initSquareTables::$12 initSquareTables::$10 ] 22: zp ZP_BYTE:27 [ initSquareTables::x#2 initSquareTables::x#1 ] 22: zp ZP_BYTE:29 [ initSquareTables::y#2 initSquareTables::y#1 ] 22: zp ZP_BYTE:122 [ initSquareTables::$16 ] 22: zp ZP_BYTE:127 [ initSquareTables::$17 ] 11: zp ZP_WORD:120 [ initSquareTables::$6 ] 11: zp ZP_WORD:125 [ initSquareTables::$14 ]
Uplift Scope [main] 27.5: zp ZP_WORD:2 [ main::src#2 main::src#1 ] 22: zp ZP_WORD:4 [ main::dst#2 main::dst#1 ] 22: zp ZP_BYTE:43 [ main::$25 ] 22: zp ZP_BYTE:44 [ main::$26 ] 22: zp ZP_BYTE:45 [ main::$27 ] 22: zp ZP_WORD:53 [ main::center_dist#0 ] 20.73: zp ZP_BYTE:6 [ main::i#2 main::i#1 ] 12.38: zp ZP_BYTE:46 [ main::$16 ] 5.5: zp ZP_BYTE:51 [ main::center_x#0 ] 5.5: zp ZP_BYTE:52 [ main::center_y#0 ]
Uplift Scope [irqTop] 38.5: zp ZP_BYTE:41 [ irqTop::i#2 irqTop::i#1 ] 38.5: zp ZP_BYTE:42 [ irqTop::i1#2 irqTop::i1#1 ]
Uplift Scope [initSprites] 33: zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 ] 33: zp ZP_BYTE:26 [ initSprites::i#2 initSprites::i#1 ]
Uplift Scope [irqBottom] 38.5: zp ZP_BYTE:38 [ irqBottom::i#2 irqBottom::i#1 ]
Uplift Scope [ProcessingChar]
Uplift Scope [ProcessingSprite]
Uplift Scope [setupRasterIrq]
Uplift Scope []
Uplifting [getCharToProcess] best 290835 combination zp ZP_WORD:22 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] zp ZP_WORD:18 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ] zp ZP_BYTE:21 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ] reg byte a [ getCharToProcess::$14 ] zp ZP_BYTE:20 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ] zp ZP_BYTE:17 [ getCharToProcess::x#2 getCharToProcess::x#1 ] zp ZP_BYTE:106 [ getCharToProcess::$13 ] zp ZP_BYTE:16 [ getCharToProcess::y#7 getCharToProcess::y#1 ] zp ZP_WORD:14 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#1 ] zp ZP_BYTE:47 [ getCharToProcess::return_x#0 ] zp ZP_BYTE:48 [ getCharToProcess::return_y#0 ] zp ZP_WORD:49 [ getCharToProcess::return_dist#0 ] zp ZP_WORD:110 [ getCharToProcess::$15 ] zp ZP_WORD:112 [ getCharToProcess::$16 ] zp ZP_WORD:114 [ getCharToProcess::$10 ] zp ZP_WORD:116 [ getCharToProcess::$11 ] zp ZP_WORD:108 [ getCharToProcess::$9 ]
Limited combination testing to 100 combinations of 8748 possible.
Uplifting [startProcessing] best 272835 combination zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ] reg byte a [ startProcessing::$40 ] reg byte a [ startProcessing::$41 ] reg byte a [ startProcessing::$42 ] zp ZP_BYTE:60 [ startProcessing::$29 ] zp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ] zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] zp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ] zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] zp ZP_WORD:63 [ startProcessing::$44 ] zp ZP_WORD:65 [ startProcessing::$45 ] zp ZP_WORD:67 [ startProcessing::$1 ] zp ZP_WORD:73 [ startProcessing::$4 ] zp ZP_WORD:75 [ startProcessing::$5 ] zp ZP_WORD:78 [ startProcessing::$7 ] zp ZP_WORD:80 [ startProcessing::$8 ] zp ZP_WORD:82 [ startProcessing::$10 ] zp ZP_WORD:84 [ startProcessing::$11 ] zp ZP_WORD:86 [ startProcessing::$12 ] zp ZP_WORD:90 [ startProcessing::$14 ] zp ZP_WORD:92 [ startProcessing::$15 ] zp ZP_WORD:94 [ startProcessing::$16 ] zp ZP_BYTE:102 [ startProcessing::$47 ] zp ZP_BYTE:103 [ startProcessing::$48 ] zp ZP_BYTE:104 [ startProcessing::$49 ] zp ZP_WORD:61 [ startProcessing::$0 ] zp ZP_BYTE:105 [ startProcessing::$30 ] zp ZP_BYTE:77 [ startProcessing::ch#0 ] zp ZP_BYTE:99 [ startProcessing::$21 ] zp ZP_WORD:69 [ startProcessing::$2 ] zp ZP_WORD:100 [ startProcessing::$22 ] zp ZP_WORD:96 [ startProcessing::spriteY#0 ] zp ZP_BYTE:55 [ startProcessing::center_x#0 ] zp ZP_WORD:88 [ startProcessing::spriteX#0 ] zp ZP_BYTE:98 [ startProcessing::spritePtr#0 ] zp ZP_BYTE:56 [ startProcessing::center_y#0 ] zp ZP_WORD:71 [ startProcessing::screenPtr#0 ]
Limited combination testing to 100 combinations of 113246208 possible.
Uplifting [mul8u] best 271809 combination zp ZP_WORD:34 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] zp ZP_WORD:36 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ] reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#2 mul8u::a#1 mul8u::a#0 ] reg byte a [ mul8u::$1 ] reg byte a [ mul8u::b#1 ] reg byte a [ mul8u::b#0 ] zp ZP_WORD:118 [ mul8u::return#2 ] zp ZP_WORD:123 [ mul8u::return#3 ]
Limited combination testing to 100 combinations of 192 possible.
Uplifting [initSquareTables] best 271649 combination reg byte a [ initSquareTables::x_dist#0 initSquareTables::$4 initSquareTables::$2 ] reg byte a [ initSquareTables::y_dist#0 initSquareTables::$12 initSquareTables::$10 ] zp ZP_BYTE:27 [ initSquareTables::x#2 initSquareTables::x#1 ] zp ZP_BYTE:29 [ initSquareTables::y#2 initSquareTables::y#1 ] zp ZP_BYTE:122 [ initSquareTables::$16 ] zp ZP_BYTE:127 [ initSquareTables::$17 ] zp ZP_WORD:120 [ initSquareTables::$6 ] zp ZP_WORD:125 [ initSquareTables::$14 ]
Limited combination testing to 100 combinations of 2304 possible.
Uplifting [main] best 271469 combination zp ZP_WORD:2 [ main::src#2 main::src#1 ] zp ZP_WORD:4 [ main::dst#2 main::dst#1 ] reg byte a [ main::$25 ] reg byte a [ main::$26 ] reg byte a [ main::$27 ] zp ZP_WORD:53 [ main::center_dist#0 ] zp ZP_BYTE:6 [ main::i#2 main::i#1 ] zp ZP_BYTE:46 [ main::$16 ] zp ZP_BYTE:51 [ main::center_x#0 ] zp ZP_BYTE:52 [ main::center_y#0 ]
Limited combination testing to 100 combinations of 5184 possible.
Uplifting [irqTop] best 271289 combination reg byte x [ irqTop::i#2 irqTop::i#1 ] reg byte x [ irqTop::i1#2 irqTop::i1#1 ]
Uplifting [initSprites] best 271169 combination zp ZP_WORD:24 [ initSprites::sp#2 initSprites::sp#1 ] reg byte x [ initSprites::i#2 initSprites::i#1 ]
Uplifting [irqBottom] best 271079 combination reg byte x [ irqBottom::i#2 irqBottom::i#1 ]
Uplifting [ProcessingChar] best 271079 combination
Uplifting [ProcessingSprite] best 271079 combination
Uplifting [setupRasterIrq] best 271079 combination
Uplifting [] best 271079 combination
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Uplifting [getCharToProcess] best 271079 combination zp ZP_BYTE:21 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Uplifting [startProcessing] best 271079 combination zp ZP_BYTE:8 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:60 [ startProcessing::$29 ]
Uplifting [startProcessing] best 267079 combination reg byte a [ startProcessing::$29 ]
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Uplifting [getCharToProcess] best 267079 combination zp ZP_BYTE:20 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:17 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Uplifting [getCharToProcess] best 267079 combination zp ZP_BYTE:17 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:106 [ getCharToProcess::$13 ]
Uplifting [getCharToProcess] best 263079 combination reg byte x [ getCharToProcess::$13 ]
Attempting to uplift remaining variables inzp ZP_BYTE:16 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Uplifting [getCharToProcess] best 263079 combination zp ZP_BYTE:16 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Uplifting [startProcessing] best 262179 combination reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ startProcessing::i1#2 startProcessing::i1#1 ]
Uplifting [startProcessing] best 261279 combination reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:40 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Uplifting [processChars] best 261279 combination zp ZP_BYTE:40 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:27 [ initSquareTables::x#2 initSquareTables::x#1 ]
Uplifting [initSquareTables] best 261279 combination zp ZP_BYTE:27 [ initSquareTables::x#2 initSquareTables::x#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:29 [ initSquareTables::y#2 initSquareTables::y#1 ]
Uplifting [initSquareTables] best 261279 combination zp ZP_BYTE:29 [ initSquareTables::y#2 initSquareTables::y#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:122 [ initSquareTables::$16 ]
Uplifting [initSquareTables] best 261239 combination reg byte a [ initSquareTables::$16 ]
Attempting to uplift remaining variables inzp ZP_BYTE:127 [ initSquareTables::$17 ]
Uplifting [initSquareTables] best 261199 combination reg byte a [ initSquareTables::$17 ]
Attempting to uplift remaining variables inzp ZP_BYTE:129 [ processChars::$64 ]
Uplifting [processChars] best 261139 combination reg byte a [ processChars::$64 ]
Attempting to uplift remaining variables inzp ZP_BYTE:130 [ processChars::$65 ]
Uplifting [processChars] best 261079 combination reg byte a [ processChars::$65 ]
Attempting to uplift remaining variables inzp ZP_BYTE:131 [ processChars::$66 ]
Uplifting [processChars] best 261019 combination reg byte a [ processChars::$66 ]
Attempting to uplift remaining variables inzp ZP_BYTE:132 [ processChars::$36 ]
Uplifting [processChars] best 260959 combination reg byte a [ processChars::$36 ]
Attempting to uplift remaining variables inzp ZP_BYTE:138 [ processChars::$12 ]
Uplifting [processChars] best 260899 combination reg byte a [ processChars::$12 ]
Attempting to uplift remaining variables inzp ZP_BYTE:139 [ processChars::$13 ]
Uplifting [processChars] best 260839 combination reg byte a [ processChars::$13 ]
Attempting to uplift remaining variables inzp ZP_BYTE:141 [ processChars::$15 ]
Uplifting [processChars] best 260779 combination reg byte a [ processChars::$15 ]
Attempting to uplift remaining variables inzp ZP_BYTE:147 [ processChars::$27 ]
Uplifting [processChars] best 260739 combination reg byte a [ processChars::$27 ]
Attempting to uplift remaining variables inzp ZP_BYTE:148 [ processChars::xchar#0 ]
Uplifting [processChars] best 260679 combination reg byte a [ processChars::xchar#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:149 [ processChars::$37 ]
Uplifting [processChars] best 260639 combination reg byte a [ processChars::$37 ]
Attempting to uplift remaining variables inzp ZP_BYTE:150 [ processChars::$31 ]
Uplifting [processChars] best 260599 combination reg byte a [ processChars::$31 ]
Attempting to uplift remaining variables inzp ZP_BYTE:151 [ processChars::ychar#0 ]
Uplifting [processChars] best 260539 combination reg byte a [ processChars::ychar#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:152 [ processChars::$38 ]
Uplifting [processChars] best 260499 combination reg byte a [ processChars::$38 ]
Attempting to uplift remaining variables inzp ZP_BYTE:154 [ processChars::$34 ]
Uplifting [processChars] best 260439 combination reg byte a [ processChars::$34 ]
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Uplifting [main] best 260439 combination zp ZP_BYTE:6 [ main::i#2 main::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:39 [ processChars::i#10 processChars::i#1 ]
Uplifting [processChars] best 260439 combination zp ZP_BYTE:39 [ processChars::i#10 processChars::i#1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:46 [ main::$16 ]
Uplifting [main] best 260309 combination reg byte x [ main::$16 ]
Attempting to uplift remaining variables inzp ZP_BYTE:47 [ getCharToProcess::return_x#0 ]
Uplifting [getCharToProcess] best 260249 combination reg byte x [ getCharToProcess::return_x#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:48 [ getCharToProcess::return_y#0 ]
Uplifting [getCharToProcess] best 260189 combination reg byte y [ getCharToProcess::return_y#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:140 [ processChars::$18 ]
Uplifting [processChars] best 260119 combination reg byte x [ processChars::$18 ]
Attempting to uplift remaining variables inzp ZP_BYTE:51 [ main::center_x#0 ]
Uplifting [main] best 260059 combination reg byte x [ main::center_x#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:52 [ main::center_y#0 ]
Uplifting [main] best 259999 combination reg byte y [ main::center_y#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:102 [ startProcessing::$47 ]
Uplifting [startProcessing] best 259993 combination reg byte a [ startProcessing::$47 ]
Attempting to uplift remaining variables inzp ZP_BYTE:103 [ startProcessing::$48 ]
Uplifting [startProcessing] best 259987 combination reg byte a [ startProcessing::$48 ]
Attempting to uplift remaining variables inzp ZP_BYTE:104 [ startProcessing::$49 ]
Uplifting [startProcessing] best 259981 combination reg byte a [ startProcessing::$49 ]
Attempting to uplift remaining variables inzp ZP_BYTE:153 [ processChars::$1 ]
Uplifting [processChars] best 259975 combination reg byte x [ processChars::$1 ]
Attempting to uplift remaining variables inzp ZP_BYTE:144 [ processChars::ypos#0 ]
Uplifting [processChars] best 259975 combination zp ZP_BYTE:144 [ processChars::ypos#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:135 [ processChars::bitmask#0 ]
Uplifting [processChars] best 259975 combination zp ZP_BYTE:135 [ processChars::bitmask#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:105 [ startProcessing::$30 ]
Uplifting [startProcessing] best 259953 combination reg byte x [ startProcessing::$30 ]
Attempting to uplift remaining variables inzp ZP_BYTE:77 [ startProcessing::ch#0 ]
Uplifting [startProcessing] best 259947 combination reg byte a [ startProcessing::ch#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:99 [ startProcessing::$21 ]
Uplifting [startProcessing] best 259941 combination reg byte a [ startProcessing::$21 ]
Attempting to uplift remaining variables inzp ZP_BYTE:55 [ startProcessing::center_x#0 ]
Uplifting [startProcessing] best 259941 combination zp ZP_BYTE:55 [ startProcessing::center_x#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:98 [ startProcessing::spritePtr#0 ]
Uplifting [startProcessing] best 259941 combination zp ZP_BYTE:98 [ startProcessing::spritePtr#0 ]
Attempting to uplift remaining variables inzp ZP_BYTE:56 [ startProcessing::center_y#0 ]
Uplifting [startProcessing] best 259941 combination zp ZP_BYTE:56 [ startProcessing::center_y#0 ]
Coalescing zero page register with common assignment [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 ] ] with [ zp ZP_WORD:80 [ startProcessing::$8 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 ] ] with [ zp ZP_WORD:75 [ startProcessing::$5 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 ] ] with [ zp ZP_WORD:49 [ getCharToProcess::return_dist#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:34 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 ] ] with [ zp ZP_WORD:118 [ mul8u::return#2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:34 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 ] ] with [ zp ZP_WORD:123 [ mul8u::return#3 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:61 [ startProcessing::$0 ] ] with [ zp ZP_WORD:65 [ startProcessing::$45 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:67 [ startProcessing::$1 ] ] with [ zp ZP_WORD:69 [ startProcessing::$2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:82 [ startProcessing::$10 ] ] with [ zp ZP_WORD:84 [ startProcessing::$11 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:86 [ startProcessing::$12 ] ] with [ zp ZP_WORD:88 [ startProcessing::spriteX#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:90 [ startProcessing::$14 ] ] with [ zp ZP_WORD:92 [ startProcessing::$15 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:94 [ startProcessing::$16 ] ] with [ zp ZP_WORD:96 [ startProcessing::spriteY#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:108 [ getCharToProcess::$9 ] ] with [ zp ZP_WORD:112 [ getCharToProcess::$16 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:114 [ getCharToProcess::$10 ] ] with [ zp ZP_WORD:116 [ getCharToProcess::$11 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:136 [ processChars::xpos#0 ] ] with [ zp ZP_WORD:145 [ processChars::$26 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:9 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$8 ] ] with [ zp ZP_WORD:78 [ startProcessing::$7 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:11 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$5 ] ] with [ zp ZP_WORD:73 [ startProcessing::$4 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:22 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 getCharToProcess::return_dist#0 ] ] with [ zp ZP_WORD:53 [ main::center_dist#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:34 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 ] ] with [ zp ZP_WORD:120 [ initSquareTables::$6 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:34 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 initSquareTables::$6 ] ] with [ zp ZP_WORD:125 [ initSquareTables::$14 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:61 [ startProcessing::$0 startProcessing::$45 ] ] with [ zp ZP_WORD:67 [ startProcessing::$1 startProcessing::$2 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:82 [ startProcessing::$10 startProcessing::$11 ] ] with [ zp ZP_WORD:86 [ startProcessing::$12 startProcessing::spriteX#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:90 [ startProcessing::$14 startProcessing::$15 ] ] with [ zp ZP_WORD:94 [ startProcessing::$16 startProcessing::spriteY#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:108 [ getCharToProcess::$9 getCharToProcess::$16 ] ] with [ zp ZP_WORD:114 [ getCharToProcess::$10 getCharToProcess::$11 ] ] - score: 1
Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:7 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
Allocated (was zp ZP_WORD:9) zp ZP_WORD:8 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$8 startProcessing::$7 ]
Allocated (was zp ZP_WORD:11) zp ZP_WORD:10 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$5 startProcessing::$4 ]
Allocated (was zp ZP_WORD:14) zp ZP_WORD:12 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#1 ]
Allocated (was zp ZP_BYTE:16) zp ZP_BYTE:14 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
Allocated (was zp ZP_BYTE:17) zp ZP_BYTE:15 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
Allocated (was zp ZP_WORD:18) zp ZP_WORD:16 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
Allocated (was zp ZP_BYTE:20) zp ZP_BYTE:18 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
Allocated (was zp ZP_BYTE:21) zp ZP_BYTE:19 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
Allocated (was zp ZP_WORD:22) zp ZP_WORD:20 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 getCharToProcess::return_dist#0 main::center_dist#0 ]
Allocated (was zp ZP_WORD:24) zp ZP_WORD:22 [ initSprites::sp#2 initSprites::sp#1 ]
Allocated (was zp ZP_BYTE:27) zp ZP_BYTE:24 [ initSquareTables::x#2 initSquareTables::x#1 ]
Allocated (was zp ZP_BYTE:29) zp ZP_BYTE:25 [ initSquareTables::y#2 initSquareTables::y#1 ]
Allocated (was zp ZP_WORD:34) zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 initSquareTables::$6 initSquareTables::$14 ]
Allocated (was zp ZP_WORD:36) zp ZP_WORD:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
Allocated (was zp ZP_BYTE:39) zp ZP_BYTE:30 [ processChars::i#10 processChars::i#1 ]
Allocated (was zp ZP_BYTE:40) zp ZP_BYTE:31 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
Allocated (was zp ZP_BYTE:55) zp ZP_BYTE:32 [ startProcessing::center_x#0 ]
Allocated (was zp ZP_BYTE:56) zp ZP_BYTE:33 [ startProcessing::center_y#0 ]
Allocated (was zp ZP_WORD:61) zp ZP_WORD:34 [ startProcessing::$0 startProcessing::$45 startProcessing::$1 startProcessing::$2 ]
Allocated (was zp ZP_WORD:63) zp ZP_WORD:36 [ startProcessing::$44 ]
Allocated (was zp ZP_WORD:71) zp ZP_WORD:38 [ startProcessing::screenPtr#0 ]
Allocated (was zp ZP_WORD:82) zp ZP_WORD:40 [ startProcessing::$10 startProcessing::$11 startProcessing::$12 startProcessing::spriteX#0 ]
Allocated (was zp ZP_WORD:90) zp ZP_WORD:42 [ startProcessing::$14 startProcessing::$15 startProcessing::$16 startProcessing::spriteY#0 ]
Allocated (was zp ZP_BYTE:98) zp ZP_BYTE:44 [ startProcessing::spritePtr#0 ]
Allocated (was zp ZP_WORD:100) zp ZP_WORD:45 [ startProcessing::$22 ]
Allocated (was zp ZP_WORD:108) zp ZP_WORD:47 [ getCharToProcess::$9 getCharToProcess::$16 getCharToProcess::$10 getCharToProcess::$11 ]
Allocated (was zp ZP_WORD:110) zp ZP_WORD:49 [ getCharToProcess::$15 ]
Allocated (was zp ZP_WORD:133) zp ZP_WORD:51 [ processChars::processing#0 ]
Allocated (was zp ZP_BYTE:135) zp ZP_BYTE:53 [ processChars::bitmask#0 ]
Allocated (was zp ZP_WORD:136) zp ZP_WORD:54 [ processChars::xpos#0 processChars::$26 ]
Allocated (was zp ZP_WORD:142) zp ZP_WORD:56 [ processChars::$16 ]
Allocated (was zp ZP_BYTE:144) zp ZP_BYTE:58 [ processChars::ypos#0 ]
ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
// Black Hole at the center of the BASIC screen sucking in letters
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
.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_STATUS = $a
.const OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $b
// Processor port data direction register
.label PROCPORT_DDR = 0
// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// RAM in $A000, $E000 I/O in $D000
.const PROCPORT_RAM_IO = $35
// RAM in $A000, $E000 CHAR ROM in $D000
.const PROCPORT_RAM_CHARROM = $31
// The address of the CHARGEN character set
.label CHARGEN = $d000
// 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 SPRITE_PTRS = $3f8
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label SPRITES_XMSB = $d010
.label RASTER = $d012
.label SPRITES_ENABLE = $d015
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label SPRITES_COLS = $d027
.label VIC_CONTROL = $d011
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Bits for the IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// Color Ram
.label COLS = $d800
// CIA#1 Interrupt Status & Control Register
.label CIA1_INTERRUPT = $dc0d
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
.const LIGHT_BLUE = $e
// Address of the screen
.label SCREEN = $400
// Sprite data for the animating sprites
.label SPRITE_DATA = $2000
// Values added to VX
.label VXSIN = $2200
// Values added to VY
.label VYSIN = $2280
// Max number of chars processed at once
.const NUM_PROCESSING = 8
// Distance value meaning not found
.const NOT_FOUND = $ffff
// Values for ProcessingSprite.status
.const STATUS_FREE = 0
.const STATUS_NEW = 1
.const STATUS_PROCESSING = 2
.const RASTER_IRQ_TOP = $30
.const RASTER_IRQ_MIDDLE = $ff
.const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
.const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
.const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
.const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
//SEG3 @begin
bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 kickasm(location (const word*) VXSIN#0) {{ .for(var i=0; i<40; i++) { .word -sin(toRadians([i*360]/40))*4 } }}
//SEG6 kickasm(location (const word*) VYSIN#0) {{ .for(var i=0; i<25; i++) { .word -sin(toRadians([i*360]/25))*4 } }}
//SEG7 [3] phi from @1 to @2 [phi:@1->@2]
b2_from_b1:
jmp b2
//SEG8 @2
b2:
//SEG9 [4] call main
//SEG10 [6] phi from @2 to main [phi:@2->main]
main_from_b2:
jsr main
//SEG11 [5] phi from @2 to @end [phi:@2->@end]
bend_from_b2:
jmp bend
//SEG12 @end
bend:
//SEG13 main
main: {
.label src = 2
.label dst = 4
.label i = 6
.label center_dist = $14
//SEG14 [7] call initSquareTables
//SEG15 [158] phi from main to initSquareTables [phi:main->initSquareTables]
initSquareTables_from_main:
jsr initSquareTables
//SEG16 [8] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG17 [8] phi (byte*) main::dst#2 = (const byte[$3e8]) SCREEN_COPY#0 [phi:main->main::@1#0] -- pbuz1=pbuc1
lda #<SCREEN_COPY
sta dst
lda #>SCREEN_COPY
sta dst+1
//SEG18 [8] phi (byte*) main::src#2 = (const byte*) SCREEN#0 [phi:main->main::@1#1] -- pbuz1=pbuc1
lda #<SCREEN
sta src
lda #>SCREEN
sta src+1
jmp b1
// Copy screen to screen copy
//SEG19 [8] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
b1_from_b1:
//SEG20 [8] phi (byte*) main::dst#2 = (byte*) main::dst#1 [phi:main::@1->main::@1#0] -- register_copy
//SEG21 [8] phi (byte*) main::src#2 = (byte*) main::src#1 [phi:main::@1->main::@1#1] -- register_copy
jmp b1
//SEG22 main::@1
b1:
//SEG23 [9] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (src),y
ldy #0
sta (dst),y
//SEG24 [10] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1
inc src
bne !+
inc src+1
!:
//SEG25 [11] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1
inc dst
bne !+
inc dst+1
!:
//SEG26 [12] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@1 -- pbuz1_neq_pbuc1_then_la1
lda src+1
cmp #>SCREEN+$3e8
bne b1_from_b1
lda src
cmp #<SCREEN+$3e8
bne b1_from_b1
//SEG27 [13] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
//SEG28 [13] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
lda #0
sta i
jmp b2
// Init processing array
//SEG29 [13] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
b2_from_b2:
//SEG30 [13] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@2#0] -- register_copy
jmp b2
//SEG31 main::@2
b2:
//SEG32 [14] (byte) main::$25 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda i
asl
//SEG33 [15] (byte) main::$26 ← (byte) main::$25 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc i
//SEG34 [16] (byte) main::$27 ← (byte) main::$26 << (byte) 2 -- vbuaa=vbuaa_rol_2
asl
asl
//SEG35 [17] (byte~) main::$16 ← (byte) main::$27 + (byte) main::i#2 -- vbuxx=vbuaa_plus_vbuz1
clc
adc i
tax
//SEG36 [18] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING,x
lda #0
sta PROCESSING+1,x
//SEG37 [19] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
//SEG38 [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
//SEG39 [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
//SEG40 [22] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
//SEG41 [23] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
//SEG42 [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #STATUS_FREE
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
//SEG43 [25] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2
lda #<0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
lda #>0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
//SEG44 [26] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG45 [27] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp i
bne b2_from_b2
//SEG46 [28] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
b3_from_b2:
jmp b3
//SEG47 main::@3
b3:
//SEG48 [29] call initSprites
//SEG49 [145] phi from main::@3 to initSprites [phi:main::@3->initSprites]
initSprites_from_b3:
jsr initSprites
//SEG50 [30] phi from main::@3 to main::@8 [phi:main::@3->main::@8]
b8_from_b3:
jmp b8
//SEG51 main::@8
b8:
//SEG52 [31] call setupRasterIrq
jsr setupRasterIrq
//SEG53 [32] phi from main::@5 main::@8 to main::@4 [phi:main::@5/main::@8->main::@4]
b4_from_b5:
b4_from_b8:
jmp b4
// Main loop
//SEG54 main::@4
b4:
//SEG55 [33] call getCharToProcess
//SEG56 [107] phi from main::@4 to getCharToProcess [phi:main::@4->getCharToProcess]
getCharToProcess_from_b4:
jsr getCharToProcess
//SEG57 [34] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuxx=vbuz1
ldx getCharToProcess.return_x
//SEG58 [35] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuyy=vbuz1
ldy getCharToProcess.return_y
//SEG59 [36] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1
jmp b9
//SEG60 main::@9
b9:
//SEG61 [37] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
//SEG62 [38] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
//SEG63 [39] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0
//SEG64 [40] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@5 -- vwuz1_neq_vwuc1_then_la1
lda center_dist+1
cmp #>NOT_FOUND
bne b5
lda center_dist
cmp #<NOT_FOUND
bne b5
jmp b6
//SEG65 main::@6
b6:
//SEG66 [41] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2
lda #'.'
sta SCREEN+$3e7
jmp b7
//SEG67 main::@7
b7:
//SEG68 [42] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1
inc COLS+$3e7
jmp b7
//SEG69 main::@5
b5:
//SEG70 [43] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuxx
stx startProcessing.center_x
//SEG71 [44] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 -- vbuz1=vbuyy
sty startProcessing.center_y
//SEG72 [45] call startProcessing
//SEG73 [46] phi from main::@5 to startProcessing [phi:main::@5->startProcessing]
startProcessing_from_b5:
jsr startProcessing
jmp b4_from_b5
}
//SEG74 startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zeropage($20) center_x, byte zeropage($21) center_y)
startProcessing: {
.label _0 = $22
.label _1 = $22
.label _2 = $22
.label _4 = $a
.label _5 = $a
.label _7 = 8
.label _8 = 8
.label _10 = $28
.label _11 = $28
.label _12 = $28
.label _14 = $2a
.label _15 = $2a
.label _16 = $2a
.label _22 = $2d
.label center_x = $20
.label center_y = $21
.label i = 7
.label screenPtr = $26
.label spriteData = $a
.label chargenData = 8
.label spriteX = $28
.label spriteY = $2a
.label spritePtr = $2c
.label freeIdx = 7
.label _44 = $24
.label _45 = $22
//SEG75 [47] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
b1_from_startProcessing:
//SEG76 [47] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1
ldx #$ff
jmp b1
//SEG77 startProcessing::@1
b1:
//SEG78 [48] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
b2_from_b1:
//SEG79 [48] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1
lda #0
sta i
jmp b2
//SEG80 [48] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
b2_from_b3:
//SEG81 [48] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy
jmp b2
//SEG82 startProcessing::@2
b2:
//SEG83 [49] (byte) startProcessing::$40 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda i
asl
//SEG84 [50] (byte) startProcessing::$41 ← (byte) startProcessing::$40 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc i
//SEG85 [51] (byte) startProcessing::$42 ← (byte) startProcessing::$41 << (byte) 2 -- vbuaa=vbuaa_rol_2
asl
asl
//SEG86 [52] (byte~) startProcessing::$29 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc i
//SEG87 [53] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$29)!=(const byte) STATUS_FREE#0) goto startProcessing::@3 -- pbuc1_derefidx_vbuaa_neq_vbuc2_then_la1
tay
lda #STATUS_FREE
cmp PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,y
bne b3
//SEG88 [54] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
b4_from_b2:
b4_from_b9:
//SEG89 [54] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy
jmp b4
//SEG90 startProcessing::@4
b4:
//SEG91 [55] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1
lda #$ff
cmp freeIdx
beq b8
jmp b5
//SEG92 startProcessing::@5
b5:
//SEG93 [56] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2
lda center_y
sta _0
lda #0
sta _0+1
//SEG94 [57] (word) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2
lda _0
asl
sta _44
lda _0+1
rol
sta _44+1
asl _44
rol _44+1
//SEG95 [58] (word) startProcessing::$45 ← (word) startProcessing::$44 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz1
lda _45
clc
adc _44
sta _45
lda _45+1
adc _44+1
sta _45+1
//SEG96 [59] (word~) startProcessing::$1 ← (word) startProcessing::$45 << (byte) 3 -- vwuz1=vwuz1_rol_3
asl _1
rol _1+1
asl _1
rol _1+1
asl _1
rol _1+1
//SEG97 [60] (byte*~) startProcessing::$2 ← (const byte*) SCREEN#0 + (word~) startProcessing::$1 -- pbuz1=pbuc1_plus_vwuz1
clc
lda _2
adc #<SCREEN
sta _2
lda _2+1
adc #>SCREEN
sta _2+1
//SEG98 [61] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0 -- pbuz1=pbuz2_plus_vbuz3
lda center_x
clc
adc _2
sta screenPtr
lda #0
adc _2+1
sta screenPtr+1
//SEG99 [62] (word~) startProcessing::$4 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2
lda freeIdx
sta _4
lda #0
sta _4+1
//SEG100 [63] (word~) startProcessing::$5 ← (word~) startProcessing::$4 << (byte) 6 -- vwuz1=vwuz1_rol_6
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
//SEG101 [64] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$5 -- pbuz1=pbuc1_plus_vwuz1
clc
lda spriteData
adc #<SPRITE_DATA
sta spriteData
lda spriteData+1
adc #>SPRITE_DATA
sta spriteData+1
//SEG102 [65] (byte) startProcessing::ch#0 ← *((byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0) -- vbuaa=pbuz1_derefidx_vbuz2
ldy center_x
lda (_2),y
//SEG103 [66] (word~) startProcessing::$7 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa
sta _7
lda #0
sta _7+1
//SEG104 [67] (word~) startProcessing::$8 ← (word~) startProcessing::$7 << (byte) 3 -- vwuz1=vwuz1_rol_3
asl _8
rol _8+1
asl _8
rol _8+1
asl _8
rol _8+1
//SEG105 [68] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$8 -- pbuz1=pbuc1_plus_vwuz1
clc
lda chargenData
adc #<CHARGEN
sta chargenData
lda chargenData+1
adc #>CHARGEN
sta chargenData+1
//SEG106 asm { sei }
sei
//SEG107 [70] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_CHARROM
sta PROCPORT
//SEG108 [71] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
b6_from_b5:
//SEG109 [71] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1
ldx #0
//SEG110 [71] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy
//SEG111 [71] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy
jmp b6
//SEG112 [71] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
b6_from_b6:
//SEG113 [71] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy
//SEG114 [71] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy
//SEG115 [71] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy
jmp b6
//SEG116 startProcessing::@6
b6:
//SEG117 [72] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (chargenData),y
ldy #0
sta (spriteData),y
//SEG118 [73] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1
lda #3
clc
adc spriteData
sta spriteData
bcc !+
inc spriteData+1
!:
//SEG119 [74] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1
inc chargenData
bne !+
inc chargenData+1
!:
//SEG120 [75] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx
inx
//SEG121 [76] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne b6_from_b6
jmp b7
//SEG122 startProcessing::@7
b7:
//SEG123 [77] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
//SEG124 asm { cli }
cli
//SEG125 [79] (word~) startProcessing::$10 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2
lda center_x
sta _10
lda #0
sta _10+1
//SEG126 [80] (word~) startProcessing::$11 ← (word~) startProcessing::$10 << (byte) 3 -- vwuz1=vwuz1_rol_3
asl _11
rol _11+1
asl _11
rol _11+1
asl _11
rol _11+1
//SEG127 [81] (word~) startProcessing::$12 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$11 -- vwuz1=vbuc1_plus_vwuz1
lda #BORDER_XPOS_LEFT
clc
adc _12
sta _12
bcc !+
inc _12+1
!:
//SEG128 [82] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$12 << (byte) 4 -- vwuz1=vwuz1_rol_4
asl spriteX
rol spriteX+1
asl spriteX
rol spriteX+1
asl spriteX
rol spriteX+1
asl spriteX
rol spriteX+1
//SEG129 [83] (word~) startProcessing::$14 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2
lda center_y
sta _14
lda #0
sta _14+1
//SEG130 [84] (word~) startProcessing::$15 ← (word~) startProcessing::$14 << (byte) 3 -- vwuz1=vwuz1_rol_3
asl _15
rol _15+1
asl _15
rol _15+1
asl _15
rol _15+1
//SEG131 [85] (word~) startProcessing::$16 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$15 -- vwuz1=vbuc1_plus_vwuz1
lda #BORDER_YPOS_TOP
clc
adc _16
sta _16
bcc !+
inc _16+1
!:
//SEG132 [86] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$16 << (byte) 4 -- vwuz1=vwuz1_rol_4
asl spriteY
rol spriteY+1
asl spriteY
rol spriteY+1
asl spriteY
rol spriteY+1
asl spriteY
rol spriteY+1
//SEG133 [87] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2
lax freeIdx
axs #-[SPRITE_DATA/$40]
stx spritePtr
//SEG134 [88] (byte~) startProcessing::$21 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda freeIdx
asl
asl
asl
//SEG135 [89] (word~) startProcessing::$22 ← (word)(byte~) startProcessing::$21 -- vwuz1=_word_vbuaa
sta _22
lda #0
sta _22+1
//SEG136 [90] (byte) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda freeIdx
asl
//SEG137 [91] (byte) startProcessing::$48 ← (byte) startProcessing::$47 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc freeIdx
//SEG138 [92] (byte) startProcessing::$49 ← (byte) startProcessing::$48 << (byte) 2 -- vbuaa=vbuaa_rol_2
asl
asl
//SEG139 [93] (byte~) startProcessing::$30 ← (byte) startProcessing::$49 + (byte) startProcessing::freeIdx#2 -- vbuxx=vbuaa_plus_vbuz1
clc
adc freeIdx
tax
//SEG140 [94] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$30) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1
lda spriteX
sta PROCESSING,x
lda spriteX+1
sta PROCESSING+1,x
//SEG141 [95] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$30) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuxx=vwuz1
lda spriteY
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
lda spriteY+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
//SEG142 [96] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$30) ← (word~) startProcessing::$22 -- pwuc1_derefidx_vbuxx=vwuz1
lda _22
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
lda _22+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
//SEG143 [97] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$30) ← (byte) $3c -- pwuc1_derefidx_vbuxx=vbuc2
lda #$3c
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
//SEG144 [98] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$30) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1
lda freeIdx
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
//SEG145 [99] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$30) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda spritePtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
//SEG146 [100] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30) ← (const byte) STATUS_NEW#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #STATUS_NEW
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
//SEG147 [101] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$30) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuxx=pbuz1
lda screenPtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
lda screenPtr+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
jmp breturn
//SEG148 startProcessing::@return
breturn:
//SEG149 [102] return
rts
//SEG150 startProcessing::@8
b8:
//SEG151 [103] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuxx=vbuz1
ldx freeIdx
//SEG152 [47] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
b1_from_b8:
//SEG153 [47] phi (byte) startProcessing::freeIdx#6 = (byte~) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy
jmp b1
//SEG154 startProcessing::@3
b3:
//SEG155 [104] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG156 [105] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp i
bne b2_from_b3
jmp b9
//SEG157 startProcessing::@9
b9:
//SEG158 [106] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuxx
stx freeIdx
jmp b4_from_b9
}
//SEG159 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 _9 = $2f
.label _10 = $2f
.label _11 = $2f
.label return_dist = $14
.label x = $f
.label dist = $14
.label screen_line = $c
.label y = $e
.label return_x = $12
.label return_y = $13
.label closest_dist = $10
.label closest_x = $12
.label closest_y = $13
.label _15 = $31
.label _16 = $2f
//SEG160 [108] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
b1_from_getCharToProcess:
//SEG161 [108] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1
lda #0
sta closest_y
//SEG162 [108] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1
lda #0
sta closest_x
//SEG163 [108] phi (word) getCharToProcess::closest_dist#8 = (const word) NOT_FOUND#0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vwuz1=vwuc1
lda #<NOT_FOUND
sta closest_dist
lda #>NOT_FOUND
sta closest_dist+1
//SEG164 [108] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1
lda #0
sta y
//SEG165 [108] phi (byte*) getCharToProcess::screen_line#4 = (const byte[$3e8]) SCREEN_COPY#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- pbuz1=pbuc1
lda #<SCREEN_COPY
sta screen_line
lda #>SCREEN_COPY
sta screen_line+1
jmp b1
//SEG166 getCharToProcess::@1
b1:
//SEG167 [109] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
b2_from_b1:
//SEG168 [109] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy
//SEG169 [109] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy
//SEG170 [109] phi (word) getCharToProcess::closest_dist#2 = (word) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy
//SEG171 [109] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuz1=vbuc1
lda #0
sta x
jmp b2
//SEG172 getCharToProcess::@2
b2:
//SEG173 [110] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1
ldy x
lda (screen_line),y
cmp #' '
beq b11
jmp b4
//SEG174 getCharToProcess::@4
b4:
//SEG175 [111] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 << (byte) 1 -- vbuxx=vbuz1_rol_1
lda x
asl
tax
//SEG176 [112] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda y
asl
//SEG177 [113] (word) getCharToProcess::dist#0 ← *((const word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((const word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14) -- vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc2_derefidx_vbuaa
tay
lda SQUARES_X,x
clc
adc SQUARES_Y,y
sta dist
lda SQUARES_X+1,x
adc SQUARES_Y+1,y
sta dist+1
//SEG178 [114] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vwuz1_ge_vwuz2_then_la1
lda closest_dist+1
cmp dist+1
bne !+
lda closest_dist
cmp dist
beq b12
!:
bcc b12
jmp b5
//SEG179 getCharToProcess::@5
b5:
//SEG180 [115] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuz2
lda x
sta return_x
//SEG181 [116] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2
lda y
sta return_y
//SEG182 [117] 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:
//SEG183 [117] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy
//SEG184 [117] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy
//SEG185 [117] phi (word) getCharToProcess::return_dist#1 = (word~) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy
jmp b3
//SEG186 getCharToProcess::@3
b3:
//SEG187 [118] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG188 [119] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuz1_neq_vbuc1_then_la1
lda #$28
cmp x
bne b10
jmp b6
//SEG189 getCharToProcess::@6
b6:
//SEG190 [120] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
lda #$28
clc
adc screen_line
sta screen_line
bcc !+
inc screen_line+1
!:
//SEG191 [121] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1
inc y
//SEG192 [122] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp y
bne b9
jmp b7
//SEG193 getCharToProcess::@7
b7:
//SEG194 [123] if((word) getCharToProcess::return_dist#1==(const word) NOT_FOUND#0) goto getCharToProcess::@return -- vwuz1_eq_vwuc1_then_la1
lda return_dist
cmp #<NOT_FOUND
bne !+
lda return_dist+1
cmp #>NOT_FOUND
beq breturn
!:
jmp b8
//SEG195 getCharToProcess::@8
b8:
//SEG196 [124] (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2
lda return_y
sta _9
lda #0
sta _9+1
//SEG197 [125] (word) getCharToProcess::$15 ← (word~) getCharToProcess::$9 << (byte) 2 -- vwuz1=vwuz2_rol_2
lda _9
asl
sta _15
lda _9+1
rol
sta _15+1
asl _15
rol _15+1
//SEG198 [126] (word) getCharToProcess::$16 ← (word) getCharToProcess::$15 + (word~) getCharToProcess::$9 -- vwuz1=vwuz2_plus_vwuz1
lda _16
clc
adc _15
sta _16
lda _16+1
adc _15+1
sta _16+1
//SEG199 [127] (word~) getCharToProcess::$10 ← (word) getCharToProcess::$16 << (byte) 3 -- vwuz1=vwuz1_rol_3
asl _10
rol _10+1
asl _10
rol _10+1
asl _10
rol _10+1
//SEG200 [128] (byte*~) getCharToProcess::$11 ← (const byte[$3e8]) SCREEN_COPY#0 + (word~) getCharToProcess::$10 -- pbuz1=pbuc1_plus_vwuz1
clc
lda _11
adc #<SCREEN_COPY
sta _11
lda _11+1
adc #>SCREEN_COPY
sta _11+1
//SEG201 [129] *((byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1
// clear the found char on the screen copy
lda #' '
ldy return_x
sta (_11),y
jmp breturn
//SEG202 getCharToProcess::@return
breturn:
//SEG203 [130] return
rts
//SEG204 getCharToProcess::@9
b9:
//SEG205 [131] (word~) getCharToProcess::closest_dist#10 ← (word) getCharToProcess::return_dist#1 -- vwuz1=vwuz2
lda return_dist
sta closest_dist
lda return_dist+1
sta closest_dist+1
//SEG206 [108] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
b1_from_b9:
//SEG207 [108] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy
//SEG208 [108] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy
//SEG209 [108] phi (word) getCharToProcess::closest_dist#8 = (word~) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy
//SEG210 [108] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy
//SEG211 [108] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy
jmp b1
//SEG212 getCharToProcess::@10
b10:
//SEG213 [132] (word~) getCharToProcess::closest_dist#12 ← (word) getCharToProcess::return_dist#1 -- vwuz1=vwuz2
lda return_dist
sta closest_dist
lda return_dist+1
sta closest_dist+1
//SEG214 [109] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
b2_from_b10:
//SEG215 [109] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy
//SEG216 [109] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy
//SEG217 [109] phi (word) getCharToProcess::closest_dist#2 = (word~) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy
//SEG218 [109] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy
jmp b2
//SEG219 getCharToProcess::@12
b12:
//SEG220 [133] (word~) getCharToProcess::return_dist#6 ← (word) getCharToProcess::closest_dist#2 -- vwuz1=vwuz2
lda closest_dist
sta return_dist
lda closest_dist+1
sta return_dist+1
jmp b3_from_b12
//SEG221 getCharToProcess::@11
b11:
//SEG222 [134] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2 -- vwuz1=vwuz2
lda closest_dist
sta return_dist
lda closest_dist+1
sta return_dist+1
jmp b3_from_b11
}
//SEG223 setupRasterIrq
// Setup Raster IRQ
setupRasterIrq: {
.label irqRoutine = irqTop
//SEG224 asm { sei }
sei
//SEG225 [136] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
//SEG226 [137] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
//SEG227 [138] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
jmp b1
//SEG228 setupRasterIrq::@1
b1:
//SEG229 [139] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
jmp b2
//SEG230 setupRasterIrq::@2
b2:
//SEG231 [140] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2
lda #RASTER_IRQ_TOP
sta RASTER
//SEG232 [141] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
//SEG233 [142] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 -- _deref_pptc1=pprc2
// Set the IRQ routine
lda #<irqRoutine
sta HARDWARE_IRQ
lda #>irqRoutine
sta HARDWARE_IRQ+1
//SEG234 asm { cli }
cli
jmp breturn
//SEG235 setupRasterIrq::@return
breturn:
//SEG236 [144] return
rts
}
//SEG237 initSprites
// Initialize sprites
initSprites: {
.label sp = $16
//SEG238 [146] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1]
b1_from_initSprites:
//SEG239 [146] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1
lda #<SPRITE_DATA
sta sp
lda #>SPRITE_DATA
sta sp+1
jmp b1
// Clear sprite data
//SEG240 [146] phi from initSprites::@1 to initSprites::@1 [phi:initSprites::@1->initSprites::@1]
b1_from_b1:
//SEG241 [146] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@1->initSprites::@1#0] -- register_copy
jmp b1
//SEG242 initSprites::@1
b1:
//SEG243 [147] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1
lda #0
ldy #0
sta (sp),y
//SEG244 [148] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1
inc sp
bne !+
inc sp+1
!:
//SEG245 [149] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1 -- pbuz1_lt_pbuc1_then_la1
lda sp+1
cmp #>SPRITE_DATA+NUM_PROCESSING*$40
bcc b1_from_b1
bne !+
lda sp
cmp #<SPRITE_DATA+NUM_PROCESSING*$40
bcc b1_from_b1
!:
//SEG246 [150] phi from initSprites::@1 to initSprites::@2 [phi:initSprites::@1->initSprites::@2]
b2_from_b1:
//SEG247 [150] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@2#0] -- vbuxx=vbuc1
ldx #0
jmp b2
// Initialize sprite registers
//SEG248 [150] phi from initSprites::@2 to initSprites::@2 [phi:initSprites::@2->initSprites::@2]
b2_from_b2:
//SEG249 [150] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@2->initSprites::@2#0] -- register_copy
jmp b2
//SEG250 initSprites::@2
b2:
//SEG251 [151] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #LIGHT_BLUE
sta SPRITES_COLS,x
//SEG252 [152] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx
inx
//SEG253 [153] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@2 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne b2_from_b2
jmp b3
//SEG254 initSprites::@3
b3:
//SEG255 [154] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_MC
//SEG256 [155] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_EXPAND_X
//SEG257 [156] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_EXPAND_Y
jmp breturn
//SEG258 initSprites::@return
breturn:
//SEG259 [157] return
rts
}
//SEG260 initSquareTables
// initialize SQUARES table
initSquareTables: {
.label _6 = $1a
.label _14 = $1a
.label x = $18
.label y = $19
//SEG261 [159] phi from initSquareTables to initSquareTables::@1 [phi:initSquareTables->initSquareTables::@1]
b1_from_initSquareTables:
//SEG262 [159] phi (byte) initSquareTables::x#2 = (byte) 0 [phi:initSquareTables->initSquareTables::@1#0] -- vbuz1=vbuc1
lda #0
sta x
jmp b1
//SEG263 [159] phi from initSquareTables::@9 to initSquareTables::@1 [phi:initSquareTables::@9->initSquareTables::@1]
b1_from_b9:
//SEG264 [159] phi (byte) initSquareTables::x#2 = (byte) initSquareTables::x#1 [phi:initSquareTables::@9->initSquareTables::@1#0] -- register_copy
jmp b1
//SEG265 initSquareTables::@1
b1:
//SEG266 [160] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2 -- vbuz1_lt_vbuc1_then_la1
lda x
cmp #$14
bcc b2
jmp b3
//SEG267 initSquareTables::@3
b3:
//SEG268 [161] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14 -- vbuaa=vbuz1_minus_vbuc1
lda x
sec
sbc #$14
//SEG269 [162] phi from initSquareTables::@2 initSquareTables::@3 to initSquareTables::@4 [phi:initSquareTables::@2/initSquareTables::@3->initSquareTables::@4]
b4_from_b2:
b4_from_b3:
//SEG270 [162] phi (byte) initSquareTables::x_dist#0 = (byte~) initSquareTables::$4 [phi:initSquareTables::@2/initSquareTables::@3->initSquareTables::@4#0] -- register_copy
jmp b4
//SEG271 initSquareTables::@4
b4:
//SEG272 [163] (byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0 -- vbuxx=vbuaa
tax
//SEG273 [164] (byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0
//SEG274 [165] call mul8u
//SEG275 [188] phi from initSquareTables::@4 to mul8u [phi:initSquareTables::@4->mul8u]
mul8u_from_b4:
//SEG276 [188] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:initSquareTables::@4->mul8u#0] -- register_copy
//SEG277 [188] phi (word) mul8u::mb#0 = (byte) mul8u::b#0 [phi:initSquareTables::@4->mul8u#1] -- vwuz1=vbuaa
sta mul8u.mb
lda #0
sta mul8u.mb+1
jsr mul8u
//SEG278 [166] (word) mul8u::return#2 ← (word) mul8u::res#2
jmp b9
//SEG279 initSquareTables::@9
b9:
//SEG280 [167] (word~) initSquareTables::$6 ← (word) mul8u::return#2
//SEG281 [168] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda x
asl
//SEG282 [169] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6 -- pwuc1_derefidx_vbuaa=vwuz1
tay
lda _6
sta SQUARES_X,y
lda _6+1
sta SQUARES_X+1,y
//SEG283 [170] (byte) initSquareTables::x#1 ← ++ (byte) initSquareTables::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG284 [171] if((byte) initSquareTables::x#1!=(byte) $28) goto initSquareTables::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$28
cmp x
bne b1_from_b9
//SEG285 [172] phi from initSquareTables::@9 to initSquareTables::@5 [phi:initSquareTables::@9->initSquareTables::@5]
b5_from_b9:
//SEG286 [172] phi (byte) initSquareTables::y#2 = (byte) 0 [phi:initSquareTables::@9->initSquareTables::@5#0] -- vbuz1=vbuc1
lda #0
sta y
jmp b5
//SEG287 [172] phi from initSquareTables::@10 to initSquareTables::@5 [phi:initSquareTables::@10->initSquareTables::@5]
b5_from_b10:
//SEG288 [172] phi (byte) initSquareTables::y#2 = (byte) initSquareTables::y#1 [phi:initSquareTables::@10->initSquareTables::@5#0] -- register_copy
jmp b5
//SEG289 initSquareTables::@5
b5:
//SEG290 [173] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@6 -- vbuz1_lt_vbuc1_then_la1
lda y
cmp #$c
bcc b6
jmp b7
//SEG291 initSquareTables::@7
b7:
//SEG292 [174] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c -- vbuaa=vbuz1_minus_vbuc1
lda y
sec
sbc #$c
//SEG293 [175] phi from initSquareTables::@6 initSquareTables::@7 to initSquareTables::@8 [phi:initSquareTables::@6/initSquareTables::@7->initSquareTables::@8]
b8_from_b6:
b8_from_b7:
//SEG294 [175] phi (byte) initSquareTables::y_dist#0 = (byte~) initSquareTables::$12 [phi:initSquareTables::@6/initSquareTables::@7->initSquareTables::@8#0] -- register_copy
jmp b8
//SEG295 initSquareTables::@8
b8:
//SEG296 [176] (byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0 -- vbuxx=vbuaa
tax
//SEG297 [177] (byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0
//SEG298 [178] call mul8u
//SEG299 [188] phi from initSquareTables::@8 to mul8u [phi:initSquareTables::@8->mul8u]
mul8u_from_b8:
//SEG300 [188] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:initSquareTables::@8->mul8u#0] -- register_copy
//SEG301 [188] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:initSquareTables::@8->mul8u#1] -- vwuz1=vbuaa
sta mul8u.mb
lda #0
sta mul8u.mb+1
jsr mul8u
//SEG302 [179] (word) mul8u::return#3 ← (word) mul8u::res#2
jmp b10
//SEG303 initSquareTables::@10
b10:
//SEG304 [180] (word~) initSquareTables::$14 ← (word) mul8u::return#3
//SEG305 [181] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda y
asl
//SEG306 [182] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14 -- pwuc1_derefidx_vbuaa=vwuz1
tay
lda _14
sta SQUARES_Y,y
lda _14+1
sta SQUARES_Y+1,y
//SEG307 [183] (byte) initSquareTables::y#1 ← ++ (byte) initSquareTables::y#2 -- vbuz1=_inc_vbuz1
inc y
//SEG308 [184] if((byte) initSquareTables::y#1!=(byte) $19) goto initSquareTables::@5 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp y
bne b5_from_b10
jmp breturn
//SEG309 initSquareTables::@return
breturn:
//SEG310 [185] return
rts
//SEG311 initSquareTables::@6
b6:
//SEG312 [186] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2 -- vbuaa=vbuc1_minus_vbuz1
lda #$c
sec
sbc y
jmp b8_from_b6
//SEG313 initSquareTables::@2
b2:
//SEG314 [187] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2 -- vbuaa=vbuc1_minus_vbuz1
lda #$14
sec
sbc x
jmp b4_from_b2
}
//SEG315 mul8u
// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
// mul8u(byte register(X) a, byte register(A) b)
mul8u: {
.label mb = $1c
.label res = $1a
.label return = $1a
//SEG316 [189] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1]
b1_from_mul8u:
//SEG317 [189] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy
//SEG318 [189] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1
lda #0
sta res
lda #0
sta res+1
//SEG319 [189] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy
jmp b1
//SEG320 mul8u::@1
b1:
//SEG321 [190] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1
cpx #0
bne b2
jmp breturn
//SEG322 mul8u::@return
breturn:
//SEG323 [191] return
rts
//SEG324 mul8u::@2
b2:
//SEG325 [192] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1
txa
and #1
//SEG326 [193] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1
cmp #0
beq b3_from_b2
jmp b4
//SEG327 mul8u::@4
b4:
//SEG328 [194] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2
lda res
clc
adc mb
sta res
lda res+1
adc mb+1
sta res+1
//SEG329 [195] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3]
b3_from_b2:
b3_from_b4:
//SEG330 [195] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy
jmp b3
//SEG331 mul8u::@3
b3:
//SEG332 [196] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1
txa
lsr
tax
//SEG333 [197] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1
asl mb
rol mb+1
//SEG334 [189] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1]
b1_from_b3:
//SEG335 [189] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy
//SEG336 [189] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy
//SEG337 [189] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy
jmp b1
}
//SEG338 irqBottom
// Raster Interrupt at the middle of the screen
irqBottom: {
//SEG339 entry interrupt(HARDWARE_ALL)
sta rega+1
stx regx+1
sty regy+1
//SEG340 [199] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
b1_from_irqBottom:
//SEG341 [199] phi (byte) irqBottom::i#2 = (byte) 0 [phi:irqBottom->irqBottom::@1#0] -- vbuxx=vbuc1
ldx #0
jmp b1
//SEG342 [199] phi from irqBottom::@1 to irqBottom::@1 [phi:irqBottom::@1->irqBottom::@1]
b1_from_b1:
//SEG343 [199] phi (byte) irqBottom::i#2 = (byte) irqBottom::i#1 [phi:irqBottom::@1->irqBottom::@1#0] -- register_copy
jmp b1
//SEG344 irqBottom::@1
b1:
//SEG345 [200] (byte) irqBottom::i#1 ← ++ (byte) irqBottom::i#2 -- vbuxx=_inc_vbuxx
inx
//SEG346 [201] if((byte) irqBottom::i#1!=(byte) 5) goto irqBottom::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #5
bne b1_from_b1
//SEG347 [202] phi from irqBottom::@1 to irqBottom::@2 [phi:irqBottom::@1->irqBottom::@2]
b2_from_b1:
jmp b2
//SEG348 irqBottom::@2
b2:
//SEG349 [203] call processChars
//SEG350 [208] phi from irqBottom::@2 to processChars [phi:irqBottom::@2->processChars]
processChars_from_b2:
jsr processChars
jmp b3
//SEG351 irqBottom::@3
b3:
//SEG352 [204] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2
// Trigger IRQ at the top of the screen
lda #RASTER_IRQ_TOP
sta RASTER
//SEG353 [205] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2
lda #<irqTop
sta HARDWARE_IRQ
lda #>irqTop
sta HARDWARE_IRQ+1
//SEG354 [206] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
jmp breturn
//SEG355 irqBottom::@return
breturn:
//SEG356 [207] return - exit interrupt(HARDWARE_ALL)
rega:
lda #00
regx:
ldx #00
regy:
ldy #00
rti
}
//SEG357 processChars
// Process any chars in the PROCESSING array
processChars: {
.label _16 = $38
.label _26 = $36
.label processing = $33
.label bitmask = $35
.label i = $1e
.label xpos = $36
.label ypos = $3a
.label numActive = $1f
//SEG358 [209] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
b1_from_processChars:
//SEG359 [209] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1
lda #0
sta numActive
//SEG360 [209] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1
lda #0
sta i
jmp b1
//SEG361 [209] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
b1_from_b2:
//SEG362 [209] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy
//SEG363 [209] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy
jmp b1
//SEG364 processChars::@1
b1:
//SEG365 [210] (byte) processChars::$64 ← (byte) processChars::i#10 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda i
asl
//SEG366 [211] (byte) processChars::$65 ← (byte) processChars::$64 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1
clc
adc i
//SEG367 [212] (byte) processChars::$66 ← (byte) processChars::$65 << (byte) 2 -- vbuaa=vbuaa_rol_2
asl
asl
//SEG368 [213] (byte~) processChars::$36 ← (byte) processChars::$66 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1
clc
adc i
//SEG369 [214] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$36 -- pssz1=pssc1_plus_vbuaa
clc
adc #<PROCESSING
sta processing
lda #>PROCESSING
adc #0
sta processing+1
//SEG370 [215] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
lda (processing),y
tax
lda #1
cpx #0
beq !e+
!:
asl
dex
bne !-
!e:
sta bitmask
//SEG371 [216] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
lda (processing),y
cmp #STATUS_FREE
beq b2_from_b1
jmp b10
//SEG372 processChars::@10
b10:
//SEG373 [217] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) 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
//SEG374 processChars::@11
b11:
//SEG375 [218] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_pptz1_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
txa
!:
sta $ffff
//SEG376 [219] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
// Enable the sprite
lda SPRITES_ENABLE
ora bitmask
sta SPRITES_ENABLE
//SEG377 [220] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- 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+SPRITE_PTRS,y
//SEG378 [221] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0 -- pbuz1_derefidx_vbuc1=vbuc2
// Set status
lda #STATUS_PROCESSING
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
jmp b3
//SEG379 processChars::@3
b3:
//SEG380 [222] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4
ldy #0
lda (processing),y
sta xpos
iny
lda (processing),y
sta xpos+1
lsr xpos+1
ror xpos
lsr xpos+1
ror xpos
lsr xpos+1
ror xpos
lsr xpos+1
ror xpos
//SEG381 [223] (byte~) processChars::$12 ← > (word) processChars::xpos#0 -- vbuaa=_hi_vwuz1
lda xpos+1
//SEG382 [224] if((byte) 0!=(byte~) processChars::$12) goto processChars::@4 -- vbuc1_neq_vbuaa_then_la1
// Set sprite position
cmp #0
bne b4
jmp b8
//SEG383 processChars::@8
b8:
//SEG384 [225] (byte~) processChars::$13 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1
lda #$ff
eor bitmask
//SEG385 [226] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$13 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
and SPRITES_XMSB
sta SPRITES_XMSB
jmp b5
//SEG386 processChars::@5
b5:
//SEG387 [227] (byte~) processChars::$18 ← (byte) processChars::i#10 << (byte) 1 -- vbuxx=vbuz1_rol_1
lda i
asl
tax
//SEG388 [228] (byte~) processChars::$15 ← (byte)(word) processChars::xpos#0 -- vbuaa=_byte_vwuz1
lda xpos
//SEG389 [229] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$18) ← (byte~) processChars::$15 -- pbuc1_derefidx_vbuxx=vbuaa
sta SPRITES_XPOS,x
//SEG390 [230] (word~) processChars::$16 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
lda (processing),y
sta _16
iny
lda (processing),y
sta _16+1
lsr _16+1
ror _16
lsr _16+1
ror _16
lsr _16+1
ror _16
lsr _16+1
ror _16
//SEG391 [231] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$16 -- vbuz1=_byte_vwuz2
lda _16
sta ypos
//SEG392 [232] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$18) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda ypos
sta SPRITES_YPOS,x
//SEG393 [233] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) 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 b15
//SEG394 processChars::@15
b15:
//SEG395 [234] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) 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 b14
//SEG396 processChars::@14
b14:
//SEG397 [235] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) 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 b13
//SEG398 processChars::@13
b13:
//SEG399 [236] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) 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
//SEG400 processChars::@9
b9:
//SEG401 [237] (word~) processChars::$26 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz1_ror_3
lsr _26+1
ror _26
lsr _26+1
ror _26
lsr _26+1
ror _26
//SEG402 [238] (byte~) processChars::$27 ← (byte)(word~) processChars::$26 -- vbuaa=_byte_vwuz1
lda _26
//SEG403 [239] (byte) processChars::xchar#0 ← (byte~) processChars::$27 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #BORDER_XPOS_LEFT/8
//SEG404 [240] (byte~) processChars::$37 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1
asl
//SEG405 [241] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN#0 + (byte~) processChars::$37) -- 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
//SEG406 [242] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
sty $ff
clc
lda (processing),y
ldy #0
adc (processing),y
sta (processing),y
ldy $ff
iny
lda (processing),y
ldy #1
adc (processing),y
sta (processing),y
//SEG407 [243] (byte~) processChars::$31 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3
lda ypos
lsr
lsr
lsr
//SEG408 [244] (byte) processChars::ychar#0 ← (byte~) processChars::$31 - (const byte) BORDER_YPOS_TOP#0/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #BORDER_YPOS_TOP/8
//SEG409 [245] (byte~) processChars::$38 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1
asl
//SEG410 [246] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN#0 + (byte~) processChars::$38) -- 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
//SEG411 [247] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- 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
//SEG412 processChars::@7
b7:
//SEG413 [248] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1
inc numActive
//SEG414 [249] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
b2_from_b1:
b2_from_b7:
//SEG415 [249] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy
jmp b2
//SEG416 processChars::@2
b2:
//SEG417 [250] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1
inc i
//SEG418 [251] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp i
bne b1_from_b2
jmp b12
//SEG419 processChars::@12
b12:
//SEG420 [252] (byte~) processChars::$1 ← (byte) '0' + (byte) processChars::numActive#3 -- vbuxx=vbuc1_plus_vbuz1
lax numActive
axs #-['0']
//SEG421 [253] *((const byte*) SCREEN#0+(word) $3e7) ← (byte~) processChars::$1 -- _deref_pbuc1=vbuxx
stx SCREEN+$3e7
jmp breturn
//SEG422 processChars::@return
breturn:
//SEG423 [254] return
rts
//SEG424 processChars::@6
b6:
//SEG425 [255] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0 -- pbuz1_derefidx_vbuc1=vbuc2
// Set status to FREE
lda #STATUS_FREE
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
//SEG426 [256] (byte~) processChars::$34 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1
lda #$ff
eor bitmask
//SEG427 [257] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$34 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
// Disable the sprite
and SPRITES_ENABLE
sta SPRITES_ENABLE
jmp b7
//SEG428 processChars::@4
b4:
//SEG429 [258] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
lda SPRITES_XMSB
ora bitmask
sta SPRITES_XMSB
jmp b5
}
//SEG430 irqTop
// Raster Interrupt at the top of the screen
irqTop: {
//SEG431 entry interrupt(HARDWARE_ALL)
sta rega+1
stx regx+1
sty regy+1
//SEG432 [260] phi from irqTop to irqTop::@1 [phi:irqTop->irqTop::@1]
b1_from_irqTop:
//SEG433 [260] phi (byte) irqTop::i#2 = (byte) 0 [phi:irqTop->irqTop::@1#0] -- vbuxx=vbuc1
ldx #0
jmp b1
//SEG434 [260] phi from irqTop::@1 to irqTop::@1 [phi:irqTop::@1->irqTop::@1]
b1_from_b1:
//SEG435 [260] phi (byte) irqTop::i#2 = (byte) irqTop::i#1 [phi:irqTop::@1->irqTop::@1#0] -- register_copy
jmp b1
//SEG436 irqTop::@1
b1:
//SEG437 [261] (byte) irqTop::i#1 ← ++ (byte) irqTop::i#2 -- vbuxx=_inc_vbuxx
inx
//SEG438 [262] if((byte) irqTop::i#1!=(byte) 5) goto irqTop::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #5
bne b1_from_b1
//SEG439 [263] phi from irqTop::@1 to irqTop::@2 [phi:irqTop::@1->irqTop::@2]
b2_from_b1:
//SEG440 [263] phi (byte) irqTop::i1#2 = (byte) 0 [phi:irqTop::@1->irqTop::@2#0] -- vbuxx=vbuc1
ldx #0
jmp b2
//*BORDERCOL = WHITE;
//*BGCOL = WHITE;
//SEG441 [263] phi from irqTop::@2 to irqTop::@2 [phi:irqTop::@2->irqTop::@2]
b2_from_b2:
//SEG442 [263] phi (byte) irqTop::i1#2 = (byte) irqTop::i1#1 [phi:irqTop::@2->irqTop::@2#0] -- register_copy
jmp b2
//SEG443 irqTop::@2
b2:
//SEG444 [264] (byte) irqTop::i1#1 ← ++ (byte) irqTop::i1#2 -- vbuxx=_inc_vbuxx
inx
//SEG445 [265] if((byte) irqTop::i1#1!=(byte) 8) goto irqTop::@2 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne b2_from_b2
jmp b3
//SEG446 irqTop::@3
b3:
//SEG447 [266] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 -- _deref_pbuc1=vbuc2
// Trigger IRQ at the middle of the screen
lda #RASTER_IRQ_MIDDLE
sta RASTER
//SEG448 [267] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2
lda #<irqBottom
sta HARDWARE_IRQ
lda #>irqBottom
sta HARDWARE_IRQ+1
//SEG449 [268] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
jmp breturn
//SEG450 irqTop::@return
breturn:
//SEG451 [269] return - exit interrupt(HARDWARE_ALL)
rega:
lda #00
regx:
ldx #00
regy:
ldy #00
rti
}
// Copy of the screen used for finding chars to process
SCREEN_COPY: .fill $3e8, 0
// SQUARES_X[i] = (i-20)*(i-20)
SQUARES_X: .fill 2*$28, 0
// SQUARES_Y[i] = (i-12)*(i-12)
SQUARES_Y: .fill 2*$19, 0
// Sprites currently being processed in the interrupt
PROCESSING: .fill $d*NUM_PROCESSING, 0
.pc = VXSIN "VXSIN"
.for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
.pc = VYSIN "VYSIN"
.for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b8
Removing instruction jmp b4
Removing instruction jmp b9
Removing instruction jmp b6
Removing instruction jmp b7
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 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 breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp b9
Removing instruction jmp b5
Removing instruction jmp b7
Removing instruction jmp b8
Removing instruction jmp b10
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b4
Removing instruction jmp b3
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp breturn
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 b15
Removing instruction jmp b14
Removing instruction jmp b13
Removing instruction jmp b9
Removing instruction jmp b7
Removing instruction jmp b2
Removing instruction jmp b12
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #>0
Removing instruction ldy #0
Removing instruction lda #0
Replacing instruction ldy #0 with TAY
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda ypos
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b2_from_b2 with b2
Replacing label b4_from_b5 with b4_from_b8
Replacing label b6_from_b6 with b6
Replacing label b2_from_b3 with b2
Replacing label b4_from_b9 with b4
Replacing label b3_from_b12 with b3
Replacing label b3_from_b11 with b3
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b2_from_b2 with b2
Replacing label b1_from_b9 with b1
Replacing label b5_from_b10 with b5
Replacing label b8_from_b6 with b8
Replacing label b4_from_b2 with b4
Replacing label b3_from_b2 with b3
Replacing label b1_from_b1 with b1
Replacing label b2_from_b1 with b2
Replacing label b1_from_b2 with b1
Replacing label b1_from_b1 with b1
Replacing label b2_from_b2 with b2
Removing instruction b1:
Removing instruction b2_from_b1:
Removing instruction b2:
Removing instruction main_from_b2:
Removing instruction bend_from_b2:
Removing instruction b1_from_b1:
Removing instruction b2_from_b2:
Removing instruction b3_from_b2:
Removing instruction initSprites_from_b3:
Removing instruction b8_from_b3:
Removing instruction b4_from_b5:
Removing instruction getCharToProcess_from_b4:
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 b2_from_b1:
Removing instruction b3_from_b11:
Removing instruction b3_from_b12:
Removing instruction b3_from_b5:
Removing instruction b1_from_b1:
Removing instruction b2_from_b2:
Removing instruction b1_from_b9:
Removing instruction b4_from_b2:
Removing instruction b4_from_b3:
Removing instruction b5_from_b10:
Removing instruction b8_from_b6:
Removing instruction b8_from_b7:
Removing instruction b3_from_b2:
Removing instruction b3_from_b4:
Removing instruction b1_from_b1:
Removing instruction b2_from_b1:
Removing instruction processChars_from_b2:
Removing instruction breturn:
Removing instruction b1_from_b2:
Removing instruction b2_from_b1:
Removing instruction b2_from_b7:
Removing instruction b1_from_b1:
Removing instruction b2_from_b2:
Removing instruction breturn:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction initSquareTables_from_main:
Removing instruction b1_from_main:
Removing instruction b2_from_b1:
Removing instruction b3:
Removing instruction b8:
Removing instruction b4:
Removing instruction b9:
Removing instruction b6:
Removing instruction startProcessing_from_b5:
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 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:
Removing instruction b2:
Removing instruction breturn:
Removing instruction b1_from_initSprites:
Removing instruction b2_from_b1:
Removing instruction b3:
Removing instruction breturn:
Removing instruction b1_from_initSquareTables:
Removing instruction b3:
Removing instruction mul8u_from_b4:
Removing instruction b9:
Removing instruction b5_from_b9:
Removing instruction b7:
Removing instruction mul8u_from_b8:
Removing instruction b10:
Removing instruction breturn:
Removing instruction b1_from_mul8u:
Removing instruction breturn:
Removing instruction b4:
Removing instruction b1_from_b3:
Removing instruction b1_from_irqBottom:
Removing instruction b2:
Removing instruction b3:
Removing instruction b1_from_processChars:
Removing instruction b10:
Removing instruction b11:
Removing instruction b8:
Removing instruction b15:
Removing instruction b14:
Removing instruction b13:
Removing instruction b9:
Removing instruction b12:
Removing instruction breturn:
Removing instruction b1_from_irqTop:
Removing instruction b2_from_b1:
Removing instruction b3:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Relabelling long label b4_from_b8 to b3
Succesful ASM optimization Pass5RelabelLongLabels
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b2
Removing instruction jmp b6
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b1
Removing instruction jmp b5
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b1
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction lda x with TYA
Removing instruction lda #$28
Removing instruction lda x
Removing instruction lda y
Removing instruction ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination
Fixing long branch [425] bne b2 to beq
Fixing long branch [1007] bne b1 to beq
Fixing long branch [212] bne b3 to beq
Fixing long branch [218] beq b8 to bne
Fixing long branch [473] beq b11 to bne
Fixing long branch [494] beq b12 to bne
Fixing long branch [498] bcc b12 to bcs
Fixing long branch [829] beq b2 to bne
Fixing long branch [881] bne b4 to beq
Fixing long branch [915] bcc b6 to bcs
Fixing long branch [922] bcc b6 to bcs
Fixing long branch [929] bcc b6 to bcs
Fixing long branch [936] bcc b6 to bcs
Fixing long branch [944] bcc b6 to bcs
Fixing long branch [951] bcc b6 to bcs
Fixing long branch [959] bcc b6 to bcs
Fixing long branch [966] bcc b6 to bcs
FINAL SYMBOL TABLE
(label) @1
(label) @2
(label) @begin
(label) @end
(byte) BORDER_XPOS_LEFT
(const byte) BORDER_XPOS_LEFT#0 BORDER_XPOS_LEFT = (byte) $18
(word) BORDER_XPOS_RIGHT
(const word) BORDER_XPOS_RIGHT#0 BORDER_XPOS_RIGHT = (word) $158
(byte) BORDER_YPOS_BOTTOM
(const byte) BORDER_YPOS_BOTTOM#0 BORDER_YPOS_BOTTOM = (byte) $fa
(byte) BORDER_YPOS_TOP
(const byte) BORDER_YPOS_TOP#0 BORDER_YPOS_TOP = (byte) $32
(byte*) CHARGEN
(const byte*) CHARGEN#0 CHARGEN = (byte*) 53248
(byte*) CIA1_INTERRUPT
(const byte*) CIA1_INTERRUPT#0 CIA1_INTERRUPT = (byte*) 56333
(byte) CIA_INTERRUPT_CLEAR
(const byte) CIA_INTERRUPT_CLEAR#0 CIA_INTERRUPT_CLEAR = (byte) $7f
(byte*) COLS
(const byte*) COLS#0 COLS = (byte*) 55296
(void()**) HARDWARE_IRQ
(const void()**) HARDWARE_IRQ#0 HARDWARE_IRQ = (void()**) 65534
(byte*) IRQ_ENABLE
(const byte*) IRQ_ENABLE#0 IRQ_ENABLE = (byte*) 53274
(byte) IRQ_RASTER
(const byte) IRQ_RASTER#0 IRQ_RASTER = (byte) 1
(byte*) IRQ_STATUS
(const byte*) IRQ_STATUS#0 IRQ_STATUS = (byte*) 53273
(byte) LIGHT_BLUE
(const byte) LIGHT_BLUE#0 LIGHT_BLUE = (byte) $e
(word) NOT_FOUND
(const word) NOT_FOUND#0 NOT_FOUND = (word) $ffff
(byte) NUM_PROCESSING
(const byte) NUM_PROCESSING#0 NUM_PROCESSING = (byte) 8
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID OFFSET_STRUCT_PROCESSINGSPRITE_ID = (byte) 8
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR OFFSET_STRUCT_PROCESSINGSPRITE_PTR = (byte) 9
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = (byte) $b
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS OFFSET_STRUCT_PROCESSINGSPRITE_STATUS = (byte) $a
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX OFFSET_STRUCT_PROCESSINGSPRITE_VX = (byte) 4
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY OFFSET_STRUCT_PROCESSINGSPRITE_VY = (byte) 6
(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y OFFSET_STRUCT_PROCESSINGSPRITE_Y = (byte) 2
(struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING
(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 PROCESSING = { fill( NUM_PROCESSING#0, 0) }
(byte*) PROCPORT
(const byte*) PROCPORT#0 PROCPORT = (byte*) 1
(byte*) PROCPORT_DDR
(const byte*) PROCPORT_DDR#0 PROCPORT_DDR = (byte*) 0
(byte) PROCPORT_DDR_MEMORY_MASK
(const byte) PROCPORT_DDR_MEMORY_MASK#0 PROCPORT_DDR_MEMORY_MASK = (byte) 7
(byte) PROCPORT_RAM_CHARROM
(const byte) PROCPORT_RAM_CHARROM#0 PROCPORT_RAM_CHARROM = (byte) $31
(byte) PROCPORT_RAM_IO
(const byte) PROCPORT_RAM_IO#0 PROCPORT_RAM_IO = (byte) $35
(word) ProcessingChar::dist
(byte) ProcessingChar::x
(byte) ProcessingChar::y
(byte) ProcessingSprite::id
(byte) ProcessingSprite::ptr
(byte*) ProcessingSprite::screenPtr
(byte) ProcessingSprite::status
(word) ProcessingSprite::vx
(word) ProcessingSprite::vy
(word) ProcessingSprite::x
(word) ProcessingSprite::y
(byte*) RASTER
(const byte*) RASTER#0 RASTER = (byte*) 53266
(byte) RASTER_IRQ_MIDDLE
(const byte) RASTER_IRQ_MIDDLE#0 RASTER_IRQ_MIDDLE = (byte) $ff
(byte) RASTER_IRQ_TOP
(const byte) RASTER_IRQ_TOP#0 RASTER_IRQ_TOP = (byte) $30
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*) 1024
(byte[$3e8]) SCREEN_COPY
(const byte[$3e8]) SCREEN_COPY#0 SCREEN_COPY = { fill( $3e8, 0) }
(byte*) SPRITES_COLS
(const byte*) SPRITES_COLS#0 SPRITES_COLS = (byte*) 53287
(byte*) SPRITES_ENABLE
(const byte*) SPRITES_ENABLE#0 SPRITES_ENABLE = (byte*) 53269
(byte*) SPRITES_EXPAND_X
(const byte*) SPRITES_EXPAND_X#0 SPRITES_EXPAND_X = (byte*) 53277
(byte*) SPRITES_EXPAND_Y
(const byte*) SPRITES_EXPAND_Y#0 SPRITES_EXPAND_Y = (byte*) 53271
(byte*) SPRITES_MC
(const byte*) SPRITES_MC#0 SPRITES_MC = (byte*) 53276
(byte*) SPRITES_XMSB
(const byte*) SPRITES_XMSB#0 SPRITES_XMSB = (byte*) 53264
(byte*) SPRITES_XPOS
(const byte*) SPRITES_XPOS#0 SPRITES_XPOS = (byte*) 53248
(byte*) SPRITES_YPOS
(const byte*) SPRITES_YPOS#0 SPRITES_YPOS = (byte*) 53249
(byte*) SPRITE_DATA
(const byte*) SPRITE_DATA#0 SPRITE_DATA = (byte*) 8192
(word) SPRITE_PTRS
(const word) SPRITE_PTRS#0 SPRITE_PTRS = (word) $3f8
(word[$28]) SQUARES_X
(const word[$28]) SQUARES_X#0 SQUARES_X = { fill( $28, 0) }
(word[$19]) SQUARES_Y
(const word[$19]) SQUARES_Y#0 SQUARES_Y = { fill( $19, 0) }
(byte) STATUS_FREE
(const byte) STATUS_FREE#0 STATUS_FREE = (byte) 0
(byte) STATUS_NEW
(const byte) STATUS_NEW#0 STATUS_NEW = (byte) 1
(byte) STATUS_PROCESSING
(const byte) STATUS_PROCESSING#0 STATUS_PROCESSING = (byte) 2
(byte*) VIC_CONTROL
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
(word*) VXSIN
(const word*) VXSIN#0 VXSIN = (word*) 8704
(word*) VYSIN
(const word*) VYSIN#0 VYSIN = (word*) 8832
(word) XPOS_LEFTMOST
(const word) XPOS_LEFTMOST#0 XPOS_LEFTMOST = (word)(const byte) BORDER_XPOS_LEFT#0-(byte) 8<<(byte) 4
(word) XPOS_RIGHTMOST
(const word) XPOS_RIGHTMOST#0 XPOS_RIGHTMOST = (const word) BORDER_XPOS_RIGHT#0<<(byte) 4
(word) YPOS_BOTTOMMOST
(const word) YPOS_BOTTOMMOST#0 YPOS_BOTTOMMOST = (word)(const byte) BORDER_YPOS_BOTTOM#0<<(byte) 4
(word) YPOS_TOPMOST
(const word) YPOS_TOPMOST#0 YPOS_TOPMOST = (word)(const byte) BORDER_YPOS_TOP#0-(byte) 8<<(byte) 4
(struct ProcessingChar()) getCharToProcess()
(word~) getCharToProcess::$10 $10 zp ZP_WORD:47 4.0
(byte*~) getCharToProcess::$11 $11 zp ZP_WORD:47 4.0
(byte~) getCharToProcess::$13 reg byte x 1001.0
(byte~) getCharToProcess::$14 reg byte a 2002.0
(word) getCharToProcess::$15 $15 zp ZP_WORD:49 4.0
(word) getCharToProcess::$16 $16 zp ZP_WORD:47 4.0
(word~) getCharToProcess::$9 $9 zp ZP_WORD:47 3.0
(label) getCharToProcess::@1
(label) getCharToProcess::@10
(label) getCharToProcess::@11
(label) getCharToProcess::@12
(label) getCharToProcess::@2
(label) getCharToProcess::@3
(label) getCharToProcess::@4
(label) getCharToProcess::@5
(label) getCharToProcess::@6
(label) getCharToProcess::@7
(label) getCharToProcess::@8
(label) getCharToProcess::@9
(label) getCharToProcess::@return
(struct ProcessingChar) getCharToProcess::closest
(word) getCharToProcess::closest_dist
(word~) getCharToProcess::closest_dist#10 closest_dist zp ZP_WORD:16 202.0
(word~) getCharToProcess::closest_dist#12 closest_dist zp ZP_WORD:16 2002.0
(word) getCharToProcess::closest_dist#2 closest_dist zp ZP_WORD:16 684.1666666666667
(word) getCharToProcess::closest_dist#8 closest_dist zp ZP_WORD:16 202.0
(byte) getCharToProcess::closest_x
(byte) getCharToProcess::closest_x#7 closest_x zp ZP_BYTE:18 388.0
(byte) getCharToProcess::closest_x#9 closest_x zp ZP_BYTE:18 202.0
(byte) getCharToProcess::closest_y
(byte) getCharToProcess::closest_y#7 closest_y zp ZP_BYTE:19 388.0
(byte) getCharToProcess::closest_y#9 closest_y zp ZP_BYTE:19 202.0
(word) getCharToProcess::dist
(word) getCharToProcess::dist#0 dist zp ZP_WORD:20 750.75
(struct ProcessingChar) getCharToProcess::return
(word) getCharToProcess::return_dist
(word) getCharToProcess::return_dist#0 return_dist zp ZP_WORD:20 7.333333333333333
(word) getCharToProcess::return_dist#1 return_dist zp ZP_WORD:20 242.23529411764704
(word~) getCharToProcess::return_dist#5 return_dist zp ZP_WORD:20 2002.0
(word~) getCharToProcess::return_dist#6 return_dist zp ZP_WORD:20 2002.0
(byte) getCharToProcess::return_x
(byte) getCharToProcess::return_x#0 reg byte x 7.333333333333333
(byte) getCharToProcess::return_x#1 return_x zp ZP_BYTE:18 242.23529411764704
(byte~) getCharToProcess::return_x#7 return_x zp ZP_BYTE:18 1001.0
(byte) getCharToProcess::return_y
(byte) getCharToProcess::return_y#0 reg byte y 7.333333333333333
(byte) getCharToProcess::return_y#1 return_y zp ZP_BYTE:19 228.66666666666669
(byte~) getCharToProcess::return_y#7 return_y zp ZP_BYTE:19 2002.0
(byte*) getCharToProcess::screen_line
(byte*) getCharToProcess::screen_line#1 screen_line zp ZP_WORD:12 50.5
(byte*) getCharToProcess::screen_line#4 screen_line zp ZP_WORD:12 80.2
(byte) getCharToProcess::x
(byte) getCharToProcess::x#1 x zp ZP_BYTE:15 1001.0
(byte) getCharToProcess::x#2 x zp ZP_BYTE:15 455.0
(byte) getCharToProcess::y
(byte) getCharToProcess::y#1 y zp ZP_BYTE:14 101.0
(byte) getCharToProcess::y#7 y zp ZP_BYTE:14 137.75
(void()) initSprites()
(label) initSprites::@1
(label) initSprites::@2
(label) initSprites::@3
(label) initSprites::@return
(byte) initSprites::i
(byte) initSprites::i#1 reg byte x 16.5
(byte) initSprites::i#2 reg byte x 16.5
(byte*) initSprites::sp
(byte*) initSprites::sp#1 sp zp ZP_WORD:22 16.5
(byte*) initSprites::sp#2 sp zp ZP_WORD:22 16.5
(void()) initSquareTables()
(byte~) initSquareTables::$10 reg byte a 22.0
(byte~) initSquareTables::$12 reg byte a 22.0
(word~) initSquareTables::$14 $14 zp ZP_WORD:26 11.0
(byte~) initSquareTables::$16 reg byte a 22.0
(byte~) initSquareTables::$17 reg byte a 22.0
(byte~) initSquareTables::$2 reg byte a 22.0
(byte~) initSquareTables::$4 reg byte a 22.0
(word~) initSquareTables::$6 $6 zp ZP_WORD:26 11.0
(label) initSquareTables::@1
(label) initSquareTables::@10
(label) initSquareTables::@2
(label) initSquareTables::@3
(label) initSquareTables::@4
(label) initSquareTables::@5
(label) initSquareTables::@6
(label) initSquareTables::@7
(label) initSquareTables::@8
(label) initSquareTables::@9
(label) initSquareTables::@return
(byte) initSquareTables::x
(byte) initSquareTables::x#1 x zp ZP_BYTE:24 16.5
(byte) initSquareTables::x#2 x zp ZP_BYTE:24 5.5
(byte) initSquareTables::x_dist
(byte) initSquareTables::x_dist#0 reg byte a 22.0
(byte) initSquareTables::y
(byte) initSquareTables::y#1 y zp ZP_BYTE:25 16.5
(byte) initSquareTables::y#2 y zp ZP_BYTE:25 5.5
(byte) initSquareTables::y_dist
(byte) initSquareTables::y_dist#0 reg byte a 22.0
interrupt(HARDWARE_ALL)(void()) irqBottom()
(label) irqBottom::@1
(label) irqBottom::@2
(label) irqBottom::@3
(label) irqBottom::@return
(byte) irqBottom::i
(byte) irqBottom::i#1 reg byte x 16.5
(byte) irqBottom::i#2 reg byte x 22.0
interrupt(HARDWARE_ALL)(void()) irqTop()
(label) irqTop::@1
(label) irqTop::@2
(label) irqTop::@3
(label) irqTop::@return
(byte) irqTop::i
(byte) irqTop::i#1 reg byte x 16.5
(byte) irqTop::i#2 reg byte x 22.0
(byte) irqTop::i1
(byte) irqTop::i1#1 reg byte x 16.5
(byte) irqTop::i1#2 reg byte x 22.0
(void()) main()
(byte~) main::$16 reg byte x 12.375
(byte) main::$25 reg byte a 22.0
(byte) main::$26 reg byte a 22.0
(byte) main::$27 reg byte a 22.0
(struct ProcessingChar~) main::$9
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(struct ProcessingChar) main::center
(word) main::center_dist
(word) main::center_dist#0 center_dist zp ZP_WORD:20 22.0
(byte) main::center_x
(byte) main::center_x#0 reg byte x 5.5
(byte) main::center_y
(byte) main::center_y#0 reg byte y 5.5
(byte*) main::dst
(byte*) main::dst#1 dst zp ZP_WORD:4 11.0
(byte*) main::dst#2 dst zp ZP_WORD:4 11.0
(byte) main::i
(byte) main::i#1 i zp ZP_BYTE:6 16.5
(byte) main::i#2 i zp ZP_BYTE:6 4.230769230769231
(byte*) main::src
(byte*) main::src#1 src zp ZP_WORD:2 11.0
(byte*) main::src#2 src zp ZP_WORD:2 16.5
(word()) mul8u((byte) mul8u::a , (byte) mul8u::b)
(byte~) mul8u::$1 reg byte a 202.0
(label) mul8u::@1
(label) mul8u::@2
(label) mul8u::@3
(label) mul8u::@4
(label) mul8u::@return
(byte) mul8u::a
(byte) mul8u::a#0 reg byte x 101.0
(byte) mul8u::a#1 reg byte x 11.0
(byte) mul8u::a#2 reg byte x 11.0
(byte) mul8u::a#3 reg byte x 67.66666666666666
(byte) mul8u::a#6 reg byte x 24.0
(byte) mul8u::b
(byte) mul8u::b#0 reg byte a 22.0
(byte) mul8u::b#1 reg byte a 22.0
(word) mul8u::mb
(word) mul8u::mb#0 mb zp ZP_WORD:28 24.0
(word) mul8u::mb#1 mb zp ZP_WORD:28 202.0
(word) mul8u::mb#2 mb zp ZP_WORD:28 43.57142857142858
(word) mul8u::res
(word) mul8u::res#1 res zp ZP_WORD:26 202.0
(word) mul8u::res#2 res zp ZP_WORD:26 46.42857142857143
(word) mul8u::res#6 res zp ZP_WORD:26 101.0
(word) mul8u::return
(word) mul8u::return#2 return zp ZP_WORD:26 22.0
(word) mul8u::return#3 return zp ZP_WORD:26 22.0
(void()) processChars()
(byte~) processChars::$1 reg byte x 4.0
(byte~) processChars::$12 reg byte a 22.0
(byte~) processChars::$13 reg byte a 22.0
(byte~) processChars::$15 reg byte a 22.0
(word~) processChars::$16 $16 zp ZP_WORD:56 11.0
(byte~) processChars::$18 reg byte x 6.6000000000000005
(word~) processChars::$26 $26 zp ZP_WORD:54 11.0
(byte~) processChars::$27 reg byte a 22.0
(byte~) processChars::$31 reg byte a 22.0
(byte~) processChars::$34 reg byte a 22.0
(byte~) processChars::$36 reg byte a 22.0
(byte~) processChars::$37 reg byte a 22.0
(byte~) processChars::$38 reg byte a 22.0
(byte) processChars::$64 reg byte a 22.0
(byte) processChars::$65 reg byte a 22.0
(byte) processChars::$66 reg byte a 22.0
(label) processChars::@1
(label) processChars::@10
(label) processChars::@11
(label) processChars::@12
(label) processChars::@13
(label) processChars::@14
(label) processChars::@15
(label) processChars::@2
(label) processChars::@3
(label) processChars::@4
(label) processChars::@5
(label) processChars::@6
(label) processChars::@7
(label) processChars::@8
(label) processChars::@9
(label) processChars::@return
(byte) processChars::bitmask
(byte) processChars::bitmask#0 bitmask zp ZP_BYTE:53 2.2916666666666665
(byte) processChars::i
(byte) processChars::i#1 i zp ZP_BYTE:30 16.5
(byte) processChars::i#10 i zp ZP_BYTE:30 1.4666666666666666
(byte) processChars::numActive
(byte) processChars::numActive#1 numActive zp ZP_BYTE:31 22.0
(byte) processChars::numActive#10 numActive zp ZP_BYTE:31 0.7674418604651163
(byte) processChars::numActive#3 numActive zp ZP_BYTE:31 11.666666666666666
(struct ProcessingSprite*) processChars::processing
(struct ProcessingSprite*) processChars::processing#0 processing zp ZP_WORD:51 0.3235294117647059
(byte) processChars::xchar
(byte) processChars::xchar#0 reg byte a 22.0
(word) processChars::xpos
(word) processChars::xpos#0 xpos zp ZP_WORD:54 2.0625
(byte) processChars::ychar
(byte) processChars::ychar#0 reg byte a 22.0
(byte) processChars::ypos
(byte) processChars::ypos#0 ypos zp ZP_BYTE:58 2.75
(void()) setupRasterIrq((word) setupRasterIrq::raster , (void()*) setupRasterIrq::irqRoutine)
(label) setupRasterIrq::@1
(label) setupRasterIrq::@2
(label) setupRasterIrq::@return
(void()*) setupRasterIrq::irqRoutine
(const void()*) setupRasterIrq::irqRoutine#0 irqRoutine = &interrupt(HARDWARE_ALL)(void()) irqTop()
(word) setupRasterIrq::raster
(void()) startProcessing((byte) startProcessing::center_x , (byte) startProcessing::center_y , (word) startProcessing::center_dist)
(word~) startProcessing::$0 $0 zp ZP_WORD:34 3.0
(word~) startProcessing::$1 $1 zp ZP_WORD:34 4.0
(word~) startProcessing::$10 $10 zp ZP_WORD:40 4.0
(word~) startProcessing::$11 $11 zp ZP_WORD:40 4.0
(word~) startProcessing::$12 $12 zp ZP_WORD:40 4.0
(word~) startProcessing::$14 $14 zp ZP_WORD:42 4.0
(word~) startProcessing::$15 $15 zp ZP_WORD:42 4.0
(word~) startProcessing::$16 $16 zp ZP_WORD:42 4.0
(byte*~) startProcessing::$2 $2 zp ZP_WORD:34 1.2000000000000002
(byte~) startProcessing::$21 reg byte a 2.0
(word~) startProcessing::$22 $22 zp ZP_WORD:45 0.5714285714285714
(byte~) startProcessing::$29 reg byte a 2002.0
(byte~) startProcessing::$30 reg byte x 2.25
(word~) startProcessing::$4 $4 zp ZP_WORD:10 4.0
(byte) startProcessing::$40 reg byte a 2002.0
(byte) startProcessing::$41 reg byte a 2002.0
(byte) startProcessing::$42 reg byte a 2002.0
(word) startProcessing::$44 $44 zp ZP_WORD:36 4.0
(word) startProcessing::$45 $45 zp ZP_WORD:34 4.0
(byte) startProcessing::$47 reg byte a 4.0
(byte) startProcessing::$48 reg byte a 4.0
(byte) startProcessing::$49 reg byte a 4.0
(word~) startProcessing::$5 $5 zp ZP_WORD:10 4.0
(word~) startProcessing::$7 $7 zp ZP_WORD:8 4.0
(word~) startProcessing::$8 $8 zp ZP_WORD:8 4.0
(label) startProcessing::@1
(label) startProcessing::@2
(label) startProcessing::@3
(label) startProcessing::@4
(label) startProcessing::@5
(label) startProcessing::@6
(label) startProcessing::@7
(label) startProcessing::@8
(label) startProcessing::@9
(label) startProcessing::@return
(struct ProcessingChar) startProcessing::center
(word) startProcessing::center_dist
(byte) startProcessing::center_x
(byte) startProcessing::center_x#0 center_x zp ZP_BYTE:32 0.3846153846153846
(byte) startProcessing::center_y
(byte) startProcessing::center_y#0 center_y zp ZP_BYTE:33 0.2619047619047619
(byte) startProcessing::ch
(byte) startProcessing::ch#0 reg byte a 2.0
(byte*) startProcessing::chargenData
(byte*) startProcessing::chargenData#0 chargenData zp ZP_WORD:8 1.3333333333333333
(byte*) startProcessing::chargenData#1 chargenData zp ZP_WORD:8 67.33333333333333
(byte*) startProcessing::chargenData#2 chargenData zp ZP_WORD:8 101.66666666666666
(byte) startProcessing::freeIdx
(byte) startProcessing::freeIdx#2 freeIdx zp ZP_BYTE:7 29.90909090909092
(byte) startProcessing::freeIdx#6 reg byte x 22.444444444444443
(byte~) startProcessing::freeIdx#7 reg byte x 202.0
(byte~) startProcessing::freeIdx#8 freeIdx zp ZP_BYTE:7 202.0
(byte) startProcessing::i
(byte) startProcessing::i#1 i zp ZP_BYTE:7 1501.5
(byte) startProcessing::i#2 i zp ZP_BYTE:7 1001.0000000000001
(byte) startProcessing::i1
(byte) startProcessing::i1#1 reg byte x 151.5
(byte) startProcessing::i1#2 reg byte x 50.5
(byte*) startProcessing::screenPtr
(byte*) startProcessing::screenPtr#0 screenPtr zp ZP_WORD:38 0.1
(byte*) startProcessing::spriteData
(byte*) startProcessing::spriteData#0 spriteData zp ZP_WORD:10 0.5714285714285714
(byte*) startProcessing::spriteData#1 spriteData zp ZP_WORD:10 50.5
(byte*) startProcessing::spriteData#2 spriteData zp ZP_WORD:10 152.5
(byte) startProcessing::spriteIdx
(byte) startProcessing::spritePtr
(byte) startProcessing::spritePtr#0 spritePtr zp ZP_BYTE:44 0.3333333333333333
(word) startProcessing::spriteX
(word) startProcessing::spriteX#0 spriteX zp ZP_WORD:40 0.3333333333333333
(word) startProcessing::spriteY
(word) startProcessing::spriteY#0 spriteY zp ZP_WORD:42 0.4444444444444444
zp ZP_WORD:2 [ main::src#2 main::src#1 ]
zp ZP_WORD:4 [ main::dst#2 main::dst#1 ]
zp ZP_BYTE:6 [ main::i#2 main::i#1 ]
reg byte x [ startProcessing::freeIdx#6 startProcessing::freeIdx#7 ]
zp ZP_BYTE:7 [ startProcessing::freeIdx#2 startProcessing::freeIdx#8 startProcessing::i#2 startProcessing::i#1 ]
zp ZP_WORD:8 [ startProcessing::chargenData#2 startProcessing::chargenData#0 startProcessing::chargenData#1 startProcessing::$8 startProcessing::$7 ]
zp ZP_WORD:10 [ startProcessing::spriteData#2 startProcessing::spriteData#0 startProcessing::spriteData#1 startProcessing::$5 startProcessing::$4 ]
reg byte x [ startProcessing::i1#2 startProcessing::i1#1 ]
zp ZP_WORD:12 [ getCharToProcess::screen_line#4 getCharToProcess::screen_line#1 ]
zp ZP_BYTE:14 [ getCharToProcess::y#7 getCharToProcess::y#1 ]
zp ZP_BYTE:15 [ getCharToProcess::x#2 getCharToProcess::x#1 ]
zp ZP_WORD:16 [ getCharToProcess::closest_dist#2 getCharToProcess::closest_dist#8 getCharToProcess::closest_dist#10 getCharToProcess::closest_dist#12 ]
zp ZP_BYTE:18 [ getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
zp ZP_BYTE:19 [ getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
zp ZP_WORD:20 [ getCharToProcess::return_dist#1 getCharToProcess::return_dist#5 getCharToProcess::return_dist#6 getCharToProcess::dist#0 getCharToProcess::return_dist#0 main::center_dist#0 ]
zp ZP_WORD:22 [ initSprites::sp#2 initSprites::sp#1 ]
reg byte x [ initSprites::i#2 initSprites::i#1 ]
zp ZP_BYTE:24 [ initSquareTables::x#2 initSquareTables::x#1 ]
reg byte a [ initSquareTables::x_dist#0 initSquareTables::$4 initSquareTables::$2 ]
zp ZP_BYTE:25 [ initSquareTables::y#2 initSquareTables::y#1 ]
reg byte a [ initSquareTables::y_dist#0 initSquareTables::$12 initSquareTables::$10 ]
reg byte a [ mul8u::b#1 ]
reg byte a [ mul8u::b#0 ]
reg byte x [ mul8u::a#3 mul8u::a#6 mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
zp ZP_WORD:26 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mul8u::return#3 initSquareTables::$6 initSquareTables::$14 ]
zp ZP_WORD:28 [ mul8u::mb#2 mul8u::mb#0 mul8u::mb#1 ]
reg byte x [ irqBottom::i#2 irqBottom::i#1 ]
zp ZP_BYTE:30 [ processChars::i#10 processChars::i#1 ]
zp ZP_BYTE:31 [ processChars::numActive#10 processChars::numActive#3 processChars::numActive#1 ]
reg byte x [ irqTop::i#2 irqTop::i#1 ]
reg byte x [ irqTop::i1#2 irqTop::i1#1 ]
reg byte a [ main::$25 ]
reg byte a [ main::$26 ]
reg byte a [ main::$27 ]
reg byte x [ main::$16 ]
reg byte x [ getCharToProcess::return_x#0 ]
reg byte y [ getCharToProcess::return_y#0 ]
reg byte x [ main::center_x#0 ]
reg byte y [ main::center_y#0 ]
zp ZP_BYTE:32 [ startProcessing::center_x#0 ]
zp ZP_BYTE:33 [ startProcessing::center_y#0 ]
reg byte a [ startProcessing::$40 ]
reg byte a [ startProcessing::$41 ]
reg byte a [ startProcessing::$42 ]
reg byte a [ startProcessing::$29 ]
zp ZP_WORD:34 [ startProcessing::$0 startProcessing::$45 startProcessing::$1 startProcessing::$2 ]
zp ZP_WORD:36 [ startProcessing::$44 ]
zp ZP_WORD:38 [ startProcessing::screenPtr#0 ]
reg byte a [ startProcessing::ch#0 ]
zp ZP_WORD:40 [ startProcessing::$10 startProcessing::$11 startProcessing::$12 startProcessing::spriteX#0 ]
zp ZP_WORD:42 [ startProcessing::$14 startProcessing::$15 startProcessing::$16 startProcessing::spriteY#0 ]
zp ZP_BYTE:44 [ startProcessing::spritePtr#0 ]
reg byte a [ startProcessing::$21 ]
zp ZP_WORD:45 [ startProcessing::$22 ]
reg byte a [ startProcessing::$47 ]
reg byte a [ startProcessing::$48 ]
reg byte a [ startProcessing::$49 ]
reg byte x [ startProcessing::$30 ]
reg byte x [ getCharToProcess::$13 ]
reg byte a [ getCharToProcess::$14 ]
zp ZP_WORD:47 [ getCharToProcess::$9 getCharToProcess::$16 getCharToProcess::$10 getCharToProcess::$11 ]
zp ZP_WORD:49 [ getCharToProcess::$15 ]
reg byte a [ initSquareTables::$16 ]
reg byte a [ initSquareTables::$17 ]
reg byte a [ mul8u::$1 ]
reg byte a [ processChars::$64 ]
reg byte a [ processChars::$65 ]
reg byte a [ processChars::$66 ]
reg byte a [ processChars::$36 ]
zp ZP_WORD:51 [ processChars::processing#0 ]
zp ZP_BYTE:53 [ processChars::bitmask#0 ]
zp ZP_WORD:54 [ processChars::xpos#0 processChars::$26 ]
reg byte a [ processChars::$12 ]
reg byte a [ processChars::$13 ]
reg byte x [ processChars::$18 ]
reg byte a [ processChars::$15 ]
zp ZP_WORD:56 [ processChars::$16 ]
zp ZP_BYTE:58 [ processChars::ypos#0 ]
reg byte a [ processChars::$27 ]
reg byte a [ processChars::xchar#0 ]
reg byte a [ processChars::$37 ]
reg byte a [ processChars::$31 ]
reg byte a [ processChars::ychar#0 ]
reg byte a [ processChars::$38 ]
reg byte x [ processChars::$1 ]
reg byte a [ processChars::$34 ]
FINAL ASSEMBLER
Score: 243580
//SEG0 File Comments
// Black Hole at the center of the BASIC screen sucking in letters
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG2 Global Constants & labels
.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_STATUS = $a
.const OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR = $b
// Processor port data direction register
.label PROCPORT_DDR = 0
// Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
.const PROCPORT_DDR_MEMORY_MASK = 7
// Processor Port Register controlling RAM/ROM configuration and the datasette
.label PROCPORT = 1
// RAM in $A000, $E000 I/O in $D000
.const PROCPORT_RAM_IO = $35
// RAM in $A000, $E000 CHAR ROM in $D000
.const PROCPORT_RAM_CHARROM = $31
// The address of the CHARGEN character set
.label CHARGEN = $d000
// 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 SPRITE_PTRS = $3f8
.label SPRITES_XPOS = $d000
.label SPRITES_YPOS = $d001
.label SPRITES_XMSB = $d010
.label RASTER = $d012
.label SPRITES_ENABLE = $d015
.label SPRITES_EXPAND_Y = $d017
.label SPRITES_MC = $d01c
.label SPRITES_EXPAND_X = $d01d
.label SPRITES_COLS = $d027
.label VIC_CONTROL = $d011
// VIC II IRQ Status Register
.label IRQ_STATUS = $d019
// VIC II IRQ Enable Register
.label IRQ_ENABLE = $d01a
// Bits for the IRQ Status/Enable Registers
.const IRQ_RASTER = 1
// Color Ram
.label COLS = $d800
// CIA#1 Interrupt Status & Control Register
.label CIA1_INTERRUPT = $dc0d
// Value that disables all CIA interrupts when stored to the CIA Interrupt registers
.const CIA_INTERRUPT_CLEAR = $7f
// The vector used when the HARDWARE serves IRQ interrupts
.label HARDWARE_IRQ = $fffe
.const LIGHT_BLUE = $e
// Address of the screen
.label SCREEN = $400
// Sprite data for the animating sprites
.label SPRITE_DATA = $2000
// Values added to VX
.label VXSIN = $2200
// Values added to VY
.label VYSIN = $2280
// Max number of chars processed at once
.const NUM_PROCESSING = 8
// Distance value meaning not found
.const NOT_FOUND = $ffff
// Values for ProcessingSprite.status
.const STATUS_FREE = 0
.const STATUS_NEW = 1
.const STATUS_PROCESSING = 2
.const RASTER_IRQ_TOP = $30
.const RASTER_IRQ_MIDDLE = $ff
.const XPOS_RIGHTMOST = BORDER_XPOS_RIGHT<<4
.const YPOS_BOTTOMMOST = BORDER_YPOS_BOTTOM<<4
.const XPOS_LEFTMOST = BORDER_XPOS_LEFT-8<<4
.const YPOS_TOPMOST = BORDER_YPOS_TOP-8<<4
//SEG3 @begin
//SEG4 @1
//SEG5 kickasm(location (const word*) VXSIN#0) {{ .for(var i=0; i<40; i++) { .word -sin(toRadians([i*360]/40))*4 } }}
//SEG6 kickasm(location (const word*) VYSIN#0) {{ .for(var i=0; i<25; i++) { .word -sin(toRadians([i*360]/25))*4 } }}
//SEG7 [3] phi from @1 to @2 [phi:@1->@2]
//SEG8 @2
//SEG9 [4] call main
//SEG10 [6] phi from @2 to main [phi:@2->main]
//SEG11 [5] phi from @2 to @end [phi:@2->@end]
//SEG12 @end
//SEG13 main
main: {
.label src = 2
.label dst = 4
.label i = 6
.label center_dist = $14
//SEG14 [7] call initSquareTables
//SEG15 [158] phi from main to initSquareTables [phi:main->initSquareTables]
jsr initSquareTables
//SEG16 [8] phi from main to main::@1 [phi:main->main::@1]
//SEG17 [8] phi (byte*) main::dst#2 = (const byte[$3e8]) SCREEN_COPY#0 [phi:main->main::@1#0] -- pbuz1=pbuc1
lda #<SCREEN_COPY
sta dst
lda #>SCREEN_COPY
sta dst+1
//SEG18 [8] phi (byte*) main::src#2 = (const byte*) SCREEN#0 [phi:main->main::@1#1] -- pbuz1=pbuc1
lda #<SCREEN
sta src
lda #>SCREEN
sta src+1
// Copy screen to screen copy
//SEG19 [8] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
//SEG20 [8] phi (byte*) main::dst#2 = (byte*) main::dst#1 [phi:main::@1->main::@1#0] -- register_copy
//SEG21 [8] phi (byte*) main::src#2 = (byte*) main::src#1 [phi:main::@1->main::@1#1] -- register_copy
//SEG22 main::@1
b1:
//SEG23 [9] *((byte*) main::dst#2) ← *((byte*) main::src#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (src),y
sta (dst),y
//SEG24 [10] (byte*) main::src#1 ← ++ (byte*) main::src#2 -- pbuz1=_inc_pbuz1
inc src
bne !+
inc src+1
!:
//SEG25 [11] (byte*) main::dst#1 ← ++ (byte*) main::dst#2 -- pbuz1=_inc_pbuz1
inc dst
bne !+
inc dst+1
!:
//SEG26 [12] if((byte*) main::src#1!=(const byte*) SCREEN#0+(word) $3e8) goto main::@1 -- pbuz1_neq_pbuc1_then_la1
lda src+1
cmp #>SCREEN+$3e8
bne b1
lda src
cmp #<SCREEN+$3e8
bne b1
//SEG27 [13] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
//SEG28 [13] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
lda #0
sta i
// Init processing array
//SEG29 [13] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
//SEG30 [13] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@2->main::@2#0] -- register_copy
//SEG31 main::@2
b2:
//SEG32 [14] (byte) main::$25 ← (byte) main::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda i
asl
//SEG33 [15] (byte) main::$26 ← (byte) main::$25 + (byte) main::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc i
//SEG34 [16] (byte) main::$27 ← (byte) main::$26 << (byte) 2 -- vbuaa=vbuaa_rol_2
asl
asl
//SEG35 [17] (byte~) main::$16 ← (byte) main::$27 + (byte) main::i#2 -- vbuxx=vbuaa_plus_vbuz1
clc
adc i
tax
//SEG36 [18] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
lda #0
sta PROCESSING,x
sta PROCESSING+1,x
//SEG37 [19] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
//SEG38 [20] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
//SEG39 [21] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) main::$16) ← (byte) 0 -- pwuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
//SEG40 [22] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
//SEG41 [23] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) main::$16) ← (byte) 0 -- pbuc1_derefidx_vbuxx=vbuc2
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
//SEG42 [24] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) main::$16) ← (const byte) STATUS_FREE#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #STATUS_FREE
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
//SEG43 [25] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) main::$16) ← (byte*) 0 -- pptc1_derefidx_vbuxx=pbuc2
lda #<0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
//SEG44 [26] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG45 [27] if((byte) main::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp i
bne b2
//SEG46 [28] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
//SEG47 main::@3
//SEG48 [29] call initSprites
//SEG49 [145] phi from main::@3 to initSprites [phi:main::@3->initSprites]
jsr initSprites
//SEG50 [30] phi from main::@3 to main::@8 [phi:main::@3->main::@8]
//SEG51 main::@8
//SEG52 [31] call setupRasterIrq
jsr setupRasterIrq
//SEG53 [32] phi from main::@5 main::@8 to main::@4 [phi:main::@5/main::@8->main::@4]
b3:
// Main loop
//SEG54 main::@4
//SEG55 [33] call getCharToProcess
//SEG56 [107] phi from main::@4 to getCharToProcess [phi:main::@4->getCharToProcess]
jsr getCharToProcess
//SEG57 [34] (byte) getCharToProcess::return_x#0 ← (byte) getCharToProcess::return_x#1 -- vbuxx=vbuz1
ldx getCharToProcess.return_x
//SEG58 [35] (byte) getCharToProcess::return_y#0 ← (byte) getCharToProcess::return_y#1 -- vbuyy=vbuz1
ldy getCharToProcess.return_y
//SEG59 [36] (word) getCharToProcess::return_dist#0 ← (word) getCharToProcess::return_dist#1
//SEG60 main::@9
//SEG61 [37] (byte) main::center_x#0 ← (byte) getCharToProcess::return_x#0
//SEG62 [38] (byte) main::center_y#0 ← (byte) getCharToProcess::return_y#0
//SEG63 [39] (word) main::center_dist#0 ← (word) getCharToProcess::return_dist#0
//SEG64 [40] if((word) main::center_dist#0!=(const word) NOT_FOUND#0) goto main::@5 -- vwuz1_neq_vwuc1_then_la1
lda center_dist+1
cmp #>NOT_FOUND
bne b5
lda center_dist
cmp #<NOT_FOUND
bne b5
//SEG65 main::@6
//SEG66 [41] *((const byte*) SCREEN#0+(word) $3e7) ← (byte) '.' -- _deref_pbuc1=vbuc2
lda #'.'
sta SCREEN+$3e7
//SEG67 main::@7
b7:
//SEG68 [42] *((const byte*) COLS#0+(word) $3e7) ← ++ *((const byte*) COLS#0+(word) $3e7) -- _deref_pbuc1=_inc__deref_pbuc1
inc COLS+$3e7
jmp b7
//SEG69 main::@5
b5:
//SEG70 [43] (byte) startProcessing::center_x#0 ← (byte) main::center_x#0 -- vbuz1=vbuxx
stx startProcessing.center_x
//SEG71 [44] (byte) startProcessing::center_y#0 ← (byte) main::center_y#0 -- vbuz1=vbuyy
sty startProcessing.center_y
//SEG72 [45] call startProcessing
//SEG73 [46] phi from main::@5 to startProcessing [phi:main::@5->startProcessing]
jsr startProcessing
jmp b3
}
//SEG74 startProcessing
// Start processing a char - by inserting it into the PROCESSING array
// startProcessing(byte zeropage($20) center_x, byte zeropage($21) center_y)
startProcessing: {
.label _0 = $22
.label _1 = $22
.label _2 = $22
.label _4 = $a
.label _5 = $a
.label _7 = 8
.label _8 = 8
.label _10 = $28
.label _11 = $28
.label _12 = $28
.label _14 = $2a
.label _15 = $2a
.label _16 = $2a
.label _22 = $2d
.label center_x = $20
.label center_y = $21
.label i = 7
.label screenPtr = $26
.label spriteData = $a
.label chargenData = 8
.label spriteX = $28
.label spriteY = $2a
.label spritePtr = $2c
.label freeIdx = 7
.label _44 = $24
.label _45 = $22
//SEG75 [47] phi from startProcessing to startProcessing::@1 [phi:startProcessing->startProcessing::@1]
//SEG76 [47] phi (byte) startProcessing::freeIdx#6 = (byte) $ff [phi:startProcessing->startProcessing::@1#0] -- vbuxx=vbuc1
ldx #$ff
//SEG77 startProcessing::@1
b1:
//SEG78 [48] phi from startProcessing::@1 to startProcessing::@2 [phi:startProcessing::@1->startProcessing::@2]
//SEG79 [48] phi (byte) startProcessing::i#2 = (byte) 0 [phi:startProcessing::@1->startProcessing::@2#0] -- vbuz1=vbuc1
lda #0
sta i
//SEG80 [48] phi from startProcessing::@3 to startProcessing::@2 [phi:startProcessing::@3->startProcessing::@2]
//SEG81 [48] phi (byte) startProcessing::i#2 = (byte) startProcessing::i#1 [phi:startProcessing::@3->startProcessing::@2#0] -- register_copy
//SEG82 startProcessing::@2
b2:
//SEG83 [49] (byte) startProcessing::$40 ← (byte) startProcessing::i#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda i
asl
//SEG84 [50] (byte) startProcessing::$41 ← (byte) startProcessing::$40 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc i
//SEG85 [51] (byte) startProcessing::$42 ← (byte) startProcessing::$41 << (byte) 2 -- vbuaa=vbuaa_rol_2
asl
asl
//SEG86 [52] (byte~) startProcessing::$29 ← (byte) startProcessing::$42 + (byte) startProcessing::i#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc i
//SEG87 [53] if(*((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$29)!=(const byte) STATUS_FREE#0) 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:
//SEG88 [54] phi from startProcessing::@2 startProcessing::@9 to startProcessing::@4 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4]
//SEG89 [54] phi (byte) startProcessing::freeIdx#2 = (byte) startProcessing::i#2 [phi:startProcessing::@2/startProcessing::@9->startProcessing::@4#0] -- register_copy
//SEG90 startProcessing::@4
b4:
//SEG91 [55] if((byte) startProcessing::freeIdx#2==(byte) $ff) goto startProcessing::@8 -- vbuz1_eq_vbuc1_then_la1
lda #$ff
cmp freeIdx
bne !b8+
jmp b8
!b8:
//SEG92 startProcessing::@5
//SEG93 [56] (word~) startProcessing::$0 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2
lda center_y
sta _0
lda #0
sta _0+1
//SEG94 [57] (word) startProcessing::$44 ← (word~) startProcessing::$0 << (byte) 2 -- vwuz1=vwuz2_rol_2
lda _0
asl
sta _44
lda _0+1
rol
sta _44+1
asl _44
rol _44+1
//SEG95 [58] (word) startProcessing::$45 ← (word) startProcessing::$44 + (word~) startProcessing::$0 -- vwuz1=vwuz2_plus_vwuz1
lda _45
clc
adc _44
sta _45
lda _45+1
adc _44+1
sta _45+1
//SEG96 [59] (word~) startProcessing::$1 ← (word) startProcessing::$45 << (byte) 3 -- vwuz1=vwuz1_rol_3
asl _1
rol _1+1
asl _1
rol _1+1
asl _1
rol _1+1
//SEG97 [60] (byte*~) startProcessing::$2 ← (const byte*) SCREEN#0 + (word~) startProcessing::$1 -- pbuz1=pbuc1_plus_vwuz1
clc
lda _2
adc #<SCREEN
sta _2
lda _2+1
adc #>SCREEN
sta _2+1
//SEG98 [61] (byte*) startProcessing::screenPtr#0 ← (byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0 -- pbuz1=pbuz2_plus_vbuz3
lda center_x
clc
adc _2
sta screenPtr
lda #0
adc _2+1
sta screenPtr+1
//SEG99 [62] (word~) startProcessing::$4 ← (word)(byte) startProcessing::freeIdx#2 -- vwuz1=_word_vbuz2
lda freeIdx
sta _4
lda #0
sta _4+1
//SEG100 [63] (word~) startProcessing::$5 ← (word~) startProcessing::$4 << (byte) 6 -- vwuz1=vwuz1_rol_6
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
asl _5
rol _5+1
//SEG101 [64] (byte*) startProcessing::spriteData#0 ← (const byte*) SPRITE_DATA#0 + (word~) startProcessing::$5 -- pbuz1=pbuc1_plus_vwuz1
clc
lda spriteData
adc #<SPRITE_DATA
sta spriteData
lda spriteData+1
adc #>SPRITE_DATA
sta spriteData+1
//SEG102 [65] (byte) startProcessing::ch#0 ← *((byte*~) startProcessing::$2 + (byte) startProcessing::center_x#0) -- vbuaa=pbuz1_derefidx_vbuz2
ldy center_x
lda (_2),y
//SEG103 [66] (word~) startProcessing::$7 ← (word)(byte) startProcessing::ch#0 -- vwuz1=_word_vbuaa
sta _7
lda #0
sta _7+1
//SEG104 [67] (word~) startProcessing::$8 ← (word~) startProcessing::$7 << (byte) 3 -- vwuz1=vwuz1_rol_3
asl _8
rol _8+1
asl _8
rol _8+1
asl _8
rol _8+1
//SEG105 [68] (byte*) startProcessing::chargenData#0 ← (const byte*) CHARGEN#0 + (word~) startProcessing::$8 -- pbuz1=pbuc1_plus_vwuz1
clc
lda chargenData
adc #<CHARGEN
sta chargenData
lda chargenData+1
adc #>CHARGEN
sta chargenData+1
//SEG106 asm { sei }
sei
//SEG107 [70] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_CHARROM#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_CHARROM
sta PROCPORT
//SEG108 [71] phi from startProcessing::@5 to startProcessing::@6 [phi:startProcessing::@5->startProcessing::@6]
//SEG109 [71] phi (byte) startProcessing::i1#2 = (byte) 0 [phi:startProcessing::@5->startProcessing::@6#0] -- vbuxx=vbuc1
ldx #0
//SEG110 [71] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#0 [phi:startProcessing::@5->startProcessing::@6#1] -- register_copy
//SEG111 [71] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#0 [phi:startProcessing::@5->startProcessing::@6#2] -- register_copy
//SEG112 [71] phi from startProcessing::@6 to startProcessing::@6 [phi:startProcessing::@6->startProcessing::@6]
//SEG113 [71] phi (byte) startProcessing::i1#2 = (byte) startProcessing::i1#1 [phi:startProcessing::@6->startProcessing::@6#0] -- register_copy
//SEG114 [71] phi (byte*) startProcessing::spriteData#2 = (byte*) startProcessing::spriteData#1 [phi:startProcessing::@6->startProcessing::@6#1] -- register_copy
//SEG115 [71] phi (byte*) startProcessing::chargenData#2 = (byte*) startProcessing::chargenData#1 [phi:startProcessing::@6->startProcessing::@6#2] -- register_copy
//SEG116 startProcessing::@6
b6:
//SEG117 [72] *((byte*) startProcessing::spriteData#2) ← *((byte*) startProcessing::chargenData#2) -- _deref_pbuz1=_deref_pbuz2
ldy #0
lda (chargenData),y
sta (spriteData),y
//SEG118 [73] (byte*) startProcessing::spriteData#1 ← (byte*) startProcessing::spriteData#2 + (byte) 3 -- pbuz1=pbuz1_plus_vbuc1
lda #3
clc
adc spriteData
sta spriteData
bcc !+
inc spriteData+1
!:
//SEG119 [74] (byte*) startProcessing::chargenData#1 ← ++ (byte*) startProcessing::chargenData#2 -- pbuz1=_inc_pbuz1
inc chargenData
bne !+
inc chargenData+1
!:
//SEG120 [75] (byte) startProcessing::i1#1 ← ++ (byte) startProcessing::i1#2 -- vbuxx=_inc_vbuxx
inx
//SEG121 [76] if((byte) startProcessing::i1#1!=(byte) 8) goto startProcessing::@6 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne b6
//SEG122 startProcessing::@7
//SEG123 [77] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
//SEG124 asm { cli }
cli
//SEG125 [79] (word~) startProcessing::$10 ← (word)(byte) startProcessing::center_x#0 -- vwuz1=_word_vbuz2
lda center_x
sta _10
lda #0
sta _10+1
//SEG126 [80] (word~) startProcessing::$11 ← (word~) startProcessing::$10 << (byte) 3 -- vwuz1=vwuz1_rol_3
asl _11
rol _11+1
asl _11
rol _11+1
asl _11
rol _11+1
//SEG127 [81] (word~) startProcessing::$12 ← (const byte) BORDER_XPOS_LEFT#0 + (word~) startProcessing::$11 -- vwuz1=vbuc1_plus_vwuz1
lda #BORDER_XPOS_LEFT
clc
adc _12
sta _12
bcc !+
inc _12+1
!:
//SEG128 [82] (word) startProcessing::spriteX#0 ← (word~) startProcessing::$12 << (byte) 4 -- vwuz1=vwuz1_rol_4
asl spriteX
rol spriteX+1
asl spriteX
rol spriteX+1
asl spriteX
rol spriteX+1
asl spriteX
rol spriteX+1
//SEG129 [83] (word~) startProcessing::$14 ← (word)(byte) startProcessing::center_y#0 -- vwuz1=_word_vbuz2
lda center_y
sta _14
lda #0
sta _14+1
//SEG130 [84] (word~) startProcessing::$15 ← (word~) startProcessing::$14 << (byte) 3 -- vwuz1=vwuz1_rol_3
asl _15
rol _15+1
asl _15
rol _15+1
asl _15
rol _15+1
//SEG131 [85] (word~) startProcessing::$16 ← (const byte) BORDER_YPOS_TOP#0 + (word~) startProcessing::$15 -- vwuz1=vbuc1_plus_vwuz1
lda #BORDER_YPOS_TOP
clc
adc _16
sta _16
bcc !+
inc _16+1
!:
//SEG132 [86] (word) startProcessing::spriteY#0 ← (word~) startProcessing::$16 << (byte) 4 -- vwuz1=vwuz1_rol_4
asl spriteY
rol spriteY+1
asl spriteY
rol spriteY+1
asl spriteY
rol spriteY+1
asl spriteY
rol spriteY+1
//SEG133 [87] (byte) startProcessing::spritePtr#0 ← (byte)(const byte*) SPRITE_DATA#0/(byte) $40 + (byte) startProcessing::freeIdx#2 -- vbuz1=vbuc1_plus_vbuz2
lax freeIdx
axs #-[SPRITE_DATA/$40]
stx spritePtr
//SEG134 [88] (byte~) startProcessing::$21 ← (byte) startProcessing::freeIdx#2 << (byte) 3 -- vbuaa=vbuz1_rol_3
lda freeIdx
asl
asl
asl
//SEG135 [89] (word~) startProcessing::$22 ← (word)(byte~) startProcessing::$21 -- vwuz1=_word_vbuaa
sta _22
lda #0
sta _22+1
//SEG136 [90] (byte) startProcessing::$47 ← (byte) startProcessing::freeIdx#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda freeIdx
asl
//SEG137 [91] (byte) startProcessing::$48 ← (byte) startProcessing::$47 + (byte) startProcessing::freeIdx#2 -- vbuaa=vbuaa_plus_vbuz1
clc
adc freeIdx
//SEG138 [92] (byte) startProcessing::$49 ← (byte) startProcessing::$48 << (byte) 2 -- vbuaa=vbuaa_rol_2
asl
asl
//SEG139 [93] (byte~) startProcessing::$30 ← (byte) startProcessing::$49 + (byte) startProcessing::freeIdx#2 -- vbuxx=vbuaa_plus_vbuz1
clc
adc freeIdx
tax
//SEG140 [94] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) startProcessing::$30) ← (word) startProcessing::spriteX#0 -- pwuc1_derefidx_vbuxx=vwuz1
lda spriteX
sta PROCESSING,x
lda spriteX+1
sta PROCESSING+1,x
//SEG141 [95] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y + (byte~) startProcessing::$30) ← (word) startProcessing::spriteY#0 -- pwuc1_derefidx_vbuxx=vwuz1
lda spriteY
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y,x
lda spriteY+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_Y+1,x
//SEG142 [96] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX + (byte~) startProcessing::$30) ← (word~) startProcessing::$22 -- pwuc1_derefidx_vbuxx=vwuz1
lda _22
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX,x
lda _22+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VX+1,x
//SEG143 [97] *((word*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY + (byte~) startProcessing::$30) ← (byte) $3c -- pwuc1_derefidx_vbuxx=vbuc2
lda #$3c
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY,x
lda #0
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_VY+1,x
//SEG144 [98] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID + (byte~) startProcessing::$30) ← (byte) startProcessing::freeIdx#2 -- pbuc1_derefidx_vbuxx=vbuz1
lda freeIdx
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_ID,x
//SEG145 [99] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR + (byte~) startProcessing::$30) ← (byte) startProcessing::spritePtr#0 -- pbuc1_derefidx_vbuxx=vbuz1
lda spritePtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_PTR,x
//SEG146 [100] *((byte*)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS + (byte~) startProcessing::$30) ← (const byte) STATUS_NEW#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #STATUS_NEW
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_STATUS,x
//SEG147 [101] *((byte**)(const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0+(const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR + (byte~) startProcessing::$30) ← (byte*) startProcessing::screenPtr#0 -- pptc1_derefidx_vbuxx=pbuz1
lda screenPtr
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR,x
lda screenPtr+1
sta PROCESSING+OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR+1,x
//SEG148 startProcessing::@return
//SEG149 [102] return
rts
//SEG150 startProcessing::@8
b8:
//SEG151 [103] (byte~) startProcessing::freeIdx#7 ← (byte) startProcessing::freeIdx#2 -- vbuxx=vbuz1
ldx freeIdx
//SEG152 [47] phi from startProcessing::@8 to startProcessing::@1 [phi:startProcessing::@8->startProcessing::@1]
//SEG153 [47] phi (byte) startProcessing::freeIdx#6 = (byte~) startProcessing::freeIdx#7 [phi:startProcessing::@8->startProcessing::@1#0] -- register_copy
jmp b1
//SEG154 startProcessing::@3
b3:
//SEG155 [104] (byte) startProcessing::i#1 ← ++ (byte) startProcessing::i#2 -- vbuz1=_inc_vbuz1
inc i
//SEG156 [105] if((byte) startProcessing::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto startProcessing::@2 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp i
beq !b2+
jmp b2
!b2:
//SEG157 startProcessing::@9
//SEG158 [106] (byte~) startProcessing::freeIdx#8 ← (byte) startProcessing::freeIdx#6 -- vbuz1=vbuxx
stx freeIdx
jmp b4
}
//SEG159 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 _9 = $2f
.label _10 = $2f
.label _11 = $2f
.label return_dist = $14
.label x = $f
.label dist = $14
.label screen_line = $c
.label y = $e
.label return_x = $12
.label return_y = $13
.label closest_dist = $10
.label closest_x = $12
.label closest_y = $13
.label _15 = $31
.label _16 = $2f
//SEG160 [108] phi from getCharToProcess to getCharToProcess::@1 [phi:getCharToProcess->getCharToProcess::@1]
//SEG161 [108] phi (byte) getCharToProcess::closest_y#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#0] -- vbuz1=vbuc1
lda #0
sta closest_y
//SEG162 [108] phi (byte) getCharToProcess::closest_x#9 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#1] -- vbuz1=vbuc1
sta closest_x
//SEG163 [108] phi (word) getCharToProcess::closest_dist#8 = (const word) NOT_FOUND#0 [phi:getCharToProcess->getCharToProcess::@1#2] -- vwuz1=vwuc1
lda #<NOT_FOUND
sta closest_dist
lda #>NOT_FOUND
sta closest_dist+1
//SEG164 [108] phi (byte) getCharToProcess::y#7 = (byte) 0 [phi:getCharToProcess->getCharToProcess::@1#3] -- vbuz1=vbuc1
lda #0
sta y
//SEG165 [108] phi (byte*) getCharToProcess::screen_line#4 = (const byte[$3e8]) SCREEN_COPY#0 [phi:getCharToProcess->getCharToProcess::@1#4] -- pbuz1=pbuc1
lda #<SCREEN_COPY
sta screen_line
lda #>SCREEN_COPY
sta screen_line+1
//SEG166 getCharToProcess::@1
b1:
//SEG167 [109] phi from getCharToProcess::@1 to getCharToProcess::@2 [phi:getCharToProcess::@1->getCharToProcess::@2]
//SEG168 [109] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::closest_y#9 [phi:getCharToProcess::@1->getCharToProcess::@2#0] -- register_copy
//SEG169 [109] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::closest_x#9 [phi:getCharToProcess::@1->getCharToProcess::@2#1] -- register_copy
//SEG170 [109] phi (word) getCharToProcess::closest_dist#2 = (word) getCharToProcess::closest_dist#8 [phi:getCharToProcess::@1->getCharToProcess::@2#2] -- register_copy
//SEG171 [109] phi (byte) getCharToProcess::x#2 = (byte) 0 [phi:getCharToProcess::@1->getCharToProcess::@2#3] -- vbuz1=vbuc1
lda #0
sta x
//SEG172 getCharToProcess::@2
b2:
//SEG173 [110] if(*((byte*) getCharToProcess::screen_line#4 + (byte) getCharToProcess::x#2)==(byte) ' ') goto getCharToProcess::@11 -- pbuz1_derefidx_vbuz2_eq_vbuc1_then_la1
ldy x
lda (screen_line),y
cmp #' '
bne !b11+
jmp b11
!b11:
//SEG174 getCharToProcess::@4
//SEG175 [111] (byte~) getCharToProcess::$13 ← (byte) getCharToProcess::x#2 << (byte) 1 -- vbuxx=vbuz1_rol_1
tya
asl
tax
//SEG176 [112] (byte~) getCharToProcess::$14 ← (byte) getCharToProcess::y#7 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda y
asl
//SEG177 [113] (word) getCharToProcess::dist#0 ← *((const word[$28]) SQUARES_X#0 + (byte~) getCharToProcess::$13) + *((const word[$19]) SQUARES_Y#0 + (byte~) getCharToProcess::$14) -- vwuz1=pwuc1_derefidx_vbuxx_plus_pwuc2_derefidx_vbuaa
tay
lda SQUARES_X,x
clc
adc SQUARES_Y,y
sta dist
lda SQUARES_X+1,x
adc SQUARES_Y+1,y
sta dist+1
//SEG178 [114] if((word) getCharToProcess::dist#0>=(word) getCharToProcess::closest_dist#2) goto getCharToProcess::@12 -- vwuz1_ge_vwuz2_then_la1
lda closest_dist+1
cmp dist+1
bne !+
lda closest_dist
cmp dist
bne !b12+
jmp b12
!b12:
!:
bcs !b12+
jmp b12
!b12:
//SEG179 getCharToProcess::@5
//SEG180 [115] (byte~) getCharToProcess::return_x#7 ← (byte) getCharToProcess::x#2 -- vbuz1=vbuz2
lda x
sta return_x
//SEG181 [116] (byte~) getCharToProcess::return_y#7 ← (byte) getCharToProcess::y#7 -- vbuz1=vbuz2
lda y
sta return_y
//SEG182 [117] phi from getCharToProcess::@11 getCharToProcess::@12 getCharToProcess::@5 to getCharToProcess::@3 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3]
//SEG183 [117] phi (byte) getCharToProcess::return_y#1 = (byte) getCharToProcess::closest_y#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#0] -- register_copy
//SEG184 [117] phi (byte) getCharToProcess::return_x#1 = (byte) getCharToProcess::closest_x#7 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#1] -- register_copy
//SEG185 [117] phi (word) getCharToProcess::return_dist#1 = (word~) getCharToProcess::return_dist#5 [phi:getCharToProcess::@11/getCharToProcess::@12/getCharToProcess::@5->getCharToProcess::@3#2] -- register_copy
//SEG186 getCharToProcess::@3
b3:
//SEG187 [118] (byte) getCharToProcess::x#1 ← ++ (byte) getCharToProcess::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG188 [119] if((byte) getCharToProcess::x#1!=(byte) $28) goto getCharToProcess::@10 -- vbuz1_neq_vbuc1_then_la1
lda #$28
cmp x
bne b10
//SEG189 getCharToProcess::@6
//SEG190 [120] (byte*) getCharToProcess::screen_line#1 ← (byte*) getCharToProcess::screen_line#4 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1
clc
adc screen_line
sta screen_line
bcc !+
inc screen_line+1
!:
//SEG191 [121] (byte) getCharToProcess::y#1 ← ++ (byte) getCharToProcess::y#7 -- vbuz1=_inc_vbuz1
inc y
//SEG192 [122] if((byte) getCharToProcess::y#1!=(byte) $19) goto getCharToProcess::@9 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp y
bne b9
//SEG193 getCharToProcess::@7
//SEG194 [123] if((word) getCharToProcess::return_dist#1==(const word) NOT_FOUND#0) goto getCharToProcess::@return -- vwuz1_eq_vwuc1_then_la1
lda return_dist
cmp #<NOT_FOUND
bne !+
lda return_dist+1
cmp #>NOT_FOUND
beq breturn
!:
//SEG195 getCharToProcess::@8
//SEG196 [124] (word~) getCharToProcess::$9 ← (word)(byte) getCharToProcess::return_y#1 -- vwuz1=_word_vbuz2
lda return_y
sta _9
lda #0
sta _9+1
//SEG197 [125] (word) getCharToProcess::$15 ← (word~) getCharToProcess::$9 << (byte) 2 -- vwuz1=vwuz2_rol_2
lda _9
asl
sta _15
lda _9+1
rol
sta _15+1
asl _15
rol _15+1
//SEG198 [126] (word) getCharToProcess::$16 ← (word) getCharToProcess::$15 + (word~) getCharToProcess::$9 -- vwuz1=vwuz2_plus_vwuz1
lda _16
clc
adc _15
sta _16
lda _16+1
adc _15+1
sta _16+1
//SEG199 [127] (word~) getCharToProcess::$10 ← (word) getCharToProcess::$16 << (byte) 3 -- vwuz1=vwuz1_rol_3
asl _10
rol _10+1
asl _10
rol _10+1
asl _10
rol _10+1
//SEG200 [128] (byte*~) getCharToProcess::$11 ← (const byte[$3e8]) SCREEN_COPY#0 + (word~) getCharToProcess::$10 -- pbuz1=pbuc1_plus_vwuz1
clc
lda _11
adc #<SCREEN_COPY
sta _11
lda _11+1
adc #>SCREEN_COPY
sta _11+1
//SEG201 [129] *((byte*~) getCharToProcess::$11 + (byte) getCharToProcess::return_x#1) ← (byte) ' ' -- pbuz1_derefidx_vbuz2=vbuc1
// clear the found char on the screen copy
lda #' '
ldy return_x
sta (_11),y
//SEG202 getCharToProcess::@return
breturn:
//SEG203 [130] return
rts
//SEG204 getCharToProcess::@9
b9:
//SEG205 [131] (word~) getCharToProcess::closest_dist#10 ← (word) getCharToProcess::return_dist#1 -- vwuz1=vwuz2
lda return_dist
sta closest_dist
lda return_dist+1
sta closest_dist+1
//SEG206 [108] phi from getCharToProcess::@9 to getCharToProcess::@1 [phi:getCharToProcess::@9->getCharToProcess::@1]
//SEG207 [108] phi (byte) getCharToProcess::closest_y#9 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#0] -- register_copy
//SEG208 [108] phi (byte) getCharToProcess::closest_x#9 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@9->getCharToProcess::@1#1] -- register_copy
//SEG209 [108] phi (word) getCharToProcess::closest_dist#8 = (word~) getCharToProcess::closest_dist#10 [phi:getCharToProcess::@9->getCharToProcess::@1#2] -- register_copy
//SEG210 [108] phi (byte) getCharToProcess::y#7 = (byte) getCharToProcess::y#1 [phi:getCharToProcess::@9->getCharToProcess::@1#3] -- register_copy
//SEG211 [108] phi (byte*) getCharToProcess::screen_line#4 = (byte*) getCharToProcess::screen_line#1 [phi:getCharToProcess::@9->getCharToProcess::@1#4] -- register_copy
jmp b1
//SEG212 getCharToProcess::@10
b10:
//SEG213 [132] (word~) getCharToProcess::closest_dist#12 ← (word) getCharToProcess::return_dist#1 -- vwuz1=vwuz2
lda return_dist
sta closest_dist
lda return_dist+1
sta closest_dist+1
//SEG214 [109] phi from getCharToProcess::@10 to getCharToProcess::@2 [phi:getCharToProcess::@10->getCharToProcess::@2]
//SEG215 [109] phi (byte) getCharToProcess::closest_y#7 = (byte) getCharToProcess::return_y#1 [phi:getCharToProcess::@10->getCharToProcess::@2#0] -- register_copy
//SEG216 [109] phi (byte) getCharToProcess::closest_x#7 = (byte) getCharToProcess::return_x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#1] -- register_copy
//SEG217 [109] phi (word) getCharToProcess::closest_dist#2 = (word~) getCharToProcess::closest_dist#12 [phi:getCharToProcess::@10->getCharToProcess::@2#2] -- register_copy
//SEG218 [109] phi (byte) getCharToProcess::x#2 = (byte) getCharToProcess::x#1 [phi:getCharToProcess::@10->getCharToProcess::@2#3] -- register_copy
jmp b2
//SEG219 getCharToProcess::@12
b12:
//SEG220 [133] (word~) getCharToProcess::return_dist#6 ← (word) getCharToProcess::closest_dist#2 -- vwuz1=vwuz2
lda closest_dist
sta return_dist
lda closest_dist+1
sta return_dist+1
jmp b3
//SEG221 getCharToProcess::@11
b11:
//SEG222 [134] (word~) getCharToProcess::return_dist#5 ← (word) getCharToProcess::closest_dist#2 -- vwuz1=vwuz2
lda closest_dist
sta return_dist
lda closest_dist+1
sta return_dist+1
jmp b3
}
//SEG223 setupRasterIrq
// Setup Raster IRQ
setupRasterIrq: {
.label irqRoutine = irqTop
//SEG224 asm { sei }
sei
//SEG225 [136] *((const byte*) PROCPORT_DDR#0) ← (const byte) PROCPORT_DDR_MEMORY_MASK#0 -- _deref_pbuc1=vbuc2
// Disable kernal & basic
lda #PROCPORT_DDR_MEMORY_MASK
sta PROCPORT_DDR
//SEG226 [137] *((const byte*) PROCPORT#0) ← (const byte) PROCPORT_RAM_IO#0 -- _deref_pbuc1=vbuc2
lda #PROCPORT_RAM_IO
sta PROCPORT
//SEG227 [138] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 -- _deref_pbuc1=vbuc2
// Disable CIA 1 Timer IRQ
lda #CIA_INTERRUPT_CLEAR
sta CIA1_INTERRUPT
//SEG228 setupRasterIrq::@1
//SEG229 [139] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f -- _deref_pbuc1=_deref_pbuc1_band_vbuc2
lda #$7f
and VIC_CONTROL
sta VIC_CONTROL
//SEG230 setupRasterIrq::@2
//SEG231 [140] *((const byte*) RASTER#0) ← <(const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2
lda #RASTER_IRQ_TOP
sta RASTER
//SEG232 [141] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Enable Raster Interrupt
lda #IRQ_RASTER
sta IRQ_ENABLE
//SEG233 [142] *((const void()**) HARDWARE_IRQ#0) ← (const void()*) setupRasterIrq::irqRoutine#0 -- _deref_pptc1=pprc2
// Set the IRQ routine
lda #<irqRoutine
sta HARDWARE_IRQ
lda #>irqRoutine
sta HARDWARE_IRQ+1
//SEG234 asm { cli }
cli
//SEG235 setupRasterIrq::@return
//SEG236 [144] return
rts
}
//SEG237 initSprites
// Initialize sprites
initSprites: {
.label sp = $16
//SEG238 [146] phi from initSprites to initSprites::@1 [phi:initSprites->initSprites::@1]
//SEG239 [146] phi (byte*) initSprites::sp#2 = (const byte*) SPRITE_DATA#0 [phi:initSprites->initSprites::@1#0] -- pbuz1=pbuc1
lda #<SPRITE_DATA
sta sp
lda #>SPRITE_DATA
sta sp+1
// Clear sprite data
//SEG240 [146] phi from initSprites::@1 to initSprites::@1 [phi:initSprites::@1->initSprites::@1]
//SEG241 [146] phi (byte*) initSprites::sp#2 = (byte*) initSprites::sp#1 [phi:initSprites::@1->initSprites::@1#0] -- register_copy
//SEG242 initSprites::@1
b1:
//SEG243 [147] *((byte*) initSprites::sp#2) ← (byte) 0 -- _deref_pbuz1=vbuc1
lda #0
tay
sta (sp),y
//SEG244 [148] (byte*) initSprites::sp#1 ← ++ (byte*) initSprites::sp#2 -- pbuz1=_inc_pbuz1
inc sp
bne !+
inc sp+1
!:
//SEG245 [149] if((byte*) initSprites::sp#1<(const byte*) SPRITE_DATA#0+(const byte) NUM_PROCESSING#0*(byte) $40) goto initSprites::@1 -- pbuz1_lt_pbuc1_then_la1
lda sp+1
cmp #>SPRITE_DATA+NUM_PROCESSING*$40
bcc b1
bne !+
lda sp
cmp #<SPRITE_DATA+NUM_PROCESSING*$40
bcc b1
!:
//SEG246 [150] phi from initSprites::@1 to initSprites::@2 [phi:initSprites::@1->initSprites::@2]
//SEG247 [150] phi (byte) initSprites::i#2 = (byte) 0 [phi:initSprites::@1->initSprites::@2#0] -- vbuxx=vbuc1
ldx #0
// Initialize sprite registers
//SEG248 [150] phi from initSprites::@2 to initSprites::@2 [phi:initSprites::@2->initSprites::@2]
//SEG249 [150] phi (byte) initSprites::i#2 = (byte) initSprites::i#1 [phi:initSprites::@2->initSprites::@2#0] -- register_copy
//SEG250 initSprites::@2
b2:
//SEG251 [151] *((const byte*) SPRITES_COLS#0 + (byte) initSprites::i#2) ← (const byte) LIGHT_BLUE#0 -- pbuc1_derefidx_vbuxx=vbuc2
lda #LIGHT_BLUE
sta SPRITES_COLS,x
//SEG252 [152] (byte) initSprites::i#1 ← ++ (byte) initSprites::i#2 -- vbuxx=_inc_vbuxx
inx
//SEG253 [153] if((byte) initSprites::i#1!=(byte) 8) goto initSprites::@2 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne b2
//SEG254 initSprites::@3
//SEG255 [154] *((const byte*) SPRITES_MC#0) ← (byte) 0 -- _deref_pbuc1=vbuc2
lda #0
sta SPRITES_MC
//SEG256 [155] *((const byte*) SPRITES_EXPAND_X#0) ← (byte) 0 -- _deref_pbuc1=vbuc2
sta SPRITES_EXPAND_X
//SEG257 [156] *((const byte*) SPRITES_EXPAND_Y#0) ← (byte) 0 -- _deref_pbuc1=vbuc2
sta SPRITES_EXPAND_Y
//SEG258 initSprites::@return
//SEG259 [157] return
rts
}
//SEG260 initSquareTables
// initialize SQUARES table
initSquareTables: {
.label _6 = $1a
.label _14 = $1a
.label x = $18
.label y = $19
//SEG261 [159] phi from initSquareTables to initSquareTables::@1 [phi:initSquareTables->initSquareTables::@1]
//SEG262 [159] phi (byte) initSquareTables::x#2 = (byte) 0 [phi:initSquareTables->initSquareTables::@1#0] -- vbuz1=vbuc1
lda #0
sta x
//SEG263 [159] phi from initSquareTables::@9 to initSquareTables::@1 [phi:initSquareTables::@9->initSquareTables::@1]
//SEG264 [159] phi (byte) initSquareTables::x#2 = (byte) initSquareTables::x#1 [phi:initSquareTables::@9->initSquareTables::@1#0] -- register_copy
//SEG265 initSquareTables::@1
b1:
//SEG266 [160] if((byte) initSquareTables::x#2<(byte) $14) goto initSquareTables::@2 -- vbuz1_lt_vbuc1_then_la1
lda x
cmp #$14
bcc b2
//SEG267 initSquareTables::@3
//SEG268 [161] (byte~) initSquareTables::$2 ← (byte) initSquareTables::x#2 - (byte) $14 -- vbuaa=vbuz1_minus_vbuc1
sec
sbc #$14
//SEG269 [162] phi from initSquareTables::@2 initSquareTables::@3 to initSquareTables::@4 [phi:initSquareTables::@2/initSquareTables::@3->initSquareTables::@4]
//SEG270 [162] phi (byte) initSquareTables::x_dist#0 = (byte~) initSquareTables::$4 [phi:initSquareTables::@2/initSquareTables::@3->initSquareTables::@4#0] -- register_copy
//SEG271 initSquareTables::@4
b4:
//SEG272 [163] (byte) mul8u::a#1 ← (byte) initSquareTables::x_dist#0 -- vbuxx=vbuaa
tax
//SEG273 [164] (byte) mul8u::b#0 ← (byte) initSquareTables::x_dist#0
//SEG274 [165] call mul8u
//SEG275 [188] phi from initSquareTables::@4 to mul8u [phi:initSquareTables::@4->mul8u]
//SEG276 [188] phi (byte) mul8u::a#6 = (byte) mul8u::a#1 [phi:initSquareTables::@4->mul8u#0] -- register_copy
//SEG277 [188] phi (word) mul8u::mb#0 = (byte) mul8u::b#0 [phi:initSquareTables::@4->mul8u#1] -- vwuz1=vbuaa
sta mul8u.mb
lda #0
sta mul8u.mb+1
jsr mul8u
//SEG278 [166] (word) mul8u::return#2 ← (word) mul8u::res#2
//SEG279 initSquareTables::@9
//SEG280 [167] (word~) initSquareTables::$6 ← (word) mul8u::return#2
//SEG281 [168] (byte~) initSquareTables::$16 ← (byte) initSquareTables::x#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda x
asl
//SEG282 [169] *((const word[$28]) SQUARES_X#0 + (byte~) initSquareTables::$16) ← (word~) initSquareTables::$6 -- pwuc1_derefidx_vbuaa=vwuz1
tay
lda _6
sta SQUARES_X,y
lda _6+1
sta SQUARES_X+1,y
//SEG283 [170] (byte) initSquareTables::x#1 ← ++ (byte) initSquareTables::x#2 -- vbuz1=_inc_vbuz1
inc x
//SEG284 [171] if((byte) initSquareTables::x#1!=(byte) $28) goto initSquareTables::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$28
cmp x
bne b1
//SEG285 [172] phi from initSquareTables::@9 to initSquareTables::@5 [phi:initSquareTables::@9->initSquareTables::@5]
//SEG286 [172] phi (byte) initSquareTables::y#2 = (byte) 0 [phi:initSquareTables::@9->initSquareTables::@5#0] -- vbuz1=vbuc1
lda #0
sta y
//SEG287 [172] phi from initSquareTables::@10 to initSquareTables::@5 [phi:initSquareTables::@10->initSquareTables::@5]
//SEG288 [172] phi (byte) initSquareTables::y#2 = (byte) initSquareTables::y#1 [phi:initSquareTables::@10->initSquareTables::@5#0] -- register_copy
//SEG289 initSquareTables::@5
b5:
//SEG290 [173] if((byte) initSquareTables::y#2<(byte) $c) goto initSquareTables::@6 -- vbuz1_lt_vbuc1_then_la1
lda y
cmp #$c
bcc b6
//SEG291 initSquareTables::@7
//SEG292 [174] (byte~) initSquareTables::$10 ← (byte) initSquareTables::y#2 - (byte) $c -- vbuaa=vbuz1_minus_vbuc1
sec
sbc #$c
//SEG293 [175] phi from initSquareTables::@6 initSquareTables::@7 to initSquareTables::@8 [phi:initSquareTables::@6/initSquareTables::@7->initSquareTables::@8]
//SEG294 [175] phi (byte) initSquareTables::y_dist#0 = (byte~) initSquareTables::$12 [phi:initSquareTables::@6/initSquareTables::@7->initSquareTables::@8#0] -- register_copy
//SEG295 initSquareTables::@8
b8:
//SEG296 [176] (byte) mul8u::a#2 ← (byte) initSquareTables::y_dist#0 -- vbuxx=vbuaa
tax
//SEG297 [177] (byte) mul8u::b#1 ← (byte) initSquareTables::y_dist#0
//SEG298 [178] call mul8u
//SEG299 [188] phi from initSquareTables::@8 to mul8u [phi:initSquareTables::@8->mul8u]
//SEG300 [188] phi (byte) mul8u::a#6 = (byte) mul8u::a#2 [phi:initSquareTables::@8->mul8u#0] -- register_copy
//SEG301 [188] phi (word) mul8u::mb#0 = (byte) mul8u::b#1 [phi:initSquareTables::@8->mul8u#1] -- vwuz1=vbuaa
sta mul8u.mb
lda #0
sta mul8u.mb+1
jsr mul8u
//SEG302 [179] (word) mul8u::return#3 ← (word) mul8u::res#2
//SEG303 initSquareTables::@10
//SEG304 [180] (word~) initSquareTables::$14 ← (word) mul8u::return#3
//SEG305 [181] (byte~) initSquareTables::$17 ← (byte) initSquareTables::y#2 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda y
asl
//SEG306 [182] *((const word[$19]) SQUARES_Y#0 + (byte~) initSquareTables::$17) ← (word~) initSquareTables::$14 -- pwuc1_derefidx_vbuaa=vwuz1
tay
lda _14
sta SQUARES_Y,y
lda _14+1
sta SQUARES_Y+1,y
//SEG307 [183] (byte) initSquareTables::y#1 ← ++ (byte) initSquareTables::y#2 -- vbuz1=_inc_vbuz1
inc y
//SEG308 [184] if((byte) initSquareTables::y#1!=(byte) $19) goto initSquareTables::@5 -- vbuz1_neq_vbuc1_then_la1
lda #$19
cmp y
bne b5
//SEG309 initSquareTables::@return
//SEG310 [185] return
rts
//SEG311 initSquareTables::@6
b6:
//SEG312 [186] (byte~) initSquareTables::$12 ← (byte) $c - (byte) initSquareTables::y#2 -- vbuaa=vbuc1_minus_vbuz1
lda #$c
sec
sbc y
jmp b8
//SEG313 initSquareTables::@2
b2:
//SEG314 [187] (byte~) initSquareTables::$4 ← (byte) $14 - (byte) initSquareTables::x#2 -- vbuaa=vbuc1_minus_vbuz1
lda #$14
sec
sbc x
jmp b4
}
//SEG315 mul8u
// Perform binary multiplication of two unsigned 8-bit bytes into a 16-bit unsigned word
// mul8u(byte register(X) a, byte register(A) b)
mul8u: {
.label mb = $1c
.label res = $1a
.label return = $1a
//SEG316 [189] phi from mul8u to mul8u::@1 [phi:mul8u->mul8u::@1]
//SEG317 [189] phi (word) mul8u::mb#2 = (word) mul8u::mb#0 [phi:mul8u->mul8u::@1#0] -- register_copy
//SEG318 [189] phi (word) mul8u::res#2 = (byte) 0 [phi:mul8u->mul8u::@1#1] -- vwuz1=vbuc1
lda #0
sta res
sta res+1
//SEG319 [189] phi (byte) mul8u::a#3 = (byte) mul8u::a#6 [phi:mul8u->mul8u::@1#2] -- register_copy
//SEG320 mul8u::@1
b1:
//SEG321 [190] if((byte) mul8u::a#3!=(byte) 0) goto mul8u::@2 -- vbuxx_neq_0_then_la1
cpx #0
bne b2
//SEG322 mul8u::@return
//SEG323 [191] return
rts
//SEG324 mul8u::@2
b2:
//SEG325 [192] (byte~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 -- vbuaa=vbuxx_band_vbuc1
txa
and #1
//SEG326 [193] if((byte~) mul8u::$1==(byte) 0) goto mul8u::@3 -- vbuaa_eq_0_then_la1
cmp #0
beq b3
//SEG327 mul8u::@4
//SEG328 [194] (word) mul8u::res#1 ← (word) mul8u::res#2 + (word) mul8u::mb#2 -- vwuz1=vwuz1_plus_vwuz2
lda res
clc
adc mb
sta res
lda res+1
adc mb+1
sta res+1
//SEG329 [195] phi from mul8u::@2 mul8u::@4 to mul8u::@3 [phi:mul8u::@2/mul8u::@4->mul8u::@3]
//SEG330 [195] phi (word) mul8u::res#6 = (word) mul8u::res#2 [phi:mul8u::@2/mul8u::@4->mul8u::@3#0] -- register_copy
//SEG331 mul8u::@3
b3:
//SEG332 [196] (byte) mul8u::a#0 ← (byte) mul8u::a#3 >> (byte) 1 -- vbuxx=vbuxx_ror_1
txa
lsr
tax
//SEG333 [197] (word) mul8u::mb#1 ← (word) mul8u::mb#2 << (byte) 1 -- vwuz1=vwuz1_rol_1
asl mb
rol mb+1
//SEG334 [189] phi from mul8u::@3 to mul8u::@1 [phi:mul8u::@3->mul8u::@1]
//SEG335 [189] phi (word) mul8u::mb#2 = (word) mul8u::mb#1 [phi:mul8u::@3->mul8u::@1#0] -- register_copy
//SEG336 [189] phi (word) mul8u::res#2 = (word) mul8u::res#6 [phi:mul8u::@3->mul8u::@1#1] -- register_copy
//SEG337 [189] phi (byte) mul8u::a#3 = (byte) mul8u::a#0 [phi:mul8u::@3->mul8u::@1#2] -- register_copy
jmp b1
}
//SEG338 irqBottom
// Raster Interrupt at the middle of the screen
irqBottom: {
//SEG339 entry interrupt(HARDWARE_ALL)
sta rega+1
stx regx+1
sty regy+1
//SEG340 [199] phi from irqBottom to irqBottom::@1 [phi:irqBottom->irqBottom::@1]
//SEG341 [199] phi (byte) irqBottom::i#2 = (byte) 0 [phi:irqBottom->irqBottom::@1#0] -- vbuxx=vbuc1
ldx #0
//SEG342 [199] phi from irqBottom::@1 to irqBottom::@1 [phi:irqBottom::@1->irqBottom::@1]
//SEG343 [199] phi (byte) irqBottom::i#2 = (byte) irqBottom::i#1 [phi:irqBottom::@1->irqBottom::@1#0] -- register_copy
//SEG344 irqBottom::@1
b1:
//SEG345 [200] (byte) irqBottom::i#1 ← ++ (byte) irqBottom::i#2 -- vbuxx=_inc_vbuxx
inx
//SEG346 [201] if((byte) irqBottom::i#1!=(byte) 5) goto irqBottom::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #5
bne b1
//SEG347 [202] phi from irqBottom::@1 to irqBottom::@2 [phi:irqBottom::@1->irqBottom::@2]
//SEG348 irqBottom::@2
//SEG349 [203] call processChars
//SEG350 [208] phi from irqBottom::@2 to processChars [phi:irqBottom::@2->processChars]
jsr processChars
//SEG351 irqBottom::@3
//SEG352 [204] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_TOP#0 -- _deref_pbuc1=vbuc2
// Trigger IRQ at the top of the screen
lda #RASTER_IRQ_TOP
sta RASTER
//SEG353 [205] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqTop() -- _deref_pptc1=pprc2
lda #<irqTop
sta HARDWARE_IRQ
lda #>irqTop
sta HARDWARE_IRQ+1
//SEG354 [206] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
//SEG355 irqBottom::@return
//SEG356 [207] return - exit interrupt(HARDWARE_ALL)
rega:
lda #00
regx:
ldx #00
regy:
ldy #00
rti
}
//SEG357 processChars
// Process any chars in the PROCESSING array
processChars: {
.label _16 = $38
.label _26 = $36
.label processing = $33
.label bitmask = $35
.label i = $1e
.label xpos = $36
.label ypos = $3a
.label numActive = $1f
//SEG358 [209] phi from processChars to processChars::@1 [phi:processChars->processChars::@1]
//SEG359 [209] phi (byte) processChars::numActive#10 = (byte) 0 [phi:processChars->processChars::@1#0] -- vbuz1=vbuc1
lda #0
sta numActive
//SEG360 [209] phi (byte) processChars::i#10 = (byte) 0 [phi:processChars->processChars::@1#1] -- vbuz1=vbuc1
sta i
//SEG361 [209] phi from processChars::@2 to processChars::@1 [phi:processChars::@2->processChars::@1]
//SEG362 [209] phi (byte) processChars::numActive#10 = (byte) processChars::numActive#3 [phi:processChars::@2->processChars::@1#0] -- register_copy
//SEG363 [209] phi (byte) processChars::i#10 = (byte) processChars::i#1 [phi:processChars::@2->processChars::@1#1] -- register_copy
//SEG364 processChars::@1
b1:
//SEG365 [210] (byte) processChars::$64 ← (byte) processChars::i#10 << (byte) 1 -- vbuaa=vbuz1_rol_1
lda i
asl
//SEG366 [211] (byte) processChars::$65 ← (byte) processChars::$64 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1
clc
adc i
//SEG367 [212] (byte) processChars::$66 ← (byte) processChars::$65 << (byte) 2 -- vbuaa=vbuaa_rol_2
asl
asl
//SEG368 [213] (byte~) processChars::$36 ← (byte) processChars::$66 + (byte) processChars::i#10 -- vbuaa=vbuaa_plus_vbuz1
clc
adc i
//SEG369 [214] (struct ProcessingSprite*) processChars::processing#0 ← (const struct ProcessingSprite[NUM_PROCESSING#0]) PROCESSING#0 + (byte~) processChars::$36 -- pssz1=pssc1_plus_vbuaa
clc
adc #<PROCESSING
sta processing
lda #>PROCESSING
adc #0
sta processing+1
//SEG370 [215] (byte) processChars::bitmask#0 ← (byte) 1 << *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID) -- vbuz1=vbuc1_rol_pbuz2_derefidx_vbuc2
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_ID
lda (processing),y
tax
lda #1
cpx #0
beq !e+
!:
asl
dex
bne !-
!e:
sta bitmask
//SEG371 [216] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)==(const byte) STATUS_FREE#0) goto processChars::@2 -- pbuz1_derefidx_vbuc1_eq_vbuc2_then_la1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
lda (processing),y
cmp #STATUS_FREE
bne !b2+
jmp b2
!b2:
//SEG372 processChars::@10
//SEG373 [217] if(*((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS)!=(const byte) STATUS_NEW#0) goto processChars::@3 -- pbuz1_derefidx_vbuc1_neq_vbuc2_then_la1
lda (processing),y
cmp #STATUS_NEW
bne b3
//SEG374 processChars::@11
//SEG375 [218] *(*((byte**)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_SCREENPTR)) ← (byte) ' ' -- _deref_pptz1_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
txa
!:
sta $ffff
//SEG376 [219] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
// Enable the sprite
lda SPRITES_ENABLE
ora bitmask
sta SPRITES_ENABLE
//SEG377 [220] *((const byte*) SCREEN#0+(const word) SPRITE_PTRS#0 + *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_ID)) ← *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_PTR) -- 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+SPRITE_PTRS,y
//SEG378 [221] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_PROCESSING#0 -- pbuz1_derefidx_vbuc1=vbuc2
// Set status
lda #STATUS_PROCESSING
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
//SEG379 processChars::@3
b3:
//SEG380 [222] (word) processChars::xpos#0 ← *((word*)(struct ProcessingSprite*) processChars::processing#0) >> (byte) 4 -- vwuz1=_deref_pwuz2_ror_4
ldy #0
lda (processing),y
sta xpos
iny
lda (processing),y
sta xpos+1
lsr xpos+1
ror xpos
lsr xpos+1
ror xpos
lsr xpos+1
ror xpos
lsr xpos+1
ror xpos
//SEG381 [223] (byte~) processChars::$12 ← > (word) processChars::xpos#0 -- vbuaa=_hi_vwuz1
lda xpos+1
//SEG382 [224] if((byte) 0!=(byte~) processChars::$12) goto processChars::@4 -- vbuc1_neq_vbuaa_then_la1
// Set sprite position
cmp #0
beq !b4+
jmp b4
!b4:
//SEG383 processChars::@8
//SEG384 [225] (byte~) processChars::$13 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1
lda #$ff
eor bitmask
//SEG385 [226] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) processChars::$13 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
and SPRITES_XMSB
sta SPRITES_XMSB
//SEG386 processChars::@5
b5:
//SEG387 [227] (byte~) processChars::$18 ← (byte) processChars::i#10 << (byte) 1 -- vbuxx=vbuz1_rol_1
lda i
asl
tax
//SEG388 [228] (byte~) processChars::$15 ← (byte)(word) processChars::xpos#0 -- vbuaa=_byte_vwuz1
lda xpos
//SEG389 [229] *((const byte*) SPRITES_XPOS#0 + (byte~) processChars::$18) ← (byte~) processChars::$15 -- pbuc1_derefidx_vbuxx=vbuaa
sta SPRITES_XPOS,x
//SEG390 [230] (word~) processChars::$16 ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) >> (byte) 4 -- vwuz1=pwuz2_derefidx_vbuc1_ror_4
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_Y
lda (processing),y
sta _16
iny
lda (processing),y
sta _16+1
lsr _16+1
ror _16
lsr _16+1
ror _16
lsr _16+1
ror _16
lsr _16+1
ror _16
//SEG391 [231] (byte) processChars::ypos#0 ← (byte)(word~) processChars::$16 -- vbuz1=_byte_vwuz2
lda _16
sta ypos
//SEG392 [232] *((const byte*) SPRITES_YPOS#0 + (byte~) processChars::$18) ← (byte) processChars::ypos#0 -- pbuc1_derefidx_vbuxx=vbuz1
sta SPRITES_YPOS,x
//SEG393 [233] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)<(const word) XPOS_LEFTMOST#0) 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:
!:
//SEG394 processChars::@15
//SEG395 [234] if(*((word*)(struct ProcessingSprite*) processChars::processing#0)>(const word) XPOS_RIGHTMOST#0) 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:
!:
//SEG396 processChars::@14
//SEG397 [235] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)<(const word) YPOS_TOPMOST#0) 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:
!:
//SEG398 processChars::@13
//SEG399 [236] if(*((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y)>(const word) YPOS_BOTTOMMOST#0) 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
bcs !b6+
jmp b6
!b6:
!:
//SEG400 processChars::@9
//SEG401 [237] (word~) processChars::$26 ← (word) processChars::xpos#0 >> (byte) 3 -- vwuz1=vwuz1_ror_3
lsr _26+1
ror _26
lsr _26+1
ror _26
lsr _26+1
ror _26
//SEG402 [238] (byte~) processChars::$27 ← (byte)(word~) processChars::$26 -- vbuaa=_byte_vwuz1
lda _26
//SEG403 [239] (byte) processChars::xchar#0 ← (byte~) processChars::$27 - (const byte) BORDER_XPOS_LEFT#0/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #BORDER_XPOS_LEFT/8
//SEG404 [240] (byte~) processChars::$37 ← (byte) processChars::xchar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1
asl
//SEG405 [241] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) + *((const word*) VXSIN#0 + (byte~) processChars::$37) -- 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
//SEG406 [242] *((word*)(struct ProcessingSprite*) processChars::processing#0) ← *((word*)(struct ProcessingSprite*) processChars::processing#0) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VX) -- _deref_pwuz1=_deref_pwuz1_plus_pwuz1_derefidx_vbuc1
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_VX
sty $ff
clc
lda (processing),y
ldy #0
adc (processing),y
sta (processing),y
ldy $ff
iny
lda (processing),y
ldy #1
adc (processing),y
sta (processing),y
//SEG407 [243] (byte~) processChars::$31 ← (byte) processChars::ypos#0 >> (byte) 3 -- vbuaa=vbuz1_ror_3
lda ypos
lsr
lsr
lsr
//SEG408 [244] (byte) processChars::ychar#0 ← (byte~) processChars::$31 - (const byte) BORDER_YPOS_TOP#0/(byte) 8 -- vbuaa=vbuaa_minus_vbuc1
sec
sbc #BORDER_YPOS_TOP/8
//SEG409 [245] (byte~) processChars::$38 ← (byte) processChars::ychar#0 << (byte) 1 -- vbuaa=vbuaa_rol_1
asl
//SEG410 [246] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) + *((const word*) VYSIN#0 + (byte~) processChars::$38) -- 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
//SEG411 [247] *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) ← *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_Y) + *((word*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_VY) -- 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
//SEG412 processChars::@7
b7:
//SEG413 [248] (byte) processChars::numActive#1 ← ++ (byte) processChars::numActive#10 -- vbuz1=_inc_vbuz1
inc numActive
//SEG414 [249] phi from processChars::@1 processChars::@7 to processChars::@2 [phi:processChars::@1/processChars::@7->processChars::@2]
//SEG415 [249] phi (byte) processChars::numActive#3 = (byte) processChars::numActive#10 [phi:processChars::@1/processChars::@7->processChars::@2#0] -- register_copy
//SEG416 processChars::@2
b2:
//SEG417 [250] (byte) processChars::i#1 ← ++ (byte) processChars::i#10 -- vbuz1=_inc_vbuz1
inc i
//SEG418 [251] if((byte) processChars::i#1!=(const byte) NUM_PROCESSING#0-(byte) 1+(byte) 1) goto processChars::@1 -- vbuz1_neq_vbuc1_then_la1
lda #NUM_PROCESSING-1+1
cmp i
beq !b1+
jmp b1
!b1:
//SEG419 processChars::@12
//SEG420 [252] (byte~) processChars::$1 ← (byte) '0' + (byte) processChars::numActive#3 -- vbuxx=vbuc1_plus_vbuz1
lax numActive
axs #-['0']
//SEG421 [253] *((const byte*) SCREEN#0+(word) $3e7) ← (byte~) processChars::$1 -- _deref_pbuc1=vbuxx
stx SCREEN+$3e7
//SEG422 processChars::@return
//SEG423 [254] return
rts
//SEG424 processChars::@6
b6:
//SEG425 [255] *((byte*)(struct ProcessingSprite*) processChars::processing#0 + (const byte) OFFSET_STRUCT_PROCESSINGSPRITE_STATUS) ← (const byte) STATUS_FREE#0 -- pbuz1_derefidx_vbuc1=vbuc2
// Set status to FREE
lda #STATUS_FREE
ldy #OFFSET_STRUCT_PROCESSINGSPRITE_STATUS
sta (processing),y
//SEG426 [256] (byte~) processChars::$34 ← (byte) $ff ^ (byte) processChars::bitmask#0 -- vbuaa=vbuc1_bxor_vbuz1
lda #$ff
eor bitmask
//SEG427 [257] *((const byte*) SPRITES_ENABLE#0) ← *((const byte*) SPRITES_ENABLE#0) & (byte~) processChars::$34 -- _deref_pbuc1=_deref_pbuc1_band_vbuaa
// Disable the sprite
and SPRITES_ENABLE
sta SPRITES_ENABLE
jmp b7
//SEG428 processChars::@4
b4:
//SEG429 [258] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) processChars::bitmask#0 -- _deref_pbuc1=_deref_pbuc1_bor_vbuz1
lda SPRITES_XMSB
ora bitmask
sta SPRITES_XMSB
jmp b5
}
//SEG430 irqTop
// Raster Interrupt at the top of the screen
irqTop: {
//SEG431 entry interrupt(HARDWARE_ALL)
sta rega+1
stx regx+1
sty regy+1
//SEG432 [260] phi from irqTop to irqTop::@1 [phi:irqTop->irqTop::@1]
//SEG433 [260] phi (byte) irqTop::i#2 = (byte) 0 [phi:irqTop->irqTop::@1#0] -- vbuxx=vbuc1
ldx #0
//SEG434 [260] phi from irqTop::@1 to irqTop::@1 [phi:irqTop::@1->irqTop::@1]
//SEG435 [260] phi (byte) irqTop::i#2 = (byte) irqTop::i#1 [phi:irqTop::@1->irqTop::@1#0] -- register_copy
//SEG436 irqTop::@1
b1:
//SEG437 [261] (byte) irqTop::i#1 ← ++ (byte) irqTop::i#2 -- vbuxx=_inc_vbuxx
inx
//SEG438 [262] if((byte) irqTop::i#1!=(byte) 5) goto irqTop::@1 -- vbuxx_neq_vbuc1_then_la1
cpx #5
bne b1
//SEG439 [263] phi from irqTop::@1 to irqTop::@2 [phi:irqTop::@1->irqTop::@2]
//SEG440 [263] phi (byte) irqTop::i1#2 = (byte) 0 [phi:irqTop::@1->irqTop::@2#0] -- vbuxx=vbuc1
ldx #0
//*BORDERCOL = WHITE;
//*BGCOL = WHITE;
//SEG441 [263] phi from irqTop::@2 to irqTop::@2 [phi:irqTop::@2->irqTop::@2]
//SEG442 [263] phi (byte) irqTop::i1#2 = (byte) irqTop::i1#1 [phi:irqTop::@2->irqTop::@2#0] -- register_copy
//SEG443 irqTop::@2
b2:
//SEG444 [264] (byte) irqTop::i1#1 ← ++ (byte) irqTop::i1#2 -- vbuxx=_inc_vbuxx
inx
//SEG445 [265] if((byte) irqTop::i1#1!=(byte) 8) goto irqTop::@2 -- vbuxx_neq_vbuc1_then_la1
cpx #8
bne b2
//SEG446 irqTop::@3
//SEG447 [266] *((const byte*) RASTER#0) ← (const byte) RASTER_IRQ_MIDDLE#0 -- _deref_pbuc1=vbuc2
// Trigger IRQ at the middle of the screen
lda #RASTER_IRQ_MIDDLE
sta RASTER
//SEG448 [267] *((const void()**) HARDWARE_IRQ#0) ← &interrupt(HARDWARE_ALL)(void()) irqBottom() -- _deref_pptc1=pprc2
lda #<irqBottom
sta HARDWARE_IRQ
lda #>irqBottom
sta HARDWARE_IRQ+1
//SEG449 [268] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
// Acknowledge the IRQ
lda #IRQ_RASTER
sta IRQ_STATUS
//SEG450 irqTop::@return
//SEG451 [269] return - exit interrupt(HARDWARE_ALL)
rega:
lda #00
regx:
ldx #00
regy:
ldy #00
rti
}
// Copy of the screen used for finding chars to process
SCREEN_COPY: .fill $3e8, 0
// SQUARES_X[i] = (i-20)*(i-20)
SQUARES_X: .fill 2*$28, 0
// SQUARES_Y[i] = (i-12)*(i-12)
SQUARES_Y: .fill 2*$19, 0
// Sprites currently being processed in the interrupt
PROCESSING: .fill $d*NUM_PROCESSING, 0
.pc = VXSIN "VXSIN"
.for(var i=0; i<40; i++) {
.word -sin(toRadians([i*360]/40))*4
}
.pc = VYSIN "VYSIN"
.for(var i=0; i<25; i++) {
.word -sin(toRadians([i*360]/25))*4
}