Identified constant variable (byte*) dtvSetCpuBankSegment1::cpuBank
Identified constant variable (byte*) DTV_BLITTER_ALU
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx 
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::@4

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@4
@4: scope:[]  from @begin
  (byte*) DTV_FEATURE#0 ← ((byte*)) (number) $d03f
  (byte) DTV_FEATURE_ENABLE#0 ← (number) 1
  to:@5
@5: scope:[]  from @4
  (byte*) DTV_BLITTER_SRCA_LO#0 ← ((byte*)) (number) $d320
  (byte*) DTV_BLITTER_SRCA_MI#0 ← ((byte*)) (number) $d321
  (byte*) DTV_BLITTER_SRCA_HI#0 ← ((byte*)) (number) $d322
  (byte*) DTV_BLITTER_SRCA_MOD_LO#0 ← ((byte*)) (number) $d323
  (byte*) DTV_BLITTER_SRCA_MOD_HI#0 ← ((byte*)) (number) $d324
  (byte*) DTV_BLITTER_SRCA_LIN_LO#0 ← ((byte*)) (number) $d325
  (byte*) DTV_BLITTER_SRCA_LIN_HI#0 ← ((byte*)) (number) $d326
  (byte*) DTV_BLITTER_SRCA_STEP#0 ← ((byte*)) (number) $d327
  (byte*) DTV_BLITTER_SRCB_LO#0 ← ((byte*)) (number) $d328
  (byte*) DTV_BLITTER_SRCB_MI#0 ← ((byte*)) (number) $d329
  (byte*) DTV_BLITTER_SRCB_HI#0 ← ((byte*)) (number) $d32a
  (byte*) DTV_BLITTER_SRCB_MOD_LO#0 ← ((byte*)) (number) $d32b
  (byte*) DTV_BLITTER_SRCB_MOD_HI#0 ← ((byte*)) (number) $d32c
  (byte*) DTV_BLITTER_SRCB_LIN_LO#0 ← ((byte*)) (number) $d32d
  (byte*) DTV_BLITTER_SRCB_LIN_HI#0 ← ((byte*)) (number) $d32e
  (byte*) DTV_BLITTER_SRCB_STEP#0 ← ((byte*)) (number) $d32f
  (byte*) DTV_BLITTER_DEST_LO#0 ← ((byte*)) (number) $d330
  (byte*) DTV_BLITTER_DEST_MI#0 ← ((byte*)) (number) $d331
  (byte*) DTV_BLITTER_DEST_HI#0 ← ((byte*)) (number) $d332
  (byte*) DTV_BLITTER_DEST_MOD_LO#0 ← ((byte*)) (number) $d333
  (byte*) DTV_BLITTER_DEST_MOD_HI#0 ← ((byte*)) (number) $d334
  (byte*) DTV_BLITTER_DEST_LIN_LO#0 ← ((byte*)) (number) $d335
  (byte*) DTV_BLITTER_DEST_LIN_HI#0 ← ((byte*)) (number) $d336
  (byte*) DTV_BLITTER_DEST_STEP#0 ← ((byte*)) (number) $d337
  (byte*) DTV_BLITTER_LEN_LO#0 ← ((byte*)) (number) $d338
  (byte*) DTV_BLITTER_LEN_HI#0 ← ((byte*)) (number) $d339
  (byte*) DTV_BLITTER_CONTROL#0 ← ((byte*)) (number) $d33a
  (byte) DTV_BLIT_FORCE_START#0 ← (number) 1
  (byte) DTV_BLIT_SRCA_FWD#0 ← (number) 2
  (byte) DTV_BLIT_SRCB_FWD#0 ← (number) 4
  (byte) DTV_BLIT_DEST_FWD#0 ← (number) 8
  (byte*) DTV_BLITTER_TRANSPARANCY#0 ← ((byte*)) (number) $d33b
  (byte) DTV_BLIT_TRANSPARANCY_NONE#0 ← (number) 0
  (byte*) DTV_BLITTER_ALU#0 ← ((byte*)) (number) $d33e
  (byte) DTV_BLIT_ADD#0 ← (number) $30
  (byte*) DTV_BLITTER_CONTROL2#0 ← ((byte*)) (number) $d33f
  (byte) DTV_BLIT_CLEAR_IRQ#0 ← (number) 1
  (byte) DTV_BLIT_DEST_CONT#0 ← (number) 8
  (byte) DTV_BLIT_STATUS_BUSY#0 ← (number) 1
  (byte*) SCREEN#0 ← ((byte*)) (number) $400
  (byte[]) SRCA#0 ← { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' }
  (byte) SRCA_LEN#0 ← (number) 9
  (byte[]) SRCB#0 ← { (number) $80 }
  to:@6
