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) @4
Culled Empty Block (label) @5
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@15
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@16
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@14
Culled Empty Block (label) @6

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@7

(void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx)
dtvSetCpuBankSegment1: scope:[dtvSetCpuBankSegment1]  from gfx_init_chunky gfx_init_chunky::@4 gfx_init_chunky::@6
  (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 ← phi( gfx_init_chunky/(byte) dtvSetCpuBankSegment1::cpuBankIdx#0 gfx_init_chunky::@4/(byte) dtvSetCpuBankSegment1::cpuBankIdx#1 gfx_init_chunky::@6/(byte) dtvSetCpuBankSegment1::cpuBankIdx#2 )
  *((const byte*) dtvSetCpuBankSegment1::cpuBank) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3
  asm { .byte$32,$dd lda$ff .byte$32,$00  }
  to:dtvSetCpuBankSegment1::@return
dtvSetCpuBankSegment1::@return: scope:[dtvSetCpuBankSegment1]  from dtvSetCpuBankSegment1
  return 
  to:@return

(void()) main()
main: scope:[main]  from @7
  asm { sei  }
  *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK
  *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO
  call gfx_init_chunky 
  to:main::@17
main::@17: scope:[main]  from main
  *((const byte*) DTV_FEATURE) ← (const byte) DTV_FEATURE_ENABLE
  *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_COLORRAM_OFF|(const byte) DTV_CHUNKY|(const byte) DTV_BADLINE_OFF
  *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3
  *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL
  *((const byte*) DTV_PLANEB_START_LO) ← <(const byte*) CHUNKY
  *((const byte*) DTV_PLANEB_START_MI) ← >(const byte*) CHUNKY
  *((const byte*) DTV_PLANEB_START_HI) ← (number) 0
  *((const byte*) DTV_PLANEB_STEP) ← (number) 8
  *((const byte*) DTV_PLANEB_MODULO_LO) ← (number) 0
  *((const byte*) DTV_PLANEB_MODULO_HI) ← (number) 0
  *((const byte*) CIA2_PORT_A_DDR) ← (number) 3
  *((const byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const byte*) CHUNKY/(number) $4000
  *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) CHUNKY&(number) $3fff/(number) $40|>(word)(const byte*) CHUNKY&(number) $3fff/(number) 4
  (byte) main::j#0 ← (byte) 0
  to:main::@1
main::@1: scope:[main]  from main::@1 main::@17
  (byte) main::j#2 ← phi( main::@1/(byte) main::j#1 main::@17/(byte) main::j#0 )
  *((const byte*) DTV_PALETTE + (byte) main::j#2) ← (byte) main::j#2
  (byte) main::j#1 ← (byte) main::j#2 + rangenext(0,$f)
  (bool~) main::$1 ← (byte) main::j#1 != rangelast(0,$f)
  if((bool~) main::$1) goto main::@1
  to:main::@3
main::@3: scope:[main]  from main::@1 main::@12
  if(true) goto main::@4
  to:main::@return
main::@4: scope:[main]  from main::@3
  asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize  }
  *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3
  *((const byte*) BORDERCOL) ← (number) 0
  (byte) main::rst#0 ← (byte) $42
  to:main::@6
main::@6: scope:[main]  from main::@4 main::@6
  (byte) main::rst#2 ← phi( main::@4/(byte) main::rst#0 main::@6/(byte) main::rst#2 )
  (bool~) main::$2 ← *((const byte*) RASTER) != (byte) main::rst#2
  if((bool~) main::$2) goto main::@6
  to:main::@8
main::@8: scope:[main]  from main::@6
  asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop  }
  to:main::@12
main::@12: scope:[main]  from main::@12 main::@8
  (byte) main::rst#1 ← *((const byte*) RASTER)
  (number~) main::$3 ← (byte) main::rst#1 & (number) 7
  (number~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (number~) main::$3
  *((const byte*) VIC_CONTROL) ← (number~) main::$4
  (number~) main::$5 ← (byte) main::rst#1 * (number) $10
  *((const byte*) BORDERCOL) ← (number~) main::$5
  asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop  }
  (bool~) main::$6 ← (byte) main::rst#1 != (number) $f2
  if((bool~) main::$6) goto main::@12
  to:main::@3
main::@return: scope:[main]  from main::@3
  return 
  to:@return

(void()) gfx_init_chunky()
gfx_init_chunky: scope:[gfx_init_chunky]  from main
  (byte) gfx_init_chunky::gfxbCpuBank#0 ← (byte)(const byte*) CHUNKY/(number) $4000
  (byte) dtvSetCpuBankSegment1::cpuBankIdx#0 ← (byte) gfx_init_chunky::gfxbCpuBank#0
  call dtvSetCpuBankSegment1 
  to:gfx_init_chunky::@7
gfx_init_chunky::@7: scope:[gfx_init_chunky]  from gfx_init_chunky
  (byte) gfx_init_chunky::gfxbCpuBank#3 ← phi( gfx_init_chunky/(byte) gfx_init_chunky::gfxbCpuBank#0 )
  (byte) gfx_init_chunky::gfxbCpuBank#1 ← ++ (byte) gfx_init_chunky::gfxbCpuBank#3
  (byte*) gfx_init_chunky::gfxb#0 ← (byte*)(number) $4000
  (byte) gfx_init_chunky::y#0 ← (byte) 0
  to:gfx_init_chunky::@1
gfx_init_chunky::@1: scope:[gfx_init_chunky]  from gfx_init_chunky::@5 gfx_init_chunky::@7
  (byte) gfx_init_chunky::gfxbCpuBank#7 ← phi( gfx_init_chunky::@5/(byte) gfx_init_chunky::gfxbCpuBank#9 gfx_init_chunky::@7/(byte) gfx_init_chunky::gfxbCpuBank#1 )
  (byte) gfx_init_chunky::y#6 ← phi( gfx_init_chunky::@5/(byte) gfx_init_chunky::y#1 gfx_init_chunky::@7/(byte) gfx_init_chunky::y#0 )
  (byte*) gfx_init_chunky::gfxb#5 ← phi( gfx_init_chunky::@5/(byte*) gfx_init_chunky::gfxb#6 gfx_init_chunky::@7/(byte*) gfx_init_chunky::gfxb#0 )
  (word) gfx_init_chunky::x#0 ← (word) 0
  to:gfx_init_chunky::@2
gfx_init_chunky::@2: scope:[gfx_init_chunky]  from gfx_init_chunky::@1 gfx_init_chunky::@3
  (byte) gfx_init_chunky::gfxbCpuBank#6 ← phi( gfx_init_chunky::@1/(byte) gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::@3/(byte) gfx_init_chunky::gfxbCpuBank#8 )
  (byte) gfx_init_chunky::y#4 ← phi( gfx_init_chunky::@1/(byte) gfx_init_chunky::y#6 gfx_init_chunky::@3/(byte) gfx_init_chunky::y#2 )
  (word) gfx_init_chunky::x#3 ← phi( gfx_init_chunky::@1/(word) gfx_init_chunky::x#0 gfx_init_chunky::@3/(word) gfx_init_chunky::x#1 )
  (byte*) gfx_init_chunky::gfxb#3 ← phi( gfx_init_chunky::@1/(byte*) gfx_init_chunky::gfxb#5 gfx_init_chunky::@3/(byte*) gfx_init_chunky::gfxb#1 )
  (bool~) gfx_init_chunky::$2 ← (byte*) gfx_init_chunky::gfxb#3 == (number) $8000
  (bool~) gfx_init_chunky::$3 ← ! (bool~) gfx_init_chunky::$2
  if((bool~) gfx_init_chunky::$3) goto gfx_init_chunky::@3
  to:gfx_init_chunky::@4
gfx_init_chunky::@3: scope:[gfx_init_chunky]  from gfx_init_chunky::@2 gfx_init_chunky::@8
  (byte) gfx_init_chunky::gfxbCpuBank#8 ← phi( gfx_init_chunky::@2/(byte) gfx_init_chunky::gfxbCpuBank#6 gfx_init_chunky::@8/(byte) gfx_init_chunky::gfxbCpuBank#2 )
  (byte*) gfx_init_chunky::gfxb#4 ← phi( gfx_init_chunky::@2/(byte*) gfx_init_chunky::gfxb#3 gfx_init_chunky::@8/(byte*) gfx_init_chunky::gfxb#2 )
  (byte) gfx_init_chunky::y#2 ← phi( gfx_init_chunky::@2/(byte) gfx_init_chunky::y#4 gfx_init_chunky::@8/(byte) gfx_init_chunky::y#5 )
  (word) gfx_init_chunky::x#2 ← phi( gfx_init_chunky::@2/(word) gfx_init_chunky::x#3 gfx_init_chunky::@8/(word) gfx_init_chunky::x#4 )
  (word~) gfx_init_chunky::$5 ← (word) gfx_init_chunky::x#2 + (byte) gfx_init_chunky::y#2
  (byte~) gfx_init_chunky::$6 ← ((byte)) (word~) gfx_init_chunky::$5
  (byte) gfx_init_chunky::c#0 ← (byte~) gfx_init_chunky::$6
  *((byte*) gfx_init_chunky::gfxb#4) ← (byte) gfx_init_chunky::c#0
  (byte*) gfx_init_chunky::gfxb#1 ← ++ (byte*) gfx_init_chunky::gfxb#4
  (word) gfx_init_chunky::x#1 ← (word) gfx_init_chunky::x#2 + rangenext(0,$13f)
  (bool~) gfx_init_chunky::$7 ← (word) gfx_init_chunky::x#1 != rangelast(0,$13f)
  if((bool~) gfx_init_chunky::$7) goto gfx_init_chunky::@2
  to:gfx_init_chunky::@5
gfx_init_chunky::@4: scope:[gfx_init_chunky]  from gfx_init_chunky::@2
  (byte) gfx_init_chunky::y#7 ← phi( gfx_init_chunky::@2/(byte) gfx_init_chunky::y#4 )
  (word) gfx_init_chunky::x#5 ← phi( gfx_init_chunky::@2/(word) gfx_init_chunky::x#3 )
  (byte) gfx_init_chunky::gfxbCpuBank#4 ← phi( gfx_init_chunky::@2/(byte) gfx_init_chunky::gfxbCpuBank#6 )
  (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 ← (byte) gfx_init_chunky::gfxbCpuBank#4
  call dtvSetCpuBankSegment1 
  to:gfx_init_chunky::@8
gfx_init_chunky::@8: scope:[gfx_init_chunky]  from gfx_init_chunky::@4
  (byte) gfx_init_chunky::y#5 ← phi( gfx_init_chunky::@4/(byte) gfx_init_chunky::y#7 )
  (word) gfx_init_chunky::x#4 ← phi( gfx_init_chunky::@4/(word) gfx_init_chunky::x#5 )
  (byte) gfx_init_chunky::gfxbCpuBank#5 ← phi( gfx_init_chunky::@4/(byte) gfx_init_chunky::gfxbCpuBank#4 )
  (byte) gfx_init_chunky::gfxbCpuBank#2 ← ++ (byte) gfx_init_chunky::gfxbCpuBank#5
  (byte*) gfx_init_chunky::gfxb#2 ← ((byte*)) (number) $4000
  to:gfx_init_chunky::@3
gfx_init_chunky::@5: scope:[gfx_init_chunky]  from gfx_init_chunky::@3
  (byte) gfx_init_chunky::gfxbCpuBank#9 ← phi( gfx_init_chunky::@3/(byte) gfx_init_chunky::gfxbCpuBank#8 )
  (byte*) gfx_init_chunky::gfxb#6 ← phi( gfx_init_chunky::@3/(byte*) gfx_init_chunky::gfxb#1 )
  (byte) gfx_init_chunky::y#3 ← phi( gfx_init_chunky::@3/(byte) gfx_init_chunky::y#2 )
  (byte) gfx_init_chunky::y#1 ← (byte) gfx_init_chunky::y#3 + rangenext(0,$32)
  (bool~) gfx_init_chunky::$8 ← (byte) gfx_init_chunky::y#1 != rangelast(0,$32)
  if((bool~) gfx_init_chunky::$8) goto gfx_init_chunky::@1
  to:gfx_init_chunky::@6
gfx_init_chunky::@6: scope:[gfx_init_chunky]  from gfx_init_chunky::@5
  (byte) dtvSetCpuBankSegment1::cpuBankIdx#2 ← (byte)(number) $4000/(number) $4000
  call dtvSetCpuBankSegment1 
  to:gfx_init_chunky::@9
gfx_init_chunky::@9: scope:[gfx_init_chunky]  from gfx_init_chunky::@6
  to:gfx_init_chunky::@return
gfx_init_chunky::@return: scope:[gfx_init_chunky]  from gfx_init_chunky::@9
  return 
  to:@return
@7: scope:[]  from @begin
  call main 
  to:@8
@8: scope:[]  from @7
  to:@end
@end: scope:[]  from @8

SYMBOL TABLE SSA
(label) @7
(label) @8
(label) @begin
(label) @end
(const byte*) BORDERCOL = (byte*)(number) $d020
(const byte*) CHUNKY = (byte*)(number) $8000
(const byte*) CIA2_PORT_A = (byte*)(number) $dd00
(const byte*) CIA2_PORT_A_DDR = (byte*)(number) $dd02
(const byte) DTV_BADLINE_OFF = (byte) $20
(const byte) DTV_CHUNKY = (byte) $40
(const byte) DTV_COLORRAM_OFF = (byte) $10
(const byte*) DTV_CONTROL = (byte*)(number) $d03c
(const byte*) DTV_FEATURE = (byte*)(number) $d03f
(const byte) DTV_FEATURE_ENABLE = (byte) 1
(const byte) DTV_HIGHCOLOR = (byte) 4
(const byte) DTV_LINEAR = (byte) 1
(const byte*) DTV_PALETTE = (byte*)(number) $d200
(const byte*) DTV_PLANEB_MODULO_HI = (byte*)(number) $d048
(const byte*) DTV_PLANEB_MODULO_LO = (byte*)(number) $d047
(const byte*) DTV_PLANEB_START_HI = (byte*)(number) $d04b
(const byte*) DTV_PLANEB_START_LO = (byte*)(number) $d049
(const byte*) DTV_PLANEB_START_MI = (byte*)(number) $d04a
(const byte*) DTV_PLANEB_STEP = (byte*)(number) $d04c
(const byte*) PROCPORT = (byte*)(number) 1
(const byte*) PROCPORT_DDR = (byte*)(number) 0
(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7
(const byte) PROCPORT_RAM_IO = (byte) 5
(const byte*) RASTER = (byte*)(number) $d012
(const byte*) VIC_CONTROL = (byte*)(number) $d011
(const byte*) VIC_CONTROL2 = (byte*)(number) $d016
(const byte) VIC_CSEL = (byte) 8
(const byte) VIC_DEN = (byte) $10
(const byte) VIC_ECM = (byte) $40
(const byte) VIC_MCM = (byte) $10
(const byte*) VIC_MEMORY = (byte*)(number) $d018
(const byte) VIC_RSEL = (byte) 8
(void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx)
(label) dtvSetCpuBankSegment1::@return
(const byte*) dtvSetCpuBankSegment1::cpuBank = (byte*)(number) $ff
(byte) dtvSetCpuBankSegment1::cpuBankIdx
(byte) dtvSetCpuBankSegment1::cpuBankIdx#0
(byte) dtvSetCpuBankSegment1::cpuBankIdx#1
(byte) dtvSetCpuBankSegment1::cpuBankIdx#2
(byte) dtvSetCpuBankSegment1::cpuBankIdx#3
(void()) gfx_init_chunky()
(bool~) gfx_init_chunky::$2
(bool~) gfx_init_chunky::$3
(word~) gfx_init_chunky::$5
(byte~) gfx_init_chunky::$6
(bool~) gfx_init_chunky::$7
(bool~) gfx_init_chunky::$8
(label) gfx_init_chunky::@1
(label) gfx_init_chunky::@2
(label) gfx_init_chunky::@3
(label) gfx_init_chunky::@4
(label) gfx_init_chunky::@5
(label) gfx_init_chunky::@6
(label) gfx_init_chunky::@7
(label) gfx_init_chunky::@8
(label) gfx_init_chunky::@9
(label) gfx_init_chunky::@return
(byte) gfx_init_chunky::c
(byte) gfx_init_chunky::c#0
(byte*) gfx_init_chunky::gfxb
(byte*) gfx_init_chunky::gfxb#0
(byte*) gfx_init_chunky::gfxb#1
(byte*) gfx_init_chunky::gfxb#2
(byte*) gfx_init_chunky::gfxb#3
(byte*) gfx_init_chunky::gfxb#4
(byte*) gfx_init_chunky::gfxb#5
(byte*) gfx_init_chunky::gfxb#6
(byte) gfx_init_chunky::gfxbCpuBank
(byte) gfx_init_chunky::gfxbCpuBank#0
(byte) gfx_init_chunky::gfxbCpuBank#1
(byte) gfx_init_chunky::gfxbCpuBank#2
(byte) gfx_init_chunky::gfxbCpuBank#3
(byte) gfx_init_chunky::gfxbCpuBank#4
(byte) gfx_init_chunky::gfxbCpuBank#5
(byte) gfx_init_chunky::gfxbCpuBank#6
(byte) gfx_init_chunky::gfxbCpuBank#7
(byte) gfx_init_chunky::gfxbCpuBank#8
(byte) gfx_init_chunky::gfxbCpuBank#9
(word) gfx_init_chunky::x
(word) gfx_init_chunky::x#0
(word) gfx_init_chunky::x#1
(word) gfx_init_chunky::x#2
(word) gfx_init_chunky::x#3
(word) gfx_init_chunky::x#4
(word) gfx_init_chunky::x#5
(byte) gfx_init_chunky::y
(byte) gfx_init_chunky::y#0
(byte) gfx_init_chunky::y#1
(byte) gfx_init_chunky::y#2
(byte) gfx_init_chunky::y#3
(byte) gfx_init_chunky::y#4
(byte) gfx_init_chunky::y#5
(byte) gfx_init_chunky::y#6
(byte) gfx_init_chunky::y#7
(void()) main()
(bool~) main::$1
(bool~) main::$2
(number~) main::$3
(number~) main::$4
(number~) main::$5
(bool~) main::$6
(label) main::@1
(label) main::@12
(label) main::@17
(label) main::@3
(label) main::@4
(label) main::@6
(label) main::@8
(label) main::@return
(byte) main::j
(byte) main::j#0
(byte) main::j#1
(byte) main::j#2
(byte) main::rst
(byte) main::rst#0
(byte) main::rst#1
(byte) main::rst#2

Adding number conversion cast (unumber) VIC_DEN|VIC_ECM|VIC_RSEL|3 in *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3
Adding number conversion cast (unumber) 3 in *((const byte*) VIC_CONTROL) ← ((unumber)) (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3
Adding number conversion cast (unumber) 0 in *((const byte*) DTV_PLANEB_START_HI) ← (number) 0
Adding number conversion cast (unumber) 8 in *((const byte*) DTV_PLANEB_STEP) ← (number) 8
Adding number conversion cast (unumber) 0 in *((const byte*) DTV_PLANEB_MODULO_LO) ← (number) 0
Adding number conversion cast (unumber) 0 in *((const byte*) DTV_PLANEB_MODULO_HI) ← (number) 0
Adding number conversion cast (unumber) 3 in *((const byte*) CIA2_PORT_A_DDR) ← (number) 3
Adding number conversion cast (unumber) 3^(byte)(word)CHUNKY/$4000 in *((const byte*) CIA2_PORT_A) ← (number) 3^(byte)(word)(const byte*) CHUNKY/(number) $4000
Adding number conversion cast (unumber) 3 in *((const byte*) CIA2_PORT_A) ← ((unumber)) (number) 3^(byte)(word)(const byte*) CHUNKY/(number) $4000
Adding number conversion cast (unumber) $4000 in *((const byte*) CIA2_PORT_A) ← ((unumber)) (unumber)(number) 3^(byte)(word)(const byte*) CHUNKY/(number) $4000
Adding number conversion cast (unumber) (byte)(word)CHUNKY&$3fff/$40|>(word)CHUNKY&$3fff/4 in *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) CHUNKY&(number) $3fff/(number) $40|>(word)(const byte*) CHUNKY&(number) $3fff/(number) 4
Adding number conversion cast (unumber) >(word)CHUNKY&$3fff/4 in *((const byte*) VIC_MEMORY) ← ((unumber)) (byte)(word)(const byte*) CHUNKY&(number) $3fff/(number) $40|>(word)(const byte*) CHUNKY&(number) $3fff/(number) 4
Adding number conversion cast (unumber) $3fff in *((const byte*) VIC_MEMORY) ← ((unumber)) (byte)(word)(const byte*) CHUNKY&(number) $3fff/(number) $40|(unumber)>(word)(const byte*) CHUNKY&(number) $3fff/(number) 4
Adding number conversion cast (unumber) $3fff in *((const byte*) VIC_MEMORY) ← ((unumber)) (byte)(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(number) $40|(unumber)>(word)(const byte*) CHUNKY&(number) $3fff/(number) 4
Adding number conversion cast (unumber) VIC_DEN|VIC_ECM|VIC_RSEL|3 in *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3
Adding number conversion cast (unumber) 3 in *((const byte*) VIC_CONTROL) ← ((unumber)) (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(number) 3
Adding number conversion cast (unumber) 0 in *((const byte*) BORDERCOL) ← (number) 0
Adding number conversion cast (unumber) 7 in (number~) main::$3 ← (byte) main::rst#1 & (number) 7
Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← (byte) main::rst#1 & (unumber)(number) 7
Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (unumber~) main::$3
Adding number conversion cast (unumber) $10 in (number~) main::$5 ← (byte) main::rst#1 * (number) $10
Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (byte) main::rst#1 * (unumber)(number) $10
Adding number conversion cast (unumber) $f2 in (bool~) main::$6 ← (byte) main::rst#1 != (number) $f2
Adding number conversion cast (unumber) $4000 in (byte) gfx_init_chunky::gfxbCpuBank#0 ← (byte)(const byte*) CHUNKY/(number) $4000
Adding number conversion cast (unumber) $8000 in (bool~) gfx_init_chunky::$2 ← (byte*) gfx_init_chunky::gfxb#3 == (number) $8000
Successful SSA optimization PassNAddNumberTypeConversions
Adding number conversion cast (unumber) $40 in *((const byte*) VIC_MEMORY) ← ((unumber)) (byte)(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(number) $40|(unumber)>(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(number) 4
Adding number conversion cast (unumber) 4 in *((const byte*) VIC_MEMORY) ← ((unumber)) (byte)(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(unumber)(number) $40|(unumber)>(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(number) 4
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast *((const byte*) VIC_CONTROL) ← (unumber)(const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(unumber)(number) 3
Inlining cast *((const byte*) DTV_PLANEB_START_HI) ← (unumber)(number) 0
Inlining cast *((const byte*) DTV_PLANEB_STEP) ← (unumber)(number) 8
Inlining cast *((const byte*) DTV_PLANEB_MODULO_LO) ← (unumber)(number) 0
Inlining cast *((const byte*) DTV_PLANEB_MODULO_HI) ← (unumber)(number) 0
Inlining cast *((const byte*) CIA2_PORT_A_DDR) ← (unumber)(number) 3
Inlining cast *((const byte*) CIA2_PORT_A) ← (unumber)(unumber)(number) 3^(byte)(word)(const byte*) CHUNKY/(unumber)(number) $4000
Inlining cast *((const byte*) VIC_MEMORY) ← (unumber)(byte)(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(unumber)(number) $40|(unumber)>(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(unumber)(number) 4
Inlining cast *((const byte*) VIC_CONTROL) ← (unumber)(const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(unumber)(number) 3
Inlining cast *((const byte*) BORDERCOL) ← (unumber)(number) 0
Inlining cast (byte~) gfx_init_chunky::$6 ← (byte)(word~) gfx_init_chunky::$5
Inlining cast (byte*) gfx_init_chunky::gfxb#2 ← (byte*)(number) $4000
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (byte*) 0
Simplifying constant pointer cast (byte*) 1
Simplifying constant pointer cast (byte*) 53266
Simplifying constant pointer cast (byte*) 53280
Simplifying constant pointer cast (byte*) 53265
Simplifying constant pointer cast (byte*) 53270
Simplifying constant pointer cast (byte*) 53272
Simplifying constant pointer cast (byte*) 56576
Simplifying constant pointer cast (byte*) 56578
Simplifying constant pointer cast (byte*) 53311
Simplifying constant pointer cast (byte*) 53308
Simplifying constant pointer cast (byte*) 53760
Simplifying constant pointer cast (byte*) 53321
Simplifying constant pointer cast (byte*) 53322
Simplifying constant pointer cast (byte*) 53323
Simplifying constant pointer cast (byte*) 53324
Simplifying constant pointer cast (byte*) 53319
Simplifying constant pointer cast (byte*) 53320
Simplifying constant pointer cast (byte*) 255
Simplifying constant pointer cast (byte*) 32768
Simplifying constant integer cast (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(unumber)(number) 3
Simplifying constant integer cast 3
Simplifying constant integer cast 0
Simplifying constant integer cast 8
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 3
Simplifying constant integer cast (unumber)(number) 3^(byte)(word)(const byte*) CHUNKY/(unumber)(number) $4000
Simplifying constant integer cast 3
Simplifying constant integer cast $4000
Simplifying constant integer cast (byte)(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(unumber)(number) $40|(unumber)>(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(unumber)(number) 4
Simplifying constant integer cast $3fff
Simplifying constant integer cast $40
Simplifying constant integer cast >(word)(const byte*) CHUNKY&(unumber)(number) $3fff/(unumber)(number) 4
Simplifying constant integer cast $3fff
Simplifying constant integer cast 4
Simplifying constant integer cast (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(unumber)(number) 3
Simplifying constant integer cast 3
Simplifying constant integer cast 0
Simplifying constant integer cast 7
Simplifying constant integer cast $10
Simplifying constant integer cast $f2
Simplifying constant integer cast $4000
Simplifying constant pointer cast (byte*) 16384
Simplifying constant integer cast $8000
Simplifying constant pointer cast (byte*) 16384
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 8
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 3
Finalized unsigned number type (word) $4000
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) $40
Finalized unsigned number type (word) $3fff
Finalized unsigned number type (byte) 4
Finalized unsigned number type (byte) 3
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 7
Finalized unsigned number type (byte) $10
Finalized unsigned number type (byte) $f2
Finalized unsigned number type (word) $4000
Finalized unsigned number type (word) $8000
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) main::$3 ← (byte) main::rst#1 & (byte) 7
Inferred type updated to byte in (unumber~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (byte~) main::$3
Inferred type updated to byte in (unumber~) main::$5 ← (byte) main::rst#1 * (byte) $10
Inversing boolean not [57] (bool~) gfx_init_chunky::$3 ← (byte*) gfx_init_chunky::gfxb#3 != (word) $8000 from [56] (bool~) gfx_init_chunky::$2 ← (byte*) gfx_init_chunky::gfxb#3 == (word) $8000
Successful SSA optimization Pass2UnaryNotSimplification
Alias (byte) gfx_init_chunky::gfxbCpuBank#0 = (byte) gfx_init_chunky::gfxbCpuBank#3 
Alias (byte) gfx_init_chunky::c#0 = (byte~) gfx_init_chunky::$6 
Alias (byte) gfx_init_chunky::gfxbCpuBank#4 = (byte) gfx_init_chunky::gfxbCpuBank#6 (byte) gfx_init_chunky::gfxbCpuBank#5 
Alias (word) gfx_init_chunky::x#3 = (word) gfx_init_chunky::x#5 (word) gfx_init_chunky::x#4 
Alias (byte) gfx_init_chunky::y#4 = (byte) gfx_init_chunky::y#7 (byte) gfx_init_chunky::y#5 
Alias (byte) gfx_init_chunky::y#2 = (byte) gfx_init_chunky::y#3 
Alias (byte*) gfx_init_chunky::gfxb#1 = (byte*) gfx_init_chunky::gfxb#6 
Alias (byte) gfx_init_chunky::gfxbCpuBank#8 = (byte) gfx_init_chunky::gfxbCpuBank#9 
Successful SSA optimization Pass2AliasElimination
Alias (word) gfx_init_chunky::x#2 = (word) gfx_init_chunky::x#3 
Alias (byte) gfx_init_chunky::y#2 = (byte) gfx_init_chunky::y#4 
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) main::rst#2 (byte) main::rst#0
Identical Phi Values (byte) gfx_init_chunky::y#2 (byte) gfx_init_chunky::y#6
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$1 [26] if((byte) main::j#1!=rangelast(0,$f)) goto main::@1
Simple Condition (bool~) main::$2 [34] if(*((const byte*) RASTER)!=(byte) main::rst#0) goto main::@6
Simple Condition (bool~) main::$6 [44] if((byte) main::rst#1!=(byte) $f2) goto main::@12
Simple Condition (bool~) gfx_init_chunky::$3 [56] if((byte*) gfx_init_chunky::gfxb#3!=(word) $8000) goto gfx_init_chunky::@3
Simple Condition (bool~) gfx_init_chunky::$7 [64] if((word) gfx_init_chunky::x#1!=rangelast(0,$13f)) goto gfx_init_chunky::@2
Simple Condition (bool~) gfx_init_chunky::$8 [71] if((byte) gfx_init_chunky::y#1!=rangelast(0,$32)) goto gfx_init_chunky::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) main::j#0 = 0
Constant (const byte) main::rst#0 = $42
Constant (const byte) gfx_init_chunky::gfxbCpuBank#0 = (byte)CHUNKY/$4000
Constant (const byte*) gfx_init_chunky::gfxb#0 = (byte*) 16384
Constant (const byte) gfx_init_chunky::y#0 = 0
Constant (const word) gfx_init_chunky::x#0 = 0
Constant (const byte*) gfx_init_chunky::gfxb#2 = (byte*) 16384
Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#2 = (byte)$4000/$4000
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 = gfx_init_chunky::gfxbCpuBank#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [27] if(true) goto main::@4
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [24] main::j#1 ← ++ main::j#2 to ++
Resolved ranged comparison value [26] if(main::j#1!=rangelast(0,$f)) goto main::@1 to (number) $10
Resolved ranged next value [62] gfx_init_chunky::x#1 ← ++ gfx_init_chunky::x#2 to ++
Resolved ranged comparison value [64] if(gfx_init_chunky::x#1!=rangelast(0,$13f)) goto gfx_init_chunky::@2 to (number) $140
Resolved ranged next value [69] gfx_init_chunky::y#1 ← ++ gfx_init_chunky::y#6 to ++
Resolved ranged comparison value [71] if(gfx_init_chunky::y#1!=rangelast(0,$32)) goto gfx_init_chunky::@1 to (number) $33
Simplifying constant evaluating to zero <(const byte*) CHUNKY in [12] *((const byte*) DTV_PLANEB_START_LO) ← <(const byte*) CHUNKY
Simplifying constant evaluating to zero (byte)(word)(const byte*) CHUNKY&(word) $3fff/(byte) $40|>(word)(const byte*) CHUNKY&(word) $3fff/(byte) 4 in [20] *((const byte*) VIC_MEMORY) ← (byte)(word)(const byte*) CHUNKY&(word) $3fff/(byte) $40|>(word)(const byte*) CHUNKY&(word) $3fff/(byte) 4
Successful SSA optimization PassNSimplifyConstantZero
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Adding number conversion cast (unumber) $10 in if((byte) main::j#1!=(number) $10) goto main::@1
Adding number conversion cast (unumber) $140 in if((word) gfx_init_chunky::x#1!=(number) $140) goto gfx_init_chunky::@2
Adding number conversion cast (unumber) $33 in if((byte) gfx_init_chunky::y#1!=(number) $33) goto gfx_init_chunky::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $10
Simplifying constant integer cast $140
Simplifying constant integer cast $33
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $10
Finalized unsigned number type (word) $140
Finalized unsigned number type (byte) $33
Successful SSA optimization PassNFinalizeNumberTypeConversions
Constant right-side identified [39] (byte) gfx_init_chunky::gfxbCpuBank#1 ← ++ (const byte) gfx_init_chunky::gfxbCpuBank#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte) gfx_init_chunky::gfxbCpuBank#1 = ++gfx_init_chunky::gfxbCpuBank#0
Successful SSA optimization Pass2ConstantIdentification
Rewriting multiplication to use shift [34] (byte~) main::$5 ← (byte) main::rst#1 * (byte) $10
Successful SSA optimization Pass2MultiplyToShiftRewriting
Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#2
Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0
Inlining constant with var siblings (const byte) main::j#0
Inlining constant with var siblings (const byte) main::rst#0
Inlining constant with var siblings (const byte) gfx_init_chunky::gfxbCpuBank#0
Inlining constant with var siblings (const byte*) gfx_init_chunky::gfxb#0
Inlining constant with var siblings (const byte) gfx_init_chunky::y#0
Inlining constant with var siblings (const word) gfx_init_chunky::x#0
Inlining constant with var siblings (const byte*) gfx_init_chunky::gfxb#2
Inlining constant with var siblings (const byte) gfx_init_chunky::gfxbCpuBank#1
Constant inlined dtvSetCpuBankSegment1::cpuBankIdx#0 = (byte)(const byte*) CHUNKY/(word) $4000
Constant inlined main::rst#0 = (byte) $42
Constant inlined dtvSetCpuBankSegment1::cpuBankIdx#2 = (byte)(number) $4000/(number) $4000
Constant inlined gfx_init_chunky::gfxbCpuBank#1 = ++(byte)(const byte*) CHUNKY/(word) $4000
Constant inlined gfx_init_chunky::y#0 = (byte) 0
Constant inlined main::j#0 = (byte) 0
Constant inlined gfx_init_chunky::x#0 = (word) 0
Constant inlined gfx_init_chunky::gfxb#2 = (byte*) 16384
Constant inlined gfx_init_chunky::gfxb#0 = (byte*) 16384
Constant inlined gfx_init_chunky::gfxbCpuBank#0 = (byte)(const byte*) CHUNKY/(word) $4000
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@18(between main::@1 and main::@1)
Added new block during phi lifting gfx_init_chunky::@10(between gfx_init_chunky::@5 and gfx_init_chunky::@1)
Added new block during phi lifting gfx_init_chunky::@11(between gfx_init_chunky::@3 and gfx_init_chunky::@2)
Added new block during phi lifting gfx_init_chunky::@12(between gfx_init_chunky::@2 and gfx_init_chunky::@3)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @7
Adding NOP phi() at start of @8
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of gfx_init_chunky
Adding NOP phi() at start of gfx_init_chunky::@7
Adding NOP phi() at start of gfx_init_chunky::@6
Adding NOP phi() at start of gfx_init_chunky::@9
CALL GRAPH
Calls in [] to main:2 
Calls in [main] to gfx_init_chunky:8 
Calls in [gfx_init_chunky] to dtvSetCpuBankSegment1:42 dtvSetCpuBankSegment1:51 dtvSetCpuBankSegment1:64 

Created 10 initial phi equivalence classes
Coalesced [40] main::j#3 ← main::j#1
Coalesced [45] gfx_init_chunky::gfxb#8 ← gfx_init_chunky::gfxb#5
Coalesced [46] gfx_init_chunky::gfxbCpuBank#11 ← gfx_init_chunky::gfxbCpuBank#7
Coalesced [50] dtvSetCpuBankSegment1::cpuBankIdx#4 ← dtvSetCpuBankSegment1::cpuBankIdx#1
Coalesced [53] gfx_init_chunky::gfxbCpuBank#14 ← gfx_init_chunky::gfxbCpuBank#2
Coalesced [67] gfx_init_chunky::gfxb#7 ← gfx_init_chunky::gfxb#1
Coalesced [68] gfx_init_chunky::y#8 ← gfx_init_chunky::y#1
Coalesced [69] gfx_init_chunky::gfxbCpuBank#10 ← gfx_init_chunky::gfxbCpuBank#8
Coalesced (already) [70] gfx_init_chunky::gfxb#9 ← gfx_init_chunky::gfxb#1
Coalesced [71] gfx_init_chunky::x#6 ← gfx_init_chunky::x#1
Coalesced (already) [72] gfx_init_chunky::gfxbCpuBank#12 ← gfx_init_chunky::gfxbCpuBank#8
Coalesced [73] gfx_init_chunky::gfxb#10 ← gfx_init_chunky::gfxb#3
Coalesced (already) [74] gfx_init_chunky::gfxbCpuBank#13 ← gfx_init_chunky::gfxbCpuBank#4
Coalesced down to 6 phi equivalence classes
Culled Empty Block (label) @8
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@18
Culled Empty Block (label) gfx_init_chunky::@7
Culled Empty Block (label) gfx_init_chunky::@9
Culled Empty Block (label) gfx_init_chunky::@10
Culled Empty Block (label) gfx_init_chunky::@11
Culled Empty Block (label) gfx_init_chunky::@12
Renumbering block @7 to @1
Renumbering block main::@4 to main::@2
Renumbering block main::@6 to main::@3
Renumbering block main::@8 to main::@4
Renumbering block main::@12 to main::@5
Renumbering block main::@17 to main::@6
Renumbering block gfx_init_chunky::@8 to gfx_init_chunky::@7
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
Adding NOP phi() at start of gfx_init_chunky
Adding NOP phi() at start of gfx_init_chunky::@6

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()

(void()) main()
main: scope:[main]  from @1
  asm { sei  }
  [5] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK
  [6] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO
  [7] call gfx_init_chunky 
  to:main::@6
main::@6: scope:[main]  from main
  [8] *((const byte*) DTV_FEATURE) ← (const byte) DTV_FEATURE_ENABLE
  [9] *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_COLORRAM_OFF|(const byte) DTV_CHUNKY|(const byte) DTV_BADLINE_OFF
  [10] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3
  [11] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL
  [12] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0
  [13] *((const byte*) DTV_PLANEB_START_MI) ← >(const byte*) CHUNKY
  [14] *((const byte*) DTV_PLANEB_START_HI) ← (byte) 0
  [15] *((const byte*) DTV_PLANEB_STEP) ← (byte) 8
  [16] *((const byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0
  [17] *((const byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0
  [18] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3
  [19] *((const byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const byte*) CHUNKY/(word) $4000
  [20] *((const byte*) VIC_MEMORY) ← (byte) 0
  to:main::@1
main::@1: scope:[main]  from main::@1 main::@6
  [21] (byte) main::j#2 ← phi( main::@1/(byte) main::j#1 main::@6/(byte) 0 )
  [22] *((const byte*) DTV_PALETTE + (byte) main::j#2) ← (byte) main::j#2
  [23] (byte) main::j#1 ← ++ (byte) main::j#2
  [24] if((byte) main::j#1!=(byte) $10) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1 main::@5
  asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize  }
  [26] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3
  [27] *((const byte*) BORDERCOL) ← (byte) 0
  to:main::@3
main::@3: scope:[main]  from main::@2 main::@3
  [28] if(*((const byte*) RASTER)!=(byte) $42) goto main::@3
  to:main::@4
main::@4: scope:[main]  from main::@3
  asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop  }
  to:main::@5
main::@5: scope:[main]  from main::@4 main::@5
  [30] (byte) main::rst#1 ← *((const byte*) RASTER)
  [31] (byte~) main::$3 ← (byte) main::rst#1 & (byte) 7
  [32] (byte~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (byte~) main::$3
  [33] *((const byte*) VIC_CONTROL) ← (byte~) main::$4
  [34] (byte~) main::$5 ← (byte) main::rst#1 << (byte) 4
  [35] *((const byte*) BORDERCOL) ← (byte~) main::$5
  asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop  }
  [37] if((byte) main::rst#1!=(byte) $f2) goto main::@5
  to:main::@2

(void()) gfx_init_chunky()
gfx_init_chunky: scope:[gfx_init_chunky]  from main
  [38] phi()
  [39] call dtvSetCpuBankSegment1 
  to:gfx_init_chunky::@1
gfx_init_chunky::@1: scope:[gfx_init_chunky]  from gfx_init_chunky gfx_init_chunky::@5
  [40] (byte) gfx_init_chunky::gfxbCpuBank#7 ← phi( gfx_init_chunky::@5/(byte) gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky/++(byte)(const byte*) CHUNKY/(word) $4000 )
  [40] (byte) gfx_init_chunky::y#6 ← phi( gfx_init_chunky::@5/(byte) gfx_init_chunky::y#1 gfx_init_chunky/(byte) 0 )
  [40] (byte*) gfx_init_chunky::gfxb#5 ← phi( gfx_init_chunky::@5/(byte*) gfx_init_chunky::gfxb#1 gfx_init_chunky/(byte*) 16384 )
  to:gfx_init_chunky::@2
gfx_init_chunky::@2: scope:[gfx_init_chunky]  from gfx_init_chunky::@1 gfx_init_chunky::@3
  [41] (byte) gfx_init_chunky::gfxbCpuBank#4 ← phi( gfx_init_chunky::@1/(byte) gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::@3/(byte) gfx_init_chunky::gfxbCpuBank#8 )
  [41] (word) gfx_init_chunky::x#2 ← phi( gfx_init_chunky::@1/(word) 0 gfx_init_chunky::@3/(word) gfx_init_chunky::x#1 )
  [41] (byte*) gfx_init_chunky::gfxb#3 ← phi( gfx_init_chunky::@1/(byte*) gfx_init_chunky::gfxb#5 gfx_init_chunky::@3/(byte*) gfx_init_chunky::gfxb#1 )
  [42] if((byte*) gfx_init_chunky::gfxb#3!=(word) $8000) goto gfx_init_chunky::@3
  to:gfx_init_chunky::@4
gfx_init_chunky::@4: scope:[gfx_init_chunky]  from gfx_init_chunky::@2
  [43] (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 ← (byte) gfx_init_chunky::gfxbCpuBank#4
  [44] call dtvSetCpuBankSegment1 
  to:gfx_init_chunky::@7
gfx_init_chunky::@7: scope:[gfx_init_chunky]  from gfx_init_chunky::@4
  [45] (byte) gfx_init_chunky::gfxbCpuBank#2 ← ++ (byte) gfx_init_chunky::gfxbCpuBank#4
  to:gfx_init_chunky::@3
gfx_init_chunky::@3: scope:[gfx_init_chunky]  from gfx_init_chunky::@2 gfx_init_chunky::@7
  [46] (byte) gfx_init_chunky::gfxbCpuBank#8 ← phi( gfx_init_chunky::@2/(byte) gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::@7/(byte) gfx_init_chunky::gfxbCpuBank#2 )
  [46] (byte*) gfx_init_chunky::gfxb#4 ← phi( gfx_init_chunky::@2/(byte*) gfx_init_chunky::gfxb#3 gfx_init_chunky::@7/(byte*) 16384 )
  [47] (word~) gfx_init_chunky::$5 ← (word) gfx_init_chunky::x#2 + (byte) gfx_init_chunky::y#6
  [48] (byte) gfx_init_chunky::c#0 ← (byte)(word~) gfx_init_chunky::$5
  [49] *((byte*) gfx_init_chunky::gfxb#4) ← (byte) gfx_init_chunky::c#0
  [50] (byte*) gfx_init_chunky::gfxb#1 ← ++ (byte*) gfx_init_chunky::gfxb#4
  [51] (word) gfx_init_chunky::x#1 ← ++ (word) gfx_init_chunky::x#2
  [52] if((word) gfx_init_chunky::x#1!=(word) $140) goto gfx_init_chunky::@2
  to:gfx_init_chunky::@5
gfx_init_chunky::@5: scope:[gfx_init_chunky]  from gfx_init_chunky::@3
  [53] (byte) gfx_init_chunky::y#1 ← ++ (byte) gfx_init_chunky::y#6
  [54] if((byte) gfx_init_chunky::y#1!=(byte) $33) goto gfx_init_chunky::@1
  to:gfx_init_chunky::@6
gfx_init_chunky::@6: scope:[gfx_init_chunky]  from gfx_init_chunky::@5
  [55] phi()
  [56] call dtvSetCpuBankSegment1 
  to:gfx_init_chunky::@return
gfx_init_chunky::@return: scope:[gfx_init_chunky]  from gfx_init_chunky::@6
  [57] return 
  to:@return

(void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx)
dtvSetCpuBankSegment1: scope:[dtvSetCpuBankSegment1]  from gfx_init_chunky gfx_init_chunky::@4 gfx_init_chunky::@6
  [58] (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 ← phi( gfx_init_chunky/(byte)(const byte*) CHUNKY/(word) $4000 gfx_init_chunky::@4/(byte) dtvSetCpuBankSegment1::cpuBankIdx#1 gfx_init_chunky::@6/(byte)(number) $4000/(number) $4000 )
  [59] *((const byte*) dtvSetCpuBankSegment1::cpuBank) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3
  asm { .byte$32,$dd lda$ff .byte$32,$00  }
  to:dtvSetCpuBankSegment1::@return
dtvSetCpuBankSegment1::@return: scope:[dtvSetCpuBankSegment1]  from dtvSetCpuBankSegment1
  [61] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx)
(byte) dtvSetCpuBankSegment1::cpuBankIdx
(byte) dtvSetCpuBankSegment1::cpuBankIdx#1 202.0
(byte) dtvSetCpuBankSegment1::cpuBankIdx#3 103.0
(void()) gfx_init_chunky()
(word~) gfx_init_chunky::$5 101.0
(byte) gfx_init_chunky::c
(byte) gfx_init_chunky::c#0 202.0
(byte*) gfx_init_chunky::gfxb
(byte*) gfx_init_chunky::gfxb#1 42.599999999999994
(byte*) gfx_init_chunky::gfxb#3 157.0
(byte*) gfx_init_chunky::gfxb#4 75.75
(byte*) gfx_init_chunky::gfxb#5 22.0
(byte) gfx_init_chunky::gfxbCpuBank
(byte) gfx_init_chunky::gfxbCpuBank#2 202.0
(byte) gfx_init_chunky::gfxbCpuBank#4 103.75
(byte) gfx_init_chunky::gfxbCpuBank#7 22.0
(byte) gfx_init_chunky::gfxbCpuBank#8 34.888888888888886
(word) gfx_init_chunky::x
(word) gfx_init_chunky::x#1 151.5
(word) gfx_init_chunky::x#2 30.299999999999997
(byte) gfx_init_chunky::y
(byte) gfx_init_chunky::y#1 16.5
(byte) gfx_init_chunky::y#6 9.461538461538462
(void()) main()
(byte~) main::$3 202.0
(byte~) main::$4 202.0
(byte~) main::$5 202.0
(byte) main::j
(byte) main::j#1 16.5
(byte) main::j#2 22.0
(byte) main::rst
(byte) main::rst#1 57.714285714285715

Initial phi equivalence classes
[ main::j#2 main::j#1 ]
[ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
[ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
[ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
[ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
[ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
Added variable main::rst#1 to live range equivalence class [ main::rst#1 ]
Added variable main::$3 to live range equivalence class [ main::$3 ]
Added variable main::$4 to live range equivalence class [ main::$4 ]
Added variable main::$5 to live range equivalence class [ main::$5 ]
Added variable gfx_init_chunky::$5 to live range equivalence class [ gfx_init_chunky::$5 ]
Added variable gfx_init_chunky::c#0 to live range equivalence class [ gfx_init_chunky::c#0 ]
Complete equivalence classes
[ main::j#2 main::j#1 ]
[ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
[ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
[ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
[ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
[ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
[ main::rst#1 ]
[ main::$3 ]
[ main::$4 ]
[ main::$5 ]
[ gfx_init_chunky::$5 ]
[ gfx_init_chunky::c#0 ]
Allocated zp[1]:2 [ main::j#2 main::j#1 ]
Allocated zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Allocated zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
Allocated zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
Allocated zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
Allocated zp[1]:9 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
Allocated zp[1]:10 [ main::rst#1 ]
Allocated zp[1]:11 [ main::$3 ]
Allocated zp[1]:12 [ main::$4 ]
Allocated zp[1]:13 [ main::$5 ]
Allocated zp[2]:14 [ gfx_init_chunky::$5 ]
Allocated zp[1]:16 [ gfx_init_chunky::c#0 ]

INITIAL ASM
Target platform is c64basic / MOS6502X
  // File Comments
// C64DTV 8bpp charmode stretcher
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  // Processor port data direction register
  .label PROCPORT_DDR = 0
  // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
  .const PROCPORT_DDR_MEMORY_MASK = 7
  // Processor Port Register controlling RAM/ROM configuration and the datasette
  .label PROCPORT = 1
  // RAM in $A000, $E000 I/O in $D000
  .const PROCPORT_RAM_IO = 5
  .label RASTER = $d012
  .label BORDERCOL = $d020
  .label VIC_CONTROL = $d011
  .const VIC_ECM = $40
  .const VIC_DEN = $10
  .const VIC_RSEL = 8
  .label VIC_CONTROL2 = $d016
  .const VIC_MCM = $10
  .const VIC_CSEL = 8
  .label VIC_MEMORY = $d018
  // CIA#2 Port A: Serial bus, RS-232, VIC memory bank
  .label CIA2_PORT_A = $dd00
  // CIA #2 Port A data direction register.
  .label CIA2_PORT_A_DDR = $dd02
  // Feature enables or disables the extra C64 DTV features
  .label DTV_FEATURE = $d03f
  .const DTV_FEATURE_ENABLE = 1
  // Controls the graphics modes of the C64 DTV
  .label DTV_CONTROL = $d03c
  .const DTV_LINEAR = 1
  .const DTV_HIGHCOLOR = 4
  .const DTV_COLORRAM_OFF = $10
  .const DTV_BADLINE_OFF = $20
  .const DTV_CHUNKY = $40
  // Defines colors for the 16 first colors ($00-$0f)
  .label DTV_PALETTE = $d200
  // Linear Graphics Plane B Counter Control
  .label DTV_PLANEB_START_LO = $d049
  .label DTV_PLANEB_START_MI = $d04a
  .label DTV_PLANEB_START_HI = $d04b
  .label DTV_PLANEB_STEP = $d04c
  .label DTV_PLANEB_MODULO_LO = $d047
  .label DTV_PLANEB_MODULO_HI = $d048
  // Plane with all pixels
  .label CHUNKY = $8000
  // @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 __3 = $b
    .label __4 = $c
    .label __5 = $d
    .label j = 2
    .label rst = $a
    // asm { sei  }
    sei
    // [5] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 
    // Disable normal interrupt (prevent keyboard reading glitches and allows to hide basic/kernal)
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // [6] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // [7] call gfx_init_chunky 
    // [38] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky]
  gfx_init_chunky_from_main:
    jsr gfx_init_chunky
    jmp __b6
    // main::@6
  __b6:
    // [8] *((const byte*) DTV_FEATURE) ← (const byte) DTV_FEATURE_ENABLE -- _deref_pbuc1=vbuc2 
    // Enable DTV extended modes
    lda #DTV_FEATURE_ENABLE
    sta DTV_FEATURE
    // [9] *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_COLORRAM_OFF|(const byte) DTV_CHUNKY|(const byte) DTV_BADLINE_OFF -- _deref_pbuc1=vbuc2 
    // 8BPP Pixel Cell Mode
    lda #DTV_HIGHCOLOR|DTV_LINEAR|DTV_COLORRAM_OFF|DTV_CHUNKY|DTV_BADLINE_OFF
    sta DTV_CONTROL
    // [10] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 
    lda #VIC_DEN|VIC_ECM|VIC_RSEL|3
    sta VIC_CONTROL
    // [11] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL -- _deref_pbuc1=vbuc2 
    lda #VIC_MCM|VIC_CSEL
    sta VIC_CONTROL2
    // [12] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    // Plane B: CHUNKY
    lda #0
    sta DTV_PLANEB_START_LO
    // [13] *((const byte*) DTV_PLANEB_START_MI) ← >(const byte*) CHUNKY -- _deref_pbuc1=vbuc2 
    lda #>CHUNKY
    sta DTV_PLANEB_START_MI
    // [14] *((const byte*) DTV_PLANEB_START_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_PLANEB_START_HI
    // [15] *((const byte*) DTV_PLANEB_STEP) ← (byte) 8 -- _deref_pbuc1=vbuc2 
    lda #8
    sta DTV_PLANEB_STEP
    // [16] *((const byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_PLANEB_MODULO_LO
    // [17] *((const byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_PLANEB_MODULO_HI
    // [18] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 
    // VIC Graphics Bank
    lda #3
    sta CIA2_PORT_A_DDR
    // [19] *((const byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const byte*) CHUNKY/(word) $4000 -- _deref_pbuc1=vbuc2 
    // Set VIC Bank bits to output - all others to input
    lda #3^CHUNKY/$4000
    sta CIA2_PORT_A
    // [20] *((const byte*) VIC_MEMORY) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    // Set VIC Bank
    // VIC memory
    lda #0
    sta VIC_MEMORY
    // [21] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
  __b1_from___b6:
    // [21] phi (byte) main::j#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta.z j
    jmp __b1
  // DTV Palette - Grey Tones
    // [21] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  __b1_from___b1:
    // [21] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@1->main::@1#0] -- register_copy 
    jmp __b1
    // main::@1
  __b1:
    // [22] *((const byte*) DTV_PALETTE + (byte) main::j#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuz1=vbuz1 
    ldy.z j
    tya
    sta DTV_PALETTE,y
    // [23] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuz1=_inc_vbuz1 
    inc.z j
    // [24] if((byte) main::j#1!=(byte) $10) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$10
    cmp.z j
    bne __b1_from___b1
    jmp __b2
    // main::@2
  __b2:
    // asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize  }
    // Stabilize Raster
    ldx #$ff
  rff:
    cpx RASTER
    bne rff
  stabilize:
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    cpx RASTER
    beq eat+0
  eat:
    inx
    cpx #8
    bne stabilize
    // [26] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 
    lda #VIC_DEN|VIC_ECM|VIC_RSEL|3
    sta VIC_CONTROL
    // [27] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta BORDERCOL
    jmp __b3
    // main::@3
  __b3:
    // [28] if(*((const byte*) RASTER)!=(byte) $42) goto main::@3 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$42
    cmp RASTER
    bne __b3
    jmp __b4
    // main::@4
  __b4:
    // asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop  }
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    jmp __b5
    // main::@5
  __b5:
    // [30] (byte) main::rst#1 ← *((const byte*) RASTER) -- vbuz1=_deref_pbuc1 
    lda RASTER
    sta.z rst
    // [31] (byte~) main::$3 ← (byte) main::rst#1 & (byte) 7 -- vbuz1=vbuz2_band_vbuc1 
    lda #7
    and.z rst
    sta.z __3
    // [32] (byte~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (byte~) main::$3 -- vbuz1=vbuc1_bor_vbuz2 
    lda #VIC_DEN|VIC_ECM|VIC_RSEL
    ora.z __3
    sta.z __4
    // [33] *((const byte*) VIC_CONTROL) ← (byte~) main::$4 -- _deref_pbuc1=vbuz1 
    lda.z __4
    sta VIC_CONTROL
    // [34] (byte~) main::$5 ← (byte) main::rst#1 << (byte) 4 -- vbuz1=vbuz2_rol_4 
    lda.z rst
    asl
    asl
    asl
    asl
    sta.z __5
    // [35] *((const byte*) BORDERCOL) ← (byte~) main::$5 -- _deref_pbuc1=vbuz1 
    lda.z __5
    sta BORDERCOL
    // asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop  }
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    // [37] if((byte) main::rst#1!=(byte) $f2) goto main::@5 -- vbuz1_neq_vbuc1_then_la1 
    lda #$f2
    cmp.z rst
    bne __b5
    jmp __b2
}
  // gfx_init_chunky
// Initialize Plane with 8bpp chunky
gfx_init_chunky: {
    .label __5 = $e
    .label c = $10
    .label gfxb = 7
    .label x = 4
    // 320x200 8bpp pixels for Plane
    .label gfxbCpuBank = 6
    .label y = 3
    // [39] call dtvSetCpuBankSegment1 
    // [58] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1]
  dtvSetCpuBankSegment1_from_gfx_init_chunky:
    // [58] phi (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 = (byte)(const byte*) CHUNKY/(word) $4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuz1=vbuc1 
    lda #CHUNKY/$4000
    sta.z dtvSetCpuBankSegment1.cpuBankIdx
    jsr dtvSetCpuBankSegment1
    // [40] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1]
  __b1_from_gfx_init_chunky:
    // [40] phi (byte) gfx_init_chunky::gfxbCpuBank#7 = ++(byte)(const byte*) CHUNKY/(word) $4000 [phi:gfx_init_chunky->gfx_init_chunky::@1#0] -- vbuz1=vbuc1 
    lda #($ff&CHUNKY/$4000)+1
    sta.z gfxbCpuBank
    // [40] phi (byte) gfx_init_chunky::y#6 = (byte) 0 [phi:gfx_init_chunky->gfx_init_chunky::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [40] phi (byte*) gfx_init_chunky::gfxb#5 = (byte*) 16384 [phi:gfx_init_chunky->gfx_init_chunky::@1#2] -- pbuz1=pbuc1 
    lda #<$4000
    sta.z gfxb
    lda #>$4000
    sta.z gfxb+1
    jmp __b1
    // [40] phi from gfx_init_chunky::@5 to gfx_init_chunky::@1 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1]
  __b1_from___b5:
    // [40] phi (byte) gfx_init_chunky::gfxbCpuBank#7 = (byte) gfx_init_chunky::gfxbCpuBank#8 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1#0] -- register_copy 
    // [40] phi (byte) gfx_init_chunky::y#6 = (byte) gfx_init_chunky::y#1 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1#1] -- register_copy 
    // [40] phi (byte*) gfx_init_chunky::gfxb#5 = (byte*) gfx_init_chunky::gfxb#1 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1#2] -- register_copy 
    jmp __b1
    // gfx_init_chunky::@1
  __b1:
    // [41] phi from gfx_init_chunky::@1 to gfx_init_chunky::@2 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2]
  __b2_from___b1:
    // [41] phi (byte) gfx_init_chunky::gfxbCpuBank#4 = (byte) gfx_init_chunky::gfxbCpuBank#7 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#0] -- register_copy 
    // [41] phi (word) gfx_init_chunky::x#2 = (word) 0 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z x
    lda #>0
    sta.z x+1
    // [41] phi (byte*) gfx_init_chunky::gfxb#3 = (byte*) gfx_init_chunky::gfxb#5 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#2] -- register_copy 
    jmp __b2
    // [41] phi from gfx_init_chunky::@3 to gfx_init_chunky::@2 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2]
  __b2_from___b3:
    // [41] phi (byte) gfx_init_chunky::gfxbCpuBank#4 = (byte) gfx_init_chunky::gfxbCpuBank#8 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2#0] -- register_copy 
    // [41] phi (word) gfx_init_chunky::x#2 = (word) gfx_init_chunky::x#1 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2#1] -- register_copy 
    // [41] phi (byte*) gfx_init_chunky::gfxb#3 = (byte*) gfx_init_chunky::gfxb#1 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2#2] -- register_copy 
    jmp __b2
    // gfx_init_chunky::@2
  __b2:
    // [42] if((byte*) gfx_init_chunky::gfxb#3!=(word) $8000) goto gfx_init_chunky::@3 -- pbuz1_neq_vwuc1_then_la1 
    lda.z gfxb+1
    cmp #>$8000
    bne __b3_from___b2
    lda.z gfxb
    cmp #<$8000
    bne __b3_from___b2
    jmp __b4
    // gfx_init_chunky::@4
  __b4:
    // [43] (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 ← (byte) gfx_init_chunky::gfxbCpuBank#4 -- vbuz1=vbuz2 
    lda.z gfxbCpuBank
    sta.z dtvSetCpuBankSegment1.cpuBankIdx
    // [44] call dtvSetCpuBankSegment1 
    // [58] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1]
  dtvSetCpuBankSegment1_from___b4:
    // [58] phi (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 = (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy 
    jsr dtvSetCpuBankSegment1
    jmp __b7
    // gfx_init_chunky::@7
  __b7:
    // [45] (byte) gfx_init_chunky::gfxbCpuBank#2 ← ++ (byte) gfx_init_chunky::gfxbCpuBank#4 -- vbuz1=_inc_vbuz1 
    inc.z gfxbCpuBank
    // [46] phi from gfx_init_chunky::@7 to gfx_init_chunky::@3 [phi:gfx_init_chunky::@7->gfx_init_chunky::@3]
  __b3_from___b7:
    // [46] phi (byte) gfx_init_chunky::gfxbCpuBank#8 = (byte) gfx_init_chunky::gfxbCpuBank#2 [phi:gfx_init_chunky::@7->gfx_init_chunky::@3#0] -- register_copy 
    // [46] phi (byte*) gfx_init_chunky::gfxb#4 = (byte*) 16384 [phi:gfx_init_chunky::@7->gfx_init_chunky::@3#1] -- pbuz1=pbuc1 
    lda #<$4000
    sta.z gfxb
    lda #>$4000
    sta.z gfxb+1
    jmp __b3
    // [46] phi from gfx_init_chunky::@2 to gfx_init_chunky::@3 [phi:gfx_init_chunky::@2->gfx_init_chunky::@3]
  __b3_from___b2:
    // [46] phi (byte) gfx_init_chunky::gfxbCpuBank#8 = (byte) gfx_init_chunky::gfxbCpuBank#4 [phi:gfx_init_chunky::@2->gfx_init_chunky::@3#0] -- register_copy 
    // [46] phi (byte*) gfx_init_chunky::gfxb#4 = (byte*) gfx_init_chunky::gfxb#3 [phi:gfx_init_chunky::@2->gfx_init_chunky::@3#1] -- register_copy 
    jmp __b3
    // gfx_init_chunky::@3
  __b3:
    // [47] (word~) gfx_init_chunky::$5 ← (word) gfx_init_chunky::x#2 + (byte) gfx_init_chunky::y#6 -- vwuz1=vwuz2_plus_vbuz3 
    lda.z y
    clc
    adc.z x
    sta.z __5
    lda #0
    adc.z x+1
    sta.z __5+1
    // [48] (byte) gfx_init_chunky::c#0 ← (byte)(word~) gfx_init_chunky::$5 -- vbuz1=_byte_vwuz2 
    lda.z __5
    sta.z c
    // [49] *((byte*) gfx_init_chunky::gfxb#4) ← (byte) gfx_init_chunky::c#0 -- _deref_pbuz1=vbuz2 
    lda.z c
    ldy #0
    sta (gfxb),y
    // [50] (byte*) gfx_init_chunky::gfxb#1 ← ++ (byte*) gfx_init_chunky::gfxb#4 -- pbuz1=_inc_pbuz1 
    inc.z gfxb
    bne !+
    inc.z gfxb+1
  !:
    // [51] (word) gfx_init_chunky::x#1 ← ++ (word) gfx_init_chunky::x#2 -- vwuz1=_inc_vwuz1 
    inc.z x
    bne !+
    inc.z x+1
  !:
    // [52] if((word) gfx_init_chunky::x#1!=(word) $140) goto gfx_init_chunky::@2 -- vwuz1_neq_vwuc1_then_la1 
    lda.z x+1
    cmp #>$140
    bne __b2_from___b3
    lda.z x
    cmp #<$140
    bne __b2_from___b3
    jmp __b5
    // gfx_init_chunky::@5
  __b5:
    // [53] (byte) gfx_init_chunky::y#1 ← ++ (byte) gfx_init_chunky::y#6 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [54] if((byte) gfx_init_chunky::y#1!=(byte) $33) goto gfx_init_chunky::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$33
    cmp.z y
    bne __b1_from___b5
    // [55] phi from gfx_init_chunky::@5 to gfx_init_chunky::@6 [phi:gfx_init_chunky::@5->gfx_init_chunky::@6]
  __b6_from___b5:
    jmp __b6
    // gfx_init_chunky::@6
  __b6:
    // [56] call dtvSetCpuBankSegment1 
    // [58] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1]
  dtvSetCpuBankSegment1_from___b6:
    // [58] phi (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 = (byte)(number) $4000/(number) $4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuz1=vbuc1 
    lda #$4000/$4000
    sta.z dtvSetCpuBankSegment1.cpuBankIdx
    jsr dtvSetCpuBankSegment1
    jmp __breturn
    // gfx_init_chunky::@return
  __breturn:
    // [57] return 
    rts
}
  // dtvSetCpuBankSegment1
// Set the memory pointed to by CPU BANK 1 SEGMENT ($4000-$7fff)
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
// The actual memory addressed will be $4000*cpuSegmentIdx
// dtvSetCpuBankSegment1(byte zp(9) cpuBankIdx)
dtvSetCpuBankSegment1: {
    // Move CPU BANK 1 SEGMENT ($4000-$7fff)
    .label cpuBank = $ff
    .label cpuBankIdx = 9
    // [59] *((const byte*) dtvSetCpuBankSegment1::cpuBank) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 -- _deref_pbuc1=vbuz1 
    lda.z cpuBankIdx
    sta cpuBank
    // asm { .byte$32,$dd lda$ff .byte$32,$00  }
    .byte $32, $dd
    lda.z $ff
    .byte $32, $00
    jmp __breturn
    // dtvSetCpuBankSegment1::@return
  __breturn:
    // [61] return 
    rts
}
  // File Data

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [5] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [6] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [8] *((const byte*) DTV_FEATURE) ← (const byte) DTV_FEATURE_ENABLE [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [9] *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_COLORRAM_OFF|(const byte) DTV_CHUNKY|(const byte) DTV_BADLINE_OFF [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [10] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [11] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [13] *((const byte*) DTV_PLANEB_START_MI) ← >(const byte*) CHUNKY [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [14] *((const byte*) DTV_PLANEB_START_HI) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [15] *((const byte*) DTV_PLANEB_STEP) ← (byte) 8 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [16] *((const byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [17] *((const byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [18] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [19] *((const byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const byte*) CHUNKY/(word) $4000 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [20] *((const byte*) VIC_MEMORY) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize  } always clobbers reg byte x 
Statement [26] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [27] *((const byte*) BORDERCOL) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [28] if(*((const byte*) RASTER)!=(byte) $42) goto main::@3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [32] (byte~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (byte~) main::$3 [ main::rst#1 main::$4 ] ( main:2 [ main::rst#1 main::$4 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:10 [ main::rst#1 ]
Statement [34] (byte~) main::$5 ← (byte) main::rst#1 << (byte) 4 [ main::rst#1 main::$5 ] ( main:2 [ main::rst#1 main::$5 ] ) always clobbers reg byte a 
Statement [42] if((byte*) gfx_init_chunky::gfxb#3!=(word) $8000) goto gfx_init_chunky::@3 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#3 gfx_init_chunky::x#2 gfx_init_chunky::gfxbCpuBank#4 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#3 gfx_init_chunky::x#2 gfx_init_chunky::gfxbCpuBank#4 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
Statement [47] (word~) gfx_init_chunky::$5 ← (word) gfx_init_chunky::x#2 + (byte) gfx_init_chunky::y#6 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 gfx_init_chunky::$5 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 gfx_init_chunky::$5 ] ) always clobbers reg byte a 
Statement [48] (byte) gfx_init_chunky::c#0 ← (byte)(word~) gfx_init_chunky::$5 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 gfx_init_chunky::c#0 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 gfx_init_chunky::c#0 ] ) always clobbers reg byte a 
Statement [49] *((byte*) gfx_init_chunky::gfxb#4) ← (byte) gfx_init_chunky::c#0 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 ] ) always clobbers reg byte y 
Removing always clobbered register reg byte y as potential for zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
Statement [52] if((word) gfx_init_chunky::x#1!=(word) $140) goto gfx_init_chunky::@2 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#1 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#1 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#1 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#1 ] ) always clobbers reg byte a 
Statement asm { .byte$32,$dd lda$ff .byte$32,$00  } always clobbers reg byte a 
Statement [5] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [6] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [8] *((const byte*) DTV_FEATURE) ← (const byte) DTV_FEATURE_ENABLE [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [9] *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_COLORRAM_OFF|(const byte) DTV_CHUNKY|(const byte) DTV_BADLINE_OFF [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [10] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [11] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [12] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [13] *((const byte*) DTV_PLANEB_START_MI) ← >(const byte*) CHUNKY [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [14] *((const byte*) DTV_PLANEB_START_HI) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [15] *((const byte*) DTV_PLANEB_STEP) ← (byte) 8 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [16] *((const byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [17] *((const byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [18] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [19] *((const byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const byte*) CHUNKY/(word) $4000 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [20] *((const byte*) VIC_MEMORY) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize  } always clobbers reg byte x 
Statement [26] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [27] *((const byte*) BORDERCOL) ← (byte) 0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [28] if(*((const byte*) RASTER)!=(byte) $42) goto main::@3 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [31] (byte~) main::$3 ← (byte) main::rst#1 & (byte) 7 [ main::rst#1 main::$3 ] ( main:2 [ main::rst#1 main::$3 ] ) always clobbers reg byte a 
Statement [32] (byte~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (byte~) main::$3 [ main::rst#1 main::$4 ] ( main:2 [ main::rst#1 main::$4 ] ) always clobbers reg byte a 
Statement [34] (byte~) main::$5 ← (byte) main::rst#1 << (byte) 4 [ main::rst#1 main::$5 ] ( main:2 [ main::rst#1 main::$5 ] ) always clobbers reg byte a 
Statement [42] if((byte*) gfx_init_chunky::gfxb#3!=(word) $8000) goto gfx_init_chunky::@3 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#3 gfx_init_chunky::x#2 gfx_init_chunky::gfxbCpuBank#4 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#3 gfx_init_chunky::x#2 gfx_init_chunky::gfxbCpuBank#4 ] ) always clobbers reg byte a 
Statement [47] (word~) gfx_init_chunky::$5 ← (word) gfx_init_chunky::x#2 + (byte) gfx_init_chunky::y#6 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 gfx_init_chunky::$5 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 gfx_init_chunky::$5 ] ) always clobbers reg byte a 
Statement [48] (byte) gfx_init_chunky::c#0 ← (byte)(word~) gfx_init_chunky::$5 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 gfx_init_chunky::c#0 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 gfx_init_chunky::c#0 ] ) always clobbers reg byte a 
Statement [49] *((byte*) gfx_init_chunky::gfxb#4) ← (byte) gfx_init_chunky::c#0 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#2 gfx_init_chunky::gfxb#4 ] ) always clobbers reg byte y 
Statement [52] if((word) gfx_init_chunky::x#1!=(word) $140) goto gfx_init_chunky::@2 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#1 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#1 ] ( main:2::gfx_init_chunky:7 [ gfx_init_chunky::y#6 gfx_init_chunky::gfxb#1 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::x#1 ] ) always clobbers reg byte a 
Statement asm { .byte$32,$dd lda$ff .byte$32,$00  } always clobbers reg byte a 
Potential registers zp[1]:2 [ main::j#2 main::j#1 ] : zp[1]:2 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] : zp[1]:3 , reg byte x , 
Potential registers zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] : zp[2]:4 , 
Potential registers zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] : zp[1]:6 , reg byte x , 
Potential registers zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] : zp[2]:7 , 
Potential registers zp[1]:9 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] : zp[1]:9 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:10 [ main::rst#1 ] : zp[1]:10 , reg byte x , reg byte y , 
Potential registers zp[1]:11 [ main::$3 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:12 [ main::$4 ] : zp[1]:12 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:13 [ main::$5 ] : zp[1]:13 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[2]:14 [ gfx_init_chunky::$5 ] : zp[2]:14 , 
Potential registers zp[1]:16 [ gfx_init_chunky::c#0 ] : zp[1]:16 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [gfx_init_chunky] 362.64: zp[1]:6 [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] 297.35: zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] 202: zp[1]:16 [ gfx_init_chunky::c#0 ] 181.8: zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] 101: zp[2]:14 [ gfx_init_chunky::$5 ] 25.96: zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] 
Uplift Scope [main] 202: zp[1]:11 [ main::$3 ] 202: zp[1]:12 [ main::$4 ] 202: zp[1]:13 [ main::$5 ] 57.71: zp[1]:10 [ main::rst#1 ] 38.5: zp[1]:2 [ main::j#2 main::j#1 ] 
Uplift Scope [dtvSetCpuBankSegment1] 305: zp[1]:9 [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] 
Uplift Scope [] 

Uplifting [gfx_init_chunky] best 25250 combination reg byte x [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ] zp[2]:7 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ] reg byte a [ gfx_init_chunky::c#0 ] zp[2]:4 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ] zp[2]:14 [ gfx_init_chunky::$5 ] zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] 
Uplifting [main] best 22650 combination reg byte a [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$5 ] reg byte x [ main::rst#1 ] zp[1]:2 [ main::j#2 main::j#1 ] 
Limited combination testing to 100 combinations of 768 possible.
Uplifting [dtvSetCpuBankSegment1] best 22541 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ] 
Uplifting [] best 22541 combination 
Attempting to uplift remaining variables inzp[1]:2 [ main::j#2 main::j#1 ]
Uplifting [main] best 22421 combination reg byte x [ main::j#2 main::j#1 ] 
Attempting to uplift remaining variables inzp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Uplifting [gfx_init_chunky] best 22421 combination zp[1]:3 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ] 
Allocated (was zp[1]:3) zp[1]:2 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
Allocated (was zp[2]:4) zp[2]:3 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
Allocated (was zp[2]:7) zp[2]:5 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
Allocated (was zp[2]:14) zp[2]:7 [ gfx_init_chunky::$5 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// C64DTV 8bpp charmode stretcher
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(__bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  // Processor port data direction register
  .label PROCPORT_DDR = 0
  // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
  .const PROCPORT_DDR_MEMORY_MASK = 7
  // Processor Port Register controlling RAM/ROM configuration and the datasette
  .label PROCPORT = 1
  // RAM in $A000, $E000 I/O in $D000
  .const PROCPORT_RAM_IO = 5
  .label RASTER = $d012
  .label BORDERCOL = $d020
  .label VIC_CONTROL = $d011
  .const VIC_ECM = $40
  .const VIC_DEN = $10
  .const VIC_RSEL = 8
  .label VIC_CONTROL2 = $d016
  .const VIC_MCM = $10
  .const VIC_CSEL = 8
  .label VIC_MEMORY = $d018
  // CIA#2 Port A: Serial bus, RS-232, VIC memory bank
  .label CIA2_PORT_A = $dd00
  // CIA #2 Port A data direction register.
  .label CIA2_PORT_A_DDR = $dd02
  // Feature enables or disables the extra C64 DTV features
  .label DTV_FEATURE = $d03f
  .const DTV_FEATURE_ENABLE = 1
  // Controls the graphics modes of the C64 DTV
  .label DTV_CONTROL = $d03c
  .const DTV_LINEAR = 1
  .const DTV_HIGHCOLOR = 4
  .const DTV_COLORRAM_OFF = $10
  .const DTV_BADLINE_OFF = $20
  .const DTV_CHUNKY = $40
  // Defines colors for the 16 first colors ($00-$0f)
  .label DTV_PALETTE = $d200
  // Linear Graphics Plane B Counter Control
  .label DTV_PLANEB_START_LO = $d049
  .label DTV_PLANEB_START_MI = $d04a
  .label DTV_PLANEB_START_HI = $d04b
  .label DTV_PLANEB_STEP = $d04c
  .label DTV_PLANEB_MODULO_LO = $d047
  .label DTV_PLANEB_MODULO_HI = $d048
  // Plane with all pixels
  .label CHUNKY = $8000
  // @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: {
    // asm { sei  }
    sei
    // [5] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 
    // Disable normal interrupt (prevent keyboard reading glitches and allows to hide basic/kernal)
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // [6] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // [7] call gfx_init_chunky 
    // [38] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky]
  gfx_init_chunky_from_main:
    jsr gfx_init_chunky
    jmp __b6
    // main::@6
  __b6:
    // [8] *((const byte*) DTV_FEATURE) ← (const byte) DTV_FEATURE_ENABLE -- _deref_pbuc1=vbuc2 
    // Enable DTV extended modes
    lda #DTV_FEATURE_ENABLE
    sta DTV_FEATURE
    // [9] *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_COLORRAM_OFF|(const byte) DTV_CHUNKY|(const byte) DTV_BADLINE_OFF -- _deref_pbuc1=vbuc2 
    // 8BPP Pixel Cell Mode
    lda #DTV_HIGHCOLOR|DTV_LINEAR|DTV_COLORRAM_OFF|DTV_CHUNKY|DTV_BADLINE_OFF
    sta DTV_CONTROL
    // [10] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 
    lda #VIC_DEN|VIC_ECM|VIC_RSEL|3
    sta VIC_CONTROL
    // [11] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL -- _deref_pbuc1=vbuc2 
    lda #VIC_MCM|VIC_CSEL
    sta VIC_CONTROL2
    // [12] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    // Plane B: CHUNKY
    lda #0
    sta DTV_PLANEB_START_LO
    // [13] *((const byte*) DTV_PLANEB_START_MI) ← >(const byte*) CHUNKY -- _deref_pbuc1=vbuc2 
    lda #>CHUNKY
    sta DTV_PLANEB_START_MI
    // [14] *((const byte*) DTV_PLANEB_START_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_PLANEB_START_HI
    // [15] *((const byte*) DTV_PLANEB_STEP) ← (byte) 8 -- _deref_pbuc1=vbuc2 
    lda #8
    sta DTV_PLANEB_STEP
    // [16] *((const byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_PLANEB_MODULO_LO
    // [17] *((const byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_PLANEB_MODULO_HI
    // [18] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 
    // VIC Graphics Bank
    lda #3
    sta CIA2_PORT_A_DDR
    // [19] *((const byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const byte*) CHUNKY/(word) $4000 -- _deref_pbuc1=vbuc2 
    // Set VIC Bank bits to output - all others to input
    lda #3^CHUNKY/$4000
    sta CIA2_PORT_A
    // [20] *((const byte*) VIC_MEMORY) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    // Set VIC Bank
    // VIC memory
    lda #0
    sta VIC_MEMORY
    // [21] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
  __b1_from___b6:
    // [21] phi (byte) main::j#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuxx=vbuc1 
    ldx #0
    jmp __b1
  // DTV Palette - Grey Tones
    // [21] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
  __b1_from___b1:
    // [21] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@1->main::@1#0] -- register_copy 
    jmp __b1
    // main::@1
  __b1:
    // [22] *((const byte*) DTV_PALETTE + (byte) main::j#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuxx 
    txa
    sta DTV_PALETTE,x
    // [23] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuxx=_inc_vbuxx 
    inx
    // [24] if((byte) main::j#1!=(byte) $10) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$10
    bne __b1_from___b1
    jmp __b2
    // main::@2
  __b2:
    // asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize  }
    // Stabilize Raster
    ldx #$ff
  rff:
    cpx RASTER
    bne rff
  stabilize:
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    cpx RASTER
    beq eat+0
  eat:
    inx
    cpx #8
    bne stabilize
    // [26] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 
    lda #VIC_DEN|VIC_ECM|VIC_RSEL|3
    sta VIC_CONTROL
    // [27] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta BORDERCOL
    jmp __b3
    // main::@3
  __b3:
    // [28] if(*((const byte*) RASTER)!=(byte) $42) goto main::@3 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$42
    cmp RASTER
    bne __b3
    jmp __b4
    // main::@4
  __b4:
    // asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop  }
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    jmp __b5
    // main::@5
  __b5:
    // [30] (byte) main::rst#1 ← *((const byte*) RASTER) -- vbuxx=_deref_pbuc1 
    ldx RASTER
    // [31] (byte~) main::$3 ← (byte) main::rst#1 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 
    txa
    and #7
    // [32] (byte~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (byte~) main::$3 -- vbuaa=vbuc1_bor_vbuaa 
    ora #VIC_DEN|VIC_ECM|VIC_RSEL
    // [33] *((const byte*) VIC_CONTROL) ← (byte~) main::$4 -- _deref_pbuc1=vbuaa 
    sta VIC_CONTROL
    // [34] (byte~) main::$5 ← (byte) main::rst#1 << (byte) 4 -- vbuaa=vbuxx_rol_4 
    txa
    asl
    asl
    asl
    asl
    // [35] *((const byte*) BORDERCOL) ← (byte~) main::$5 -- _deref_pbuc1=vbuaa 
    sta BORDERCOL
    // asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop  }
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    // [37] if((byte) main::rst#1!=(byte) $f2) goto main::@5 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$f2
    bne __b5
    jmp __b2
}
  // gfx_init_chunky
// Initialize Plane with 8bpp chunky
gfx_init_chunky: {
    .label __5 = 7
    .label gfxb = 5
    .label x = 3
    .label y = 2
    // [39] call dtvSetCpuBankSegment1 
    // [58] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1]
  dtvSetCpuBankSegment1_from_gfx_init_chunky:
    // [58] phi (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 = (byte)(const byte*) CHUNKY/(word) $4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 
    lda #CHUNKY/$4000
    jsr dtvSetCpuBankSegment1
    // [40] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1]
  __b1_from_gfx_init_chunky:
    // [40] phi (byte) gfx_init_chunky::gfxbCpuBank#7 = ++(byte)(const byte*) CHUNKY/(word) $4000 [phi:gfx_init_chunky->gfx_init_chunky::@1#0] -- vbuxx=vbuc1 
    ldx #($ff&CHUNKY/$4000)+1
    // [40] phi (byte) gfx_init_chunky::y#6 = (byte) 0 [phi:gfx_init_chunky->gfx_init_chunky::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [40] phi (byte*) gfx_init_chunky::gfxb#5 = (byte*) 16384 [phi:gfx_init_chunky->gfx_init_chunky::@1#2] -- pbuz1=pbuc1 
    lda #<$4000
    sta.z gfxb
    lda #>$4000
    sta.z gfxb+1
    jmp __b1
    // [40] phi from gfx_init_chunky::@5 to gfx_init_chunky::@1 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1]
  __b1_from___b5:
    // [40] phi (byte) gfx_init_chunky::gfxbCpuBank#7 = (byte) gfx_init_chunky::gfxbCpuBank#8 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1#0] -- register_copy 
    // [40] phi (byte) gfx_init_chunky::y#6 = (byte) gfx_init_chunky::y#1 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1#1] -- register_copy 
    // [40] phi (byte*) gfx_init_chunky::gfxb#5 = (byte*) gfx_init_chunky::gfxb#1 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1#2] -- register_copy 
    jmp __b1
    // gfx_init_chunky::@1
  __b1:
    // [41] phi from gfx_init_chunky::@1 to gfx_init_chunky::@2 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2]
  __b2_from___b1:
    // [41] phi (byte) gfx_init_chunky::gfxbCpuBank#4 = (byte) gfx_init_chunky::gfxbCpuBank#7 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#0] -- register_copy 
    // [41] phi (word) gfx_init_chunky::x#2 = (word) 0 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z x
    lda #>0
    sta.z x+1
    // [41] phi (byte*) gfx_init_chunky::gfxb#3 = (byte*) gfx_init_chunky::gfxb#5 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#2] -- register_copy 
    jmp __b2
    // [41] phi from gfx_init_chunky::@3 to gfx_init_chunky::@2 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2]
  __b2_from___b3:
    // [41] phi (byte) gfx_init_chunky::gfxbCpuBank#4 = (byte) gfx_init_chunky::gfxbCpuBank#8 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2#0] -- register_copy 
    // [41] phi (word) gfx_init_chunky::x#2 = (word) gfx_init_chunky::x#1 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2#1] -- register_copy 
    // [41] phi (byte*) gfx_init_chunky::gfxb#3 = (byte*) gfx_init_chunky::gfxb#1 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2#2] -- register_copy 
    jmp __b2
    // gfx_init_chunky::@2
  __b2:
    // [42] if((byte*) gfx_init_chunky::gfxb#3!=(word) $8000) goto gfx_init_chunky::@3 -- pbuz1_neq_vwuc1_then_la1 
    lda.z gfxb+1
    cmp #>$8000
    bne __b3_from___b2
    lda.z gfxb
    cmp #<$8000
    bne __b3_from___b2
    jmp __b4
    // gfx_init_chunky::@4
  __b4:
    // [43] (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 ← (byte) gfx_init_chunky::gfxbCpuBank#4 -- vbuaa=vbuxx 
    txa
    // [44] call dtvSetCpuBankSegment1 
    // [58] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1]
  dtvSetCpuBankSegment1_from___b4:
    // [58] phi (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 = (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy 
    jsr dtvSetCpuBankSegment1
    jmp __b7
    // gfx_init_chunky::@7
  __b7:
    // [45] (byte) gfx_init_chunky::gfxbCpuBank#2 ← ++ (byte) gfx_init_chunky::gfxbCpuBank#4 -- vbuxx=_inc_vbuxx 
    inx
    // [46] phi from gfx_init_chunky::@7 to gfx_init_chunky::@3 [phi:gfx_init_chunky::@7->gfx_init_chunky::@3]
  __b3_from___b7:
    // [46] phi (byte) gfx_init_chunky::gfxbCpuBank#8 = (byte) gfx_init_chunky::gfxbCpuBank#2 [phi:gfx_init_chunky::@7->gfx_init_chunky::@3#0] -- register_copy 
    // [46] phi (byte*) gfx_init_chunky::gfxb#4 = (byte*) 16384 [phi:gfx_init_chunky::@7->gfx_init_chunky::@3#1] -- pbuz1=pbuc1 
    lda #<$4000
    sta.z gfxb
    lda #>$4000
    sta.z gfxb+1
    jmp __b3
    // [46] phi from gfx_init_chunky::@2 to gfx_init_chunky::@3 [phi:gfx_init_chunky::@2->gfx_init_chunky::@3]
  __b3_from___b2:
    // [46] phi (byte) gfx_init_chunky::gfxbCpuBank#8 = (byte) gfx_init_chunky::gfxbCpuBank#4 [phi:gfx_init_chunky::@2->gfx_init_chunky::@3#0] -- register_copy 
    // [46] phi (byte*) gfx_init_chunky::gfxb#4 = (byte*) gfx_init_chunky::gfxb#3 [phi:gfx_init_chunky::@2->gfx_init_chunky::@3#1] -- register_copy 
    jmp __b3
    // gfx_init_chunky::@3
  __b3:
    // [47] (word~) gfx_init_chunky::$5 ← (word) gfx_init_chunky::x#2 + (byte) gfx_init_chunky::y#6 -- vwuz1=vwuz2_plus_vbuz3 
    lda.z y
    clc
    adc.z x
    sta.z __5
    lda #0
    adc.z x+1
    sta.z __5+1
    // [48] (byte) gfx_init_chunky::c#0 ← (byte)(word~) gfx_init_chunky::$5 -- vbuaa=_byte_vwuz1 
    lda.z __5
    // [49] *((byte*) gfx_init_chunky::gfxb#4) ← (byte) gfx_init_chunky::c#0 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (gfxb),y
    // [50] (byte*) gfx_init_chunky::gfxb#1 ← ++ (byte*) gfx_init_chunky::gfxb#4 -- pbuz1=_inc_pbuz1 
    inc.z gfxb
    bne !+
    inc.z gfxb+1
  !:
    // [51] (word) gfx_init_chunky::x#1 ← ++ (word) gfx_init_chunky::x#2 -- vwuz1=_inc_vwuz1 
    inc.z x
    bne !+
    inc.z x+1
  !:
    // [52] if((word) gfx_init_chunky::x#1!=(word) $140) goto gfx_init_chunky::@2 -- vwuz1_neq_vwuc1_then_la1 
    lda.z x+1
    cmp #>$140
    bne __b2_from___b3
    lda.z x
    cmp #<$140
    bne __b2_from___b3
    jmp __b5
    // gfx_init_chunky::@5
  __b5:
    // [53] (byte) gfx_init_chunky::y#1 ← ++ (byte) gfx_init_chunky::y#6 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [54] if((byte) gfx_init_chunky::y#1!=(byte) $33) goto gfx_init_chunky::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$33
    cmp.z y
    bne __b1_from___b5
    // [55] phi from gfx_init_chunky::@5 to gfx_init_chunky::@6 [phi:gfx_init_chunky::@5->gfx_init_chunky::@6]
  __b6_from___b5:
    jmp __b6
    // gfx_init_chunky::@6
  __b6:
    // [56] call dtvSetCpuBankSegment1 
    // [58] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1]
  dtvSetCpuBankSegment1_from___b6:
    // [58] phi (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 = (byte)(number) $4000/(number) $4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 
    lda #$4000/$4000
    jsr dtvSetCpuBankSegment1
    jmp __breturn
    // gfx_init_chunky::@return
  __breturn:
    // [57] return 
    rts
}
  // dtvSetCpuBankSegment1
// Set the memory pointed to by CPU BANK 1 SEGMENT ($4000-$7fff)
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
// The actual memory addressed will be $4000*cpuSegmentIdx
// dtvSetCpuBankSegment1(byte register(A) cpuBankIdx)
dtvSetCpuBankSegment1: {
    // Move CPU BANK 1 SEGMENT ($4000-$7fff)
    .label cpuBank = $ff
    // [59] *((const byte*) dtvSetCpuBankSegment1::cpuBank) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 -- _deref_pbuc1=vbuaa 
    sta cpuBank
    // asm { .byte$32,$dd lda$ff .byte$32,$00  }
    .byte $32, $dd
    lda.z $ff
    .byte $32, $00
    jmp __breturn
    // dtvSetCpuBankSegment1::@return
  __breturn:
    // [61] return 
    rts
}
  // File Data

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __b1
Removing instruction jmp __bend
Removing instruction jmp __b6
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __b4
Removing instruction jmp __b5
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b4
Removing instruction jmp __b7
Removing instruction jmp __b3
Removing instruction jmp __b5
Removing instruction jmp __b6
Removing instruction jmp __breturn
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda #0
Removing instruction lda #>0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label __bbegin with __b1
Replacing label __b1_from___b1 with __b1
Replacing label __b3_from___b2 with __b3
Replacing label __b3_from___b2 with __b3
Replacing label __b2_from___b3 with __b2
Replacing label __b2_from___b3 with __b2
Replacing label __b1_from___b5 with __b1
Removing instruction __bbegin:
Removing instruction __b1_from___bbegin:
Removing instruction __bend_from___b1:
Removing instruction __b1_from___b1:
Removing instruction __b1_from___b5:
Removing instruction __b2_from___b1:
Removing instruction __b2_from___b3:
Removing instruction __b3_from___b2:
Removing instruction __b6_from___b5:
Removing instruction dtvSetCpuBankSegment1_from___b6:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __bend:
Removing instruction gfx_init_chunky_from_main:
Removing instruction __b6:
Removing instruction __b1_from___b6:
Removing instruction __b4:
Removing instruction dtvSetCpuBankSegment1_from_gfx_init_chunky:
Removing instruction __b1_from_gfx_init_chunky:
Removing instruction __b4:
Removing instruction dtvSetCpuBankSegment1_from___b4:
Removing instruction __b7:
Removing instruction __b3_from___b7:
Removing instruction __b5:
Removing instruction __b6:
Removing instruction __breturn:
Removing instruction __breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Removing instruction jmp __b1
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction ldx #0 with TAX
Removing instruction __b1:
Succesful ASM optimization Pass5UnusedLabelElimination

FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(const byte*) BORDERCOL = (byte*) 53280
(const byte*) CHUNKY = (byte*) 32768
(const byte*) CIA2_PORT_A = (byte*) 56576
(const byte*) CIA2_PORT_A_DDR = (byte*) 56578
(const byte) DTV_BADLINE_OFF = (byte) $20
(const byte) DTV_CHUNKY = (byte) $40
(const byte) DTV_COLORRAM_OFF = (byte) $10
(const byte*) DTV_CONTROL = (byte*) 53308
(const byte*) DTV_FEATURE = (byte*) 53311
(const byte) DTV_FEATURE_ENABLE = (byte) 1
(const byte) DTV_HIGHCOLOR = (byte) 4
(const byte) DTV_LINEAR = (byte) 1
(const byte*) DTV_PALETTE = (byte*) 53760
(const byte*) DTV_PLANEB_MODULO_HI = (byte*) 53320
(const byte*) DTV_PLANEB_MODULO_LO = (byte*) 53319
(const byte*) DTV_PLANEB_START_HI = (byte*) 53323
(const byte*) DTV_PLANEB_START_LO = (byte*) 53321
(const byte*) DTV_PLANEB_START_MI = (byte*) 53322
(const byte*) DTV_PLANEB_STEP = (byte*) 53324
(const byte*) PROCPORT = (byte*) 1
(const byte*) PROCPORT_DDR = (byte*) 0
(const byte) PROCPORT_DDR_MEMORY_MASK = (byte) 7
(const byte) PROCPORT_RAM_IO = (byte) 5
(const byte*) RASTER = (byte*) 53266
(const byte*) VIC_CONTROL = (byte*) 53265
(const byte*) VIC_CONTROL2 = (byte*) 53270
(const byte) VIC_CSEL = (byte) 8
(const byte) VIC_DEN = (byte) $10
(const byte) VIC_ECM = (byte) $40
(const byte) VIC_MCM = (byte) $10
(const byte*) VIC_MEMORY = (byte*) 53272
(const byte) VIC_RSEL = (byte) 8
(void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx)
(label) dtvSetCpuBankSegment1::@return
(const byte*) dtvSetCpuBankSegment1::cpuBank = (byte*) 255
(byte) dtvSetCpuBankSegment1::cpuBankIdx
(byte) dtvSetCpuBankSegment1::cpuBankIdx#1 reg byte a 202.0
(byte) dtvSetCpuBankSegment1::cpuBankIdx#3 reg byte a 103.0
(void()) gfx_init_chunky()
(word~) gfx_init_chunky::$5 zp[2]:7 101.0
(label) gfx_init_chunky::@1
(label) gfx_init_chunky::@2
(label) gfx_init_chunky::@3
(label) gfx_init_chunky::@4
(label) gfx_init_chunky::@5
(label) gfx_init_chunky::@6
(label) gfx_init_chunky::@7
(label) gfx_init_chunky::@return
(byte) gfx_init_chunky::c
(byte) gfx_init_chunky::c#0 reg byte a 202.0
(byte*) gfx_init_chunky::gfxb
(byte*) gfx_init_chunky::gfxb#1 gfxb zp[2]:5 42.599999999999994
(byte*) gfx_init_chunky::gfxb#3 gfxb zp[2]:5 157.0
(byte*) gfx_init_chunky::gfxb#4 gfxb zp[2]:5 75.75
(byte*) gfx_init_chunky::gfxb#5 gfxb zp[2]:5 22.0
(byte) gfx_init_chunky::gfxbCpuBank
(byte) gfx_init_chunky::gfxbCpuBank#2 reg byte x 202.0
(byte) gfx_init_chunky::gfxbCpuBank#4 reg byte x 103.75
(byte) gfx_init_chunky::gfxbCpuBank#7 reg byte x 22.0
(byte) gfx_init_chunky::gfxbCpuBank#8 reg byte x 34.888888888888886
(word) gfx_init_chunky::x
(word) gfx_init_chunky::x#1 x zp[2]:3 151.5
(word) gfx_init_chunky::x#2 x zp[2]:3 30.299999999999997
(byte) gfx_init_chunky::y
(byte) gfx_init_chunky::y#1 y zp[1]:2 16.5
(byte) gfx_init_chunky::y#6 y zp[1]:2 9.461538461538462
(void()) main()
(byte~) main::$3 reg byte a 202.0
(byte~) main::$4 reg byte a 202.0
(byte~) main::$5 reg byte a 202.0
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(byte) main::j
(byte) main::j#1 reg byte x 16.5
(byte) main::j#2 reg byte x 22.0
(byte) main::rst
(byte) main::rst#1 reg byte x 57.714285714285715

reg byte x [ main::j#2 main::j#1 ]
zp[1]:2 [ gfx_init_chunky::y#6 gfx_init_chunky::y#1 ]
zp[2]:3 [ gfx_init_chunky::x#2 gfx_init_chunky::x#1 ]
reg byte x [ gfx_init_chunky::gfxbCpuBank#4 gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::gfxbCpuBank#8 gfx_init_chunky::gfxbCpuBank#2 ]
zp[2]:5 [ gfx_init_chunky::gfxb#4 gfx_init_chunky::gfxb#3 gfx_init_chunky::gfxb#5 gfx_init_chunky::gfxb#1 ]
reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#3 dtvSetCpuBankSegment1::cpuBankIdx#1 ]
reg byte x [ main::rst#1 ]
reg byte a [ main::$3 ]
reg byte a [ main::$4 ]
reg byte a [ main::$5 ]
zp[2]:7 [ gfx_init_chunky::$5 ]
reg byte a [ gfx_init_chunky::c#0 ]


FINAL ASSEMBLER
Score: 19882

  // File Comments
// C64DTV 8bpp charmode stretcher
  // Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
  // Global Constants & labels
  // Processor port data direction register
  .label PROCPORT_DDR = 0
  // Mask for PROCESSOR_PORT_DDR which allows only memory configuration to be written
  .const PROCPORT_DDR_MEMORY_MASK = 7
  // Processor Port Register controlling RAM/ROM configuration and the datasette
  .label PROCPORT = 1
  // RAM in $A000, $E000 I/O in $D000
  .const PROCPORT_RAM_IO = 5
  .label RASTER = $d012
  .label BORDERCOL = $d020
  .label VIC_CONTROL = $d011
  .const VIC_ECM = $40
  .const VIC_DEN = $10
  .const VIC_RSEL = 8
  .label VIC_CONTROL2 = $d016
  .const VIC_MCM = $10
  .const VIC_CSEL = 8
  .label VIC_MEMORY = $d018
  // CIA#2 Port A: Serial bus, RS-232, VIC memory bank
  .label CIA2_PORT_A = $dd00
  // CIA #2 Port A data direction register.
  .label CIA2_PORT_A_DDR = $dd02
  // Feature enables or disables the extra C64 DTV features
  .label DTV_FEATURE = $d03f
  .const DTV_FEATURE_ENABLE = 1
  // Controls the graphics modes of the C64 DTV
  .label DTV_CONTROL = $d03c
  .const DTV_LINEAR = 1
  .const DTV_HIGHCOLOR = 4
  .const DTV_COLORRAM_OFF = $10
  .const DTV_BADLINE_OFF = $20
  .const DTV_CHUNKY = $40
  // Defines colors for the 16 first colors ($00-$0f)
  .label DTV_PALETTE = $d200
  // Linear Graphics Plane B Counter Control
  .label DTV_PLANEB_START_LO = $d049
  .label DTV_PLANEB_START_MI = $d04a
  .label DTV_PLANEB_START_HI = $d04b
  .label DTV_PLANEB_STEP = $d04c
  .label DTV_PLANEB_MODULO_LO = $d047
  .label DTV_PLANEB_MODULO_HI = $d048
  // Plane with all pixels
  .label CHUNKY = $8000
  // @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: {
    // asm
    // asm { sei  }
    sei
    // *PROCPORT_DDR = PROCPORT_DDR_MEMORY_MASK
    // [5] *((const byte*) PROCPORT_DDR) ← (const byte) PROCPORT_DDR_MEMORY_MASK -- _deref_pbuc1=vbuc2 
    // Disable normal interrupt (prevent keyboard reading glitches and allows to hide basic/kernal)
    // Disable kernal & basic
    lda #PROCPORT_DDR_MEMORY_MASK
    sta PROCPORT_DDR
    // *PROCPORT = PROCPORT_RAM_IO
    // [6] *((const byte*) PROCPORT) ← (const byte) PROCPORT_RAM_IO -- _deref_pbuc1=vbuc2 
    lda #PROCPORT_RAM_IO
    sta PROCPORT
    // gfx_init_chunky()
    // [7] call gfx_init_chunky 
    // [38] phi from main to gfx_init_chunky [phi:main->gfx_init_chunky]
    jsr gfx_init_chunky
    // main::@6
    // *DTV_FEATURE = DTV_FEATURE_ENABLE
    // [8] *((const byte*) DTV_FEATURE) ← (const byte) DTV_FEATURE_ENABLE -- _deref_pbuc1=vbuc2 
    // Enable DTV extended modes
    lda #DTV_FEATURE_ENABLE
    sta DTV_FEATURE
    // *DTV_CONTROL = DTV_HIGHCOLOR | DTV_LINEAR | DTV_COLORRAM_OFF | DTV_CHUNKY | DTV_BADLINE_OFF
    // [9] *((const byte*) DTV_CONTROL) ← (const byte) DTV_HIGHCOLOR|(const byte) DTV_LINEAR|(const byte) DTV_COLORRAM_OFF|(const byte) DTV_CHUNKY|(const byte) DTV_BADLINE_OFF -- _deref_pbuc1=vbuc2 
    // 8BPP Pixel Cell Mode
    lda #DTV_HIGHCOLOR|DTV_LINEAR|DTV_COLORRAM_OFF|DTV_CHUNKY|DTV_BADLINE_OFF
    sta DTV_CONTROL
    // *VIC_CONTROL = VIC_DEN | VIC_ECM | VIC_RSEL | 3
    // [10] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 
    lda #VIC_DEN|VIC_ECM|VIC_RSEL|3
    sta VIC_CONTROL
    // *VIC_CONTROL2 = VIC_MCM | VIC_CSEL
    // [11] *((const byte*) VIC_CONTROL2) ← (const byte) VIC_MCM|(const byte) VIC_CSEL -- _deref_pbuc1=vbuc2 
    lda #VIC_MCM|VIC_CSEL
    sta VIC_CONTROL2
    // *DTV_PLANEB_START_LO = < CHUNKY
    // [12] *((const byte*) DTV_PLANEB_START_LO) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    // Plane B: CHUNKY
    lda #0
    sta DTV_PLANEB_START_LO
    // *DTV_PLANEB_START_MI = > CHUNKY
    // [13] *((const byte*) DTV_PLANEB_START_MI) ← >(const byte*) CHUNKY -- _deref_pbuc1=vbuc2 
    lda #>CHUNKY
    sta DTV_PLANEB_START_MI
    // *DTV_PLANEB_START_HI = 0
    // [14] *((const byte*) DTV_PLANEB_START_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_PLANEB_START_HI
    // *DTV_PLANEB_STEP = 8
    // [15] *((const byte*) DTV_PLANEB_STEP) ← (byte) 8 -- _deref_pbuc1=vbuc2 
    lda #8
    sta DTV_PLANEB_STEP
    // *DTV_PLANEB_MODULO_LO = 0
    // [16] *((const byte*) DTV_PLANEB_MODULO_LO) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta DTV_PLANEB_MODULO_LO
    // *DTV_PLANEB_MODULO_HI = 0
    // [17] *((const byte*) DTV_PLANEB_MODULO_HI) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    sta DTV_PLANEB_MODULO_HI
    // *CIA2_PORT_A_DDR = %00000011
    // [18] *((const byte*) CIA2_PORT_A_DDR) ← (byte) 3 -- _deref_pbuc1=vbuc2 
    // VIC Graphics Bank
    lda #3
    sta CIA2_PORT_A_DDR
    // *CIA2_PORT_A = %00000011 ^ (byte)((word)CHUNKY/$4000)
    // [19] *((const byte*) CIA2_PORT_A) ← (byte) 3^(byte)(word)(const byte*) CHUNKY/(word) $4000 -- _deref_pbuc1=vbuc2 
    // Set VIC Bank bits to output - all others to input
    lda #3^CHUNKY/$4000
    sta CIA2_PORT_A
    // *VIC_MEMORY = (byte)((((word)CHUNKY)&$3fff)/$40)  |   ((>(((word)CHUNKY)&$3fff))/4)
    // [20] *((const byte*) VIC_MEMORY) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    // Set VIC Bank
    // VIC memory
    lda #0
    sta VIC_MEMORY
    // [21] phi from main::@6 to main::@1 [phi:main::@6->main::@1]
    // [21] phi (byte) main::j#2 = (byte) 0 [phi:main::@6->main::@1#0] -- vbuxx=vbuc1 
    tax
  // DTV Palette - Grey Tones
    // [21] phi from main::@1 to main::@1 [phi:main::@1->main::@1]
    // [21] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@1->main::@1#0] -- register_copy 
    // main::@1
  __b1:
    // DTV_PALETTE[j] = j
    // [22] *((const byte*) DTV_PALETTE + (byte) main::j#2) ← (byte) main::j#2 -- pbuc1_derefidx_vbuxx=vbuxx 
    txa
    sta DTV_PALETTE,x
    // for(byte j : 0..$f)
    // [23] (byte) main::j#1 ← ++ (byte) main::j#2 -- vbuxx=_inc_vbuxx 
    inx
    // [24] if((byte) main::j#1!=(byte) $10) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$10
    bne __b1
    // main::@2
  __b2:
    // asm
    // asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize  }
    // Stabilize Raster
    ldx #$ff
  rff:
    cpx RASTER
    bne rff
  stabilize:
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    cpx RASTER
    beq eat+0
  eat:
    inx
    cpx #8
    bne stabilize
    // *VIC_CONTROL = VIC_DEN | VIC_ECM | VIC_RSEL | 3
    // [26] *((const byte*) VIC_CONTROL) ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL|(byte) 3 -- _deref_pbuc1=vbuc2 
    lda #VIC_DEN|VIC_ECM|VIC_RSEL|3
    sta VIC_CONTROL
    // *BORDERCOL = 0
    // [27] *((const byte*) BORDERCOL) ← (byte) 0 -- _deref_pbuc1=vbuc2 
    lda #0
    sta BORDERCOL
    // main::@3
  __b3:
    // while(*RASTER!=rst)
    // [28] if(*((const byte*) RASTER)!=(byte) $42) goto main::@3 -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda #$42
    cmp RASTER
    bne __b3
    // main::@4
    // asm
    // asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop  }
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    // main::@5
  __b5:
    // rst = *RASTER
    // [30] (byte) main::rst#1 ← *((const byte*) RASTER) -- vbuxx=_deref_pbuc1 
    ldx RASTER
    // rst&7
    // [31] (byte~) main::$3 ← (byte) main::rst#1 & (byte) 7 -- vbuaa=vbuxx_band_vbuc1 
    txa
    and #7
    // VIC_DEN | VIC_ECM | VIC_RSEL | (rst&7)
    // [32] (byte~) main::$4 ← (const byte) VIC_DEN|(const byte) VIC_ECM|(const byte) VIC_RSEL | (byte~) main::$3 -- vbuaa=vbuc1_bor_vbuaa 
    ora #VIC_DEN|VIC_ECM|VIC_RSEL
    // *VIC_CONTROL = VIC_DEN | VIC_ECM | VIC_RSEL | (rst&7)
    // [33] *((const byte*) VIC_CONTROL) ← (byte~) main::$4 -- _deref_pbuc1=vbuaa 
    sta VIC_CONTROL
    // rst*$10
    // [34] (byte~) main::$5 ← (byte) main::rst#1 << (byte) 4 -- vbuaa=vbuxx_rol_4 
    txa
    asl
    asl
    asl
    asl
    // *BORDERCOL = rst*$10
    // [35] *((const byte*) BORDERCOL) ← (byte~) main::$5 -- _deref_pbuc1=vbuaa 
    sta BORDERCOL
    // asm
    // asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop  }
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    nop
    // while (rst!=$f2)
    // [37] if((byte) main::rst#1!=(byte) $f2) goto main::@5 -- vbuxx_neq_vbuc1_then_la1 
    cpx #$f2
    bne __b5
    jmp __b2
}
  // gfx_init_chunky
// Initialize Plane with 8bpp chunky
gfx_init_chunky: {
    .label __5 = 7
    .label gfxb = 5
    .label x = 3
    .label y = 2
    // dtvSetCpuBankSegment1(gfxbCpuBank++)
    // [39] call dtvSetCpuBankSegment1 
    // [58] phi from gfx_init_chunky to dtvSetCpuBankSegment1 [phi:gfx_init_chunky->dtvSetCpuBankSegment1]
    // [58] phi (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 = (byte)(const byte*) CHUNKY/(word) $4000 [phi:gfx_init_chunky->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 
    lda #CHUNKY/$4000
    jsr dtvSetCpuBankSegment1
    // [40] phi from gfx_init_chunky to gfx_init_chunky::@1 [phi:gfx_init_chunky->gfx_init_chunky::@1]
    // [40] phi (byte) gfx_init_chunky::gfxbCpuBank#7 = ++(byte)(const byte*) CHUNKY/(word) $4000 [phi:gfx_init_chunky->gfx_init_chunky::@1#0] -- vbuxx=vbuc1 
    ldx #($ff&CHUNKY/$4000)+1
    // [40] phi (byte) gfx_init_chunky::y#6 = (byte) 0 [phi:gfx_init_chunky->gfx_init_chunky::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta.z y
    // [40] phi (byte*) gfx_init_chunky::gfxb#5 = (byte*) 16384 [phi:gfx_init_chunky->gfx_init_chunky::@1#2] -- pbuz1=pbuc1 
    lda #<$4000
    sta.z gfxb
    lda #>$4000
    sta.z gfxb+1
    // [40] phi from gfx_init_chunky::@5 to gfx_init_chunky::@1 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1]
    // [40] phi (byte) gfx_init_chunky::gfxbCpuBank#7 = (byte) gfx_init_chunky::gfxbCpuBank#8 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1#0] -- register_copy 
    // [40] phi (byte) gfx_init_chunky::y#6 = (byte) gfx_init_chunky::y#1 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1#1] -- register_copy 
    // [40] phi (byte*) gfx_init_chunky::gfxb#5 = (byte*) gfx_init_chunky::gfxb#1 [phi:gfx_init_chunky::@5->gfx_init_chunky::@1#2] -- register_copy 
    // gfx_init_chunky::@1
  __b1:
    // [41] phi from gfx_init_chunky::@1 to gfx_init_chunky::@2 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2]
    // [41] phi (byte) gfx_init_chunky::gfxbCpuBank#4 = (byte) gfx_init_chunky::gfxbCpuBank#7 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#0] -- register_copy 
    // [41] phi (word) gfx_init_chunky::x#2 = (word) 0 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#1] -- vwuz1=vwuc1 
    lda #<0
    sta.z x
    sta.z x+1
    // [41] phi (byte*) gfx_init_chunky::gfxb#3 = (byte*) gfx_init_chunky::gfxb#5 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#2] -- register_copy 
    // [41] phi from gfx_init_chunky::@3 to gfx_init_chunky::@2 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2]
    // [41] phi (byte) gfx_init_chunky::gfxbCpuBank#4 = (byte) gfx_init_chunky::gfxbCpuBank#8 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2#0] -- register_copy 
    // [41] phi (word) gfx_init_chunky::x#2 = (word) gfx_init_chunky::x#1 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2#1] -- register_copy 
    // [41] phi (byte*) gfx_init_chunky::gfxb#3 = (byte*) gfx_init_chunky::gfxb#1 [phi:gfx_init_chunky::@3->gfx_init_chunky::@2#2] -- register_copy 
    // gfx_init_chunky::@2
  __b2:
    // if(gfxb==$8000)
    // [42] if((byte*) gfx_init_chunky::gfxb#3!=(word) $8000) goto gfx_init_chunky::@3 -- pbuz1_neq_vwuc1_then_la1 
    lda.z gfxb+1
    cmp #>$8000
    bne __b3
    lda.z gfxb
    cmp #<$8000
    bne __b3
    // gfx_init_chunky::@4
    // dtvSetCpuBankSegment1(gfxbCpuBank++)
    // [43] (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 ← (byte) gfx_init_chunky::gfxbCpuBank#4 -- vbuaa=vbuxx 
    txa
    // [44] call dtvSetCpuBankSegment1 
    // [58] phi from gfx_init_chunky::@4 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1]
    // [58] phi (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 = (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 [phi:gfx_init_chunky::@4->dtvSetCpuBankSegment1#0] -- register_copy 
    jsr dtvSetCpuBankSegment1
    // gfx_init_chunky::@7
    // dtvSetCpuBankSegment1(gfxbCpuBank++);
    // [45] (byte) gfx_init_chunky::gfxbCpuBank#2 ← ++ (byte) gfx_init_chunky::gfxbCpuBank#4 -- vbuxx=_inc_vbuxx 
    inx
    // [46] phi from gfx_init_chunky::@7 to gfx_init_chunky::@3 [phi:gfx_init_chunky::@7->gfx_init_chunky::@3]
    // [46] phi (byte) gfx_init_chunky::gfxbCpuBank#8 = (byte) gfx_init_chunky::gfxbCpuBank#2 [phi:gfx_init_chunky::@7->gfx_init_chunky::@3#0] -- register_copy 
    // [46] phi (byte*) gfx_init_chunky::gfxb#4 = (byte*) 16384 [phi:gfx_init_chunky::@7->gfx_init_chunky::@3#1] -- pbuz1=pbuc1 
    lda #<$4000
    sta.z gfxb
    lda #>$4000
    sta.z gfxb+1
    // [46] phi from gfx_init_chunky::@2 to gfx_init_chunky::@3 [phi:gfx_init_chunky::@2->gfx_init_chunky::@3]
    // [46] phi (byte) gfx_init_chunky::gfxbCpuBank#8 = (byte) gfx_init_chunky::gfxbCpuBank#4 [phi:gfx_init_chunky::@2->gfx_init_chunky::@3#0] -- register_copy 
    // [46] phi (byte*) gfx_init_chunky::gfxb#4 = (byte*) gfx_init_chunky::gfxb#3 [phi:gfx_init_chunky::@2->gfx_init_chunky::@3#1] -- register_copy 
    // gfx_init_chunky::@3
  __b3:
    // x+y
    // [47] (word~) gfx_init_chunky::$5 ← (word) gfx_init_chunky::x#2 + (byte) gfx_init_chunky::y#6 -- vwuz1=vwuz2_plus_vbuz3 
    lda.z y
    clc
    adc.z x
    sta.z __5
    lda #0
    adc.z x+1
    sta.z __5+1
    // c = (byte)(x+y)
    // [48] (byte) gfx_init_chunky::c#0 ← (byte)(word~) gfx_init_chunky::$5 -- vbuaa=_byte_vwuz1 
    lda.z __5
    // *gfxb++ = c
    // [49] *((byte*) gfx_init_chunky::gfxb#4) ← (byte) gfx_init_chunky::c#0 -- _deref_pbuz1=vbuaa 
    ldy #0
    sta (gfxb),y
    // *gfxb++ = c;
    // [50] (byte*) gfx_init_chunky::gfxb#1 ← ++ (byte*) gfx_init_chunky::gfxb#4 -- pbuz1=_inc_pbuz1 
    inc.z gfxb
    bne !+
    inc.z gfxb+1
  !:
    // for (word x : 0..319)
    // [51] (word) gfx_init_chunky::x#1 ← ++ (word) gfx_init_chunky::x#2 -- vwuz1=_inc_vwuz1 
    inc.z x
    bne !+
    inc.z x+1
  !:
    // [52] if((word) gfx_init_chunky::x#1!=(word) $140) goto gfx_init_chunky::@2 -- vwuz1_neq_vwuc1_then_la1 
    lda.z x+1
    cmp #>$140
    bne __b2
    lda.z x
    cmp #<$140
    bne __b2
    // gfx_init_chunky::@5
    // for(byte y : 0..50)
    // [53] (byte) gfx_init_chunky::y#1 ← ++ (byte) gfx_init_chunky::y#6 -- vbuz1=_inc_vbuz1 
    inc.z y
    // [54] if((byte) gfx_init_chunky::y#1!=(byte) $33) goto gfx_init_chunky::@1 -- vbuz1_neq_vbuc1_then_la1 
    lda #$33
    cmp.z y
    bne __b1
    // [55] phi from gfx_init_chunky::@5 to gfx_init_chunky::@6 [phi:gfx_init_chunky::@5->gfx_init_chunky::@6]
    // gfx_init_chunky::@6
    // dtvSetCpuBankSegment1((byte)($4000/$4000))
    // [56] call dtvSetCpuBankSegment1 
    // [58] phi from gfx_init_chunky::@6 to dtvSetCpuBankSegment1 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1]
    // [58] phi (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 = (byte)(number) $4000/(number) $4000 [phi:gfx_init_chunky::@6->dtvSetCpuBankSegment1#0] -- vbuaa=vbuc1 
    lda #$4000/$4000
    jsr dtvSetCpuBankSegment1
    // gfx_init_chunky::@return
    // }
    // [57] return 
    rts
}
  // dtvSetCpuBankSegment1
// Set the memory pointed to by CPU BANK 1 SEGMENT ($4000-$7fff)
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
// The actual memory addressed will be $4000*cpuSegmentIdx
// dtvSetCpuBankSegment1(byte register(A) cpuBankIdx)
dtvSetCpuBankSegment1: {
    // Move CPU BANK 1 SEGMENT ($4000-$7fff)
    .label cpuBank = $ff
    // *cpuBank = cpuBankIdx
    // [59] *((const byte*) dtvSetCpuBankSegment1::cpuBank) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 -- _deref_pbuc1=vbuaa 
    sta cpuBank
    // asm
    // asm { .byte$32,$dd lda$ff .byte$32,$00  }
    .byte $32, $dd
    lda.z $ff
    .byte $32, $00
    // dtvSetCpuBankSegment1::@return
    // }
    // [61] return 
    rts
}
  // File Data

