Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  (byte*) PROCPORT_DDR#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) PROCPORT_DDR_MEMORY_MASK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
  (byte*) PROCPORT#0 ← ((byte*)) (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) PROCPORT_RAM_ALL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
  (byte) PROCPORT_RAM_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 53
  (byte) PROCPORT_RAM_CHARROM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 49
  (byte) PROCPORT_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 54
  (byte) PROCPORT_BASIC_KERNEL_IO#0 ← (byte/signed byte/word/signed word/dword/signed dword) 55
  (byte*) CHARGEN#0 ← ((byte*)) (word/dword/signed dword) 53248
  (word) SPRITE_PTRS#0 ← (word/signed word/dword/signed dword) 1016
  (byte*) SPRITES_XPOS#0 ← ((byte*)) (word/dword/signed dword) 53248
  (byte*) SPRITES_YPOS#0 ← ((byte*)) (word/dword/signed dword) 53249
  (byte*) SPRITES_XMSB#0 ← ((byte*)) (word/dword/signed dword) 53264
  (byte*) RASTER#0 ← ((byte*)) (word/dword/signed dword) 53266
  (byte*) SPRITES_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53269
  (byte*) SPRITES_EXPAND_Y#0 ← ((byte*)) (word/dword/signed dword) 53271
  (byte*) SPRITES_PRIORITY#0 ← ((byte*)) (word/dword/signed dword) 53275
  (byte*) SPRITES_MC#0 ← ((byte*)) (word/dword/signed dword) 53276
  (byte*) SPRITES_EXPAND_X#0 ← ((byte*)) (word/dword/signed dword) 53277
  (byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
  (byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
  (byte*) BGCOL1#0 ← ((byte*)) (word/dword/signed dword) 53281
  (byte*) BGCOL2#0 ← ((byte*)) (word/dword/signed dword) 53282
  (byte*) BGCOL3#0 ← ((byte*)) (word/dword/signed dword) 53283
  (byte*) BGCOL4#0 ← ((byte*)) (word/dword/signed dword) 53284
  (byte*) SPRITES_MC1#0 ← ((byte*)) (word/dword/signed dword) 53285
  (byte*) SPRITES_MC2#0 ← ((byte*)) (word/dword/signed dword) 53286
  (byte*) SPRITES_COLS#0 ← ((byte*)) (word/dword/signed dword) 53287
  (byte*) VIC_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53265
  (byte*) D011#0 ← ((byte*)) (word/dword/signed dword) 53265
  (byte) VIC_RST8#0 ← (byte/word/signed word/dword/signed dword) 128
  (byte) VIC_ECM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
  (byte) VIC_BMM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
  (byte) VIC_DEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
  (byte) VIC_RSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte*) VIC_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 53270
  (byte*) D016#0 ← ((byte*)) (word/dword/signed dword) 53270
  (byte) VIC_MCM#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
  (byte) VIC_CSEL#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte*) D018#0 ← ((byte*)) (word/dword/signed dword) 53272
  (byte*) VIC_MEMORY#0 ← ((byte*)) (word/dword/signed dword) 53272
  (byte*) LIGHTPEN_X#0 ← ((byte*)) (word/dword/signed dword) 53267
  (byte*) LIGHTPEN_Y#0 ← ((byte*)) (word/dword/signed dword) 53268
  (byte*) IRQ_STATUS#0 ← ((byte*)) (word/dword/signed dword) 53273
  (byte*) IRQ_ENABLE#0 ← ((byte*)) (word/dword/signed dword) 53274
  (byte) IRQ_RASTER#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) IRQ_COLLISION_BG#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) IRQ_COLLISION_SPRITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) IRQ_LIGHTPEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte*) COLS#0 ← ((byte*)) (word/dword/signed dword) 55296
  (byte*) CIA1_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56320
  (byte*) CIA1_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56321
  (byte*) CIA1_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56322
  (byte*) CIA1_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56323
  (byte*) CIA1_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56333
  (byte) CIA_INTERRUPT_CLEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 127
  (byte*) CIA2_PORT_A#0 ← ((byte*)) (word/dword/signed dword) 56576
  (byte*) CIA2_PORT_B#0 ← ((byte*)) (word/dword/signed dword) 56577
  (byte*) CIA2_PORT_A_DDR#0 ← ((byte*)) (word/dword/signed dword) 56578
  (byte*) CIA2_PORT_B_DDR#0 ← ((byte*)) (word/dword/signed dword) 56579
  (byte*) CIA2_INTERRUPT#0 ← ((byte*)) (word/dword/signed dword) 56589
  (void()**) KERNEL_IRQ#0 ← ((void()**)) (word/signed word/dword/signed dword) 788
  (void()**) HARDWARE_IRQ#0 ← ((void()**)) (word/dword/signed dword) 65534
  (byte) BLACK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) WHITE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) CYAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
  (byte) PURPLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
  (byte) BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
  (byte) YELLOW#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
  (byte) ORANGE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte) BROWN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
  (byte) PINK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 10
  (byte) DARK_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 11
  (byte) GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 12
  (byte) LIGHT_GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 13
  (byte) LIGHT_BLUE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 14
  (byte) LIGHT_GREY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 15
  to:@4
@4: scope:[]  from @begin
  (byte*) DTV_FEATURE#0 ← ((byte*)) (word/dword/signed dword) 53311
  (byte) DTV_FEATURE_ENABLE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) DTV_FEATURE_DISABLE_TIL_RESET#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte*) DTV_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 53308
  (byte) DTV_LINEAR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) DTV_BORDER_OFF#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) DTV_HIGHCOLOR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) DTV_OVERSCAN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte) DTV_COLORRAM_OFF#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
  (byte) DTV_BADLINE_OFF#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
  (byte) DTV_CHUNKY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
  (byte*) DTV_PALETTE#0 ← ((byte*)) (word/dword/signed dword) 53760
  (byte[16]) DTV_PALETTE_DEFAULT#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 54, (byte/word/signed word/dword/signed dword) 190, (byte/signed byte/word/signed word/dword/signed dword) 88, (byte/word/signed word/dword/signed dword) 219, (byte/word/signed word/dword/signed dword) 134, (byte/word/signed word/dword/signed dword) 255, (byte/signed byte/word/signed word/dword/signed dword) 41, (byte/signed byte/word/signed word/dword/signed dword) 38, (byte/signed byte/word/signed word/dword/signed dword) 59, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/word/signed word/dword/signed dword) 223, (byte/word/signed word/dword/signed dword) 154, (byte/signed byte/word/signed word/dword/signed dword) 10 }
  (byte*) DTV_PLANEA_START_LO#0 ← ((byte*)) (word/dword/signed dword) 53306
  (byte*) DTV_PLANEA_START_MI#0 ← ((byte*)) (word/dword/signed dword) 53307
  (byte*) DTV_PLANEA_START_HI#0 ← ((byte*)) (word/dword/signed dword) 53317
  (byte*) DTV_PLANEA_STEP#0 ← ((byte*)) (word/dword/signed dword) 53318
  (byte*) DTV_PLANEA_MODULO_LO#0 ← ((byte*)) (word/dword/signed dword) 53304
  (byte*) DTV_PLANEA_MODULO_HI#0 ← ((byte*)) (word/dword/signed dword) 53305
  (byte*) DTV_PLANEB_START_LO#0 ← ((byte*)) (word/dword/signed dword) 53321
  (byte*) DTV_PLANEB_START_MI#0 ← ((byte*)) (word/dword/signed dword) 53322
  (byte*) DTV_PLANEB_START_HI#0 ← ((byte*)) (word/dword/signed dword) 53323
  (byte*) DTV_PLANEB_STEP#0 ← ((byte*)) (word/dword/signed dword) 53324
  (byte*) DTV_PLANEB_MODULO_LO#0 ← ((byte*)) (word/dword/signed dword) 53319
  (byte*) DTV_PLANEB_MODULO_HI#0 ← ((byte*)) (word/dword/signed dword) 53320
  (byte*) DTV_SPRITE_BANK#0 ← ((byte*)) (word/dword/signed dword) 53325
  (byte*) DTV_COLOR_BANK_LO#0 ← ((byte*)) (word/dword/signed dword) 53302
  (byte*) DTV_COLOR_BANK_HI#0 ← ((byte*)) (word/dword/signed dword) 53303
  (dword) DTV_COLOR_BANK_DEFAULT#0 ← (dword/signed dword) 120832
  (byte*) DTV_GRAPHICS_VIC_BANK#0 ← ((byte*)) (word/dword/signed dword) 53309
  (byte*) DTV_GRAPHICS_HICOL_BANK#0 ← ((byte*)) (word/dword/signed dword) 53310
  to:@5
@5: scope:[]  from @4
  (byte*) DTV_BLITTER_SRCA_LO#0 ← ((byte*)) (word/dword/signed dword) 54048
  (byte*) DTV_BLITTER_SRCA_MI#0 ← ((byte*)) (word/dword/signed dword) 54049
  (byte*) DTV_BLITTER_SRCA_HI#0 ← ((byte*)) (word/dword/signed dword) 54050
  (byte*) DTV_BLITTER_SRCA_MOD_LO#0 ← ((byte*)) (word/dword/signed dword) 54051
  (byte*) DTV_BLITTER_SRCA_MOD_HI#0 ← ((byte*)) (word/dword/signed dword) 54052
  (byte*) DTV_BLITTER_SRCA_LIN_LO#0 ← ((byte*)) (word/dword/signed dword) 54053
  (byte*) DTV_BLITTER_SRCA_LIN_HI#0 ← ((byte*)) (word/dword/signed dword) 54054
  (byte*) DTV_BLITTER_SRCA_STEP#0 ← ((byte*)) (word/dword/signed dword) 54055
  (byte*) DTV_BLITTER_SRCB_LO#0 ← ((byte*)) (word/dword/signed dword) 54056
  (byte*) DTV_BLITTER_SRCB_MI#0 ← ((byte*)) (word/dword/signed dword) 54057
  (byte*) DTV_BLITTER_SRCB_HI#0 ← ((byte*)) (word/dword/signed dword) 54058
  (byte*) DTV_BLITTER_SRCB_MOD_LO#0 ← ((byte*)) (word/dword/signed dword) 54059
  (byte*) DTV_BLITTER_SRCB_MOD_HI#0 ← ((byte*)) (word/dword/signed dword) 54060
  (byte*) DTV_BLITTER_SRCB_LIN_LO#0 ← ((byte*)) (word/dword/signed dword) 54061
  (byte*) DTV_BLITTER_SRCB_LIN_HI#0 ← ((byte*)) (word/dword/signed dword) 54062
  (byte*) DTV_BLITTER_SRCB_STEP#0 ← ((byte*)) (word/dword/signed dword) 54063
  (byte*) DTV_BLITTER_DEST_LO#0 ← ((byte*)) (word/dword/signed dword) 54064
  (byte*) DTV_BLITTER_DEST_MI#0 ← ((byte*)) (word/dword/signed dword) 54065
  (byte*) DTV_BLITTER_DEST_HI#0 ← ((byte*)) (word/dword/signed dword) 54066
  (byte*) DTV_BLITTER_DEST_MOD_LO#0 ← ((byte*)) (word/dword/signed dword) 54067
  (byte*) DTV_BLITTER_DEST_MOD_HI#0 ← ((byte*)) (word/dword/signed dword) 54068
  (byte*) DTV_BLITTER_DEST_LIN_LO#0 ← ((byte*)) (word/dword/signed dword) 54069
  (byte*) DTV_BLITTER_DEST_LIN_HI#0 ← ((byte*)) (word/dword/signed dword) 54070
  (byte*) DTV_BLITTER_DEST_STEP#0 ← ((byte*)) (word/dword/signed dword) 54071
  (byte*) DTV_BLITTER_LEN_LO#0 ← ((byte*)) (word/dword/signed dword) 54072
  (byte*) DTV_BLITTER_LEN_HI#0 ← ((byte*)) (word/dword/signed dword) 54073
  (byte*) DTV_BLITTER_CONTROL#0 ← ((byte*)) (word/dword/signed dword) 54074
  (byte) DTV_BLIT_FORCE_START#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) DTV_BLIT_SRCA_FWD#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) DTV_BLIT_SRCB_FWD#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) DTV_BLIT_DEST_FWD#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte) DTV_BLIT_VIC_IRQ#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
  (byte) DTV_BLIT_CIA_IRQ#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
  (byte) DTV_BLIT_VBLANK#0 ← (byte/signed byte/word/signed word/dword/signed dword) 64
  (byte) DTV_BLIT_IRQ_EN#0 ← (byte/word/signed word/dword/signed dword) 128
  (byte*) DTV_BLITTER_TRANSPARANCY#0 ← ((byte*)) (word/dword/signed dword) 54075
  (byte) DTV_BLIT_DISABLE_B#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) DTV_BLIT_WRITE_TRANSPARENT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) DTV_BLIT_WRITE_NONTRANSPARENT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) DTV_BLIT_TRANSPARANCY_NONE#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte*) DTV_BLITTER_ALU#0 ← ((byte*)) (word/dword/signed dword) 54078
  (byte) DTV_BLIT_SHIFT0#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) DTV_BLIT_SHIFT1#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) DTV_BLIT_SHIFT2#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) DTV_BLIT_SHIFT3#0 ← (byte/signed byte/word/signed word/dword/signed dword) 3
  (byte) DTV_BLIT_SHIFT4#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) DTV_BLIT_SHIFT5#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
  (byte) DTV_BLIT_SHIFT6#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
  (byte) DTV_BLIT_SHIFT7#0 ← (byte/signed byte/word/signed word/dword/signed dword) 7
  (byte) DTV_BLIT_AND#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) DTV_BLIT_NAND#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte) DTV_BLIT_NOR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 16
  (byte) DTV_BLIT_OR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 24
  (byte) DTV_BLIT_XOR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 32
  (byte) DTV_BLIT_XNOR#0 ← (byte/signed byte/word/signed word/dword/signed dword) 40
  (byte) DTV_BLIT_ADD#0 ← (byte/signed byte/word/signed word/dword/signed dword) 48
  (byte) DTV_BLIT_SUB#0 ← (byte/signed byte/word/signed word/dword/signed dword) 56
  (byte*) DTV_BLITTER_CONTROL2#0 ← ((byte*)) (word/dword/signed dword) 54079
  (byte) DTV_BLIT_CLEAR_IRQ#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) DTV_BLIT_SRCA_CONT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte) DTV_BLIT_SRCB_CONT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 4
  (byte) DTV_BLIT_DEST_CONT#0 ← (byte/signed byte/word/signed word/dword/signed dword) 8
  (byte) DTV_BLIT_STATUS_BUSY#0 ← (byte/signed byte/word/signed word/dword/signed dword) 1
  (byte) DTV_BLIT_STATUS_IRQ#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
  (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte[]) SRCA#0 ← { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' }
  (byte) SRCA_LEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 9
  (byte[]) SRCB#0 ← { (byte/word/signed word/dword/signed dword) 128 }
  to:@6