main: scope:[main]  from @6
  *((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) ← (number) 0
  *((byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (number) 0
  *((byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (number) 0
  *((byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← <(word) $100
  *((byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word) $100
  *((byte*) DTV_BLITTER_SRCA_STEP#0) ← (number) $10
  (byte~) main::$2 ← < (byte[]) SRCB#0
  *((byte*) DTV_BLITTER_SRCB_LO#0) ← (byte~) main::$2
  (byte~) main::$3 ← > (byte[]) SRCB#0
  *((byte*) DTV_BLITTER_SRCB_MI#0) ← (byte~) main::$3
  *((byte*) DTV_BLITTER_SRCB_HI#0) ← (number) 0
  *((byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (number) 0
  *((byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (number) 0
  *((byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← <(word) $100
  *((byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word) $100
  *((byte*) DTV_BLITTER_SRCB_STEP#0) ← (number) 0
  (byte~) main::$4 ← < (byte*) SCREEN#0
  *((byte*) DTV_BLITTER_DEST_LO#0) ← (byte~) main::$4
  (byte~) main::$5 ← > (byte*) SCREEN#0
  *((byte*) DTV_BLITTER_DEST_MI#0) ← (byte~) main::$5
  *((byte*) DTV_BLITTER_DEST_HI#0) ← (number) 0
  *((byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (number) 0
  *((byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (number) 0
  *((byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word) $100
  *((byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word) $100
  *((byte*) DTV_BLITTER_DEST_STEP#0) ← (number) $10
  *((byte*) DTV_BLITTER_LEN_LO#0) ← (byte) SRCA_LEN#0
  *((byte*) DTV_BLITTER_LEN_HI#0) ← (number) 0
  *((byte*) DTV_BLITTER_ALU#0) ← (byte) DTV_BLIT_ADD#0
  *((byte*) DTV_BLITTER_TRANSPARANCY#0) ← (byte) DTV_BLIT_TRANSPARANCY_NONE#0
  (byte~) main::$6 ← (byte) DTV_BLIT_FORCE_START#0 | (byte) DTV_BLIT_SRCA_FWD#0
  (byte~) main::$7 ← (byte~) main::$6 | (byte) DTV_BLIT_SRCB_FWD#0
  (byte~) main::$8 ← (byte~) main::$7 | (byte) DTV_BLIT_DEST_FWD#0
  *((byte*) DTV_BLITTER_CONTROL#0) ← (byte~) main::$8
  *((byte*) DTV_BLITTER_CONTROL2#0) ← (byte) DTV_BLIT_DEST_CONT#0
  (byte) main::r#0 ← (byte) 0
  to:main::@2
main::@2: scope:[main]  from main main::@2 main::@3
  (byte) main::r#3 ← phi( main/(byte) main::r#0 main::@2/(byte) main::r#3 main::@3/(byte) main::r#1 )
  (byte~) main::$9 ← *((byte*) DTV_BLITTER_CONTROL2#0) & (byte) DTV_BLIT_STATUS_BUSY#0
  (bool~) main::$10 ← (byte~) main::$9 != (number) 0
  if((bool~) main::$10) 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::$11 ← (byte) DTV_BLIT_FORCE_START#0 | (byte) DTV_BLIT_SRCA_FWD#0
  (byte~) main::$12 ← (byte~) main::$11 | (byte) DTV_BLIT_SRCB_FWD#0
  (byte~) main::$13 ← (byte~) main::$12 | (byte) DTV_BLIT_DEST_FWD#0
  *((byte*) DTV_BLITTER_CONTROL#0) ← (byte~) main::$13
  (byte) main::r#1 ← (byte) main::r#2 + rangenext(0,7)
  (bool~) main::$14 ← (byte) main::r#1 != rangelast(0,7)
  if((bool~) main::$14) goto main::@2
  to:main::@return
main::@return: scope:[main]  from main::@3
  return 
  to:@return
@6: scope:[]  from @5
  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*) DTV_BLITTER_ALU
(byte*) DTV_BLITTER_ALU#0
(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_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_FORCE_START
(byte) DTV_BLIT_FORCE_START#0
(byte) DTV_BLIT_SRCA_FWD
(byte) DTV_BLIT_SRCA_FWD#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_TRANSPARANCY_NONE
(byte) DTV_BLIT_TRANSPARANCY_NONE#0
(byte*) DTV_FEATURE
(byte*) DTV_FEATURE#0
(byte) DTV_FEATURE_ENABLE
(byte) DTV_FEATURE_ENABLE#0
(byte*) SCREEN
(byte*) SCREEN#0
(byte[]) SRCA
(byte[]) SRCA#0
(byte) SRCA_LEN
(byte) SRCA_LEN#0
(byte[]) SRCB
(byte[]) SRCB#0
(void()) main()
(byte~) main::$0
(byte~) main::$1
(bool~) main::$10
(byte~) main::$11
(byte~) main::$12
(byte~) main::$13
(bool~) main::$14
(byte~) main::$2
(byte~) main::$3
(byte~) main::$4
(byte~) main::$5
(byte~) main::$6
(byte~) main::$7
(byte~) main::$8
(byte~) main::$9
(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

Adding number conversion cast (unumber) 1 in (byte) DTV_FEATURE_ENABLE#0 ← (number) 1
Adding number conversion cast (unumber) 1 in (byte) DTV_BLIT_FORCE_START#0 ← (number) 1
Adding number conversion cast (unumber) 2 in (byte) DTV_BLIT_SRCA_FWD#0 ← (number) 2
Adding number conversion cast (unumber) 4 in (byte) DTV_BLIT_SRCB_FWD#0 ← (number) 4
Adding number conversion cast (unumber) 8 in (byte) DTV_BLIT_DEST_FWD#0 ← (number) 8
Adding number conversion cast (unumber) 0 in (byte) DTV_BLIT_TRANSPARANCY_NONE#0 ← (number) 0
Adding number conversion cast (unumber) $30 in (byte) DTV_BLIT_ADD#0 ← (number) $30
Adding number conversion cast (unumber) 1 in (byte) DTV_BLIT_CLEAR_IRQ#0 ← (number) 1
Adding number conversion cast (unumber) 8 in (byte) DTV_BLIT_DEST_CONT#0 ← (number) 8
Adding number conversion cast (unumber) 1 in (byte) DTV_BLIT_STATUS_BUSY#0 ← (number) 1
Adding number conversion cast (unumber) 9 in (byte) SRCA_LEN#0 ← (number) 9
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_SRCA_HI#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (number) 0
Adding number conversion cast (unumber) $10 in *((byte*) DTV_BLITTER_SRCA_STEP#0) ← (number) $10
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_SRCB_HI#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_SRCB_STEP#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_DEST_HI#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (number) 0
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (number) 0
Adding number conversion cast (unumber) $10 in *((byte*) DTV_BLITTER_DEST_STEP#0) ← (number) $10
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_LEN_HI#0) ← (number) 0
Adding number conversion cast (unumber) 0 in (bool~) main::$10 ← (byte~) main::$9 != (number) 0
Successful SSA optimization PassNAddNumberTypeConversions
Adding number conversion cast (byte) to elements in (byte[]) SRCB#0 ← { (byte)(number) $80 }
Successful SSA optimization PassNAddArrayNumberTypeConversions
Inlining cast (byte*) DTV_FEATURE#0 ← (byte*)(number) $d03f
Inlining cast (byte) DTV_FEATURE_ENABLE#0 ← (unumber)(number) 1
Inlining cast (byte*) DTV_BLITTER_SRCA_LO#0 ← (byte*)(number) $d320
Inlining cast (byte*) DTV_BLITTER_SRCA_MI#0 ← (byte*)(number) $d321
Inlining cast (byte*) DTV_BLITTER_SRCA_HI#0 ← (byte*)(number) $d322
Inlining cast (byte*) DTV_BLITTER_SRCA_MOD_LO#0 ← (byte*)(number) $d323
Inlining cast (byte*) DTV_BLITTER_SRCA_MOD_HI#0 ← (byte*)(number) $d324
Inlining cast (byte*) DTV_BLITTER_SRCA_LIN_LO#0 ← (byte*)(number) $d325
Inlining cast (byte*) DTV_BLITTER_SRCA_LIN_HI#0 ← (byte*)(number) $d326
Inlining cast (byte*) DTV_BLITTER_SRCA_STEP#0 ← (byte*)(number) $d327
Inlining cast (byte*) DTV_BLITTER_SRCB_LO#0 ← (byte*)(number) $d328
Inlining cast (byte*) DTV_BLITTER_SRCB_MI#0 ← (byte*)(number) $d329
Inlining cast (byte*) DTV_BLITTER_SRCB_HI#0 ← (byte*)(number) $d32a
Inlining cast (byte*) DTV_BLITTER_SRCB_MOD_LO#0 ← (byte*)(number) $d32b
Inlining cast (byte*) DTV_BLITTER_SRCB_MOD_HI#0 ← (byte*)(number) $d32c
Inlining cast (byte*) DTV_BLITTER_SRCB_LIN_LO#0 ← (byte*)(number) $d32d
Inlining cast (byte*) DTV_BLITTER_SRCB_LIN_HI#0 ← (byte*)(number) $d32e
Inlining cast (byte*) DTV_BLITTER_SRCB_STEP#0 ← (byte*)(number) $d32f
Inlining cast (byte*) DTV_BLITTER_DEST_LO#0 ← (byte*)(number) $d330
Inlining cast (byte*) DTV_BLITTER_DEST_MI#0 ← (byte*)(number) $d331
Inlining cast (byte*) DTV_BLITTER_DEST_HI#0 ← (byte*)(number) $d332
Inlining cast (byte*) DTV_BLITTER_DEST_MOD_LO#0 ← (byte*)(number) $d333
Inlining cast (byte*) DTV_BLITTER_DEST_MOD_HI#0 ← (byte*)(number) $d334
Inlining cast (byte*) DTV_BLITTER_DEST_LIN_LO#0 ← (byte*)(number) $d335
Inlining cast (byte*) DTV_BLITTER_DEST_LIN_HI#0 ← (byte*)(number) $d336
Inlining cast (byte*) DTV_BLITTER_DEST_STEP#0 ← (byte*)(number) $d337
Inlining cast (byte*) DTV_BLITTER_LEN_LO#0 ← (byte*)(number) $d338
Inlining cast (byte*) DTV_BLITTER_LEN_HI#0 ← (byte*)(number) $d339
Inlining cast (byte*) DTV_BLITTER_CONTROL#0 ← (byte*)(number) $d33a
Inlining cast (byte) DTV_BLIT_FORCE_START#0 ← (unumber)(number) 1
Inlining cast (byte) DTV_BLIT_SRCA_FWD#0 ← (unumber)(number) 2
Inlining cast (byte) DTV_BLIT_SRCB_FWD#0 ← (unumber)(number) 4
Inlining cast (byte) DTV_BLIT_DEST_FWD#0 ← (unumber)(number) 8
Inlining cast (byte*) DTV_BLITTER_TRANSPARANCY#0 ← (byte*)(number) $d33b
Inlining cast (byte) DTV_BLIT_TRANSPARANCY_NONE#0 ← (unumber)(number) 0
Inlining cast (byte*) DTV_BLITTER_ALU#0 ← (byte*)(number) $d33e
Inlining cast (byte) DTV_BLIT_ADD#0 ← (unumber)(number) $30
Inlining cast (byte*) DTV_BLITTER_CONTROL2#0 ← (byte*)(number) $d33f
Inlining cast (byte) DTV_BLIT_CLEAR_IRQ#0 ← (unumber)(number) 1
Inlining cast (byte) DTV_BLIT_DEST_CONT#0 ← (unumber)(number) 8
Inlining cast (byte) DTV_BLIT_STATUS_BUSY#0 ← (unumber)(number) 1
Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400
Inlining cast (byte) SRCA_LEN#0 ← (unumber)(number) 9
Inlining cast *((byte*) DTV_BLITTER_SRCA_HI#0) ← (unumber)(number) 0
Inlining cast *((byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (unumber)(number) 0
Inlining cast *((byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (unumber)(number) 0
Inlining cast *((byte*) DTV_BLITTER_SRCA_STEP#0) ← (unumber)(number) $10
Inlining cast *((byte*) DTV_BLITTER_SRCB_HI#0) ← (unumber)(number) 0
Inlining cast *((byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (unumber)(number) 0
Inlining cast *((byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (unumber)(number) 0
Inlining cast *((byte*) DTV_BLITTER_SRCB_STEP#0) ← (unumber)(number) 0
Inlining cast *((byte*) DTV_BLITTER_DEST_HI#0) ← (unumber)(number) 0
Inlining cast *((byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (unumber)(number) 0
Inlining cast *((byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (unumber)(number) 0
Inlining cast *((byte*) DTV_BLITTER_DEST_STEP#0) ← (unumber)(number) $10
Inlining cast *((byte*) DTV_BLITTER_LEN_HI#0) ← (unumber)(number) 0
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 53311
Simplifying constant integer cast 1
Simplifying constant pointer cast (byte*) 54048
Simplifying constant pointer cast (byte*) 54049
Simplifying constant pointer cast (byte*) 54050
Simplifying constant pointer cast (byte*) 54051
Simplifying constant pointer cast (byte*) 54052
Simplifying constant pointer cast (byte*) 54053
Simplifying constant pointer cast (byte*) 54054
Simplifying constant pointer cast (byte*) 54055
Simplifying constant pointer cast (byte*) 54056
Simplifying constant pointer cast (byte*) 54057
Simplifying constant pointer cast (byte*) 54058
Simplifying constant pointer cast (byte*) 54059
Simplifying constant pointer cast (byte*) 54060
Simplifying constant pointer cast (byte*) 54061
Simplifying constant pointer cast (byte*) 54062
Simplifying constant pointer cast (byte*) 54063
Simplifying constant pointer cast (byte*) 54064
Simplifying constant pointer cast (byte*) 54065
Simplifying constant pointer cast (byte*) 54066
Simplifying constant pointer cast (byte*) 54067
Simplifying constant pointer cast (byte*) 54068
Simplifying constant pointer cast (byte*) 54069
Simplifying constant pointer cast (byte*) 54070
Simplifying constant pointer cast (byte*) 54071
Simplifying constant pointer cast (byte*) 54072
Simplifying constant pointer cast (byte*) 54073
Simplifying constant pointer cast (byte*) 54074
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 4
Simplifying constant integer cast 8
Simplifying constant pointer cast (byte*) 54075
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 54078
Simplifying constant integer cast $30
Simplifying constant pointer cast (byte*) 54079
Simplifying constant integer cast 1
Simplifying constant integer cast 8
Simplifying constant integer cast 1
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast 9
Simplifying constant integer cast $80
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $10
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $10
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $30
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 9
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $10
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $10
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias (byte) main::r#2 = (byte) main::r#3 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte) main::r#2
Successful SSA optimization Pass2SelfPhiElimination
Simple Condition (bool~) main::$10 [90] if((byte~) main::$9!=(byte) 0) goto main::@2
Simple Condition (bool~) main::$14 [98] if((byte) main::r#1!=rangelast(0,7)) goto main::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [42] (byte[]) SRCA#0 ← { (byte) 'c', (byte) 'a', (byte) 'm', (byte) 'e', (byte) 'l', (byte) 'o', (byte) 't', (byte) '!', (byte) ' ' }
Constant right-side identified [44] (byte[]) SRCB#0 ← { (byte) $80 }
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) DTV_FEATURE#0 = (byte*) 53311
Constant (const byte) DTV_FEATURE_ENABLE#0 = 1
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_BLITTER_TRANSPARANCY#0 = (byte*) 54075
Constant (const byte) DTV_BLIT_TRANSPARANCY_NONE#0 = 0
Constant (const byte*) DTV_BLITTER_ALU#0 = (byte*) 54078
Constant (const byte) DTV_BLIT_ADD#0 = $30
Constant (const byte*) DTV_BLITTER_CONTROL2#0 = (byte*) 54079
Constant (const byte) DTV_BLIT_CLEAR_IRQ#0 = 1
Constant (const byte) DTV_BLIT_DEST_CONT#0 = 8
Constant (const byte) DTV_BLIT_STATUS_BUSY#0 = 1
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 = { $80 }
Constant (const byte) main::r#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Resolved ranged next value [96] main::r#1 ← ++ main::r#2 to ++
Resolved ranged comparison value [98] if(main::r#1!=rangelast(0,7)) goto main::@2 to (number) 8
Simplifying constant evaluating to zero <(word) $100 in [54] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← <(word) $100
Simplifying constant evaluating to zero <(word) $100 in [64] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← <(word) $100
Simplifying constant evaluating to zero <(word) $100 in [74] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word) $100
Successful SSA optimization PassNSimplifyConstantZero
Adding number conversion cast (unumber) 8 in if((byte) main::r#1!=(number) 8) goto main::@2
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast 8
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 8
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [2] (byte~) main::$0 ← < (const byte[]) SRCA#0
Constant right-side identified [4] (byte~) main::$1 ← > (const byte[]) SRCA#0
Constant right-side identified [12] (byte~) main::$2 ← < (const byte[]) SRCB#0
Constant right-side identified [14] (byte~) main::$3 ← > (const byte[]) SRCB#0
Constant right-side identified [22] (byte~) main::$4 ← < (const byte*) SCREEN#0
Constant right-side identified [24] (byte~) main::$5 ← > (const byte*) SCREEN#0
Constant right-side identified [36] (byte~) main::$6 ← (const byte) DTV_BLIT_FORCE_START#0 | (const byte) DTV_BLIT_SRCA_FWD#0
Constant right-side identified [44] (byte~) main::$11 ← (const byte) DTV_BLIT_FORCE_START#0 | (const byte) DTV_BLIT_SRCA_FWD#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::$0 = <SRCA#0
Constant (const byte) main::$1 = >SRCA#0
Constant (const byte) main::$2 = <SRCB#0
Constant (const byte) main::$3 = >SRCB#0
Constant (const byte) main::$4 = <SCREEN#0
Constant (const byte) main::$5 = >SCREEN#0
Constant (const byte) main::$6 = DTV_BLIT_FORCE_START#0|DTV_BLIT_SRCA_FWD#0
Constant (const byte) main::$11 = DTV_BLIT_FORCE_START#0|DTV_BLIT_SRCA_FWD#0
Successful SSA optimization Pass2ConstantIdentification
Simplifying constant evaluating to zero <(const byte*) SCREEN#0 in 
Successful SSA optimization PassNSimplifyConstantZero
Constant right-side identified [30] (byte~) main::$7 ← (const byte) main::$6 | (const byte) DTV_BLIT_SRCB_FWD#0
Constant right-side identified [37] (byte~) main::$12 ← (const byte) main::$11 | (const byte) DTV_BLIT_SRCB_FWD#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::$7 = main::$6|DTV_BLIT_SRCB_FWD#0
Constant (const byte) main::$12 = main::$11|DTV_BLIT_SRCB_FWD#0
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [30] (byte~) main::$8 ← (const byte) main::$7 | (const byte) DTV_BLIT_DEST_FWD#0
Constant right-side identified [36] (byte~) main::$13 ← (const byte) main::$12 | (const byte) DTV_BLIT_DEST_FWD#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::$8 = main::$7|DTV_BLIT_DEST_FWD#0
Constant (const byte) main::$13 = main::$12|DTV_BLIT_DEST_FWD#0
Successful SSA optimization Pass2ConstantIdentification
Inlining constant with var siblings (const byte) main::r#0
Constant inlined main::r#0 = (byte) 0
Constant inlined main::$12 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_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|(const byte) DTV_BLIT_DEST_FWD#0
Constant inlined main::$11 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0
Constant inlined main::$1 = >(const byte[]) SRCA#0
Constant inlined main::$2 = <(const byte[]) SRCB#0
Constant inlined main::$0 = <(const byte[]) SRCA#0
Constant inlined main::$5 = >(const byte*) SCREEN#0
Constant inlined main::$6 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0
Constant inlined main::$3 = >(const byte[]) SRCB#0
Constant inlined main::$4 = (byte) 0
Constant inlined main::$7 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_FWD#0
Constant inlined main::$8 = (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
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 @4
Adding NOP phi() at start of @5
Adding NOP phi() at start of @6
Adding NOP phi() at start of @7
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:4 

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

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @1
  [3] phi()
main: scope:[main]  from @1
  [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) 0
  [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte) 0
  [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte) 0
  [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← (byte) 0
  [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word) $100
  [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte) $10
  [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) 0
  [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte) 0
  [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte) 0
  [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← (byte) 0
  [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word) $100
  [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte) 0
  [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← (byte) 0
  [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0
  [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte) 0
  [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte) 0
  [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte) 0
  [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← (byte) 0
  [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word) $100
  [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte) $10
  [30] *((const byte*) DTV_BLITTER_LEN_LO#0) ← (const byte) SRCA_LEN#0
  [31] *((const byte*) DTV_BLITTER_LEN_HI#0) ← (byte) 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::@1
main::@1: scope:[main]  from main main::@1 main::@2
  [36] (byte) main::r#2 ← phi( main/(byte) 0 main::@2/(byte) main::r#1 )
  [37] (byte~) main::$9 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0
  [38] if((byte~) main::$9!=(byte) 0) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1
  [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) 8) goto main::@1
  to:main::@return
main::@return: scope:[main]  from main::@2
  [42] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(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_CLEAR_IRQ
(byte) DTV_BLIT_DEST_CONT
(byte) DTV_BLIT_DEST_FWD
(byte) DTV_BLIT_FORCE_START
(byte) DTV_BLIT_SRCA_FWD
(byte) DTV_BLIT_SRCB_FWD
(byte) DTV_BLIT_STATUS_BUSY
(byte) DTV_BLIT_TRANSPARANCY_NONE
(byte*) DTV_FEATURE
(byte) DTV_FEATURE_ENABLE
(byte*) SCREEN
(byte[]) SRCA
(byte) SRCA_LEN
(byte[]) SRCB
(void()) main()
(byte~) main::$9 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::$9 to zero page equivalence class [ main::$9 ]
Complete equivalence classes
[ main::r#2 main::r#1 ]
[ main::$9 ]
Allocated zp ZP_BYTE:2 [ main::r#2 main::r#1 ]
Allocated zp ZP_BYTE:3 [ main::$9 ]

INITIAL ASM
  // File Comments
  // Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // 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
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call main 
  jsr main
  // [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
  jmp bend
  // @end
bend:
  // main
main: {
    .label _9 = 3
    .label r = 2
    // [4] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_FEATURE_ENABLE
    sta DTV_FEATURE
    // [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
    // [6] *((const byte*) DTV_BLITTER_SRCA_LO#0) ← <(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #<SRCA
    sta DTV_BLITTER_SRCA_LO
    // [7] *((const byte*) DTV_BLITTER_SRCA_MI#0) ← >(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCA
    sta DTV_BLITTER_SRCA_MI
    // [8] *((const byte*) DTV_BLITTER_SRCA_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_HI
    // [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_MOD_LO
    // [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_MOD_HI
    // [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_LIN_LO
    // [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word) $100 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCA_LIN_HI
    // [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte) $10 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_SRCA_STEP
    // [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
    // [15] *((const byte*) DTV_BLITTER_SRCB_MI#0) ← >(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCB
    sta DTV_BLITTER_SRCB_MI
    // [16] *((const byte*) DTV_BLITTER_SRCB_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_HI
    // [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_MOD_LO
    // [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_MOD_HI
    // [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_LIN_LO
    // [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word) $100 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCB_LIN_HI
    // [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_STEP
    // [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    // Step 0.0
    lda #0
    sta DTV_BLITTER_DEST_LO
    // [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0 -- _deref_pbuc1=vbuc2 
    lda #>SCREEN
    sta DTV_BLITTER_DEST_MI
    // [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_HI
    // [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_MOD_LO
    // [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_MOD_HI
    // [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_LIN_LO
    // [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word) $100 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_DEST_LIN_HI
    // [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte) $10 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_DEST_STEP
    // [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
    // [31] *((const byte*) DTV_BLITTER_LEN_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_LEN_HI
    // [32] *((const byte*) DTV_BLITTER_ALU#0) ← (const byte) DTV_BLIT_ADD#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_BLIT_ADD
    sta DTV_BLITTER_ALU
    // [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
    // [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
    // [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
    // [36] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
    // [36] phi (byte) main::r#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta r
    jmp b1
  // wait til blitter is ready
    // [36] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  b1_from_b1:
    jmp b1
    // [36] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
  b1_from_b2:
    // [36] phi (byte) main::r#2 = (byte) main::r#1 [phi:main::@2->main::@1#0] -- register_copy 
    jmp b1
    // main::@1
  b1:
    // [37] (byte~) main::$9 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 -- vbuz1=_deref_pbuc1_band_vbuc2 
    lda #DTV_BLIT_STATUS_BUSY
    and DTV_BLITTER_CONTROL2
    sta _9
    // [38] if((byte~) main::$9!=(byte) 0) goto main::@1 -- vbuz1_neq_0_then_la1 
    lda _9
    cmp #0
    bne b1_from_b1
    jmp b2
    // main::@2
  b2:
    // [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
    // [40] (byte) main::r#1 ← ++ (byte) main::r#2 -- vbuz1=_inc_vbuz1 
    inc r
    // [41] if((byte) main::r#1!=(byte) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #8
    cmp r
    bne b1_from_b2
    jmp breturn
    // main::@return
  breturn:
    // [42] return 
    rts
}
  // File Data
  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) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word) $100 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte) $10 [ ] ( 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) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word) $100 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← (byte) 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) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word) $100 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte) $10 [ ] ( 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) 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::$9 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 [ main::r#2 main::$9 ] ( main:2 [ main::r#2 main::$9 ] ) 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) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word) $100 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte) $10 [ ] ( 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) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word) $100 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← (byte) 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) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word) $100 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte) $10 [ ] ( 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) 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::$9 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 [ main::r#2 main::$9 ] ( main:2 [ main::r#2 main::$9 ] ) 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::$9 ] : 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::$9 ] 22: zp ZP_BYTE:2 [ main::r#2 main::r#1 ] 
Uplift Scope [] 

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

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
  // Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // 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
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call main 
  jsr main
  // [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
  jmp bend
  // @end
bend:
  // main
main: {
    // [4] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_FEATURE_ENABLE
    sta DTV_FEATURE
    // [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
    // [6] *((const byte*) DTV_BLITTER_SRCA_LO#0) ← <(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #<SRCA
    sta DTV_BLITTER_SRCA_LO
    // [7] *((const byte*) DTV_BLITTER_SRCA_MI#0) ← >(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCA
    sta DTV_BLITTER_SRCA_MI
    // [8] *((const byte*) DTV_BLITTER_SRCA_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_HI
    // [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_MOD_LO
    // [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_MOD_HI
    // [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_LIN_LO
    // [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word) $100 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCA_LIN_HI
    // [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte) $10 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_SRCA_STEP
    // [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
    // [15] *((const byte*) DTV_BLITTER_SRCB_MI#0) ← >(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCB
    sta DTV_BLITTER_SRCB_MI
    // [16] *((const byte*) DTV_BLITTER_SRCB_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_HI
    // [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_MOD_LO
    // [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_MOD_HI
    // [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_LIN_LO
    // [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word) $100 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCB_LIN_HI
    // [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_STEP
    // [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    // Step 0.0
    lda #0
    sta DTV_BLITTER_DEST_LO
    // [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0 -- _deref_pbuc1=vbuc2 
    lda #>SCREEN
    sta DTV_BLITTER_DEST_MI
    // [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_HI
    // [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_MOD_LO
    // [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_MOD_HI
    // [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_LIN_LO
    // [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word) $100 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_DEST_LIN_HI
    // [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte) $10 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_DEST_STEP
    // [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
    // [31] *((const byte*) DTV_BLITTER_LEN_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_LEN_HI
    // [32] *((const byte*) DTV_BLITTER_ALU#0) ← (const byte) DTV_BLIT_ADD#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_BLIT_ADD
    sta DTV_BLITTER_ALU
    // [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
    // [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
    // [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
    // [36] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
    // [36] phi (byte) main::r#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 
    ldx #0
    jmp b1
  // wait til blitter is ready
    // [36] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  b1_from_b1:
    jmp b1
    // [36] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
  b1_from_b2:
    // [36] phi (byte) main::r#2 = (byte) main::r#1 [phi:main::@2->main::@1#0] -- register_copy 
    jmp b1
    // main::@1
  b1:
    // [37] (byte~) main::$9 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 -- vbuaa=_deref_pbuc1_band_vbuc2 
    lda #DTV_BLIT_STATUS_BUSY
    and DTV_BLITTER_CONTROL2
    // [38] if((byte~) main::$9!=(byte) 0) goto main::@1 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b1_from_b1
    jmp b2
    // main::@2
  b2:
    // [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
    // [40] (byte) main::r#1 ← ++ (byte) main::r#2 -- vbuxx=_inc_vbuxx 
    inx
    // [41] if((byte) main::r#1!=(byte) 8) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne b1_from_b2
    jmp breturn
    // main::@return
  breturn:
    // [42] return 
    rts
}
  // File Data
  SRCA: .byte 'c', 'a', 'm', 'e', 'l', 'o', 't', '!', ' '
  SRCB: .byte $80

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
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
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Removing instruction lda #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_b2 with b1
Removing instruction b1_from_bbegin:
Removing instruction b1:
Removing instruction bend_from_b1:
Removing instruction b1_from_b2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction b1_from_main:
Removing instruction b2:
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 b1 in bne b1_from_b1
Succesful ASM optimization Pass5DoubleJumpElimination
Relabelling long label b1_from_b1 to b2
Succesful ASM optimization Pass5RelabelLongLabels
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction b2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination

FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(byte*) DTV_BLITTER_ALU
(const byte*) DTV_BLITTER_ALU#0 DTV_BLITTER_ALU = (byte*) 54078
(byte*) DTV_BLITTER_CONTROL
(const byte*) DTV_BLITTER_CONTROL#0 DTV_BLITTER_CONTROL = (byte*) 54074
(byte*) DTV_BLITTER_CONTROL2
(const byte*) DTV_BLITTER_CONTROL2#0 DTV_BLITTER_CONTROL2 = (byte*) 54079
(byte*) DTV_BLITTER_DEST_HI
(const byte*) DTV_BLITTER_DEST_HI#0 DTV_BLITTER_DEST_HI = (byte*) 54066
(byte*) DTV_BLITTER_DEST_LIN_HI
(const byte*) DTV_BLITTER_DEST_LIN_HI#0 DTV_BLITTER_DEST_LIN_HI = (byte*) 54070
(byte*) DTV_BLITTER_DEST_LIN_LO
(const byte*) DTV_BLITTER_DEST_LIN_LO#0 DTV_BLITTER_DEST_LIN_LO = (byte*) 54069
(byte*) DTV_BLITTER_DEST_LO
(const byte*) DTV_BLITTER_DEST_LO#0 DTV_BLITTER_DEST_LO = (byte*) 54064
(byte*) DTV_BLITTER_DEST_MI
(const byte*) DTV_BLITTER_DEST_MI#0 DTV_BLITTER_DEST_MI = (byte*) 54065
(byte*) DTV_BLITTER_DEST_MOD_HI
(const byte*) DTV_BLITTER_DEST_MOD_HI#0 DTV_BLITTER_DEST_MOD_HI = (byte*) 54068
(byte*) DTV_BLITTER_DEST_MOD_LO
(const byte*) DTV_BLITTER_DEST_MOD_LO#0 DTV_BLITTER_DEST_MOD_LO = (byte*) 54067
(byte*) DTV_BLITTER_DEST_STEP
(const byte*) DTV_BLITTER_DEST_STEP#0 DTV_BLITTER_DEST_STEP = (byte*) 54071
(byte*) DTV_BLITTER_LEN_HI
(const byte*) DTV_BLITTER_LEN_HI#0 DTV_BLITTER_LEN_HI = (byte*) 54073
(byte*) DTV_BLITTER_LEN_LO
(const byte*) DTV_BLITTER_LEN_LO#0 DTV_BLITTER_LEN_LO = (byte*) 54072
(byte*) DTV_BLITTER_SRCA_HI
(const byte*) DTV_BLITTER_SRCA_HI#0 DTV_BLITTER_SRCA_HI = (byte*) 54050
(byte*) DTV_BLITTER_SRCA_LIN_HI
(const byte*) DTV_BLITTER_SRCA_LIN_HI#0 DTV_BLITTER_SRCA_LIN_HI = (byte*) 54054
(byte*) DTV_BLITTER_SRCA_LIN_LO
(const byte*) DTV_BLITTER_SRCA_LIN_LO#0 DTV_BLITTER_SRCA_LIN_LO = (byte*) 54053
(byte*) DTV_BLITTER_SRCA_LO
(const byte*) DTV_BLITTER_SRCA_LO#0 DTV_BLITTER_SRCA_LO = (byte*) 54048
(byte*) DTV_BLITTER_SRCA_MI
(const byte*) DTV_BLITTER_SRCA_MI#0 DTV_BLITTER_SRCA_MI = (byte*) 54049
(byte*) DTV_BLITTER_SRCA_MOD_HI
(const byte*) DTV_BLITTER_SRCA_MOD_HI#0 DTV_BLITTER_SRCA_MOD_HI = (byte*) 54052
(byte*) DTV_BLITTER_SRCA_MOD_LO
(const byte*) DTV_BLITTER_SRCA_MOD_LO#0 DTV_BLITTER_SRCA_MOD_LO = (byte*) 54051
(byte*) DTV_BLITTER_SRCA_STEP
(const byte*) DTV_BLITTER_SRCA_STEP#0 DTV_BLITTER_SRCA_STEP = (byte*) 54055
(byte*) DTV_BLITTER_SRCB_HI
(const byte*) DTV_BLITTER_SRCB_HI#0 DTV_BLITTER_SRCB_HI = (byte*) 54058
(byte*) DTV_BLITTER_SRCB_LIN_HI
(const byte*) DTV_BLITTER_SRCB_LIN_HI#0 DTV_BLITTER_SRCB_LIN_HI = (byte*) 54062
(byte*) DTV_BLITTER_SRCB_LIN_LO
(const byte*) DTV_BLITTER_SRCB_LIN_LO#0 DTV_BLITTER_SRCB_LIN_LO = (byte*) 54061
(byte*) DTV_BLITTER_SRCB_LO
(const byte*) DTV_BLITTER_SRCB_LO#0 DTV_BLITTER_SRCB_LO = (byte*) 54056
(byte*) DTV_BLITTER_SRCB_MI
(const byte*) DTV_BLITTER_SRCB_MI#0 DTV_BLITTER_SRCB_MI = (byte*) 54057
(byte*) DTV_BLITTER_SRCB_MOD_HI
(const byte*) DTV_BLITTER_SRCB_MOD_HI#0 DTV_BLITTER_SRCB_MOD_HI = (byte*) 54060
(byte*) DTV_BLITTER_SRCB_MOD_LO
(const byte*) DTV_BLITTER_SRCB_MOD_LO#0 DTV_BLITTER_SRCB_MOD_LO = (byte*) 54059
(byte*) DTV_BLITTER_SRCB_STEP
(const byte*) DTV_BLITTER_SRCB_STEP#0 DTV_BLITTER_SRCB_STEP = (byte*) 54063
(byte*) DTV_BLITTER_TRANSPARANCY
(const byte*) DTV_BLITTER_TRANSPARANCY#0 DTV_BLITTER_TRANSPARANCY = (byte*) 54075
(byte) DTV_BLIT_ADD
(const byte) DTV_BLIT_ADD#0 DTV_BLIT_ADD = (byte) $30
(byte) DTV_BLIT_CLEAR_IRQ
(const byte) DTV_BLIT_CLEAR_IRQ#0 DTV_BLIT_CLEAR_IRQ = (byte) 1
(byte) DTV_BLIT_DEST_CONT
(const byte) DTV_BLIT_DEST_CONT#0 DTV_BLIT_DEST_CONT = (byte) 8
(byte) DTV_BLIT_DEST_FWD
(const byte) DTV_BLIT_DEST_FWD#0 DTV_BLIT_DEST_FWD = (byte) 8
(byte) DTV_BLIT_FORCE_START
(const byte) DTV_BLIT_FORCE_START#0 DTV_BLIT_FORCE_START = (byte) 1
(byte) DTV_BLIT_SRCA_FWD
(const byte) DTV_BLIT_SRCA_FWD#0 DTV_BLIT_SRCA_FWD = (byte) 2
(byte) DTV_BLIT_SRCB_FWD
(const byte) DTV_BLIT_SRCB_FWD#0 DTV_BLIT_SRCB_FWD = (byte) 4
(byte) DTV_BLIT_STATUS_BUSY
(const byte) DTV_BLIT_STATUS_BUSY#0 DTV_BLIT_STATUS_BUSY = (byte) 1
(byte) DTV_BLIT_TRANSPARANCY_NONE
(const byte) DTV_BLIT_TRANSPARANCY_NONE#0 DTV_BLIT_TRANSPARANCY_NONE = (byte) 0
(byte*) DTV_FEATURE
(const byte*) DTV_FEATURE#0 DTV_FEATURE = (byte*) 53311
(byte) DTV_FEATURE_ENABLE
(const byte) DTV_FEATURE_ENABLE#0 DTV_FEATURE_ENABLE = (byte) 1
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = (byte*) 1024
(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) 9
(byte[]) SRCB
(const byte[]) SRCB#0 SRCB = { (byte) $80 }
(void()) main()
(byte~) main::$9 reg byte a 202.0
(label) main::@1
(label) main::@2
(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::$9 ]


FINAL ASSEMBLER
Score: 1553

  // File Comments
  // Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
  // 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
  // @begin
  // [1] phi from @begin to @1 [phi:@begin->@1]
  // @1
  // [2] call main 
  // [3] phi from @1 to @end [phi:@1->@end]
  // @end
  // main
main: {
    // *DTV_FEATURE = DTV_FEATURE_ENABLE
    // [4] *((const byte*) DTV_FEATURE#0) ← (const byte) DTV_FEATURE_ENABLE#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_FEATURE_ENABLE
    sta DTV_FEATURE
    // *DTV_BLITTER_CONTROL2 = DTV_BLIT_CLEAR_IRQ
    // [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
    // *DTV_BLITTER_SRCA_LO = <SRCA
    // [6] *((const byte*) DTV_BLITTER_SRCA_LO#0) ← <(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #<SRCA
    sta DTV_BLITTER_SRCA_LO
    // *DTV_BLITTER_SRCA_MI = >SRCA
    // [7] *((const byte*) DTV_BLITTER_SRCA_MI#0) ← >(const byte[]) SRCA#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCA
    sta DTV_BLITTER_SRCA_MI
    // *DTV_BLITTER_SRCA_HI = 0
    // [8] *((const byte*) DTV_BLITTER_SRCA_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCA_HI
    // *DTV_BLITTER_SRCA_MOD_LO = 0
    // [9] *((const byte*) DTV_BLITTER_SRCA_MOD_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_SRCA_MOD_LO
    // *DTV_BLITTER_SRCA_MOD_HI = 0
    // [10] *((const byte*) DTV_BLITTER_SRCA_MOD_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_SRCA_MOD_HI
    // *DTV_BLITTER_SRCA_LIN_LO = <$100uw
    // [11] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_SRCA_LIN_LO
    // *DTV_BLITTER_SRCA_LIN_HI = >$100uw
    // [12] *((const byte*) DTV_BLITTER_SRCA_LIN_HI#0) ← >(word) $100 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCA_LIN_HI
    // *DTV_BLITTER_SRCA_STEP = $10
    // [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte) $10 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_SRCA_STEP
    // *DTV_BLITTER_SRCB_LO = <SRCB
    // [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
    // *DTV_BLITTER_SRCB_MI = >SRCB
    // [15] *((const byte*) DTV_BLITTER_SRCB_MI#0) ← >(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    lda #>SRCB
    sta DTV_BLITTER_SRCB_MI
    // *DTV_BLITTER_SRCB_HI = 0
    // [16] *((const byte*) DTV_BLITTER_SRCB_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_HI
    // *DTV_BLITTER_SRCB_MOD_LO = 0
    // [17] *((const byte*) DTV_BLITTER_SRCB_MOD_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_SRCB_MOD_LO
    // *DTV_BLITTER_SRCB_MOD_HI = 0
    // [18] *((const byte*) DTV_BLITTER_SRCB_MOD_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_SRCB_MOD_HI
    // *DTV_BLITTER_SRCB_LIN_LO = <$100uw
    // [19] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_SRCB_LIN_LO
    // *DTV_BLITTER_SRCB_LIN_HI = >$100uw
    // [20] *((const byte*) DTV_BLITTER_SRCB_LIN_HI#0) ← >(word) $100 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_SRCB_LIN_HI
    // *DTV_BLITTER_SRCB_STEP = $00
    // [21] *((const byte*) DTV_BLITTER_SRCB_STEP#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_SRCB_STEP
    // *DTV_BLITTER_DEST_LO = <SCREEN
    // [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    // Step 0.0
    sta DTV_BLITTER_DEST_LO
    // *DTV_BLITTER_DEST_MI = >SCREEN
    // [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0 -- _deref_pbuc1=vbuc2 
    lda #>SCREEN
    sta DTV_BLITTER_DEST_MI
    // *DTV_BLITTER_DEST_HI = 0
    // [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_HI
    // *DTV_BLITTER_DEST_MOD_LO = 0
    // [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_DEST_MOD_LO
    // *DTV_BLITTER_DEST_MOD_HI = 0
    // [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_DEST_MOD_HI
    // *DTV_BLITTER_DEST_LIN_LO = <$100uw
    // [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_BLITTER_DEST_LIN_LO
    // *DTV_BLITTER_DEST_LIN_HI = >$100uw
    // [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word) $100 -- _deref_pbuc1=vbuc2 
    lda #>$100
    sta DTV_BLITTER_DEST_LIN_HI
    // *DTV_BLITTER_DEST_STEP = $10
    // [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte) $10 -- _deref_pbuc1=vbuc2 
    lda #$10
    sta DTV_BLITTER_DEST_STEP
    // *DTV_BLITTER_LEN_LO = SRCA_LEN
    // [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
    // *DTV_BLITTER_LEN_HI = 0
    // [31] *((const byte*) DTV_BLITTER_LEN_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_LEN_HI
    // *DTV_BLITTER_ALU = DTV_BLIT_ADD
    // [32] *((const byte*) DTV_BLITTER_ALU#0) ← (const byte) DTV_BLIT_ADD#0 -- _deref_pbuc1=vbuc2 
    lda #DTV_BLIT_ADD
    sta DTV_BLITTER_ALU
    // *DTV_BLITTER_TRANSPARANCY = DTV_BLIT_TRANSPARANCY_NONE
    // [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
    // *DTV_BLITTER_CONTROL = DTV_BLIT_FORCE_START | DTV_BLIT_SRCA_FWD | DTV_BLIT_SRCB_FWD| DTV_BLIT_DEST_FWD
    // [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
    // *DTV_BLITTER_CONTROL2 = DTV_BLIT_DEST_CONT
    // [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
    // [36] phi from main to main::@1 [phi:main->main::@1]
    // [36] phi (byte) main::r#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 
    ldx #0
  // wait til blitter is ready
    // [36] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
    // [36] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
    // [36] phi (byte) main::r#2 = (byte) main::r#1 [phi:main::@2->main::@1#0] -- register_copy 
    // main::@1
  b1:
    // *DTV_BLITTER_CONTROL2 & DTV_BLIT_STATUS_BUSY
    // [37] (byte~) main::$9 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 -- vbuaa=_deref_pbuc1_band_vbuc2 
    lda #DTV_BLIT_STATUS_BUSY
    and DTV_BLITTER_CONTROL2
    // while((*DTV_BLITTER_CONTROL2 & DTV_BLIT_STATUS_BUSY)!=0)
    // [38] if((byte~) main::$9!=(byte) 0) goto main::@1 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b1
    // main::@2
    // *DTV_BLITTER_CONTROL = DTV_BLIT_FORCE_START | DTV_BLIT_SRCA_FWD | DTV_BLIT_SRCB_FWD| DTV_BLIT_DEST_FWD
    // [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
    // for( byte r: 0..7 )
    // [40] (byte) main::r#1 ← ++ (byte) main::r#2 -- vbuxx=_inc_vbuxx 
    inx
    // [41] if((byte) main::r#1!=(byte) 8) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #8
    bne b1
    // main::@return
    // }
    // [42] return 
    rts
}
  // File Data
  SRCA: .byte 'c', 'a', 'm', 'e', 'l', 'o', 't', '!', ' '
  SRCB: .byte $80

