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::@2

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 ← (const string) $0
  (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) 1
  (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 + (number) $28
  (byte*~) main::$5 ← (byte*~) main::$4 + (number) 5
  (byte~) main::$6 ← < (byte*~) main::$5
  *((byte*) DTV_BLITTER_DEST_LO#0) ← (byte~) main::$6
  (byte*~) main::$7 ← (byte*) SCREEN#0 + (number) $28
  (byte*~) main::$8 ← (byte*~) main::$7 + (number) 5
  (byte~) main::$9 ← > (byte*~) main::$8
  *((byte*) DTV_BLITTER_DEST_MI#0) ← (byte~) main::$9
  *((byte*) DTV_BLITTER_DEST_HI#0) ← (number) 0
  *((byte*) DTV_BLITTER_DEST_MOD_LO#0) ← <(word) $15
  *((byte*) DTV_BLITTER_DEST_MOD_HI#0) ← >(word) $15
  *((byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word) $13
  *((byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word) $13
  *((byte*) DTV_BLITTER_DEST_STEP#0) ← (number) $10
  *((byte*) DTV_BLITTER_LEN_LO#0) ← <(number) $14*(word) $a
  *((byte*) DTV_BLITTER_LEN_HI#0) ← >(number) $14*(word) $a
  *((byte*) DTV_BLITTER_ALU#0) ← (byte) DTV_BLIT_ADD#0
  *((byte*) DTV_BLITTER_TRANSPARANCY#0) ← (byte) DTV_BLIT_TRANSPARANCY_NONE#0
  (byte~) main::$10 ← (byte) DTV_BLIT_FORCE_START#0 | (byte) DTV_BLIT_SRCA_FWD#0
  (byte~) main::$11 ← (byte~) main::$10 | (byte) DTV_BLIT_SRCB_FWD#0
  (byte~) main::$12 ← (byte~) main::$11 | (byte) DTV_BLIT_DEST_FWD#0
  *((byte*) DTV_BLITTER_CONTROL#0) ← (byte~) main::$12
  *((byte*) DTV_BLITTER_CONTROL2#0) ← (byte) DTV_BLIT_DEST_CONT#0
  to:main::@1
main::@1: scope:[main]  from main main::@1
  (byte~) main::$13 ← *((byte*) DTV_BLITTER_CONTROL2#0) & (byte) DTV_BLIT_STATUS_BUSY#0
  (bool~) main::$14 ← (byte~) main::$13 != (number) 0
  if((bool~) main::$14) goto main::@1
  to:main::@return
main::@return: scope:[main]  from main::@1
  return 
  to:@return
@6: scope:[]  from @5
  call main 
  to:@7
@7: scope:[]  from @6
  to:@end
@end: scope:[]  from @7

SYMBOL TABLE SSA
(const string) $0 = (string) "camelot rules!@"
(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[]) SRCB
(byte[]) SRCB#0
(void()) main()
(byte~) main::$0
(byte~) main::$1
(byte~) 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::@1
(label) main::@return

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) 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) 1 in *((byte*) DTV_BLITTER_SRCA_STEP#0) ← (number) 1
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) $28 in (byte*~) main::$4 ← (byte*) SCREEN#0 + (number) $28
Adding number conversion cast (unumber) 5 in (byte*~) main::$5 ← (byte*~) main::$4 + (number) 5
Adding number conversion cast (unumber) $28 in (byte*~) main::$7 ← (byte*) SCREEN#0 + (number) $28
Adding number conversion cast (unumber) 5 in (byte*~) main::$8 ← (byte*~) main::$7 + (number) 5
Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_DEST_HI#0) ← (number) 0
Adding number conversion cast (unumber) $10 in *((byte*) DTV_BLITTER_DEST_STEP#0) ← (number) $10
Adding number conversion cast (unumber) <$14*$a in *((byte*) DTV_BLITTER_LEN_LO#0) ← <(number) $14*(word) $a
Adding number conversion cast (unumber) $14 in *((byte*) DTV_BLITTER_LEN_LO#0) ← ((unumber)) <(number) $14*(word) $a
Adding number conversion cast (unumber) >$14*$a in *((byte*) DTV_BLITTER_LEN_HI#0) ← >(number) $14*(word) $a
Adding number conversion cast (unumber) $14 in *((byte*) DTV_BLITTER_LEN_HI#0) ← ((unumber)) >(number) $14*(word) $a
Adding number conversion cast (unumber) 0 in (bool~) main::$14 ← (byte~) main::$13 != (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*) 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) 1
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_STEP#0) ← (unumber)(number) $10
Inlining cast *((byte*) DTV_BLITTER_LEN_LO#0) ← (unumber)<(unumber)(number) $14*(word) $a
Inlining cast *((byte*) DTV_BLITTER_LEN_HI#0) ← (unumber)>(unumber)(number) $14*(word) $a
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 $80
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 1
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast $28
Simplifying constant integer cast 5
Simplifying constant integer cast $28
Simplifying constant integer cast 5
Simplifying constant integer cast 0
Simplifying constant integer cast $10
Simplifying constant integer cast <(unumber)(number) $14*(word) $a
Simplifying constant integer cast $14
Simplifying constant integer cast >(unumber)(number) $14*(word) $a
Simplifying constant integer cast $14
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) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 1
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) $28
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $10
Finalized unsigned number type (byte) $14
Finalized unsigned number type (byte) $14
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Simple Condition (bool~) main::$14 [91] if((byte~) main::$13!=(byte) 0) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [43] (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 = $0
Constant (const byte[]) SRCB#0 = { $80 }
Successful SSA optimization Pass2ConstantIdentification
Simplifying constant evaluating to zero <(word) $100 in [53] *((const byte*) DTV_BLITTER_SRCA_LIN_LO#0) ← <(word) $100
Simplifying constant evaluating to zero <(word) $100 in [63] *((const byte*) DTV_BLITTER_SRCB_LIN_LO#0) ← <(word) $100
Simplifying constant evaluating to zero >(word) $15 in [76] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← >(word) $15
Simplifying constant evaluating to zero >(word) $13 in [78] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← >(word) $13
Simplifying constant evaluating to zero >(byte) $14*(word) $a in [81] *((const byte*) DTV_BLITTER_LEN_HI#0) ← >(byte) $14*(word) $a
Successful SSA optimization PassNSimplifyConstantZero
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 + (byte) $28
Constant right-side identified [26] (byte*~) main::$7 ← (const byte*) SCREEN#0 + (byte) $28
Constant right-side identified [40] (byte~) main::$10 ← (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+$28
Constant (const byte*) main::$7 = SCREEN#0+$28
Constant (const byte) main::$10 = DTV_BLIT_FORCE_START#0|DTV_BLIT_SRCA_FWD#0
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [18] (byte*~) main::$5 ← (const byte*) main::$4 + (byte) 5
Constant right-side identified [21] (byte*~) main::$8 ← (const byte*) main::$7 + (byte) 5
Constant right-side identified [34] (byte~) main::$11 ← (const byte) main::$10 | (const byte) DTV_BLIT_SRCB_FWD#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) main::$5 = main::$4+5
Constant (const byte*) main::$8 = main::$7+5
Constant (const byte) main::$11 = main::$10|DTV_BLIT_SRCB_FWD#0
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [18] (byte~) main::$6 ← < (const byte*) main::$5
Constant right-side identified [20] (byte~) main::$9 ← > (const byte*) main::$8
Constant right-side identified [32] (byte~) main::$12 ← (const byte) main::$11 | (const byte) DTV_BLIT_DEST_FWD#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) main::$6 = <main::$5
Constant (const byte) main::$9 = >main::$8
Constant (const byte) main::$12 = main::$11|DTV_BLIT_DEST_FWD#0
Successful SSA optimization Pass2ConstantIdentification
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|(const byte) DTV_BLIT_DEST_FWD#0
Constant inlined $0 = (const byte[]) SRCA#0
Constant inlined main::$10 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0
Constant inlined main::$11 = (const byte) DTV_BLIT_FORCE_START#0|(const byte) DTV_BLIT_SRCA_FWD#0|(const byte) DTV_BLIT_SRCB_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+(byte) $28+(byte) 5
Constant inlined main::$6 = <(const byte*) SCREEN#0+(byte) $28+(byte) 5
Constant inlined main::$3 = >(const byte[]) SRCB#0
Constant inlined main::$4 = (const byte*) SCREEN#0+(byte) $28
Constant inlined main::$9 = >(const byte*) SCREEN#0+(byte) $28+(byte) 5
Constant inlined main::$7 = (const byte*) SCREEN#0+(byte) $28
Constant inlined main::$8 = (const byte*) SCREEN#0+(byte) $28+(byte) 5
Successful SSA optimization Pass2ConstantInlining
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 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @7
Renumbering block @6 to @1
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) 1
  [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) ← <(const byte*) SCREEN#0+(byte) $28+(byte) 5
  [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0+(byte) $28+(byte) 5
  [24] *((const byte*) DTV_BLITTER_DEST_HI#0) ← (byte) 0
  [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← <(word) $15
  [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte) 0
  [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word) $13
  [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← (byte) 0
  [29] *((const byte*) DTV_BLITTER_DEST_STEP#0) ← (byte) $10
  [30] *((const byte*) DTV_BLITTER_LEN_LO#0) ← <(byte) $14*(word) $a
  [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
  [36] (byte~) main::$13 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0
  [37] if((byte~) main::$13!=(byte) 0) goto main::@1
  to:main::@return
main::@return: scope:[main]  from main::@1
  [38] 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[]) SRCB
(void()) main()
(byte~) main::$13 22.0

Initial phi equivalence classes
Added variable main::$13 to zero page equivalence class [ main::$13 ]
Complete equivalence classes
[ main::$13 ]
Allocated zp ZP_BYTE:2 [ main::$13 ]

INITIAL ASM
  // File Comments
// Fill a box on the screen using the blitter
  // 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
  // @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 _13 = 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) 1 -- _deref_pbuc1=vbuc2 
    lda #1
    sta DTV_BLITTER_SRCA_STEP
    // [14] *((const byte*) DTV_BLITTER_SRCB_LO#0) ← <(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    // Step 0.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) ← <(const byte*) SCREEN#0+(byte) $28+(byte) 5 -- _deref_pbuc1=vbuc2 
    // Step 0.0
    lda #<SCREEN+$28+5
    sta DTV_BLITTER_DEST_LO
    // [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0+(byte) $28+(byte) 5 -- _deref_pbuc1=vbuc2 
    lda #>SCREEN+$28+5
    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) ← <(word) $15 -- _deref_pbuc1=vbuc2 
    lda #<$15
    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) ← <(word) $13 -- _deref_pbuc1=vbuc2 
    lda #<$13
    sta DTV_BLITTER_DEST_LIN_LO
    // [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    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) ← <(byte) $14*(word) $a -- _deref_pbuc1=vbuc2 
    // Step 1.0
    lda #<$14*$a
    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
    jmp b1
  // wait til blitter is ready
    // main::@1
  b1:
    // [36] (byte~) main::$13 ← *((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 _13
    // [37] if((byte~) main::$13!=(byte) 0) goto main::@1 -- vbuz1_neq_0_then_la1 
    lda _13
    cmp #0
    bne b1
    jmp breturn
    // main::@return
  breturn:
    // [38] return 
    rts
}
  // File Data
  SRCA: .text "camelot rules!@"
  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) 1 [ ] ( 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) ← <(const byte*) SCREEN#0+(byte) $28+(byte) 5 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0+(byte) $28+(byte) 5 [ ] ( 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) ← <(word) $15 [ ] ( 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) ← <(word) $13 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← (byte) 0 [ ] ( 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) ← <(byte) $14*(word) $a [ ] ( 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 [36] (byte~) main::$13 ← *((const byte*) DTV_BLITTER_CONTROL2#0) & (const byte) DTV_BLIT_STATUS_BUSY#0 [ main::$13 ] ( main:2 [ main::$13 ] ) always clobbers reg byte a 
Potential registers zp ZP_BYTE:2 [ main::$13 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [main] 22: zp ZP_BYTE:2 [ main::$13 ] 
Uplift Scope [] 

Uplifting [main] best 348 combination reg byte a [ main::$13 ] 
Uplifting [] best 348 combination 

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// Fill a box on the screen using the blitter
  // 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
  // @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) 1 -- _deref_pbuc1=vbuc2 
    lda #1
    sta DTV_BLITTER_SRCA_STEP
    // [14] *((const byte*) DTV_BLITTER_SRCB_LO#0) ← <(const byte[]) SRCB#0 -- _deref_pbuc1=vbuc2 
    // Step 0.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) ← <(const byte*) SCREEN#0+(byte) $28+(byte) 5 -- _deref_pbuc1=vbuc2 
    // Step 0.0
    lda #<SCREEN+$28+5
    sta DTV_BLITTER_DEST_LO
    // [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0+(byte) $28+(byte) 5 -- _deref_pbuc1=vbuc2 
    lda #>SCREEN+$28+5
    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) ← <(word) $15 -- _deref_pbuc1=vbuc2 
    lda #<$15
    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) ← <(word) $13 -- _deref_pbuc1=vbuc2 
    lda #<$13
    sta DTV_BLITTER_DEST_LIN_LO
    // [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    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) ← <(byte) $14*(word) $a -- _deref_pbuc1=vbuc2 
    // Step 1.0
    lda #<$14*$a
    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
    jmp b1
  // wait til blitter is ready
    // main::@1
  b1:
    // [36] (byte~) main::$13 ← *((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
    // [37] if((byte~) main::$13!=(byte) 0) goto main::@1 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b1
    jmp breturn
    // main::@return
  breturn:
    // [38] return 
    rts
}
  // File Data
  SRCA: .text "camelot rules!@"
  SRCB: .byte $80

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp b1
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
Removing instruction b1_from_bbegin:
Removing instruction b1:
Removing instruction bend_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination

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 = (string) "camelot rules!@"
(byte[]) SRCB
(const byte[]) SRCB#0 SRCB = { (byte) $80 }
(void()) main()
(byte~) main::$13 reg byte a 22.0
(label) main::@1
(label) main::@return

reg byte a [ main::$13 ]


FINAL ASSEMBLER
Score: 291

  // File Comments
// Fill a box on the screen using the blitter
  // 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
  // @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 = 01
    // [13] *((const byte*) DTV_BLITTER_SRCA_STEP#0) ← (byte) 1 -- _deref_pbuc1=vbuc2 
    lda #1
    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 0.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+40+5
    // [22] *((const byte*) DTV_BLITTER_DEST_LO#0) ← <(const byte*) SCREEN#0+(byte) $28+(byte) 5 -- _deref_pbuc1=vbuc2 
    // Step 0.0
    lda #<SCREEN+$28+5
    sta DTV_BLITTER_DEST_LO
    // *DTV_BLITTER_DEST_MI = >SCREEN+40+5
    // [23] *((const byte*) DTV_BLITTER_DEST_MI#0) ← >(const byte*) SCREEN#0+(byte) $28+(byte) 5 -- _deref_pbuc1=vbuc2 
    lda #>SCREEN+$28+5
    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 = <21uw
    // [25] *((const byte*) DTV_BLITTER_DEST_MOD_LO#0) ← <(word) $15 -- _deref_pbuc1=vbuc2 
    lda #<$15
    sta DTV_BLITTER_DEST_MOD_LO
    // *DTV_BLITTER_DEST_MOD_HI = >21uw
    // [26] *((const byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_BLITTER_DEST_MOD_HI
    // *DTV_BLITTER_DEST_LIN_LO = <19uw
    // [27] *((const byte*) DTV_BLITTER_DEST_LIN_LO#0) ← <(word) $13 -- _deref_pbuc1=vbuc2 
    lda #<$13
    sta DTV_BLITTER_DEST_LIN_LO
    // *DTV_BLITTER_DEST_LIN_HI = >19uw
    // [28] *((const byte*) DTV_BLITTER_DEST_LIN_HI#0) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    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 = <20*10uw
    // [30] *((const byte*) DTV_BLITTER_LEN_LO#0) ← <(byte) $14*(word) $a -- _deref_pbuc1=vbuc2 
    // Step 1.0
    lda #<$14*$a
    sta DTV_BLITTER_LEN_LO
    // *DTV_BLITTER_LEN_HI = >20*10uw
    // [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
  // wait til blitter is ready
    // main::@1
  b1:
    // *DTV_BLITTER_CONTROL2 & DTV_BLIT_STATUS_BUSY
    // [36] (byte~) main::$13 ← *((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)
    // [37] if((byte~) main::$13!=(byte) 0) goto main::@1 -- vbuaa_neq_0_then_la1 
    cmp #0
    bne b1
    // main::@return
    // }
    // [38] return 
    rts
}
  // File Data
  SRCA: .text "camelot rules!@"
  SRCB: .byte $80

