
CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  (byte*) BORDERCOL#0 ← ((byte*)) (word/dword/signed dword) 53280
  (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  to:@3
main: scope:[main]  from @3
  call print_cls 
  to:main::@1
main::@1: scope:[main]  from main
  call mode_ctrl 
  to:main::@2
main::@2: scope:[main]  from main::@1
  to:main::@return
main::@return: scope:[main]  from main::@2
  return 
  to:@return
print_cls: scope:[print_cls]  from main
  (byte*) print_cls::sc#0 ← (byte*) SCREEN#0
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls print_cls::@1
  (byte*) print_cls::sc#2 ← phi( print_cls/(byte*) print_cls::sc#0 print_cls::@1/(byte*) print_cls::sc#1 )
  *((byte*) print_cls::sc#2) ← (byte) ' '
  (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
  (byte*~) print_cls::$0 ← (byte*) SCREEN#0 + (word/signed word/dword/signed dword) 1000
  (bool~) print_cls::$1 ← (byte*) print_cls::sc#1 != (byte*~) print_cls::$0
  if((bool~) print_cls::$1) goto print_cls::@1
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@1
  return 
  to:@return
mode_ctrl: scope:[mode_ctrl]  from main::@1
  to:mode_ctrl::@1
mode_ctrl::@1: scope:[mode_ctrl]  from mode_ctrl mode_ctrl::@4 mode_ctrl::@8
  if(true) goto mode_ctrl::@2
  to:mode_ctrl::@return
mode_ctrl::@2: scope:[mode_ctrl]  from mode_ctrl::@1
  (byte) mode_ctrl::before#0 ← *((byte*) BORDERCOL#0)
  (bool~) mode_ctrl::$0 ← (byte) mode_ctrl::before#0 == (byte/word/signed word/dword/signed dword) 255
  if((bool~) mode_ctrl::$0) goto mode_ctrl::@4
  to:mode_ctrl::@8
mode_ctrl::@4: scope:[mode_ctrl]  from mode_ctrl::@2
  *((byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
  to:mode_ctrl::@1
mode_ctrl::@8: scope:[mode_ctrl]  from mode_ctrl::@2
  *((byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
  to:mode_ctrl::@1
mode_ctrl::@return: scope:[mode_ctrl]  from mode_ctrl::@1
  return 
  to:@return
@3: scope:[]  from @begin
  call main 
  to:@4
@4: scope:[]  from @3
  to:@end
@end: scope:[]  from @4

SYMBOL TABLE SSA
(label) @3
(label) @4
(label) @begin
(label) @end
(byte*) BORDERCOL
(byte*) BORDERCOL#0
(byte*) SCREEN
(byte*) SCREEN#0
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@return
(void()) mode_ctrl()
(bool~) mode_ctrl::$0
(label) mode_ctrl::@1
(label) mode_ctrl::@2
(label) mode_ctrl::@4
(label) mode_ctrl::@8
(label) mode_ctrl::@return
(byte) mode_ctrl::before
(byte) mode_ctrl::before#0
(void()) print_cls()
(byte*~) print_cls::$0
(bool~) print_cls::$1
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#0
(byte*) print_cls::sc#1
(byte*) print_cls::sc#2

Culled Empty Block (label) main::@2
Culled Empty Block (label) @4
Successful SSA optimization Pass2CullEmptyBlocks
Simple Condition (bool~) print_cls::$1 [11] if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1
Simple Condition (bool~) mode_ctrl::$0 [16] if((byte) mode_ctrl::before#0==(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) BORDERCOL#0 = ((byte*))53280
Constant (const byte*) SCREEN#0 = ((byte*))1024
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte*) print_cls::sc#0 = SCREEN#0
Constant (const byte*) print_cls::$0 = SCREEN#0+1000
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [8] if(true) goto mode_ctrl::@2
Successful SSA optimization Pass2ConstantIfs
Removing unused block mode_ctrl::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Culled Empty Block (label) mode_ctrl::@1
Successful SSA optimization Pass2CullEmptyBlocks
Inlining constant with var siblings (const byte*) print_cls::sc#0
Constant inlined print_cls::$0 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000
Constant inlined print_cls::sc#0 = (const byte*) SCREEN#0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of mode_ctrl
Adding NOP phi() at start of print_cls
CALL GRAPH
Calls in [] to main:2 
Calls in [main] to print_cls:5 mode_ctrl:7 

Created 1 initial phi equivalence classes
Coalesced [20] print_cls::sc#3 ← print_cls::sc#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of mode_ctrl
Adding NOP phi() at start of print_cls

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@3
@3: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @3
  [3] phi()
main: scope:[main]  from @3
  [4] phi()
  [5] call print_cls 
  to:main::@1
main::@1: scope:[main]  from main
  [6] phi()
  [7] call mode_ctrl 
  to:main::@return
main::@return: scope:[main]  from main::@1
  [8] return 
  to:@return
mode_ctrl: scope:[mode_ctrl]  from main::@1
  [9] phi()
  to:mode_ctrl::@2
mode_ctrl::@2: scope:[mode_ctrl]  from mode_ctrl mode_ctrl::@4 mode_ctrl::@8
  [10] (byte) mode_ctrl::before#0 ← *((const byte*) BORDERCOL#0)
  [11] if((byte) mode_ctrl::before#0==(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4
  to:mode_ctrl::@8
mode_ctrl::@8: scope:[mode_ctrl]  from mode_ctrl::@2
  [12] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3
  to:mode_ctrl::@2
mode_ctrl::@4: scope:[mode_ctrl]  from mode_ctrl::@2
  [13] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2
  to:mode_ctrl::@2
print_cls: scope:[print_cls]  from main
  [14] phi()
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls print_cls::@1
  [15] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) SCREEN#0 print_cls::@1/(byte*) print_cls::sc#1 )
  [16] *((byte*) print_cls::sc#2) ← (byte) ' '
  [17] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2
  [18] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@1
  [19] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte*) BORDERCOL
(byte*) SCREEN
(void()) main()
(void()) mode_ctrl()
(byte) mode_ctrl::before
(byte) mode_ctrl::before#0 22.0
(void()) print_cls()
(byte*) print_cls::sc
(byte*) print_cls::sc#1 16.5
(byte*) print_cls::sc#2 16.5

Initial phi equivalence classes
[ print_cls::sc#2 print_cls::sc#1 ]
Added variable mode_ctrl::before#0 to zero page equivalence class [ mode_ctrl::before#0 ]
Complete equivalence classes
[ print_cls::sc#2 print_cls::sc#1 ]
[ mode_ctrl::before#0 ]
Allocated zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ]
Allocated zp ZP_BYTE:4 [ mode_ctrl::before#0 ]

INITIAL ASM
//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label BORDERCOL = $d020
  .label SCREEN = $400
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @3 [phi:@begin->@3]
b3_from_bbegin:
  jmp b3
//SEG5 @3
b3:
//SEG6 [2] call main 
//SEG7 [4] phi from @3 to main [phi:@3->main]
main_from_b3:
  jsr main
//SEG8 [3] phi from @3 to @end [phi:@3->@end]
bend_from_b3:
  jmp bend
//SEG9 @end
bend:
//SEG10 main
main: {
  //SEG11 [5] call print_cls 
  //SEG12 [14] phi from main to print_cls [phi:main->print_cls]
  print_cls_from_main:
    jsr print_cls
  //SEG13 [6] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
    jmp b1
  //SEG14 main::@1
  b1:
  //SEG15 [7] call mode_ctrl 
  //SEG16 [9] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl]
  mode_ctrl_from_b1:
    jsr mode_ctrl
    jmp breturn
  //SEG17 main::@return
  breturn:
  //SEG18 [8] return 
    rts
}
//SEG19 mode_ctrl
mode_ctrl: {
    .label before = 4
    jmp b2
  //SEG20 mode_ctrl::@2
  b2:
  //SEG21 [10] (byte) mode_ctrl::before#0 ← *((const byte*) BORDERCOL#0) -- vbuz1=_deref_pbuc1 
    lda BORDERCOL
    sta before
  //SEG22 [11] if((byte) mode_ctrl::before#0==(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4 -- vbuz1_eq_vbuc1_then_la1 
    lda before
    cmp #$ff
    beq b4
    jmp b8
  //SEG23 mode_ctrl::@8
  b8:
  //SEG24 [12] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta BORDERCOL
    jmp b2
  //SEG25 mode_ctrl::@4
  b4:
  //SEG26 [13] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2 
    lda #2
    sta BORDERCOL
    jmp b2
}
//SEG27 print_cls
print_cls: {
    .label sc = 2
  //SEG28 [15] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  b1_from_print_cls:
  //SEG29 [15] phi (byte*) print_cls::sc#2 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta sc
    lda #>SCREEN
    sta sc+1
    jmp b1
  //SEG30 [15] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  b1_from_b1:
  //SEG31 [15] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
    jmp b1
  //SEG32 print_cls::@1
  b1:
  //SEG33 [16] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG34 [17] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG35 [18] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>SCREEN+$3e8
    bne b1_from_b1
    lda sc
    cmp #<SCREEN+$3e8
    bne b1_from_b1
    jmp breturn
  //SEG36 print_cls::@return
  breturn:
  //SEG37 [19] return 
    rts
}

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [12] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 [ ] ( main:2::mode_ctrl:7 [ ] ) always clobbers reg byte a 
Statement [13] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 [ ] ( main:2::mode_ctrl:7 [ ] ) always clobbers reg byte a 
Statement [16] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] ) always clobbers reg byte a reg byte y 
Statement [18] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] ) always clobbers reg byte a 
Potential registers zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ] : zp ZP_WORD:2 , 
Potential registers zp ZP_BYTE:4 [ mode_ctrl::before#0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [print_cls] 33: zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ] 
Uplift Scope [mode_ctrl] 22: zp ZP_BYTE:4 [ mode_ctrl::before#0 ] 
Uplift Scope [main] 
Uplift Scope [] 

Uplifting [print_cls] best 992 combination zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ] 
Uplifting [mode_ctrl] best 932 combination reg byte a [ mode_ctrl::before#0 ] 
Uplifting [main] best 932 combination 
Uplifting [] best 932 combination 

ASSEMBLER BEFORE OPTIMIZATION
//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label BORDERCOL = $d020
  .label SCREEN = $400
//SEG3 @begin
bbegin:
//SEG4 [1] phi from @begin to @3 [phi:@begin->@3]
b3_from_bbegin:
  jmp b3
//SEG5 @3
b3:
//SEG6 [2] call main 
//SEG7 [4] phi from @3 to main [phi:@3->main]
main_from_b3:
  jsr main
//SEG8 [3] phi from @3 to @end [phi:@3->@end]
bend_from_b3:
  jmp bend
//SEG9 @end
bend:
//SEG10 main
main: {
  //SEG11 [5] call print_cls 
  //SEG12 [14] phi from main to print_cls [phi:main->print_cls]
  print_cls_from_main:
    jsr print_cls
  //SEG13 [6] phi from main to main::@1 [phi:main->main::@1]
  b1_from_main:
    jmp b1
  //SEG14 main::@1
  b1:
  //SEG15 [7] call mode_ctrl 
  //SEG16 [9] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl]
  mode_ctrl_from_b1:
    jsr mode_ctrl
    jmp breturn
  //SEG17 main::@return
  breturn:
  //SEG18 [8] return 
    rts
}
//SEG19 mode_ctrl
mode_ctrl: {
    jmp b2
  //SEG20 mode_ctrl::@2
  b2:
  //SEG21 [10] (byte) mode_ctrl::before#0 ← *((const byte*) BORDERCOL#0) -- vbuaa=_deref_pbuc1 
    lda BORDERCOL
  //SEG22 [11] if((byte) mode_ctrl::before#0==(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4 -- vbuaa_eq_vbuc1_then_la1 
    cmp #$ff
    beq b4
    jmp b8
  //SEG23 mode_ctrl::@8
  b8:
  //SEG24 [12] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta BORDERCOL
    jmp b2
  //SEG25 mode_ctrl::@4
  b4:
  //SEG26 [13] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2 
    lda #2
    sta BORDERCOL
    jmp b2
}
//SEG27 print_cls
print_cls: {
    .label sc = 2
  //SEG28 [15] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  b1_from_print_cls:
  //SEG29 [15] phi (byte*) print_cls::sc#2 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta sc
    lda #>SCREEN
    sta sc+1
    jmp b1
  //SEG30 [15] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  b1_from_b1:
  //SEG31 [15] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
    jmp b1
  //SEG32 print_cls::@1
  b1:
  //SEG33 [16] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG34 [17] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG35 [18] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>SCREEN+$3e8
    bne b1_from_b1
    lda sc
    cmp #<SCREEN+$3e8
    bne b1_from_b1
    jmp breturn
  //SEG36 print_cls::@return
  breturn:
  //SEG37 [19] return 
    rts
}

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b3
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b2
Removing instruction jmp b8
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction b3_from_bbegin:
Removing instruction b3:
Removing instruction main_from_b3:
Removing instruction bend_from_b3:
Removing instruction b1_from_main:
Removing instruction mode_ctrl_from_b1:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1:
Removing instruction breturn:
Removing instruction b8:
Removing instruction b1_from_print_cls:
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
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination

FINAL SYMBOL TABLE
(label) @3
(label) @begin
(label) @end
(byte*) BORDERCOL
(const byte*) BORDERCOL#0 BORDERCOL = ((byte*))(word/dword/signed dword) 53280
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(void()) main()
(label) main::@1
(label) main::@return
(void()) mode_ctrl()
(label) mode_ctrl::@2
(label) mode_ctrl::@4
(label) mode_ctrl::@8
(byte) mode_ctrl::before
(byte) mode_ctrl::before#0 reg byte a 22.0
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:2 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:2 16.5

zp ZP_WORD:2 [ print_cls::sc#2 print_cls::sc#1 ]
reg byte a [ mode_ctrl::before#0 ]


FINAL ASSEMBLER
Score: 764

//SEG0 File Comments
//SEG1 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG2 Global Constants & labels
  .label BORDERCOL = $d020
  .label SCREEN = $400
//SEG3 @begin
//SEG4 [1] phi from @begin to @3 [phi:@begin->@3]
//SEG5 @3
//SEG6 [2] call main 
//SEG7 [4] phi from @3 to main [phi:@3->main]
//SEG8 [3] phi from @3 to @end [phi:@3->@end]
//SEG9 @end
//SEG10 main
main: {
  //SEG11 [5] call print_cls 
  //SEG12 [14] phi from main to print_cls [phi:main->print_cls]
    jsr print_cls
  //SEG13 [6] phi from main to main::@1 [phi:main->main::@1]
  //SEG14 main::@1
  //SEG15 [7] call mode_ctrl 
  //SEG16 [9] phi from main::@1 to mode_ctrl [phi:main::@1->mode_ctrl]
    jsr mode_ctrl
  //SEG17 main::@return
  //SEG18 [8] return 
    rts
}
//SEG19 mode_ctrl
mode_ctrl: {
  //SEG20 mode_ctrl::@2
  b2:
  //SEG21 [10] (byte) mode_ctrl::before#0 ← *((const byte*) BORDERCOL#0) -- vbuaa=_deref_pbuc1 
    lda BORDERCOL
  //SEG22 [11] if((byte) mode_ctrl::before#0==(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4 -- vbuaa_eq_vbuc1_then_la1 
    cmp #$ff
    beq b4
  //SEG23 mode_ctrl::@8
  //SEG24 [12] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 3 -- _deref_pbuc1=vbuc2 
    lda #3
    sta BORDERCOL
    jmp b2
  //SEG25 mode_ctrl::@4
  b4:
  //SEG26 [13] *((const byte*) BORDERCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 2 -- _deref_pbuc1=vbuc2 
    lda #2
    sta BORDERCOL
    jmp b2
}
//SEG27 print_cls
print_cls: {
    .label sc = 2
  //SEG28 [15] phi from print_cls to print_cls::@1 [phi:print_cls->print_cls::@1]
  //SEG29 [15] phi (byte*) print_cls::sc#2 = (const byte*) SCREEN#0 [phi:print_cls->print_cls::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta sc
    lda #>SCREEN
    sta sc+1
  //SEG30 [15] phi from print_cls::@1 to print_cls::@1 [phi:print_cls::@1->print_cls::@1]
  //SEG31 [15] phi (byte*) print_cls::sc#2 = (byte*) print_cls::sc#1 [phi:print_cls::@1->print_cls::@1#0] -- register_copy 
  //SEG32 print_cls::@1
  b1:
  //SEG33 [16] *((byte*) print_cls::sc#2) ← (byte) ' ' -- _deref_pbuz1=vbuc1 
    lda #' '
    ldy #0
    sta (sc),y
  //SEG34 [17] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 -- pbuz1=_inc_pbuz1 
    inc sc
    bne !+
    inc sc+1
  !:
  //SEG35 [18] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda sc+1
    cmp #>SCREEN+$3e8
    bne b1
    lda sc
    cmp #<SCREEN+$3e8
    bne b1
  //SEG36 print_cls::@return
  //SEG37 [19] return 
    rts
}

