1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00

Allowing ZP coalescing whenever registers are the same type (before variables had to be the same type).

This commit is contained in:
jespergravgaard 2017-12-26 00:24:40 +01:00
parent e3353acbc9
commit 42b026a757
26 changed files with 5234 additions and 6087 deletions

View File

@ -191,9 +191,14 @@ public class AsmFragmentManager {
synths.add(new FragmentSynthesis("(vwsz.)=(vwsz.|vwsc.)", null, null, "$1=$2", null, mapSToU));
synths.add(new FragmentSynthesis("(vwsz.)=(vwsz.|vwsc.)_(plus|band|bxor|bor)_(vwsz.|vwsc.)", null, null, "$1=$2_$3_$4", null, mapSToU));
synths.add(new FragmentSynthesis("(vwuz.)=(vwuz.)_(plus|minus|band|bxor|bor)_vb.c(.)", null, null, "$1=$2_$3_vwuc$4", null, null));
synths.add(new FragmentSynthesis("(vwuz.)=vb.c(.)_(plus|minus|band|bxor|bor)_(vwuz.)", null, null, "$1=vwuc$2_$3_$4", null, null));
synths.add(new FragmentSynthesis("(vwsz.)=(vwsz.)_(plus|minus|band|bxor|bor)_vb.c(.)", null, null, "$1=$2_$3_vwsc$4", null, null));
synths.add(new FragmentSynthesis("(vwsz.)=vb.c(.)_(plus|minus|band|bxor|bor)_(vwsz.)", null, null, "$1=vwsc$2_$3_$4", null, null));
synths.add(new FragmentSynthesis("(vwuz.)=(vwuc.)_(plus|band|bxor|bor)_(vwuz.)", null, null, "$1=$4_$3_$2", null, null));
synths.add(new FragmentSynthesis("(vwsz.)=(vwsc.)_(plus|band|bxor|bor)_(vwsz.)", null, null, "$1=$4_$3_$2", null, null));
synths.add(new FragmentSynthesis("(vbuz.|vbuaa|vbuxx|vbuyy)=_(lo|hi)_vws(z.|c.)", null, null, "$1=_$2_vwu$3", null, mapSToU));
// Use Z1/Z2 ASM to synthesize Z1-only code

View File

@ -0,0 +1 @@
// do nothing

View File

@ -0,0 +1,4 @@
lda {c2}
sta {z1}
lda {c1}
sta {z1}+1

View File

@ -32,8 +32,8 @@ public class Pass4ZeroPageCoalesce extends Pass2Base {
for (LiveRangeEquivalenceClass myEquivalenceClass : liveRangeEquivalenceClassSet.getEquivalenceClasses()) {
for (LiveRangeEquivalenceClass otherEquivalenceClass : liveRangeEquivalenceClassSet.getEquivalenceClasses()) {
if (!myEquivalenceClass.equals(otherEquivalenceClass)) {
if(canCoalesce(myEquivalenceClass, otherEquivalenceClass)) {
getLog().append("Coalescing zero page register [ "+myEquivalenceClass+" ] with [ "+otherEquivalenceClass+" ]" );
if (canCoalesce(myEquivalenceClass, otherEquivalenceClass)) {
getLog().append("Coalescing zero page register [ " + myEquivalenceClass + " ] with [ " + otherEquivalenceClass + " ]");
liveRangeEquivalenceClassSet.consolidate(myEquivalenceClass, otherEquivalenceClass);
// Reset the program register allocation
getProgram().getLiveRangeEquivalenceClassSet().storeRegisterAllocation();
@ -50,19 +50,23 @@ public class Pass4ZeroPageCoalesce extends Pass2Base {
Variable myVariable = getProgram().getSymbolInfos().getVariable(myVariableRef);
VariableRef otherVariableRef = otherEquivalenceClass.getVariables().get(0);
Variable otherVariable = getProgram().getSymbolInfos().getVariable(otherVariableRef);
if (myVariable.getType().equals(otherVariable.getType())) {
// Types match
if (myEquivalenceClass.getRegister().isZp() && otherEquivalenceClass.getRegister().isZp()) {
// Both registers are on Zero Page
// Types match
Registers.Register myRegister = myEquivalenceClass.getRegister();
Registers.Register otherRegister = otherEquivalenceClass.getRegister();
if (myRegister.isZp() && otherRegister.isZp()) {
// Both registers are on Zero Page
if (myRegister.getType().equals(otherRegister.getType())) {
// Both registers have the same Zero Page size
// Reset the program register allocation to the one specified in the equivalence class set
getProgram().getLiveRangeEquivalenceClassSet().storeRegisterAllocation();
// Try out the coalesce to test if it works
for (VariableRef var : otherEquivalenceClass.getVariables()) {
Variable variable = getProgram().getSymbolInfos().getVariable(var);
variable.setAllocation(myEquivalenceClass.getRegister());
variable.setAllocation(myRegister);
}
if(!Pass4RegisterUpliftCombinations.isAllocationOverlapping(getProgram())) {
if (!Pass4RegisterUpliftCombinations.isAllocationOverlapping(getProgram())) {
// Live ranges do not overlap
// Perform coalesce!
return true;

View File

@ -34,9 +34,7 @@ word getFAC() {
sty $fe
sta $ff
}
word w = 0;
<w = *memLo;
>w = *memHi;
word w = { *memHi, *memLo};
return w;
}

View File

@ -1,13 +0,0 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
jsr main
main: {
lda #$55
ldy #$aa
jsr $b391
jsr $b1aa
sty $fe
sta $ff
rts
}

View File

@ -1,16 +0,0 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@1
@1: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
[6] return [ ] ( main:2 [ ] )
to:@return

View File

@ -1,439 +0,0 @@
void main() {
// Load word register Y,A into FAC (floating point accumulator)
asm {
lda #$55
ldy #$aa
jsr $b391
}
// Load FAC (floating point accumulator) integer part into word register Y,A
asm {
jsr $b1aa
sty $fe
sta $ff
}
}
PROGRAM
proc (void()) main()
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
main::@return:
return
endproc // main()
call main
SYMBOLS
(void()) main()
(label) main::@return
INITIAL CONTROL FLOW GRAPH
@begin: scope:[] from
to:@1
main: scope:[main] from
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
call main
to:@end
@end: scope:[] from @1
CONTROL FLOW GRAPH
@begin: scope:[] from
to:@1
main: scope:[main] from
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
call main
to:@end
@end: scope:[] from @1
PROCEDURE MODIFY VARIABLE ANALYSIS
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
@begin: scope:[] from
to:@1
main: scope:[main] from @1
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
call main param-assignment
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @2
Completing Phi functions...
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@1
main: scope:[main] from @1
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
call main param-assignment
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @2
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
@begin: scope:[] from
to:@1
main: scope:[main] from @1
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
call main param-assignment
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @2
INITIAL SSA SYMBOL TABLE
(label) @1
(label) @2
(label) @begin
(label) @end
(void()) main()
(label) main::@return
Culled Empty Block (label) @2
Succesful SSA optimization Pass2CullEmptyBlocks
CONTROL FLOW GRAPH
@begin: scope:[] from
to:@1
main: scope:[main] from @1
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
return
to:@return
@1: scope:[] from @begin
call main param-assignment
to:@end
@end: scope:[] from @1
FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(void()) main()
(label) main::@return
Block Sequence Planned @begin @1 @end main main::@return
Block Sequence Planned @begin @1 @end main main::@return
CONTROL FLOW GRAPH - PHI LIFTED
@begin: scope:[] from
to:@1
@1: scope:[] from @begin
call main param-assignment
to:@end
@end: scope:[] from @1
main: scope:[main] from @1
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
return
to:@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:2
Propagating live ranges...
CONTROL FLOW GRAPH - LIVE RANGES FOUND
@begin: scope:[] from
[0] phi() [ ]
to:@1
@1: scope:[] from @begin
[1] phi() [ ]
[2] call main param-assignment [ ]
to:@end
@end: scope:[] from @1
[3] phi() [ ]
main: scope:[main] from @1
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
[6] return [ ]
to:@return
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Block Sequence Planned @begin @1 @end main main::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
Propagating live ranges...
CONTROL FLOW GRAPH - BEFORE EFFECTIVE LIVE RANGES
@begin: scope:[] from
[0] phi() [ ]
to:@1
@1: scope:[] from @begin
[1] phi() [ ]
[2] call main param-assignment [ ]
to:@end
@end: scope:[] from @1
[3] phi() [ ]
main: scope:[main] from @1
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
[6] return [ ]
to:@return
CONTROL FLOW GRAPH - PHI MEM COALESCED
@begin: scope:[] from
[0] phi() [ ] ( )
to:@1
@1: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @1
[3] phi() [ ] ( )
main: scope:[main] from @1
asm { lda#$55ldy#$aajsr$b391 }
asm { jsr$b1aasty$festa$ff }
to:main::@return
main::@return: scope:[main] from main
[6] return [ ] ( main:2 [ ] )
to:@return
DOMINATORS
@begin dominated by @begin
@1 dominated by @1 @begin
@end dominated by @1 @begin @end
main dominated by @1 @begin main
main::@return dominated by main::@return @1 @begin main
NATURAL LOOPS
Found 0 loops in scope []
Found 0 loops in scope [main]
NATURAL LOOPS WITH DEPTH
VARIABLE REGISTER WEIGHTS
(void()) main()
Initial phi equivalence classes
Complete equivalence classes
INITIAL ASM
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
jmp b1
//SEG4 @1
b1:
//SEG5 [2] call main param-assignment [ ] ( )
jsr main
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
jmp bend
//SEG7 @end
bend:
//SEG8 main
main: {
//SEG9 asm { lda#$55ldy#$aajsr$b391 }
lda #$55
ldy #$aa
jsr $b391
//SEG10 asm { jsr$b1aasty$festa$ff }
jsr $b1aa
sty $fe
sta $ff
jmp breturn
//SEG11 main::@return
breturn:
//SEG12 [6] return [ ] ( main:2 [ ] )
rts
}
REGISTER UPLIFT POTENTIAL REGISTERS
Statement asm { lda#$55ldy#$aajsr$b391 } always clobbers reg byte a reg byte y
REGISTER UPLIFT SCOPES
Uplift Scope [main]
Uplift Scope []
Uplifting [main] best 45 combination
Uplifting [] best 45 combination
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
ASSEMBLER
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
//SEG4 @1
b1:
//SEG5 [2] call main param-assignment [ ] ( )
jsr main
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
//SEG7 @end
bend:
//SEG8 main
main: {
//SEG9 asm { lda#$55ldy#$aajsr$b391 }
lda #$55
ldy #$aa
jsr $b391
//SEG10 asm { jsr$b1aasty$festa$ff }
jsr $b1aa
sty $fe
sta $ff
//SEG11 main::@return
breturn:
//SEG12 [6] return [ ] ( main:2 [ ] )
rts
}
Removing instruction bbegin:
Removing instruction b1_from_bbegin:
Removing instruction bend_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
ASSEMBLER
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
//SEG4 @1
b1:
//SEG5 [2] call main param-assignment [ ] ( )
jsr main
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
//SEG7 @end
bend:
//SEG8 main
main: {
//SEG9 asm { lda#$55ldy#$aajsr$b391 }
lda #$55
ldy #$aa
jsr $b391
//SEG10 asm { jsr$b1aasty$festa$ff }
jsr $b1aa
sty $fe
sta $ff
//SEG11 main::@return
breturn:
//SEG12 [6] return [ ] ( main:2 [ ] )
rts
}
Removing instruction b1:
Removing instruction bend:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
ASSEMBLER
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
//SEG4 @1
//SEG5 [2] call main param-assignment [ ] ( )
jsr main
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
//SEG7 @end
//SEG8 main
main: {
//SEG9 asm { lda#$55ldy#$aajsr$b391 }
lda #$55
ldy #$aa
jsr $b391
//SEG10 asm { jsr$b1aasty$festa$ff }
jsr $b1aa
sty $fe
sta $ff
//SEG11 main::@return
//SEG12 [6] return [ ] ( main:2 [ ] )
rts
}
FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(void()) main()
(label) main::@return
FINAL CODE
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
//SEG2 @begin
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
//SEG4 @1
//SEG5 [2] call main param-assignment [ ] ( )
jsr main
//SEG6 [3] phi from @1 to @end [phi:@1->@end]
//SEG7 @end
//SEG8 main
main: {
//SEG9 asm { lda#$55ldy#$aajsr$b391 }
lda #$55
ldy #$aa
jsr $b391
//SEG10 asm { jsr$b1aasty$festa$ff }
jsr $b1aa
sty $fe
sta $ff
//SEG11 main::@return
//SEG12 [6] return [ ] ( main:2 [ ] )
rts
}

View File

@ -1,6 +0,0 @@
(label) @1
(label) @begin
(label) @end
(void()) main()
(label) main::@return

View File

@ -5,7 +5,7 @@
jsr main
main: {
.label w = 3
.label sc = 5
.label sc = 3
.label l = 2
ldx #0
b1:
@ -16,9 +16,6 @@ main: {
sta w+1
lda l
sta w
sta sc
lda w+1
sta sc+1
ldy #0
lda #'*'
sta (sc),y

View File

@ -1148,9 +1148,9 @@ Uplifting [main] best 6693 combination zp ZP_BYTE:3 [ main::l#2 main::l#1 ] reg
Uplifting [] best 6693 combination
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ main::l#2 main::l#1 ]
Uplifting [main] best 6693 combination zp ZP_BYTE:3 [ main::l#2 main::l#1 ]
Coalescing zero page register [ zp ZP_WORD:5 [ main::w#0 ] ] with [ zp ZP_WORD:7 [ main::sc#0 ] ]
Allocated (was zp ZP_BYTE:3) zp ZP_BYTE:2 [ main::l#2 main::l#1 ]
Allocated (was zp ZP_WORD:5) zp ZP_WORD:3 [ main::w#0 ]
Allocated (was zp ZP_WORD:7) zp ZP_WORD:5 [ main::sc#0 ]
Allocated (was zp ZP_WORD:5) zp ZP_WORD:3 [ main::w#0 main::sc#0 ]
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp b1
@ -1182,7 +1182,7 @@ bend:
//SEG9 main
main: {
.label w = 3
.label sc = 5
.label sc = 3
.label l = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
@ -1211,94 +1211,7 @@ main: {
sta w+1
lda l
sta w
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz2
lda w
sta sc
lda w+1
sta sc+1
//SEG23 [10] *((byte*) main::sc#0) ← (byte) '*' [ main::h#4 main::l#2 ] ( main:2 [ main::h#4 main::l#2 ] ) -- _deref_pbuz1=vbuc1
ldy #0
lda #'*'
sta (sc),y
//SEG24 [11] (byte) main::l#1 ← ++ (byte) main::l#2 [ main::h#4 main::l#1 ] ( main:2 [ main::h#4 main::l#1 ] ) -- vbuz1=_inc_vbuz1
inc l
//SEG25 [12] if((byte) main::l#1!=(byte/signed byte/word/signed word) 8) goto main::@2 [ main::h#4 main::l#1 ] ( main:2 [ main::h#4 main::l#1 ] ) -- vbuz1_neq_vbuc1_then_la1
lda l
cmp #8
bne b2_from_b2
//SEG26 main::@3
b3:
//SEG27 [13] (byte) main::h#1 ← ++ (byte) main::h#4 [ main::h#1 ] ( main:2 [ main::h#1 ] ) -- vbuxx=_inc_vbuxx
inx
//SEG28 [14] if((byte) main::h#1!=(byte/signed byte/word/signed word) 2) goto main::@1 [ main::h#1 ] ( main:2 [ main::h#1 ] ) -- vbuxx_neq_vbuc1_then_la1
cpx #2
bne b1_from_b3
//SEG29 main::@return
breturn:
//SEG30 [15] return [ ] ( main:2 [ ] )
rts
his: .byte >SCREEN, >SCREEN+$100
}
Removing instruction lda w
Succesful ASM optimization Pass5UnnecesaryLoadElimination
ASSEMBLER
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
.const SCREEN = $400
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
//SEG4 @1
b1:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @1 to main [phi:@1->main]
main_from_b1:
jsr main
//SEG7 [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
//SEG8 @end
bend:
//SEG9 main
main: {
.label w = 3
.label sc = 5
.label l = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
//SEG11 [5] phi (byte) main::h#4 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
ldx #0
jmp b1
//SEG12 [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
b1_from_b3:
//SEG13 [5] phi (byte) main::h#4 = (byte) main::h#1 [phi:main::@3->main::@1#0] -- register_copy
//SEG14 main::@1
b1:
//SEG15 [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
b2_from_b1:
//SEG16 [6] phi (byte) main::l#2 = (byte/signed byte/word/signed word) 4 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
lda #4
sta l
jmp b2
//SEG17 [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
b2_from_b2:
//SEG18 [6] phi (byte) main::l#2 = (byte) main::l#1 [phi:main::@2->main::@2#0] -- register_copy
//SEG19 main::@2
b2:
//SEG20 [7] (byte~) main::$3 ← (const byte[]) main::his#0 *idx (byte) main::h#4 [ main::h#4 main::l#2 main::$3 ] ( main:2 [ main::h#4 main::l#2 main::$3 ] ) -- vbuaa=pbuc1_derefidx_vbuxx
lda his,x
//SEG21 [8] (word) main::w#0 ← (byte~) main::$3 w= (byte) main::l#2 [ main::h#4 main::l#2 main::w#0 ] ( main:2 [ main::h#4 main::l#2 main::w#0 ] ) -- vwuz1=vbuaa_word_vbuz2
sta w+1
lda l
sta w
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz2
sta sc
lda w+1
sta sc+1
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz1
//SEG23 [10] *((byte*) main::sc#0) ← (byte) '*' [ main::h#4 main::l#2 ] ( main:2 [ main::h#4 main::l#2 ] ) -- _deref_pbuz1=vbuc1
ldy #0
lda #'*'
@ -1353,7 +1266,7 @@ bend:
//SEG9 main
main: {
.label w = 3
.label sc = 5
.label sc = 3
.label l = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
b1_from_main:
@ -1379,10 +1292,7 @@ main: {
sta w+1
lda l
sta w
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz2
sta sc
lda w+1
sta sc+1
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz1
//SEG23 [10] *((byte*) main::sc#0) ← (byte) '*' [ main::h#4 main::l#2 ] ( main:2 [ main::h#4 main::l#2 ] ) -- _deref_pbuz1=vbuc1
ldy #0
lda #'*'
@ -1431,7 +1341,7 @@ ASSEMBLER
//SEG9 main
main: {
.label w = 3
.label sc = 5
.label sc = 3
.label l = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
//SEG11 [5] phi (byte) main::h#4 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
@ -1456,10 +1366,7 @@ main: {
sta w+1
lda l
sta w
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz2
sta sc
lda w+1
sta sc+1
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz1
//SEG23 [10] *((byte*) main::sc#0) ← (byte) '*' [ main::h#4 main::l#2 ] ( main:2 [ main::h#4 main::l#2 ] ) -- _deref_pbuz1=vbuc1
ldy #0
lda #'*'
@ -1503,7 +1410,7 @@ ASSEMBLER
//SEG9 main
main: {
.label w = 3
.label sc = 5
.label sc = 3
.label l = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
//SEG11 [5] phi (byte) main::h#4 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
@ -1526,10 +1433,7 @@ main: {
sta w+1
lda l
sta w
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz2
sta sc
lda w+1
sta sc+1
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz1
//SEG23 [10] *((byte*) main::sc#0) ← (byte) '*' [ main::h#4 main::l#2 ] ( main:2 [ main::h#4 main::l#2 ] ) -- _deref_pbuz1=vbuc1
ldy #0
lda #'*'
@ -1573,15 +1477,14 @@ FINAL SYMBOL TABLE
(byte) main::l#1 l zp ZP_BYTE:2 151.5
(byte) main::l#2 l zp ZP_BYTE:2 60.599999999999994
(byte*) main::sc
(byte*) main::sc#0 sc zp ZP_WORD:5 202.0
(byte*) main::sc#0 sc zp ZP_WORD:3 202.0
(word) main::w
(word) main::w#0 w zp ZP_WORD:3 202.0
reg byte x [ main::h#4 main::h#1 ]
zp ZP_BYTE:2 [ main::l#2 main::l#1 ]
reg byte a [ main::$3 ]
zp ZP_WORD:3 [ main::w#0 ]
zp ZP_WORD:5 [ main::sc#0 ]
zp ZP_WORD:3 [ main::w#0 main::sc#0 ]
FINAL CODE
//SEG0 Basic Upstart
@ -1601,7 +1504,7 @@ FINAL CODE
//SEG9 main
main: {
.label w = 3
.label sc = 5
.label sc = 3
.label l = 2
//SEG10 [5] phi from main to main::@1 [phi:main->main::@1]
//SEG11 [5] phi (byte) main::h#4 = (byte/signed byte/word/signed word) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1
@ -1624,10 +1527,7 @@ main: {
sta w+1
lda l
sta w
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz2
sta sc
lda w+1
sta sc+1
//SEG22 [9] (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 [ main::h#4 main::l#2 main::sc#0 ] ( main:2 [ main::h#4 main::l#2 main::sc#0 ] ) -- pbuz1=_ptrby_vwuz1
//SEG23 [10] *((byte*) main::sc#0) ← (byte) '*' [ main::h#4 main::l#2 ] ( main:2 [ main::h#4 main::l#2 ] ) -- _deref_pbuz1=vbuc1
ldy #0
lda #'*'

View File

@ -18,12 +18,11 @@
(byte) main::l#1 l zp ZP_BYTE:2 151.5
(byte) main::l#2 l zp ZP_BYTE:2 60.599999999999994
(byte*) main::sc
(byte*) main::sc#0 sc zp ZP_WORD:5 202.0
(byte*) main::sc#0 sc zp ZP_WORD:3 202.0
(word) main::w
(word) main::w#0 w zp ZP_WORD:3 202.0
reg byte x [ main::h#4 main::h#1 ]
zp ZP_BYTE:2 [ main::l#2 main::l#1 ]
reg byte a [ main::$3 ]
zp ZP_WORD:3 [ main::w#0 ]
zp ZP_WORD:5 [ main::sc#0 ]
zp ZP_WORD:3 [ main::w#0 main::sc#0 ]

View File

@ -49,8 +49,8 @@ scroll_soft: {
rts
}
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
lsr current_bit
lda current_bit
@ -65,12 +65,12 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
lda #<CHARGEN
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
lda #$80
sta current_bit

View File

@ -8669,12 +8669,12 @@ Uplifting [scroll_hard] best 9094 combination reg byte a [ scroll_hard::$31 ]
Attempting to uplift remaining variables inzp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ]
Uplifting [] best 9094 combination zp ZP_BYTE:3 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ]
Coalescing zero page register [ zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 ] ] with [ zp ZP_WORD:14 [ fillscreen::cursor#2 fillscreen::cursor#1 ] ]
Coalescing zero page register [ zp ZP_WORD:18 [ scroll_bit::c#0 ] ] with [ zp ZP_WORD:20 [ scroll_bit::$4 ] ]
Coalescing zero page register [ zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 fillscreen::cursor#2 fillscreen::cursor#1 ] ] with [ zp ZP_WORD:18 [ scroll_bit::c#0 ] ]
Coalescing zero page register [ zp ZP_WORD:4 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 fillscreen::cursor#2 fillscreen::cursor#1 scroll_bit::c#0 ] ] with [ zp ZP_WORD:20 [ scroll_bit::$4 ] ]
Allocated (was zp ZP_BYTE:3) zp ZP_BYTE:2 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ]
Allocated (was zp ZP_WORD:4) zp ZP_WORD:3 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 fillscreen::cursor#2 fillscreen::cursor#1 ]
Allocated (was zp ZP_WORD:4) zp ZP_WORD:3 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 fillscreen::cursor#2 fillscreen::cursor#1 scroll_bit::c#0 scroll_bit::$4 ]
Allocated (was zp ZP_WORD:7) zp ZP_WORD:5 [ scroll_bit::sc#2 scroll_bit::sc#1 ]
Allocated (was zp ZP_WORD:11) zp ZP_WORD:7 [ nxt#18 nxt#31 nxt#14 nxt#36 nxt#19 ]
Allocated (was zp ZP_WORD:18) zp ZP_WORD:9 [ scroll_bit::c#0 scroll_bit::$4 ]
Removing instruction jmp b6
Removing instruction jmp bend
Removing instruction jmp b2
@ -8832,8 +8832,8 @@ scroll_soft: {
}
//SEG55 scroll_bit
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
//SEG56 [21] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word) 1 [ nxt#31 current_chargen#27 current_bit#5 ] ( main:2::scroll_soft:10::scroll_bit:17 [ nxt#31 current_chargen#27 current_bit#5 ] ) -- vbuz1=vbuz1_ror_1
lsr current_bit
@ -8863,13 +8863,13 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz2
lda #<CHARGEN
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
//SEG67 [30] phi from scroll_bit::@8 to scroll_bit::@1 [phi:scroll_bit::@8->scroll_bit::@1]
b1_from_b8:
@ -9253,8 +9253,8 @@ scroll_soft: {
}
//SEG55 scroll_bit
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
//SEG56 [21] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word) 1 [ nxt#31 current_chargen#27 current_bit#5 ] ( main:2::scroll_soft:10::scroll_bit:17 [ nxt#31 current_chargen#27 current_bit#5 ] ) -- vbuz1=vbuz1_ror_1
lsr current_bit
@ -9283,13 +9283,13 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz2
lda #<CHARGEN
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
//SEG67 [30] phi from scroll_bit::@8 to scroll_bit::@1 [phi:scroll_bit::@8->scroll_bit::@1]
b1_from_b8:
@ -9656,8 +9656,8 @@ scroll_soft: {
}
//SEG55 scroll_bit
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
//SEG56 [21] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word) 1 [ nxt#31 current_chargen#27 current_bit#5 ] ( main:2::scroll_soft:10::scroll_bit:17 [ nxt#31 current_chargen#27 current_bit#5 ] ) -- vbuz1=vbuz1_ror_1
lsr current_bit
@ -9684,13 +9684,13 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz2
lda #<CHARGEN
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
//SEG67 [30] phi from scroll_bit::@8 to scroll_bit::@1 [phi:scroll_bit::@8->scroll_bit::@1]
//SEG68 [30] phi (byte*) nxt#36 = (byte*) nxt#19 [phi:scroll_bit::@8->scroll_bit::@1#0] -- register_copy
@ -10020,8 +10020,8 @@ scroll_soft: {
}
//SEG55 scroll_bit
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
//SEG56 [21] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word) 1 [ nxt#31 current_chargen#27 current_bit#5 ] ( main:2::scroll_soft:10::scroll_bit:17 [ nxt#31 current_chargen#27 current_bit#5 ] ) -- vbuz1=vbuz1_ror_1
lsr current_bit
@ -10048,13 +10048,13 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz2
lda #<CHARGEN
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
//SEG67 [30] phi from scroll_bit::@8 to scroll_bit::@1 [phi:scroll_bit::@8->scroll_bit::@1]
//SEG68 [30] phi (byte*) nxt#36 = (byte*) nxt#19 [phi:scroll_bit::@8->scroll_bit::@1#0] -- register_copy
@ -10383,8 +10383,8 @@ scroll_soft: {
}
//SEG55 scroll_bit
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
//SEG56 [21] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word) 1 [ nxt#31 current_chargen#27 current_bit#5 ] ( main:2::scroll_soft:10::scroll_bit:17 [ nxt#31 current_chargen#27 current_bit#5 ] ) -- vbuz1=vbuz1_ror_1
lsr current_bit
@ -10411,13 +10411,13 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz2
lda #<CHARGEN
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
//SEG67 [30] phi from scroll_bit::@8 to scroll_bit::@1 [phi:scroll_bit::@8->scroll_bit::@1]
//SEG68 [30] phi (byte*) nxt#36 = (byte*) nxt#19 [phi:scroll_bit::@8->scroll_bit::@1#0] -- register_copy
@ -10747,8 +10747,8 @@ scroll_soft: {
}
//SEG55 scroll_bit
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
//SEG56 [21] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word) 1 [ nxt#31 current_chargen#27 current_bit#5 ] ( main:2::scroll_soft:10::scroll_bit:17 [ nxt#31 current_chargen#27 current_bit#5 ] ) -- vbuz1=vbuz1_ror_1
lsr current_bit
@ -10775,13 +10775,13 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz2
lda #<CHARGEN
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
//SEG67 [30] phi from scroll_bit::@8 to scroll_bit::@1 [phi:scroll_bit::@8->scroll_bit::@1]
//SEG68 [30] phi (byte*) nxt#36 = (byte*) nxt#19 [phi:scroll_bit::@8->scroll_bit::@1#0] -- register_copy
@ -11114,8 +11114,8 @@ scroll_soft: {
}
//SEG55 scroll_bit
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
//SEG56 [21] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word) 1 [ nxt#31 current_chargen#27 current_bit#5 ] ( main:2::scroll_soft:10::scroll_bit:17 [ nxt#31 current_chargen#27 current_bit#5 ] ) -- vbuz1=vbuz1_ror_1
lsr current_bit
@ -11142,13 +11142,13 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz2
lda #<CHARGEN
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
//SEG67 [30] phi from scroll_bit::@8 to scroll_bit::@1 [phi:scroll_bit::@8->scroll_bit::@1]
//SEG68 [30] phi (byte*) nxt#36 = (byte*) nxt#19 [phi:scroll_bit::@8->scroll_bit::@1#0] -- register_copy
@ -11469,8 +11469,8 @@ scroll_soft: {
}
//SEG55 scroll_bit
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
//SEG56 [21] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word) 1 [ nxt#31 current_chargen#27 current_bit#5 ] ( main:2::scroll_soft:10::scroll_bit:17 [ nxt#31 current_chargen#27 current_bit#5 ] ) -- vbuz1=vbuz1_ror_1
lsr current_bit
@ -11497,13 +11497,13 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz2
lda #<CHARGEN
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
//SEG67 [30] phi from scroll_bit::@8 to scroll_bit::@1 [phi:scroll_bit::@8->scroll_bit::@1]
//SEG68 [30] phi (byte*) nxt#36 = (byte*) nxt#19 [phi:scroll_bit::@8->scroll_bit::@1#0] -- register_copy
@ -11823,8 +11823,8 @@ scroll_soft: {
}
//SEG55 scroll_bit
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
//SEG56 [21] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word) 1 [ nxt#31 current_chargen#27 current_bit#5 ] ( main:2::scroll_soft:10::scroll_bit:17 [ nxt#31 current_chargen#27 current_bit#5 ] ) -- vbuz1=vbuz1_ror_1
lsr current_bit
@ -11851,13 +11851,13 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz2
lda #<CHARGEN
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
//SEG67 [30] phi from scroll_bit::@8 to scroll_bit::@1 [phi:scroll_bit::@8->scroll_bit::@1]
//SEG68 [30] phi (byte*) nxt#36 = (byte*) nxt#19 [phi:scroll_bit::@8->scroll_bit::@1#0] -- register_copy
@ -12133,7 +12133,7 @@ FINAL SYMBOL TABLE
(void()) scroll_bit()
(byte~) scroll_bit::$10 reg byte a 22.0
(byte~) scroll_bit::$3 reg byte a 4.0
(word~) scroll_bit::$4 $4 zp ZP_WORD:9 4.0
(word~) scroll_bit::$4 $4 zp ZP_WORD:3 4.0
(label) scroll_bit::@1
(label) scroll_bit::@2
(label) scroll_bit::@3
@ -12148,7 +12148,7 @@ FINAL SYMBOL TABLE
(byte) scroll_bit::bits
(byte) scroll_bit::bits#0 reg byte a 22.0
(word) scroll_bit::c
(word) scroll_bit::c#0 c zp ZP_WORD:9 4.0
(word) scroll_bit::c#0 c zp ZP_WORD:3 4.0
(byte) scroll_bit::r
(byte) scroll_bit::r#1 reg byte x 16.5
(byte) scroll_bit::r#2 reg byte x 4.125
@ -12192,7 +12192,7 @@ FINAL SYMBOL TABLE
reg byte x [ scroll#18 scroll#10 scroll#3 ]
zp ZP_BYTE:2 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ]
zp ZP_WORD:3 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 fillscreen::cursor#2 fillscreen::cursor#1 ]
zp ZP_WORD:3 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 fillscreen::cursor#2 fillscreen::cursor#1 scroll_bit::c#0 scroll_bit::$4 ]
reg byte x [ scroll_bit::r#2 scroll_bit::r#1 ]
zp ZP_WORD:5 [ scroll_bit::sc#2 scroll_bit::sc#1 ]
reg byte a [ scroll_bit::b#2 ]
@ -12201,7 +12201,6 @@ zp ZP_WORD:7 [ nxt#18 nxt#31 nxt#14 nxt#36 nxt#19 ]
reg byte a [ next_char::return#1 next_char::c#0 next_char::c#1 ]
reg byte a [ next_char::return#0 ]
reg byte a [ scroll_bit::$3 ]
zp ZP_WORD:9 [ scroll_bit::c#0 scroll_bit::$4 ]
reg byte a [ scroll_bit::bits#0 ]
reg byte a [ scroll_bit::$10 ]
reg byte a [ scroll_hard::$17 ]
@ -12321,8 +12320,8 @@ scroll_soft: {
}
//SEG55 scroll_bit
scroll_bit: {
.label _4 = 9
.label c = 9
.label _4 = 3
.label c = 3
.label sc = 5
//SEG56 [21] (byte) current_bit#5 ← (byte) current_bit#29 >> (byte/signed byte/word/signed word) 1 [ nxt#31 current_chargen#27 current_bit#5 ] ( main:2::scroll_soft:10::scroll_bit:17 [ nxt#31 current_chargen#27 current_bit#5 ] ) -- vbuz1=vbuz1_ror_1
lsr current_bit
@ -12349,13 +12348,13 @@ scroll_bit: {
rol _4+1
asl _4
rol _4+1
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz2
lda #<CHARGEN
//SEG66 [29] (byte*) current_chargen#5 ← (const byte*) CHARGEN#0 + (word~) scroll_bit::$4 [ current_chargen#5 nxt#19 ] ( main:2::scroll_soft:10::scroll_bit:17 [ current_chargen#5 nxt#19 ] ) -- pbuz1=pbuc1_plus_vwuz1
lda current_chargen
clc
adc _4
adc #<CHARGEN
sta current_chargen
lda #>CHARGEN
adc _4+1
lda current_chargen+1
adc #>CHARGEN
sta current_chargen+1
//SEG67 [30] phi from scroll_bit::@8 to scroll_bit::@1 [phi:scroll_bit::@8->scroll_bit::@1]
//SEG68 [30] phi (byte*) nxt#36 = (byte*) nxt#19 [phi:scroll_bit::@8->scroll_bit::@1#0] -- register_copy

View File

@ -63,7 +63,7 @@
(void()) scroll_bit()
(byte~) scroll_bit::$10 reg byte a 22.0
(byte~) scroll_bit::$3 reg byte a 4.0
(word~) scroll_bit::$4 $4 zp ZP_WORD:9 4.0
(word~) scroll_bit::$4 $4 zp ZP_WORD:3 4.0
(label) scroll_bit::@1
(label) scroll_bit::@2
(label) scroll_bit::@3
@ -78,7 +78,7 @@
(byte) scroll_bit::bits
(byte) scroll_bit::bits#0 reg byte a 22.0
(word) scroll_bit::c
(word) scroll_bit::c#0 c zp ZP_WORD:9 4.0
(word) scroll_bit::c#0 c zp ZP_WORD:3 4.0
(byte) scroll_bit::r
(byte) scroll_bit::r#1 reg byte x 16.5
(byte) scroll_bit::r#2 reg byte x 4.125
@ -122,7 +122,7 @@
reg byte x [ scroll#18 scroll#10 scroll#3 ]
zp ZP_BYTE:2 [ current_bit#29 current_bit#12 current_bit#21 current_bit#5 ]
zp ZP_WORD:3 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 fillscreen::cursor#2 fillscreen::cursor#1 ]
zp ZP_WORD:3 [ current_chargen#27 current_chargen#11 current_chargen#19 current_chargen#5 fillscreen::cursor#2 fillscreen::cursor#1 scroll_bit::c#0 scroll_bit::$4 ]
reg byte x [ scroll_bit::r#2 scroll_bit::r#1 ]
zp ZP_WORD:5 [ scroll_bit::sc#2 scroll_bit::sc#1 ]
reg byte a [ scroll_bit::b#2 ]
@ -131,7 +131,6 @@ zp ZP_WORD:7 [ nxt#18 nxt#31 nxt#14 nxt#36 nxt#19 ]
reg byte a [ next_char::return#1 next_char::c#0 next_char::c#1 ]
reg byte a [ next_char::return#0 ]
reg byte a [ scroll_bit::$3 ]
zp ZP_WORD:9 [ scroll_bit::c#0 scroll_bit::$4 ]
reg byte a [ scroll_bit::bits#0 ]
reg byte a [ scroll_bit::$10 ]
reg byte a [ scroll_hard::$17 ]

View File

@ -50,10 +50,10 @@ main: {
jmp b2
}
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
lda ypos+1
bpl b1
sec
@ -171,7 +171,7 @@ anim: {
rts
}
init: {
.label sc = $c
.label sc = 2
lda #1
sta SPRITES_ENABLE
lda #0

View File

@ -4330,10 +4330,11 @@ Uplifting [init] best 8724 combination zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] r
Uplifting [] best 8724 combination zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#22 ] zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ] zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ] zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ] zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ]
Uplifting [anim] best 8706 combination zp ZP_WORD:15 [ anim::$10 ] zp ZP_WORD:19 [ anim::$12 ] reg byte a [ anim::$14 ] reg byte a [ anim::$15 ] reg byte a [ anim::$16 ] zp ZP_WORD:21 [ anim::sprite_y#0 ] zp ZP_WORD:17 [ anim::sprite_x#0 ]
Uplifting [main] best 8706 combination
Coalescing zero page register [ zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ] ] with [ zp ZP_WORD:12 [ init::sc#2 init::sc#1 ] ]
Coalescing zero page register [ zp ZP_WORD:15 [ anim::$10 ] ] with [ zp ZP_WORD:17 [ anim::sprite_x#0 ] ]
Coalescing zero page register [ zp ZP_WORD:19 [ anim::$12 ] ] with [ zp ZP_WORD:21 [ anim::sprite_y#0 ] ]
Allocated (was zp ZP_WORD:15) zp ZP_WORD:14 [ anim::$10 anim::sprite_x#0 ]
Allocated (was zp ZP_WORD:19) zp ZP_WORD:16 [ anim::$12 anim::sprite_y#0 ]
Allocated (was zp ZP_WORD:15) zp ZP_WORD:12 [ anim::$10 anim::sprite_x#0 ]
Allocated (was zp ZP_WORD:19) zp ZP_WORD:14 [ anim::$12 anim::sprite_y#0 ]
Removing instruction jmp b3
Removing instruction jmp bend
Removing instruction jmp b2
@ -4456,10 +4457,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1_from_anim
@ -4632,7 +4633,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -4820,10 +4821,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1_from_anim
@ -4993,7 +4994,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -5181,10 +5182,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -5351,7 +5352,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -5527,10 +5528,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -5693,7 +5694,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -5855,10 +5856,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -6021,7 +6022,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -6181,10 +6182,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -6347,7 +6348,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -6507,10 +6508,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -6673,7 +6674,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -6835,10 +6836,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -7000,7 +7001,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -7156,10 +7157,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -7321,7 +7322,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -7477,10 +7478,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -7641,7 +7642,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -7797,10 +7798,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -7960,7 +7961,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -8115,10 +8116,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -8278,7 +8279,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE
@ -8373,8 +8374,8 @@ FINAL SYMBOL TABLE
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word) 1
(void()) anim()
(signed word~) anim::$10 $10 zp ZP_WORD:14 4.0
(signed word~) anim::$12 $12 zp ZP_WORD:16 4.0
(signed word~) anim::$10 $10 zp ZP_WORD:12 4.0
(signed word~) anim::$12 $12 zp ZP_WORD:14 4.0
(byte~) anim::$14 reg byte a 4.0
(byte~) anim::$15 reg byte a 4.0
(byte~) anim::$16 reg byte a 4.0
@ -8384,9 +8385,9 @@ FINAL SYMBOL TABLE
(label) anim::@5
(label) anim::@return
(signed word) anim::sprite_x
(signed word) anim::sprite_x#0 sprite_x zp ZP_WORD:14 0.8571428571428571
(signed word) anim::sprite_x#0 sprite_x zp ZP_WORD:12 0.8571428571428571
(signed word) anim::sprite_y
(signed word) anim::sprite_y#0 sprite_y zp ZP_WORD:16 1.3333333333333333
(signed word) anim::sprite_y#0 sprite_y zp ZP_WORD:14 1.3333333333333333
(signed word) g
(const signed word) g#0 g = -(byte/signed byte/word/signed word) 5
(void()) init()
@ -8397,8 +8398,8 @@ FINAL SYMBOL TABLE
(byte) init::i#1 reg byte x 16.5
(byte) init::i#2 reg byte x 16.5
(byte*) init::sc
(byte*) init::sc#1 sc zp ZP_WORD:12 16.5
(byte*) init::sc#2 sc zp ZP_WORD:12 16.5
(byte*) init::sc#1 sc zp ZP_WORD:2 16.5
(byte*) init::sc#2 sc zp ZP_WORD:2 16.5
(void()) main()
(label) main::@2
(label) main::@3
@ -8427,15 +8428,14 @@ FINAL SYMBOL TABLE
(signed word) yvel_init#13 yvel_init zp ZP_WORD:4 3.0
(signed word) yvel_init#3 yvel_init zp ZP_WORD:4 2.0
zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ]
zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 init::sc#2 init::sc#1 ]
zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ]
zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#22 ]
zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ]
zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ]
zp ZP_WORD:12 [ init::sc#2 init::sc#1 ]
reg byte x [ init::i#2 init::i#1 ]
zp ZP_WORD:14 [ anim::$10 anim::sprite_x#0 ]
zp ZP_WORD:16 [ anim::$12 anim::sprite_y#0 ]
zp ZP_WORD:12 [ anim::$10 anim::sprite_x#0 ]
zp ZP_WORD:14 [ anim::$12 anim::sprite_y#0 ]
reg byte a [ anim::$14 ]
reg byte a [ anim::$15 ]
reg byte a [ anim::$16 ]
@ -8527,10 +8527,10 @@ main: {
}
//SEG33 anim
anim: {
.label _10 = $e
.label _12 = $10
.label sprite_x = $e
.label sprite_y = $10
.label _10 = $c
.label _12 = $e
.label sprite_x = $c
.label sprite_y = $e
//SEG34 [12] if((signed word) ypos#13>=(byte/signed byte/word/signed word) 0) goto anim::@1 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ( main:2::anim:9 [ yvel#12 xpos#12 ypos#13 xvel#12 yvel_init#13 ] ) -- vwsz1_ge_0_then_la1
lda ypos+1
bpl b1
@ -8690,7 +8690,7 @@ anim: {
}
//SEG75 init
init: {
.label sc = $c
.label sc = 2
//SEG76 [34] *((const byte*) SPRITES_ENABLE#0) ← (byte/signed byte/word/signed word) 1 [ ] ( main:2::init:5 [ ] ) -- _deref_pbuc1=vbuc2
lda #1
sta SPRITES_ENABLE

View File

@ -26,8 +26,8 @@
(byte) WHITE
(const byte) WHITE#0 WHITE = (byte/signed byte/word/signed word) 1
(void()) anim()
(signed word~) anim::$10 $10 zp ZP_WORD:14 4.0
(signed word~) anim::$12 $12 zp ZP_WORD:16 4.0
(signed word~) anim::$10 $10 zp ZP_WORD:12 4.0
(signed word~) anim::$12 $12 zp ZP_WORD:14 4.0
(byte~) anim::$14 reg byte a 4.0
(byte~) anim::$15 reg byte a 4.0
(byte~) anim::$16 reg byte a 4.0
@ -37,9 +37,9 @@
(label) anim::@5
(label) anim::@return
(signed word) anim::sprite_x
(signed word) anim::sprite_x#0 sprite_x zp ZP_WORD:14 0.8571428571428571
(signed word) anim::sprite_x#0 sprite_x zp ZP_WORD:12 0.8571428571428571
(signed word) anim::sprite_y
(signed word) anim::sprite_y#0 sprite_y zp ZP_WORD:16 1.3333333333333333
(signed word) anim::sprite_y#0 sprite_y zp ZP_WORD:14 1.3333333333333333
(signed word) g
(const signed word) g#0 g = -(byte/signed byte/word/signed word) 5
(void()) init()
@ -50,8 +50,8 @@
(byte) init::i#1 reg byte x 16.5
(byte) init::i#2 reg byte x 16.5
(byte*) init::sc
(byte*) init::sc#1 sc zp ZP_WORD:12 16.5
(byte*) init::sc#2 sc zp ZP_WORD:12 16.5
(byte*) init::sc#1 sc zp ZP_WORD:2 16.5
(byte*) init::sc#2 sc zp ZP_WORD:2 16.5
(void()) main()
(label) main::@2
(label) main::@3
@ -80,15 +80,14 @@
(signed word) yvel_init#13 yvel_init zp ZP_WORD:4 3.0
(signed word) yvel_init#3 yvel_init zp ZP_WORD:4 2.0
zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 ]
zp ZP_WORD:2 [ xvel#12 xvel#10 xvel#14 init::sc#2 init::sc#1 ]
zp ZP_WORD:4 [ yvel_init#13 yvel_init#11 yvel#4 yvel_init#3 ]
zp ZP_WORD:6 [ yvel#9 yvel#12 yvel#10 yvel#22 ]
zp ZP_WORD:8 [ xpos#9 xpos#12 xpos#10 ]
zp ZP_WORD:10 [ ypos#10 ypos#13 ypos#11 ]
zp ZP_WORD:12 [ init::sc#2 init::sc#1 ]
reg byte x [ init::i#2 init::i#1 ]
zp ZP_WORD:14 [ anim::$10 anim::sprite_x#0 ]
zp ZP_WORD:16 [ anim::$12 anim::sprite_y#0 ]
zp ZP_WORD:12 [ anim::$10 anim::sprite_x#0 ]
zp ZP_WORD:14 [ anim::$12 anim::sprite_y#0 ]
reg byte a [ anim::$14 ]
reg byte a [ anim::$15 ]
reg byte a [ anim::$16 ]

View File

@ -96,7 +96,7 @@ print_ln: {
rts
}
print_word: {
.label w = 9
.label w = 7
lda w+1
tax
jsr print_byte
@ -132,15 +132,12 @@ print_char: {
rts
}
getFAC: {
.label w = 9
.label return = 9
.label return = 7
jsr $b1aa
sty $fe
sta $ff
lda memLo
sta w
lda #0
sta w+1
sta return
lda memHi
sta return+1
rts
@ -188,11 +185,7 @@ divMEMbyFAC: {
rts
}
setFAC: {
.label w = 9
lda w
sta prepareMEM.mem
lda w+1
sta prepareMEM.mem+1
.label w = 7
jsr prepareMEM
ldy $fe
lda $ff

View File

@ -125,84 +125,83 @@ print_char::@return: scope:[print_char] from print_char
to:@return
getFAC: scope:[getFAC] from main::@13
asm { jsr$b1aasty$festa$ff }
[61] (word) getFAC::w#1 ← (byte/signed byte/word/signed word) 0 lo= *((const byte*) memLo#0) [ getFAC::w#1 ] ( main:2::getFAC:28 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::w#1 ] )
[62] (word) getFAC::return#0 ← (word) getFAC::w#1 hi= *((const byte*) memHi#0) [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#0 ] )
[61] (word) getFAC::return#0 ← *((const byte*) memHi#0) w= *((const byte*) memLo#0) [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#0 ] )
to:getFAC::@return
getFAC::@return: scope:[getFAC] from getFAC
[63] return [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#0 ] )
[62] return [ getFAC::return#0 ] ( main:2::getFAC:28 [ main::i#10 char_cursor#32 line_cursor#13 getFAC::return#0 ] )
to:@return
addMEMtoFAC: scope:[addMEMtoFAC] from main::@12
[64] phi() [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[65] call prepareMEM param-assignment [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[63] phi() [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[64] call prepareMEM param-assignment [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:addMEMtoFAC::@1
addMEMtoFAC::@1: scope:[addMEMtoFAC] from addMEMtoFAC
asm { lda$feldy$ffjsr$b867 }
to:addMEMtoFAC::@return
addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC::@1
[67] return [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[66] return [ ] ( main:2::addMEMtoFAC:26 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
prepareMEM: scope:[prepareMEM] from addMEMtoFAC divMEMbyFAC mulFACbyMEM setFAC setMEMtoFAC
[68] (byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(const byte[]) main::f_127#0 divMEMbyFAC/(const byte[]) main::f_i#0 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 ) [ prepareMEM::mem#5 ] ( main:2::addMEMtoFAC:26::prepareMEM:65 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::mulFACbyMEM:14::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::mulFACbyMEM:24::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::divMEMbyFAC:20::prepareMEM:82 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setFAC:5::prepareMEM:87 [ prepareMEM::mem#5 ] main:2::setFAC:12::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setFAC:18::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setMEMtoFAC:9::prepareMEM:92 [ prepareMEM::mem#5 ] main:2::setMEMtoFAC:16::prepareMEM:92 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] )
[69] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 [ prepareMEM::mem#5 prepareMEM::$0 ] ( main:2::addMEMtoFAC:26::prepareMEM:65 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::mulFACbyMEM:14::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::mulFACbyMEM:24::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::divMEMbyFAC:20::prepareMEM:82 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:5::prepareMEM:87 [ prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:12::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:18::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setMEMtoFAC:9::prepareMEM:92 [ prepareMEM::mem#5 prepareMEM::$0 ] main:2::setMEMtoFAC:16::prepareMEM:92 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] )
[70] *((const byte*) memLo#0) ← (byte~) prepareMEM::$0 [ prepareMEM::mem#5 ] ( main:2::addMEMtoFAC:26::prepareMEM:65 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::mulFACbyMEM:14::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::mulFACbyMEM:24::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::divMEMbyFAC:20::prepareMEM:82 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setFAC:5::prepareMEM:87 [ prepareMEM::mem#5 ] main:2::setFAC:12::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setFAC:18::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setMEMtoFAC:9::prepareMEM:92 [ prepareMEM::mem#5 ] main:2::setMEMtoFAC:16::prepareMEM:92 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] )
[71] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 [ prepareMEM::$1 ] ( main:2::addMEMtoFAC:26::prepareMEM:65 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::mulFACbyMEM:14::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::mulFACbyMEM:24::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::divMEMbyFAC:20::prepareMEM:82 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setFAC:5::prepareMEM:87 [ prepareMEM::$1 ] main:2::setFAC:12::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setFAC:18::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setMEMtoFAC:9::prepareMEM:92 [ prepareMEM::$1 ] main:2::setMEMtoFAC:16::prepareMEM:92 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] )
[72] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 [ ] ( main:2::addMEMtoFAC:26::prepareMEM:65 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:14::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::divMEMbyFAC:20::prepareMEM:82 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:5::prepareMEM:87 [ ] main:2::setFAC:12::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setMEMtoFAC:9::prepareMEM:92 [ ] main:2::setMEMtoFAC:16::prepareMEM:92 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[67] (byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(const byte[]) main::f_127#0 divMEMbyFAC/(const byte[]) main::f_i#0 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 ) [ prepareMEM::mem#5 ] ( main:2::addMEMtoFAC:26::prepareMEM:64 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::mulFACbyMEM:14::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::mulFACbyMEM:24::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::divMEMbyFAC:20::prepareMEM:81 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setFAC:5::prepareMEM:86 [ prepareMEM::mem#5 ] main:2::setFAC:12::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setFAC:18::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setMEMtoFAC:9::prepareMEM:91 [ prepareMEM::mem#5 ] main:2::setMEMtoFAC:16::prepareMEM:91 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] )
[68] (byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5 [ prepareMEM::mem#5 prepareMEM::$0 ] ( main:2::addMEMtoFAC:26::prepareMEM:64 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::mulFACbyMEM:14::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::mulFACbyMEM:24::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::divMEMbyFAC:20::prepareMEM:81 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:5::prepareMEM:86 [ prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:12::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setFAC:18::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] main:2::setMEMtoFAC:9::prepareMEM:91 [ prepareMEM::mem#5 prepareMEM::$0 ] main:2::setMEMtoFAC:16::prepareMEM:91 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 prepareMEM::$0 ] )
[69] *((const byte*) memLo#0) ← (byte~) prepareMEM::$0 [ prepareMEM::mem#5 ] ( main:2::addMEMtoFAC:26::prepareMEM:64 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::mulFACbyMEM:14::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::mulFACbyMEM:24::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::divMEMbyFAC:20::prepareMEM:81 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setFAC:5::prepareMEM:86 [ prepareMEM::mem#5 ] main:2::setFAC:12::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setFAC:18::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] main:2::setMEMtoFAC:9::prepareMEM:91 [ prepareMEM::mem#5 ] main:2::setMEMtoFAC:16::prepareMEM:91 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#5 ] )
[70] (byte~) prepareMEM::$1 ← > (byte*) prepareMEM::mem#5 [ prepareMEM::$1 ] ( main:2::addMEMtoFAC:26::prepareMEM:64 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::mulFACbyMEM:14::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::mulFACbyMEM:24::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::divMEMbyFAC:20::prepareMEM:81 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setFAC:5::prepareMEM:86 [ prepareMEM::$1 ] main:2::setFAC:12::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setFAC:18::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] main:2::setMEMtoFAC:9::prepareMEM:91 [ prepareMEM::$1 ] main:2::setMEMtoFAC:16::prepareMEM:91 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::$1 ] )
[71] *((const byte*) memHi#0) ← (byte~) prepareMEM::$1 [ ] ( main:2::addMEMtoFAC:26::prepareMEM:64 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:14::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::divMEMbyFAC:20::prepareMEM:81 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:5::prepareMEM:86 [ ] main:2::setFAC:12::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setMEMtoFAC:9::prepareMEM:91 [ ] main:2::setMEMtoFAC:16::prepareMEM:91 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:prepareMEM::@return
prepareMEM::@return: scope:[prepareMEM] from prepareMEM
[73] return [ ] ( main:2::addMEMtoFAC:26::prepareMEM:65 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:14::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24::prepareMEM:76 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::divMEMbyFAC:20::prepareMEM:82 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:5::prepareMEM:87 [ ] main:2::setFAC:12::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18::prepareMEM:87 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setMEMtoFAC:9::prepareMEM:92 [ ] main:2::setMEMtoFAC:16::prepareMEM:92 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[72] return [ ] ( main:2::addMEMtoFAC:26::prepareMEM:64 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:14::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24::prepareMEM:75 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::divMEMbyFAC:20::prepareMEM:81 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:5::prepareMEM:86 [ ] main:2::setFAC:12::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18::prepareMEM:86 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setMEMtoFAC:9::prepareMEM:91 [ ] main:2::setMEMtoFAC:16::prepareMEM:91 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
mulFACbyMEM: scope:[mulFACbyMEM] from main::@11 main::@6
[74] (byte*) mulFACbyMEM::mem#2 ← phi( main::@11/(const byte[]) main::f_127#0 main::@6/(const byte*) main::f_2pi#0 ) [ mulFACbyMEM::mem#2 ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 mulFACbyMEM::mem#2 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 mulFACbyMEM::mem#2 ] )
[75] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 [ prepareMEM::mem#4 ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#4 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#4 ] )
[76] call prepareMEM param-assignment [ ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[73] (byte*) mulFACbyMEM::mem#2 ← phi( main::@11/(const byte[]) main::f_127#0 main::@6/(const byte*) main::f_2pi#0 ) [ mulFACbyMEM::mem#2 ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 mulFACbyMEM::mem#2 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 mulFACbyMEM::mem#2 ] )
[74] (byte*) prepareMEM::mem#4 ← (byte*) mulFACbyMEM::mem#2 [ prepareMEM::mem#4 ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#4 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#4 ] )
[75] call prepareMEM param-assignment [ ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:mulFACbyMEM::@1
mulFACbyMEM::@1: scope:[mulFACbyMEM] from mulFACbyMEM
asm { lda$feldy$ffjsr$ba28 }
to:mulFACbyMEM::@return
mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM::@1
[78] return [ ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[77] return [ ] ( main:2::mulFACbyMEM:14 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::mulFACbyMEM:24 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
sinFAC: scope:[sinFAC] from main::@10
asm { jsr$e26b }
to:sinFAC::@return
sinFAC::@return: scope:[sinFAC] from sinFAC
[80] return [ ] ( main:2::sinFAC:22 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[79] return [ ] ( main:2::sinFAC:22 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
divMEMbyFAC: scope:[divMEMbyFAC] from main::@9
[81] phi() [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[82] call prepareMEM param-assignment [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[80] phi() [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[81] call prepareMEM param-assignment [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:divMEMbyFAC::@1
divMEMbyFAC::@1: scope:[divMEMbyFAC] from divMEMbyFAC
asm { lda$feldy$ffjsr$bb0f }
to:divMEMbyFAC::@return
divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC::@1
[84] return [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[83] return [ ] ( main:2::divMEMbyFAC:20 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
setFAC: scope:[setFAC] from main main::@1 main::@8
[85] (word) setFAC::w#3 ← phi( main/(word/signed word) 1275 main::@1/(word) setFAC::w#1 main::@8/(byte/signed byte/word/signed word) 25 ) [ setFAC::w#3 ] ( main:2::setFAC:5 [ setFAC::w#3 ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 setFAC::w#3 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 setFAC::w#3 ] )
[86] (byte*) prepareMEM::mem#0 ← ((byte*)) (word) setFAC::w#3 [ prepareMEM::mem#0 ] ( main:2::setFAC:5 [ prepareMEM::mem#0 ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#0 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#0 ] )
[87] call prepareMEM param-assignment [ ] ( main:2::setFAC:5 [ ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[84] (word) setFAC::w#3 ← phi( main/(word/signed word) 1275 main::@1/(word) setFAC::w#1 main::@8/(byte/signed byte/word/signed word) 25 ) [ setFAC::w#3 ] ( main:2::setFAC:5 [ setFAC::w#3 ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 setFAC::w#3 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 setFAC::w#3 ] )
[85] (byte*) prepareMEM::mem#0 ← ((byte*)) (word) setFAC::w#3 [ prepareMEM::mem#0 ] ( main:2::setFAC:5 [ prepareMEM::mem#0 ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#0 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#0 ] )
[86] call prepareMEM param-assignment [ ] ( main:2::setFAC:5 [ ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:setFAC::@1
setFAC::@1: scope:[setFAC] from setFAC
asm { ldy$felda$ffjsr$b391 }
to:setFAC::@return
setFAC::@return: scope:[setFAC] from setFAC::@1
[89] return [ ] ( main:2::setFAC:5 [ ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[88] return [ ] ( main:2::setFAC:5 [ ] main:2::setFAC:12 [ main::i#10 char_cursor#32 line_cursor#13 ] main:2::setFAC:18 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
setMEMtoFAC: scope:[setMEMtoFAC] from main::@4 main::@7
[90] (byte*) setMEMtoFAC::mem#2 ← phi( main::@4/(const byte[]) main::f_127#0 main::@7/(const byte[]) main::f_i#0 ) [ setMEMtoFAC::mem#2 ] ( main:2::setMEMtoFAC:9 [ setMEMtoFAC::mem#2 ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 setMEMtoFAC::mem#2 ] )
[91] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 [ prepareMEM::mem#1 ] ( main:2::setMEMtoFAC:9 [ prepareMEM::mem#1 ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#1 ] )
[92] call prepareMEM param-assignment [ ] ( main:2::setMEMtoFAC:9 [ ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[89] (byte*) setMEMtoFAC::mem#2 ← phi( main::@4/(const byte[]) main::f_127#0 main::@7/(const byte[]) main::f_i#0 ) [ setMEMtoFAC::mem#2 ] ( main:2::setMEMtoFAC:9 [ setMEMtoFAC::mem#2 ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 setMEMtoFAC::mem#2 ] )
[90] (byte*) prepareMEM::mem#1 ← (byte*) setMEMtoFAC::mem#2 [ prepareMEM::mem#1 ] ( main:2::setMEMtoFAC:9 [ prepareMEM::mem#1 ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 prepareMEM::mem#1 ] )
[91] call prepareMEM param-assignment [ ] ( main:2::setMEMtoFAC:9 [ ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:setMEMtoFAC::@1
setMEMtoFAC::@1: scope:[setMEMtoFAC] from setMEMtoFAC
asm { ldx$feldy$ffjsr$bbd4 }
to:setMEMtoFAC::@return
setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC::@1
[94] return [ ] ( main:2::setMEMtoFAC:9 [ ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 ] )
[93] return [ ] ( main:2::setMEMtoFAC:9 [ ] main:2::setMEMtoFAC:16 [ main::i#10 char_cursor#32 line_cursor#13 ] )
to:@return
divFACby10: scope:[divFACby10] from main::@3
asm { jsr$bafe }
to:divFACby10::@return
divFACby10::@return: scope:[divFACby10] from divFACby10
[96] return [ ] ( main:2::divFACby10:7 [ ] )
[95] return [ ] ( main:2::divFACby10:7 [ ] )
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -20,10 +20,9 @@
(word()) getFAC()
(label) getFAC::@return
(word) getFAC::return
(word) getFAC::return#0 return zp ZP_WORD:9 4.333333333333333
(word) getFAC::return#2 return zp ZP_WORD:9 22.0
(word) getFAC::return#0 return zp ZP_WORD:7 4.333333333333333
(word) getFAC::return#2 return zp ZP_WORD:7 22.0
(word) getFAC::w
(word) getFAC::w#1 w zp ZP_WORD:9 4.0
(byte*) line_cursor
(byte*) line_cursor#1 line_cursor zp ZP_WORD:3 46.42857142857143
(byte*) line_cursor#13 line_cursor zp ZP_WORD:3 0.5416666666666666
@ -96,13 +95,13 @@
(label) print_word::@1
(label) print_word::@return
(word) print_word::w
(word) print_word::w#0 w zp ZP_WORD:9 5.0
(word) print_word::w#0 w zp ZP_WORD:7 5.0
(void()) setFAC((word) setFAC::w)
(label) setFAC::@1
(label) setFAC::@return
(word) setFAC::w
(word) setFAC::w#1 w zp ZP_WORD:9 22.0
(word) setFAC::w#3 w zp ZP_WORD:9 13.0
(word) setFAC::w#1 w zp ZP_WORD:7 22.0
(word) setFAC::w#3 w zp ZP_WORD:7 13.0
(void()) setMEMtoFAC((byte*) setMEMtoFAC::mem)
(label) setMEMtoFAC::@1
(label) setMEMtoFAC::@return
@ -116,8 +115,7 @@ zp ZP_WORD:3 [ line_cursor#6 line_cursor#13 line_cursor#1 ]
reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
reg byte a [ print_char::ch#2 print_char::ch#0 print_char::ch#1 ]
zp ZP_WORD:5 [ char_cursor#23 char_cursor#31 char_cursor#32 char_cursor#48 char_cursor#10 ]
zp ZP_WORD:7 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 setMEMtoFAC::mem#2 ]
zp ZP_WORD:9 [ setFAC::w#3 setFAC::w#1 getFAC::return#2 print_word::w#0 getFAC::w#1 getFAC::return#0 ]
zp ZP_WORD:7 [ prepareMEM::mem#5 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 setFAC::w#3 setFAC::w#1 setMEMtoFAC::mem#2 getFAC::return#2 print_word::w#0 getFAC::return#0 ]
reg byte y [ print_byte::$0 ]
reg byte a [ print_byte::$3 ]
reg byte a [ prepareMEM::$0 ]

View File

@ -41,7 +41,7 @@ main: {
anim: {
.label _3 = 5
.label xidx = 4
.label x = $e
.label x = 8
.label x_msb = 5
.label j2 = 6
.label j = 7
@ -193,7 +193,7 @@ clear_screen: {
}
gen_sintab: {
.const f_2pi = $e2e5
.label _23 = $e
.label _23 = $c
.label i = 2
.label min = 2
.label length = 3
@ -325,15 +325,12 @@ progress_inc: {
progress_chars: .byte $20, $65, $74, $75, $61, $f6, $e7, $ea, $e0
}
getFAC: {
.label w = $e
.label return = $e
.label return = $c
jsr $b1aa
sty $fe
sta $ff
lda memLo
sta w
lda #0
sta w+1
sta return
lda memHi
sta return+1
rts
@ -375,11 +372,7 @@ divMEMbyFAC: {
rts
}
setFAC: {
.label w = $e
lda w
sta prepareMEM.mem
lda w+1
sta prepareMEM.mem+1
.label w = $c
jsr prepareMEM
ldy $fe
lda $ff
@ -439,8 +432,8 @@ gen_sprites: {
cml: .text "camelot"
}
gen_chargen_sprite: {
.label _0 = $e
.label _1 = $e
.label _0 = $c
.label _1 = $c
.label sprite = $a
.label chargen = $c
.label bits = 4
@ -458,12 +451,12 @@ gen_chargen_sprite: {
rol _1+1
asl _1
rol _1+1
lda #<CHARGEN
lda chargen
clc
adc _1
adc #<CHARGEN
sta chargen
lda #>CHARGEN
adc _1+1
lda chargen+1
adc #>CHARGEN
sta chargen+1
sei
lda #$32

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -57,7 +57,7 @@
(byte) anim::j2#2 j2 zp ZP_BYTE:6 67.33333333333333
(byte) anim::j2#3 j2 zp ZP_BYTE:6 22.444444444444443
(word) anim::x
(word) anim::x#0 x zp ZP_WORD:14 75.75
(word) anim::x#0 x zp ZP_WORD:8 75.75
(byte) anim::x_msb
(byte) anim::x_msb#1 x_msb zp ZP_BYTE:5 12.0
(byte) anim::x_msb#2 x_msb zp ZP_BYTE:5 67.33333333333333
@ -85,8 +85,8 @@
(byte*) divMEMbyFAC::mem
(byte*) divMEMbyFAC::mem#2 mem zp ZP_WORD:12 2.0
(void()) gen_chargen_sprite((byte) gen_chargen_sprite::ch , (byte*) gen_chargen_sprite::sprite)
(word~) gen_chargen_sprite::$0 $0 zp ZP_WORD:14 4.0
(word~) gen_chargen_sprite::$1 $1 zp ZP_WORD:14 4.0
(word~) gen_chargen_sprite::$0 $0 zp ZP_WORD:12 4.0
(word~) gen_chargen_sprite::$1 $1 zp ZP_WORD:12 4.0
(byte~) gen_chargen_sprite::$4 reg byte a 2002.0
(byte~) gen_chargen_sprite::$7 reg byte a 20002.0
(label) gen_chargen_sprite::@1
@ -138,7 +138,7 @@
(byte) gen_chargen_sprite::y#1 y zp ZP_BYTE:3 151.5
(byte) gen_chargen_sprite::y#2 y zp ZP_BYTE:3 13.173913043478262
(void()) gen_sintab((byte*) gen_sintab::sintab , (byte) gen_sintab::length , (byte) gen_sintab::min , (byte) gen_sintab::max)
(word~) gen_sintab::$23 $23 zp ZP_WORD:14 22.0
(word~) gen_sintab::$23 $23 zp ZP_WORD:12 22.0
(byte~) gen_sintab::$24 reg byte a 22.0
(label) gen_sintab::@1
(label) gen_sintab::@10
@ -196,10 +196,9 @@
(word()) getFAC()
(label) getFAC::@return
(word) getFAC::return
(word) getFAC::return#0 return zp ZP_WORD:14 4.333333333333333
(word) getFAC::return#2 return zp ZP_WORD:14 22.0
(word) getFAC::return#0 return zp ZP_WORD:12 4.333333333333333
(word) getFAC::return#2 return zp ZP_WORD:12 22.0
(word) getFAC::w
(word) getFAC::w#1 w zp ZP_WORD:14 4.0
(void()) init()
(label) init::@1
(label) init::@2
@ -285,11 +284,11 @@
(label) setFAC::@1
(label) setFAC::@return
(word) setFAC::w
(word) setFAC::w#0 w zp ZP_WORD:14 4.0
(word) setFAC::w#1 w zp ZP_WORD:14 4.0
(word) setFAC::w#3 w zp ZP_WORD:14 22.0
(word) setFAC::w#4 w zp ZP_WORD:14 22.0
(word) setFAC::w#5 w zp ZP_WORD:14 28.0
(word) setFAC::w#0 w zp ZP_WORD:12 4.0
(word) setFAC::w#1 w zp ZP_WORD:12 4.0
(word) setFAC::w#3 w zp ZP_WORD:12 22.0
(word) setFAC::w#4 w zp ZP_WORD:12 22.0
(word) setFAC::w#5 w zp ZP_WORD:12 28.0
(void()) setMEMtoFAC((byte*) setMEMtoFAC::mem)
(label) setMEMtoFAC::@1
(label) setMEMtoFAC::@return
@ -326,11 +325,10 @@ zp ZP_BYTE:6 [ anim::j2#3 anim::j2#2 gen_chargen_sprite::c#3 ]
reg byte y [ anim::yidx#3 anim::yidx#0 anim::yidx#6 anim::yidx#1 anim::yidx#2 ]
zp ZP_BYTE:7 [ anim::j#2 anim::j#1 gen_chargen_sprite::s_gen#3 gen_chargen_sprite::s_gen#5 gen_chargen_sprite::s_gen#6 gen_chargen_sprite::s_gen#1 ]
reg byte x [ init::i#2 init::i#1 ]
zp ZP_WORD:8 [ clear_screen::sc#2 clear_screen::sc#1 gen_sintab::sintab#12 gen_sprites::spr#2 gen_sprites::spr#1 ]
zp ZP_WORD:8 [ clear_screen::sc#2 clear_screen::sc#1 gen_sintab::sintab#12 gen_sprites::spr#2 gen_sprites::spr#1 anim::x#0 ]
reg byte x [ gen_sintab::max#2 ]
zp ZP_WORD:10 [ progress_cursor#34 progress_init::line#2 progress_cursor#11 progress_cursor#10 gen_chargen_sprite::sprite#3 gen_chargen_sprite::sprite#10 gen_chargen_sprite::sprite#11 gen_chargen_sprite::sprite#0 gen_chargen_sprite::sprite#2 gen_chargen_sprite::sprite#4 gen_chargen_sprite::sprite#1 ]
zp ZP_WORD:12 [ addMEMtoFAC::mem#2 prepareMEM::mem#5 prepareMEM::mem#2 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setMEMtoFAC::mem#5 gen_chargen_sprite::chargen#0 ]
zp ZP_WORD:14 [ setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 anim::x#0 getFAC::return#2 gen_sintab::$23 getFAC::w#1 getFAC::return#0 gen_chargen_sprite::$0 gen_chargen_sprite::$1 ]
zp ZP_WORD:12 [ addMEMtoFAC::mem#2 prepareMEM::mem#5 prepareMEM::mem#2 prepareMEM::mem#3 prepareMEM::mem#4 prepareMEM::mem#0 prepareMEM::mem#1 mulFACbyMEM::mem#2 divMEMbyFAC::mem#2 setFAC::w#5 setFAC::w#0 setFAC::w#3 setFAC::w#4 setFAC::w#1 setMEMtoFAC::mem#5 getFAC::return#2 gen_sintab::$23 getFAC::return#0 gen_chargen_sprite::$0 gen_chargen_sprite::$1 gen_chargen_sprite::chargen#0 ]
reg byte y [ gen_chargen_sprite::s_gen_cnt#3 gen_chargen_sprite::s_gen_cnt#4 gen_chargen_sprite::s_gen_cnt#5 gen_chargen_sprite::s_gen_cnt#1 ]
reg byte x [ gen_chargen_sprite::b#2 gen_chargen_sprite::b#1 ]
reg byte y [ place_sprites::j#2 place_sprites::j#1 ]