main: scope:[main]  from @6
  (byte*) DTV_BLITTER_ALU#1 ← phi( @6/(byte*) DTV_BLITTER_ALU#2 )
  *((byte*) DTV_FEATURE#0) ← (byte) DTV_FEATURE_ENABLE#0
  *((byte*) DTV_BLITTER_CONTROL2#0) ← (byte) DTV_BLIT_CLEAR_IRQ#0
  (byte~) main::$0 ← < (byte[]) SRCA#0
  *((byte*) DTV_BLITTER_SRCA_LO#0) ← (byte~) main::$0
  (byte~) main::$1 ← > (byte[]) SRCA#0
  *((byte*) DTV_BLITTER_SRCA_MI#0) ← (byte~) main::$1
  *((byte*) DTV_BLITTER_SRCA_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte/signed byte/word/signed word/dword/signed dword~) main::$2 ← < (word/signed word/dword/signed dword) 256
  *((byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword~) main::$2
  (byte/signed byte/word/signed word/dword/signed dword~) main::$3 ← > (word/signed word/dword/signed dword) 256
  *((byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword~) main::$3
  *((byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16
  (byte~) main::$4 ← < (byte[]) SRCB#0
  *((byte*) DTV_BLITTER_SRCB_LO#0) ← (byte~) main::$4
  (byte~) main::$5 ← > (byte[]) SRCB#0
  *((byte*) DTV_BLITTER_SRCB_MI#0) ← (byte~) main::$5
  *((byte*) DTV_BLITTER_SRCB_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte/signed byte/word/signed word/dword/signed dword~) main::$6 ← < (word/signed word/dword/signed dword) 256
  *((byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword~) main::$6
  (byte/signed byte/word/signed word/dword/signed dword~) main::$7 ← > (word/signed word/dword/signed dword) 256
  *((byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword~) main::$7
  *((byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte~) main::$8 ← < (byte*) SCREEN#0
  *((byte*) DTV_BLITTER_DEST_LO#0) ← (byte~) main::$8
  (byte~) main::$9 ← > (byte*) SCREEN#0
  *((byte*) DTV_BLITTER_DEST_MI#0) ← (byte~) main::$9
  *((byte*) DTV_BLITTER_DEST_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte/signed byte/word/signed word/dword/signed dword~) main::$10 ← < (word/signed word/dword/signed dword) 256
  *((byte*) DTV_BLITTER_DEST_LIN_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword~) main::$10
  (byte/signed byte/word/signed word/dword/signed dword~) main::$11 ← > (word/signed word/dword/signed dword) 256
  *((byte*) DTV_BLITTER_DEST_LIN_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword~) main::$11
  *((byte*) DTV_BLITTER_DEST_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16
  *((byte*) DTV_BLITTER_LEN_LO#0) ← (byte) SRCA_LEN#0
  *((byte*) DTV_BLITTER_LEN_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  *((byte*) DTV_BLITTER_ALU#1) ← (byte) DTV_BLIT_ADD#0
  *((byte*) DTV_BLITTER_TRANSPARANCY#0) ← (byte) DTV_BLIT_TRANSPARANCY_NONE#0
  (byte~) main::$12 ← (byte) DTV_BLIT_FORCE_START#0 | (byte) DTV_BLIT_SRCA_FWD#0
  (byte~) main::$13 ← (byte~) main::$12 | (byte) DTV_BLIT_SRCB_FWD#0
  (byte~) main::$14 ← (byte~) main::$13 | (byte) DTV_BLIT_DEST_FWD#0
  *((byte*) DTV_BLITTER_CONTROL#0) ← (byte~) main::$14
  *((byte*) DTV_BLITTER_CONTROL2#0) ← (byte) DTV_BLIT_DEST_CONT#0
  (byte) main::r#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:main::@2
main::@1: scope:[main]  from main::@3
  (byte) main::r#4 ← phi( main::@3/(byte) main::r#1 )
  to:main::@2
main::@2: scope:[main]  from main main::@1 main::@2
  (byte) main::r#3 ← phi( main/(byte) main::r#0 main::@1/(byte) main::r#4 main::@2/(byte) main::r#3 )
  (byte~) main::$15 ← *((byte*) DTV_BLITTER_CONTROL2#0) & (byte) DTV_BLIT_STATUS_BUSY#0
  (bool~) main::$16 ← (byte~) main::$15 != (byte/signed byte/word/signed word/dword/signed dword) 0
  if((bool~) main::$16) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@2
  (byte) main::r#2 ← phi( main::@2/(byte) main::r#3 )
  (byte~) main::$17 ← (byte) DTV_BLIT_FORCE_START#0 | (byte) DTV_BLIT_SRCA_FWD#0
  (byte~) main::$18 ← (byte~) main::$17 | (byte) DTV_BLIT_SRCB_FWD#0
  (byte~) main::$19 ← (byte~) main::$18 | (byte) DTV_BLIT_DEST_FWD#0
  *((byte*) DTV_BLITTER_CONTROL#0) ← (byte~) main::$19
  (byte) main::r#1 ← (byte) main::r#2 + rangenext(0,7)
  (bool~) main::$20 ← (byte) main::r#1 != rangelast(0,7)
  if((bool~) main::$20) goto main::@1
  to:main::@return
main::@return: scope:[main]  from main::@3
  return 
  to:@return
@6: scope:[]  from @5
  (byte*) DTV_BLITTER_ALU#2 ← phi( @5/(byte*) DTV_BLITTER_ALU#0 )
  call main 
  to:@7
@7: scope:[]  from @6
  to:@end
@end: scope:[]  from @7

SYMBOL TABLE SSA
(label) @4
(label) @5
(label) @6
(label) @7
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte*) BGCOL1
(byte*) BGCOL1#0
(byte*) BGCOL2
(byte*) BGCOL2#0
(byte*) BGCOL3
(byte*) BGCOL3#0
(byte*) BGCOL4
(byte*) BGCOL4#0
(byte) BLACK
(byte) BLACK#0
(byte) BLUE
(byte) BLUE#0
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte) BROWN
(byte) BROWN#0
(byte*) CHARGEN
(byte*) CHARGEN#0
(byte*) CIA1_INTERRUPT
(byte*) CIA1_INTERRUPT#0
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A#0
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_A_DDR#0
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B#0
(byte*) CIA1_PORT_B_DDR
(byte*) CIA1_PORT_B_DDR#0
(byte*) CIA2_INTERRUPT
(byte*) CIA2_INTERRUPT#0
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A#0
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_A_DDR#0
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B#0
(byte*) CIA2_PORT_B_DDR
(byte*) CIA2_PORT_B_DDR#0
(byte) CIA_INTERRUPT_CLEAR
(byte) CIA_INTERRUPT_CLEAR#0
(byte*) COLS
(byte*) COLS#0
(byte) CYAN
(byte) CYAN#0
(byte*) D011
(byte*) D011#0
(byte*) D016
(byte*) D016#0
(byte*) D018
(byte*) D018#0
(byte) DARK_GREY
(byte) DARK_GREY#0
(byte) DTV_BADLINE_OFF
(byte) DTV_BADLINE_OFF#0
(byte*) DTV_BLITTER_ALU
(byte*) DTV_BLITTER_ALU#0
(byte*) DTV_BLITTER_ALU#1
(byte*) DTV_BLITTER_ALU#2
(byte*) DTV_BLITTER_CONTROL
(byte*) DTV_BLITTER_CONTROL#0
(byte*) DTV_BLITTER_CONTROL2
(byte*) DTV_BLITTER_CONTROL2#0
(byte*) DTV_BLITTER_DEST_HI
(byte*) DTV_BLITTER_DEST_HI#0
(byte*) DTV_BLITTER_DEST_LIN_HI
(byte*) DTV_BLITTER_DEST_LIN_HI#0
(byte*) DTV_BLITTER_DEST_LIN_LO
(byte*) DTV_BLITTER_DEST_LIN_LO#0
(byte*) DTV_BLITTER_DEST_LO
(byte*) DTV_BLITTER_DEST_LO#0
(byte*) DTV_BLITTER_DEST_MI
(byte*) DTV_BLITTER_DEST_MI#0
(byte*) DTV_BLITTER_DEST_MOD_HI
(byte*) DTV_BLITTER_DEST_MOD_HI#0
(byte*) DTV_BLITTER_DEST_MOD_LO
(byte*) DTV_BLITTER_DEST_MOD_LO#0
(byte*) DTV_BLITTER_DEST_STEP
(byte*) DTV_BLITTER_DEST_STEP#0
(byte*) DTV_BLITTER_LEN_HI
(byte*) DTV_BLITTER_LEN_HI#0
(byte*) DTV_BLITTER_LEN_LO
(byte*) DTV_BLITTER_LEN_LO#0
(byte*) DTV_BLITTER_SRCA_HI
(byte*) DTV_BLITTER_SRCA_HI#0
(byte*) DTV_BLITTER_SRCA_LIN_HI
(byte*) DTV_BLITTER_SRCA_LIN_HI#0
(byte*) DTV_BLITTER_SRCA_LIN_LO
(byte*) DTV_BLITTER_SRCA_LIN_LO#0
(byte*) DTV_BLITTER_SRCA_LO
(byte*) DTV_BLITTER_SRCA_LO#0
(byte*) DTV_BLITTER_SRCA_MI
(byte*) DTV_BLITTER_SRCA_MI#0
(byte*) DTV_BLITTER_SRCA_MOD_HI
(byte*) DTV_BLITTER_SRCA_MOD_HI#0
(byte*) DTV_BLITTER_SRCA_MOD_LO
(byte*) DTV_BLITTER_SRCA_MOD_LO#0
(byte*) DTV_BLITTER_SRCA_STEP
(byte*) DTV_BLITTER_SRCA_STEP#0
(byte*) DTV_BLITTER_SRCB_HI
(byte*) DTV_BLITTER_SRCB_HI#0
(byte*) DTV_BLITTER_SRCB_LIN_HI
(byte*) DTV_BLITTER_SRCB_LIN_HI#0
(byte*) DTV_BLITTER_SRCB_LIN_LO
(byte*) DTV_BLITTER_SRCB_LIN_LO#0
(byte*) DTV_BLITTER_SRCB_LO
(byte*) DTV_BLITTER_SRCB_LO#0
(byte*) DTV_BLITTER_SRCB_MI
(byte*) DTV_BLITTER_SRCB_MI#0
(byte*) DTV_BLITTER_SRCB_MOD_HI
(byte*) DTV_BLITTER_SRCB_MOD_HI#0
(byte*) DTV_BLITTER_SRCB_MOD_LO
(byte*) DTV_BLITTER_SRCB_MOD_LO#0
(byte*) DTV_BLITTER_SRCB_STEP
(byte*) DTV_BLITTER_SRCB_STEP#0
(byte*) DTV_BLITTER_TRANSPARANCY
(byte*) DTV_BLITTER_TRANSPARANCY#0
(byte) DTV_BLIT_ADD
(byte) DTV_BLIT_ADD#0
(byte) DTV_BLIT_AND
(byte) DTV_BLIT_AND#0
(byte) DTV_BLIT_CIA_IRQ
(byte) DTV_BLIT_CIA_IRQ#0
(byte) DTV_BLIT_CLEAR_IRQ
(byte) DTV_BLIT_CLEAR_IRQ#0
(byte) DTV_BLIT_DEST_CONT
(byte) DTV_BLIT_DEST_CONT#0
(byte) DTV_BLIT_DEST_FWD
(byte) DTV_BLIT_DEST_FWD#0
(byte) DTV_BLIT_DISABLE_B
(byte) DTV_BLIT_DISABLE_B#0
(byte) DTV_BLIT_FORCE_START
(byte) DTV_BLIT_FORCE_START#0
(byte) DTV_BLIT_IRQ_EN
(byte) DTV_BLIT_IRQ_EN#0
(byte) DTV_BLIT_NAND
(byte) DTV_BLIT_NAND#0
(byte) DTV_BLIT_NOR
(byte) DTV_BLIT_NOR#0
(byte) DTV_BLIT_OR
(byte) DTV_BLIT_OR#0
(byte) DTV_BLIT_SHIFT0
(byte) DTV_BLIT_SHIFT0#0
(byte) DTV_BLIT_SHIFT1
(byte) DTV_BLIT_SHIFT1#0
(byte) DTV_BLIT_SHIFT2
(byte) DTV_BLIT_SHIFT2#0
(byte) DTV_BLIT_SHIFT3
(byte) DTV_BLIT_SHIFT3#0
(byte) DTV_BLIT_SHIFT4
(byte) DTV_BLIT_SHIFT4#0
(byte) DTV_BLIT_SHIFT5
(byte) DTV_BLIT_SHIFT5#0
(byte) DTV_BLIT_SHIFT6
(byte) DTV_BLIT_SHIFT6#0
(byte) DTV_BLIT_SHIFT7
(byte) DTV_BLIT_SHIFT7#0
(byte) DTV_BLIT_SRCA_CONT
(byte) DTV_BLIT_SRCA_CONT#0
(byte) DTV_BLIT_SRCA_FWD
(byte) DTV_BLIT_SRCA_FWD#0
(byte) DTV_BLIT_SRCB_CONT
(byte) DTV_BLIT_SRCB_CONT#0
(byte) DTV_BLIT_SRCB_FWD
(byte) DTV_BLIT_SRCB_FWD#0
(byte) DTV_BLIT_STATUS_BUSY
(byte) DTV_BLIT_STATUS_BUSY#0
(byte) DTV_BLIT_STATUS_IRQ
(byte) DTV_BLIT_STATUS_IRQ#0
(byte) DTV_BLIT_SUB
(byte) DTV_BLIT_SUB#0
(byte) DTV_BLIT_TRANSPARANCY_NONE
(byte) DTV_BLIT_TRANSPARANCY_NONE#0
(byte) DTV_BLIT_VBLANK
(byte) DTV_BLIT_VBLANK#0
(byte) DTV_BLIT_VIC_IRQ
(byte) DTV_BLIT_VIC_IRQ#0
(byte) DTV_BLIT_WRITE_NONTRANSPARENT
(byte) DTV_BLIT_WRITE_NONTRANSPARENT#0
(byte) DTV_BLIT_WRITE_TRANSPARENT
(byte) DTV_BLIT_WRITE_TRANSPARENT#0
(byte) DTV_BLIT_XNOR
(byte) DTV_BLIT_XNOR#0
(byte) DTV_BLIT_XOR
(byte) DTV_BLIT_XOR#0
(byte) DTV_BORDER_OFF
(byte) DTV_BORDER_OFF#0
(byte) DTV_CHUNKY
(byte) DTV_CHUNKY#0
(byte) DTV_COLORRAM_OFF
(byte) DTV_COLORRAM_OFF#0
(dword) DTV_COLOR_BANK_DEFAULT
(dword) DTV_COLOR_BANK_DEFAULT#0
(byte*) DTV_COLOR_BANK_HI
(byte*) DTV_COLOR_BANK_HI#0
(byte*) DTV_COLOR_BANK_LO
(byte*) DTV_COLOR_BANK_LO#0
(byte*) DTV_CONTROL
(byte*) DTV_CONTROL#0
(byte*) DTV_FEATURE
(byte*) DTV_FEATURE#0
(byte) DTV_FEATURE_DISABLE_TIL_RESET
(byte) DTV_FEATURE_DISABLE_TIL_RESET#0
(byte) DTV_FEATURE_ENABLE
(byte) DTV_FEATURE_ENABLE#0
(byte*) DTV_GRAPHICS_HICOL_BANK
(byte*) DTV_GRAPHICS_HICOL_BANK#0
(byte*) DTV_GRAPHICS_VIC_BANK
(byte*) DTV_GRAPHICS_VIC_BANK#0
(byte) DTV_HIGHCOLOR
(byte) DTV_HIGHCOLOR#0
(byte) DTV_LINEAR
(byte) DTV_LINEAR#0
(byte) DTV_OVERSCAN
(byte) DTV_OVERSCAN#0
(byte*) DTV_PALETTE
(byte*) DTV_PALETTE#0
(byte[16]) DTV_PALETTE_DEFAULT
(byte[16]) DTV_PALETTE_DEFAULT#0
(byte*) DTV_PLANEA_MODULO_HI
(byte*) DTV_PLANEA_MODULO_HI#0
(byte*) DTV_PLANEA_MODULO_LO
(byte*) DTV_PLANEA_MODULO_LO#0
(byte*) DTV_PLANEA_START_HI
(byte*) DTV_PLANEA_START_HI#0
(byte*) DTV_PLANEA_START_LO
(byte*) DTV_PLANEA_START_LO#0
(byte*) DTV_PLANEA_START_MI
(byte*) DTV_PLANEA_START_MI#0
(byte*) DTV_PLANEA_STEP
(byte*) DTV_PLANEA_STEP#0
(byte*) DTV_PLANEB_MODULO_HI
(byte*) DTV_PLANEB_MODULO_HI#0
(byte*) DTV_PLANEB_MODULO_LO
(byte*) DTV_PLANEB_MODULO_LO#0
(byte*) DTV_PLANEB_START_HI
(byte*) DTV_PLANEB_START_HI#0
(byte*) DTV_PLANEB_START_LO
(byte*) DTV_PLANEB_START_LO#0
(byte*) DTV_PLANEB_START_MI
(byte*) DTV_PLANEB_START_MI#0
(byte*) DTV_PLANEB_STEP
(byte*) DTV_PLANEB_STEP#0
(byte*) DTV_SPRITE_BANK
(byte*) DTV_SPRITE_BANK#0
(byte) GREEN
(byte) GREEN#0
(byte) GREY
(byte) GREY#0
(void()**) HARDWARE_IRQ
(void()**) HARDWARE_IRQ#0
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_BG#0
(byte) IRQ_COLLISION_SPRITE
(byte) IRQ_COLLISION_SPRITE#0
(byte*) IRQ_ENABLE
(byte*) IRQ_ENABLE#0
(byte) IRQ_LIGHTPEN
(byte) IRQ_LIGHTPEN#0
(byte) IRQ_RASTER
(byte) IRQ_RASTER#0
(byte*) IRQ_STATUS
(byte*) IRQ_STATUS#0
(void()**) KERNEL_IRQ
(void()**) KERNEL_IRQ#0
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_X#0
(byte*) LIGHTPEN_Y
(byte*) LIGHTPEN_Y#0
(byte) LIGHT_BLUE
(byte) LIGHT_BLUE#0
(byte) LIGHT_GREEN
(byte) LIGHT_GREEN#0
(byte) LIGHT_GREY
(byte) LIGHT_GREY#0
(byte) ORANGE
(byte) ORANGE#0
(byte) PINK
(byte) PINK#0
(byte*) PROCPORT
(byte*) PROCPORT#0
(byte) PROCPORT_BASIC_KERNEL_IO
(byte) PROCPORT_BASIC_KERNEL_IO#0
(byte*) PROCPORT_DDR
(byte*) PROCPORT_DDR#0
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_DDR_MEMORY_MASK#0
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_KERNEL_IO#0
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_ALL#0
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_CHARROM#0
(byte) PROCPORT_RAM_IO
(byte) PROCPORT_RAM_IO#0
(byte) PURPLE
(byte) PURPLE#0
(byte*) RASTER
(byte*) RASTER#0
(byte) RED
(byte) RED#0
(byte*) SCREEN
(byte*) SCREEN#0
(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_MC1
(byte*) SPRITES_MC1#0
(byte*) SPRITES_MC2
(byte*) SPRITES_MC2#0
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_PRIORITY#0
(byte*) SPRITES_XMSB
(byte*) SPRITES_XMSB#0
(byte*) SPRITES_XPOS
(byte*) SPRITES_XPOS#0
(byte*) SPRITES_YPOS
(byte*) SPRITES_YPOS#0
(word) SPRITE_PTRS
(word) SPRITE_PTRS#0
(byte[]) SRCA
(byte[]) SRCA#0
(byte) SRCA_LEN
(byte) SRCA_LEN#0
(byte[]) SRCB
(byte[]) SRCB#0
(byte) VIC_BMM
(byte) VIC_BMM#0
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL#0
(byte*) VIC_CONTROL2
(byte*) VIC_CONTROL2#0
(byte) VIC_CSEL
(byte) VIC_CSEL#0
(byte) VIC_DEN
(byte) VIC_DEN#0
(byte) VIC_ECM
(byte) VIC_ECM#0
(byte) VIC_MCM
(byte) VIC_MCM#0
(byte*) VIC_MEMORY
(byte*) VIC_MEMORY#0
(byte) VIC_RSEL
(byte) VIC_RSEL#0
(byte) VIC_RST8
(byte) VIC_RST8#0
(byte) WHITE
(byte) WHITE#0
(byte) YELLOW
(byte) YELLOW#0
(void()) main()
(byte~) main::$0
(byte~) main::$1
(byte/signed byte/word/signed word/dword/signed dword~) main::$10
(byte/signed byte/word/signed word/dword/signed dword~) main::$11
(byte~) main::$12
(byte~) main::$13
(byte~) main::$14
(byte~) main::$15
(bool~) main::$16
(byte~) main::$17
(byte~) main::$18
(byte~) main::$19
(byte/signed byte/word/signed word/dword/signed dword~) main::$2
(bool~) main::$20
(byte/signed byte/word/signed word/dword/signed dword~) main::$3
(byte~) main::$4
(byte~) main::$5
(byte/signed byte/word/signed word/dword/signed dword~) main::$6
(byte/signed byte/word/signed word/dword/signed dword~) main::$7
(byte~) main::$8
(byte~) main::$9
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(byte) main::r
(byte) main::r#0
(byte) main::r#1
(byte) main::r#2
(byte) main::r#3
(byte) main::r#4

Culled Empty Block (label) @7
Successful SSA optimization Pass2CullEmptyBlocks
Alias (byte) main::r#1 = (byte) main::r#4 
Alias (byte) main::r#2 = (byte) main::r#3 
Alias (byte*) DTV_BLITTER_ALU#0 = (byte*) DTV_BLITTER_ALU#2 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte) main::r#2
Successful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) DTV_BLITTER_ALU#1 (byte*) DTV_BLITTER_ALU#0
Successful SSA optimization Pass2RedundantPhiElimination
Simple Condition (bool~) main::$16 [231] if((byte~) main::$15!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2
Simple Condition (bool~) main::$20 [239] if((byte) main::r#1!=rangelast(0,7)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
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_ALL#0 = 48
Constant (const byte) PROCPORT_RAM_IO#0 = 53
Constant (const byte) PROCPORT_RAM_CHARROM#0 = 49
Constant (const byte) PROCPORT_KERNEL_IO#0 = 54
Constant (const byte) PROCPORT_BASIC_KERNEL_IO#0 = 55
Constant (const byte*) CHARGEN#0 = ((byte*))53248
Constant (const word) SPRITE_PTRS#0 = 1016
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_PRIORITY#0 = ((byte*))53275
Constant (const byte*) SPRITES_MC#0 = ((byte*))53276
Constant (const byte*) SPRITES_EXPAND_X#0 = ((byte*))53277
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) BGCOL#0 = ((byte*))53281
Constant (const byte*) BGCOL1#0 = ((byte*))53281
Constant (const byte*) BGCOL2#0 = ((byte*))53282
Constant (const byte*) BGCOL3#0 = ((byte*))53283
Constant (const byte*) BGCOL4#0 = ((byte*))53284
Constant (const byte*) SPRITES_MC1#0 = ((byte*))53285
Constant (const byte*) SPRITES_MC2#0 = ((byte*))53286
Constant (const byte*) SPRITES_COLS#0 = ((byte*))53287
Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265
Constant (const byte*) D011#0 = ((byte*))53265
Constant (const byte) VIC_RST8#0 = 128
Constant (const byte) VIC_ECM#0 = 64
Constant (const byte) VIC_BMM#0 = 32
Constant (const byte) VIC_DEN#0 = 16
Constant (const byte) VIC_RSEL#0 = 8
Constant (const byte*) VIC_CONTROL2#0 = ((byte*))53270
Constant (const byte*) D016#0 = ((byte*))53270
Constant (const byte) VIC_MCM#0 = 16
Constant (const byte) VIC_CSEL#0 = 8
Constant (const byte*) D018#0 = ((byte*))53272
Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272
Constant (const byte*) LIGHTPEN_X#0 = ((byte*))53267
Constant (const byte*) LIGHTPEN_Y#0 = ((byte*))53268
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) IRQ_COLLISION_BG#0 = 2
Constant (const byte) IRQ_COLLISION_SPRITE#0 = 4
Constant (const byte) IRQ_LIGHTPEN#0 = 8
Constant (const byte*) COLS#0 = ((byte*))55296
Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320
Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321
Constant (const byte*) CIA1_PORT_A_DDR#0 = ((byte*))56322
Constant (const byte*) CIA1_PORT_B_DDR#0 = ((byte*))56323
Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333
Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127
Constant (const byte*) CIA2_PORT_A#0 = ((byte*))56576
Constant (const byte*) CIA2_PORT_B#0 = ((byte*))56577
Constant (const byte*) CIA2_PORT_A_DDR#0 = ((byte*))56578
Constant (const byte*) CIA2_PORT_B_DDR#0 = ((byte*))56579
Constant (const byte*) CIA2_INTERRUPT#0 = ((byte*))56589
Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788
Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534
Constant (const byte) BLACK#0 = 0
Constant (const byte) WHITE#0 = 1
Constant (const byte) RED#0 = 2
Constant (const byte) CYAN#0 = 3
Constant (const byte) PURPLE#0 = 4
Constant (const byte) GREEN#0 = 5
Constant (const byte) BLUE#0 = 6
Constant (const byte) YELLOW#0 = 7
Constant (const byte) ORANGE#0 = 8
Constant (const byte) BROWN#0 = 9
Constant (const byte) PINK#0 = 10
Constant (const byte) DARK_GREY#0 = 11
Constant (const byte) GREY#0 = 12
Constant (const byte) LIGHT_GREEN#0 = 13
Constant (const byte) LIGHT_BLUE#0 = 14
Constant (const byte) LIGHT_GREY#0 = 15
Constant (const byte*) DTV_FEATURE#0 = ((byte*))53311
Constant (const byte) DTV_FEATURE_ENABLE#0 = 1
Constant (const byte) DTV_FEATURE_DISABLE_TIL_RESET#0 = 2
Constant (const byte*) DTV_CONTROL#0 = ((byte*))53308
Constant (const byte) DTV_LINEAR#0 = 1
Constant (const byte) DTV_BORDER_OFF#0 = 2
Constant (const byte) DTV_HIGHCOLOR#0 = 4
Constant (const byte) DTV_OVERSCAN#0 = 8
Constant (const byte) DTV_COLORRAM_OFF#0 = 16
Constant (const byte) DTV_BADLINE_OFF#0 = 32
Constant (const byte) DTV_CHUNKY#0 = 64
Constant (const byte*) DTV_PALETTE#0 = ((byte*))53760
Constant (const byte[16]) DTV_PALETTE_DEFAULT#0 = { 0, 15, 54, 190, 88, 219, 134, 255, 41, 38, 59, 5, 7, 223, 154, 10 }
Constant (const byte*) DTV_PLANEA_START_LO#0 = ((byte*))53306
Constant (const byte*) DTV_PLANEA_START_MI#0 = ((byte*))53307
Constant (const byte*) DTV_PLANEA_START_HI#0 = ((byte*))53317
Constant (const byte*) DTV_PLANEA_STEP#0 = ((byte*))53318
Constant (const byte*) DTV_PLANEA_MODULO_LO#0 = ((byte*))53304
Constant (const byte*) DTV_PLANEA_MODULO_HI#0 = ((byte*))53305
Constant (const byte*) DTV_PLANEB_START_LO#0 = ((byte*))53321
Constant (const byte*) DTV_PLANEB_START_MI#0 = ((byte*))53322
Constant (const byte*) DTV_PLANEB_START_HI#0 = ((byte*))53323
Constant (const byte*) DTV_PLANEB_STEP#0 = ((byte*))53324
Constant (const byte*) DTV_PLANEB_MODULO_LO#0 = ((byte*))53319
Constant (const byte*) DTV_PLANEB_MODULO_HI#0 = ((byte*))53320
Constant (const byte*) DTV_SPRITE_BANK#0 = ((byte*))53325
Constant (const byte*) DTV_COLOR_BANK_LO#0 = ((byte*))53302
Constant (const byte*) DTV_COLOR_BANK_HI#0 = ((byte*))53303
Constant (const dword) DTV_COLOR_BANK_DEFAULT#0 = 120832
Constant (const byte*) DTV_GRAPHICS_VIC_BANK#0 = ((byte*))53309
Constant (const byte*) DTV_GRAPHICS_HICOL_BANK#0 = ((byte*))53310
Constant (const byte*) DTV_BLITTER_SRCA_LO#0 = ((byte*))54048
Constant (const byte*) DTV_BLITTER_SRCA_MI#0 = ((byte*))54049
Constant (const byte*) DTV_BLITTER_SRCA_HI#0 = ((byte*))54050
Constant (const byte*) DTV_BLITTER_SRCA_MOD_LO#0 = ((byte*))54051
Constant (const byte*) DTV_BLITTER_SRCA_MOD_HI#0 = ((byte*))54052
Constant (const byte*) DTV_BLITTER_SRCA_LIN_LO#0 = ((byte*))54053
Constant (const byte*) DTV_BLITTER_SRCA_LIN_HI#0 = ((byte*))54054
Constant (const byte*) DTV_BLITTER_SRCA_STEP#0 = ((byte*))54055
Constant (const byte*) DTV_BLITTER_SRCB_LO#0 = ((byte*))54056
Constant (const byte*) DTV_BLITTER_SRCB_MI#0 = ((byte*))54057
Constant (const byte*) DTV_BLITTER_SRCB_HI#0 = ((byte*))54058
Constant (const byte*) DTV_BLITTER_SRCB_MOD_LO#0 = ((byte*))54059
Constant (const byte*) DTV_BLITTER_SRCB_MOD_HI#0 = ((byte*))54060
Constant (const byte*) DTV_BLITTER_SRCB_LIN_LO#0 = ((byte*))54061
Constant (const byte*) DTV_BLITTER_SRCB_LIN_HI#0 = ((byte*))54062
Constant (const byte*) DTV_BLITTER_SRCB_STEP#0 = ((byte*))54063
Constant (const byte*) DTV_BLITTER_DEST_LO#0 = ((byte*))54064
Constant (const byte*) DTV_BLITTER_DEST_MI#0 = ((byte*))54065
Constant (const byte*) DTV_BLITTER_DEST_HI#0 = ((byte*))54066
Constant (const byte*) DTV_BLITTER_DEST_MOD_LO#0 = ((byte*))54067
Constant (const byte*) DTV_BLITTER_DEST_MOD_HI#0 = ((byte*))54068
Constant (const byte*) DTV_BLITTER_DEST_LIN_LO#0 = ((byte*))54069
Constant (const byte*) DTV_BLITTER_DEST_LIN_HI#0 = ((byte*))54070
Constant (const byte*) DTV_BLITTER_DEST_STEP#0 = ((byte*))54071
Constant (const byte*) DTV_BLITTER_LEN_LO#0 = ((byte*))54072
Constant (const byte*) DTV_BLITTER_LEN_HI#0 = ((byte*))54073
Constant (const byte*) DTV_BLITTER_CONTROL#0 = ((byte*))54074
Constant (const byte) DTV_BLIT_FORCE_START#0 = 1
Constant (const byte) DTV_BLIT_SRCA_FWD#0 = 2
Constant (const byte) DTV_BLIT_SRCB_FWD#0 = 4
Constant (const byte) DTV_BLIT_DEST_FWD#0 = 8
Constant (const byte) DTV_BLIT_VIC_IRQ#0 = 16
Constant (const byte) DTV_BLIT_CIA_IRQ#0 = 32
Constant (const byte) DTV_BLIT_VBLANK#0 = 64
Constant (const byte) DTV_BLIT_IRQ_EN#0 = 128
Constant (const byte*) DTV_BLITTER_TRANSPARANCY#0 = ((byte*))54075
Constant (const byte) DTV_BLIT_DISABLE_B#0 = 1
Constant (const byte) DTV_BLIT_WRITE_TRANSPARENT#0 = 2
Constant (const byte) DTV_BLIT_WRITE_NONTRANSPARENT#0 = 4
Constant (const byte) DTV_BLIT_TRANSPARANCY_NONE#0 = 0
Constant (const byte*) DTV_BLITTER_ALU#0 = ((byte*))54078
Constant (const byte) DTV_BLIT_SHIFT0#0 = 0
Constant (const byte) DTV_BLIT_SHIFT1#0 = 1
Constant (const byte) DTV_BLIT_SHIFT2#0 = 2
Constant (const byte) DTV_BLIT_SHIFT3#0 = 3
Constant (const byte) DTV_BLIT_SHIFT4#0 = 4
Constant (const byte) DTV_BLIT_SHIFT5#0 = 5
Constant (const byte) DTV_BLIT_SHIFT6#0 = 6
Constant (const byte) DTV_BLIT_SHIFT7#0 = 7
Constant (const byte) DTV_BLIT_AND#0 = 0
Constant (const byte) DTV_BLIT_NAND#0 = 8
Constant (const byte) DTV_BLIT_NOR#0 = 16
Constant (const byte) DTV_BLIT_OR#0 = 24
Constant (const byte) DTV_BLIT_XOR#0 = 32
Constant (const byte) DTV_BLIT_XNOR#0 = 40
Constant (const byte) DTV_BLIT_ADD#0 = 48
Constant (const byte) DTV_BLIT_SUB#0 = 56
Constant (const byte*) DTV_BLITTER_CONTROL2#0 = ((byte*))54079
Constant (const byte) DTV_BLIT_CLEAR_IRQ#0 = 1
Constant (const byte) DTV_BLIT_SRCA_CONT#0 = 2
Constant (const byte) DTV_BLIT_SRCB_CONT#0 = 4
Constant (const byte) DTV_BLIT_DEST_CONT#0 = 8
Constant (const byte) DTV_BLIT_STATUS_BUSY#0 = 1
Constant (const byte) DTV_BLIT_STATUS_IRQ#0 = 2
Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const byte[]) SRCA#0 = { 'c', 'a', 'm', 'e', 'l', 'o', 't', '!', ' ' }
Constant (const byte) SRCA_LEN#0 = 9
Constant (const byte[]) SRCB#0 = { 128 }
Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$2 = <256
Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$3 = >256
Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$6 = <256
Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$7 = >256
Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$10 = <256
Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$11 = >256
Constant (const byte) main::r#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::$0 = <SRCA#0
Constant (const byte) main::$1 = >SRCA#0
Constant (const byte) main::$4 = <SRCB#0
Constant (const byte) main::$5 = >SRCB#0
Constant (const byte) main::$8 = <SCREEN#0
Constant (const byte) main::$9 = >SCREEN#0
Constant (const byte) main::$12 = DTV_BLIT_FORCE_START#0|DTV_BLIT_SRCA_FWD#0
Constant (const byte) main::$17 = DTV_BLIT_FORCE_START#0|DTV_BLIT_SRCA_FWD#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::$13 = main::$12|DTV_BLIT_SRCB_FWD#0
Constant (const byte) main::$18 = main::$17|DTV_BLIT_SRCB_FWD#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) main::$14 = main::$13|DTV_BLIT_DEST_FWD#0
Constant (const byte) main::$19 = main::$18|DTV_BLIT_DEST_FWD#0
Successful SSA optimization Pass2ConstantIdentification
Successful SSA optimization PassNEliminateUnusedVars
Resolved ranged next value main::r#1 ← ++ main::r#2 to ++
Resolved ranged comparison value if(main::r#1!=rangelast(0,7)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) main::@1
Successful SSA optimization Pass2CullEmptyBlocks
Inlining constant with var siblings (const byte) main::r#0
Constant inlined main::r#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined main::$12 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0
Constant inlined main::$13 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0
Constant inlined main::$14 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0
Constant inlined main::$10 = <(word/signed word/dword/signed dword) 256
Constant inlined main::$11 = >(word/signed word/dword/signed dword) 256
Constant inlined main::$1 = >(const byte[]) SRCA#0
Constant inlined main::$2 = <(word/signed word/dword/signed dword) 256
Constant inlined main::$17 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0
Constant inlined main::$18 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0
Constant inlined main::$0 = <(const byte[]) SRCA#0
Constant inlined main::$19 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0
Constant inlined main::$5 = >(const byte[]) SRCB#0
Constant inlined main::$6 = <(word/signed word/dword/signed dword) 256
Constant inlined main::$3 = >(word/signed word/dword/signed dword) 256
Constant inlined main::$4 = <(const byte[]) SRCB#0
Constant inlined main::$9 = >(const byte*) SCREEN#0
Constant inlined main::$7 = >(word/signed word/dword/signed dword) 256
Constant inlined main::$8 = <(const byte*) SCREEN#0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@5(between main::@3 and main::@2)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @6
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:2 

Created 1 initial phi equivalence classes
Coalesced [43] main::r#5 ← main::r#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) main::@5
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @6
Adding NOP phi() at start of @end

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@6
@6: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @6
  [3] phi()
main: scope:[main]  from @6
  [4] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0
  [5] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_CLEAR_IRQ#0
  [6] *((const byte*) DTV_BLITTER_SRCA_LO#0) ← <(const byte[]) SRCA#0
  [7] *((const byte*) DTV_BLITTER_SRCA_MI#0) ← >(const byte[]) SRCA#0
  [8] *((const byte*) DTV_BLITTER_SRCA_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256
  [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256
  [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16
  [14] *((const byte*) DTV_BLITTER_SRCB_LO#0) ← <(const byte[]) SRCB#0
  [15] *((const byte*) DTV_BLITTER_SRCB_MI#0) ← >(const byte[]) SRCB#0
  [16] *((const byte*) DTV_BLITTER_SRCB_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256
  [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256
  [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← <(const byte*) SCREEN#0
  [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0
  [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256
  [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256
  [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16
  [30] *((const byte*) DTV_BLITTER_LEN_LO#0) ← (const byte) SRCA_LEN#0
  [31] *((const byte*) DTV_BLITTER_LEN_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  [32] *((const byte*) DTV_BLITTER_ALU#0) ← (const byte) DTV_BLIT_ADD#0
  [33] *((const byte*) DTV_BLITTER_TRANSPARANCY#0) ← (const byte) DTV_BLIT_TRANSPARANCY_NONE#0
  [34] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0
  [35] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_DEST_CONT#0
  to:main::@2
main::@2: scope:[main]  from main main::@2 main::@3
  [36] (byte) main::r#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@3/(byte) main::r#1 )
  [37] (byte~) main::$15 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0
  [38] if((byte~) main::$15!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2
  to:main::@3
main::@3: scope:[main]  from main::@2
  [39] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0
  [40] (byte) main::r#1 ← ++ (byte) main::r#2
  [41] if((byte) main::r#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2
  to:main::@return
main::@return: scope:[main]  from main::@3
  [42] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) DTV_BADLINE_OFF
(byte*) DTV_BLITTER_ALU
(byte*) DTV_BLITTER_CONTROL
(byte*) DTV_BLITTER_CONTROL2
(byte*) DTV_BLITTER_DEST_HI
(byte*) DTV_BLITTER_DEST_LIN_HI
(byte*) DTV_BLITTER_DEST_LIN_LO
(byte*) DTV_BLITTER_DEST_LO
(byte*) DTV_BLITTER_DEST_MI
(byte*) DTV_BLITTER_DEST_MOD_HI
(byte*) DTV_BLITTER_DEST_MOD_LO
(byte*) DTV_BLITTER_DEST_STEP
(byte*) DTV_BLITTER_LEN_HI
(byte*) DTV_BLITTER_LEN_LO
(byte*) DTV_BLITTER_SRCA_HI
(byte*) DTV_BLITTER_SRCA_LIN_HI
(byte*) DTV_BLITTER_SRCA_LIN_LO
(byte*) DTV_BLITTER_SRCA_LO
(byte*) DTV_BLITTER_SRCA_MI
(byte*) DTV_BLITTER_SRCA_MOD_HI
(byte*) DTV_BLITTER_SRCA_MOD_LO
(byte*) DTV_BLITTER_SRCA_STEP
(byte*) DTV_BLITTER_SRCB_HI
(byte*) DTV_BLITTER_SRCB_LIN_HI
(byte*) DTV_BLITTER_SRCB_LIN_LO
(byte*) DTV_BLITTER_SRCB_LO
(byte*) DTV_BLITTER_SRCB_MI
(byte*) DTV_BLITTER_SRCB_MOD_HI
(byte*) DTV_BLITTER_SRCB_MOD_LO
(byte*) DTV_BLITTER_SRCB_STEP
(byte*) DTV_BLITTER_TRANSPARANCY
(byte) DTV_BLIT_ADD
(byte) DTV_BLIT_AND
(byte) DTV_BLIT_CIA_IRQ
(byte) DTV_BLIT_CLEAR_IRQ
(byte) DTV_BLIT_DEST_CONT
(byte) DTV_BLIT_DEST_FWD
(byte) DTV_BLIT_DISABLE_B
(byte) DTV_BLIT_FORCE_START
(byte) DTV_BLIT_IRQ_EN
(byte) DTV_BLIT_NAND
(byte) DTV_BLIT_NOR
(byte) DTV_BLIT_OR
(byte) DTV_BLIT_SHIFT0
(byte) DTV_BLIT_SHIFT1
(byte) DTV_BLIT_SHIFT2
(byte) DTV_BLIT_SHIFT3
(byte) DTV_BLIT_SHIFT4
(byte) DTV_BLIT_SHIFT5
(byte) DTV_BLIT_SHIFT6
(byte) DTV_BLIT_SHIFT7
(byte) DTV_BLIT_SRCA_CONT
(byte) DTV_BLIT_SRCA_FWD
(byte) DTV_BLIT_SRCB_CONT
(byte) DTV_BLIT_SRCB_FWD
(byte) DTV_BLIT_STATUS_BUSY
(byte) DTV_BLIT_STATUS_IRQ
(byte) DTV_BLIT_SUB
(byte) DTV_BLIT_TRANSPARANCY_NONE
(byte) DTV_BLIT_VBLANK
(byte) DTV_BLIT_VIC_IRQ
(byte) DTV_BLIT_WRITE_NONTRANSPARENT
(byte) DTV_BLIT_WRITE_TRANSPARENT
(byte) DTV_BLIT_XNOR
(byte) DTV_BLIT_XOR
(byte) DTV_BORDER_OFF
(byte) DTV_CHUNKY
(byte) DTV_COLORRAM_OFF
(dword) DTV_COLOR_BANK_DEFAULT
(byte*) DTV_COLOR_BANK_HI
(byte*) DTV_COLOR_BANK_LO
(byte*) DTV_CONTROL
(byte*) DTV_FEATURE
(byte) DTV_FEATURE_DISABLE_TIL_RESET
(byte) DTV_FEATURE_ENABLE
(byte*) DTV_GRAPHICS_HICOL_BANK
(byte*) DTV_GRAPHICS_VIC_BANK
(byte) DTV_HIGHCOLOR
(byte) DTV_LINEAR
(byte) DTV_OVERSCAN
(byte*) DTV_PALETTE
(byte[16]) DTV_PALETTE_DEFAULT
(byte*) DTV_PLANEA_MODULO_HI
(byte*) DTV_PLANEA_MODULO_LO
(byte*) DTV_PLANEA_START_HI
(byte*) DTV_PLANEA_START_LO
(byte*) DTV_PLANEA_START_MI
(byte*) DTV_PLANEA_STEP
(byte*) DTV_PLANEB_MODULO_HI
(byte*) DTV_PLANEB_MODULO_LO
(byte*) DTV_PLANEB_START_HI
(byte*) DTV_PLANEB_START_LO
(byte*) DTV_PLANEB_START_MI
(byte*) DTV_PLANEB_STEP
(byte*) DTV_SPRITE_BANK
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte[]) SRCA
(byte) SRCA_LEN
(byte[]) SRCB
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) main()
(byte~) main::$15 202.0
(byte) main::r
(byte) main::r#1 16.5
(byte) main::r#2 5.5

Initial phi equivalence classes
[ main::r#2 main::r#1 ]
Added variable main::$15 to zero page equivalence class [ main::$15 ]
Complete equivalence classes
[ main::r#2 main::r#1 ]
[ main::$15 ]
Allocated zp ZP_BYTE:2 [ main::r#2 main::r#1 ]
Allocated zp ZP_BYTE:3 [ main::$15 ]

INITIAL ASM
//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  // Feature enables or disables the extra C64 DTV features
  .label DTV_FEATURE = $d03f
  .const DTV_FEATURE_ENABLE = 1
  // Blitter Source A Start
  .label DTV_BLITTER_SRCA_LO = $d320
  .label DTV_BLITTER_SRCA_MI = $d321
  .label DTV_BLITTER_SRCA_HI = $d322
  // Blitter Source A Modulo
  .label DTV_BLITTER_SRCA_MOD_LO = $d323
  .label DTV_BLITTER_SRCA_MOD_HI = $d324
  // Blitter Source A Line Length
  .label DTV_BLITTER_SRCA_LIN_LO = $d325
  .label DTV_BLITTER_SRCA_LIN_HI = $d326
  // Blitter Source A Step ([7:4] integral part, [3:0] fractional part)
  .label DTV_BLITTER_SRCA_STEP = $d327
  // Blitter Source B Start
  .label DTV_BLITTER_SRCB_LO = $d328
  .label DTV_BLITTER_SRCB_MI = $d329
  .label DTV_BLITTER_SRCB_HI = $d32a
  // Blitter Source B Modulo
  .label DTV_BLITTER_SRCB_MOD_LO = $d32b
  .label DTV_BLITTER_SRCB_MOD_HI = $d32c
  // Blitter Source B Line Length
  .label DTV_BLITTER_SRCB_LIN_LO = $d32d
  .label DTV_BLITTER_SRCB_LIN_HI = $d32e
  // Blitter Source B Step ([7:4] integral part, [3:0] fractional part)
  .label DTV_BLITTER_SRCB_STEP = $d32f
  // Blitter Destination Start
  .label DTV_BLITTER_DEST_LO = $d330
  .label DTV_BLITTER_DEST_MI = $d331
  .label DTV_BLITTER_DEST_HI = $d332
  // Blitter Source B Modulo
  .label DTV_BLITTER_DEST_MOD_LO = $d333
  .label DTV_BLITTER_DEST_MOD_HI = $d334
  // Blitter Source B Line Length
  .label DTV_BLITTER_DEST_LIN_LO = $d335
  .label DTV_BLITTER_DEST_LIN_HI = $d336
  // Blitter Source B Step ([7:4] integral part, [3:0] fractional part)
  .label DTV_BLITTER_DEST_STEP = $d337
  // Blitter Blit Length
  .label DTV_BLITTER_LEN_LO = $d338
  .label DTV_BLITTER_LEN_HI = $d339
  // Blitter Control
  .label DTV_BLITTER_CONTROL = $d33a
  // Bit[0] Force Start Strobe when set
  .const DTV_BLIT_FORCE_START = 1
  // Bit[1] Source A Direction Positive when set
  .const DTV_BLIT_SRCA_FWD = 2
  // Bit[2] Source B Direction Positive when set
  .const DTV_BLIT_SRCB_FWD = 4
  // Bit[3] Destination Direction Positive when set
  .const DTV_BLIT_DEST_FWD = 8
  // Blitter Transparency
  .label DTV_BLITTER_TRANSPARANCY = $d33b
  // No transparancy
  // Bit[2]==Bit[1]==0: write in any case
  .const DTV_BLIT_TRANSPARANCY_NONE = 0
  // Controls the ALU operation
  .label DTV_BLITTER_ALU = $d33e
  .const DTV_BLIT_ADD = $30
  // Blitter Control 2
  .label DTV_BLITTER_CONTROL2 = $d33f
  // Bit[0] Clear Blitter IRQ
  .const DTV_BLIT_CLEAR_IRQ = 1
  // Bit[3] Destination Continue
  .const DTV_BLIT_DEST_CONT = 8
  // Bit[0] Busy when set (When reading)
  .const DTV_BLIT_STATUS_BUSY = 1
  .label SCREEN = $400
  .const SRCA_LEN = 9
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @6 [phi:@begin->@6]
b6_from_bbegin:
  jmp b6
//SEG5 @6
b6:
//SEG6 [2] call main 
  jsr main
//SEG7 [3] phi from @6 to @end [phi:@6->@end]
bend_from_b6:
  jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
    .label _15 = 3
    .label r = 2
  //SEG10 [4] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_FEATURE_ENABLE
    sta DTV_FEATURE
  //SEG11 [5] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_CLEAR_IRQ#0 -- _deref_pbuc1=vbuc2 
    // Instruct blitter not to continue previous blit
    lda #DTV_BLIT_CLEAR_IRQ
    sta DTV_BLITTER_CONTROL2
  //SEG12 [6] *((const byte*) DTV_BLITTER_SRCA_LO#0) ← <(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #<SRCA
    sta DTV_BLITTER_SRCA_LO
  //SEG13 [7] *((const byte*) DTV_BLITTER_SRCA_MI#0) ← >(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCA
    sta DTV_BLITTER_SRCA_MI
  //SEG14 [8] *((const byte*) DTV_BLITTER_SRCA_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_HI
  //SEG15 [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_MOD_LO
  //SEG16 [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_MOD_HI
  //SEG17 [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #<$100
    sta DTV_BLITTER_SRCA_LIN_LO
  //SEG18 [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCA_LIN_HI
  //SEG19 [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_SRCA_STEP
  //SEG20 [14] *((const byte*) DTV_BLITTER_SRCB_LO#0) ← <(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    // Step 1.0
    lda #<SRCB
    sta DTV_BLITTER_SRCB_LO
  //SEG21 [15] *((const byte*) DTV_BLITTER_SRCB_MI#0) ← >(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCB
    sta DTV_BLITTER_SRCB_MI
  //SEG22 [16] *((const byte*) DTV_BLITTER_SRCB_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_HI
  //SEG23 [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_MOD_LO
  //SEG24 [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_MOD_HI
  //SEG25 [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #<$100
    sta DTV_BLITTER_SRCB_LIN_LO
  //SEG26 [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCB_LIN_HI
  //SEG27 [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_STEP
  //SEG28 [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← <(const byte*) SCREEN#0 -- _deref_pbuc1=vbuc2 
    // Step 0.0
    lda #<SCREEN
    sta DTV_BLITTER_DEST_LO
  //SEG29 [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0 -- _deref_pbuc1=vbuc2 
    lda #>SCREEN
    sta DTV_BLITTER_DEST_MI
  //SEG30 [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_HI
  //SEG31 [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_MOD_LO
  //SEG32 [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_MOD_HI
  //SEG33 [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #<$100
    sta DTV_BLITTER_DEST_LIN_LO
  //SEG34 [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_DEST_LIN_HI
  //SEG35 [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_DEST_STEP
  //SEG36 [30] *((const byte*) DTV_BLITTER_LEN_LO#0) ← (const byte) SRCA_LEN#0 -- _deref_pbuc1=vbuc2 
    // Step 1.0
    lda #SRCA_LEN
    sta DTV_BLITTER_LEN_LO
  //SEG37 [31] *((const byte*) DTV_BLITTER_LEN_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_LEN_HI
  //SEG38 [32] *((const byte*) DTV_BLITTER_ALU#0) ← (const byte) DTV_BLIT_ADD#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_BLIT_ADD
    sta DTV_BLITTER_ALU
  //SEG39 [33] *((const byte*) DTV_BLITTER_TRANSPARANCY#0) ← (const byte) DTV_BLIT_TRANSPARANCY_NONE#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_BLIT_TRANSPARANCY_NONE
    sta DTV_BLITTER_TRANSPARANCY
  //SEG40 [34] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 -- _deref_pbuc1=vbuc2 
    // Start blitter
    lda #DTV_BLIT_FORCE_START|DTV_BLIT_SRCA_FWD|DTV_BLIT_SRCB_FWD|DTV_BLIT_DEST_FWD
    sta DTV_BLITTER_CONTROL
  //SEG41 [35] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_DEST_CONT#0 -- _deref_pbuc1=vbuc2 
    // Instruct blitter to continue at DEST and restart SRC A/B
    lda #DTV_BLIT_DEST_CONT
    sta DTV_BLITTER_CONTROL2
  //SEG42 [36] phi from main to main::@2 [phi:main->main::@2]
  b2_from_main:
  //SEG43 [36] phi (byte) main::r#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta r
    jmp b2
  // wait til blitter is ready
  //SEG44 [36] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
  b2_from_b2:
    jmp b2
  //SEG45 [36] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
  b2_from_b3:
  //SEG46 [36] phi (byte) main::r#2 = (byte) main::r#1 [phi:main::@3->main::@2#0] -- register_copy 
    jmp b2
  //SEG47 main::@2
  b2:
  //SEG48 [37] (byte~) main::$15 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 -- vbuz1=_deref_pbuc1_band_vbuc2 
    lda DTV_BLITTER_CONTROL2
    and #DTV_BLIT_STATUS_BUSY
    sta _15
  //SEG49 [38] if((byte~) main::$15!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 -- vbuz1_neq_0_then_la1 
    lda _15
    cmp #0
    bne b2_from_b2
    jmp b3
  //SEG50 main::@3
  b3:
  //SEG51 [39] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 -- _deref_pbuc1=vbuc2 
    // restart
    lda #DTV_BLIT_FORCE_START|DTV_BLIT_SRCA_FWD|DTV_BLIT_SRCB_FWD|DTV_BLIT_DEST_FWD
    sta DTV_BLITTER_CONTROL
  //SEG52 [40] (byte) main::r#1 ← ++ (byte) main::r#2 -- vbuz1=_inc_vbuz1 
    inc r
  //SEG53 [41] if((byte) main::r#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 -- vbuz1_neq_vbuc1_then_la1 
    lda r
    cmp #8
    bne b2_from_b3
    jmp breturn
  //SEG54 main::@return
  breturn:
  //SEG55 [42] return 
    rts
}
  SRCA: .byte 'c', 'a', 'm', 'e', 'l', 'o', 't', '!', ' '
  SRCB: .byte $80

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [4] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [5] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_CLEAR_IRQ#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [6] *((const byte*) DTV_BLITTER_SRCA_LO#0) ← <(const byte[]) SRCA#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [7] *((const byte*) DTV_BLITTER_SRCA_MI#0) ← >(const byte[]) SRCA#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [8] *((const byte*) DTV_BLITTER_SRCA_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [14] *((const byte*) DTV_BLITTER_SRCB_LO#0) ← <(const byte[]) SRCB#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [15] *((const byte*) DTV_BLITTER_SRCB_MI#0) ← >(const byte[]) SRCB#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [16] *((const byte*) DTV_BLITTER_SRCB_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← <(const byte*) SCREEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [30] *((const byte*) DTV_BLITTER_LEN_LO#0) ← (const byte) SRCA_LEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [31] *((const byte*) DTV_BLITTER_LEN_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [32] *((const byte*) DTV_BLITTER_ALU#0) ← (const byte) DTV_BLIT_ADD#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [33] *((const byte*) DTV_BLITTER_TRANSPARANCY#0) ← (const byte) DTV_BLIT_TRANSPARANCY_NONE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [34] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [35] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_DEST_CONT#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [37] (byte~) main::$15 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 [ main::r#2 main::$15 ] ( main:2 [ main::r#2 main::$15 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::r#2 main::r#1 ]
Statement [39] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 [ main::r#2 ] ( main:2 [ main::r#2 ] ) always clobbers reg byte a 
Statement [4] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [5] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_CLEAR_IRQ#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [6] *((const byte*) DTV_BLITTER_SRCA_LO#0) ← <(const byte[]) SRCA#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [7] *((const byte*) DTV_BLITTER_SRCA_MI#0) ← >(const byte[]) SRCA#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [8] *((const byte*) DTV_BLITTER_SRCA_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [14] *((const byte*) DTV_BLITTER_SRCB_LO#0) ← <(const byte[]) SRCB#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [15] *((const byte*) DTV_BLITTER_SRCB_MI#0) ← >(const byte[]) SRCB#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [16] *((const byte*) DTV_BLITTER_SRCB_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← <(const byte*) SCREEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [30] *((const byte*) DTV_BLITTER_LEN_LO#0) ← (const byte) SRCA_LEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [31] *((const byte*) DTV_BLITTER_LEN_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [32] *((const byte*) DTV_BLITTER_ALU#0) ← (const byte) DTV_BLIT_ADD#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [33] *((const byte*) DTV_BLITTER_TRANSPARANCY#0) ← (const byte) DTV_BLIT_TRANSPARANCY_NONE#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [34] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [35] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_DEST_CONT#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [37] (byte~) main::$15 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 [ main::r#2 main::$15 ] ( main:2 [ main::r#2 main::$15 ] ) always clobbers reg byte a 
Statement [39] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 [ main::r#2 ] ( main:2 [ main::r#2 ] ) always clobbers reg byte a 
Potential registers zp ZP_BYTE:2 [ main::r#2 main::r#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:3 [ main::$15 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [main] 202: zp ZP_BYTE:3 [ main::$15 ] 22: zp ZP_BYTE:2 [ main::r#2 main::r#1 ] 
Uplift Scope [] 

Uplifting [main] best 2815 combination reg byte a [ main::$15 ] reg byte x [ main::r#2 main::r#1 ] 
Uplifting [] best 2815 combination 

ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  // Feature enables or disables the extra C64 DTV features
  .label DTV_FEATURE = $d03f
  .const DTV_FEATURE_ENABLE = 1
  // Blitter Source A Start
  .label DTV_BLITTER_SRCA_LO = $d320
  .label DTV_BLITTER_SRCA_MI = $d321
  .label DTV_BLITTER_SRCA_HI = $d322
  // Blitter Source A Modulo
  .label DTV_BLITTER_SRCA_MOD_LO = $d323
  .label DTV_BLITTER_SRCA_MOD_HI = $d324
  // Blitter Source A Line Length
  .label DTV_BLITTER_SRCA_LIN_LO = $d325
  .label DTV_BLITTER_SRCA_LIN_HI = $d326
  // Blitter Source A Step ([7:4] integral part, [3:0] fractional part)
  .label DTV_BLITTER_SRCA_STEP = $d327
  // Blitter Source B Start
  .label DTV_BLITTER_SRCB_LO = $d328
  .label DTV_BLITTER_SRCB_MI = $d329
  .label DTV_BLITTER_SRCB_HI = $d32a
  // Blitter Source B Modulo
  .label DTV_BLITTER_SRCB_MOD_LO = $d32b
  .label DTV_BLITTER_SRCB_MOD_HI = $d32c
  // Blitter Source B Line Length
  .label DTV_BLITTER_SRCB_LIN_LO = $d32d
  .label DTV_BLITTER_SRCB_LIN_HI = $d32e
  // Blitter Source B Step ([7:4] integral part, [3:0] fractional part)
  .label DTV_BLITTER_SRCB_STEP = $d32f
  // Blitter Destination Start
  .label DTV_BLITTER_DEST_LO = $d330
  .label DTV_BLITTER_DEST_MI = $d331
  .label DTV_BLITTER_DEST_HI = $d332
  // Blitter Source B Modulo
  .label DTV_BLITTER_DEST_MOD_LO = $d333
  .label DTV_BLITTER_DEST_MOD_HI = $d334
  // Blitter Source B Line Length
  .label DTV_BLITTER_DEST_LIN_LO = $d335
  .label DTV_BLITTER_DEST_LIN_HI = $d336
  // Blitter Source B Step ([7:4] integral part, [3:0] fractional part)
  .label DTV_BLITTER_DEST_STEP = $d337
  // Blitter Blit Length
  .label DTV_BLITTER_LEN_LO = $d338
  .label DTV_BLITTER_LEN_HI = $d339
  // Blitter Control
  .label DTV_BLITTER_CONTROL = $d33a
  // Bit[0] Force Start Strobe when set
  .const DTV_BLIT_FORCE_START = 1
  // Bit[1] Source A Direction Positive when set
  .const DTV_BLIT_SRCA_FWD = 2
  // Bit[2] Source B Direction Positive when set
  .const DTV_BLIT_SRCB_FWD = 4
  // Bit[3] Destination Direction Positive when set
  .const DTV_BLIT_DEST_FWD = 8
  // Blitter Transparency
  .label DTV_BLITTER_TRANSPARANCY = $d33b
  // No transparancy
  // Bit[2]==Bit[1]==0: write in any case
  .const DTV_BLIT_TRANSPARANCY_NONE = 0
  // Controls the ALU operation
  .label DTV_BLITTER_ALU = $d33e
  .const DTV_BLIT_ADD = $30
  // Blitter Control 2
  .label DTV_BLITTER_CONTROL2 = $d33f
  // Bit[0] Clear Blitter IRQ
  .const DTV_BLIT_CLEAR_IRQ = 1
  // Bit[3] Destination Continue
  .const DTV_BLIT_DEST_CONT = 8
  // Bit[0] Busy when set (When reading)
  .const DTV_BLIT_STATUS_BUSY = 1
  .label SCREEN = $400
  .const SRCA_LEN = 9
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @6 [phi:@begin->@6]
b6_from_bbegin:
  jmp b6
//SEG5 @6
b6:
//SEG6 [2] call main 
  jsr main
//SEG7 [3] phi from @6 to @end [phi:@6->@end]
bend_from_b6:
  jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
  //SEG10 [4] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_FEATURE_ENABLE
    sta DTV_FEATURE
  //SEG11 [5] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_CLEAR_IRQ#0 -- _deref_pbuc1=vbuc2 
    // Instruct blitter not to continue previous blit
    lda #DTV_BLIT_CLEAR_IRQ
    sta DTV_BLITTER_CONTROL2
  //SEG12 [6] *((const byte*) DTV_BLITTER_SRCA_LO#0) ← <(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #<SRCA
    sta DTV_BLITTER_SRCA_LO
  //SEG13 [7] *((const byte*) DTV_BLITTER_SRCA_MI#0) ← >(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCA
    sta DTV_BLITTER_SRCA_MI
  //SEG14 [8] *((const byte*) DTV_BLITTER_SRCA_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_HI
  //SEG15 [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_MOD_LO
  //SEG16 [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_MOD_HI
  //SEG17 [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #<$100
    sta DTV_BLITTER_SRCA_LIN_LO
  //SEG18 [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCA_LIN_HI
  //SEG19 [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_SRCA_STEP
  //SEG20 [14] *((const byte*) DTV_BLITTER_SRCB_LO#0) ← <(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    // Step 1.0
    lda #<SRCB
    sta DTV_BLITTER_SRCB_LO
  //SEG21 [15] *((const byte*) DTV_BLITTER_SRCB_MI#0) ← >(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCB
    sta DTV_BLITTER_SRCB_MI
  //SEG22 [16] *((const byte*) DTV_BLITTER_SRCB_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_HI
  //SEG23 [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_MOD_LO
  //SEG24 [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_MOD_HI
  //SEG25 [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #<$100
    sta DTV_BLITTER_SRCB_LIN_LO
  //SEG26 [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCB_LIN_HI
  //SEG27 [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_STEP
  //SEG28 [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← <(const byte*) SCREEN#0 -- _deref_pbuc1=vbuc2 
    // Step 0.0
    lda #<SCREEN
    sta DTV_BLITTER_DEST_LO
  //SEG29 [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0 -- _deref_pbuc1=vbuc2 
    lda #>SCREEN
    sta DTV_BLITTER_DEST_MI
  //SEG30 [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_HI
  //SEG31 [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_MOD_LO
  //SEG32 [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_MOD_HI
  //SEG33 [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #<$100
    sta DTV_BLITTER_DEST_LIN_LO
  //SEG34 [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_DEST_LIN_HI
  //SEG35 [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_DEST_STEP
  //SEG36 [30] *((const byte*) DTV_BLITTER_LEN_LO#0) ← (const byte) SRCA_LEN#0 -- _deref_pbuc1=vbuc2 
    // Step 1.0
    lda #SRCA_LEN
    sta DTV_BLITTER_LEN_LO
  //SEG37 [31] *((const byte*) DTV_BLITTER_LEN_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_LEN_HI
  //SEG38 [32] *((const byte*) DTV_BLITTER_ALU#0) ← (const byte) DTV_BLIT_ADD#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_BLIT_ADD
    sta DTV_BLITTER_ALU
  //SEG39 [33] *((const byte*) DTV_BLITTER_TRANSPARANCY#0) ← (const byte) DTV_BLIT_TRANSPARANCY_NONE#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_BLIT_TRANSPARANCY_NONE
    sta DTV_BLITTER_TRANSPARANCY
  //SEG40 [34] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 -- _deref_pbuc1=vbuc2 
    // Start blitter
    lda #DTV_BLIT_FORCE_START|DTV_BLIT_SRCA_FWD|DTV_BLIT_SRCB_FWD|DTV_BLIT_DEST_FWD
    sta DTV_BLITTER_CONTROL
  //SEG41 [35] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_DEST_CONT#0 -- _deref_pbuc1=vbuc2 
    // Instruct blitter to continue at DEST and restart SRC A/B
    lda #DTV_BLIT_DEST_CONT
    sta DTV_BLITTER_CONTROL2
  //SEG42 [36] phi from main to main::@2 [phi:main->main::@2]
  b2_from_main:
  //SEG43 [36] phi (byte) main::r#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 
    ldx #0
    jmp b2
  // wait til blitter is ready
  //SEG44 [36] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
  b2_from_b2:
    jmp b2
  //SEG45 [36] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
  b2_from_b3:
  //SEG46 [36] phi (byte) main::r#2 = (byte) main::r#1 [phi:main::@3->main::@2#0] -- register_copy 
    jmp b2
  //SEG47 main::@2
  b2:
  //SEG48 [37] (byte~) main::$15 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 -- vbuaa=_deref_pbuc1_band_vbuc2 
    lda DTV_BLITTER_CONTROL2
    and #DTV_BLIT_STATUS_BUSY
  //SEG49 [38] if((byte~) main::$15!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b2_from_b2
    jmp b3
  //SEG50 main::@3
  b3:
  //SEG51 [39] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 -- _deref_pbuc1=vbuc2 
    // restart
    lda #DTV_BLIT_FORCE_START|DTV_BLIT_SRCA_FWD|DTV_BLIT_SRCB_FWD|DTV_BLIT_DEST_FWD
    sta DTV_BLITTER_CONTROL
  //SEG52 [40] (byte) main::r#1 ← ++ (byte) main::r#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG53 [41] if((byte) main::r#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne b2_from_b3
    jmp breturn
  //SEG54 main::@return
  breturn:
  //SEG55 [42] return 
    rts
}
  SRCA: .byte 'c', 'a', 'm', 'e', 'l', 'o', 't', '!', ' '
  SRCB: .byte $80

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b6
Removing instruction jmp bend
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b2_from_b3 with b2
Removing instruction b6_from_bbegin:
Removing instruction b6:
Removing instruction bend_from_b6:
Removing instruction b2_from_b3:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction b2_from_main:
Removing instruction b3:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Skipping double jump to b2 in bne b2_from_b2
Succesful ASM optimization Pass5DoubleJumpElimination
Relabelling long label b2_from_b2 to b1
Succesful ASM optimization Pass5RelabelLongLabels
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination

FINAL SYMBOL TABLE
(label) @6
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL1
(byte*) BGCOL2
(byte*) BGCOL3
(byte*) BGCOL4
(byte) BLACK
(byte) BLUE
(byte*) BORDERCOL
(byte) BROWN
(byte*) CHARGEN
(byte*) CIA1_INTERRUPT
(byte*) CIA1_PORT_A
(byte*) CIA1_PORT_A_DDR
(byte*) CIA1_PORT_B
(byte*) CIA1_PORT_B_DDR
(byte*) CIA2_INTERRUPT
(byte*) CIA2_PORT_A
(byte*) CIA2_PORT_A_DDR
(byte*) CIA2_PORT_B
(byte*) CIA2_PORT_B_DDR
(byte) CIA_INTERRUPT_CLEAR
(byte*) COLS
(byte) CYAN
(byte*) D011
(byte*) D016
(byte*) D018
(byte) DARK_GREY
(byte) DTV_BADLINE_OFF
(byte*) DTV_BLITTER_ALU
(const byte*) DTV_BLITTER_ALU#0 DTV_BLITTER_ALU = ((byte*))(word/dword/signed dword) 54078
(byte*) DTV_BLITTER_CONTROL
(const byte*) DTV_BLITTER_CONTROL#0 DTV_BLITTER_CONTROL = ((byte*))(word/dword/signed dword) 54074
(byte*) DTV_BLITTER_CONTROL2
(const byte*) DTV_BLITTER_CONTROL2#0 DTV_BLITTER_CONTROL2 = ((byte*))(word/dword/signed dword) 54079
(byte*) DTV_BLITTER_DEST_HI
(const byte*) DTV_BLITTER_DEST_HI#0 DTV_BLITTER_DEST_HI = ((byte*))(word/dword/signed dword) 54066
(byte*) DTV_BLITTER_DEST_LIN_HI
(const byte*) DTV_BLITTER_DEST_LIN_HI#0 DTV_BLITTER_DEST_LIN_HI = ((byte*))(word/dword/signed dword) 54070
(byte*) DTV_BLITTER_DEST_LIN_LO
(const byte*) DTV_BLITTER_DEST_LIN_LO#0 DTV_BLITTER_DEST_LIN_LO = ((byte*))(word/dword/signed dword) 54069
(byte*) DTV_BLITTER_DEST_LO
(const byte*) DTV_BLITTER_DEST_LO#0 DTV_BLITTER_DEST_LO = ((byte*))(word/dword/signed dword) 54064
(byte*) DTV_BLITTER_DEST_MI
(const byte*) DTV_BLITTER_DEST_MI#0 DTV_BLITTER_DEST_MI = ((byte*))(word/dword/signed dword) 54065
(byte*) DTV_BLITTER_DEST_MOD_HI
(const byte*) DTV_BLITTER_DEST_MOD_HI#0 DTV_BLITTER_DEST_MOD_HI = ((byte*))(word/dword/signed dword) 54068
(byte*) DTV_BLITTER_DEST_MOD_LO
(const byte*) DTV_BLITTER_DEST_MOD_LO#0 DTV_BLITTER_DEST_MOD_LO = ((byte*))(word/dword/signed dword) 54067
(byte*) DTV_BLITTER_DEST_STEP
(const byte*) DTV_BLITTER_DEST_STEP#0 DTV_BLITTER_DEST_STEP = ((byte*))(word/dword/signed dword) 54071
(byte*) DTV_BLITTER_LEN_HI
(const byte*) DTV_BLITTER_LEN_HI#0 DTV_BLITTER_LEN_HI = ((byte*))(word/dword/signed dword) 54073
(byte*) DTV_BLITTER_LEN_LO
(const byte*) DTV_BLITTER_LEN_LO#0 DTV_BLITTER_LEN_LO = ((byte*))(word/dword/signed dword) 54072
(byte*) DTV_BLITTER_SRCA_HI
(const byte*) DTV_BLITTER_SRCA_HI#0 DTV_BLITTER_SRCA_HI = ((byte*))(word/dword/signed dword) 54050
(byte*) DTV_BLITTER_SRCA_LIN_HI
(const byte*) DTV_BLITTER_SRCA_LIN_HI#0 DTV_BLITTER_SRCA_LIN_HI = ((byte*))(word/dword/signed dword) 54054
(byte*) DTV_BLITTER_SRCA_LIN_LO
(const byte*) DTV_BLITTER_SRCA_LIN_LO#0 DTV_BLITTER_SRCA_LIN_LO = ((byte*))(word/dword/signed dword) 54053
(byte*) DTV_BLITTER_SRCA_LO
(const byte*) DTV_BLITTER_SRCA_LO#0 DTV_BLITTER_SRCA_LO = ((byte*))(word/dword/signed dword) 54048
(byte*) DTV_BLITTER_SRCA_MI
(const byte*) DTV_BLITTER_SRCA_MI#0 DTV_BLITTER_SRCA_MI = ((byte*))(word/dword/signed dword) 54049
(byte*) DTV_BLITTER_SRCA_MOD_HI
(const byte*) DTV_BLITTER_SRCA_MOD_HI#0 DTV_BLITTER_SRCA_MOD_HI = ((byte*))(word/dword/signed dword) 54052
(byte*) DTV_BLITTER_SRCA_MOD_LO
(const byte*) DTV_BLITTER_SRCA_MOD_LO#0 DTV_BLITTER_SRCA_MOD_LO = ((byte*))(word/dword/signed dword) 54051
(byte*) DTV_BLITTER_SRCA_STEP
(const byte*) DTV_BLITTER_SRCA_STEP#0 DTV_BLITTER_SRCA_STEP = ((byte*))(word/dword/signed dword) 54055
(byte*) DTV_BLITTER_SRCB_HI
(const byte*) DTV_BLITTER_SRCB_HI#0 DTV_BLITTER_SRCB_HI = ((byte*))(word/dword/signed dword) 54058
(byte*) DTV_BLITTER_SRCB_LIN_HI
(const byte*) DTV_BLITTER_SRCB_LIN_HI#0 DTV_BLITTER_SRCB_LIN_HI = ((byte*))(word/dword/signed dword) 54062
(byte*) DTV_BLITTER_SRCB_LIN_LO
(const byte*) DTV_BLITTER_SRCB_LIN_LO#0 DTV_BLITTER_SRCB_LIN_LO = ((byte*))(word/dword/signed dword) 54061
(byte*) DTV_BLITTER_SRCB_LO
(const byte*) DTV_BLITTER_SRCB_LO#0 DTV_BLITTER_SRCB_LO = ((byte*))(word/dword/signed dword) 54056
(byte*) DTV_BLITTER_SRCB_MI
(const byte*) DTV_BLITTER_SRCB_MI#0 DTV_BLITTER_SRCB_MI = ((byte*))(word/dword/signed dword) 54057
(byte*) DTV_BLITTER_SRCB_MOD_HI
(const byte*) DTV_BLITTER_SRCB_MOD_HI#0 DTV_BLITTER_SRCB_MOD_HI = ((byte*))(word/dword/signed dword) 54060
(byte*) DTV_BLITTER_SRCB_MOD_LO
(const byte*) DTV_BLITTER_SRCB_MOD_LO#0 DTV_BLITTER_SRCB_MOD_LO = ((byte*))(word/dword/signed dword) 54059
(byte*) DTV_BLITTER_SRCB_STEP
(const byte*) DTV_BLITTER_SRCB_STEP#0 DTV_BLITTER_SRCB_STEP = ((byte*))(word/dword/signed dword) 54063
(byte*) DTV_BLITTER_TRANSPARANCY
(const byte*) DTV_BLITTER_TRANSPARANCY#0 DTV_BLITTER_TRANSPARANCY = ((byte*))(word/dword/signed dword) 54075
(byte) DTV_BLIT_ADD
(const byte) DTV_BLIT_ADD#0 DTV_BLIT_ADD = (byte/signed byte/word/signed word/dword/signed dword) 48
(byte) DTV_BLIT_AND
(byte) DTV_BLIT_CIA_IRQ
(byte) DTV_BLIT_CLEAR_IRQ
(const byte) DTV_BLIT_CLEAR_IRQ#0 DTV_BLIT_CLEAR_IRQ = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) DTV_BLIT_DEST_CONT
(const byte) DTV_BLIT_DEST_CONT#0 DTV_BLIT_DEST_CONT = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) DTV_BLIT_DEST_FWD
(const byte) DTV_BLIT_DEST_FWD#0 DTV_BLIT_DEST_FWD = (byte/signed byte/word/signed word/dword/signed dword) 8
(byte) DTV_BLIT_DISABLE_B
(byte) DTV_BLIT_FORCE_START
(const byte) DTV_BLIT_FORCE_START#0 DTV_BLIT_FORCE_START = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) DTV_BLIT_IRQ_EN
(byte) DTV_BLIT_NAND
(byte) DTV_BLIT_NOR
(byte) DTV_BLIT_OR
(byte) DTV_BLIT_SHIFT0
(byte) DTV_BLIT_SHIFT1
(byte) DTV_BLIT_SHIFT2
(byte) DTV_BLIT_SHIFT3
(byte) DTV_BLIT_SHIFT4
(byte) DTV_BLIT_SHIFT5
(byte) DTV_BLIT_SHIFT6
(byte) DTV_BLIT_SHIFT7
(byte) DTV_BLIT_SRCA_CONT
(byte) DTV_BLIT_SRCA_FWD
(const byte) DTV_BLIT_SRCA_FWD#0 DTV_BLIT_SRCA_FWD = (byte/signed byte/word/signed word/dword/signed dword) 2
(byte) DTV_BLIT_SRCB_CONT
(byte) DTV_BLIT_SRCB_FWD
(const byte) DTV_BLIT_SRCB_FWD#0 DTV_BLIT_SRCB_FWD = (byte/signed byte/word/signed word/dword/signed dword) 4
(byte) DTV_BLIT_STATUS_BUSY
(const byte) DTV_BLIT_STATUS_BUSY#0 DTV_BLIT_STATUS_BUSY = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte) DTV_BLIT_STATUS_IRQ
(byte) DTV_BLIT_SUB
(byte) DTV_BLIT_TRANSPARANCY_NONE
(const byte) DTV_BLIT_TRANSPARANCY_NONE#0 DTV_BLIT_TRANSPARANCY_NONE = (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) DTV_BLIT_VBLANK
(byte) DTV_BLIT_VIC_IRQ
(byte) DTV_BLIT_WRITE_NONTRANSPARENT
(byte) DTV_BLIT_WRITE_TRANSPARENT
(byte) DTV_BLIT_XNOR
(byte) DTV_BLIT_XOR
(byte) DTV_BORDER_OFF
(byte) DTV_CHUNKY
(byte) DTV_COLORRAM_OFF
(dword) DTV_COLOR_BANK_DEFAULT
(byte*) DTV_COLOR_BANK_HI
(byte*) DTV_COLOR_BANK_LO
(byte*) DTV_CONTROL
(byte*) DTV_FEATURE
(const byte*) DTV_FEATURE#0 DTV_FEATURE = ((byte*))(word/dword/signed dword) 53311
(byte) DTV_FEATURE_DISABLE_TIL_RESET
(byte) DTV_FEATURE_ENABLE
(const byte) DTV_FEATURE_ENABLE#0 DTV_FEATURE_ENABLE = (byte/signed byte/word/signed word/dword/signed dword) 1
(byte*) DTV_GRAPHICS_HICOL_BANK
(byte*) DTV_GRAPHICS_VIC_BANK
(byte) DTV_HIGHCOLOR
(byte) DTV_LINEAR
(byte) DTV_OVERSCAN
(byte*) DTV_PALETTE
(byte[16]) DTV_PALETTE_DEFAULT
(byte*) DTV_PLANEA_MODULO_HI
(byte*) DTV_PLANEA_MODULO_LO
(byte*) DTV_PLANEA_START_HI
(byte*) DTV_PLANEA_START_LO
(byte*) DTV_PLANEA_START_MI
(byte*) DTV_PLANEA_STEP
(byte*) DTV_PLANEB_MODULO_HI
(byte*) DTV_PLANEB_MODULO_LO
(byte*) DTV_PLANEB_START_HI
(byte*) DTV_PLANEB_START_LO
(byte*) DTV_PLANEB_START_MI
(byte*) DTV_PLANEB_STEP
(byte*) DTV_SPRITE_BANK
(byte) GREEN
(byte) GREY
(void()**) HARDWARE_IRQ
(byte) IRQ_COLLISION_BG
(byte) IRQ_COLLISION_SPRITE
(byte*) IRQ_ENABLE
(byte) IRQ_LIGHTPEN
(byte) IRQ_RASTER
(byte*) IRQ_STATUS
(void()**) KERNEL_IRQ
(byte*) LIGHTPEN_X
(byte*) LIGHTPEN_Y
(byte) LIGHT_BLUE
(byte) LIGHT_GREEN
(byte) LIGHT_GREY
(byte) ORANGE
(byte) PINK
(byte*) PROCPORT
(byte) PROCPORT_BASIC_KERNEL_IO
(byte*) PROCPORT_DDR
(byte) PROCPORT_DDR_MEMORY_MASK
(byte) PROCPORT_KERNEL_IO
(byte) PROCPORT_RAM_ALL
(byte) PROCPORT_RAM_CHARROM
(byte) PROCPORT_RAM_IO
(byte) PURPLE
(byte*) RASTER
(byte) RED
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) SPRITES_COLS
(byte*) SPRITES_ENABLE
(byte*) SPRITES_EXPAND_X
(byte*) SPRITES_EXPAND_Y
(byte*) SPRITES_MC
(byte*) SPRITES_MC1
(byte*) SPRITES_MC2
(byte*) SPRITES_PRIORITY
(byte*) SPRITES_XMSB
(byte*) SPRITES_XPOS
(byte*) SPRITES_YPOS
(word) SPRITE_PTRS
(byte[]) SRCA
(const byte[]) SRCA#0 SRCA = { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' }
(byte) SRCA_LEN
(const byte) SRCA_LEN#0 SRCA_LEN = (byte/signed byte/word/signed word/dword/signed dword) 9
(byte[]) SRCB
(const byte[]) SRCB#0 SRCB = { (byte/word/signed word/dword/signed dword) 128 }
(byte) VIC_BMM
(byte*) VIC_CONTROL
(byte*) VIC_CONTROL2
(byte) VIC_CSEL
(byte) VIC_DEN
(byte) VIC_ECM
(byte) VIC_MCM
(byte*) VIC_MEMORY
(byte) VIC_RSEL
(byte) VIC_RST8
(byte) WHITE
(byte) YELLOW
(void()) main()
(byte~) main::$15 reg byte a 202.0
(label) main::@2
(label) main::@3
(label) main::@return
(byte) main::r
(byte) main::r#1 reg byte x 16.5
(byte) main::r#2 reg byte x 5.5

reg byte x [ main::r#2 main::r#1 ]
reg byte a [ main::$15 ]


FINAL ASSEMBLER
Score: 1561

//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  // Feature enables or disables the extra C64 DTV features
  .label DTV_FEATURE = $d03f
  .const DTV_FEATURE_ENABLE = 1
  // Blitter Source A Start
  .label DTV_BLITTER_SRCA_LO = $d320
  .label DTV_BLITTER_SRCA_MI = $d321
  .label DTV_BLITTER_SRCA_HI = $d322
  // Blitter Source A Modulo
  .label DTV_BLITTER_SRCA_MOD_LO = $d323
  .label DTV_BLITTER_SRCA_MOD_HI = $d324
  // Blitter Source A Line Length
  .label DTV_BLITTER_SRCA_LIN_LO = $d325
  .label DTV_BLITTER_SRCA_LIN_HI = $d326
  // Blitter Source A Step ([7:4] integral part, [3:0] fractional part)
  .label DTV_BLITTER_SRCA_STEP = $d327
  // Blitter Source B Start
  .label DTV_BLITTER_SRCB_LO = $d328
  .label DTV_BLITTER_SRCB_MI = $d329
  .label DTV_BLITTER_SRCB_HI = $d32a
  // Blitter Source B Modulo
  .label DTV_BLITTER_SRCB_MOD_LO = $d32b
  .label DTV_BLITTER_SRCB_MOD_HI = $d32c
  // Blitter Source B Line Length
  .label DTV_BLITTER_SRCB_LIN_LO = $d32d
  .label DTV_BLITTER_SRCB_LIN_HI = $d32e
  // Blitter Source B Step ([7:4] integral part, [3:0] fractional part)
  .label DTV_BLITTER_SRCB_STEP = $d32f
  // Blitter Destination Start
  .label DTV_BLITTER_DEST_LO = $d330
  .label DTV_BLITTER_DEST_MI = $d331
  .label DTV_BLITTER_DEST_HI = $d332
  // Blitter Source B Modulo
  .label DTV_BLITTER_DEST_MOD_LO = $d333
  .label DTV_BLITTER_DEST_MOD_HI = $d334
  // Blitter Source B Line Length
  .label DTV_BLITTER_DEST_LIN_LO = $d335
  .label DTV_BLITTER_DEST_LIN_HI = $d336
  // Blitter Source B Step ([7:4] integral part, [3:0] fractional part)
  .label DTV_BLITTER_DEST_STEP = $d337
  // Blitter Blit Length
  .label DTV_BLITTER_LEN_LO = $d338
  .label DTV_BLITTER_LEN_HI = $d339
  // Blitter Control
  .label DTV_BLITTER_CONTROL = $d33a
  // Bit[0] Force Start Strobe when set
  .const DTV_BLIT_FORCE_START = 1
  // Bit[1] Source A Direction Positive when set
  .const DTV_BLIT_SRCA_FWD = 2
  // Bit[2] Source B Direction Positive when set
  .const DTV_BLIT_SRCB_FWD = 4
  // Bit[3] Destination Direction Positive when set
  .const DTV_BLIT_DEST_FWD = 8
  // Blitter Transparency
  .label DTV_BLITTER_TRANSPARANCY = $d33b
  // No transparancy
  // Bit[2]==Bit[1]==0: write in any case
  .const DTV_BLIT_TRANSPARANCY_NONE = 0
  // Controls the ALU operation
  .label DTV_BLITTER_ALU = $d33e
  .const DTV_BLIT_ADD = $30
  // Blitter Control 2
  .label DTV_BLITTER_CONTROL2 = $d33f
  // Bit[0] Clear Blitter IRQ
  .const DTV_BLIT_CLEAR_IRQ = 1
  // Bit[3] Destination Continue
  .const DTV_BLIT_DEST_CONT = 8
  // Bit[0] Busy when set (When reading)
  .const DTV_BLIT_STATUS_BUSY = 1
  .label SCREEN = $400
  .const SRCA_LEN = 9
//SEG3 @begin
//SEG4 [1] phi from @begin to @6 [phi:@begin->@6]
//SEG5 @6
//SEG6 [2] call main 
//SEG7 [3] phi from @6 to @end [phi:@6->@end]
//SEG8 @end
//SEG9 main
main: {
  //SEG10 [4] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_FEATURE_ENABLE
    sta DTV_FEATURE
  //SEG11 [5] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_CLEAR_IRQ#0 -- _deref_pbuc1=vbuc2 
    // Instruct blitter not to continue previous blit
    lda #DTV_BLIT_CLEAR_IRQ
    sta DTV_BLITTER_CONTROL2
  //SEG12 [6] *((const byte*) DTV_BLITTER_SRCA_LO#0) ← <(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #<SRCA
    sta DTV_BLITTER_SRCA_LO
  //SEG13 [7] *((const byte*) DTV_BLITTER_SRCA_MI#0) ← >(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCA
    sta DTV_BLITTER_SRCA_MI
  //SEG14 [8] *((const byte*) DTV_BLITTER_SRCA_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_HI
  //SEG15 [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_SRCA_MOD_LO
  //SEG16 [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_SRCA_MOD_HI
  //SEG17 [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #<$100
    sta DTV_BLITTER_SRCA_LIN_LO
  //SEG18 [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCA_LIN_HI
  //SEG19 [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_SRCA_STEP
  //SEG20 [14] *((const byte*) DTV_BLITTER_SRCB_LO#0) ← <(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    // Step 1.0
    lda #<SRCB
    sta DTV_BLITTER_SRCB_LO
  //SEG21 [15] *((const byte*) DTV_BLITTER_SRCB_MI#0) ← >(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCB
    sta DTV_BLITTER_SRCB_MI
  //SEG22 [16] *((const byte*) DTV_BLITTER_SRCB_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_HI
  //SEG23 [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_SRCB_MOD_LO
  //SEG24 [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_SRCB_MOD_HI
  //SEG25 [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #<$100
    sta DTV_BLITTER_SRCB_LIN_LO
  //SEG26 [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCB_LIN_HI
  //SEG27 [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_STEP
  //SEG28 [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← <(const byte*) SCREEN#0 -- _deref_pbuc1=vbuc2 
    // Step 0.0
    lda #<SCREEN
    sta DTV_BLITTER_DEST_LO
  //SEG29 [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0 -- _deref_pbuc1=vbuc2 
    lda #>SCREEN
    sta DTV_BLITTER_DEST_MI
  //SEG30 [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_HI
  //SEG31 [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_DEST_MOD_LO
  //SEG32 [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_DEST_MOD_HI
  //SEG33 [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #<$100
    sta DTV_BLITTER_DEST_LIN_LO
  //SEG34 [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word/signed word/dword/signed dword) 256 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_DEST_LIN_HI
  //SEG35 [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte/signed byte/word/signed word/dword/signed dword) 16 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_DEST_STEP
  //SEG36 [30] *((const byte*) DTV_BLITTER_LEN_LO#0) ← (const byte) SRCA_LEN#0 -- _deref_pbuc1=vbuc2 
    // Step 1.0
    lda #SRCA_LEN
    sta DTV_BLITTER_LEN_LO
  //SEG37 [31] *((const byte*) DTV_BLITTER_LEN_HI#0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_LEN_HI
  //SEG38 [32] *((const byte*) DTV_BLITTER_ALU#0) ← (const byte) DTV_BLIT_ADD#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_BLIT_ADD
    sta DTV_BLITTER_ALU
  //SEG39 [33] *((const byte*) DTV_BLITTER_TRANSPARANCY#0) ← (const byte) DTV_BLIT_TRANSPARANCY_NONE#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_BLIT_TRANSPARANCY_NONE
    sta DTV_BLITTER_TRANSPARANCY
  //SEG40 [34] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 -- _deref_pbuc1=vbuc2 
    // Start blitter
    lda #DTV_BLIT_FORCE_START|DTV_BLIT_SRCA_FWD|DTV_BLIT_SRCB_FWD|DTV_BLIT_DEST_FWD
    sta DTV_BLITTER_CONTROL
  //SEG41 [35] *((const byte*) DTV_BLITTER_CONTROL2#0) ← (const byte) DTV_BLIT_DEST_CONT#0 -- _deref_pbuc1=vbuc2 
    // Instruct blitter to continue at DEST and restart SRC A/B
    lda #DTV_BLIT_DEST_CONT
    sta DTV_BLITTER_CONTROL2
  //SEG42 [36] phi from main to main::@2 [phi:main->main::@2]
  //SEG43 [36] phi (byte) main::r#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:main->main::@2#0] -- vbuxx=vbuc1 
    ldx #0
  // wait til blitter is ready
  //SEG44 [36] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
  //SEG45 [36] phi from main::@3 to main::@2 [phi:main::@3->main::@2]
  //SEG46 [36] phi (byte) main::r#2 = (byte) main::r#1 [phi:main::@3->main::@2#0] -- register_copy 
  //SEG47 main::@2
  b2:
  //SEG48 [37] (byte~) main::$15 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 -- vbuaa=_deref_pbuc1_band_vbuc2 
    lda DTV_BLITTER_CONTROL2
    and #DTV_BLIT_STATUS_BUSY
  //SEG49 [38] if((byte~) main::$15!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b2
  //SEG50 main::@3
  //SEG51 [39] *((const byte*) DTV_BLITTER_CONTROL#0) ← (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0|(const byte) DTV_BLIT_DEST_FWD#0 -- _deref_pbuc1=vbuc2 
    // restart
    lda #DTV_BLIT_FORCE_START|DTV_BLIT_SRCA_FWD|DTV_BLIT_SRCB_FWD|DTV_BLIT_DEST_FWD
    sta DTV_BLITTER_CONTROL
  //SEG52 [40] (byte) main::r#1 ← ++ (byte) main::r#2 -- vbuxx=_inc_vbuxx 
    inx
  //SEG53 [41] if((byte) main::r#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne b2
  //SEG54 main::@return
  //SEG55 [42] return 
    rts
}
  SRCA: .byte 'c', 'a', 'm', 'e', 'l', 'o', 't', '!', ' '
  SRCB: .byte $80

