1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-27 04:49:27 +00:00

Fixed tests.

This commit is contained in:
jespergravgaard 2019-10-20 11:41:56 +02:00
parent dc9480a8c8
commit 0298452244
24 changed files with 3816 additions and 3648 deletions

View File

@ -424,7 +424,44 @@ public class Pass4CodeGeneration {
}
/**
* Add data directives for constants declarations
* Add label declarations for all scope variables assigned to memory registers (before the scope code)
*
* @param asm The ASM program
* @param scope The scope
*/
private void addMemLabels(AsmProgram asm, ScopeRef scope) {
Collection<Variable> scopeVars = program.getScope().getScope(scope).getAllVariables(false);
Set<String> added = new LinkedHashSet<>();
for(Variable scopeVar : scopeVars) {
Registers.Register register = scopeVar.getAllocation();
if(register != null) {
if(register.isZp()) {
Registers.RegisterZpMem registerZp = (Registers.RegisterZpMem) register;
String asmName = scopeVar.getAsmName();
if(asmName != null && !added.contains(asmName)) {
// Add any comments
generateComments(asm, scopeVar.getComments());
// Add the label declaration
asm.addLabelDecl(AsmFormat.asmFix(asmName), AsmFormat.getAsmNumber(registerZp.getZp()));
added.add(asmName);
}
} else if(register instanceof Registers.RegisterMainMem && scopeVar.getDeclaredMemoryAddress() != null) {
String asmName = scopeVar.getAsmName();
if(asmName != null && !added.contains(asmName)) {
// Add any comments
generateComments(asm, scopeVar.getComments());
// Add the label declaration
asm.addLabelDecl(AsmFormat.asmFix(asmName), AsmFormat.getAsmNumber(scopeVar.getDeclaredMemoryAddress()));
added.add(asmName);
}
}
}
}
}
/**
* Add data for a scope (after the code)
*
* @param asm The ASM program
* @param scopeRef The scope
@ -470,7 +507,7 @@ public class Pass4CodeGeneration {
if(variable.isStoragePhiMaster())
continue;
// Skip if already added
String asmName = variable.getAsmName() == null ? variable.getLocalName() : variable.getAsmName();
String asmName = variable.getAsmName();
if(added.contains(asmName)) {
continue;
}
@ -486,7 +523,6 @@ public class Pass4CodeGeneration {
if(!registerMainMem.getVariableRef().equals(variable.getRef())) {
continue;
}
// Generate into the data segment
// Set segment
setCurrentSegment(variable.getDataSegment(), asm);
@ -677,54 +713,6 @@ public class Pass4CodeGeneration {
}
}
/**
* Add label declarations for all scope variables assigned to memory registers
*
* @param asm The ASM program
* @param scope The scope
*/
private void addMemLabels(AsmProgram asm, ScopeRef scope) {
Collection<Variable> scopeVars = program.getScope().getScope(scope).getAllVariables(false);
Set<String> added = new LinkedHashSet<>();
for(Variable scopeVar : scopeVars) {
Registers.Register register = scopeVar.getAllocation();
if(register != null)
if(register.isZp()) {
Registers.RegisterZpMem registerZp = (Registers.RegisterZpMem) register;
String asmName = scopeVar.getAsmName();
if(asmName != null && !added.contains(asmName)) {
// Add any comments
generateComments(asm, scopeVar.getComments());
// Add the label declaration
asm.addLabelDecl(AsmFormat.asmFix(asmName), AsmFormat.getAsmNumber(registerZp.getZp()));
added.add(asmName);
}
} else if(register instanceof Registers.RegisterMainMem && scopeVar.getDeclaredMemoryAddress() != null) {
String asmName = scopeVar.getAsmName();
if(asmName != null && !added.contains(asmName)) {
// Add any comments
generateComments(asm, scopeVar.getComments());
// Add the label declaration
asm.addLabelDecl(AsmFormat.asmFix(asmName), AsmFormat.getAsmNumber(scopeVar.getDeclaredMemoryAddress()));
added.add(asmName);
}
} else if(register instanceof Registers.RegisterMainMem && !((Registers.RegisterMainMem) register).getVariableRef().equals(scopeVar.getRef())) {
// Memory variable is not main var in the equivalence class - add a reference
String asmName = scopeVar.getAsmName();
Registers.RegisterMainMem memAllocation = (Registers.RegisterMainMem) register;
VariableRef memAllocationVarRef = memAllocation.getVariableRef();
Variable memAllocationVar = getScope().getVariable(memAllocationVarRef);
// Add the label declaration
String asmNameMemAllocVar = AsmFormat.getAsmParamName(memAllocationVar, scope);
if(!asmName.equals(asmNameMemAllocVar)) {
// Add any comments
generateComments(asm, scopeVar.getComments());
asm.addLabelDecl(AsmFormat.asmFix(asmName), asmNameMemAllocVar);
added.add(asmName);
}
}
}
}
private void genStatements(AsmProgram asm, ControlFlowBlock block) {
Iterator<Statement> statementsIt = block.getStatements().iterator();

View File

@ -43,8 +43,8 @@
.const PI_HALF_u4f28 = $1921fb54
.label BITMAP = $2000
.label SCREEN = $400
.label rem16u = $10
.label frame_cnt = $16
.label rem16u = $c
.label frame_cnt = $12
__b1:
// Counts frames - updated by the IRQ
lda #1
@ -53,18 +53,18 @@ __b1:
rts
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label __9 = $c
.label __14 = $c
.label __9 = 8
.label __14 = 8
.label __25 = $24
.label __26 = $24
.label cos_x = $24
.label xpos = $c
.label x = $20
.label xpos = 8
.label x = $1c
.label sin_y = $24
.label ypos = $c
.label y = $17
.label ypos = 8
.label y = $13
.label idx_x = 2
.label idx_y = $12
.label idx_y = $e
.label __27 = $24
.label __28 = $24
jsr sin16s_gen2
@ -217,11 +217,11 @@ main: {
jmp __b2
}
// Plot a single dot in the bitmap
// bitmap_plot(word zeropage($20) x, byte register(X) y)
// bitmap_plot(word zeropage($1c) x, byte register(X) y)
bitmap_plot: {
.label __1 = $19
.label plotter = $17
.label x = $20
.label __1 = $15
.label plotter = $13
.label x = $1c
lda bitmap_plot_yhi,x
sta.z plotter+1
lda bitmap_plot_ylo,x
@ -249,15 +249,15 @@ bitmap_plot: {
}
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage($17) a, signed word zeropage($24) b)
// mul16s(signed word zeropage($13) a, signed word zeropage($24) b)
mul16s: {
.label __9 = $19
.label __9 = $15
.label __13 = $22
.label __16 = $19
.label __17 = $17
.label m = $c
.label return = $c
.label a = $17
.label __16 = $15
.label __17 = $13
.label m = 8
.label return = 8
.label a = $13
.label b = $24
lda.z a
sta.z mul16u.a
@ -314,13 +314,13 @@ mul16s: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($10) a, word zeropage($19) b)
// mul16u(word zeropage($c) a, word zeropage($15) b)
mul16u: {
.label mb = 4
.label a = $10
.label res = $c
.label b = $19
.label return = $c
.label mb = $1e
.label a = $c
.label res = 8
.label b = $15
.label return = 8
.label b_1 = 2
lda #0
sta.z res
@ -416,12 +416,12 @@ bitmap_clear: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zeropage($17) str, byte register(X) c, word zeropage($12) num)
// memset(void* zeropage($13) str, byte register(X) c, word zeropage($e) num)
memset: {
.label end = $12
.label dst = $17
.label num = $12
.label str = $17
.label end = $e
.label dst = $13
.label num = $e
.label str = $13
lda.z num
bne !+
lda.z num+1
@ -455,7 +455,7 @@ memset: {
}
// Initialize bitmap plotting tables
bitmap_init: {
.label __7 = $1b
.label __7 = $17
.label yoffs = $24
ldx #0
lda #$80
@ -501,18 +501,18 @@ bitmap_init: {
// Generate signed word sinus table - with values in the range min-max.
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen2(signed word* zeropage($14) sintab)
// sin16s_gen2(signed word* zeropage($10) sintab)
sin16s_gen2: {
.label wavelength = $200
.const min = -$1001
.const max = $1001
.const ampl = max-min
.label __6 = $c
.label __9 = $20
.label step = $1c
.label sintab = $14
.label x = 8
.label i = $12
.label __6 = 8
.label __9 = $1c
.label step = $18
.label sintab = $10
.label x = 4
.label i = $e
jsr div32u16u
lda #<SINUS
sta.z sintab
@ -590,21 +590,20 @@ sin16s_gen2: {
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16s(dword zeropage($c) x)
// sin16s(dword zeropage(8) x)
sin16s: {
.label __4 = $c
.label x = $c
.label return = $17
.label __4 = $1e
.label x = 8
.label return = $13
.label x1 = $22
.label x2 = $19
.label x3 = $19
.label x2 = $15
.label x3 = $15
.label x3_6 = $24
.label usinx = $17
.label x4 = $19
.label usinx = $13
.label x4 = $15
.label x5 = $24
.label x5_128 = $24
.label sinx = $17
.label isUpper = $1b
.label sinx = $13
lda.z x+3
cmp #>PI_u4f28>>$10
bcc b1
@ -634,12 +633,10 @@ sin16s: {
lda.z x+3
sbc #>PI_u4f28>>$10
sta.z x+3
lda #1
sta.z isUpper
ldy #1
jmp __b1
b1:
lda #0
sta.z isUpper
ldy #0
__b1:
lda.z x+3
cmp #>PI_HALF_u4f28>>$10
@ -671,14 +668,26 @@ sin16s: {
sbc.z x+3
sta.z x+3
__b2:
ldy #3
!:
lda.z x
asl
sta.z __4
lda.z x+1
rol
sta.z __4+1
lda.z x+2
rol
sta.z __4+2
lda.z x+3
rol
sta.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
dey
bne !-
lda.z __4+2
sta.z x1
lda.z __4+3
@ -751,8 +760,7 @@ sin16s: {
lda.z usinx+1
adc.z x5_128+1
sta.z usinx+1
lda.z isUpper
cmp #0
cpy #0
beq __b3
sec
lda #0
@ -766,14 +774,14 @@ sin16s: {
}
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($19) v1, word zeropage(2) v2, byte register(X) select)
// mulu16_sel(word zeropage($15) v1, word zeropage(2) v2, byte register(X) select)
mulu16_sel: {
.label __0 = $c
.label __1 = $c
.label v1 = $19
.label __0 = 8
.label __1 = 8
.label v1 = $15
.label v2 = 2
.label return = $24
.label return_1 = $19
.label return_1 = $15
lda.z v1
sta.z mul16u.a
lda.z v1+1
@ -806,8 +814,8 @@ mulu16_sel: {
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
.label quotient_hi = $24
.label quotient_lo = $14
.label return = $1c
.label quotient_lo = $10
.label return = $18
lda #<PI2_u4f28>>$10
sta.z divr16u.dividend
lda #>PI2_u4f28>>$10
@ -839,12 +847,12 @@ div32u16u: {
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage($12) dividend, word zeropage($10) rem)
// divr16u(word zeropage($e) dividend, word zeropage($c) rem)
divr16u: {
.label rem = $10
.label dividend = $12
.label quotient = $14
.label return = $14
.label rem = $c
.label dividend = $e
.label quotient = $10
.label return = $10
ldx #0
txa
sta.z quotient

File diff suppressed because it is too large Load Diff

View File

@ -41,7 +41,7 @@
(byte~) bitmap_init::$4 reg byte a 22.0
(byte~) bitmap_init::$5 reg byte a 22.0
(byte~) bitmap_init::$6 reg byte a 22.0
(byte~) bitmap_init::$7 zp[1]:27 5.5
(byte~) bitmap_init::$7 zp[1]:23 5.5
(label) bitmap_init::@1
(label) bitmap_init::@2
(label) bitmap_init::@3
@ -66,14 +66,14 @@
(byte*) bitmap_init::yoffs#2 yoffs zp[2]:36 6.875
(byte*) bitmap_init::yoffs#4 yoffs zp[2]:36 11.0
(void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y)
(word~) bitmap_plot::$1 zp[2]:25 4.0
(word~) bitmap_plot::$1 zp[2]:21 4.0
(byte~) bitmap_plot::$2 reg byte a 4.0
(label) bitmap_plot::@return
(byte*) bitmap_plot::plotter
(word) bitmap_plot::plotter#0 plotter zp[2]:23 1.0
(byte*) bitmap_plot::plotter#1 plotter zp[2]:23 3.0
(word) bitmap_plot::plotter#0 plotter zp[2]:19 1.0
(byte*) bitmap_plot::plotter#1 plotter zp[2]:19 3.0
(word) bitmap_plot::x
(word) bitmap_plot::x#0 x zp[2]:32 3.75
(word) bitmap_plot::x#0 x zp[2]:28 3.75
(byte) bitmap_plot::y
(byte) bitmap_plot::y#0 reg byte x 7.5
(const byte[$100]) bitmap_plot_bit = { fill( $100, 0) }
@ -90,10 +90,10 @@
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:36 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:20 4.0
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:16 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp[4]:28 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:28 4.0
(dword) div32u16u::return#0 return zp[4]:24 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:24 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
@ -105,34 +105,34 @@
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp[2]:18 2.75
(word) divr16u::dividend#3 dividend zp[2]:18 5.0
(word) divr16u::dividend#5 dividend zp[2]:18 2.0
(word) divr16u::dividend#0 dividend zp[2]:14 2.75
(word) divr16u::dividend#3 dividend zp[2]:14 5.0
(word) divr16u::dividend#5 dividend zp[2]:14 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp[2]:20 16.5
(word) divr16u::quotient#2 quotient zp[2]:20 11.0
(word) divr16u::quotient#3 quotient zp[2]:20 2.75
(word) divr16u::quotient#1 quotient zp[2]:16 16.5
(word) divr16u::quotient#2 quotient zp[2]:16 11.0
(word) divr16u::quotient#3 quotient zp[2]:16 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp[2]:16 8.25
(word) divr16u::rem#1 rem zp[2]:16 22.0
(word) divr16u::rem#10 rem zp[2]:16 4.0
(word) divr16u::rem#11 rem zp[2]:16 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:16 22.0
(word) divr16u::rem#4 rem zp[2]:16 4.0
(word) divr16u::rem#5 rem zp[2]:16 24.0
(word) divr16u::rem#6 rem zp[2]:16 11.0
(word) divr16u::rem#0 rem zp[2]:12 8.25
(word) divr16u::rem#1 rem zp[2]:12 22.0
(word) divr16u::rem#10 rem zp[2]:12 4.0
(word) divr16u::rem#11 rem zp[2]:12 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:12 22.0
(word) divr16u::rem#4 rem zp[2]:12 4.0
(word) divr16u::rem#5 rem zp[2]:12 24.0
(word) divr16u::rem#6 rem zp[2]:12 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp[2]:20 5.285714285714286
(word) divr16u::return#2 return zp[2]:20 4.0
(word) divr16u::return#3 return zp[2]:20 4.0
(word) divr16u::return#0 return zp[2]:16 5.285714285714286
(word) divr16u::return#2 return zp[2]:16 4.0
(word) divr16u::return#3 return zp[2]:16 4.0
(byte) frame_cnt
(byte) frame_cnt#0 frame_cnt zp[1]:22 0.6382978723404255
(byte) frame_cnt#1 frame_cnt zp[1]:22 4.0
(byte) frame_cnt#10 frame_cnt zp[1]:22 40.0
(byte) frame_cnt#0 frame_cnt zp[1]:18 0.6382978723404255
(byte) frame_cnt#1 frame_cnt zp[1]:18 4.0
(byte) frame_cnt#10 frame_cnt zp[1]:18 40.0
(void()) init_irq()
(label) init_irq::@return
interrupt(HARDWARE_CLOBBER)(void()) irq()
@ -141,13 +141,13 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) irq::@return
(void()) main()
(word~) main::$10 reg byte alu 22.0
(signed dword~) main::$14 zp[4]:12 22.0
(signed dword~) main::$14 zp[4]:8 22.0
(word~) main::$15 reg byte alu 22.0
(word~) main::$25 zp[2]:36 22.0
(word~) main::$26 zp[2]:36 22.0
(signed word*~) main::$27 zp[2]:36 22.0
(signed word*~) main::$28 zp[2]:36 22.0
(signed dword~) main::$9 zp[4]:12 22.0
(signed dword~) main::$9 zp[4]:8 22.0
(label) main::@1
(label) main::@10
(label) main::@11
@ -168,9 +168,9 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(word) main::idx_x#10 idx_x zp[2]:2 3.6666666666666665
(word) main::idx_x#3 idx_x zp[2]:2 1.375
(word) main::idx_y
(word) main::idx_y#1 idx_y zp[2]:18 11.0
(word) main::idx_y#10 idx_y zp[2]:18 11.0
(word) main::idx_y#3 idx_y zp[2]:18 1.1785714285714286
(word) main::idx_y#1 idx_y zp[2]:14 11.0
(word) main::idx_y#10 idx_y zp[2]:14 11.0
(word) main::idx_y#3 idx_y zp[2]:14 1.1785714285714286
(signed word) main::sin_y
(signed word) main::sin_y#0 sin_y zp[2]:36 22.0
(label) main::toD0181
@ -179,13 +179,13 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) BITMAP/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(word) main::x
(word) main::x#0 x zp[2]:32 1.8333333333333333
(word) main::x#0 x zp[2]:28 1.8333333333333333
(signed dword) main::xpos
(signed dword) main::xpos#0 xpos zp[4]:12 22.0
(signed dword) main::xpos#0 xpos zp[4]:8 22.0
(word) main::y
(word) main::y#0 y zp[2]:23 11.0
(word) main::y#0 y zp[2]:19 11.0
(signed dword) main::ypos
(signed dword) main::ypos#0 ypos zp[4]:12 22.0
(signed dword) main::ypos#0 ypos zp[4]:8 22.0
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@2
@ -194,21 +194,21 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) memset::c
(byte) memset::c#4 reg byte x 1.375
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:23 22.0
(byte*) memset::dst#2 dst zp[2]:23 15.333333333333332
(byte*~) memset::dst#4 dst zp[2]:23 4.0
(byte*) memset::dst#1 dst zp[2]:19 22.0
(byte*) memset::dst#2 dst zp[2]:19 15.333333333333332
(byte*~) memset::dst#4 dst zp[2]:19 4.0
(byte*) memset::end
(byte*) memset::end#0 end zp[2]:18 2.1666666666666665
(byte*) memset::end#0 end zp[2]:14 2.1666666666666665
(word) memset::num
(word) memset::num#2 num zp[2]:18 2.0
(word) memset::num#2 num zp[2]:14 2.0
(void*) memset::return
(void*) memset::str
(void*) memset::str#3 str zp[2]:23
(void*) memset::str#3 str zp[2]:19
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$13 zp[2]:34 4.0
(word~) mul16s::$16 zp[2]:25 4.0
(word~) mul16s::$17 zp[2]:23 4.0
(word~) mul16s::$9 zp[2]:25 4.0
(word~) mul16s::$16 zp[2]:21 4.0
(word~) mul16s::$17 zp[2]:19 4.0
(word~) mul16s::$9 zp[2]:21 4.0
(label) mul16s::@1
(label) mul16s::@2
(label) mul16s::@3
@ -216,23 +216,23 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) mul16s::@5
(label) mul16s::@return
(signed word) mul16s::a
(signed word) mul16s::a#0 a zp[2]:23 22.0
(signed word) mul16s::a#3 a zp[2]:23 1.0
(signed word) mul16s::a#0 a zp[2]:19 22.0
(signed word) mul16s::a#3 a zp[2]:19 1.0
(signed word) mul16s::b
(signed word) mul16s::b#1 b zp[2]:36 22.0
(signed word) mul16s::b#2 b zp[2]:36 22.0
(signed word) mul16s::b#3 b zp[2]:36 2.1818181818181817
(dword) mul16s::m
(dword) mul16s::m#0 m zp[4]:12 2.0
(dword) mul16s::m#1 m zp[4]:12 4.0
(dword) mul16s::m#2 m zp[4]:12 4.0
(dword) mul16s::m#4 m zp[4]:12 4.0
(dword) mul16s::m#5 m zp[4]:12 2.5
(dword) mul16s::m#0 m zp[4]:8 2.0
(dword) mul16s::m#1 m zp[4]:8 4.0
(dword) mul16s::m#2 m zp[4]:8 4.0
(dword) mul16s::m#4 m zp[4]:8 4.0
(dword) mul16s::m#5 m zp[4]:8 2.5
(signed dword) mul16s::return
(signed dword) mul16s::return#0 return zp[4]:12 7.000000000000001
(signed dword) mul16s::return#2 return zp[4]:12 22.0
(signed dword) mul16s::return#3 return zp[4]:12 22.0
(signed dword) mul16s::return#4 return zp[4]:12 22.0
(signed dword) mul16s::return#0 return zp[4]:8 7.000000000000001
(signed dword) mul16s::return#2 return zp[4]:8 22.0
(signed dword) mul16s::return#3 return zp[4]:8 22.0
(signed dword) mul16s::return#4 return zp[4]:8 22.0
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte~) mul16u::$1 reg byte a 202.0
(label) mul16u::@1
@ -241,46 +241,46 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) mul16u::@4
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp[2]:16 101.0
(word) mul16u::a#1 a zp[2]:16 2.0
(word) mul16u::a#2 a zp[2]:16 2.0
(word) mul16u::a#3 a zp[2]:16 67.66666666666666
(word) mul16u::a#6 a zp[2]:16 6.0
(word) mul16u::a#0 a zp[2]:12 101.0
(word) mul16u::a#1 a zp[2]:12 2.0
(word) mul16u::a#2 a zp[2]:12 2.0
(word) mul16u::a#3 a zp[2]:12 67.66666666666666
(word) mul16u::a#6 a zp[2]:12 6.0
(word) mul16u::b
(word) mul16u::b#0 b zp[2]:25 4.0
(word) mul16u::b#0 b zp[2]:21 4.0
(word) mul16u::b#1 b_1 zp[2]:2 4.0
(dword) mul16u::mb
(dword) mul16u::mb#0 mb zp[4]:4 6.0
(dword) mul16u::mb#1 mb zp[4]:4 202.0
(dword) mul16u::mb#2 mb zp[4]:4 43.57142857142858
(dword) mul16u::mb#0 mb zp[4]:30 6.0
(dword) mul16u::mb#1 mb zp[4]:30 202.0
(dword) mul16u::mb#2 mb zp[4]:30 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp[4]:12 202.0
(dword) mul16u::res#2 res zp[4]:12 43.85714285714286
(dword) mul16u::res#6 res zp[4]:12 101.0
(dword) mul16u::res#1 res zp[4]:8 202.0
(dword) mul16u::res#2 res zp[4]:8 43.85714285714286
(dword) mul16u::res#6 res zp[4]:8 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp[4]:12 4.0
(dword) mul16u::return#3 return zp[4]:12 4.0
(dword) mul16u::return#2 return zp[4]:8 4.0
(dword) mul16u::return#3 return zp[4]:8 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 zp[4]:12 4.0
(dword~) mulu16_sel::$1 zp[4]:12 4.0
(dword~) mulu16_sel::$0 zp[4]:8 4.0
(dword~) mulu16_sel::$1 zp[4]:8 4.0
(label) mulu16_sel::@1
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp[2]:36 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:25 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:25 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:21 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:21 4.0
(word) mulu16_sel::return#11 return zp[2]:36 4.0
(word) mulu16_sel::return#12 return zp[2]:36 1.714285714285714
(word) mulu16_sel::return#2 return zp[2]:36 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp[2]:25 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:25 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:25 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:25 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:25 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:25 12.0
(word) mulu16_sel::v1#0 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:21 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:21 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp[2]:2 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:2 4.0
@ -289,9 +289,9 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(word) mulu16_sel::v2#5 v2 zp[2]:2 5.0
(const byte[$100]) plots_per_frame = { fill( $100, 0) }
(word) rem16u
(word) rem16u#1 rem16u zp[2]:16 0.8
(word) rem16u#1 rem16u zp[2]:12 0.8
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 zp[4]:12 4.0
(dword~) sin16s::$4 zp[4]:30 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
@ -306,39 +306,39 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp[1]:27 0.06060606060606061
(byte) sin16s::isUpper#2 reg byte y 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp[2]:23 22.0
(signed word) sin16s::return#1 return zp[2]:23 5.0
(signed word~) sin16s::return#5 return zp[2]:23 4.0
(signed word) sin16s::return#0 return zp[2]:19 22.0
(signed word) sin16s::return#1 return zp[2]:19 5.0
(signed word~) sin16s::return#5 return zp[2]:19 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp[2]:23 4.0
(signed word) sin16s::sinx#1 sinx zp[2]:19 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp[2]:23 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:23 1.0
(word) sin16s::usinx#0 usinx zp[2]:19 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:19 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp[4]:12 8.5
(dword) sin16s::x#1 x zp[4]:12 4.0
(dword) sin16s::x#2 x zp[4]:12 4.0
(dword) sin16s::x#4 x zp[4]:12 5.0
(dword) sin16s::x#6 x zp[4]:12 6.0
(dword) sin16s::x#0 x zp[4]:8 8.5
(dword) sin16s::x#1 x zp[4]:8 4.0
(dword) sin16s::x#2 x zp[4]:8 4.0
(dword) sin16s::x#4 x zp[4]:8 5.0
(dword) sin16s::x#6 x zp[4]:8 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp[2]:34 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp[2]:25 4.0
(word) sin16s::x2#0 x2 zp[2]:21 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp[2]:25 1.0
(word) sin16s::x3#0 x3 zp[2]:21 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp[2]:36 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp[2]:25 4.0
(word) sin16s::x4#0 x4 zp[2]:21 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp[2]:36 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp[2]:36 4.0
(void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
(signed dword~) sin16s_gen2::$6 zp[4]:12 22.0
(word~) sin16s_gen2::$9 zp[2]:32 11.0
(signed dword~) sin16s_gen2::$6 zp[4]:8 22.0
(word~) sin16s_gen2::$9 zp[2]:28 11.0
(label) sin16s_gen2::@1
(label) sin16s_gen2::@2
(label) sin16s_gen2::@3
@ -348,51 +348,52 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(signed word) sin16s_gen2::ampl
(const signed word) sin16s_gen2::ampl#0 ampl = (const signed word) sin16s_gen2::max#0-(const signed word) sin16s_gen2::min#0
(word) sin16s_gen2::i
(word) sin16s_gen2::i#1 i zp[2]:18 22.0
(word) sin16s_gen2::i#2 i zp[2]:18 2.5384615384615383
(word) sin16s_gen2::i#1 i zp[2]:14 22.0
(word) sin16s_gen2::i#2 i zp[2]:14 2.5384615384615383
(signed word) sin16s_gen2::max
(const signed word) sin16s_gen2::max#0 max = (signed word) $1001
(signed word) sin16s_gen2::min
(const signed word) sin16s_gen2::min#0 min = (signed word) -$1001
(signed word) sin16s_gen2::offs
(signed word*) sin16s_gen2::sintab
(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:20 7.333333333333333
(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:20 3.0
(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:16 7.333333333333333
(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:16 3.0
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0 step zp[4]:28 0.8666666666666666
(dword) sin16s_gen2::step#0 step zp[4]:24 0.8666666666666666
(word) sin16s_gen2::wavelength
(const word) sin16s_gen2::wavelength#0 wavelength = (word) $200
(dword) sin16s_gen2::x
(dword) sin16s_gen2::x#1 x zp[4]:8 11.0
(dword) sin16s_gen2::x#2 x zp[4]:8 2.75
(dword) sin16s_gen2::x#1 x zp[4]:4 11.0
(dword) sin16s_gen2::x#2 x zp[4]:4 2.75
zp[2]:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#3 main::idx_x#10 main::idx_x#1 ]
zp[4]:4 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
reg byte x [ memset::c#4 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp[4]:8 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
zp[4]:12 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$9 main::$14 mulu16_sel::$0 mulu16_sel::$1 ]
zp[4]:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
reg byte y [ sin16s::isUpper#2 ]
zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 main::$9 main::$14 mulu16_sel::$0 mulu16_sel::$1 ]
reg byte x [ mulu16_sel::select#5 ]
zp[2]:16 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
zp[2]:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ]
zp[2]:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
zp[2]:12 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
zp[2]:14 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::num#2 memset::end#0 main::idx_y#3 main::idx_y#10 main::idx_y#1 ]
zp[2]:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp[1]:22 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ]
zp[1]:18 [ frame_cnt#10 frame_cnt#0 frame_cnt#1 ]
reg byte alu [ main::$10 ]
reg byte alu [ main::$15 ]
reg byte x [ bitmap_plot::y#0 ]
zp[2]:23 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ]
zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::y#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16s::a#3 mul16s::a#0 mul16s::$17 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ]
reg byte a [ bitmap_plot::$2 ]
zp[2]:25 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ]
zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ]
reg byte a [ mul16u::$1 ]
zp[1]:27 [ bitmap_init::$7 sin16s::isUpper#2 ]
zp[1]:23 [ bitmap_init::$7 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[4]:28 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp[2]:32 [ sin16s_gen2::$9 main::x#0 bitmap_plot::x#0 ]
zp[4]:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp[2]:28 [ sin16s_gen2::$9 main::x#0 bitmap_plot::x#0 ]
zp[4]:30 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp[2]:34 [ sin16s::x1#0 mul16s::$13 ]
zp[2]:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$25 main::$27 main::$26 main::$28 ]
reg byte a [ divr16u::$1 ]

View File

@ -44,8 +44,8 @@
.const PI_HALF_u4f28 = $1921fb54
.label BITMAP = $2000
.label SCREEN = $400
.label rem16u = $19
.label frame_cnt = $16
.label rem16u = $15
.label frame_cnt = $12
__b1:
// Counts frames - updated by the IRQ
lda #1
@ -54,22 +54,22 @@ __b1:
rts
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
.label __10 = $20
.label __11 = $20
.label __16 = $17
.label __17 = $17
.label __10 = $1c
.label __11 = $1c
.label __16 = $13
.label __17 = $13
.label __34 = $24
.label __35 = $24
.label cos_x = $24
.label xpos = $e
.label x = $20
.label xpos = $a
.label x = $1c
.label sin_y = $24
.label ypos = $e
.label y = $17
.label ypos = $a
.label y = $13
.label idx_x = 2
.label idx_y = $12
.label r = 8
.label r_add = $1b
.label idx_y = $e
.label r = 4
.label r_add = $17
.label __36 = $24
.label __37 = $24
jsr sin16s_gen2
@ -247,11 +247,11 @@ main: {
jmp __b7
}
// Plot a single dot in the bitmap
// bitmap_plot(word zeropage($20) x, byte register(X) y)
// bitmap_plot(word zeropage($1c) x, byte register(X) y)
bitmap_plot: {
.label __1 = $19
.label plotter = $17
.label x = $20
.label __1 = $15
.label plotter = $13
.label x = $1c
lda bitmap_plot_yhi,x
sta.z plotter+1
lda bitmap_plot_ylo,x
@ -279,15 +279,15 @@ bitmap_plot: {
}
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage(8) a, signed word zeropage($24) b)
// mul16s(signed word zeropage(4) a, signed word zeropage($24) b)
mul16s: {
.label __9 = $19
.label __9 = $15
.label __13 = $22
.label __16 = $19
.label __16 = $15
.label __17 = $22
.label m = $e
.label return = $e
.label a = 8
.label m = $a
.label return = $a
.label a = 4
.label b = $24
lda.z a
sta.z mul16u.a
@ -344,13 +344,13 @@ mul16s: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($19) a, word zeropage($17) b)
// mul16u(word zeropage($15) a, word zeropage($13) b)
mul16u: {
.label mb = 4
.label a = $19
.label res = $e
.label b = $17
.label return = $e
.label mb = $1e
.label a = $15
.label res = $a
.label b = $13
.label return = $a
.label b_1 = 2
lda #0
sta.z res
@ -446,12 +446,12 @@ bitmap_clear: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zeropage($12) str, byte register(X) c, word zeropage(8) num)
// memset(void* zeropage($e) str, byte register(X) c, word zeropage(4) num)
memset: {
.label end = 8
.label dst = $12
.label num = 8
.label str = $12
.label end = 4
.label dst = $e
.label num = 4
.label str = $e
lda.z num
bne !+
lda.z num+1
@ -485,7 +485,7 @@ memset: {
}
// Initialize bitmap plotting tables
bitmap_init: {
.label __7 = $1b
.label __7 = $17
.label yoffs = $24
ldx #0
lda #$80
@ -531,18 +531,18 @@ bitmap_init: {
// Generate signed word sinus table - with values in the range min-max.
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen2(signed word* zeropage($14) sintab)
// sin16s_gen2(signed word* zeropage($10) sintab)
sin16s_gen2: {
.label wavelength = $200
.const min = -$1001
.const max = $1001
.const ampl = max-min
.label __6 = $e
.label __9 = $20
.label step = $1c
.label sintab = $14
.label x = $a
.label i = $12
.label __6 = $a
.label __9 = $1c
.label step = $18
.label sintab = $10
.label x = 6
.label i = $e
jsr div32u16u
lda #<SINUS
sta.z sintab
@ -620,21 +620,20 @@ sin16s_gen2: {
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16s(dword zeropage($e) x)
// sin16s(dword zeropage($a) x)
sin16s: {
.label __4 = $e
.label x = $e
.label return = 8
.label __4 = $1e
.label x = $a
.label return = 4
.label x1 = $22
.label x2 = $17
.label x3 = $17
.label x2 = $13
.label x3 = $13
.label x3_6 = $24
.label usinx = 8
.label x4 = $17
.label usinx = 4
.label x4 = $13
.label x5 = $24
.label x5_128 = $24
.label sinx = 8
.label isUpper = $1b
.label sinx = 4
lda.z x+3
cmp #>PI_u4f28>>$10
bcc b1
@ -664,12 +663,10 @@ sin16s: {
lda.z x+3
sbc #>PI_u4f28>>$10
sta.z x+3
lda #1
sta.z isUpper
ldy #1
jmp __b1
b1:
lda #0
sta.z isUpper
ldy #0
__b1:
lda.z x+3
cmp #>PI_HALF_u4f28>>$10
@ -701,14 +698,26 @@ sin16s: {
sbc.z x+3
sta.z x+3
__b2:
ldy #3
!:
lda.z x
asl
sta.z __4
lda.z x+1
rol
sta.z __4+1
lda.z x+2
rol
sta.z __4+2
lda.z x+3
rol
sta.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
dey
bne !-
lda.z __4+2
sta.z x1
lda.z __4+3
@ -781,8 +790,7 @@ sin16s: {
lda.z usinx+1
adc.z x5_128+1
sta.z usinx+1
lda.z isUpper
cmp #0
cpy #0
beq __b3
sec
lda #0
@ -796,14 +804,14 @@ sin16s: {
}
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($17) v1, word zeropage(2) v2, byte register(X) select)
// mulu16_sel(word zeropage($13) v1, word zeropage(2) v2, byte register(X) select)
mulu16_sel: {
.label __0 = $e
.label __1 = $e
.label v1 = $17
.label __0 = $a
.label __1 = $a
.label v1 = $13
.label v2 = 2
.label return = $24
.label return_1 = $17
.label return_1 = $13
lda.z v1
sta.z mul16u.a
lda.z v1+1
@ -836,8 +844,8 @@ mulu16_sel: {
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
.label quotient_hi = $24
.label quotient_lo = $14
.label return = $1c
.label quotient_lo = $10
.label return = $18
lda #<PI2_u4f28>>$10
sta.z divr16u.dividend
lda #>PI2_u4f28>>$10
@ -869,12 +877,12 @@ div32u16u: {
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage($12) dividend, word zeropage($19) rem)
// divr16u(word zeropage($e) dividend, word zeropage($15) rem)
divr16u: {
.label rem = $19
.label dividend = $12
.label quotient = $14
.label return = $14
.label rem = $15
.label dividend = $e
.label quotient = $10
.label return = $10
ldx #0
txa
sta.z quotient

File diff suppressed because it is too large Load Diff

View File

@ -42,7 +42,7 @@
(byte~) bitmap_init::$4 reg byte a 22.0
(byte~) bitmap_init::$5 reg byte a 22.0
(byte~) bitmap_init::$6 reg byte a 22.0
(byte~) bitmap_init::$7 zp[1]:27 5.5
(byte~) bitmap_init::$7 zp[1]:23 5.5
(label) bitmap_init::@1
(label) bitmap_init::@2
(label) bitmap_init::@3
@ -67,14 +67,14 @@
(byte*) bitmap_init::yoffs#2 yoffs zp[2]:36 6.875
(byte*) bitmap_init::yoffs#4 yoffs zp[2]:36 11.0
(void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y)
(word~) bitmap_plot::$1 zp[2]:25 4.0
(word~) bitmap_plot::$1 zp[2]:21 4.0
(byte~) bitmap_plot::$2 reg byte a 4.0
(label) bitmap_plot::@return
(byte*) bitmap_plot::plotter
(word) bitmap_plot::plotter#0 plotter zp[2]:23 1.0
(byte*) bitmap_plot::plotter#1 plotter zp[2]:23 3.0
(word) bitmap_plot::plotter#0 plotter zp[2]:19 1.0
(byte*) bitmap_plot::plotter#1 plotter zp[2]:19 3.0
(word) bitmap_plot::x
(word) bitmap_plot::x#0 x zp[2]:32 3.75
(word) bitmap_plot::x#0 x zp[2]:28 3.75
(byte) bitmap_plot::y
(byte) bitmap_plot::y#0 reg byte x 7.5
(const byte[$100]) bitmap_plot_bit = { fill( $100, 0) }
@ -91,10 +91,10 @@
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:36 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:20 4.0
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:16 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp[4]:28 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:28 4.0
(dword) div32u16u::return#0 return zp[4]:24 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:24 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
@ -106,34 +106,34 @@
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp[2]:18 2.75
(word) divr16u::dividend#3 dividend zp[2]:18 5.0
(word) divr16u::dividend#5 dividend zp[2]:18 2.0
(word) divr16u::dividend#0 dividend zp[2]:14 2.75
(word) divr16u::dividend#3 dividend zp[2]:14 5.0
(word) divr16u::dividend#5 dividend zp[2]:14 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp[2]:20 16.5
(word) divr16u::quotient#2 quotient zp[2]:20 11.0
(word) divr16u::quotient#3 quotient zp[2]:20 2.75
(word) divr16u::quotient#1 quotient zp[2]:16 16.5
(word) divr16u::quotient#2 quotient zp[2]:16 11.0
(word) divr16u::quotient#3 quotient zp[2]:16 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp[2]:25 8.25
(word) divr16u::rem#1 rem zp[2]:25 22.0
(word) divr16u::rem#10 rem zp[2]:25 4.0
(word) divr16u::rem#11 rem zp[2]:25 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:25 22.0
(word) divr16u::rem#4 rem zp[2]:25 4.0
(word) divr16u::rem#5 rem zp[2]:25 24.0
(word) divr16u::rem#6 rem zp[2]:25 11.0
(word) divr16u::rem#0 rem zp[2]:21 8.25
(word) divr16u::rem#1 rem zp[2]:21 22.0
(word) divr16u::rem#10 rem zp[2]:21 4.0
(word) divr16u::rem#11 rem zp[2]:21 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:21 22.0
(word) divr16u::rem#4 rem zp[2]:21 4.0
(word) divr16u::rem#5 rem zp[2]:21 24.0
(word) divr16u::rem#6 rem zp[2]:21 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp[2]:20 5.285714285714286
(word) divr16u::return#2 return zp[2]:20 4.0
(word) divr16u::return#3 return zp[2]:20 4.0
(word) divr16u::return#0 return zp[2]:16 5.285714285714286
(word) divr16u::return#2 return zp[2]:16 4.0
(word) divr16u::return#3 return zp[2]:16 4.0
(byte) frame_cnt
(byte) frame_cnt#0 frame_cnt zp[1]:22 0.5454545454545455
(byte) frame_cnt#1 frame_cnt zp[1]:22 4.0
(byte) frame_cnt#2 frame_cnt zp[1]:22 40.0
(byte) frame_cnt#0 frame_cnt zp[1]:18 0.5454545454545455
(byte) frame_cnt#1 frame_cnt zp[1]:18 4.0
(byte) frame_cnt#2 frame_cnt zp[1]:18 40.0
(void()) init_irq()
(label) init_irq::@return
interrupt(HARDWARE_CLOBBER)(void()) irq()
@ -141,10 +141,10 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) irq::@2
(label) irq::@return
(void()) main()
(word~) main::$10 zp[2]:32 11.0
(signed word~) main::$11 zp[2]:32 22.0
(word~) main::$16 zp[2]:23 11.0
(signed word~) main::$17 zp[2]:23 22.0
(word~) main::$10 zp[2]:28 11.0
(signed word~) main::$11 zp[2]:28 22.0
(word~) main::$16 zp[2]:19 11.0
(signed word~) main::$17 zp[2]:19 22.0
(word~) main::$34 zp[2]:36 22.0
(word~) main::$35 zp[2]:36 22.0
(signed word*~) main::$36 zp[2]:36 22.0
@ -173,16 +173,16 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(word) main::idx_x#10 idx_x zp[2]:2 3.0
(word) main::idx_x#11 idx_x zp[2]:2 1.222222222222222
(word) main::idx_y
(word) main::idx_y#1 idx_y zp[2]:18 11.0
(word) main::idx_y#10 idx_y zp[2]:18 3.142857142857143
(word) main::idx_y#3 idx_y zp[2]:18 1.064516129032258
(word) main::idx_y#1 idx_y zp[2]:14 11.0
(word) main::idx_y#10 idx_y zp[2]:14 3.142857142857143
(word) main::idx_y#3 idx_y zp[2]:14 1.064516129032258
(signed word) main::r
(signed word) main::r#1 r zp[2]:8 5.5
(signed word) main::r#10 r zp[2]:8 1.2571428571428571
(signed word) main::r#1 r zp[2]:4 5.5
(signed word) main::r#10 r zp[2]:4 1.2571428571428571
(byte) main::r_add
(byte) main::r_add#1 r_add zp[1]:27 22.0
(byte) main::r_add#10 r_add zp[1]:27 2.026315789473684
(byte) main::r_add#12 r_add zp[1]:27 16.5
(byte) main::r_add#1 r_add zp[1]:23 22.0
(byte) main::r_add#10 r_add zp[1]:23 2.026315789473684
(byte) main::r_add#12 r_add zp[1]:23 16.5
(signed word) main::sin_y
(signed word) main::sin_y#0 sin_y zp[2]:36 11.0
(label) main::toD0181
@ -191,13 +191,13 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN&(word) $3fff*(byte) 4|>(word)(const byte*) BITMAP/(byte) 4&(byte) $f
(byte*) main::toD0181_screen
(word) main::x
(signed word) main::x#0 x zp[2]:32 0.8461538461538461
(signed word) main::x#0 x zp[2]:28 0.8461538461538461
(signed dword) main::xpos
(signed dword) main::xpos#0 xpos zp[4]:14 22.0
(signed dword) main::xpos#0 xpos zp[4]:10 22.0
(word) main::y
(signed word) main::y#0 y zp[2]:23 11.0
(signed word) main::y#0 y zp[2]:19 11.0
(signed dword) main::ypos
(signed dword) main::ypos#0 ypos zp[4]:14 22.0
(signed dword) main::ypos#0 ypos zp[4]:10 22.0
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@2
@ -206,21 +206,21 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte) memset::c
(byte) memset::c#4 reg byte x 1.375
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:18 22.0
(byte*) memset::dst#2 dst zp[2]:18 15.333333333333332
(byte*~) memset::dst#4 dst zp[2]:18 4.0
(byte*) memset::dst#1 dst zp[2]:14 22.0
(byte*) memset::dst#2 dst zp[2]:14 15.333333333333332
(byte*~) memset::dst#4 dst zp[2]:14 4.0
(byte*) memset::end
(byte*) memset::end#0 end zp[2]:8 2.1666666666666665
(byte*) memset::end#0 end zp[2]:4 2.1666666666666665
(word) memset::num
(word) memset::num#2 num zp[2]:8 2.0
(word) memset::num#2 num zp[2]:4 2.0
(void*) memset::return
(void*) memset::str
(void*) memset::str#3 str zp[2]:18
(void*) memset::str#3 str zp[2]:14
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$13 zp[2]:34 4.0
(word~) mul16s::$16 zp[2]:25 4.0
(word~) mul16s::$16 zp[2]:21 4.0
(word~) mul16s::$17 zp[2]:34 4.0
(word~) mul16s::$9 zp[2]:25 4.0
(word~) mul16s::$9 zp[2]:21 4.0
(label) mul16s::@1
(label) mul16s::@2
(label) mul16s::@3
@ -228,25 +228,25 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) mul16s::@5
(label) mul16s::@return
(signed word) mul16s::a
(signed word) mul16s::a#0 a zp[2]:8 22.0
(signed word) mul16s::a#1 a zp[2]:8 11.0
(signed word) mul16s::a#2 a zp[2]:8 11.0
(signed word) mul16s::a#3 a zp[2]:8 2.692307692307692
(signed word) mul16s::a#0 a zp[2]:4 22.0
(signed word) mul16s::a#1 a zp[2]:4 11.0
(signed word) mul16s::a#2 a zp[2]:4 11.0
(signed word) mul16s::a#3 a zp[2]:4 2.692307692307692
(signed word) mul16s::b
(signed word) mul16s::b#1 b zp[2]:36 22.0
(signed word) mul16s::b#2 b zp[2]:36 22.0
(signed word) mul16s::b#3 b zp[2]:36 2.1818181818181817
(dword) mul16s::m
(dword) mul16s::m#0 m zp[4]:14 2.0
(dword) mul16s::m#1 m zp[4]:14 4.0
(dword) mul16s::m#2 m zp[4]:14 4.0
(dword) mul16s::m#4 m zp[4]:14 4.0
(dword) mul16s::m#5 m zp[4]:14 2.5
(dword) mul16s::m#0 m zp[4]:10 2.0
(dword) mul16s::m#1 m zp[4]:10 4.0
(dword) mul16s::m#2 m zp[4]:10 4.0
(dword) mul16s::m#4 m zp[4]:10 4.0
(dword) mul16s::m#5 m zp[4]:10 2.5
(signed dword) mul16s::return
(signed dword) mul16s::return#0 return zp[4]:14 7.000000000000001
(signed dword) mul16s::return#2 return zp[4]:14 22.0
(signed dword) mul16s::return#3 return zp[4]:14 22.0
(signed dword) mul16s::return#4 return zp[4]:14 22.0
(signed dword) mul16s::return#0 return zp[4]:10 7.000000000000001
(signed dword) mul16s::return#2 return zp[4]:10 22.0
(signed dword) mul16s::return#3 return zp[4]:10 22.0
(signed dword) mul16s::return#4 return zp[4]:10 22.0
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte~) mul16u::$1 reg byte a 202.0
(label) mul16u::@1
@ -255,46 +255,46 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) mul16u::@4
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp[2]:25 101.0
(word) mul16u::a#1 a zp[2]:25 2.0
(word) mul16u::a#2 a zp[2]:25 2.0
(word) mul16u::a#3 a zp[2]:25 67.66666666666666
(word) mul16u::a#6 a zp[2]:25 6.0
(word) mul16u::a#0 a zp[2]:21 101.0
(word) mul16u::a#1 a zp[2]:21 2.0
(word) mul16u::a#2 a zp[2]:21 2.0
(word) mul16u::a#3 a zp[2]:21 67.66666666666666
(word) mul16u::a#6 a zp[2]:21 6.0
(word) mul16u::b
(word) mul16u::b#0 b zp[2]:23 4.0
(word) mul16u::b#0 b zp[2]:19 4.0
(word) mul16u::b#1 b_1 zp[2]:2 4.0
(dword) mul16u::mb
(dword) mul16u::mb#0 mb zp[4]:4 6.0
(dword) mul16u::mb#1 mb zp[4]:4 202.0
(dword) mul16u::mb#2 mb zp[4]:4 43.57142857142858
(dword) mul16u::mb#0 mb zp[4]:30 6.0
(dword) mul16u::mb#1 mb zp[4]:30 202.0
(dword) mul16u::mb#2 mb zp[4]:30 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp[4]:14 202.0
(dword) mul16u::res#2 res zp[4]:14 43.85714285714286
(dword) mul16u::res#6 res zp[4]:14 101.0
(dword) mul16u::res#1 res zp[4]:10 202.0
(dword) mul16u::res#2 res zp[4]:10 43.85714285714286
(dword) mul16u::res#6 res zp[4]:10 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp[4]:14 4.0
(dword) mul16u::return#3 return zp[4]:14 4.0
(dword) mul16u::return#2 return zp[4]:10 4.0
(dword) mul16u::return#3 return zp[4]:10 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 zp[4]:14 4.0
(dword~) mulu16_sel::$1 zp[4]:14 4.0
(dword~) mulu16_sel::$0 zp[4]:10 4.0
(dword~) mulu16_sel::$1 zp[4]:10 4.0
(label) mulu16_sel::@1
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp[2]:36 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:23 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:23 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:19 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:19 4.0
(word) mulu16_sel::return#11 return zp[2]:36 4.0
(word) mulu16_sel::return#12 return zp[2]:36 1.714285714285714
(word) mulu16_sel::return#2 return zp[2]:36 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp[2]:23 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:23 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:23 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:23 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:23 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:23 12.0
(word) mulu16_sel::v1#0 v1 zp[2]:19 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:19 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:19 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:19 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:19 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:19 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp[2]:2 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:2 4.0
@ -303,9 +303,9 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(word) mulu16_sel::v2#5 v2 zp[2]:2 5.0
(const byte[$100]) plots_per_frame = { fill( $100, 0) }
(word) rem16u
(word) rem16u#1 rem16u zp[2]:25 0.8
(word) rem16u#1 rem16u zp[2]:21 0.8
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 zp[4]:14 4.0
(dword~) sin16s::$4 zp[4]:30 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
@ -320,39 +320,39 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp[1]:27 0.06060606060606061
(byte) sin16s::isUpper#2 reg byte y 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp[2]:8 22.0
(signed word) sin16s::return#1 return zp[2]:8 5.0
(signed word~) sin16s::return#5 return zp[2]:8 4.0
(signed word) sin16s::return#0 return zp[2]:4 22.0
(signed word) sin16s::return#1 return zp[2]:4 5.0
(signed word~) sin16s::return#5 return zp[2]:4 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp[2]:8 4.0
(signed word) sin16s::sinx#1 sinx zp[2]:4 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp[2]:8 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:8 1.0
(word) sin16s::usinx#0 usinx zp[2]:4 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:4 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp[4]:14 8.5
(dword) sin16s::x#1 x zp[4]:14 4.0
(dword) sin16s::x#2 x zp[4]:14 4.0
(dword) sin16s::x#4 x zp[4]:14 5.0
(dword) sin16s::x#6 x zp[4]:14 6.0
(dword) sin16s::x#0 x zp[4]:10 8.5
(dword) sin16s::x#1 x zp[4]:10 4.0
(dword) sin16s::x#2 x zp[4]:10 4.0
(dword) sin16s::x#4 x zp[4]:10 5.0
(dword) sin16s::x#6 x zp[4]:10 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp[2]:34 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp[2]:23 4.0
(word) sin16s::x2#0 x2 zp[2]:19 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp[2]:23 1.0
(word) sin16s::x3#0 x3 zp[2]:19 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp[2]:36 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp[2]:23 4.0
(word) sin16s::x4#0 x4 zp[2]:19 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp[2]:36 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp[2]:36 4.0
(void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
(signed dword~) sin16s_gen2::$6 zp[4]:14 22.0
(word~) sin16s_gen2::$9 zp[2]:32 11.0
(signed dword~) sin16s_gen2::$6 zp[4]:10 22.0
(word~) sin16s_gen2::$9 zp[2]:28 11.0
(label) sin16s_gen2::@1
(label) sin16s_gen2::@2
(label) sin16s_gen2::@3
@ -362,49 +362,50 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(signed word) sin16s_gen2::ampl
(const signed word) sin16s_gen2::ampl#0 ampl = (const signed word) sin16s_gen2::max#0-(const signed word) sin16s_gen2::min#0
(word) sin16s_gen2::i
(word) sin16s_gen2::i#1 i zp[2]:18 22.0
(word) sin16s_gen2::i#2 i zp[2]:18 2.5384615384615383
(word) sin16s_gen2::i#1 i zp[2]:14 22.0
(word) sin16s_gen2::i#2 i zp[2]:14 2.5384615384615383
(signed word) sin16s_gen2::max
(const signed word) sin16s_gen2::max#0 max = (signed word) $1001
(signed word) sin16s_gen2::min
(const signed word) sin16s_gen2::min#0 min = (signed word) -$1001
(signed word) sin16s_gen2::offs
(signed word*) sin16s_gen2::sintab
(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:20 7.333333333333333
(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:20 3.0
(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:16 7.333333333333333
(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:16 3.0
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0 step zp[4]:28 0.8666666666666666
(dword) sin16s_gen2::step#0 step zp[4]:24 0.8666666666666666
(word) sin16s_gen2::wavelength
(const word) sin16s_gen2::wavelength#0 wavelength = (word) $200
(dword) sin16s_gen2::x
(dword) sin16s_gen2::x#1 x zp[4]:10 11.0
(dword) sin16s_gen2::x#2 x zp[4]:10 2.75
(dword) sin16s_gen2::x#1 x zp[4]:6 11.0
(dword) sin16s_gen2::x#2 x zp[4]:6 2.75
zp[2]:2 [ mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 main::idx_x#11 main::idx_x#10 main::idx_x#1 ]
zp[4]:4 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp[2]:8 [ memset::num#2 memset::end#0 main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ]
zp[2]:4 [ memset::num#2 memset::end#0 main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ]
reg byte x [ memset::c#4 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp[4]:10 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
zp[4]:14 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ]
zp[4]:6 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
reg byte y [ sin16s::isUpper#2 ]
zp[4]:10 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ]
reg byte x [ mulu16_sel::select#5 ]
zp[2]:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ]
zp[2]:20 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
zp[2]:14 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s_gen2::i#2 sin16s_gen2::i#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 main::idx_y#3 main::idx_y#10 main::idx_y#1 ]
zp[2]:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp[1]:22 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ]
zp[1]:18 [ frame_cnt#2 frame_cnt#0 frame_cnt#1 ]
reg byte x [ bitmap_plot::y#0 ]
zp[2]:23 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$16 main::$17 main::y#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ]
zp[2]:19 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 main::$16 main::$17 main::y#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 mul16u::b#0 ]
reg byte a [ bitmap_plot::$2 ]
zp[2]:25 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
zp[2]:21 [ mul16s::$9 mul16s::$16 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
reg byte a [ mul16u::$1 ]
zp[1]:27 [ bitmap_init::$7 sin16s::isUpper#2 main::r_add#10 main::r_add#12 main::r_add#1 ]
zp[1]:23 [ bitmap_init::$7 main::r_add#10 main::r_add#12 main::r_add#1 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]
zp[4]:28 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp[2]:32 [ sin16s_gen2::$9 main::$10 main::$11 main::x#0 bitmap_plot::x#0 ]
zp[4]:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp[2]:28 [ sin16s_gen2::$9 main::$10 main::$11 main::x#0 bitmap_plot::x#0 ]
zp[4]:30 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp[2]:34 [ sin16s::x1#0 mul16s::$13 mul16s::$17 ]
zp[2]:36 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$34 main::$36 main::$35 main::$37 ]
reg byte a [ divr16u::$1 ]

View File

@ -1562,21 +1562,21 @@ gfx_init_plane_fill: {
.label plane_addr = 2
.label fill = 8
lda.z plane_addr
asl
sta.z __0
lda.z plane_addr+1
rol
sta.z __0+1
lda.z plane_addr+2
rol
sta.z __0+2
lda.z plane_addr+3
rol
sta.z __0+3
asl.z __0
rol.z __0+1
rol.z __0+2
rol.z __0+3
asl.z __0
rol.z __0+1
rol.z __0+2
rol.z __0+3
lda.z __0+2
sta.z __1
lda.z __0+3

View File

@ -18518,21 +18518,21 @@ gfx_init_plane_fill: {
.label fill = $3e
// [481] (dword~) gfx_init_plane_fill::$0 ← (dword) gfx_init_plane_fill::plane_addr#3 << (byte) 2 -- vduz1=vduz2_rol_2
lda.z plane_addr
asl
sta.z __0
lda.z plane_addr+1
rol
sta.z __0+1
lda.z plane_addr+2
rol
sta.z __0+2
lda.z plane_addr+3
rol
sta.z __0+3
asl.z __0
rol.z __0+1
rol.z __0+2
rol.z __0+3
asl.z __0
rol.z __0+1
rol.z __0+2
rol.z __0+3
// [482] (word~) gfx_init_plane_fill::$1 ← > (dword~) gfx_init_plane_fill::$0 -- vwuz1=_hi_vduz2
lda.z __0+2
sta.z __1
@ -22028,358 +22028,358 @@ Uplift Scope [gfx_init_plane_vertical2]
Uplift Scope [gfx_init_plane_blank]
Uplift Scope [gfx_init_plane_full]
Uplifting [keyboard_event_scan] best 15481007 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] zp[1]:252 [ keyboard_event_scan::event_type#0 ] zp[1]:253 [ keyboard_event_scan::$23 ] zp[1]:16 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp[1]:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp[1]:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp[1]:241 [ keyboard_event_scan::row_scan#0 ] zp[1]:243 [ keyboard_event_scan::$0 ] zp[1]:245 [ keyboard_event_scan::$3 ] zp[1]:247 [ keyboard_event_scan::$6 ] zp[1]:249 [ keyboard_event_scan::$9 ]
Uplifting [keyboard_event_scan] best 15480995 combination reg byte a [ keyboard_event_scan::$15 ] reg byte a [ keyboard_event_scan::$16 ] zp[1]:252 [ keyboard_event_scan::event_type#0 ] zp[1]:253 [ keyboard_event_scan::$23 ] zp[1]:16 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ] zp[1]:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ] zp[1]:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ] zp[1]:241 [ keyboard_event_scan::row_scan#0 ] zp[1]:243 [ keyboard_event_scan::$0 ] zp[1]:245 [ keyboard_event_scan::$3 ] zp[1]:247 [ keyboard_event_scan::$6 ] zp[1]:249 [ keyboard_event_scan::$9 ]
Limited combination testing to 10 combinations of 5308416 possible.
Uplifting [] best 15480989 combination zp[1]:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] zp[2]:52 [ print_char_cursor#20 print_char_cursor#22 print_char_cursor#73 print_char_cursor#74 print_char_cursor#38 print_char_cursor#1 ] zp[2]:54 [ print_line_cursor#21 print_line_cursor#2 print_set_screen::screen#2 print_line_cursor#22 ] zp[1]:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] zp[1]:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] reg byte x [ keyboard_modifiers#21 keyboard_modifiers#20 keyboard_modifiers#19 keyboard_modifiers#18 keyboard_modifiers#3 keyboard_modifiers#4 keyboard_modifiers#5 ]
Uplifting [] best 15480977 combination zp[1]:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ] zp[2]:52 [ print_char_cursor#20 print_char_cursor#22 print_char_cursor#73 print_char_cursor#74 print_char_cursor#38 print_char_cursor#1 ] zp[2]:54 [ print_line_cursor#21 print_line_cursor#2 print_set_screen::screen#2 print_line_cursor#22 ] zp[1]:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ] zp[1]:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ] reg byte x [ keyboard_modifiers#21 keyboard_modifiers#20 keyboard_modifiers#19 keyboard_modifiers#18 keyboard_modifiers#3 keyboard_modifiers#4 keyboard_modifiers#5 ]
Limited combination testing to 10 combinations of 16 possible.
Uplifting [keyboard_matrix_read] best 15390986 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] zp[1]:258 [ keyboard_matrix_read::return#0 ]
Uplifting [keyboard_matrix_read] best 15390974 combination reg byte a [ keyboard_matrix_read::return#2 ] reg byte x [ keyboard_matrix_read::rowid#0 ] zp[1]:258 [ keyboard_matrix_read::return#0 ]
Limited combination testing to 10 combinations of 64 possible.
Uplifting [gfx_init_plane_charset8] best 15375986 combination reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte a [ gfx_init_plane_charset8::$7 ] zp[1]:88 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] zp[1]:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] zp[2]:85 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] zp[1]:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] zp[2]:81 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] zp[1]:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] zp[1]:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Uplifting [gfx_init_plane_charset8] best 15375974 combination reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ] reg byte a [ gfx_init_plane_charset8::$7 ] zp[1]:88 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ] zp[1]:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ] zp[2]:85 [ gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ] zp[1]:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ] zp[2]:81 [ gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 ] zp[1]:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ] zp[1]:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Limited combination testing to 10 combinations of 1152 possible.
Uplifting [print_str_at] best 15375986 combination zp[2]:37 [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] zp[2]:39 [ print_str_at::at#2 print_str_at::at#0 ]
Uplifting [apply_preset] best 15363653 combination reg byte y [ apply_preset::i#2 apply_preset::i#1 ] zp[2]:43 [ apply_preset::preset#15 ] reg byte a [ apply_preset::idx#0 ]
Uplifting [print_str_at] best 15375974 combination zp[2]:37 [ print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 ] zp[2]:39 [ print_str_at::at#2 print_str_at::at#0 ]
Uplifting [apply_preset] best 15363641 combination reg byte y [ apply_preset::i#2 apply_preset::i#1 ] zp[2]:43 [ apply_preset::preset#15 ] reg byte a [ apply_preset::idx#0 ]
Limited combination testing to 10 combinations of 12 possible.
Uplifting [form_render_values] best 15348653 combination reg byte x [ form_render_values::idx#2 form_render_values::idx#1 ]
Uplifting [form_mode] best 15341453 combination reg byte a [ form_mode::$36 ] zp[1]:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] reg byte x [ form_mode::i#2 form_mode::i#1 ]
Uplifting [form_render_values] best 15348641 combination reg byte x [ form_render_values::idx#2 form_render_values::idx#1 ]
Uplifting [form_mode] best 15341441 combination reg byte a [ form_mode::$36 ] zp[1]:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ] reg byte x [ form_mode::i#2 form_mode::i#1 ]
Limited combination testing to 10 combinations of 24 possible.
Uplifting [print_str_lines] best 15329453 combination zp[2]:50 [ print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ]
Uplifting [form_field_ptr] best 15326440 combination reg byte x [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] zp[1]:265 [ form_field_ptr::x#0 ] reg byte a [ form_field_ptr::y#0 ] zp[2]:263 [ form_field_ptr::line#0 ]
Uplifting [print_str_lines] best 15329441 combination zp[2]:50 [ print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 ] reg byte a [ print_str_lines::ch#0 ]
Uplifting [form_field_ptr] best 15326428 combination reg byte x [ form_field_ptr::field_idx#2 form_field_ptr::field_idx#1 form_field_ptr::field_idx#0 ] zp[1]:265 [ form_field_ptr::x#0 ] reg byte a [ form_field_ptr::y#0 ] zp[2]:263 [ form_field_ptr::line#0 ]
Limited combination testing to 10 combinations of 24 possible.
Uplifting [form_control] best 15319431 combination reg byte a [ form_control::return#0 ] reg byte x [ form_control::return#2 ] zp[1]:266 [ form_control::$13 ] zp[1]:269 [ form_control::$15 ] zp[1]:270 [ form_control::$16 ] zp[1]:271 [ form_control::$24 ] zp[1]:272 [ form_control::$14 ] zp[1]:268 [ form_control::key_event#0 ]
Uplifting [form_control] best 15319419 combination reg byte a [ form_control::return#0 ] reg byte x [ form_control::return#2 ] zp[1]:266 [ form_control::$13 ] zp[1]:269 [ form_control::$15 ] zp[1]:270 [ form_control::$16 ] zp[1]:271 [ form_control::$24 ] zp[1]:272 [ form_control::$14 ] zp[1]:268 [ form_control::key_event#0 ]
Limited combination testing to 10 combinations of 65536 possible.
Uplifting [bitmap_plot] best 15317022 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp[2]:313 [ bitmap_plot::plotter_y#0 ] zp[1]:317 [ bitmap_plot::$1 ] zp[2]:311 [ bitmap_plot::plotter_x#0 ] zp[2]:315 [ bitmap_plot::plotter#0 ]
Uplifting [bitmap_plot] best 15317010 combination reg byte y [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ] reg byte x [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ] zp[2]:313 [ bitmap_plot::plotter_y#0 ] zp[1]:317 [ bitmap_plot::$1 ] zp[2]:311 [ bitmap_plot::plotter_x#0 ] zp[2]:315 [ bitmap_plot::plotter#0 ]
Limited combination testing to 10 combinations of 36 possible.
Uplifting [gfx_init_screen2] best 15315822 combination reg byte a [ gfx_init_screen2::$0 ] reg byte a [ gfx_init_screen2::$3 ] zp[1]:336 [ gfx_init_screen2::$4 ] zp[1]:147 [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] zp[1]:333 [ gfx_init_screen2::col#0 ] zp[2]:148 [ gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 ] zp[1]:334 [ gfx_init_screen2::col2#0 ] zp[1]:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ]
Uplifting [gfx_init_screen2] best 15315810 combination reg byte a [ gfx_init_screen2::$0 ] reg byte a [ gfx_init_screen2::$3 ] zp[1]:336 [ gfx_init_screen2::$4 ] zp[1]:147 [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ] zp[1]:333 [ gfx_init_screen2::col#0 ] zp[2]:148 [ gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 ] zp[1]:334 [ gfx_init_screen2::col2#0 ] zp[1]:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ]
Limited combination testing to 10 combinations of 2304 possible.
Uplifting [gfx_init_plane_8bppchunky] best 15314592 combination reg byte x [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] zp[2]:94 [ gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 ] reg byte a [ gfx_init_plane_8bppchunky::c#0 ] zp[2]:91 [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] zp[2]:297 [ gfx_init_plane_8bppchunky::$8 ] zp[1]:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ]
Uplifting [gfx_init_plane_8bppchunky] best 15314580 combination reg byte x [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ] zp[2]:94 [ gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 ] reg byte a [ gfx_init_plane_8bppchunky::c#0 ] zp[2]:91 [ gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 ] zp[2]:297 [ gfx_init_plane_8bppchunky::$8 ] zp[1]:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ]
Limited combination testing to 10 combinations of 16 possible.
Uplifting [bitmap_line_xdyi] best 15313992 combination zp[1]:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp[1]:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] reg byte x [ bitmap_line_xdyi::$6 ] zp[1]:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp[1]:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp[1]:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp[1]:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ]
Uplifting [bitmap_line_xdyi] best 15313980 combination zp[1]:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ] zp[1]:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ] reg byte x [ bitmap_line_xdyi::$6 ] zp[1]:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ] zp[1]:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ] zp[1]:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ] zp[1]:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ]
Limited combination testing to 10 combinations of 256 possible.
Uplifting [bitmap_line_xdyd] best 15313392 combination zp[1]:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] zp[1]:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] reg byte x [ bitmap_line_xdyd::$6 ] zp[1]:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp[1]:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp[1]:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp[1]:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ]
Uplifting [bitmap_line_xdyd] best 15313380 combination zp[1]:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ] zp[1]:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ] reg byte x [ bitmap_line_xdyd::$6 ] zp[1]:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ] zp[1]:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ] zp[1]:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ] zp[1]:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ]
Limited combination testing to 10 combinations of 256 possible.
Uplifting [bitmap_line_ydxi] best 15312386 combination zp[1]:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte a [ bitmap_line_ydxi::$6 ] zp[1]:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp[1]:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp[1]:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp[1]:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ]
Uplifting [bitmap_line_ydxi] best 15312374 combination zp[1]:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ] reg byte x [ bitmap_line_ydxi::x#3 bitmap_line_ydxi::x#5 bitmap_line_ydxi::x#1 bitmap_line_ydxi::x#0 bitmap_line_ydxi::x#6 bitmap_line_ydxi::x#2 ] reg byte a [ bitmap_line_ydxi::$6 ] zp[1]:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ] zp[1]:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ] zp[1]:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ] zp[1]:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ]
Limited combination testing to 10 combinations of 256 possible.
Uplifting [bitmap_line_ydxd] best 15311380 combination zp[1]:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] reg byte x [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte a [ bitmap_line_ydxd::$6 ] zp[1]:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp[1]:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp[1]:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp[1]:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ]
Uplifting [bitmap_line_ydxd] best 15311368 combination zp[1]:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ] reg byte x [ bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ] reg byte a [ bitmap_line_ydxd::$6 ] zp[1]:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ] zp[1]:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ] zp[1]:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ] zp[1]:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ]
Limited combination testing to 10 combinations of 256 possible.
Uplifting [gfx_init_screen0] best 15310180 combination reg byte a [ gfx_init_screen0::$0 ] reg byte a [ gfx_init_screen0::$2 ] zp[1]:342 [ gfx_init_screen0::$3 ] zp[1]:155 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] zp[2]:156 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] zp[1]:340 [ gfx_init_screen0::$1 ] zp[1]:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Uplifting [gfx_init_screen0] best 15310168 combination reg byte a [ gfx_init_screen0::$0 ] reg byte a [ gfx_init_screen0::$2 ] zp[1]:342 [ gfx_init_screen0::$3 ] zp[1]:155 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ] zp[2]:156 [ gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 ] zp[1]:340 [ gfx_init_screen0::$1 ] zp[1]:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Limited combination testing to 10 combinations of 768 possible.
Uplifting [gfx_init_screen3] best 15308980 combination reg byte a [ gfx_init_screen3::$0 ] reg byte a [ gfx_init_screen3::$2 ] zp[1]:331 [ gfx_init_screen3::$3 ] zp[1]:143 [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] zp[2]:144 [ gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 ] zp[1]:329 [ gfx_init_screen3::$1 ] zp[1]:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ]
Uplifting [gfx_init_screen3] best 15308968 combination reg byte a [ gfx_init_screen3::$0 ] reg byte a [ gfx_init_screen3::$2 ] zp[1]:331 [ gfx_init_screen3::$3 ] zp[1]:143 [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ] zp[2]:144 [ gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 ] zp[1]:329 [ gfx_init_screen3::$1 ] zp[1]:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ]
Limited combination testing to 10 combinations of 768 possible.
Uplifting [gfx_init_plane_horisontal] best 15307480 combination zp[2]:77 [ gfx_init_plane_horisontal::gfxa#3 gfx_init_plane_horisontal::gfxa#6 gfx_init_plane_horisontal::gfxa#7 gfx_init_plane_horisontal::gfxa#1 gfx_init_plane_horisontal::gfxa#2 ] reg byte a [ gfx_init_plane_horisontal::$7 ] reg byte x [ gfx_init_plane_horisontal::ax#2 gfx_init_plane_horisontal::ax#1 ] zp[1]:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ]
Uplifting [gfx_init_plane_horisontal] best 15307468 combination zp[2]:77 [ gfx_init_plane_horisontal::gfxa#3 gfx_init_plane_horisontal::gfxa#6 gfx_init_plane_horisontal::gfxa#7 gfx_init_plane_horisontal::gfxa#1 gfx_init_plane_horisontal::gfxa#2 ] reg byte a [ gfx_init_plane_horisontal::$7 ] reg byte x [ gfx_init_plane_horisontal::ax#2 gfx_init_plane_horisontal::ax#1 ] zp[1]:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ]
Limited combination testing to 10 combinations of 16 possible.
Uplifting [gfx_init_screen1] best 15305880 combination reg byte x [ gfx_init_screen1::cx#2 gfx_init_screen1::cx#1 ] reg byte a [ gfx_init_screen1::$0 ] zp[1]:338 [ gfx_init_screen1::$1 ] zp[2]:152 [ gfx_init_screen1::ch#2 gfx_init_screen1::ch#3 gfx_init_screen1::ch#1 ] zp[1]:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ]
Uplifting [gfx_init_screen1] best 15305868 combination reg byte x [ gfx_init_screen1::cx#2 gfx_init_screen1::cx#1 ] reg byte a [ gfx_init_screen1::$0 ] zp[1]:338 [ gfx_init_screen1::$1 ] zp[2]:152 [ gfx_init_screen1::ch#2 gfx_init_screen1::ch#3 gfx_init_screen1::ch#1 ] zp[1]:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ]
Limited combination testing to 10 combinations of 64 possible.
Uplifting [form_set_screen] best 15303780 combination reg byte x [ form_set_screen::y#2 form_set_screen::y#1 ] reg byte a [ form_set_screen::$0 ] zp[1]:274 [ form_set_screen::$1 ] zp[2]:47 [ form_set_screen::line#2 form_set_screen::line#1 ]
Uplifting [form_set_screen] best 15303768 combination reg byte x [ form_set_screen::y#2 form_set_screen::y#1 ] reg byte a [ form_set_screen::$0 ] zp[1]:274 [ form_set_screen::$1 ] zp[2]:47 [ form_set_screen::line#2 form_set_screen::line#1 ]
Limited combination testing to 10 combinations of 48 possible.
Uplifting [gfx_init_plane_horisontal2] best 15302780 combination reg byte a [ gfx_init_plane_horisontal2::$7 ] reg byte a [ gfx_init_plane_horisontal2::row#0 ] zp[1]:71 [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] zp[2]:69 [ gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 ] zp[1]:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ]
Uplifting [gfx_init_plane_horisontal2] best 15302768 combination reg byte a [ gfx_init_plane_horisontal2::$7 ] reg byte a [ gfx_init_plane_horisontal2::row#0 ] zp[1]:71 [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ] zp[2]:69 [ gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 ] zp[1]:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ]
Limited combination testing to 10 combinations of 64 possible.
Uplifting [gfx_init_charset] best 15301880 combination zp[2]:135 [ gfx_init_charset::charset#2 gfx_init_charset::charset#3 gfx_init_charset::charset#1 ] reg byte x [ gfx_init_charset::l#2 gfx_init_charset::l#1 ] zp[2]:133 [ gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 ] zp[1]:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ]
Uplifting [gfx_init_plane_fill] best 15300974 combination zp[2]:64 [ gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#6 ] reg byte x [ gfx_init_plane_fill::bx#2 gfx_init_plane_fill::bx#1 ] zp[1]:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] zp[1]:62 [ gfx_init_plane_fill::fill#6 ] zp[4]:280 [ gfx_init_plane_fill::$0 ] zp[2]:284 [ gfx_init_plane_fill::$1 ] reg byte a [ gfx_init_plane_fill::gfxbCpuBank#0 ] zp[2]:287 [ gfx_init_plane_fill::$4 ] zp[2]:289 [ gfx_init_plane_fill::$5 ] zp[2]:291 [ gfx_init_plane_fill::gfxb#0 ] zp[4]:58 [ gfx_init_plane_fill::plane_addr#3 ]
Uplifting [gfx_init_charset] best 15301868 combination zp[2]:135 [ gfx_init_charset::charset#2 gfx_init_charset::charset#3 gfx_init_charset::charset#1 ] reg byte x [ gfx_init_charset::l#2 gfx_init_charset::l#1 ] zp[2]:133 [ gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 ] zp[1]:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ]
Uplifting [gfx_init_plane_fill] best 15300962 combination zp[2]:64 [ gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#6 ] reg byte x [ gfx_init_plane_fill::bx#2 gfx_init_plane_fill::bx#1 ] zp[1]:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ] zp[1]:62 [ gfx_init_plane_fill::fill#6 ] zp[4]:280 [ gfx_init_plane_fill::$0 ] zp[2]:284 [ gfx_init_plane_fill::$1 ] reg byte a [ gfx_init_plane_fill::gfxbCpuBank#0 ] zp[2]:287 [ gfx_init_plane_fill::$4 ] zp[2]:289 [ gfx_init_plane_fill::$5 ] zp[2]:291 [ gfx_init_plane_fill::gfxb#0 ] zp[4]:58 [ gfx_init_plane_fill::plane_addr#3 ]
Limited combination testing to 10 combinations of 32 possible.
Uplifting [bitmap_clear] best 15300074 combination zp[2]:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp[1]:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp[2]:321 [ bitmap_clear::bitmap#0 ]
Uplifting [gfx_init_screen4] best 15299174 combination zp[2]:139 [ gfx_init_screen4::ch#2 gfx_init_screen4::ch#3 gfx_init_screen4::ch#1 ] reg byte x [ gfx_init_screen4::cx#2 gfx_init_screen4::cx#1 ] zp[1]:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ]
Uplifting [gfx_init_plane_vertical] best 15298274 combination zp[2]:73 [ gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 ] reg byte x [ gfx_init_plane_vertical::bx#2 gfx_init_plane_vertical::bx#1 ] zp[1]:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ]
Uplifting [memset] best 15298274 combination zp[2]:56 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:278 [ memset::end#0 ] zp[2]:276 [ memset::str#0 ]
Uplifting [dtvSetCpuBankSegment1] best 15298135 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#13 dtvSetCpuBankSegment1::cpuBankIdx#1 dtvSetCpuBankSegment1::cpuBankIdx#11 ]
Uplifting [keyboard_event_get] best 15297226 combination reg byte a [ keyboard_event_get::return#3 ] reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] zp[1]:267 [ keyboard_event_get::return#4 ]
Uplifting [bitmap_clear] best 15300062 combination zp[2]:124 [ bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 ] reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ] zp[1]:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ] zp[2]:321 [ bitmap_clear::bitmap#0 ]
Uplifting [gfx_init_screen4] best 15299162 combination zp[2]:139 [ gfx_init_screen4::ch#2 gfx_init_screen4::ch#3 gfx_init_screen4::ch#1 ] reg byte x [ gfx_init_screen4::cx#2 gfx_init_screen4::cx#1 ] zp[1]:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ]
Uplifting [gfx_init_plane_vertical] best 15298262 combination zp[2]:73 [ gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 ] reg byte x [ gfx_init_plane_vertical::bx#2 gfx_init_plane_vertical::bx#1 ] zp[1]:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ]
Uplifting [memset] best 15298262 combination zp[2]:56 [ memset::dst#2 memset::dst#4 memset::dst#1 ] zp[2]:278 [ memset::end#0 ] zp[2]:276 [ memset::str#0 ]
Uplifting [dtvSetCpuBankSegment1] best 15298123 combination reg byte a [ dtvSetCpuBankSegment1::cpuBankIdx#13 dtvSetCpuBankSegment1::cpuBankIdx#1 dtvSetCpuBankSegment1::cpuBankIdx#11 ]
Uplifting [keyboard_event_get] best 15297214 combination reg byte a [ keyboard_event_get::return#3 ] reg byte a [ keyboard_event_get::return#2 keyboard_event_get::return#1 ] zp[1]:267 [ keyboard_event_get::return#4 ]
Limited combination testing to 10 combinations of 64 possible.
Uplifting [render_preset_name] best 15296890 combination reg byte a [ render_preset_name::idx#10 render_preset_name::idx#0 render_preset_name::idx#1 ] zp[2]:35 [ render_preset_name::name#13 ]
Uplifting [bitmap_init] best 15296590 combination zp[2]:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] zp[1]:129 [ bitmap_init::y#2 bitmap_init::y#1 ] zp[1]:323 [ bitmap_init::$0 ] zp[1]:325 [ bitmap_init::$7 ] zp[1]:326 [ bitmap_init::$8 ] zp[1]:327 [ bitmap_init::$9 ] zp[1]:324 [ bitmap_init::$10 ]
Uplifting [render_preset_name] best 15296878 combination reg byte a [ render_preset_name::idx#10 render_preset_name::idx#0 render_preset_name::idx#1 ] zp[2]:35 [ render_preset_name::name#13 ]
Uplifting [bitmap_init] best 15296578 combination zp[2]:130 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 ] reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ] reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ] zp[1]:129 [ bitmap_init::y#2 bitmap_init::y#1 ] zp[1]:323 [ bitmap_init::$0 ] zp[1]:325 [ bitmap_init::$7 ] zp[1]:326 [ bitmap_init::$8 ] zp[1]:327 [ bitmap_init::$9 ] zp[1]:324 [ bitmap_init::$10 ]
Limited combination testing to 10 combinations of 34560 possible.
Uplifting [gfx_init_vic_bitmap] best 15296590 combination zp[1]:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ]
Uplifting [keyboard_event_pressed] best 15296578 combination reg byte a [ keyboard_event_pressed::return#0 ] reg byte a [ keyboard_event_pressed::return#1 ] zp[1]:246 [ keyboard_event_pressed::return#2 ] zp[1]:248 [ keyboard_event_pressed::return#3 ] zp[1]:254 [ keyboard_event_pressed::$0 ] zp[1]:256 [ keyboard_event_pressed::$1 ] zp[1]:255 [ keyboard_event_pressed::row_bits#0 ] zp[1]:257 [ keyboard_event_pressed::return#10 ] zp[1]:19 [ keyboard_event_pressed::keycode#4 ]
Uplifting [gfx_init_vic_bitmap] best 15296578 combination zp[1]:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ]
Uplifting [keyboard_event_pressed] best 15296566 combination reg byte a [ keyboard_event_pressed::return#0 ] reg byte a [ keyboard_event_pressed::return#1 ] zp[1]:246 [ keyboard_event_pressed::return#2 ] zp[1]:248 [ keyboard_event_pressed::return#3 ] zp[1]:254 [ keyboard_event_pressed::$0 ] zp[1]:256 [ keyboard_event_pressed::$1 ] zp[1]:255 [ keyboard_event_pressed::row_bits#0 ] zp[1]:257 [ keyboard_event_pressed::return#10 ] zp[1]:19 [ keyboard_event_pressed::keycode#4 ]
Limited combination testing to 10 combinations of 147456 possible.
Uplifting [get_vic_screen] best 15296557 combination reg byte a [ get_vic_screen::idx#2 get_vic_screen::idx#0 get_vic_screen::idx#1 ] zp[2]:208 [ get_vic_screen::return#10 ] zp[2]:227 [ get_vic_screen::return#11 ] zp[2]:21 [ get_vic_screen::return#5 ]
Uplifting [get_plane] best 15296509 combination reg byte a [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] zp[4]:160 [ get_plane::return#16 ] zp[4]:185 [ get_plane::return#17 ] zp[4]:26 [ get_plane::return#14 ]
Uplifting [bitmap_line] best 15296463 combination zp[1]:303 [ bitmap_line::y1#0 ] zp[1]:302 [ bitmap_line::y0#0 ] reg byte x [ bitmap_line::x1#0 ] zp[1]:300 [ bitmap_line::x0#0 ] zp[1]:305 [ bitmap_line::yd#2 ] zp[1]:306 [ bitmap_line::yd#1 ] zp[1]:308 [ bitmap_line::yd#10 ] zp[1]:309 [ bitmap_line::yd#11 ] zp[1]:304 [ bitmap_line::xd#2 ] zp[1]:307 [ bitmap_line::xd#1 ]
Uplifting [get_vic_screen] best 15296545 combination reg byte a [ get_vic_screen::idx#2 get_vic_screen::idx#0 get_vic_screen::idx#1 ] zp[2]:208 [ get_vic_screen::return#10 ] zp[2]:227 [ get_vic_screen::return#11 ] zp[2]:21 [ get_vic_screen::return#5 ]
Uplifting [get_plane] best 15296497 combination reg byte a [ get_plane::idx#10 get_plane::idx#1 get_plane::idx#0 ] zp[4]:160 [ get_plane::return#16 ] zp[4]:185 [ get_plane::return#17 ] zp[4]:26 [ get_plane::return#14 ]
Uplifting [bitmap_line] best 15296451 combination zp[1]:303 [ bitmap_line::y1#0 ] zp[1]:302 [ bitmap_line::y0#0 ] reg byte x [ bitmap_line::x1#0 ] zp[1]:300 [ bitmap_line::x0#0 ] zp[1]:305 [ bitmap_line::yd#2 ] zp[1]:306 [ bitmap_line::yd#1 ] zp[1]:308 [ bitmap_line::yd#10 ] zp[1]:309 [ bitmap_line::yd#11 ] zp[1]:304 [ bitmap_line::xd#2 ] zp[1]:307 [ bitmap_line::xd#1 ]
Limited combination testing to 10 combinations of 186624 possible.
Uplifting [get_vic_charset] best 15296454 combination zp[2]:218 [ get_vic_charset::return#4 ] reg byte a [ get_vic_charset::idx#0 ] zp[2]:23 [ get_vic_charset::return#2 ]
Uplifting [RADIX] best 15296454 combination
Uplifting [print_ln] best 15296454 combination
Uplifting [print_cls] best 15296454 combination
Uplifting [print_set_screen] best 15296454 combination
Uplifting [keyboard_init] best 15296454 combination
Uplifting [main] best 15296454 combination
Uplifting [gfx_init] best 15296454 combination
Uplifting [gfx_init_plane_vertical2] best 15296454 combination
Uplifting [gfx_init_plane_blank] best 15296454 combination
Uplifting [gfx_init_plane_full] best 15296454 combination
Uplifting [get_vic_charset] best 15296442 combination zp[2]:218 [ get_vic_charset::return#4 ] reg byte a [ get_vic_charset::idx#0 ] zp[2]:23 [ get_vic_charset::return#2 ]
Uplifting [RADIX] best 15296442 combination
Uplifting [print_ln] best 15296442 combination
Uplifting [print_cls] best 15296442 combination
Uplifting [print_set_screen] best 15296442 combination
Uplifting [keyboard_init] best 15296442 combination
Uplifting [main] best 15296442 combination
Uplifting [gfx_init] best 15296442 combination
Uplifting [gfx_init_plane_vertical2] best 15296442 combination
Uplifting [gfx_init_plane_blank] best 15296442 combination
Uplifting [gfx_init_plane_full] best 15296442 combination
Attempting to uplift remaining variables inzp[1]:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ]
Uplifting [] best 15296454 combination zp[1]:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ]
Uplifting [] best 15296442 combination zp[1]:18 [ keyboard_events_size#18 keyboard_events_size#109 keyboard_events_size#99 keyboard_events_size#47 keyboard_events_size#27 keyboard_events_size#24 keyboard_events_size#100 keyboard_events_size#4 keyboard_events_size#108 keyboard_events_size#1 keyboard_events_size#2 ]
Attempting to uplift remaining variables inzp[1]:252 [ keyboard_event_scan::event_type#0 ]
Uplifting [keyboard_event_scan] best 14696454 combination reg byte a [ keyboard_event_scan::event_type#0 ]
Uplifting [keyboard_event_scan] best 14696442 combination reg byte a [ keyboard_event_scan::event_type#0 ]
Attempting to uplift remaining variables inzp[1]:253 [ keyboard_event_scan::$23 ]
Uplifting [keyboard_event_scan] best 14096454 combination reg byte a [ keyboard_event_scan::$23 ]
Uplifting [keyboard_event_scan] best 14096442 combination reg byte a [ keyboard_event_scan::$23 ]
Attempting to uplift remaining variables inzp[1]:16 [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
Uplifting [keyboard_event_scan] best 12596454 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
Uplifting [keyboard_event_scan] best 12596442 combination reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
Attempting to uplift remaining variables inzp[1]:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ]
Uplifting [keyboard_event_scan] best 12596454 combination zp[1]:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ]
Uplifting [keyboard_event_scan] best 12596442 combination zp[1]:17 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ]
Attempting to uplift remaining variables inzp[1]:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
Uplifting [keyboard_event_scan] best 12596454 combination zp[1]:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
Uplifting [keyboard_event_scan] best 12596442 combination zp[1]:14 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
Attempting to uplift remaining variables inzp[1]:241 [ keyboard_event_scan::row_scan#0 ]
Uplifting [keyboard_event_scan] best 12596454 combination zp[1]:241 [ keyboard_event_scan::row_scan#0 ]
Uplifting [keyboard_event_scan] best 12596442 combination zp[1]:241 [ keyboard_event_scan::row_scan#0 ]
Attempting to uplift remaining variables inzp[1]:258 [ keyboard_matrix_read::return#0 ]
Uplifting [keyboard_matrix_read] best 12566451 combination reg byte a [ keyboard_matrix_read::return#0 ]
Uplifting [keyboard_matrix_read] best 12566439 combination reg byte a [ keyboard_matrix_read::return#0 ]
Attempting to uplift remaining variables inzp[1]:10 [ gfx_mode::cx#2 gfx_mode::cx#1 ]
Uplifting [gfx_mode] best 12557451 combination reg byte x [ gfx_mode::cx#2 gfx_mode::cx#1 ]
Uplifting [gfx_mode] best 12557439 combination reg byte x [ gfx_mode::cx#2 gfx_mode::cx#1 ]
Attempting to uplift remaining variables inzp[1]:88 [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
Uplifting [gfx_init_plane_charset8] best 12548451 combination reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
Uplifting [gfx_init_plane_charset8] best 12548439 combination reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
Attempting to uplift remaining variables inzp[1]:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Uplifting [gfx_init_plane_charset8] best 12548451 combination zp[1]:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Uplifting [gfx_init_plane_charset8] best 12548439 combination zp[1]:84 [ gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 ]
Attempting to uplift remaining variables inzp[1]:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Uplifting [gfx_init_plane_charset8] best 12548451 combination zp[1]:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Uplifting [gfx_init_plane_charset8] best 12548439 combination zp[1]:87 [ gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
Attempting to uplift remaining variables inzp[1]:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ]
Uplifting [bitmap_line_xdyi] best 12548451 combination zp[1]:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ]
Uplifting [bitmap_line_xdyi] best 12548439 combination zp[1]:102 [ bitmap_line_xdyi::e#3 bitmap_line_xdyi::e#0 bitmap_line_xdyi::e#6 bitmap_line_xdyi::e#2 bitmap_line_xdyi::e#1 ]
Attempting to uplift remaining variables inzp[1]:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ]
Uplifting [bitmap_line_ydxi] best 12548451 combination zp[1]:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ]
Uplifting [bitmap_line_ydxi] best 12548439 combination zp[1]:110 [ bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ]
Attempting to uplift remaining variables inzp[1]:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ]
Uplifting [bitmap_line_xdyd] best 12548451 combination zp[1]:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ]
Uplifting [bitmap_line_xdyd] best 12548439 combination zp[1]:116 [ bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 ]
Attempting to uplift remaining variables inzp[1]:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ]
Uplifting [bitmap_line_ydxd] best 12548451 combination zp[1]:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ]
Uplifting [bitmap_line_ydxd] best 12548439 combination zp[1]:122 [ bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 ]
Attempting to uplift remaining variables inzp[1]:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ]
Uplifting [form_mode] best 12548451 combination zp[1]:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ]
Uplifting [form_mode] best 12548439 combination zp[1]:33 [ form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 ]
Attempting to uplift remaining variables inzp[1]:11 [ gfx_mode::j#2 gfx_mode::j#1 ]
Uplifting [gfx_mode] best 12547251 combination reg byte x [ gfx_mode::j#2 gfx_mode::j#1 ]
Uplifting [gfx_mode] best 12547239 combination reg byte x [ gfx_mode::j#2 gfx_mode::j#1 ]
Attempting to uplift remaining variables inzp[1]:12 [ gfx_mode::i#2 gfx_mode::i#1 ]
Uplifting [gfx_mode] best 12546051 combination reg byte x [ gfx_mode::i#2 gfx_mode::i#1 ]
Uplifting [gfx_mode] best 12546039 combination reg byte x [ gfx_mode::i#2 gfx_mode::i#1 ]
Attempting to uplift remaining variables inzp[1]:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ]
Uplifting [] best 12546051 combination zp[1]:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ]
Uplifting [] best 12546039 combination zp[1]:31 [ form_cursor_count#21 form_cursor_count#1 form_cursor_count#16 form_cursor_count#15 form_cursor_count#5 ]
Attempting to uplift remaining variables inzp[1]:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ]
Uplifting [bitmap_line_xdyi] best 12546051 combination zp[1]:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ]
Uplifting [bitmap_line_xdyi] best 12546039 combination zp[1]:101 [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ]
Attempting to uplift remaining variables inzp[1]:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ]
Uplifting [bitmap_line_xdyd] best 12546051 combination zp[1]:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ]
Uplifting [bitmap_line_xdyd] best 12546039 combination zp[1]:115 [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ]
Attempting to uplift remaining variables inzp[1]:238 [ gfx_mode::keyboard_event#0 ]
Uplifting [gfx_mode] best 12545451 combination reg byte a [ gfx_mode::keyboard_event#0 ]
Uplifting [gfx_mode] best 12545439 combination reg byte a [ gfx_mode::keyboard_event#0 ]
Attempting to uplift remaining variables inzp[1]:274 [ form_set_screen::$1 ]
Uplifting [form_set_screen] best 12544851 combination reg byte a [ form_set_screen::$1 ]
Uplifting [form_set_screen] best 12544839 combination reg byte a [ form_set_screen::$1 ]
Attempting to uplift remaining variables inzp[1]:331 [ gfx_init_screen3::$3 ]
Uplifting [gfx_init_screen3] best 12544251 combination reg byte a [ gfx_init_screen3::$3 ]
Uplifting [gfx_init_screen3] best 12544239 combination reg byte a [ gfx_init_screen3::$3 ]
Attempting to uplift remaining variables inzp[1]:336 [ gfx_init_screen2::$4 ]
Uplifting [gfx_init_screen2] best 12543651 combination reg byte a [ gfx_init_screen2::$4 ]
Uplifting [gfx_init_screen2] best 12543639 combination reg byte a [ gfx_init_screen2::$4 ]
Attempting to uplift remaining variables inzp[1]:338 [ gfx_init_screen1::$1 ]
Uplifting [gfx_init_screen1] best 12543051 combination reg byte a [ gfx_init_screen1::$1 ]
Uplifting [gfx_init_screen1] best 12543039 combination reg byte a [ gfx_init_screen1::$1 ]
Attempting to uplift remaining variables inzp[1]:342 [ gfx_init_screen0::$3 ]
Uplifting [gfx_init_screen0] best 12542451 combination reg byte a [ gfx_init_screen0::$3 ]
Uplifting [gfx_init_screen0] best 12542439 combination reg byte a [ gfx_init_screen0::$3 ]
Attempting to uplift remaining variables inzp[1]:143 [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ]
Uplifting [gfx_init_screen3] best 12541451 combination reg byte x [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ]
Uplifting [gfx_init_screen3] best 12541439 combination reg byte x [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ]
Attempting to uplift remaining variables inzp[1]:155 [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
Uplifting [gfx_init_screen0] best 12540451 combination reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
Uplifting [gfx_init_screen0] best 12540439 combination reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
Attempting to uplift remaining variables inzp[1]:71 [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ]
Uplifting [gfx_init_plane_horisontal2] best 12539551 combination reg byte x [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ]
Uplifting [gfx_init_plane_horisontal2] best 12539539 combination reg byte x [ gfx_init_plane_horisontal2::ax#2 gfx_init_plane_horisontal2::ax#1 ]
Attempting to uplift remaining variables inzp[1]:147 [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ]
Uplifting [gfx_init_screen2] best 12538551 combination reg byte x [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ]
Uplifting [gfx_init_screen2] best 12538539 combination reg byte x [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ]
Attempting to uplift remaining variables inzp[1]:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ]
Uplifting [gfx_mode] best 12538551 combination zp[1]:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ]
Uplifting [gfx_mode] best 12538539 combination zp[1]:5 [ gfx_mode::cy#4 gfx_mode::cy#1 ]
Attempting to uplift remaining variables inzp[1]:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Uplifting [gfx_init_plane_charset8] best 12538551 combination zp[1]:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Uplifting [gfx_init_plane_charset8] best 12538539 combination zp[1]:83 [ gfx_init_plane_charset8::cr#6 gfx_init_plane_charset8::cr#1 ]
Attempting to uplift remaining variables inzp[1]:333 [ gfx_init_screen2::col#0 ]
Uplifting [gfx_init_screen2] best 12538451 combination reg byte y [ gfx_init_screen2::col#0 ]
Uplifting [gfx_init_screen2] best 12538439 combination reg byte y [ gfx_init_screen2::col#0 ]
Attempting to uplift remaining variables inzp[1]:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ]
Uplifting [bitmap_line_xdyi] best 12538451 combination zp[1]:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ]
Uplifting [bitmap_line_xdyi] best 12538439 combination zp[1]:100 [ bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 ]
Attempting to uplift remaining variables inzp[1]:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ]
Uplifting [bitmap_line_ydxi] best 12538451 combination zp[1]:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ]
Uplifting [bitmap_line_ydxi] best 12538439 combination zp[1]:109 [ bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 ]
Attempting to uplift remaining variables inzp[1]:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ]
Uplifting [bitmap_line_xdyd] best 12538451 combination zp[1]:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ]
Uplifting [bitmap_line_xdyd] best 12538439 combination zp[1]:114 [ bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 ]
Attempting to uplift remaining variables inzp[1]:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ]
Uplifting [bitmap_line_ydxd] best 12538451 combination zp[1]:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ]
Uplifting [bitmap_line_ydxd] best 12538439 combination zp[1]:121 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 ]
Attempting to uplift remaining variables inzp[1]:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ]
Uplifting [] best 12538451 combination zp[1]:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ]
Uplifting [] best 12538439 combination zp[1]:32 [ form_field_idx#28 form_field_idx#1 form_field_idx#18 form_field_idx#31 form_field_idx#6 form_field_idx#5 ]
Attempting to uplift remaining variables inzp[1]:329 [ gfx_init_screen3::$1 ]
Uplifting [gfx_init_screen3] best 12538451 combination zp[1]:329 [ gfx_init_screen3::$1 ]
Uplifting [gfx_init_screen3] best 12538439 combination zp[1]:329 [ gfx_init_screen3::$1 ]
Attempting to uplift remaining variables inzp[1]:334 [ gfx_init_screen2::col2#0 ]
Uplifting [gfx_init_screen2] best 12538451 combination zp[1]:334 [ gfx_init_screen2::col2#0 ]
Uplifting [gfx_init_screen2] best 12538439 combination zp[1]:334 [ gfx_init_screen2::col2#0 ]
Attempting to uplift remaining variables inzp[1]:340 [ gfx_init_screen0::$1 ]
Uplifting [gfx_init_screen0] best 12538451 combination zp[1]:340 [ gfx_init_screen0::$1 ]
Uplifting [gfx_init_screen0] best 12538439 combination zp[1]:340 [ gfx_init_screen0::$1 ]
Attempting to uplift remaining variables inzp[1]:2 [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ]
Uplifting [gfx_mode] best 12538432 combination reg byte x [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ]
Uplifting [gfx_mode] best 12538420 combination reg byte x [ gfx_mode::dtv_control#12 gfx_mode::dtv_control#6 gfx_mode::dtv_control#13 gfx_mode::dtv_control#5 gfx_mode::dtv_control#11 gfx_mode::dtv_control#4 gfx_mode::dtv_control#10 gfx_mode::dtv_control#3 gfx_mode::dtv_control#15 gfx_mode::dtv_control#14 gfx_mode::dtv_control#2 ]
Attempting to uplift remaining variables inzp[1]:265 [ form_field_ptr::x#0 ]
Uplifting [form_field_ptr] best 12538432 combination zp[1]:265 [ form_field_ptr::x#0 ]
Uplifting [form_field_ptr] best 12538420 combination zp[1]:265 [ form_field_ptr::x#0 ]
Attempting to uplift remaining variables inzp[1]:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ]
Uplifting [gfx_init_vic_bitmap] best 12538432 combination zp[1]:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ]
Uplifting [gfx_init_vic_bitmap] best 12538420 combination zp[1]:96 [ gfx_init_vic_bitmap::l#2 gfx_init_vic_bitmap::l#1 ]
Attempting to uplift remaining variables inzp[1]:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ]
Uplifting [gfx_init_plane_horisontal2] best 12538432 combination zp[1]:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ]
Uplifting [gfx_init_plane_horisontal2] best 12538420 combination zp[1]:68 [ gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 ]
Attempting to uplift remaining variables inzp[1]:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ]
Uplifting [gfx_init_screen1] best 12538432 combination zp[1]:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ]
Uplifting [gfx_init_screen1] best 12538420 combination zp[1]:150 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 ]
Attempting to uplift remaining variables inzp[1]:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ]
Uplifting [gfx_init_screen3] best 12538432 combination zp[1]:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ]
Uplifting [gfx_init_screen3] best 12538420 combination zp[1]:142 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 ]
Attempting to uplift remaining variables inzp[1]:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Uplifting [gfx_init_screen0] best 12538432 combination zp[1]:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Uplifting [gfx_init_screen0] best 12538420 combination zp[1]:154 [ gfx_init_screen0::cy#4 gfx_init_screen0::cy#1 ]
Attempting to uplift remaining variables inzp[1]:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ]
Uplifting [gfx_init_plane_horisontal] best 12538432 combination zp[1]:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ]
Uplifting [gfx_init_plane_horisontal] best 12538420 combination zp[1]:76 [ gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 ]
Attempting to uplift remaining variables inzp[1]:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ]
Uplifting [gfx_init_screen2] best 12538432 combination zp[1]:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ]
Uplifting [gfx_init_screen2] best 12538420 combination zp[1]:146 [ gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 ]
Attempting to uplift remaining variables inzp[1]:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ]
Uplifting [gfx_init_plane_8bppchunky] best 12538432 combination zp[1]:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ]
Uplifting [gfx_init_plane_8bppchunky] best 12538420 combination zp[1]:90 [ gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 ]
Attempting to uplift remaining variables inzp[1]:129 [ bitmap_init::y#2 bitmap_init::y#1 ]
Uplifting [bitmap_init] best 12538252 combination reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
Uplifting [bitmap_init] best 12538240 combination reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
Attempting to uplift remaining variables inzp[1]:323 [ bitmap_init::$0 ]
Uplifting [bitmap_init] best 12538212 combination reg byte a [ bitmap_init::$0 ]
Uplifting [bitmap_init] best 12538200 combination reg byte a [ bitmap_init::$0 ]
Attempting to uplift remaining variables inzp[1]:325 [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 12538152 combination reg byte a [ bitmap_init::$7 ]
Uplifting [bitmap_init] best 12538140 combination reg byte a [ bitmap_init::$7 ]
Attempting to uplift remaining variables inzp[1]:326 [ bitmap_init::$8 ]
Uplifting [bitmap_init] best 12538092 combination reg byte a [ bitmap_init::$8 ]
Uplifting [bitmap_init] best 12538080 combination reg byte a [ bitmap_init::$8 ]
Attempting to uplift remaining variables inzp[1]:327 [ bitmap_init::$9 ]
Uplifting [bitmap_init] best 12538032 combination reg byte a [ bitmap_init::$9 ]
Uplifting [bitmap_init] best 12538020 combination reg byte a [ bitmap_init::$9 ]
Attempting to uplift remaining variables inzp[1]:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ]
Uplifting [gfx_init_plane_fill] best 12538032 combination zp[1]:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ]
Uplifting [gfx_init_plane_fill] best 12538020 combination zp[1]:63 [ gfx_init_plane_fill::by#4 gfx_init_plane_fill::by#1 ]
Attempting to uplift remaining variables inzp[1]:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ]
Uplifting [gfx_init_plane_vertical] best 12538032 combination zp[1]:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ]
Uplifting [gfx_init_plane_vertical] best 12538020 combination zp[1]:72 [ gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 ]
Attempting to uplift remaining variables inzp[1]:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Uplifting [bitmap_clear] best 12538032 combination zp[1]:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Uplifting [bitmap_clear] best 12538020 combination zp[1]:123 [ bitmap_clear::y#4 bitmap_clear::y#1 ]
Attempting to uplift remaining variables inzp[1]:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ]
Uplifting [gfx_init_screen4] best 12538032 combination zp[1]:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ]
Uplifting [gfx_init_screen4] best 12538020 combination zp[1]:138 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 ]
Attempting to uplift remaining variables inzp[1]:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ]
Uplifting [gfx_init_charset] best 12538032 combination zp[1]:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ]
Uplifting [gfx_init_charset] best 12538020 combination zp[1]:132 [ gfx_init_charset::c#4 gfx_init_charset::c#1 ]
Attempting to uplift remaining variables inzp[1]:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ]
Uplifting [bitmap_line_xdyi] best 12538032 combination zp[1]:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ]
Uplifting [bitmap_line_xdyi] best 12538020 combination zp[1]:98 [ bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 ]
Attempting to uplift remaining variables inzp[1]:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ]
Uplifting [bitmap_line_ydxi] best 12538032 combination zp[1]:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ]
Uplifting [bitmap_line_ydxi] best 12538020 combination zp[1]:106 [ bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 ]
Attempting to uplift remaining variables inzp[1]:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ]
Uplifting [bitmap_line_xdyd] best 12538032 combination zp[1]:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ]
Uplifting [bitmap_line_xdyd] best 12538020 combination zp[1]:112 [ bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 ]
Attempting to uplift remaining variables inzp[1]:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ]
Uplifting [bitmap_line_ydxd] best 12538032 combination zp[1]:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ]
Uplifting [bitmap_line_ydxd] best 12538020 combination zp[1]:118 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 ]
Attempting to uplift remaining variables inzp[1]:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Uplifting [gfx_init_plane_charset8] best 12538032 combination zp[1]:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Uplifting [gfx_init_plane_charset8] best 12538020 combination zp[1]:80 [ gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 ]
Attempting to uplift remaining variables inzp[1]:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ]
Uplifting [bitmap_line_xdyi] best 12538032 combination zp[1]:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ]
Uplifting [bitmap_line_xdyi] best 12538020 combination zp[1]:97 [ bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 ]
Attempting to uplift remaining variables inzp[1]:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ]
Uplifting [bitmap_line_ydxi] best 12538032 combination zp[1]:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ]
Uplifting [bitmap_line_ydxi] best 12538020 combination zp[1]:105 [ bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 ]
Attempting to uplift remaining variables inzp[1]:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ]
Uplifting [bitmap_line_xdyd] best 12538032 combination zp[1]:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ]
Uplifting [bitmap_line_xdyd] best 12538020 combination zp[1]:111 [ bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 ]
Attempting to uplift remaining variables inzp[1]:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
Uplifting [bitmap_line_ydxd] best 12538032 combination zp[1]:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
Uplifting [bitmap_line_ydxd] best 12538020 combination zp[1]:117 [ bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
Attempting to uplift remaining variables inzp[1]:3 [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ]
Uplifting [gfx_mode] best 12538021 combination reg byte x [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ]
Uplifting [gfx_mode] best 12538009 combination reg byte x [ gfx_mode::vic_control#4 gfx_mode::vic_control#2 gfx_mode::vic_control#5 ]
Attempting to uplift remaining variables inzp[1]:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ]
Uplifting [bitmap_line_xdyi] best 12538021 combination zp[1]:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ]
Uplifting [bitmap_line_xdyi] best 12538009 combination zp[1]:99 [ bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 ]
Attempting to uplift remaining variables inzp[1]:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ]
Uplifting [bitmap_line_ydxi] best 12538021 combination zp[1]:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ]
Uplifting [bitmap_line_ydxi] best 12538009 combination zp[1]:107 [ bitmap_line_ydxi::y1#6 bitmap_line_ydxi::y1#1 bitmap_line_ydxi::y1#0 ]
Attempting to uplift remaining variables inzp[1]:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ]
Uplifting [bitmap_line_xdyd] best 12538021 combination zp[1]:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ]
Uplifting [bitmap_line_xdyd] best 12538009 combination zp[1]:113 [ bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 ]
Attempting to uplift remaining variables inzp[1]:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ]
Uplifting [bitmap_line_ydxd] best 12538021 combination zp[1]:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ]
Uplifting [bitmap_line_ydxd] best 12538009 combination zp[1]:119 [ bitmap_line_ydxd::y1#6 bitmap_line_ydxd::y1#0 bitmap_line_ydxd::y1#1 ]
Attempting to uplift remaining variables inzp[1]:62 [ gfx_init_plane_fill::fill#6 ]
Uplifting [gfx_init_plane_fill] best 12538021 combination zp[1]:62 [ gfx_init_plane_fill::fill#6 ]
Uplifting [gfx_init_plane_fill] best 12538009 combination zp[1]:62 [ gfx_init_plane_fill::fill#6 ]
Attempting to uplift remaining variables inzp[1]:324 [ bitmap_init::$10 ]
Uplifting [bitmap_init] best 12538021 combination zp[1]:324 [ bitmap_init::$10 ]
Uplifting [bitmap_init] best 12538009 combination zp[1]:324 [ bitmap_init::$10 ]
Attempting to uplift remaining variables inzp[1]:158 [ gfx_mode::$20 ]
Uplifting [gfx_mode] best 12538015 combination reg byte a [ gfx_mode::$20 ]
Uplifting [gfx_mode] best 12538003 combination reg byte a [ gfx_mode::$20 ]
Attempting to uplift remaining variables inzp[1]:174 [ gfx_mode::$25 ]
Uplifting [gfx_mode] best 12538009 combination reg byte a [ gfx_mode::$25 ]
Uplifting [gfx_mode] best 12537997 combination reg byte a [ gfx_mode::$25 ]
Attempting to uplift remaining variables inzp[1]:175 [ gfx_mode::$27 ]
Uplifting [gfx_mode] best 12538003 combination reg byte a [ gfx_mode::$27 ]
Uplifting [gfx_mode] best 12537991 combination reg byte a [ gfx_mode::$27 ]
Attempting to uplift remaining variables inzp[1]:178 [ gfx_mode::$29 ]
Uplifting [gfx_mode] best 12537997 combination reg byte a [ gfx_mode::$29 ]
Uplifting [gfx_mode] best 12537985 combination reg byte a [ gfx_mode::$29 ]
Attempting to uplift remaining variables inzp[1]:179 [ gfx_mode::$30 ]
Uplifting [gfx_mode] best 12537991 combination reg byte a [ gfx_mode::$30 ]
Uplifting [gfx_mode] best 12537979 combination reg byte a [ gfx_mode::$30 ]
Attempting to uplift remaining variables inzp[1]:180 [ gfx_mode::$31 ]
Uplifting [gfx_mode] best 12537985 combination reg byte a [ gfx_mode::$31 ]
Uplifting [gfx_mode] best 12537973 combination reg byte a [ gfx_mode::$31 ]
Attempting to uplift remaining variables inzp[1]:181 [ gfx_mode::$32 ]
Uplifting [gfx_mode] best 12537979 combination reg byte a [ gfx_mode::$32 ]
Uplifting [gfx_mode] best 12537967 combination reg byte a [ gfx_mode::$32 ]
Attempting to uplift remaining variables inzp[1]:182 [ gfx_mode::$33 ]
Uplifting [gfx_mode] best 12537973 combination reg byte a [ gfx_mode::$33 ]
Uplifting [gfx_mode] best 12537961 combination reg byte a [ gfx_mode::$33 ]
Attempting to uplift remaining variables inzp[1]:183 [ gfx_mode::$34 ]
Uplifting [gfx_mode] best 12537967 combination reg byte a [ gfx_mode::$34 ]
Uplifting [gfx_mode] best 12537955 combination reg byte a [ gfx_mode::$34 ]
Attempting to uplift remaining variables inzp[1]:199 [ gfx_mode::$39 ]
Uplifting [gfx_mode] best 12537961 combination reg byte a [ gfx_mode::$39 ]
Uplifting [gfx_mode] best 12537949 combination reg byte a [ gfx_mode::$39 ]
Attempting to uplift remaining variables inzp[1]:200 [ gfx_mode::$41 ]
Uplifting [gfx_mode] best 12537955 combination reg byte a [ gfx_mode::$41 ]
Uplifting [gfx_mode] best 12537943 combination reg byte a [ gfx_mode::$41 ]
Attempting to uplift remaining variables inzp[1]:203 [ gfx_mode::$43 ]
Uplifting [gfx_mode] best 12537949 combination reg byte a [ gfx_mode::$43 ]
Uplifting [gfx_mode] best 12537937 combination reg byte a [ gfx_mode::$43 ]
Attempting to uplift remaining variables inzp[1]:204 [ gfx_mode::$44 ]
Uplifting [gfx_mode] best 12537943 combination reg byte a [ gfx_mode::$44 ]
Uplifting [gfx_mode] best 12537931 combination reg byte a [ gfx_mode::$44 ]
Attempting to uplift remaining variables inzp[1]:205 [ gfx_mode::$45 ]
Uplifting [gfx_mode] best 12537937 combination reg byte a [ gfx_mode::$45 ]
Uplifting [gfx_mode] best 12537925 combination reg byte a [ gfx_mode::$45 ]
Attempting to uplift remaining variables inzp[1]:206 [ gfx_mode::$46 ]
Uplifting [gfx_mode] best 12537931 combination reg byte a [ gfx_mode::$46 ]
Uplifting [gfx_mode] best 12537919 combination reg byte a [ gfx_mode::$46 ]
Attempting to uplift remaining variables inzp[1]:207 [ gfx_mode::$47 ]
Uplifting [gfx_mode] best 12537925 combination reg byte a [ gfx_mode::$47 ]
Uplifting [gfx_mode] best 12537913 combination reg byte a [ gfx_mode::$47 ]
Attempting to uplift remaining variables inzp[1]:224 [ gfx_mode::$60 ]
Uplifting [gfx_mode] best 12537919 combination reg byte a [ gfx_mode::$60 ]
Uplifting [gfx_mode] best 12537907 combination reg byte a [ gfx_mode::$60 ]
Attempting to uplift remaining variables inzp[1]:225 [ gfx_mode::$61 ]
Uplifting [gfx_mode] best 12537913 combination reg byte a [ gfx_mode::$61 ]
Uplifting [gfx_mode] best 12537901 combination reg byte a [ gfx_mode::$61 ]
Attempting to uplift remaining variables inzp[1]:226 [ gfx_mode::$62 ]
Uplifting [gfx_mode] best 12537907 combination reg byte a [ gfx_mode::$62 ]
Uplifting [gfx_mode] best 12537895 combination reg byte a [ gfx_mode::$62 ]
Attempting to uplift remaining variables inzp[1]:229 [ gfx_mode::$64 ]
Uplifting [gfx_mode] best 12537901 combination reg byte a [ gfx_mode::$64 ]
Uplifting [gfx_mode] best 12537889 combination reg byte a [ gfx_mode::$64 ]
Attempting to uplift remaining variables inzp[1]:230 [ gfx_mode::$65 ]
Uplifting [gfx_mode] best 12537895 combination reg byte a [ gfx_mode::$65 ]
Uplifting [gfx_mode] best 12537883 combination reg byte a [ gfx_mode::$65 ]
Attempting to uplift remaining variables inzp[1]:231 [ gfx_mode::$66 ]
Uplifting [gfx_mode] best 12537889 combination reg byte a [ gfx_mode::$66 ]
Uplifting [gfx_mode] best 12537877 combination reg byte a [ gfx_mode::$66 ]
Attempting to uplift remaining variables inzp[1]:232 [ gfx_mode::$67 ]
Uplifting [gfx_mode] best 12537883 combination reg byte a [ gfx_mode::$67 ]
Uplifting [gfx_mode] best 12537871 combination reg byte a [ gfx_mode::$67 ]
Attempting to uplift remaining variables inzp[1]:233 [ gfx_mode::$68 ]
Uplifting [gfx_mode] best 12537877 combination reg byte a [ gfx_mode::$68 ]
Uplifting [gfx_mode] best 12537865 combination reg byte a [ gfx_mode::$68 ]
Attempting to uplift remaining variables inzp[1]:234 [ gfx_mode::$69 ]
Uplifting [gfx_mode] best 12537871 combination reg byte a [ gfx_mode::$69 ]
Uplifting [gfx_mode] best 12537859 combination reg byte a [ gfx_mode::$69 ]
Attempting to uplift remaining variables inzp[1]:235 [ gfx_mode::$70 ]
Uplifting [gfx_mode] best 12537865 combination reg byte a [ gfx_mode::$70 ]
Uplifting [gfx_mode] best 12537853 combination reg byte a [ gfx_mode::$70 ]
Attempting to uplift remaining variables inzp[1]:236 [ gfx_mode::$71 ]
Uplifting [gfx_mode] best 12537859 combination reg byte a [ gfx_mode::$71 ]
Uplifting [gfx_mode] best 12537847 combination reg byte a [ gfx_mode::$71 ]
Attempting to uplift remaining variables inzp[1]:243 [ keyboard_event_scan::$0 ]
Uplifting [keyboard_event_scan] best 12537853 combination reg byte a [ keyboard_event_scan::$0 ]
Uplifting [keyboard_event_scan] best 12537841 combination reg byte a [ keyboard_event_scan::$0 ]
Attempting to uplift remaining variables inzp[1]:245 [ keyboard_event_scan::$3 ]
Uplifting [keyboard_event_scan] best 12537847 combination reg byte a [ keyboard_event_scan::$3 ]
Uplifting [keyboard_event_scan] best 12537835 combination reg byte a [ keyboard_event_scan::$3 ]
Attempting to uplift remaining variables inzp[1]:246 [ keyboard_event_pressed::return#2 ]
Uplifting [keyboard_event_pressed] best 12537841 combination reg byte a [ keyboard_event_pressed::return#2 ]
Uplifting [keyboard_event_pressed] best 12537829 combination reg byte a [ keyboard_event_pressed::return#2 ]
Attempting to uplift remaining variables inzp[1]:247 [ keyboard_event_scan::$6 ]
Uplifting [keyboard_event_scan] best 12537835 combination reg byte a [ keyboard_event_scan::$6 ]
Uplifting [keyboard_event_scan] best 12537823 combination reg byte a [ keyboard_event_scan::$6 ]
Attempting to uplift remaining variables inzp[1]:248 [ keyboard_event_pressed::return#3 ]
Uplifting [keyboard_event_pressed] best 12537829 combination reg byte a [ keyboard_event_pressed::return#3 ]
Uplifting [keyboard_event_pressed] best 12537817 combination reg byte a [ keyboard_event_pressed::return#3 ]
Attempting to uplift remaining variables inzp[1]:249 [ keyboard_event_scan::$9 ]
Uplifting [keyboard_event_scan] best 12537823 combination reg byte a [ keyboard_event_scan::$9 ]
Uplifting [keyboard_event_scan] best 12537811 combination reg byte a [ keyboard_event_scan::$9 ]
Attempting to uplift remaining variables inzp[1]:254 [ keyboard_event_pressed::$0 ]
Uplifting [keyboard_event_pressed] best 12537819 combination reg byte a [ keyboard_event_pressed::$0 ]
Uplifting [keyboard_event_pressed] best 12537807 combination reg byte a [ keyboard_event_pressed::$0 ]
Attempting to uplift remaining variables inzp[1]:256 [ keyboard_event_pressed::$1 ]
Uplifting [keyboard_event_pressed] best 12537815 combination reg byte a [ keyboard_event_pressed::$1 ]
Uplifting [keyboard_event_pressed] best 12537803 combination reg byte a [ keyboard_event_pressed::$1 ]
Attempting to uplift remaining variables inzp[1]:266 [ form_control::$13 ]
Uplifting [form_control] best 12537809 combination reg byte a [ form_control::$13 ]
Uplifting [form_control] best 12537797 combination reg byte a [ form_control::$13 ]
Attempting to uplift remaining variables inzp[1]:267 [ keyboard_event_get::return#4 ]
Uplifting [keyboard_event_get] best 12537803 combination reg byte a [ keyboard_event_get::return#4 ]
Uplifting [keyboard_event_get] best 12537791 combination reg byte a [ keyboard_event_get::return#4 ]
Attempting to uplift remaining variables inzp[1]:269 [ form_control::$15 ]
Uplifting [form_control] best 12537797 combination reg byte a [ form_control::$15 ]
Uplifting [form_control] best 12537785 combination reg byte a [ form_control::$15 ]
Attempting to uplift remaining variables inzp[1]:270 [ form_control::$16 ]
Uplifting [form_control] best 12537793 combination reg byte a [ form_control::$16 ]
Uplifting [form_control] best 12537781 combination reg byte a [ form_control::$16 ]
Attempting to uplift remaining variables inzp[1]:271 [ form_control::$24 ]
Uplifting [form_control] best 12537789 combination reg byte a [ form_control::$24 ]
Uplifting [form_control] best 12537777 combination reg byte a [ form_control::$24 ]
Attempting to uplift remaining variables inzp[1]:272 [ form_control::$14 ]
Uplifting [form_control] best 12537783 combination reg byte a [ form_control::$14 ]
Uplifting [form_control] best 12537771 combination reg byte a [ form_control::$14 ]
Attempting to uplift remaining variables inzp[1]:317 [ bitmap_plot::$1 ]
Uplifting [bitmap_plot] best 12537777 combination reg byte a [ bitmap_plot::$1 ]
Uplifting [bitmap_plot] best 12537765 combination reg byte a [ bitmap_plot::$1 ]
Attempting to uplift remaining variables inzp[1]:268 [ form_control::key_event#0 ]
Uplifting [form_control] best 12537765 combination reg byte a [ form_control::key_event#0 ]
Uplifting [form_control] best 12537753 combination reg byte a [ form_control::key_event#0 ]
Attempting to uplift remaining variables inzp[1]:4 [ gfx_mode::vic_control2#2 ]
Uplifting [gfx_mode] best 12537756 combination reg byte a [ gfx_mode::vic_control2#2 ]
Uplifting [gfx_mode] best 12537744 combination reg byte a [ gfx_mode::vic_control2#2 ]
Attempting to uplift remaining variables inzp[1]:255 [ keyboard_event_pressed::row_bits#0 ]
Uplifting [keyboard_event_pressed] best 12537756 combination zp[1]:255 [ keyboard_event_pressed::row_bits#0 ]
Uplifting [keyboard_event_pressed] best 12537744 combination zp[1]:255 [ keyboard_event_pressed::row_bits#0 ]
Attempting to uplift remaining variables inzp[1]:303 [ bitmap_line::y1#0 ]
Uplifting [bitmap_line] best 12537756 combination zp[1]:303 [ bitmap_line::y1#0 ]
Uplifting [bitmap_line] best 12537744 combination zp[1]:303 [ bitmap_line::y1#0 ]
Attempting to uplift remaining variables inzp[1]:302 [ bitmap_line::y0#0 ]
Uplifting [bitmap_line] best 12537756 combination zp[1]:302 [ bitmap_line::y0#0 ]
Uplifting [bitmap_line] best 12537744 combination zp[1]:302 [ bitmap_line::y0#0 ]
Attempting to uplift remaining variables inzp[1]:257 [ keyboard_event_pressed::return#10 ]
Uplifting [keyboard_event_pressed] best 12537741 combination reg byte a [ keyboard_event_pressed::return#10 ]
Uplifting [keyboard_event_pressed] best 12537729 combination reg byte a [ keyboard_event_pressed::return#10 ]
Attempting to uplift remaining variables inzp[1]:19 [ keyboard_event_pressed::keycode#4 ]
Uplifting [keyboard_event_pressed] best 12537741 combination zp[1]:19 [ keyboard_event_pressed::keycode#4 ]
Uplifting [keyboard_event_pressed] best 12537729 combination zp[1]:19 [ keyboard_event_pressed::keycode#4 ]
Attempting to uplift remaining variables inzp[1]:300 [ bitmap_line::x0#0 ]
Uplifting [bitmap_line] best 12537741 combination zp[1]:300 [ bitmap_line::x0#0 ]
Uplifting [bitmap_line] best 12537729 combination zp[1]:300 [ bitmap_line::x0#0 ]
Attempting to uplift remaining variables inzp[1]:305 [ bitmap_line::yd#2 ]
Uplifting [bitmap_line] best 12537731 combination reg byte y [ bitmap_line::yd#2 ]
Uplifting [bitmap_line] best 12537719 combination reg byte y [ bitmap_line::yd#2 ]
Attempting to uplift remaining variables inzp[1]:306 [ bitmap_line::yd#1 ]
Uplifting [bitmap_line] best 12537721 combination reg byte y [ bitmap_line::yd#1 ]
Uplifting [bitmap_line] best 12537709 combination reg byte y [ bitmap_line::yd#1 ]
Attempting to uplift remaining variables inzp[1]:308 [ bitmap_line::yd#10 ]
Uplifting [bitmap_line] best 12537711 combination reg byte y [ bitmap_line::yd#10 ]
Uplifting [bitmap_line] best 12537699 combination reg byte y [ bitmap_line::yd#10 ]
Attempting to uplift remaining variables inzp[1]:309 [ bitmap_line::yd#11 ]
Uplifting [bitmap_line] best 12537701 combination reg byte y [ bitmap_line::yd#11 ]
Uplifting [bitmap_line] best 12537689 combination reg byte y [ bitmap_line::yd#11 ]
Attempting to uplift remaining variables inzp[1]:159 [ gfx_mode::plane_a_offs#0 ]
Uplifting [gfx_mode] best 12537699 combination reg byte x [ gfx_mode::plane_a_offs#0 ]
Uplifting [gfx_mode] best 12537687 combination reg byte x [ gfx_mode::plane_a_offs#0 ]
Attempting to uplift remaining variables inzp[1]:184 [ gfx_mode::plane_b_offs#0 ]
Uplifting [gfx_mode] best 12537697 combination reg byte x [ gfx_mode::plane_b_offs#0 ]
Uplifting [gfx_mode] best 12537685 combination reg byte x [ gfx_mode::plane_b_offs#0 ]
Attempting to uplift remaining variables inzp[1]:304 [ bitmap_line::xd#2 ]
Uplifting [bitmap_line] best 12537697 combination zp[1]:304 [ bitmap_line::xd#2 ]
Uplifting [bitmap_line] best 12537685 combination zp[1]:304 [ bitmap_line::xd#2 ]
Attempting to uplift remaining variables inzp[1]:307 [ bitmap_line::xd#1 ]
Uplifting [bitmap_line] best 12537697 combination zp[1]:307 [ bitmap_line::xd#1 ]
Uplifting [bitmap_line] best 12537685 combination zp[1]:307 [ bitmap_line::xd#1 ]
Attempting to uplift remaining variables inzp[1]:216 [ gfx_mode::$56 ]
Uplifting [gfx_mode] best 12537697 combination zp[1]:216 [ gfx_mode::$56 ]
Uplifting [gfx_mode] best 12537685 combination zp[1]:216 [ gfx_mode::$56 ]
Coalescing zero page register [ zp[2]:6 [ gfx_mode::vic_colors#2 gfx_mode::vic_colors#3 gfx_mode::vic_colors#1 gfx_mode::vic_colors#0 ] ] with [ zp[2]:227 [ get_vic_screen::return#11 ] ] - score: 1
Coalescing zero page register [ zp[2]:21 [ get_vic_screen::return#5 ] ] with [ zp[2]:208 [ get_vic_screen::return#10 ] ] - score: 1
Coalescing zero page register [ zp[2]:23 [ get_vic_charset::return#2 ] ] with [ zp[2]:218 [ get_vic_charset::return#4 ] ] - score: 1
@ -25555,21 +25555,21 @@ gfx_init_plane_fill: {
.label fill = 8
// [481] (dword~) gfx_init_plane_fill::$0 ← (dword) gfx_init_plane_fill::plane_addr#3 << (byte) 2 -- vduz1=vduz2_rol_2
lda.z plane_addr
asl
sta.z __0
lda.z plane_addr+1
rol
sta.z __0+1
lda.z plane_addr+2
rol
sta.z __0+2
lda.z plane_addr+3
rol
sta.z __0+3
asl.z __0
rol.z __0+1
rol.z __0+2
rol.z __0+3
asl.z __0
rol.z __0+1
rol.z __0+2
rol.z __0+3
// [482] (word~) gfx_init_plane_fill::$1 ← > (dword~) gfx_init_plane_fill::$0 -- vwuz1=_hi_vduz2
lda.z __0+2
sta.z __1
@ -30172,7 +30172,7 @@ reg byte a [ gfx_init_screen0::$3 ]
FINAL ASSEMBLER
Score: 10133397
Score: 10133385
// File Comments
// Interactive Explorer for C64DTV Screen Modes
@ -33028,21 +33028,21 @@ gfx_init_plane_fill: {
// plane_addr*4
// [481] (dword~) gfx_init_plane_fill::$0 ← (dword) gfx_init_plane_fill::plane_addr#3 << (byte) 2 -- vduz1=vduz2_rol_2
lda.z plane_addr
asl
sta.z __0
lda.z plane_addr+1
rol
sta.z __0+1
lda.z plane_addr+2
rol
sta.z __0+2
lda.z plane_addr+3
rol
sta.z __0+3
asl.z __0
rol.z __0+1
rol.z __0+2
rol.z __0+3
asl.z __0
rol.z __0+1
rol.z __0+2
rol.z __0+3
// >(plane_addr*4)
// [482] (word~) gfx_init_plane_fill::$1 ← > (dword~) gfx_init_plane_fill::$0 -- vwuz1=_hi_vduz2
lda.z __0+2

View File

@ -25,7 +25,7 @@
.label SCREEN = $400
.label LOGO = $2000
.const XSIN_SIZE = $200
.label rem16u = $10
.label rem16u = $c
.label xsin_idx = $23
main: {
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>LOGO)/4&$f
@ -65,9 +65,9 @@ main: {
rts
}
loop: {
.label __2 = $16
.label __7 = $16
.label xpos = $16
.label __2 = $12
.label __7 = $12
.label xpos = $12
lda #<0
sta.z xsin_idx
sta.z xsin_idx+1
@ -117,13 +117,13 @@ loop: {
dec BORDERCOL
jmp __b1
}
// render_logo(signed word zeropage($16) xpos)
// render_logo(signed word zeropage($12) xpos)
render_logo: {
.label __3 = $1d
.label xpos = $16
.label x_char = $18
.label logo_idx = $b
.label logo_idx_1 = 2
.label __3 = $19
.label xpos = $12
.label x_char = $14
.label logo_idx = 2
.label logo_idx_1 = 3
lda.z xpos
and #7
ora #VIC_MCM
@ -248,16 +248,16 @@ render_logo: {
// Generate signed word sinus table - with values in the range min-max.
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen2(signed word* zeropage($10) sintab)
// sin16s_gen2(signed word* zeropage($c) sintab)
sin16s_gen2: {
.const min = -$140
.const max = $140
.label ampl = max-min
.label __6 = $c
.label __9 = $1d
.label step = $19
.label sintab = $10
.label x = 3
.label __6 = 8
.label __9 = $19
.label step = $15
.label sintab = $c
.label x = 4
.label i = $23
jsr div32u16u
lda #<xsin
@ -331,13 +331,13 @@ sin16s_gen2: {
}
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage($14) a)
// mul16s(signed word zeropage($10) a)
mul16s: {
.label __9 = $1f
.label __16 = $1f
.label m = $c
.label return = $c
.label a = $14
.label m = 8
.label return = 8
.label a = $10
lda.z a
sta.z mul16u.a
lda.z a+1
@ -372,13 +372,13 @@ mul16s: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($12) a, word zeropage($1d) b)
// mul16u(word zeropage($e) a, word zeropage($19) b)
mul16u: {
.label mb = 7
.label a = $12
.label res = $c
.label return = $c
.label b = $1d
.label mb = $1b
.label a = $e
.label res = 8
.label return = 8
.label b = $19
lda #0
sta.z res
sta.z res+1
@ -420,21 +420,20 @@ mul16u: {
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16s(dword zeropage($c) x)
// sin16s(dword zeropage(8) x)
sin16s: {
.label __4 = $c
.label x = $c
.label return = $14
.label __4 = $1b
.label x = 8
.label return = $10
.label x1 = $1f
.label x2 = $16
.label x3 = $16
.label x2 = $12
.label x3 = $12
.label x3_6 = $21
.label usinx = $14
.label x4 = $16
.label usinx = $10
.label x4 = $12
.label x5 = $21
.label x5_128 = $21
.label sinx = $14
.label isUpper = $b
.label sinx = $10
lda.z x+3
cmp #>PI_u4f28>>$10
bcc b1
@ -464,12 +463,10 @@ sin16s: {
lda.z x+3
sbc #>PI_u4f28>>$10
sta.z x+3
lda #1
sta.z isUpper
ldy #1
jmp __b1
b1:
lda #0
sta.z isUpper
ldy #0
__b1:
lda.z x+3
cmp #>PI_HALF_u4f28>>$10
@ -501,14 +498,26 @@ sin16s: {
sbc.z x+3
sta.z x+3
__b2:
ldy #3
!:
lda.z x
asl
sta.z __4
lda.z x+1
rol
sta.z __4+1
lda.z x+2
rol
sta.z __4+2
lda.z x+3
rol
sta.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
dey
bne !-
lda.z __4+2
sta.z x1
lda.z __4+3
@ -581,8 +590,7 @@ sin16s: {
lda.z usinx+1
adc.z x5_128+1
sta.z usinx+1
lda.z isUpper
cmp #0
cpy #0
beq __b3
sec
lda #0
@ -596,14 +604,14 @@ sin16s: {
}
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($16) v1, word zeropage($1d) v2, byte register(X) select)
// mulu16_sel(word zeropage($12) v1, word zeropage($19) v2, byte register(X) select)
mulu16_sel: {
.label __0 = $c
.label __1 = $c
.label v1 = $16
.label v2 = $1d
.label __0 = 8
.label __1 = 8
.label v1 = $12
.label v2 = $19
.label return = $21
.label return_1 = $16
.label return_1 = $12
lda.z v1
sta.z mul16u.a
lda.z v1+1
@ -636,8 +644,8 @@ mulu16_sel: {
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
.label quotient_hi = $21
.label quotient_lo = $12
.label return = $19
.label quotient_lo = $e
.label return = $15
lda #<PI2_u4f28>>$10
sta.z divr16u.dividend
lda #>PI2_u4f28>>$10
@ -669,12 +677,12 @@ div32u16u: {
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage($1d) dividend, word zeropage($10) rem)
// divr16u(word zeropage($19) dividend, word zeropage($c) rem)
divr16u: {
.label rem = $10
.label dividend = $1d
.label quotient = $12
.label return = $12
.label rem = $c
.label dividend = $19
.label quotient = $e
.label return = $e
ldx #0
txa
sta.z quotient
@ -720,11 +728,11 @@ divr16u: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zeropage($14) str, byte register(X) c)
// memset(void* zeropage($10) str, byte register(X) c)
memset: {
.label end = $23
.label dst = $14
.label str = $14
.label dst = $10
.label str = $10
lda.z str
clc
adc #<$3e8

File diff suppressed because it is too large Load Diff

View File

@ -31,10 +31,10 @@
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:33 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:18 4.0
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:14 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp[4]:25 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:25 4.0
(dword) div32u16u::return#0 return zp[4]:21 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:21 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
@ -46,33 +46,33 @@
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp[2]:29 2.75
(word) divr16u::dividend#3 dividend zp[2]:29 5.0
(word) divr16u::dividend#5 dividend zp[2]:29 2.0
(word) divr16u::dividend#0 dividend zp[2]:25 2.75
(word) divr16u::dividend#3 dividend zp[2]:25 5.0
(word) divr16u::dividend#5 dividend zp[2]:25 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp[2]:18 16.5
(word) divr16u::quotient#2 quotient zp[2]:18 11.0
(word) divr16u::quotient#3 quotient zp[2]:18 2.75
(word) divr16u::quotient#1 quotient zp[2]:14 16.5
(word) divr16u::quotient#2 quotient zp[2]:14 11.0
(word) divr16u::quotient#3 quotient zp[2]:14 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp[2]:16 8.25
(word) divr16u::rem#1 rem zp[2]:16 22.0
(word) divr16u::rem#10 rem zp[2]:16 4.0
(word) divr16u::rem#11 rem zp[2]:16 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:16 22.0
(word) divr16u::rem#4 rem zp[2]:16 4.0
(word) divr16u::rem#5 rem zp[2]:16 24.0
(word) divr16u::rem#6 rem zp[2]:16 11.0
(word) divr16u::rem#0 rem zp[2]:12 8.25
(word) divr16u::rem#1 rem zp[2]:12 22.0
(word) divr16u::rem#10 rem zp[2]:12 4.0
(word) divr16u::rem#11 rem zp[2]:12 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:12 22.0
(word) divr16u::rem#4 rem zp[2]:12 4.0
(word) divr16u::rem#5 rem zp[2]:12 24.0
(word) divr16u::rem#6 rem zp[2]:12 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp[2]:18 5.285714285714286
(word) divr16u::return#2 return zp[2]:18 4.0
(word) divr16u::return#3 return zp[2]:18 4.0
(word) divr16u::return#0 return zp[2]:14 5.285714285714286
(word) divr16u::return#2 return zp[2]:14 4.0
(word) divr16u::return#3 return zp[2]:14 4.0
(void()) loop()
(signed word*~) loop::$2 zp[2]:22 22.0
(word~) loop::$7 zp[2]:22 22.0
(signed word*~) loop::$2 zp[2]:18 22.0
(word~) loop::$7 zp[2]:18 22.0
(label) loop::@1
(label) loop::@2
(label) loop::@3
@ -80,7 +80,7 @@
(label) loop::@5
(label) loop::@6
(signed word) loop::xpos
(signed word) loop::xpos#0 xpos zp[2]:22 22.0
(signed word) loop::xpos#0 xpos zp[2]:18 22.0
(void()) main()
(label) main::@1
(label) main::@2
@ -104,15 +104,15 @@
(byte) memset::c
(byte) memset::c#4 reg byte x 1.5714285714285714
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:20 22.0
(byte*) memset::dst#2 dst zp[2]:20 15.333333333333332
(byte*~) memset::dst#4 dst zp[2]:20 4.0
(byte*) memset::dst#1 dst zp[2]:16 22.0
(byte*) memset::dst#2 dst zp[2]:16 15.333333333333332
(byte*~) memset::dst#4 dst zp[2]:16 4.0
(byte*) memset::end
(byte*) memset::end#0 end zp[2]:35 2.1666666666666665
(word) memset::num
(void*) memset::return
(void*) memset::str
(void*) memset::str#3 str zp[2]:20
(void*) memset::str#3 str zp[2]:16
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 zp[2]:31 4.0
(word~) mul16s::$9 zp[2]:31 4.0
@ -122,15 +122,15 @@
(label) mul16s::@4
(label) mul16s::@return
(signed word) mul16s::a
(signed word) mul16s::a#0 a zp[2]:20 2.6
(signed word) mul16s::a#0 a zp[2]:16 2.6
(signed word) mul16s::b
(dword) mul16s::m
(dword) mul16s::m#0 m zp[4]:12 2.0
(dword) mul16s::m#1 m zp[4]:12 4.0
(dword) mul16s::m#4 m zp[4]:12 4.0
(dword) mul16s::m#0 m zp[4]:8 2.0
(dword) mul16s::m#1 m zp[4]:8 4.0
(dword) mul16s::m#4 m zp[4]:8 4.0
(signed dword) mul16s::return
(signed dword) mul16s::return#0 return zp[4]:12 4.333333333333333
(signed dword) mul16s::return#2 return zp[4]:12 22.0
(signed dword) mul16s::return#0 return zp[4]:8 4.333333333333333
(signed dword) mul16s::return#2 return zp[4]:8 22.0
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte~) mul16u::$1 reg byte a 202.0
(label) mul16u::@1
@ -139,58 +139,58 @@
(label) mul16u::@4
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp[2]:18 101.0
(word) mul16u::a#1 a zp[2]:18 4.0
(word) mul16u::a#2 a zp[2]:18 2.0
(word) mul16u::a#3 a zp[2]:18 67.66666666666666
(word) mul16u::a#6 a zp[2]:18 6.0
(word) mul16u::a#0 a zp[2]:14 101.0
(word) mul16u::a#1 a zp[2]:14 4.0
(word) mul16u::a#2 a zp[2]:14 2.0
(word) mul16u::a#3 a zp[2]:14 67.66666666666666
(word) mul16u::a#6 a zp[2]:14 6.0
(word) mul16u::b
(word) mul16u::b#1 b zp[2]:29 4.0
(word) mul16u::b#1 b zp[2]:25 4.0
(dword) mul16u::mb
(dword) mul16u::mb#0 mb zp[4]:7 4.0
(dword) mul16u::mb#1 mb zp[4]:7 202.0
(dword) mul16u::mb#2 mb zp[4]:7 43.57142857142858
(dword) mul16u::mb#0 mb zp[4]:27 4.0
(dword) mul16u::mb#1 mb zp[4]:27 202.0
(dword) mul16u::mb#2 mb zp[4]:27 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp[4]:12 202.0
(dword) mul16u::res#2 res zp[4]:12 43.85714285714286
(dword) mul16u::res#6 res zp[4]:12 101.0
(dword) mul16u::res#1 res zp[4]:8 202.0
(dword) mul16u::res#2 res zp[4]:8 43.85714285714286
(dword) mul16u::res#6 res zp[4]:8 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp[4]:12 4.0
(dword) mul16u::return#3 return zp[4]:12 4.0
(dword) mul16u::return#2 return zp[4]:8 4.0
(dword) mul16u::return#3 return zp[4]:8 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 zp[4]:12 4.0
(dword~) mulu16_sel::$1 zp[4]:12 4.0
(dword~) mulu16_sel::$0 zp[4]:8 4.0
(dword~) mulu16_sel::$1 zp[4]:8 4.0
(label) mulu16_sel::@1
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp[2]:33 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:22 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:22 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:18 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:18 4.0
(word) mulu16_sel::return#11 return zp[2]:33 4.0
(word) mulu16_sel::return#12 return zp[2]:33 1.714285714285714
(word) mulu16_sel::return#2 return zp[2]:33 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp[2]:22 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:22 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:22 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:22 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:22 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:22 12.0
(word) mulu16_sel::v1#0 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:18 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:18 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp[2]:29 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:29 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:29 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:29 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:29 5.0
(word) mulu16_sel::v2#0 v2 zp[2]:25 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:25 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:25 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:25 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:25 5.0
(word) rem16u
(word) rem16u#1 rem16u zp[2]:16 0.8
(word) rem16u#1 rem16u zp[2]:12 0.8
(void()) render_logo((signed word) render_logo::xpos)
(byte~) render_logo::$0 reg byte a 4.0
(byte~) render_logo::$1 reg byte a 4.0
(byte~) render_logo::$2 reg byte a 4.0
(signed word~) render_logo::$3 zp[2]:29 2.0
(signed word~) render_logo::$3 zp[2]:25 2.0
(byte~) render_logo::$33 reg byte a 202.0
(byte~) render_logo::$36 reg byte a 202.0
(byte~) render_logo::$39 reg byte a 202.0
@ -238,11 +238,11 @@
(byte) render_logo::line
(byte) render_logo::logo_idx
(signed byte) render_logo::logo_idx#1 reg byte a 2.0
(byte) render_logo::logo_idx#10 logo_idx zp[1]:11 57.714285714285715
(byte) render_logo::logo_idx#11 logo_idx_1 zp[1]:2 65.07142857142857
(byte~) render_logo::logo_idx#14 logo_idx_1 zp[1]:2 4.0
(byte) render_logo::logo_idx#3 logo_idx zp[1]:11 202.0
(byte) render_logo::logo_idx#4 logo_idx_1 zp[1]:2 202.0
(byte) render_logo::logo_idx#10 logo_idx zp[1]:2 57.714285714285715
(byte) render_logo::logo_idx#11 logo_idx_1 zp[1]:3 65.07142857142857
(byte~) render_logo::logo_idx#14 logo_idx_1 zp[1]:3 4.0
(byte) render_logo::logo_idx#3 logo_idx zp[1]:2 202.0
(byte) render_logo::logo_idx#4 logo_idx_1 zp[1]:3 202.0
(byte) render_logo::logo_start
(byte) render_logo::screen_idx
(byte) render_logo::screen_idx#10 reg byte y 77.6923076923077
@ -254,11 +254,11 @@
(byte) render_logo::screen_idx#5 reg byte y 101.0
(byte) render_logo::screen_idx#6 reg byte y 202.0
(signed byte) render_logo::x_char
(signed byte) render_logo::x_char#0 x_char zp[1]:24 0.36363636363636365
(signed byte) render_logo::x_char#0 x_char zp[1]:20 0.36363636363636365
(signed word) render_logo::xpos
(signed word) render_logo::xpos#0 xpos zp[2]:22 2.142857142857143
(signed word) render_logo::xpos#0 xpos zp[2]:18 2.142857142857143
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 zp[4]:12 4.0
(dword~) sin16s::$4 zp[4]:27 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
@ -273,39 +273,39 @@
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp[1]:11 0.06060606060606061
(byte) sin16s::isUpper#2 reg byte y 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp[2]:20 22.0
(signed word) sin16s::return#1 return zp[2]:20 5.0
(signed word~) sin16s::return#5 return zp[2]:20 4.0
(signed word) sin16s::return#0 return zp[2]:16 22.0
(signed word) sin16s::return#1 return zp[2]:16 5.0
(signed word~) sin16s::return#5 return zp[2]:16 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp[2]:20 4.0
(signed word) sin16s::sinx#1 sinx zp[2]:16 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp[2]:20 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:20 1.0
(word) sin16s::usinx#0 usinx zp[2]:16 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:16 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp[4]:12 8.5
(dword) sin16s::x#1 x zp[4]:12 4.0
(dword) sin16s::x#2 x zp[4]:12 4.0
(dword) sin16s::x#4 x zp[4]:12 5.0
(dword) sin16s::x#6 x zp[4]:12 6.0
(dword) sin16s::x#0 x zp[4]:8 8.5
(dword) sin16s::x#1 x zp[4]:8 4.0
(dword) sin16s::x#2 x zp[4]:8 4.0
(dword) sin16s::x#4 x zp[4]:8 5.0
(dword) sin16s::x#6 x zp[4]:8 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp[2]:31 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp[2]:22 4.0
(word) sin16s::x2#0 x2 zp[2]:18 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp[2]:22 1.0
(word) sin16s::x3#0 x3 zp[2]:18 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp[2]:33 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp[2]:22 4.0
(word) sin16s::x4#0 x4 zp[2]:18 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp[2]:33 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp[2]:33 4.0
(void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
(signed dword~) sin16s_gen2::$6 zp[4]:12 22.0
(word~) sin16s_gen2::$9 zp[2]:29 11.0
(signed dword~) sin16s_gen2::$6 zp[4]:8 22.0
(word~) sin16s_gen2::$9 zp[2]:25 11.0
(label) sin16s_gen2::@1
(label) sin16s_gen2::@2
(label) sin16s_gen2::@3
@ -323,14 +323,14 @@
(const signed word) sin16s_gen2::min#0 min = (signed word) -$140
(signed word) sin16s_gen2::offs
(signed word*) sin16s_gen2::sintab
(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:16 7.333333333333333
(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:16 3.0
(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:12 7.333333333333333
(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:12 3.0
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0 step zp[4]:25 0.8666666666666666
(dword) sin16s_gen2::step#0 step zp[4]:21 0.8666666666666666
(word) sin16s_gen2::wavelength
(dword) sin16s_gen2::x
(dword) sin16s_gen2::x#1 x zp[4]:3 11.0
(dword) sin16s_gen2::x#2 x zp[4]:3 2.75
(dword) sin16s_gen2::x#1 x zp[4]:4 11.0
(dword) sin16s_gen2::x#2 x zp[4]:4 2.75
(const signed word[XSIN_SIZE]) xsin = { fill( XSIN_SIZE, 0) }
(word) xsin_idx
(word) xsin_idx#11 xsin_idx zp[2]:35 4.125
@ -339,23 +339,23 @@
reg byte x [ main::ch#2 main::ch#1 ]
reg byte y [ render_logo::screen_idx#10 render_logo::screen_idx#4 render_logo::screen_idx#18 render_logo::screen_idx#3 ]
zp[1]:2 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
zp[1]:2 [ render_logo::logo_idx#10 render_logo::logo_idx#3 ]
zp[1]:3 [ render_logo::logo_idx#11 render_logo::logo_idx#14 render_logo::logo_idx#4 ]
reg byte y [ render_logo::screen_idx#15 render_logo::screen_idx#21 render_logo::screen_idx#5 render_logo::screen_idx#6 ]
zp[4]:3 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
zp[4]:7 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp[1]:11 [ sin16s::isUpper#2 render_logo::logo_idx#10 render_logo::logo_idx#3 ]
zp[4]:12 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ]
zp[4]:4 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
reg byte y [ sin16s::isUpper#2 ]
zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ]
reg byte x [ mulu16_sel::select#5 ]
zp[2]:16 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
zp[2]:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
zp[2]:12 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp[2]:20 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
zp[2]:16 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
reg byte x [ memset::c#4 ]
zp[2]:22 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
zp[2]:18 [ loop::$7 loop::$2 loop::xpos#0 render_logo::xpos#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
reg byte a [ render_logo::$0 ]
reg byte a [ render_logo::$1 ]
reg byte a [ render_logo::$2 ]
zp[1]:24 [ render_logo::x_char#0 ]
zp[1]:20 [ render_logo::x_char#0 ]
reg byte a [ render_logo::$33 ]
reg byte a [ render_logo::$36 ]
reg byte a [ render_logo::$39 ]
@ -367,9 +367,10 @@ reg byte a [ render_logo::$76 ]
reg byte a [ render_logo::$79 ]
reg byte a [ render_logo::$82 ]
reg byte a [ render_logo::$85 ]
zp[4]:25 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp[2]:29 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
zp[4]:21 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp[2]:25 [ sin16s_gen2::$9 render_logo::$3 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
reg byte a [ mul16u::$1 ]
zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp[2]:31 [ sin16s::x1#0 mul16s::$9 mul16s::$16 ]
zp[2]:33 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ]
reg byte a [ divr16u::$1 ]

View File

@ -33,7 +33,7 @@
.label SCREEN = $400
.label BITMAP = $2000
.const SIN_SIZE = $200
.label rem16u = $1c
.label rem16u = $18
main: {
.const vicSelectGfxBank1_toDd001_return = 3
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>BITMAP)/4&$f
@ -63,14 +63,14 @@ main: {
jmp __b1
}
render_sine: {
.label __1 = $16
.label __4 = $16
.label __10 = $16
.label __11 = $16
.label sin_val = $16
.label sin2_val = $16
.label __1 = $12
.label __4 = $12
.label __10 = $12
.label __11 = $12
.label sin_val = $12
.label sin2_val = $12
.label xpos = 6
.label sin_idx = $14
.label sin_idx = $10
lda #<0
sta.z xpos
sta.z xpos+1
@ -165,8 +165,8 @@ render_sine: {
// Plot a single dot in the bitmap
// bitmap_plot(word zeropage(6) x, byte register(X) y)
bitmap_plot: {
.label __1 = $1c
.label plotter = $16
.label __1 = $18
.label plotter = $12
.label x = 6
lda bitmap_plot_yhi,x
sta.z plotter+1
@ -193,9 +193,9 @@ bitmap_plot: {
sta (plotter),y
rts
}
// wrap_y(signed word zeropage($16) y)
// wrap_y(signed word zeropage($12) y)
wrap_y: {
.label y = $16
.label y = $12
__b1:
lda.z y
cmp #<$c8
@ -237,12 +237,12 @@ sin16s_gen2: {
.const min = -$140
.const max = $140
.label ampl = max-min
.label __6 = $c
.label __9 = $1c
.label step = $18
.label __6 = 8
.label __9 = $18
.label step = $14
.label sintab = 6
.label x = 2
.label i = $14
.label i = $10
jsr div32u16u
lda #<sin
sta.z sintab
@ -315,13 +315,13 @@ sin16s_gen2: {
}
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
// mul16s(signed word zeropage($10) a)
// mul16s(signed word zeropage($c) a)
mul16s: {
.label __9 = $1e
.label __16 = $1e
.label m = $c
.label return = $c
.label a = $10
.label m = 8
.label return = 8
.label a = $c
lda.z a
sta.z mul16u.a
lda.z a+1
@ -356,13 +356,13 @@ mul16s: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($1c) a, word zeropage($16) b)
// mul16u(word zeropage($18) a, word zeropage($12) b)
mul16u: {
.label mb = 8
.label a = $1c
.label res = $c
.label return = $c
.label b = $16
.label mb = $1a
.label a = $18
.label res = 8
.label return = 8
.label b = $12
lda #0
sta.z res
sta.z res+1
@ -404,21 +404,20 @@ mul16u: {
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16s(dword zeropage($c) x)
// sin16s(dword zeropage(8) x)
sin16s: {
.label __4 = $c
.label x = $c
.label return = $10
.label __4 = $1a
.label x = 8
.label return = $c
.label x1 = $1e
.label x2 = $12
.label x3 = $12
.label x2 = $e
.label x3 = $e
.label x3_6 = $20
.label usinx = $10
.label x4 = $12
.label usinx = $c
.label x4 = $e
.label x5 = $20
.label x5_128 = $20
.label sinx = $10
.label isUpper = $22
.label sinx = $c
lda.z x+3
cmp #>PI_u4f28>>$10
bcc b1
@ -448,12 +447,10 @@ sin16s: {
lda.z x+3
sbc #>PI_u4f28>>$10
sta.z x+3
lda #1
sta.z isUpper
ldy #1
jmp __b1
b1:
lda #0
sta.z isUpper
ldy #0
__b1:
lda.z x+3
cmp #>PI_HALF_u4f28>>$10
@ -485,14 +482,26 @@ sin16s: {
sbc.z x+3
sta.z x+3
__b2:
ldy #3
!:
lda.z x
asl
sta.z __4
lda.z x+1
rol
sta.z __4+1
lda.z x+2
rol
sta.z __4+2
lda.z x+3
rol
sta.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
dey
bne !-
lda.z __4+2
sta.z x1
lda.z __4+3
@ -565,8 +574,7 @@ sin16s: {
lda.z usinx+1
adc.z x5_128+1
sta.z usinx+1
lda.z isUpper
cmp #0
cpy #0
beq __b3
sec
lda #0
@ -580,14 +588,14 @@ sin16s: {
}
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($12) v1, word zeropage($16) v2, byte register(X) select)
// mulu16_sel(word zeropage($e) v1, word zeropage($12) v2, byte register(X) select)
mulu16_sel: {
.label __0 = $c
.label __1 = $c
.label v1 = $12
.label v2 = $16
.label __0 = 8
.label __1 = 8
.label v1 = $e
.label v2 = $12
.label return = $20
.label return_1 = $12
.label return_1 = $e
lda.z v1
sta.z mul16u.a
lda.z v1+1
@ -620,8 +628,8 @@ mulu16_sel: {
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
.label quotient_hi = $20
.label quotient_lo = $12
.label return = $18
.label quotient_lo = $e
.label return = $14
lda #<PI2_u4f28>>$10
sta.z divr16u.dividend
lda #>PI2_u4f28>>$10
@ -653,12 +661,12 @@ div32u16u: {
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage($10) dividend, word zeropage($1c) rem)
// divr16u(word zeropage($c) dividend, word zeropage($18) rem)
divr16u: {
.label rem = $1c
.label dividend = $10
.label quotient = $12
.label return = $12
.label rem = $18
.label dividend = $c
.label quotient = $e
.label return = $e
ldx #0
txa
sta.z quotient
@ -731,12 +739,12 @@ bitmap_clear: {
rts
}
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
// memset(void* zeropage($16) str, byte register(X) c, word zeropage($14) num)
// memset(void* zeropage($12) str, byte register(X) c, word zeropage($10) num)
memset: {
.label end = $14
.label dst = $16
.label num = $14
.label str = $16
.label end = $10
.label dst = $12
.label num = $10
.label str = $12
lda.z num
bne !+
lda.z num+1
@ -771,7 +779,7 @@ memset: {
// Initialize bitmap plotting tables
bitmap_init: {
.label __7 = $22
.label yoffs = $14
.label yoffs = $10
ldx #0
lda #$80
__b1:

File diff suppressed because it is too large Load Diff

View File

@ -56,16 +56,16 @@
(byte) bitmap_init::y#1 reg byte x 16.5
(byte) bitmap_init::y#2 reg byte x 5.5
(byte*) bitmap_init::yoffs
(byte*) bitmap_init::yoffs#1 yoffs zp[2]:20 22.0
(byte*) bitmap_init::yoffs#2 yoffs zp[2]:20 6.875
(byte*) bitmap_init::yoffs#4 yoffs zp[2]:20 11.0
(byte*) bitmap_init::yoffs#1 yoffs zp[2]:16 22.0
(byte*) bitmap_init::yoffs#2 yoffs zp[2]:16 6.875
(byte*) bitmap_init::yoffs#4 yoffs zp[2]:16 11.0
(void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y)
(word~) bitmap_plot::$1 zp[2]:28 4.0
(word~) bitmap_plot::$1 zp[2]:24 4.0
(byte~) bitmap_plot::$2 reg byte a 4.0
(label) bitmap_plot::@return
(byte*) bitmap_plot::plotter
(word) bitmap_plot::plotter#0 plotter zp[2]:22 1.0
(byte*) bitmap_plot::plotter#1 plotter zp[2]:22 3.0
(word) bitmap_plot::plotter#0 plotter zp[2]:18 1.0
(byte*) bitmap_plot::plotter#1 plotter zp[2]:18 3.0
(word) bitmap_plot::x
(word) bitmap_plot::x#0 x zp[2]:6 11.0
(word) bitmap_plot::x#1 x zp[2]:6 11.0
@ -88,10 +88,10 @@
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:32 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:18 4.0
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:14 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp[4]:24 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:24 4.0
(dword) div32u16u::return#0 return zp[4]:20 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:20 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
@ -103,30 +103,30 @@
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp[2]:16 2.75
(word) divr16u::dividend#3 dividend zp[2]:16 5.0
(word) divr16u::dividend#5 dividend zp[2]:16 2.0
(word) divr16u::dividend#0 dividend zp[2]:12 2.75
(word) divr16u::dividend#3 dividend zp[2]:12 5.0
(word) divr16u::dividend#5 dividend zp[2]:12 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp[2]:18 16.5
(word) divr16u::quotient#2 quotient zp[2]:18 11.0
(word) divr16u::quotient#3 quotient zp[2]:18 2.75
(word) divr16u::quotient#1 quotient zp[2]:14 16.5
(word) divr16u::quotient#2 quotient zp[2]:14 11.0
(word) divr16u::quotient#3 quotient zp[2]:14 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp[2]:28 8.25
(word) divr16u::rem#1 rem zp[2]:28 22.0
(word) divr16u::rem#10 rem zp[2]:28 4.0
(word) divr16u::rem#11 rem zp[2]:28 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:28 22.0
(word) divr16u::rem#4 rem zp[2]:28 4.0
(word) divr16u::rem#5 rem zp[2]:28 24.0
(word) divr16u::rem#6 rem zp[2]:28 11.0
(word) divr16u::rem#0 rem zp[2]:24 8.25
(word) divr16u::rem#1 rem zp[2]:24 22.0
(word) divr16u::rem#10 rem zp[2]:24 4.0
(word) divr16u::rem#11 rem zp[2]:24 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:24 22.0
(word) divr16u::rem#4 rem zp[2]:24 4.0
(word) divr16u::rem#5 rem zp[2]:24 24.0
(word) divr16u::rem#6 rem zp[2]:24 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp[2]:18 5.285714285714286
(word) divr16u::return#2 return zp[2]:18 4.0
(word) divr16u::return#3 return zp[2]:18 4.0
(word) divr16u::return#0 return zp[2]:14 5.285714285714286
(word) divr16u::return#2 return zp[2]:14 4.0
(word) divr16u::return#3 return zp[2]:14 4.0
(void()) main()
(label) main::@1
(label) main::@2
@ -154,16 +154,16 @@
(byte) memset::c
(byte) memset::c#4 reg byte x 1.375
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:22 22.0
(byte*) memset::dst#2 dst zp[2]:22 15.333333333333332
(byte*~) memset::dst#4 dst zp[2]:22 4.0
(byte*) memset::dst#1 dst zp[2]:18 22.0
(byte*) memset::dst#2 dst zp[2]:18 15.333333333333332
(byte*~) memset::dst#4 dst zp[2]:18 4.0
(byte*) memset::end
(byte*) memset::end#0 end zp[2]:20 2.1666666666666665
(byte*) memset::end#0 end zp[2]:16 2.1666666666666665
(word) memset::num
(word) memset::num#2 num zp[2]:20 2.0
(word) memset::num#2 num zp[2]:16 2.0
(void*) memset::return
(void*) memset::str
(void*) memset::str#3 str zp[2]:22
(void*) memset::str#3 str zp[2]:18
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
(word~) mul16s::$16 zp[2]:30 4.0
(word~) mul16s::$9 zp[2]:30 4.0
@ -173,15 +173,15 @@
(label) mul16s::@4
(label) mul16s::@return
(signed word) mul16s::a
(signed word) mul16s::a#0 a zp[2]:16 2.6
(signed word) mul16s::a#0 a zp[2]:12 2.6
(signed word) mul16s::b
(dword) mul16s::m
(dword) mul16s::m#0 m zp[4]:12 2.0
(dword) mul16s::m#1 m zp[4]:12 4.0
(dword) mul16s::m#4 m zp[4]:12 4.0
(dword) mul16s::m#0 m zp[4]:8 2.0
(dword) mul16s::m#1 m zp[4]:8 4.0
(dword) mul16s::m#4 m zp[4]:8 4.0
(signed dword) mul16s::return
(signed dword) mul16s::return#0 return zp[4]:12 4.333333333333333
(signed dword) mul16s::return#2 return zp[4]:12 22.0
(signed dword) mul16s::return#0 return zp[4]:8 4.333333333333333
(signed dword) mul16s::return#2 return zp[4]:8 22.0
(dword()) mul16u((word) mul16u::a , (word) mul16u::b)
(byte~) mul16u::$1 reg byte a 202.0
(label) mul16u::@1
@ -190,58 +190,58 @@
(label) mul16u::@4
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp[2]:28 101.0
(word) mul16u::a#1 a zp[2]:28 4.0
(word) mul16u::a#2 a zp[2]:28 2.0
(word) mul16u::a#3 a zp[2]:28 67.66666666666666
(word) mul16u::a#6 a zp[2]:28 6.0
(word) mul16u::a#0 a zp[2]:24 101.0
(word) mul16u::a#1 a zp[2]:24 4.0
(word) mul16u::a#2 a zp[2]:24 2.0
(word) mul16u::a#3 a zp[2]:24 67.66666666666666
(word) mul16u::a#6 a zp[2]:24 6.0
(word) mul16u::b
(word) mul16u::b#1 b zp[2]:22 4.0
(word) mul16u::b#1 b zp[2]:18 4.0
(dword) mul16u::mb
(dword) mul16u::mb#0 mb zp[4]:8 4.0
(dword) mul16u::mb#1 mb zp[4]:8 202.0
(dword) mul16u::mb#2 mb zp[4]:8 43.57142857142858
(dword) mul16u::mb#0 mb zp[4]:26 4.0
(dword) mul16u::mb#1 mb zp[4]:26 202.0
(dword) mul16u::mb#2 mb zp[4]:26 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp[4]:12 202.0
(dword) mul16u::res#2 res zp[4]:12 43.85714285714286
(dword) mul16u::res#6 res zp[4]:12 101.0
(dword) mul16u::res#1 res zp[4]:8 202.0
(dword) mul16u::res#2 res zp[4]:8 43.85714285714286
(dword) mul16u::res#6 res zp[4]:8 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp[4]:12 4.0
(dword) mul16u::return#3 return zp[4]:12 4.0
(dword) mul16u::return#2 return zp[4]:8 4.0
(dword) mul16u::return#3 return zp[4]:8 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 zp[4]:12 4.0
(dword~) mulu16_sel::$1 zp[4]:12 4.0
(dword~) mulu16_sel::$0 zp[4]:8 4.0
(dword~) mulu16_sel::$1 zp[4]:8 4.0
(label) mulu16_sel::@1
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp[2]:32 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:18 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:18 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:14 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:14 4.0
(word) mulu16_sel::return#11 return zp[2]:32 4.0
(word) mulu16_sel::return#12 return zp[2]:32 1.714285714285714
(word) mulu16_sel::return#2 return zp[2]:32 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:18 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:18 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:18 12.0
(word) mulu16_sel::v1#0 v1 zp[2]:14 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:14 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:14 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:14 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:14 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:14 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp[2]:22 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:22 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:22 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:22 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:22 5.0
(word) mulu16_sel::v2#0 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:18 5.0
(word) rem16u
(word) rem16u#1 rem16u zp[2]:28 0.8
(word) rem16u#1 rem16u zp[2]:24 0.8
(void()) render_sine()
(signed word*~) render_sine::$1 zp[2]:22 22.0
(word~) render_sine::$10 zp[2]:22 22.0
(word~) render_sine::$11 zp[2]:22 22.0
(signed word*~) render_sine::$4 zp[2]:22 22.0
(signed word*~) render_sine::$1 zp[2]:18 22.0
(word~) render_sine::$10 zp[2]:18 22.0
(word~) render_sine::$11 zp[2]:18 22.0
(signed word*~) render_sine::$4 zp[2]:18 22.0
(label) render_sine::@1
(label) render_sine::@2
(label) render_sine::@3
@ -252,12 +252,12 @@
(label) render_sine::@8
(label) render_sine::@return
(signed word) render_sine::sin2_val
(signed word) render_sine::sin2_val#0 sin2_val zp[2]:22 22.0
(signed word) render_sine::sin2_val#0 sin2_val zp[2]:18 22.0
(word) render_sine::sin_idx
(word) render_sine::sin_idx#1 sin_idx zp[2]:20 22.0
(word) render_sine::sin_idx#2 sin_idx zp[2]:20 2.1153846153846154
(word) render_sine::sin_idx#1 sin_idx zp[2]:16 22.0
(word) render_sine::sin_idx#2 sin_idx zp[2]:16 2.1153846153846154
(signed word) render_sine::sin_val
(signed word) render_sine::sin_val#0 sin_val zp[2]:22 22.0
(signed word) render_sine::sin_val#0 sin_val zp[2]:18 22.0
(word) render_sine::xpos
(word) render_sine::xpos#1 xpos zp[2]:6 11.0
(word) render_sine::xpos#3 xpos zp[2]:6 2.0
@ -268,7 +268,7 @@
(byte) render_sine::ypos2#0 reg byte x 11.0
(const signed word[$200]) sin = { fill( $200, 0) }
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 zp[4]:12 4.0
(dword~) sin16s::$4 zp[4]:26 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
@ -283,39 +283,39 @@
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp[1]:34 0.06060606060606061
(byte) sin16s::isUpper#2 reg byte y 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp[2]:16 22.0
(signed word) sin16s::return#1 return zp[2]:16 5.0
(signed word~) sin16s::return#5 return zp[2]:16 4.0
(signed word) sin16s::return#0 return zp[2]:12 22.0
(signed word) sin16s::return#1 return zp[2]:12 5.0
(signed word~) sin16s::return#5 return zp[2]:12 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp[2]:16 4.0
(signed word) sin16s::sinx#1 sinx zp[2]:12 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp[2]:16 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:16 1.0
(word) sin16s::usinx#0 usinx zp[2]:12 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:12 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp[4]:12 8.5
(dword) sin16s::x#1 x zp[4]:12 4.0
(dword) sin16s::x#2 x zp[4]:12 4.0
(dword) sin16s::x#4 x zp[4]:12 5.0
(dword) sin16s::x#6 x zp[4]:12 6.0
(dword) sin16s::x#0 x zp[4]:8 8.5
(dword) sin16s::x#1 x zp[4]:8 4.0
(dword) sin16s::x#2 x zp[4]:8 4.0
(dword) sin16s::x#4 x zp[4]:8 5.0
(dword) sin16s::x#6 x zp[4]:8 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp[2]:30 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp[2]:18 4.0
(word) sin16s::x2#0 x2 zp[2]:14 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp[2]:18 1.0
(word) sin16s::x3#0 x3 zp[2]:14 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp[2]:32 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp[2]:18 4.0
(word) sin16s::x4#0 x4 zp[2]:14 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp[2]:32 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp[2]:32 4.0
(void()) sin16s_gen2((signed word*) sin16s_gen2::sintab , (word) sin16s_gen2::wavelength , (signed word) sin16s_gen2::min , (signed word) sin16s_gen2::max)
(signed dword~) sin16s_gen2::$6 zp[4]:12 22.0
(word~) sin16s_gen2::$9 zp[2]:28 11.0
(signed dword~) sin16s_gen2::$6 zp[4]:8 22.0
(word~) sin16s_gen2::$9 zp[2]:24 11.0
(label) sin16s_gen2::@1
(label) sin16s_gen2::@2
(label) sin16s_gen2::@3
@ -325,8 +325,8 @@
(signed word) sin16s_gen2::ampl
(const signed word) sin16s_gen2::ampl#0 ampl = (const signed word) sin16s_gen2::max#0-(const signed word) sin16s_gen2::min#0
(word) sin16s_gen2::i
(word) sin16s_gen2::i#1 i zp[2]:20 22.0
(word) sin16s_gen2::i#2 i zp[2]:20 2.5384615384615383
(word) sin16s_gen2::i#1 i zp[2]:16 22.0
(word) sin16s_gen2::i#2 i zp[2]:16 2.5384615384615383
(signed word) sin16s_gen2::max
(const signed word) sin16s_gen2::max#0 max = (signed word) $140
(signed word) sin16s_gen2::min
@ -336,7 +336,7 @@
(signed word*) sin16s_gen2::sintab#0 sintab zp[2]:6 7.333333333333333
(signed word*) sin16s_gen2::sintab#2 sintab zp[2]:6 3.0
(dword) sin16s_gen2::step
(dword) sin16s_gen2::step#0 step zp[4]:24 0.8666666666666666
(dword) sin16s_gen2::step#0 step zp[4]:20 0.8666666666666666
(word) sin16s_gen2::wavelength
(dword) sin16s_gen2::x
(dword) sin16s_gen2::x#1 x zp[4]:2 11.0
@ -357,43 +357,44 @@
(byte) wrap_y::return#1 reg byte a 22.0
(byte) wrap_y::return#2 reg byte a 6.0
(signed word) wrap_y::y
(signed word) wrap_y::y#0 y zp[2]:22 22.0
(signed word) wrap_y::y#1 y zp[2]:22 22.0
(signed word) wrap_y::y#2 y zp[2]:22 202.0
(signed word) wrap_y::y#3 y zp[2]:22 202.0
(signed word) wrap_y::y#4 y zp[2]:22 203.0
(signed word) wrap_y::y#6 y zp[2]:22 202.0
(signed word) wrap_y::y#9 y zp[2]:22 24.0
(signed word) wrap_y::y#0 y zp[2]:18 22.0
(signed word) wrap_y::y#1 y zp[2]:18 22.0
(signed word) wrap_y::y#2 y zp[2]:18 202.0
(signed word) wrap_y::y#3 y zp[2]:18 202.0
(signed word) wrap_y::y#4 y zp[2]:18 203.0
(signed word) wrap_y::y#6 y zp[2]:18 202.0
(signed word) wrap_y::y#9 y zp[2]:18 24.0
reg byte x [ bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#0 ]
zp[4]:2 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
zp[2]:6 [ sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 render_sine::xpos#3 render_sine::xpos#9 render_sine::xpos#1 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#0 ]
zp[4]:8 [ mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp[4]:12 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ]
reg byte y [ sin16s::isUpper#2 ]
zp[4]:8 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16s::m#4 mul16s::m#1 mul16s::m#0 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ]
reg byte x [ mulu16_sel::select#5 ]
zp[2]:16 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
zp[2]:18 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
zp[2]:12 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 mul16s::a#0 sin16s::usinx#0 ]
zp[2]:14 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
reg byte x [ memset::c#4 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
zp[2]:20 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 memset::num#2 memset::end#0 sin16s_gen2::i#2 sin16s_gen2::i#1 render_sine::sin_idx#2 render_sine::sin_idx#1 ]
zp[2]:16 [ bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 memset::num#2 memset::end#0 sin16s_gen2::i#2 sin16s_gen2::i#1 render_sine::sin_idx#2 render_sine::sin_idx#1 ]
reg byte a [ wrap_y::return#0 ]
reg byte x [ render_sine::ypos#0 ]
reg byte a [ wrap_y::return#1 ]
reg byte x [ render_sine::ypos2#0 ]
zp[2]:22 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ]
zp[2]:18 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 wrap_y::y#6 wrap_y::y#4 wrap_y::y#9 wrap_y::y#1 wrap_y::y#0 wrap_y::y#2 wrap_y::y#3 render_sine::sin_val#0 render_sine::sin2_val#0 render_sine::$10 render_sine::$1 render_sine::$11 render_sine::$4 ]
reg byte a [ bitmap_plot::$2 ]
reg byte a [ wrap_y::return#2 ]
zp[4]:24 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp[2]:28 [ sin16s_gen2::$9 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
zp[4]:20 [ div32u16u::return#2 sin16s_gen2::step#0 div32u16u::return#0 ]
zp[2]:24 [ sin16s_gen2::$9 bitmap_plot::$1 divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mul16u::a#3 mul16u::a#6 mul16u::a#1 mul16u::a#2 mul16u::a#0 ]
reg byte a [ mul16u::$1 ]
zp[4]:26 [ sin16s::$4 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
zp[2]:30 [ sin16s::x1#0 mul16s::$9 mul16s::$16 ]
zp[2]:32 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]
zp[1]:34 [ bitmap_init::$7 sin16s::isUpper#2 ]
zp[1]:34 [ bitmap_init::$7 ]
reg byte a [ bitmap_init::$4 ]
reg byte a [ bitmap_init::$5 ]
reg byte a [ bitmap_init::$6 ]

View File

@ -10,12 +10,12 @@
// PI/2 in u[4.28] format
.const PI_HALF_u4f28 = $1921fb54
.label print_line_cursor = $400
.label rem16u = $15
.label print_char_cursor = $b
.label rem16u = $10
.label print_char_cursor = $a
main: {
.label wavelength = $78
.label sw = 8
.label st1 = $15
.label st1 = $10
jsr sin16s_gen
jsr print_cls
lda #<print_line_cursor
@ -168,7 +168,7 @@ memset: {
.const num = $3e8
.label str = print_line_cursor
.label end = str+num
.label dst = $15
.label dst = $10
lda #<str
sta.z dst
lda #>str
@ -196,8 +196,8 @@ memset: {
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen(signed word* zeropage(8) sintab)
sin16s_gen: {
.label __2 = $b
.label step = $19
.label __2 = $a
.label step = $14
.label sintab = 8
.label x = 4
.label i = 2
@ -269,21 +269,20 @@ sin16s_gen: {
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16s(dword zeropage($d) x)
// sin16s(dword zeropage($c) x)
sin16s: {
.label __4 = $d
.label x = $d
.label return = $b
.label x1 = $1f
.label x2 = $15
.label x3 = $15
.label x3_6 = $1d
.label usinx = $b
.label x4 = $15
.label x5 = $1d
.label x5_128 = $1d
.label sinx = $b
.label isUpper = $a
.label __4 = $18
.label x = $c
.label return = $a
.label x1 = $1e
.label x2 = $10
.label x3 = $10
.label x3_6 = $1c
.label usinx = $a
.label x4 = $10
.label x5 = $1c
.label x5_128 = $1c
.label sinx = $a
lda.z x+3
cmp #>PI_u4f28>>$10
bcc b1
@ -313,12 +312,10 @@ sin16s: {
lda.z x+3
sbc #>PI_u4f28>>$10
sta.z x+3
lda #1
sta.z isUpper
ldy #1
jmp __b1
b1:
lda #0
sta.z isUpper
ldy #0
__b1:
lda.z x+3
cmp #>PI_HALF_u4f28>>$10
@ -350,14 +347,26 @@ sin16s: {
sbc.z x+3
sta.z x+3
__b2:
ldy #3
!:
lda.z x
asl
sta.z __4
lda.z x+1
rol
sta.z __4+1
lda.z x+2
rol
sta.z __4+2
lda.z x+3
rol
sta.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
dey
bne !-
lda.z __4+2
sta.z x1
lda.z __4+3
@ -430,8 +439,7 @@ sin16s: {
lda.z usinx+1
adc.z x5_128+1
sta.z usinx+1
lda.z isUpper
cmp #0
cpy #0
beq __b3
sec
lda #0
@ -445,14 +453,14 @@ sin16s: {
}
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($15) v1, word zeropage($17) v2, byte register(X) select)
// mulu16_sel(word zeropage($10) v1, word zeropage($12) v2, byte register(X) select)
mulu16_sel: {
.label __0 = $d
.label __1 = $d
.label v1 = $15
.label v2 = $17
.label return = $1d
.label return_1 = $15
.label __0 = $c
.label __1 = $c
.label v1 = $10
.label v2 = $12
.label return = $1c
.label return_1 = $10
lda.z v1
sta.z mul16u.a
lda.z v1+1
@ -475,13 +483,13 @@ mulu16_sel: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($1d) a, word zeropage($17) b)
// mul16u(word zeropage($1c) a, word zeropage($12) b)
mul16u: {
.label a = $1d
.label mb = $11
.label res = $d
.label b = $17
.label return = $d
.label a = $1c
.label mb = $18
.label res = $c
.label b = $12
.label return = $c
lda.z b
sta.z mb
lda.z b+1
@ -529,9 +537,9 @@ mul16u: {
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
.label quotient_hi = $1f
.label quotient_lo = $1d
.label return = $19
.label quotient_hi = $1e
.label quotient_lo = $1c
.label return = $14
lda #<PI2_u4f28>>$10
sta.z divr16u.dividend
lda #>PI2_u4f28>>$10
@ -563,12 +571,12 @@ div32u16u: {
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage($17) dividend, word zeropage($15) rem)
// divr16u(word zeropage($12) dividend, word zeropage($10) rem)
divr16u: {
.label rem = $15
.label dividend = $17
.label quotient = $1d
.label return = $1d
.label rem = $10
.label dividend = $12
.label quotient = $1c
.label return = $1c
ldx #0
txa
sta.z quotient

View File

@ -3526,21 +3526,25 @@ sin16s: {
__b2:
// [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3
lda.z x
asl
sta.z __4
lda.z x+1
rol
sta.z __4+1
lda.z x+2
rol
sta.z __4+2
lda.z x+3
rol
sta.z __4+3
ldy #3
!:
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
dey
bne !-
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
// [86] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2
lda.z __4+2
sta.z x1
@ -4181,8 +4185,7 @@ Statement [80] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4
Statement [82] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:22 [ sin16s::isUpper#2 ]
Statement [83] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a
Statement [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y
Removing always clobbered register reg byte y as potential for zp[1]:22 [ sin16s::isUpper#2 ]
Statement [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a
Statement [86] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a
Statement [87] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a
Statement [88] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a
@ -4260,7 +4263,7 @@ Statement [79] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 [
Statement [80] (dword) sin16s::x#1 ← (dword) sin16s::x#0 - (const dword) PI_u4f28 [ sin16s::x#1 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#1 ] ) always clobbers reg byte a
Statement [82] if((dword) sin16s::x#4<(const dword) PI_HALF_u4f28) goto sin16s::@2 [ sin16s::x#4 sin16s::isUpper#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::x#4 sin16s::isUpper#2 ] ) always clobbers reg byte a
Statement [83] (dword) sin16s::x#2 ← (const dword) PI_u4f28 - (dword) sin16s::x#4 [ sin16s::isUpper#2 sin16s::x#2 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x#2 ] ) always clobbers reg byte a
Statement [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a reg byte y
Statement [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 [ sin16s::isUpper#2 sin16s::$4 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::$4 ] ) always clobbers reg byte a
Statement [86] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 [ sin16s::isUpper#2 sin16s::x1#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 ] ) always clobbers reg byte a
Statement [87] (word) mulu16_sel::v1#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 ] ) always clobbers reg byte a
Statement [88] (word) mulu16_sel::v2#0 ← (word) sin16s::x1#0 [ sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ( main:2::sin16s_gen:5::sin16s:72 [ sin16s_gen::step#0 sin16s_gen::i#2 sin16s_gen::x#2 sin16s_gen::sintab#2 sin16s::isUpper#2 sin16s::x1#0 mulu16_sel::v1#0 mulu16_sel::v2#0 ] ) always clobbers reg byte a
@ -4316,7 +4319,7 @@ Potential registers zp[2]:12 [ memset::dst#2 memset::dst#1 ] : zp[2]:12 ,
Potential registers zp[2]:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] : zp[2]:14 ,
Potential registers zp[4]:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] : zp[4]:16 ,
Potential registers zp[2]:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] : zp[2]:20 ,
Potential registers zp[1]:22 [ sin16s::isUpper#2 ] : zp[1]:22 , reg byte x ,
Potential registers zp[1]:22 [ sin16s::isUpper#2 ] : zp[1]:22 , reg byte x , reg byte y ,
Potential registers zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] : zp[4]:23 ,
Potential registers zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] : zp[2]:27 ,
Potential registers zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] : zp[2]:29 ,
@ -4385,30 +4388,27 @@ Uplift Scope [print_word] 2: zp[2]:55 [ print_word::w#0 ]
Uplift Scope [RADIX]
Uplift Scope [print_cls]
Uplifting [mul16u] best 26903 combination zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:40 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp[4]:103 [ mul16u::return#2 ] zp[2]:44 [ mul16u::b#0 ]
Uplifting [print_str] best 26903 combination zp[2]:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Uplifting [divr16u] best 26693 combination zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:118 [ divr16u::return#2 ] zp[2]:122 [ divr16u::return#3 ]
Uplifting [] best 26693 combination zp[2]:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] zp[2]:132 [ rem16u#1 ]
Uplifting [sin16s] best 26693 combination zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:67 [ sin16s::return#0 ] zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:71 [ sin16s::$4 ] zp[2]:79 [ sin16s::x2#0 ] zp[2]:87 [ sin16s::x3_6#0 ] zp[2]:93 [ sin16s::x4#0 ] zp[2]:97 [ sin16s::x5#0 ] zp[2]:99 [ sin16s::x5_128#0 ] zp[2]:83 [ sin16s::x3#0 ] zp[2]:101 [ sin16s::usinx#1 ] zp[2]:75 [ sin16s::x1#0 ] zp[2]:89 [ sin16s::usinx#0 ] zp[1]:22 [ sin16s::isUpper#2 ]
Uplifting [sin16s_gen] best 26693 combination zp[2]:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp[2]:69 [ sin16s_gen::$2 ] zp[4]:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp[2]:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp[4]:63 [ sin16s_gen::step#0 ]
Uplifting [mulu16_sel] best 26677 combination zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:77 [ mulu16_sel::return#0 ] zp[2]:81 [ mulu16_sel::return#1 ] zp[2]:85 [ mulu16_sel::return#2 ] zp[2]:91 [ mulu16_sel::return#10 ] zp[2]:95 [ mulu16_sel::return#11 ] zp[4]:107 [ mulu16_sel::$0 ] zp[4]:111 [ mulu16_sel::$1 ] zp[2]:115 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [memset] best 26677 combination zp[2]:12 [ memset::dst#2 memset::dst#1 ]
Uplifting [main] best 26677 combination zp[2]:2 [ main::st1#2 main::st1#1 ] zp[2]:53 [ main::sw#0 ]
Uplifting [print_byte] best 26663 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ]
Uplifting [print_char] best 26648 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
Uplifting [print_sword] best 26648 combination zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ]
Uplifting [div32u16u] best 26648 combination zp[4]:59 [ div32u16u::return#2 ] zp[2]:124 [ div32u16u::quotient_lo#0 ] zp[4]:126 [ div32u16u::return#0 ] zp[2]:120 [ div32u16u::quotient_hi#0 ]
Uplifting [print_word] best 26648 combination zp[2]:55 [ print_word::w#0 ]
Uplifting [RADIX] best 26648 combination
Uplifting [print_cls] best 26648 combination
Attempting to uplift remaining variables inzp[1]:22 [ sin16s::isUpper#2 ]
Uplifting [sin16s] best 26648 combination zp[1]:22 [ sin16s::isUpper#2 ]
Uplifting [mul16u] best 26925 combination zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 ] zp[4]:40 [ mul16u::mb#2 mul16u::mb#1 ] reg byte a [ mul16u::$1 ] zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] zp[4]:103 [ mul16u::return#2 ] zp[2]:44 [ mul16u::b#0 ]
Uplifting [print_str] best 26925 combination zp[2]:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ]
Uplifting [divr16u] best 26715 combination zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 ] reg byte a [ divr16u::$1 ] reg byte a [ divr16u::$2 ] reg byte x [ divr16u::i#2 divr16u::i#1 ] zp[2]:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] zp[2]:118 [ divr16u::return#2 ] zp[2]:122 [ divr16u::return#3 ]
Uplifting [] best 26715 combination zp[2]:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] zp[2]:132 [ rem16u#1 ]
Uplifting [sin16s] best 26706 combination zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] zp[2]:67 [ sin16s::return#0 ] zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] zp[4]:71 [ sin16s::$4 ] zp[2]:79 [ sin16s::x2#0 ] zp[2]:87 [ sin16s::x3_6#0 ] zp[2]:93 [ sin16s::x4#0 ] zp[2]:97 [ sin16s::x5#0 ] zp[2]:99 [ sin16s::x5_128#0 ] zp[2]:83 [ sin16s::x3#0 ] zp[2]:101 [ sin16s::usinx#1 ] zp[2]:75 [ sin16s::x1#0 ] zp[2]:89 [ sin16s::usinx#0 ] reg byte y [ sin16s::isUpper#2 ]
Uplifting [sin16s_gen] best 26706 combination zp[2]:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] zp[2]:69 [ sin16s_gen::$2 ] zp[4]:16 [ sin16s_gen::x#2 sin16s_gen::x#1 ] zp[2]:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] zp[4]:63 [ sin16s_gen::step#0 ]
Uplifting [mulu16_sel] best 26690 combination zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ] zp[2]:77 [ mulu16_sel::return#0 ] zp[2]:81 [ mulu16_sel::return#1 ] zp[2]:85 [ mulu16_sel::return#2 ] zp[2]:91 [ mulu16_sel::return#10 ] zp[2]:95 [ mulu16_sel::return#11 ] zp[4]:107 [ mulu16_sel::$0 ] zp[4]:111 [ mulu16_sel::$1 ] zp[2]:115 [ mulu16_sel::return#12 ] reg byte x [ mulu16_sel::select#5 ]
Uplifting [memset] best 26690 combination zp[2]:12 [ memset::dst#2 memset::dst#1 ]
Uplifting [main] best 26690 combination zp[2]:2 [ main::st1#2 main::st1#1 ] zp[2]:53 [ main::sw#0 ]
Uplifting [print_byte] best 26676 combination reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte a [ print_byte::$0 ] reg byte x [ print_byte::$2 ]
Uplifting [print_char] best 26661 combination reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
Uplifting [print_sword] best 26661 combination zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ]
Uplifting [div32u16u] best 26661 combination zp[4]:59 [ div32u16u::return#2 ] zp[2]:124 [ div32u16u::quotient_lo#0 ] zp[4]:126 [ div32u16u::return#0 ] zp[2]:120 [ div32u16u::quotient_hi#0 ]
Uplifting [print_word] best 26661 combination zp[2]:55 [ print_word::w#0 ]
Uplifting [RADIX] best 26661 combination
Uplifting [print_cls] best 26661 combination
Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 ] ] with [ zp[2]:101 [ sin16s::usinx#1 ] ] - score: 2
Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 ] ] with [ zp[2]:83 [ sin16s::x3#0 ] ] - score: 2
Coalescing zero page register [ zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 ] ] with [ zp[2]:132 [ rem16u#1 ] ] - score: 2
Coalescing zero page register [ zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 ] ] with [ zp[2]:53 [ main::sw#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 ] ] with [ zp[2]:55 [ print_word::w#0 ] ] - score: 1
Coalescing zero page register [ zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ] with [ zp[4]:71 [ sin16s::$4 ] ] - score: 1
Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 ] ] with [ zp[2]:67 [ sin16s::return#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 ] ] with [ zp[2]:79 [ sin16s::x2#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 ] ] with [ zp[2]:93 [ sin16s::x4#0 ] ] - score: 1
@ -4435,25 +4435,25 @@ Coalescing zero page register [ zp[2]:12 [ memset::dst#2 memset::dst#1 ] ] with
Coalescing zero page register [ zp[2]:14 [ sin16s_gen::i#2 sin16s_gen::i#1 ] ] with [ zp[2]:4 [ print_str::str#3 print_str::str#5 print_str::str#0 ] ]
Coalescing zero page register [ zp[2]:20 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 ] ] with [ zp[2]:6 [ print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ] ]
Coalescing zero page register [ zp[2]:27 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ] ] with [ zp[2]:9 [ print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ] ]
Coalescing zero page register [ zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ] with [ zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ] ]
Coalescing zero page register [ zp[4]:36 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ] ] with [ zp[4]:23 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ] ]
Coalescing zero page register [ zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 ] ] with [ zp[2]:29 [ mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ]
Coalescing zero page register [ zp[2]:48 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 ] ] with [ zp[2]:31 [ mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ] ]
Coalescing zero page register [ zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 ] ] with [ zp[2]:34 [ mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ]
Coalescing zero page register [ zp[4]:71 [ sin16s::$4 ] ] with [ zp[4]:40 [ mul16u::mb#2 mul16u::mb#1 ] ]
Coalescing zero page register [ zp[2]:120 [ div32u16u::quotient_hi#0 ] ] with [ zp[2]:75 [ sin16s::x1#0 ] ]
Coalescing zero page register [ zp[2]:46 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ] ] with [ zp[2]:12 [ memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ] ]
Coalescing zero page register [ zp[2]:77 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 ] ] with [ zp[2]:50 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ] ]
Allocated (was zp[2]:14) zp[2]:2 [ sin16s_gen::i#2 sin16s_gen::i#1 print_str::str#3 print_str::str#5 print_str::str#0 ]
Allocated (was zp[4]:16) zp[4]:4 [ sin16s_gen::x#2 sin16s_gen::x#1 ]
Allocated (was zp[2]:20) zp[2]:8 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ]
Allocated (was zp[1]:22) zp[1]:10 [ sin16s::isUpper#2 ]
Allocated (was zp[2]:27) zp[2]:11 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ]
Allocated (was zp[4]:36) zp[4]:13 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ]
Allocated (was zp[4]:40) zp[4]:17 [ mul16u::mb#2 mul16u::mb#1 ]
Allocated (was zp[2]:46) zp[2]:21 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ]
Allocated (was zp[2]:48) zp[2]:23 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ]
Allocated (was zp[4]:59) zp[4]:25 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ]
Allocated (was zp[2]:77) zp[2]:29 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
Allocated (was zp[2]:120) zp[2]:31 [ div32u16u::quotient_hi#0 sin16s::x1#0 ]
Allocated (was zp[2]:27) zp[2]:10 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ]
Allocated (was zp[4]:36) zp[4]:12 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ]
Allocated (was zp[2]:46) zp[2]:16 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ]
Allocated (was zp[2]:48) zp[2]:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ]
Allocated (was zp[4]:59) zp[4]:20 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ]
Allocated (was zp[4]:71) zp[4]:24 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ]
Allocated (was zp[2]:77) zp[2]:28 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
Allocated (was zp[2]:120) zp[2]:30 [ div32u16u::quotient_hi#0 sin16s::x1#0 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -4471,8 +4471,8 @@ ASSEMBLER BEFORE OPTIMIZATION
// PI/2 in u[4.28] format
.const PI_HALF_u4f28 = $1921fb54
.label print_line_cursor = $400
.label rem16u = $15
.label print_char_cursor = $b
.label rem16u = $10
.label print_char_cursor = $a
// @begin
__bbegin:
// [1] phi from @begin to @1 [phi:@begin->@1]
@ -4493,7 +4493,7 @@ __bend:
main: {
.label wavelength = $78
.label sw = 8
.label st1 = $15
.label st1 = $10
// [5] call sin16s_gen
// [64] phi from main to sin16s_gen [phi:main->sin16s_gen]
sin16s_gen_from_main:
@ -4819,7 +4819,7 @@ memset: {
.const num = $3e8
.label str = print_line_cursor
.label end = str+num
.label dst = $15
.label dst = $10
// [59] phi from memset to memset::@1 [phi:memset->memset::@1]
__b1_from_memset:
// [59] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1
@ -4864,8 +4864,8 @@ memset: {
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen(signed word* zeropage(8) sintab)
sin16s_gen: {
.label __2 = $b
.label step = $19
.label __2 = $a
.label step = $14
.label sintab = 8
.label x = 4
.label i = 2
@ -4978,21 +4978,20 @@ sin16s_gen: {
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16s(dword zeropage($d) x)
// sin16s(dword zeropage($c) x)
sin16s: {
.label __4 = $d
.label x = $d
.label return = $b
.label x1 = $1f
.label x2 = $15
.label x3 = $15
.label x3_6 = $1d
.label usinx = $b
.label x4 = $15
.label x5 = $1d
.label x5_128 = $1d
.label sinx = $b
.label isUpper = $a
.label __4 = $18
.label x = $c
.label return = $a
.label x1 = $1e
.label x2 = $10
.label x3 = $10
.label x3_6 = $1c
.label usinx = $a
.label x4 = $10
.label x5 = $1c
.label x5_128 = $1c
.label sinx = $a
// [79] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1
lda.z x+3
cmp #>PI_u4f28>>$10
@ -5029,16 +5028,14 @@ sin16s: {
sta.z x+3
// [81] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
__b1_from___b4:
// [81] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1
lda #1
sta.z isUpper
// [81] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1
ldy #1
// [81] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy
jmp __b1
// [81] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
__b1_from_sin16s:
// [81] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1
lda #0
sta.z isUpper
// [81] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1
ldy #0
// [81] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy
jmp __b1
// sin16s::@1
@ -5084,15 +5081,27 @@ sin16s: {
jmp __b2
// sin16s::@2
__b2:
// [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz1_rol_3
ldy #3
!:
// [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3
lda.z x
asl
sta.z __4
lda.z x+1
rol
sta.z __4+1
lda.z x+2
rol
sta.z __4+2
lda.z x+3
rol
sta.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
dey
bne !-
// [86] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2
lda.z __4+2
sta.z x1
@ -5233,9 +5242,8 @@ sin16s: {
lda.z usinx+1
adc.z x5_128+1
sta.z usinx+1
// [114] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1
lda.z isUpper
cmp #0
// [114] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1
cpy #0
beq __b12
jmp __b6
// sin16s::@6
@ -5268,14 +5276,14 @@ sin16s: {
// mulu16_sel
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($15) v1, word zeropage($17) v2, byte register(X) select)
// mulu16_sel(word zeropage($10) v1, word zeropage($12) v2, byte register(X) select)
mulu16_sel: {
.label __0 = $d
.label __1 = $d
.label v1 = $15
.label v2 = $17
.label return = $1d
.label return_1 = $15
.label __0 = $c
.label __1 = $c
.label v1 = $10
.label v2 = $12
.label return = $1c
.label return_1 = $10
// [120] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2
lda.z v1
sta.z mul16u.a
@ -5315,13 +5323,13 @@ mulu16_sel: {
}
// mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($1d) a, word zeropage($17) b)
// mul16u(word zeropage($1c) a, word zeropage($12) b)
mul16u: {
.label a = $1d
.label mb = $11
.label res = $d
.label b = $17
.label return = $d
.label a = $1c
.label mb = $18
.label res = $c
.label b = $12
.label return = $c
// [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
__b1_from_mul16u:
// [129] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2
@ -5404,9 +5412,9 @@ mul16u: {
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
.label quotient_hi = $1f
.label quotient_lo = $1d
.label return = $19
.label quotient_hi = $1e
.label quotient_lo = $1c
.label return = $14
// [139] call divr16u
// [148] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
divr16u_from_div32u16u:
@ -5466,12 +5474,12 @@ div32u16u: {
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage($17) dividend, word zeropage($15) rem)
// divr16u(word zeropage($12) dividend, word zeropage($10) rem)
divr16u: {
.label rem = $15
.label dividend = $17
.label quotient = $1d
.label return = $1d
.label rem = $10
.label dividend = $12
.label quotient = $1c
.label return = $1c
// [149] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
__b1_from_divr16u:
// [149] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1
@ -5792,12 +5800,12 @@ FINAL SYMBOL TABLE
(word) div32u16u::divisor
(dword) div32u16u::quotient
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:31 0.8
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:30 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:29 4.0
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:28 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp[4]:25 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:25 4.0
(dword) div32u16u::return#0 return zp[4]:20 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:20 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
@ -5809,30 +5817,30 @@ FINAL SYMBOL TABLE
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp[2]:23 2.75
(word) divr16u::dividend#3 dividend zp[2]:23 5.0
(word) divr16u::dividend#5 dividend zp[2]:23 2.0
(word) divr16u::dividend#0 dividend zp[2]:18 2.75
(word) divr16u::dividend#3 dividend zp[2]:18 5.0
(word) divr16u::dividend#5 dividend zp[2]:18 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp[2]:29 16.5
(word) divr16u::quotient#2 quotient zp[2]:29 11.0
(word) divr16u::quotient#3 quotient zp[2]:29 2.75
(word) divr16u::quotient#1 quotient zp[2]:28 16.5
(word) divr16u::quotient#2 quotient zp[2]:28 11.0
(word) divr16u::quotient#3 quotient zp[2]:28 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp[2]:21 8.25
(word) divr16u::rem#1 rem zp[2]:21 22.0
(word) divr16u::rem#10 rem zp[2]:21 4.0
(word) divr16u::rem#11 rem zp[2]:21 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:21 22.0
(word) divr16u::rem#4 rem zp[2]:21 4.0
(word) divr16u::rem#5 rem zp[2]:21 24.0
(word) divr16u::rem#6 rem zp[2]:21 11.0
(word) divr16u::rem#0 rem zp[2]:16 8.25
(word) divr16u::rem#1 rem zp[2]:16 22.0
(word) divr16u::rem#10 rem zp[2]:16 4.0
(word) divr16u::rem#11 rem zp[2]:16 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:16 22.0
(word) divr16u::rem#4 rem zp[2]:16 4.0
(word) divr16u::rem#5 rem zp[2]:16 24.0
(word) divr16u::rem#6 rem zp[2]:16 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp[2]:29 5.285714285714286
(word) divr16u::return#2 return zp[2]:29 4.0
(word) divr16u::return#3 return zp[2]:29 4.0
(word) divr16u::return#0 return zp[2]:28 5.285714285714286
(word) divr16u::return#2 return zp[2]:28 4.0
(word) divr16u::return#3 return zp[2]:28 4.0
(void()) main()
(label) main::@1
(label) main::@2
@ -5844,8 +5852,8 @@ FINAL SYMBOL TABLE
(label) main::@return
(const signed word[$78]) main::sintab1 = { fill( $78, 0) }
(signed word*) main::st1
(signed word*) main::st1#1 st1 zp[2]:21 22.0
(signed word*) main::st1#2 st1 zp[2]:21 4.0
(signed word*) main::st1#1 st1 zp[2]:16 22.0
(signed word*) main::st1#2 st1 zp[2]:16 4.0
(const string) main::str = (string) " "
(const string) main::str1 = (string) " "
(signed word) main::sw
@ -5858,8 +5866,8 @@ FINAL SYMBOL TABLE
(byte) memset::c
(const byte) memset::c#0 c = (byte) ' '
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:21 22.0
(byte*) memset::dst#2 dst zp[2]:21 14.666666666666666
(byte*) memset::dst#1 dst zp[2]:16 22.0
(byte*) memset::dst#2 dst zp[2]:16 14.666666666666666
(byte*) memset::end
(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
(word) memset::num
@ -5875,47 +5883,47 @@ FINAL SYMBOL TABLE
(label) mul16u::@4
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp[2]:29 101.0
(word) mul16u::a#1 a zp[2]:29 1.3333333333333333
(word) mul16u::a#2 a zp[2]:29 67.66666666666666
(word) mul16u::a#0 a zp[2]:28 101.0
(word) mul16u::a#1 a zp[2]:28 1.3333333333333333
(word) mul16u::a#2 a zp[2]:28 67.66666666666666
(word) mul16u::b
(word) mul16u::b#0 b zp[2]:23 2.0
(word) mul16u::b#0 b zp[2]:18 2.0
(dword) mul16u::mb
(dword) mul16u::mb#1 mb zp[4]:17 202.0
(dword) mul16u::mb#2 mb zp[4]:17 43.57142857142858
(dword) mul16u::mb#1 mb zp[4]:24 202.0
(dword) mul16u::mb#2 mb zp[4]:24 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp[4]:13 202.0
(dword) mul16u::res#2 res zp[4]:13 50.83333333333333
(dword) mul16u::res#6 res zp[4]:13 101.0
(dword) mul16u::res#1 res zp[4]:12 202.0
(dword) mul16u::res#2 res zp[4]:12 50.83333333333333
(dword) mul16u::res#6 res zp[4]:12 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp[4]:13 4.0
(dword) mul16u::return#2 return zp[4]:12 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 zp[4]:13 4.0
(dword~) mulu16_sel::$1 zp[4]:13 4.0
(dword~) mulu16_sel::$0 zp[4]:12 4.0
(dword~) mulu16_sel::$1 zp[4]:12 4.0
(label) mulu16_sel::@1
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp[2]:29 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:21 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:21 4.0
(word) mulu16_sel::return#11 return zp[2]:29 4.0
(word) mulu16_sel::return#12 return zp[2]:29 1.714285714285714
(word) mulu16_sel::return#2 return zp[2]:29 4.0
(word) mulu16_sel::return#0 return zp[2]:28 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:16 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:16 4.0
(word) mulu16_sel::return#11 return zp[2]:28 4.0
(word) mulu16_sel::return#12 return zp[2]:28 1.714285714285714
(word) mulu16_sel::return#2 return zp[2]:28 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:21 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:21 12.0
(word) mulu16_sel::v1#0 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:16 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:16 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp[2]:23 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:23 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:23 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:23 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:23 5.0
(word) mulu16_sel::v2#0 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:18 5.0
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte x 4.0
@ -5932,13 +5940,13 @@ FINAL SYMBOL TABLE
(byte) print_char::ch#3 reg byte a 4.0
(byte) print_char::ch#4 reg byte a 6.0
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp[2]:11 101.0
(byte*) print_char_cursor#13 print_char_cursor zp[2]:11 0.7083333333333334
(byte*) print_char_cursor#2 print_char_cursor zp[2]:11 46.714285714285715
(byte*) print_char_cursor#21 print_char_cursor zp[2]:11 6.6000000000000005
(byte*) print_char_cursor#35 print_char_cursor zp[2]:11 6.0
(byte*) print_char_cursor#51 print_char_cursor zp[2]:11 5.200000000000001
(byte*) print_char_cursor#55 print_char_cursor zp[2]:11 24.0
(byte*) print_char_cursor#1 print_char_cursor zp[2]:10 101.0
(byte*) print_char_cursor#13 print_char_cursor zp[2]:10 0.7083333333333334
(byte*) print_char_cursor#2 print_char_cursor zp[2]:10 46.714285714285715
(byte*) print_char_cursor#21 print_char_cursor zp[2]:10 6.6000000000000005
(byte*) print_char_cursor#35 print_char_cursor zp[2]:10 6.0
(byte*) print_char_cursor#51 print_char_cursor zp[2]:10 5.200000000000001
(byte*) print_char_cursor#55 print_char_cursor zp[2]:10 24.0
(void()) print_cls()
(label) print_cls::@return
(const byte[]) print_hextab = (string) "0123456789abcdef"z
@ -5969,9 +5977,9 @@ FINAL SYMBOL TABLE
(word) print_word::w
(word) print_word::w#0 w zp[2]:8 2.0
(word) rem16u
(word) rem16u#1 rem16u zp[2]:21 0.8
(word) rem16u#1 rem16u zp[2]:16 0.8
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 zp[4]:13 4.0
(dword~) sin16s::$4 zp[4]:24 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
@ -5986,38 +5994,38 @@ FINAL SYMBOL TABLE
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp[1]:10 0.06060606060606061
(byte) sin16s::isUpper#2 reg byte y 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp[2]:11 22.0
(signed word) sin16s::return#1 return zp[2]:11 5.0
(signed word~) sin16s::return#5 return zp[2]:11 4.0
(signed word) sin16s::return#0 return zp[2]:10 22.0
(signed word) sin16s::return#1 return zp[2]:10 5.0
(signed word~) sin16s::return#5 return zp[2]:10 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp[2]:11 4.0
(signed word) sin16s::sinx#1 sinx zp[2]:10 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp[2]:11 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:11 1.0
(word) sin16s::usinx#0 usinx zp[2]:10 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:10 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp[4]:13 8.5
(dword) sin16s::x#1 x zp[4]:13 4.0
(dword) sin16s::x#2 x zp[4]:13 4.0
(dword) sin16s::x#4 x zp[4]:13 5.0
(dword) sin16s::x#6 x zp[4]:13 6.0
(dword) sin16s::x#0 x zp[4]:12 8.5
(dword) sin16s::x#1 x zp[4]:12 4.0
(dword) sin16s::x#2 x zp[4]:12 4.0
(dword) sin16s::x#4 x zp[4]:12 5.0
(dword) sin16s::x#6 x zp[4]:12 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp[2]:31 0.6363636363636365
(word) sin16s::x1#0 x1 zp[2]:30 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp[2]:21 4.0
(word) sin16s::x2#0 x2 zp[2]:16 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp[2]:21 1.0
(word) sin16s::x3#0 x3 zp[2]:16 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp[2]:29 4.0
(word) sin16s::x3_6#0 x3_6 zp[2]:28 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp[2]:21 4.0
(word) sin16s::x4#0 x4 zp[2]:16 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp[2]:29 4.0
(word) sin16s::x5#0 x5 zp[2]:28 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp[2]:29 4.0
(word) sin16s::x5_128#0 x5_128 zp[2]:28 4.0
(void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength)
(signed word~) sin16s_gen::$2 zp[2]:11 22.0
(signed word~) sin16s_gen::$2 zp[2]:10 22.0
(label) sin16s_gen::@1
(label) sin16s_gen::@2
(label) sin16s_gen::@3
@ -6030,7 +6038,7 @@ FINAL SYMBOL TABLE
(signed word*) sin16s_gen::sintab#0 sintab zp[2]:8 7.333333333333333
(signed word*) sin16s_gen::sintab#2 sintab zp[2]:8 4.714285714285714
(dword) sin16s_gen::step
(dword) sin16s_gen::step#0 step zp[4]:25 1.1818181818181819
(dword) sin16s_gen::step#0 step zp[4]:20 1.1818181818181819
(word) sin16s_gen::wavelength
(dword) sin16s_gen::x
(dword) sin16s_gen::x#1 x zp[4]:4 11.0
@ -6041,26 +6049,26 @@ reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
zp[2]:2 [ sin16s_gen::i#2 sin16s_gen::i#1 print_str::str#3 print_str::str#5 print_str::str#0 ]
zp[4]:4 [ sin16s_gen::x#2 sin16s_gen::x#1 ]
zp[2]:8 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ]
zp[1]:10 [ sin16s::isUpper#2 ]
zp[2]:11 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ]
reg byte y [ sin16s::isUpper#2 ]
zp[2]:10 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ]
reg byte x [ mulu16_sel::select#5 ]
zp[4]:13 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ]
zp[4]:17 [ mul16u::mb#2 mul16u::mb#1 ]
zp[2]:21 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ]
zp[2]:23 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ]
zp[4]:12 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ]
zp[2]:16 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ]
zp[2]:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
reg byte a [ print_byte::$0 ]
reg byte x [ print_byte::$2 ]
zp[4]:25 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ]
zp[2]:29 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
zp[4]:20 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ]
zp[4]:24 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ]
zp[2]:28 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
reg byte a [ mul16u::$1 ]
zp[2]:31 [ div32u16u::quotient_hi#0 sin16s::x1#0 ]
zp[2]:30 [ div32u16u::quotient_hi#0 sin16s::x1#0 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]
FINAL ASSEMBLER
Score: 22750
Score: 22787
// File Comments
// Generates a 16-bit signed sinus
@ -6077,8 +6085,8 @@ Score: 22750
// PI/2 in u[4.28] format
.const PI_HALF_u4f28 = $1921fb54
.label print_line_cursor = $400
.label rem16u = $15
.label print_char_cursor = $b
.label rem16u = $10
.label print_char_cursor = $a
// @begin
// [1] phi from @begin to @1 [phi:@begin->@1]
// @1
@ -6090,7 +6098,7 @@ Score: 22750
main: {
.label wavelength = $78
.label sw = 8
.label st1 = $15
.label st1 = $10
// sin16s_gen(sintab1, wavelength)
// [5] call sin16s_gen
// [64] phi from main to sin16s_gen [phi:main->sin16s_gen]
@ -6388,7 +6396,7 @@ memset: {
.const num = $3e8
.label str = print_line_cursor
.label end = str+num
.label dst = $15
.label dst = $10
// [59] phi from memset to memset::@1 [phi:memset->memset::@1]
// [59] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1
lda #<str
@ -6432,8 +6440,8 @@ memset: {
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen(signed word* zeropage(8) sintab)
sin16s_gen: {
.label __2 = $b
.label step = $19
.label __2 = $a
.label step = $14
.label sintab = 8
.label x = 4
.label i = 2
@ -6543,21 +6551,20 @@ sin16s_gen: {
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16s(dword zeropage($d) x)
// sin16s(dword zeropage($c) x)
sin16s: {
.label __4 = $d
.label x = $d
.label return = $b
.label x1 = $1f
.label x2 = $15
.label x3 = $15
.label x3_6 = $1d
.label usinx = $b
.label x4 = $15
.label x5 = $1d
.label x5_128 = $1d
.label sinx = $b
.label isUpper = $a
.label __4 = $18
.label x = $c
.label return = $a
.label x1 = $1e
.label x2 = $10
.label x3 = $10
.label x3_6 = $1c
.label usinx = $a
.label x4 = $10
.label x5 = $1c
.label x5_128 = $1c
.label sinx = $a
// if(x >= PI_u4f28 )
// [79] if((dword) sin16s::x#0<(const dword) PI_u4f28) goto sin16s::@1 -- vduz1_lt_vduc1_then_la1
lda.z x+3
@ -6593,16 +6600,14 @@ sin16s: {
sbc #>PI_u4f28>>$10
sta.z x+3
// [81] phi from sin16s::@4 to sin16s::@1 [phi:sin16s::@4->sin16s::@1]
// [81] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuz1=vbuc1
lda #1
sta.z isUpper
// [81] phi (byte) sin16s::isUpper#2 = (byte) 1 [phi:sin16s::@4->sin16s::@1#0] -- vbuyy=vbuc1
ldy #1
// [81] phi (dword) sin16s::x#4 = (dword) sin16s::x#1 [phi:sin16s::@4->sin16s::@1#1] -- register_copy
jmp __b1
// [81] phi from sin16s to sin16s::@1 [phi:sin16s->sin16s::@1]
b1:
// [81] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuz1=vbuc1
lda #0
sta.z isUpper
// [81] phi (byte) sin16s::isUpper#2 = (byte) 0 [phi:sin16s->sin16s::@1#0] -- vbuyy=vbuc1
ldy #0
// [81] phi (dword) sin16s::x#4 = (dword) sin16s::x#0 [phi:sin16s->sin16s::@1#1] -- register_copy
// sin16s::@1
__b1:
@ -6645,15 +6650,27 @@ sin16s: {
// sin16s::@2
__b2:
// x<<3
// [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz1_rol_3
ldy #3
!:
// [85] (dword~) sin16s::$4 ← (dword) sin16s::x#6 << (byte) 3 -- vduz1=vduz2_rol_3
lda.z x
asl
sta.z __4
lda.z x+1
rol
sta.z __4+1
lda.z x+2
rol
sta.z __4+2
lda.z x+3
rol
sta.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
dey
bne !-
// x1 = >x<<3
// [86] (word) sin16s::x1#0 ← > (dword~) sin16s::$4 -- vwuz1=_hi_vduz2
lda.z __4+2
@ -6799,9 +6816,8 @@ sin16s: {
adc.z x5_128+1
sta.z usinx+1
// if(isUpper!=0)
// [114] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuz1_eq_0_then_la1
lda.z isUpper
cmp #0
// [114] if((byte) sin16s::isUpper#2==(byte) 0) goto sin16s::@12 -- vbuyy_eq_0_then_la1
cpy #0
beq __b3
// sin16s::@6
// sinx = -(signed word)usinx
@ -6827,14 +6843,14 @@ sin16s: {
// mulu16_sel
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($15) v1, word zeropage($17) v2, byte register(X) select)
// mulu16_sel(word zeropage($10) v1, word zeropage($12) v2, byte register(X) select)
mulu16_sel: {
.label __0 = $d
.label __1 = $d
.label v1 = $15
.label v2 = $17
.label return = $1d
.label return_1 = $15
.label __0 = $c
.label __1 = $c
.label v1 = $10
.label v2 = $12
.label return = $1c
.label return_1 = $10
// mul16u(v1, v2)
// [120] (word) mul16u::a#1 ← (word) mulu16_sel::v1#5 -- vwuz1=vwuz2
lda.z v1
@ -6874,13 +6890,13 @@ mulu16_sel: {
}
// mul16u
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($1d) a, word zeropage($17) b)
// mul16u(word zeropage($1c) a, word zeropage($12) b)
mul16u: {
.label a = $1d
.label mb = $11
.label res = $d
.label b = $17
.label return = $d
.label a = $1c
.label mb = $18
.label res = $c
.label b = $12
.label return = $c
// [129] phi from mul16u to mul16u::@1 [phi:mul16u->mul16u::@1]
// [129] phi (dword) mul16u::mb#2 = (word) mul16u::b#0 [phi:mul16u->mul16u::@1#0] -- vduz1=vwuz2
lda.z b
@ -6958,9 +6974,9 @@ mul16u: {
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
.label quotient_hi = $1f
.label quotient_lo = $1d
.label return = $19
.label quotient_hi = $1e
.label quotient_lo = $1c
.label return = $14
// divr16u(>dividend, divisor, 0)
// [139] call divr16u
// [148] phi from div32u16u to divr16u [phi:div32u16u->divr16u]
@ -7019,12 +7035,12 @@ div32u16u: {
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage($17) dividend, word zeropage($15) rem)
// divr16u(word zeropage($12) dividend, word zeropage($10) rem)
divr16u: {
.label rem = $15
.label dividend = $17
.label quotient = $1d
.label return = $1d
.label rem = $10
.label dividend = $12
.label quotient = $1c
.label return = $1c
// [149] phi from divr16u to divr16u::@1 [phi:divr16u->divr16u::@1]
// [149] phi (byte) divr16u::i#2 = (byte) 0 [phi:divr16u->divr16u::@1#0] -- vbuxx=vbuc1
ldx #0

View File

@ -17,12 +17,12 @@
(word) div32u16u::divisor
(dword) div32u16u::quotient
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:31 0.8
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:30 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:29 4.0
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:28 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp[4]:25 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:25 4.0
(dword) div32u16u::return#0 return zp[4]:20 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:20 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
@ -34,30 +34,30 @@
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp[2]:23 2.75
(word) divr16u::dividend#3 dividend zp[2]:23 5.0
(word) divr16u::dividend#5 dividend zp[2]:23 2.0
(word) divr16u::dividend#0 dividend zp[2]:18 2.75
(word) divr16u::dividend#3 dividend zp[2]:18 5.0
(word) divr16u::dividend#5 dividend zp[2]:18 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp[2]:29 16.5
(word) divr16u::quotient#2 quotient zp[2]:29 11.0
(word) divr16u::quotient#3 quotient zp[2]:29 2.75
(word) divr16u::quotient#1 quotient zp[2]:28 16.5
(word) divr16u::quotient#2 quotient zp[2]:28 11.0
(word) divr16u::quotient#3 quotient zp[2]:28 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp[2]:21 8.25
(word) divr16u::rem#1 rem zp[2]:21 22.0
(word) divr16u::rem#10 rem zp[2]:21 4.0
(word) divr16u::rem#11 rem zp[2]:21 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:21 22.0
(word) divr16u::rem#4 rem zp[2]:21 4.0
(word) divr16u::rem#5 rem zp[2]:21 24.0
(word) divr16u::rem#6 rem zp[2]:21 11.0
(word) divr16u::rem#0 rem zp[2]:16 8.25
(word) divr16u::rem#1 rem zp[2]:16 22.0
(word) divr16u::rem#10 rem zp[2]:16 4.0
(word) divr16u::rem#11 rem zp[2]:16 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:16 22.0
(word) divr16u::rem#4 rem zp[2]:16 4.0
(word) divr16u::rem#5 rem zp[2]:16 24.0
(word) divr16u::rem#6 rem zp[2]:16 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp[2]:29 5.285714285714286
(word) divr16u::return#2 return zp[2]:29 4.0
(word) divr16u::return#3 return zp[2]:29 4.0
(word) divr16u::return#0 return zp[2]:28 5.285714285714286
(word) divr16u::return#2 return zp[2]:28 4.0
(word) divr16u::return#3 return zp[2]:28 4.0
(void()) main()
(label) main::@1
(label) main::@2
@ -69,8 +69,8 @@
(label) main::@return
(const signed word[$78]) main::sintab1 = { fill( $78, 0) }
(signed word*) main::st1
(signed word*) main::st1#1 st1 zp[2]:21 22.0
(signed word*) main::st1#2 st1 zp[2]:21 4.0
(signed word*) main::st1#1 st1 zp[2]:16 22.0
(signed word*) main::st1#2 st1 zp[2]:16 4.0
(const string) main::str = (string) " "
(const string) main::str1 = (string) " "
(signed word) main::sw
@ -83,8 +83,8 @@
(byte) memset::c
(const byte) memset::c#0 c = (byte) ' '
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:21 22.0
(byte*) memset::dst#2 dst zp[2]:21 14.666666666666666
(byte*) memset::dst#1 dst zp[2]:16 22.0
(byte*) memset::dst#2 dst zp[2]:16 14.666666666666666
(byte*) memset::end
(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
(word) memset::num
@ -100,47 +100,47 @@
(label) mul16u::@4
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp[2]:29 101.0
(word) mul16u::a#1 a zp[2]:29 1.3333333333333333
(word) mul16u::a#2 a zp[2]:29 67.66666666666666
(word) mul16u::a#0 a zp[2]:28 101.0
(word) mul16u::a#1 a zp[2]:28 1.3333333333333333
(word) mul16u::a#2 a zp[2]:28 67.66666666666666
(word) mul16u::b
(word) mul16u::b#0 b zp[2]:23 2.0
(word) mul16u::b#0 b zp[2]:18 2.0
(dword) mul16u::mb
(dword) mul16u::mb#1 mb zp[4]:17 202.0
(dword) mul16u::mb#2 mb zp[4]:17 43.57142857142858
(dword) mul16u::mb#1 mb zp[4]:24 202.0
(dword) mul16u::mb#2 mb zp[4]:24 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp[4]:13 202.0
(dword) mul16u::res#2 res zp[4]:13 50.83333333333333
(dword) mul16u::res#6 res zp[4]:13 101.0
(dword) mul16u::res#1 res zp[4]:12 202.0
(dword) mul16u::res#2 res zp[4]:12 50.83333333333333
(dword) mul16u::res#6 res zp[4]:12 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp[4]:13 4.0
(dword) mul16u::return#2 return zp[4]:12 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 zp[4]:13 4.0
(dword~) mulu16_sel::$1 zp[4]:13 4.0
(dword~) mulu16_sel::$0 zp[4]:12 4.0
(dword~) mulu16_sel::$1 zp[4]:12 4.0
(label) mulu16_sel::@1
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp[2]:29 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:21 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:21 4.0
(word) mulu16_sel::return#11 return zp[2]:29 4.0
(word) mulu16_sel::return#12 return zp[2]:29 1.714285714285714
(word) mulu16_sel::return#2 return zp[2]:29 4.0
(word) mulu16_sel::return#0 return zp[2]:28 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:16 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:16 4.0
(word) mulu16_sel::return#11 return zp[2]:28 4.0
(word) mulu16_sel::return#12 return zp[2]:28 1.714285714285714
(word) mulu16_sel::return#2 return zp[2]:28 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:21 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:21 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:21 12.0
(word) mulu16_sel::v1#0 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:16 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:16 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp[2]:23 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:23 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:23 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:23 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:23 5.0
(word) mulu16_sel::v2#0 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:18 5.0
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte x 4.0
@ -157,13 +157,13 @@
(byte) print_char::ch#3 reg byte a 4.0
(byte) print_char::ch#4 reg byte a 6.0
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp[2]:11 101.0
(byte*) print_char_cursor#13 print_char_cursor zp[2]:11 0.7083333333333334
(byte*) print_char_cursor#2 print_char_cursor zp[2]:11 46.714285714285715
(byte*) print_char_cursor#21 print_char_cursor zp[2]:11 6.6000000000000005
(byte*) print_char_cursor#35 print_char_cursor zp[2]:11 6.0
(byte*) print_char_cursor#51 print_char_cursor zp[2]:11 5.200000000000001
(byte*) print_char_cursor#55 print_char_cursor zp[2]:11 24.0
(byte*) print_char_cursor#1 print_char_cursor zp[2]:10 101.0
(byte*) print_char_cursor#13 print_char_cursor zp[2]:10 0.7083333333333334
(byte*) print_char_cursor#2 print_char_cursor zp[2]:10 46.714285714285715
(byte*) print_char_cursor#21 print_char_cursor zp[2]:10 6.6000000000000005
(byte*) print_char_cursor#35 print_char_cursor zp[2]:10 6.0
(byte*) print_char_cursor#51 print_char_cursor zp[2]:10 5.200000000000001
(byte*) print_char_cursor#55 print_char_cursor zp[2]:10 24.0
(void()) print_cls()
(label) print_cls::@return
(const byte[]) print_hextab = (string) "0123456789abcdef"z
@ -194,9 +194,9 @@
(word) print_word::w
(word) print_word::w#0 w zp[2]:8 2.0
(word) rem16u
(word) rem16u#1 rem16u zp[2]:21 0.8
(word) rem16u#1 rem16u zp[2]:16 0.8
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 zp[4]:13 4.0
(dword~) sin16s::$4 zp[4]:24 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
@ -211,38 +211,38 @@
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp[1]:10 0.06060606060606061
(byte) sin16s::isUpper#2 reg byte y 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp[2]:11 22.0
(signed word) sin16s::return#1 return zp[2]:11 5.0
(signed word~) sin16s::return#5 return zp[2]:11 4.0
(signed word) sin16s::return#0 return zp[2]:10 22.0
(signed word) sin16s::return#1 return zp[2]:10 5.0
(signed word~) sin16s::return#5 return zp[2]:10 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp[2]:11 4.0
(signed word) sin16s::sinx#1 sinx zp[2]:10 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp[2]:11 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:11 1.0
(word) sin16s::usinx#0 usinx zp[2]:10 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:10 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp[4]:13 8.5
(dword) sin16s::x#1 x zp[4]:13 4.0
(dword) sin16s::x#2 x zp[4]:13 4.0
(dword) sin16s::x#4 x zp[4]:13 5.0
(dword) sin16s::x#6 x zp[4]:13 6.0
(dword) sin16s::x#0 x zp[4]:12 8.5
(dword) sin16s::x#1 x zp[4]:12 4.0
(dword) sin16s::x#2 x zp[4]:12 4.0
(dword) sin16s::x#4 x zp[4]:12 5.0
(dword) sin16s::x#6 x zp[4]:12 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp[2]:31 0.6363636363636365
(word) sin16s::x1#0 x1 zp[2]:30 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp[2]:21 4.0
(word) sin16s::x2#0 x2 zp[2]:16 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp[2]:21 1.0
(word) sin16s::x3#0 x3 zp[2]:16 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp[2]:29 4.0
(word) sin16s::x3_6#0 x3_6 zp[2]:28 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp[2]:21 4.0
(word) sin16s::x4#0 x4 zp[2]:16 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp[2]:29 4.0
(word) sin16s::x5#0 x5 zp[2]:28 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp[2]:29 4.0
(word) sin16s::x5_128#0 x5_128 zp[2]:28 4.0
(void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength)
(signed word~) sin16s_gen::$2 zp[2]:11 22.0
(signed word~) sin16s_gen::$2 zp[2]:10 22.0
(label) sin16s_gen::@1
(label) sin16s_gen::@2
(label) sin16s_gen::@3
@ -255,7 +255,7 @@
(signed word*) sin16s_gen::sintab#0 sintab zp[2]:8 7.333333333333333
(signed word*) sin16s_gen::sintab#2 sintab zp[2]:8 4.714285714285714
(dword) sin16s_gen::step
(dword) sin16s_gen::step#0 step zp[4]:25 1.1818181818181819
(dword) sin16s_gen::step#0 step zp[4]:20 1.1818181818181819
(word) sin16s_gen::wavelength
(dword) sin16s_gen::x
(dword) sin16s_gen::x#1 x zp[4]:4 11.0
@ -266,19 +266,19 @@ reg byte x [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
zp[2]:2 [ sin16s_gen::i#2 sin16s_gen::i#1 print_str::str#3 print_str::str#5 print_str::str#0 ]
zp[4]:4 [ sin16s_gen::x#2 sin16s_gen::x#1 ]
zp[2]:8 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ]
zp[1]:10 [ sin16s::isUpper#2 ]
zp[2]:11 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ]
reg byte y [ sin16s::isUpper#2 ]
zp[2]:10 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 print_char_cursor#35 print_char_cursor#55 print_char_cursor#13 print_char_cursor#51 print_char_cursor#21 print_char_cursor#2 print_char_cursor#1 ]
reg byte x [ mulu16_sel::select#5 ]
zp[4]:13 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ]
zp[4]:17 [ mul16u::mb#2 mul16u::mb#1 ]
zp[2]:21 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ]
zp[2]:23 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ]
zp[4]:12 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ]
zp[2]:16 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ]
zp[2]:18 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
reg byte a [ print_byte::$0 ]
reg byte x [ print_byte::$2 ]
zp[4]:25 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ]
zp[2]:29 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
zp[4]:20 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ]
zp[4]:24 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ]
zp[2]:28 [ mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
reg byte a [ mul16u::$1 ]
zp[2]:31 [ div32u16u::quotient_hi#0 sin16s::x1#0 ]
zp[2]:30 [ div32u16u::quotient_hi#0 sin16s::x1#0 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]

View File

@ -14,13 +14,13 @@
// PI/2 in u[4.12] format
.const PI_HALF_u4f12 = $1922
.label print_line_cursor = $400
.label rem16u = 6
.label rem16u = 3
.label print_char_cursor = $1f
main: {
.label wavelength = $78
.label sw = $1d
.label st1 = 6
.label st2 = $e
.label sw = $19
.label st1 = 3
.label st2 = $b
jsr sin16s_gen
jsr sin16s_genb
jsr print_cls
@ -86,9 +86,9 @@ main: {
sintab2: .fill 2*$78, 0
}
// Print a zero-terminated string
// print_str(byte* zeropage($15) str)
// print_str(byte* zeropage($11) str)
print_str: {
.label str = $15
.label str = $11
__b1:
ldy #0
lda (str),y
@ -110,9 +110,9 @@ print_str: {
jmp __b1
}
// Print a signed word as HEX
// print_sword(signed word zeropage($1d) w)
// print_sword(signed word zeropage($19) w)
print_sword: {
.label w = $1d
.label w = $19
lda.z w+1
bmi __b1
lda #' '
@ -144,9 +144,9 @@ print_char: {
rts
}
// Print a word as HEX
// print_word(word zeropage($1d) w)
// print_word(word zeropage($19) w)
print_word: {
.label w = $1d
.label w = $19
lda.z w+1
sta.z print_byte.b
jsr print_byte
@ -156,9 +156,9 @@ print_word: {
rts
}
// Print a byte as HEX
// print_byte(byte zeropage($10) b)
// print_byte(byte zeropage(2) b)
print_byte: {
.label b = $10
.label b = 2
lda.z b
lsr
lsr
@ -185,7 +185,7 @@ memset: {
.const num = $3e8
.label str = print_line_cursor
.label end = str+num
.label dst = 6
.label dst = 3
lda #<str
sta.z dst
lda #>str
@ -211,13 +211,13 @@ memset: {
// Generate signed (large) word sinus table - on the full -$7fff - $7fff range
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_genb(signed word* zeropage($15) sintab)
// sin16s_genb(signed word* zeropage($11) sintab)
sin16s_genb: {
.label __3 = $1f
.label step = $17
.label sintab = $15
.label x = $a
.label i = $e
.label step = $13
.label sintab = $11
.label x = 7
.label i = $b
jsr div32u16u
lda #<main.sintab2
sta.z sintab
@ -282,18 +282,18 @@ sin16s_genb: {
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16sb(word zeropage($1d) x)
// sin16sb(word zeropage($19) x)
sin16sb: {
.label x = $1d
.label x = $19
.label return = $1f
.label x1 = $1d
.label x2 = 6
.label x3 = 6
.label x3_6 = $1b
.label x1 = $19
.label x2 = 3
.label x3 = 3
.label x3_6 = $17
.label usinx = $1f
.label x4 = 6
.label x5 = $1b
.label x5_128 = $1b
.label x4 = 3
.label x5 = $17
.label x5_128 = $17
.label sinx = $1f
lda.z x+1
cmp #>PI_u4f12
@ -419,14 +419,14 @@ sin16sb: {
}
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage(6) v1, word zeropage(8) v2, byte register(X) select)
// mulu16_sel(word zeropage(3) v1, word zeropage(5) v2, byte register(X) select)
mulu16_sel: {
.label __0 = $11
.label __1 = $11
.label v1 = 6
.label v2 = 8
.label return = 6
.label return_1 = $1b
.label __0 = $d
.label __1 = $d
.label v1 = 3
.label v2 = 5
.label return = 3
.label return_1 = $17
lda.z v1
sta.z mul16u.a
lda.z v1+1
@ -449,13 +449,13 @@ mulu16_sel: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($1b) a, word zeropage(8) b)
// mul16u(word zeropage($17) a, word zeropage(5) b)
mul16u: {
.label a = $1b
.label mb = 2
.label res = $11
.label b = 8
.label return = $11
.label a = $17
.label mb = $1b
.label res = $d
.label b = 5
.label return = $d
lda.z b
sta.z mb
lda.z b+1
@ -503,9 +503,9 @@ mul16u: {
// Divide unsigned 32-bit dword dividend with a 16-bit word divisor
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
.label quotient_hi = $1d
.label quotient_lo = $1b
.label return = $17
.label quotient_hi = $19
.label quotient_lo = $17
.label return = $13
lda #<PI2_u4f28>>$10
sta.z divr16u.dividend
lda #>PI2_u4f28>>$10
@ -537,12 +537,12 @@ div32u16u: {
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage(8) dividend, word zeropage(6) rem)
// divr16u(word zeropage(5) dividend, word zeropage(3) rem)
divr16u: {
.label rem = 6
.label dividend = 8
.label quotient = $1b
.label return = $1b
.label rem = 3
.label dividend = 5
.label quotient = $17
.label return = $17
ldx #0
txa
sta.z quotient
@ -590,13 +590,13 @@ divr16u: {
// Generate signed (large) word sinus table - on the full -$7fff - $7fff range
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen(signed word* zeropage($e) sintab)
// sin16s_gen(signed word* zeropage($b) sintab)
sin16s_gen: {
.label __2 = $15
.label step = $17
.label sintab = $e
.label x = $a
.label i = $1d
.label __2 = $11
.label step = $13
.label sintab = $b
.label x = 7
.label i = $19
jsr div32u16u
lda #<main.sintab1
sta.z sintab
@ -665,21 +665,20 @@ sin16s_gen: {
// Calculate signed word sinus sin(x)
// x: unsigned dword input u[4.28] in the interval $00000000 - PI2_u4f28
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16s(dword zeropage($11) x)
// sin16s(dword zeropage($d) x)
sin16s: {
.label __4 = $11
.label x = $11
.label return = $15
.label __4 = $1b
.label x = $d
.label return = $11
.label x1 = $1f
.label x2 = 6
.label x3 = 6
.label x3_6 = $1b
.label usinx = $15
.label x4 = 6
.label x5 = $1b
.label x5_128 = $1b
.label sinx = $15
.label isUpper = $10
.label x2 = 3
.label x3 = 3
.label x3_6 = $17
.label usinx = $11
.label x4 = 3
.label x5 = $17
.label x5_128 = $17
.label sinx = $11
lda.z x+3
cmp #>PI_u4f28>>$10
bcc b1
@ -709,12 +708,10 @@ sin16s: {
lda.z x+3
sbc #>PI_u4f28>>$10
sta.z x+3
lda #1
sta.z isUpper
ldy #1
jmp __b1
b1:
lda #0
sta.z isUpper
ldy #0
__b1:
lda.z x+3
cmp #>PI_HALF_u4f28>>$10
@ -746,14 +743,26 @@ sin16s: {
sbc.z x+3
sta.z x+3
__b2:
ldy #3
!:
lda.z x
asl
sta.z __4
lda.z x+1
rol
sta.z __4+1
lda.z x+2
rol
sta.z __4+2
lda.z x+3
rol
sta.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
dey
bne !-
lda.z __4+2
sta.z x1
lda.z __4+3
@ -826,8 +835,7 @@ sin16s: {
lda.z usinx+1
adc.z x5_128+1
sta.z usinx+1
lda.z isUpper
cmp #0
cpy #0
beq __b3
sec
lda #0

File diff suppressed because it is too large Load Diff

View File

@ -19,13 +19,13 @@
(word) div32u16u::divisor
(dword) div32u16u::quotient
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:29 0.8
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:25 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:27 4.0
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:23 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp[4]:23 1.5
(dword) div32u16u::return#2 return zp[4]:23 4.0
(dword) div32u16u::return#3 return zp[4]:23 4.0
(dword) div32u16u::return#0 return zp[4]:19 1.5
(dword) div32u16u::return#2 return zp[4]:19 4.0
(dword) div32u16u::return#3 return zp[4]:19 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
@ -37,30 +37,30 @@
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp[2]:8 2.75
(word) divr16u::dividend#3 dividend zp[2]:8 5.0
(word) divr16u::dividend#5 dividend zp[2]:8 2.0
(word) divr16u::dividend#0 dividend zp[2]:5 2.75
(word) divr16u::dividend#3 dividend zp[2]:5 5.0
(word) divr16u::dividend#5 dividend zp[2]:5 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp[2]:27 16.5
(word) divr16u::quotient#2 quotient zp[2]:27 11.0
(word) divr16u::quotient#3 quotient zp[2]:27 2.75
(word) divr16u::quotient#1 quotient zp[2]:23 16.5
(word) divr16u::quotient#2 quotient zp[2]:23 11.0
(word) divr16u::quotient#3 quotient zp[2]:23 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp[2]:6 8.25
(word) divr16u::rem#1 rem zp[2]:6 22.0
(word) divr16u::rem#10 rem zp[2]:6 4.0
(word) divr16u::rem#11 rem zp[2]:6 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:6 22.0
(word) divr16u::rem#4 rem zp[2]:6 4.0
(word) divr16u::rem#5 rem zp[2]:6 24.0
(word) divr16u::rem#6 rem zp[2]:6 11.0
(word) divr16u::rem#0 rem zp[2]:3 8.25
(word) divr16u::rem#1 rem zp[2]:3 22.0
(word) divr16u::rem#10 rem zp[2]:3 4.0
(word) divr16u::rem#11 rem zp[2]:3 11.666666666666666
(word) divr16u::rem#2 rem zp[2]:3 22.0
(word) divr16u::rem#4 rem zp[2]:3 4.0
(word) divr16u::rem#5 rem zp[2]:3 24.0
(word) divr16u::rem#6 rem zp[2]:3 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp[2]:27 5.285714285714286
(word) divr16u::return#2 return zp[2]:27 4.0
(word) divr16u::return#3 return zp[2]:27 4.0
(word) divr16u::return#0 return zp[2]:23 5.285714285714286
(word) divr16u::return#2 return zp[2]:23 4.0
(word) divr16u::return#3 return zp[2]:23 4.0
(void()) main()
(label) main::@1
(label) main::@2
@ -76,15 +76,15 @@
(const signed word[$78]) main::sintab1 = { fill( $78, 0) }
(const signed word[$78]) main::sintab2 = { fill( $78, 0) }
(signed word*) main::st1
(signed word*) main::st1#1 st1 zp[2]:6 5.5
(signed word*) main::st1#2 st1 zp[2]:6 3.3000000000000003
(signed word*) main::st1#1 st1 zp[2]:3 5.5
(signed word*) main::st1#2 st1 zp[2]:3 3.3000000000000003
(signed word*) main::st2
(signed word*) main::st2#1 st2 zp[2]:14 7.333333333333333
(signed word*) main::st2#2 st2 zp[2]:14 3.0
(signed word*) main::st2#1 st2 zp[2]:11 7.333333333333333
(signed word*) main::st2#2 st2 zp[2]:11 3.0
(const string) main::str = (string) " "
(const string) main::str1 = (string) " "
(signed word) main::sw
(signed word) main::sw#0 sw zp[2]:29 6.6000000000000005
(signed word) main::sw#0 sw zp[2]:25 6.6000000000000005
(const word) main::wavelength = (byte) $78
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
@ -93,8 +93,8 @@
(byte) memset::c
(const byte) memset::c#0 c = (byte) ' '
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:6 22.0
(byte*) memset::dst#2 dst zp[2]:6 14.666666666666666
(byte*) memset::dst#1 dst zp[2]:3 22.0
(byte*) memset::dst#2 dst zp[2]:3 14.666666666666666
(byte*) memset::end
(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
(word) memset::num
@ -110,70 +110,70 @@
(label) mul16u::@4
(label) mul16u::@return
(word) mul16u::a
(word) mul16u::a#0 a zp[2]:27 101.0
(word) mul16u::a#1 a zp[2]:27 1.3333333333333333
(word) mul16u::a#2 a zp[2]:27 67.66666666666666
(word) mul16u::a#0 a zp[2]:23 101.0
(word) mul16u::a#1 a zp[2]:23 1.3333333333333333
(word) mul16u::a#2 a zp[2]:23 67.66666666666666
(word) mul16u::b
(word) mul16u::b#0 b zp[2]:8 2.0
(word) mul16u::b#0 b zp[2]:5 2.0
(dword) mul16u::mb
(dword) mul16u::mb#1 mb zp[4]:2 202.0
(dword) mul16u::mb#2 mb zp[4]:2 43.57142857142858
(dword) mul16u::mb#1 mb zp[4]:27 202.0
(dword) mul16u::mb#2 mb zp[4]:27 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp[4]:17 202.0
(dword) mul16u::res#2 res zp[4]:17 50.83333333333333
(dword) mul16u::res#6 res zp[4]:17 101.0
(dword) mul16u::res#1 res zp[4]:13 202.0
(dword) mul16u::res#2 res zp[4]:13 50.83333333333333
(dword) mul16u::res#6 res zp[4]:13 101.0
(dword) mul16u::return
(dword) mul16u::return#2 return zp[4]:17 4.0
(dword) mul16u::return#2 return zp[4]:13 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 zp[4]:17 4.0
(dword~) mulu16_sel::$1 zp[4]:17 4.0
(dword~) mulu16_sel::$0 zp[4]:13 4.0
(dword~) mulu16_sel::$1 zp[4]:13 4.0
(label) mulu16_sel::@1
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp[2]:6 4.0
(word) mulu16_sel::return#1 return zp[2]:6 4.0
(word) mulu16_sel::return#10 return zp[2]:6 4.0
(word) mulu16_sel::return#11 return_1 zp[2]:27 4.0
(word) mulu16_sel::return#14 return_1 zp[2]:27 4.0
(word) mulu16_sel::return#15 return zp[2]:6 4.0
(word) mulu16_sel::return#16 return_1 zp[2]:27 4.0
(word) mulu16_sel::return#17 return_1 zp[2]:27 1.8333333333333335
(word) mulu16_sel::return#18 return_1 zp[2]:27 4.0
(word) mulu16_sel::return#19 return zp[2]:6 4.0
(word) mulu16_sel::return#20 return_1 zp[2]:27 4.0
(word) mulu16_sel::return#0 return zp[2]:3 4.0
(word) mulu16_sel::return#1 return zp[2]:3 4.0
(word) mulu16_sel::return#10 return zp[2]:3 4.0
(word) mulu16_sel::return#11 return_1 zp[2]:23 4.0
(word) mulu16_sel::return#14 return_1 zp[2]:23 4.0
(word) mulu16_sel::return#15 return zp[2]:3 4.0
(word) mulu16_sel::return#16 return_1 zp[2]:23 4.0
(word) mulu16_sel::return#17 return_1 zp[2]:23 1.8333333333333335
(word) mulu16_sel::return#18 return_1 zp[2]:23 4.0
(word) mulu16_sel::return#19 return zp[2]:3 4.0
(word) mulu16_sel::return#20 return_1 zp[2]:23 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#10 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp[2]:6 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:6 2.0
(word) mulu16_sel::v1#10 v1 zp[2]:6 22.0
(word) mulu16_sel::v1#2 v1 zp[2]:6 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:6 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:6 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:6 2.0
(word) mulu16_sel::v1#6 v1 zp[2]:6 2.0
(word) mulu16_sel::v1#7 v1 zp[2]:6 4.0
(word) mulu16_sel::v1#8 v1 zp[2]:6 2.0
(word) mulu16_sel::v1#9 v1 zp[2]:6 2.0
(word) mulu16_sel::v1#0 v1 zp[2]:3 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:3 2.0
(word) mulu16_sel::v1#10 v1 zp[2]:3 22.0
(word) mulu16_sel::v1#2 v1 zp[2]:3 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:3 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:3 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:3 2.0
(word) mulu16_sel::v1#6 v1 zp[2]:3 2.0
(word) mulu16_sel::v1#7 v1 zp[2]:3 4.0
(word) mulu16_sel::v1#8 v1 zp[2]:3 2.0
(word) mulu16_sel::v1#9 v1 zp[2]:3 2.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp[2]:8 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:8 4.0
(word) mulu16_sel::v2#10 v2 zp[2]:8 9.0
(word) mulu16_sel::v2#3 v2 zp[2]:8 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:8 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:8 4.0
(word) mulu16_sel::v2#6 v2 zp[2]:8 4.0
(word) mulu16_sel::v2#8 v2 zp[2]:8 4.0
(word) mulu16_sel::v2#9 v2 zp[2]:8 4.0
(word) mulu16_sel::v2#0 v2 zp[2]:5 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:5 4.0
(word) mulu16_sel::v2#10 v2 zp[2]:5 9.0
(word) mulu16_sel::v2#3 v2 zp[2]:5 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:5 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:5 4.0
(word) mulu16_sel::v2#6 v2 zp[2]:5 4.0
(word) mulu16_sel::v2#8 v2 zp[2]:5 4.0
(word) mulu16_sel::v2#9 v2 zp[2]:5 4.0
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(label) print_byte::@1
(label) print_byte::@return
(byte) print_byte::b
(byte) print_byte::b#0 b zp[1]:16 4.0
(byte) print_byte::b#1 b zp[1]:16 4.0
(byte) print_byte::b#2 b zp[1]:16 2.0
(byte) print_byte::b#0 b zp[1]:2 4.0
(byte) print_byte::b#1 b zp[1]:2 4.0
(byte) print_byte::b#2 b zp[1]:2 2.0
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
@ -199,9 +199,9 @@
(label) print_str::@2
(label) print_str::@return
(byte*) print_str::str
(byte*) print_str::str#0 str zp[2]:21 202.0
(byte*) print_str::str#3 str zp[2]:21 101.5
(byte*) print_str::str#5 str zp[2]:21 2.0
(byte*) print_str::str#0 str zp[2]:17 202.0
(byte*) print_str::str#3 str zp[2]:17 101.5
(byte*) print_str::str#5 str zp[2]:17 2.0
(void()) print_sword((signed word) print_sword::w)
(label) print_sword::@1
(label) print_sword::@2
@ -209,18 +209,18 @@
(label) print_sword::@4
(label) print_sword::@return
(signed word) print_sword::w
(signed word) print_sword::w#0 w zp[2]:29 4.0
(signed word) print_sword::w#1 w zp[2]:29 2.8333333333333335
(signed word) print_sword::w#4 w zp[2]:29 4.0
(signed word) print_sword::w#0 w zp[2]:25 4.0
(signed word) print_sword::w#1 w zp[2]:25 2.8333333333333335
(signed word) print_sword::w#4 w zp[2]:25 4.0
(void()) print_word((word) print_word::w)
(label) print_word::@1
(label) print_word::@return
(word) print_word::w
(word) print_word::w#0 w zp[2]:29 2.0
(word) print_word::w#0 w zp[2]:25 2.0
(word) rem16u
(word) rem16u#1 rem16u zp[2]:6 0.8
(word) rem16u#1 rem16u zp[2]:3 0.8
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 zp[4]:17 4.0
(dword~) sin16s::$4 zp[4]:27 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
@ -235,55 +235,55 @@
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp[1]:16 0.06060606060606061
(byte) sin16s::isUpper#2 reg byte y 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp[2]:21 22.0
(signed word) sin16s::return#1 return zp[2]:21 5.0
(signed word~) sin16s::return#5 return zp[2]:21 4.0
(signed word) sin16s::return#0 return zp[2]:17 22.0
(signed word) sin16s::return#1 return zp[2]:17 5.0
(signed word~) sin16s::return#5 return zp[2]:17 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp[2]:21 4.0
(signed word) sin16s::sinx#1 sinx zp[2]:17 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp[2]:21 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:21 1.0
(word) sin16s::usinx#0 usinx zp[2]:17 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:17 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp[4]:17 8.5
(dword) sin16s::x#1 x zp[4]:17 4.0
(dword) sin16s::x#2 x zp[4]:17 4.0
(dword) sin16s::x#4 x zp[4]:17 5.0
(dword) sin16s::x#6 x zp[4]:17 6.0
(dword) sin16s::x#0 x zp[4]:13 8.5
(dword) sin16s::x#1 x zp[4]:13 4.0
(dword) sin16s::x#2 x zp[4]:13 4.0
(dword) sin16s::x#4 x zp[4]:13 5.0
(dword) sin16s::x#6 x zp[4]:13 6.0
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp[2]:31 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp[2]:6 4.0
(word) sin16s::x2#0 x2 zp[2]:3 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp[2]:6 1.0
(word) sin16s::x3#0 x3 zp[2]:3 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp[2]:27 4.0
(word) sin16s::x3_6#0 x3_6 zp[2]:23 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp[2]:6 4.0
(word) sin16s::x4#0 x4 zp[2]:3 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp[2]:27 4.0
(word) sin16s::x5#0 x5 zp[2]:23 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp[2]:27 4.0
(word) sin16s::x5_128#0 x5_128 zp[2]:23 4.0
(void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength)
(signed word~) sin16s_gen::$2 zp[2]:21 22.0
(signed word~) sin16s_gen::$2 zp[2]:17 22.0
(label) sin16s_gen::@1
(label) sin16s_gen::@2
(label) sin16s_gen::@3
(label) sin16s_gen::@4
(label) sin16s_gen::@return
(word) sin16s_gen::i
(word) sin16s_gen::i#1 i zp[2]:29 22.0
(word) sin16s_gen::i#2 i zp[2]:29 3.666666666666667
(word) sin16s_gen::i#1 i zp[2]:25 22.0
(word) sin16s_gen::i#2 i zp[2]:25 3.666666666666667
(signed word*) sin16s_gen::sintab
(signed word*) sin16s_gen::sintab#0 sintab zp[2]:14 7.333333333333333
(signed word*) sin16s_gen::sintab#2 sintab zp[2]:14 4.714285714285714
(signed word*) sin16s_gen::sintab#0 sintab zp[2]:11 7.333333333333333
(signed word*) sin16s_gen::sintab#2 sintab zp[2]:11 4.714285714285714
(dword) sin16s_gen::step
(dword) sin16s_gen::step#0 step zp[4]:23 1.1818181818181819
(dword) sin16s_gen::step#0 step zp[4]:19 1.1818181818181819
(word) sin16s_gen::wavelength
(dword) sin16s_gen::x
(dword) sin16s_gen::x#1 x zp[4]:10 11.0
(dword) sin16s_gen::x#2 x zp[4]:10 4.125
(dword) sin16s_gen::x#1 x zp[4]:7 11.0
(dword) sin16s_gen::x#2 x zp[4]:7 4.125
(void()) sin16s_genb((signed word*) sin16s_genb::sintab , (word) sin16s_genb::wavelength)
(signed word~) sin16s_genb::$3 zp[2]:31 22.0
(label) sin16s_genb::@1
@ -292,17 +292,17 @@
(label) sin16s_genb::@4
(label) sin16s_genb::@return
(word) sin16s_genb::i
(word) sin16s_genb::i#1 i zp[2]:14 22.0
(word) sin16s_genb::i#2 i zp[2]:14 3.666666666666667
(word) sin16s_genb::i#1 i zp[2]:11 22.0
(word) sin16s_genb::i#2 i zp[2]:11 3.666666666666667
(signed word*) sin16s_genb::sintab
(signed word*) sin16s_genb::sintab#0 sintab zp[2]:21 7.333333333333333
(signed word*) sin16s_genb::sintab#2 sintab zp[2]:21 4.714285714285714
(signed word*) sin16s_genb::sintab#0 sintab zp[2]:17 7.333333333333333
(signed word*) sin16s_genb::sintab#2 sintab zp[2]:17 4.714285714285714
(dword) sin16s_genb::step
(dword) sin16s_genb::step#0 step zp[4]:23 1.1818181818181819
(dword) sin16s_genb::step#0 step zp[4]:19 1.1818181818181819
(word) sin16s_genb::wavelength
(dword) sin16s_genb::x
(dword) sin16s_genb::x#1 x zp[4]:10 11.0
(dword) sin16s_genb::x#2 x zp[4]:10 4.125
(dword) sin16s_genb::x#1 x zp[4]:7 11.0
(dword) sin16s_genb::x#2 x zp[4]:7 4.125
(signed word()) sin16sb((word) sin16sb::x)
(label) sin16sb::@1
(label) sin16sb::@10
@ -329,45 +329,46 @@
(word) sin16sb::usinx#0 usinx zp[2]:31 0.3333333333333333
(word) sin16sb::usinx#1 usinx zp[2]:31 1.0
(word) sin16sb::x
(word) sin16sb::x#0 x zp[2]:29 8.5
(word) sin16sb::x#1 x zp[2]:29 4.0
(word) sin16sb::x#2 x zp[2]:29 4.0
(word) sin16sb::x#4 x zp[2]:29 5.0
(word) sin16sb::x#6 x zp[2]:29 6.0
(word) sin16sb::x#0 x zp[2]:25 8.5
(word) sin16sb::x#1 x zp[2]:25 4.0
(word) sin16sb::x#2 x zp[2]:25 4.0
(word) sin16sb::x#4 x zp[2]:25 5.0
(word) sin16sb::x#6 x zp[2]:25 6.0
(word) sin16sb::x1
(word) sin16sb::x1#0 x1 zp[2]:29 0.6363636363636365
(word) sin16sb::x1#0 x1 zp[2]:25 0.6363636363636365
(word) sin16sb::x2
(word) sin16sb::x2#0 x2 zp[2]:6 4.0
(word) sin16sb::x2#0 x2 zp[2]:3 4.0
(word) sin16sb::x3
(word) sin16sb::x3#0 x3 zp[2]:6 1.0
(word) sin16sb::x3#0 x3 zp[2]:3 1.0
(word) sin16sb::x3_6
(word) sin16sb::x3_6#0 x3_6 zp[2]:27 4.0
(word) sin16sb::x3_6#0 x3_6 zp[2]:23 4.0
(word) sin16sb::x4
(word) sin16sb::x4#0 x4 zp[2]:6 4.0
(word) sin16sb::x4#0 x4 zp[2]:3 4.0
(word) sin16sb::x5
(word) sin16sb::x5#0 x5 zp[2]:27 4.0
(word) sin16sb::x5#0 x5 zp[2]:23 4.0
(word) sin16sb::x5_128
(word) sin16sb::x5_128#0 x5_128 zp[2]:27 4.0
(word) sin16sb::x5_128#0 x5_128 zp[2]:23 4.0
reg byte x [ main::i#2 main::i#1 ]
reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
zp[1]:2 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
reg byte y [ sin16sb::isUpper#2 ]
reg byte x [ mulu16_sel::select#10 ]
zp[4]:2 [ mul16u::mb#2 mul16u::mb#1 ]
zp[2]:6 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ]
zp[2]:8 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mul16u::b#0 ]
zp[2]:3 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#10 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#8 mulu16_sel::v1#9 mulu16_sel::v1#5 mulu16_sel::v1#6 mulu16_sel::v1#7 sin16sb::x3#0 sin16s::x3#0 sin16sb::x2#0 sin16sb::x4#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#19 mulu16_sel::return#10 mulu16_sel::return#0 mulu16_sel::return#1 mulu16_sel::return#15 memset::dst#2 memset::dst#1 main::st1#2 main::st1#1 ]
zp[2]:5 [ divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 mulu16_sel::v2#10 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#8 mulu16_sel::v2#9 mulu16_sel::v2#5 mulu16_sel::v2#6 mul16u::b#0 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp[4]:10 [ sin16s_gen::x#2 sin16s_gen::x#1 sin16s_genb::x#2 sin16s_genb::x#1 ]
zp[2]:14 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 sin16s_genb::i#2 sin16s_genb::i#1 main::st2#2 main::st2#1 ]
zp[1]:16 [ sin16s::isUpper#2 print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
zp[4]:17 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ]
zp[2]:21 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 sin16s_genb::sintab#2 sin16s_genb::sintab#0 print_str::str#3 print_str::str#5 print_str::str#0 ]
zp[4]:7 [ sin16s_gen::x#2 sin16s_gen::x#1 sin16s_genb::x#2 sin16s_genb::x#1 ]
zp[2]:11 [ sin16s_gen::sintab#2 sin16s_gen::sintab#0 sin16s_genb::i#2 sin16s_genb::i#1 main::st2#2 main::st2#1 ]
reg byte y [ sin16s::isUpper#2 ]
zp[4]:13 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 ]
zp[2]:17 [ sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 sin16s_genb::sintab#2 sin16s_genb::sintab#0 print_str::str#3 print_str::str#5 print_str::str#0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
zp[4]:23 [ div32u16u::return#3 sin16s_genb::step#0 div32u16u::return#0 div32u16u::return#2 sin16s_gen::step#0 ]
zp[2]:27 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
zp[4]:19 [ div32u16u::return#3 sin16s_genb::step#0 div32u16u::return#0 div32u16u::return#2 sin16s_gen::step#0 ]
zp[2]:23 [ mulu16_sel::return#18 mulu16_sel::return#17 mulu16_sel::return#20 sin16sb::x3_6#0 mulu16_sel::return#11 sin16sb::x5#0 mulu16_sel::return#14 sin16s::x3_6#0 mulu16_sel::return#16 sin16s::x5#0 sin16sb::x5_128#0 sin16s::x5_128#0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 mul16u::a#2 mul16u::a#1 mul16u::a#0 ]
reg byte a [ mul16u::$1 ]
zp[2]:29 [ div32u16u::quotient_hi#0 sin16s_gen::i#2 sin16s_gen::i#1 sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ]
zp[2]:25 [ div32u16u::quotient_hi#0 sin16s_gen::i#2 sin16s_gen::i#1 sin16sb::x#6 sin16sb::x#4 sin16sb::x#0 sin16sb::x#1 sin16sb::x#2 sin16sb::x1#0 print_sword::w#4 print_sword::w#0 print_sword::w#1 main::sw#0 print_word::w#0 ]
reg byte a [ divr16u::$1 ]
reg byte a [ divr16u::$2 ]
zp[4]:27 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ]
zp[2]:31 [ sin16s::x1#0 sin16sb::return#1 sin16sb::return#5 sin16sb::sinx#1 sin16sb::usinx#1 sin16sb::return#0 sin16s_genb::$3 sin16sb::usinx#0 print_char_cursor#35 print_char_cursor#54 print_char_cursor#51 print_char_cursor#52 print_char_cursor#2 print_char_cursor#13 print_char_cursor#1 ]

View File

@ -15,15 +15,15 @@
// PI/2 in u[4.12] format
.const PI_HALF_u4f12 = $1922
.label print_line_cursor = $400
.label rem16u = $e
.label print_char_cursor = $15
.label rem16u = $a
.label print_char_cursor = $11
main: {
.label wavelength = $c0
.label __3 = $18
.label __4 = $18
.label __11 = $18
.label sb = $17
.label sw = $18
.label __3 = $14
.label __4 = $14
.label __11 = $14
.label sb = $13
.label sw = $14
jsr sin8s_gen
jsr sin16s_gen
jsr print_cls
@ -73,9 +73,9 @@ main: {
sintabw: .fill 2*$c0, 0
}
// Print a zero-terminated string
// print_str(byte* zeropage($e) str)
// print_str(byte* zeropage($a) str)
print_str: {
.label str = $e
.label str = $a
lda #<main.str
sta.z str
lda #>main.str
@ -101,9 +101,9 @@ print_str: {
jmp __b1
}
// Print a signed byte as HEX
// print_sbyte(signed byte zeropage($14) b)
// print_sbyte(signed byte zeropage($10) b)
print_sbyte: {
.label b = $14
.label b = $10
lda.z b
bmi __b1
lda #' '
@ -133,9 +133,9 @@ print_char: {
rts
}
// Print a byte as HEX
// print_byte(byte zeropage($14) b)
// print_byte(byte zeropage($10) b)
print_byte: {
.label b = $14
.label b = $10
lda.z b
lsr
lsr
@ -162,7 +162,7 @@ memset: {
.const num = $3e8
.label str = print_line_cursor
.label end = str+num
.label dst = $e
.label dst = $a
lda #<str
sta.z dst
lda #>str
@ -188,13 +188,13 @@ memset: {
// Generate signed (large) word sinus table - on the full -$7fff - $7fff range
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin16s_gen(signed word* zeropage($e) sintab)
// sin16s_gen(signed word* zeropage($a) sintab)
sin16s_gen: {
.label __2 = $18
.label step = $1a
.label sintab = $e
.label __2 = $14
.label step = $16
.label sintab = $a
.label x = 2
.label i = $15
.label i = $11
jsr div32u16u
lda #<main.sintabw
sta.z sintab
@ -265,19 +265,18 @@ sin16s_gen: {
// result: signed word sin(x) s[0.15] - using the full range -$7fff - $7fff
// sin16s(dword zeropage(6) x)
sin16s: {
.label __4 = 6
.label __4 = $1a
.label x = 6
.label return = $18
.label return = $14
.label x1 = $1e
.label x2 = $10
.label x3 = $10
.label x2 = $c
.label x3 = $c
.label x3_6 = $20
.label usinx = $18
.label x4 = $10
.label usinx = $14
.label x4 = $c
.label x5 = $20
.label x5_128 = $20
.label sinx = $18
.label isUpper = $14
.label sinx = $14
lda.z x+3
cmp #>PI_u4f28>>$10
bcc b1
@ -307,12 +306,10 @@ sin16s: {
lda.z x+3
sbc #>PI_u4f28>>$10
sta.z x+3
lda #1
sta.z isUpper
ldy #1
jmp __b1
b1:
lda #0
sta.z isUpper
ldy #0
__b1:
lda.z x+3
cmp #>PI_HALF_u4f28>>$10
@ -344,14 +341,26 @@ sin16s: {
sbc.z x+3
sta.z x+3
__b2:
ldy #3
!:
lda.z x
asl
sta.z __4
lda.z x+1
rol
sta.z __4+1
lda.z x+2
rol
sta.z __4+2
lda.z x+3
rol
sta.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
asl.z __4
rol.z __4+1
rol.z __4+2
rol.z __4+3
dey
bne !-
lda.z __4+2
sta.z x1
lda.z __4+3
@ -424,8 +433,7 @@ sin16s: {
lda.z usinx+1
adc.z x5_128+1
sta.z usinx+1
lda.z isUpper
cmp #0
cpy #0
beq __b3
sec
lda #0
@ -439,14 +447,14 @@ sin16s: {
}
// Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result.
// The select parameter indicates how many of the highest bits of the 32-bit result to skip
// mulu16_sel(word zeropage($10) v1, word zeropage($12) v2, byte register(X) select)
// mulu16_sel(word zeropage($c) v1, word zeropage($e) v2, byte register(X) select)
mulu16_sel: {
.label __0 = 6
.label __1 = 6
.label v1 = $10
.label v2 = $12
.label v1 = $c
.label v2 = $e
.label return = $20
.label return_1 = $10
.label return_1 = $c
lda.z v1
sta.z mul16u.a
lda.z v1+1
@ -469,12 +477,12 @@ mulu16_sel: {
rts
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
// mul16u(word zeropage($20) a, word zeropage($12) b)
// mul16u(word zeropage($20) a, word zeropage($e) b)
mul16u: {
.label a = $20
.label mb = $a
.label mb = $1a
.label res = 6
.label b = $12
.label b = $e
.label return = 6
lda.z b
sta.z mb
@ -524,8 +532,8 @@ mul16u: {
// The 16-bit word remainder can be found in rem16u after the division
div32u16u: {
.label quotient_hi = $20
.label quotient_lo = $10
.label return = $1a
.label quotient_lo = $c
.label return = $16
lda #<PI2_u4f28>>$10
sta.z divr16u.dividend
lda #>PI2_u4f28>>$10
@ -557,12 +565,12 @@ div32u16u: {
// Returns the quotient dividend/divisor.
// The final remainder will be set into the global variable rem16u
// Implemented using simple binary division
// divr16u(word zeropage($18) dividend, word zeropage($e) rem)
// divr16u(word zeropage($14) dividend, word zeropage($a) rem)
divr16u: {
.label rem = $e
.label dividend = $18
.label quotient = $10
.label return = $10
.label rem = $a
.label dividend = $14
.label quotient = $c
.label return = $c
ldx #0
txa
sta.z quotient
@ -610,12 +618,12 @@ divr16u: {
// Generate signed byte sinus table - on the full -$7f - $7f range
// sintab - the table to generate into
// wavelength - the number of sinus points in a total sinus wavelength (the size of the table)
// sin8s_gen(signed byte* zeropage($18) sintab)
// sin8s_gen(signed byte* zeropage($14) sintab)
sin8s_gen: {
.label step = $10
.label sintab = $18
.label step = $c
.label sintab = $14
.label x = $20
.label i = $12
.label i = $e
jsr div16u
lda #<main.sintabb
sta.z sintab
@ -665,16 +673,16 @@ sin8s_gen: {
// Calculate signed byte sinus sin(x)
// x: unsigned word input u[4.12] in the interval $0000 - PI2_u4f12
// result: signed byte sin(x) s[0.7] - using the full range -$7f - $7f
// sin8s(word zeropage($15) x)
// sin8s(word zeropage($11) x)
sin8s: {
// u[2.6] x^3
.const DIV_6 = $2b
.label __4 = $15
.label x = $15
.label __4 = $11
.label x = $11
.label x1 = $22
.label x3 = $23
.label usinx = $24
.label isUpper = $17
.label isUpper = $10
lda.z x+1
cmp #>PI_u4f12
bcc b1
@ -776,11 +784,11 @@ sin8s: {
}
// Calculate val*val for two unsigned byte values - the result is 8 selected bits of the 16-bit result.
// The select parameter indicates how many of the highest bits of the 16-bit result to skip
// mulu8_sel(byte register(X) v1, byte register(Y) v2, byte zeropage($14) select)
// mulu8_sel(byte register(X) v1, byte register(Y) v2, byte zeropage($13) select)
mulu8_sel: {
.label __0 = $15
.label __1 = $15
.label select = $14
.label __0 = $11
.label __1 = $11
.label select = $13
tya
jsr mul8u
ldy.z select
@ -798,8 +806,8 @@ mulu8_sel: {
// mul8u(byte register(X) a, byte register(A) b)
mul8u: {
.label mb = $1e
.label res = $15
.label return = $15
.label res = $11
.label return = $11
sta.z mb
lda #0
sta.z mb+1
@ -834,7 +842,7 @@ mul8u: {
// The remainder will be set into the global variable rem16u
// Implemented using simple binary division
div16u: {
.label return = $10
.label return = $c
lda #<PI2_u4f12
sta.z divr16u.dividend
lda #>PI2_u4f12

File diff suppressed because it is too large Load Diff

View File

@ -18,8 +18,8 @@
(word) div16u::dividend
(word) div16u::divisor
(word) div16u::return
(word) div16u::return#0 return zp[2]:16 1.3333333333333333
(word) div16u::return#2 return zp[2]:16 4.0
(word) div16u::return#0 return zp[2]:12 1.3333333333333333
(word) div16u::return#2 return zp[2]:12 4.0
(dword()) div32u16u((dword) div32u16u::dividend , (word) div32u16u::divisor)
(label) div32u16u::@1
(label) div32u16u::@2
@ -30,10 +30,10 @@
(word) div32u16u::quotient_hi
(word) div32u16u::quotient_hi#0 quotient_hi zp[2]:32 0.8
(word) div32u16u::quotient_lo
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:16 4.0
(word) div32u16u::quotient_lo#0 quotient_lo zp[2]:12 4.0
(dword) div32u16u::return
(dword) div32u16u::return#0 return zp[4]:26 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:26 4.0
(dword) div32u16u::return#0 return zp[4]:22 1.3333333333333333
(dword) div32u16u::return#2 return zp[4]:22 4.0
(word()) divr16u((word) divr16u::dividend , (word) divr16u::divisor , (word) divr16u::rem)
(byte~) divr16u::$1 reg byte a 22.0
(byte~) divr16u::$2 reg byte a 22.0
@ -45,35 +45,35 @@
(label) divr16u::@6
(label) divr16u::@return
(word) divr16u::dividend
(word) divr16u::dividend#0 dividend zp[2]:24 2.75
(word) divr16u::dividend#4 dividend zp[2]:24 5.0
(word) divr16u::dividend#6 dividend zp[2]:24 2.0
(word) divr16u::dividend#0 dividend zp[2]:20 2.75
(word) divr16u::dividend#4 dividend zp[2]:20 5.0
(word) divr16u::dividend#6 dividend zp[2]:20 2.0
(word) divr16u::divisor
(byte) divr16u::i
(byte) divr16u::i#1 reg byte x 16.5
(byte) divr16u::i#2 reg byte x 1.6923076923076923
(word) divr16u::quotient
(word) divr16u::quotient#1 quotient zp[2]:16 16.5
(word) divr16u::quotient#2 quotient zp[2]:16 11.0
(word) divr16u::quotient#3 quotient zp[2]:16 2.75
(word) divr16u::quotient#1 quotient zp[2]:12 16.5
(word) divr16u::quotient#2 quotient zp[2]:12 11.0
(word) divr16u::quotient#3 quotient zp[2]:12 2.75
(word) divr16u::rem
(word) divr16u::rem#0 rem zp[2]:14 8.25
(word) divr16u::rem#1 rem zp[2]:14 22.0
(word) divr16u::rem#10 rem zp[2]:14 11.666666666666666
(word) divr16u::rem#11 rem zp[2]:14 4.0
(word) divr16u::rem#2 rem zp[2]:14 22.0
(word) divr16u::rem#5 rem zp[2]:14 4.0
(word) divr16u::rem#6 rem zp[2]:14 24.0
(word) divr16u::rem#7 rem zp[2]:14 11.0
(word) divr16u::rem#0 rem zp[2]:10 8.25
(word) divr16u::rem#1 rem zp[2]:10 22.0
(word) divr16u::rem#10 rem zp[2]:10 11.666666666666666
(word) divr16u::rem#11 rem zp[2]:10 4.0
(word) divr16u::rem#2 rem zp[2]:10 22.0
(word) divr16u::rem#5 rem zp[2]:10 4.0
(word) divr16u::rem#6 rem zp[2]:10 24.0
(word) divr16u::rem#7 rem zp[2]:10 11.0
(word) divr16u::return
(word) divr16u::return#0 return zp[2]:16 4.875
(word) divr16u::return#2 return zp[2]:16 4.0
(word) divr16u::return#3 return zp[2]:16 4.0
(word) divr16u::return#4 return zp[2]:16 4.0
(word) divr16u::return#0 return zp[2]:12 4.875
(word) divr16u::return#2 return zp[2]:12 4.0
(word) divr16u::return#3 return zp[2]:12 4.0
(word) divr16u::return#4 return zp[2]:12 4.0
(void()) main()
(word~) main::$11 zp[2]:24 22.0
(word~) main::$3 zp[2]:24 22.0
(signed word*~) main::$4 zp[2]:24 22.0
(word~) main::$11 zp[2]:20 22.0
(word~) main::$3 zp[2]:20 22.0
(signed word*~) main::$4 zp[2]:20 22.0
(byte~) main::$6 reg byte a 11.0
(label) main::@1
(label) main::@2
@ -85,14 +85,14 @@
(byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 2.75
(signed byte) main::sb
(signed byte) main::sb#0 sb zp[1]:23 3.6666666666666665
(signed byte) main::sb#0 sb zp[1]:19 3.6666666666666665
(signed byte) main::sd
(signed byte) main::sd#0 reg byte a 22.0
(const signed byte[$c0]) main::sintabb = { fill( $c0, 0) }
(const signed word[$c0]) main::sintabw = { fill( $c0, 0) }
(const string) main::str = (string) " "
(signed word) main::sw
(signed word) main::sw#0 sw zp[2]:24 22.0
(signed word) main::sw#0 sw zp[2]:20 22.0
(const word) main::wavelength = (byte) $c0
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
@ -101,8 +101,8 @@
(byte) memset::c
(const byte) memset::c#0 c = (byte) ' '
(byte*) memset::dst
(byte*) memset::dst#1 dst zp[2]:14 22.0
(byte*) memset::dst#2 dst zp[2]:14 14.666666666666666
(byte*) memset::dst#1 dst zp[2]:10 22.0
(byte*) memset::dst#2 dst zp[2]:10 14.666666666666666
(byte*) memset::end
(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
(word) memset::num
@ -122,10 +122,10 @@
(word) mul16u::a#1 a zp[2]:32 1.3333333333333333
(word) mul16u::a#2 a zp[2]:32 67.66666666666666
(word) mul16u::b
(word) mul16u::b#0 b zp[2]:18 2.0
(word) mul16u::b#0 b zp[2]:14 2.0
(dword) mul16u::mb
(dword) mul16u::mb#1 mb zp[4]:10 202.0
(dword) mul16u::mb#2 mb zp[4]:10 43.57142857142858
(dword) mul16u::mb#1 mb zp[4]:26 202.0
(dword) mul16u::mb#2 mb zp[4]:26 43.57142857142858
(dword) mul16u::res
(dword) mul16u::res#1 res zp[4]:6 202.0
(dword) mul16u::res#2 res zp[4]:6 50.83333333333333
@ -149,11 +149,11 @@
(word) mul8u::mb#1 mb zp[2]:30 202.0
(word) mul8u::mb#2 mb zp[2]:30 43.57142857142858
(word) mul8u::res
(word) mul8u::res#1 res zp[2]:21 202.0
(word) mul8u::res#2 res zp[2]:21 50.83333333333333
(word) mul8u::res#6 res zp[2]:21 101.0
(word) mul8u::res#1 res zp[2]:17 202.0
(word) mul8u::res#2 res zp[2]:17 50.83333333333333
(word) mul8u::res#6 res zp[2]:17 101.0
(word) mul8u::return
(word) mul8u::return#2 return zp[2]:21 4.0
(word) mul8u::return#2 return zp[2]:17 4.0
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
(dword~) mulu16_sel::$0 zp[4]:6 4.0
(dword~) mulu16_sel::$1 zp[4]:6 4.0
@ -161,29 +161,29 @@
(label) mulu16_sel::@return
(word) mulu16_sel::return
(word) mulu16_sel::return#0 return zp[2]:32 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:16 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:16 4.0
(word) mulu16_sel::return#1 return_1 zp[2]:12 4.0
(word) mulu16_sel::return#10 return_1 zp[2]:12 4.0
(word) mulu16_sel::return#11 return zp[2]:32 4.0
(word) mulu16_sel::return#12 return zp[2]:32 1.714285714285714
(word) mulu16_sel::return#2 return zp[2]:32 4.0
(byte) mulu16_sel::select
(byte) mulu16_sel::select#5 reg byte x 0.3333333333333333
(word) mulu16_sel::v1
(word) mulu16_sel::v1#0 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:16 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:16 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:16 12.0
(word) mulu16_sel::v1#0 v1 zp[2]:12 2.0
(word) mulu16_sel::v1#1 v1 zp[2]:12 2.0
(word) mulu16_sel::v1#2 v1 zp[2]:12 4.0
(word) mulu16_sel::v1#3 v1 zp[2]:12 2.0
(word) mulu16_sel::v1#4 v1 zp[2]:12 2.0
(word) mulu16_sel::v1#5 v1 zp[2]:12 12.0
(word) mulu16_sel::v2
(word) mulu16_sel::v2#0 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:18 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:18 5.0
(word) mulu16_sel::v2#0 v2 zp[2]:14 4.0
(word) mulu16_sel::v2#1 v2 zp[2]:14 4.0
(word) mulu16_sel::v2#3 v2 zp[2]:14 4.0
(word) mulu16_sel::v2#4 v2 zp[2]:14 4.0
(word) mulu16_sel::v2#5 v2 zp[2]:14 5.0
(byte()) mulu8_sel((byte) mulu8_sel::v1 , (byte) mulu8_sel::v2 , (byte) mulu8_sel::select)
(word~) mulu8_sel::$0 zp[2]:21 4.0
(word~) mulu8_sel::$1 zp[2]:21 4.0
(word~) mulu8_sel::$0 zp[2]:17 4.0
(word~) mulu8_sel::$1 zp[2]:17 4.0
(label) mulu8_sel::@1
(label) mulu8_sel::@return
(byte) mulu8_sel::return
@ -194,7 +194,7 @@
(byte) mulu8_sel::return#12 reg byte a 1.714285714285714
(byte) mulu8_sel::return#2 reg byte a 4.0
(byte) mulu8_sel::select
(byte) mulu8_sel::select#5 select zp[1]:20 0.3333333333333333
(byte) mulu8_sel::select#5 select zp[1]:19 0.3333333333333333
(byte) mulu8_sel::v1
(byte) mulu8_sel::v1#0 reg byte x 2.0
(byte) mulu8_sel::v1#1 reg byte x 2.0
@ -214,7 +214,7 @@
(label) print_byte::@1
(label) print_byte::@return
(byte) print_byte::b
(byte) print_byte::b#0 b zp[1]:20 1.5
(byte) print_byte::b#0 b zp[1]:16 1.5
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
@ -222,11 +222,11 @@
(byte) print_char::ch#3 reg byte a 4.0
(byte) print_char::ch#4 reg byte a 6.0
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp[2]:21 101.0
(byte*) print_char_cursor#10 print_char_cursor zp[2]:21 0.42105263157894735
(byte*) print_char_cursor#19 print_char_cursor zp[2]:21 45.142857142857146
(byte*) print_char_cursor#28 print_char_cursor zp[2]:21 6.0
(byte*) print_char_cursor#42 print_char_cursor zp[2]:21 1.25
(byte*) print_char_cursor#1 print_char_cursor zp[2]:17 101.0
(byte*) print_char_cursor#10 print_char_cursor zp[2]:17 0.42105263157894735
(byte*) print_char_cursor#19 print_char_cursor zp[2]:17 45.142857142857146
(byte*) print_char_cursor#28 print_char_cursor zp[2]:17 6.0
(byte*) print_char_cursor#42 print_char_cursor zp[2]:17 1.25
(void()) print_cls()
(label) print_cls::@return
(const byte[]) print_hextab = (string) "0123456789abcdef"z
@ -239,21 +239,21 @@
(label) print_sbyte::@4
(label) print_sbyte::@return
(signed byte) print_sbyte::b
(signed byte) print_sbyte::b#0 b zp[1]:20 4.0
(signed byte) print_sbyte::b#1 b zp[1]:20 2.8333333333333335
(signed byte) print_sbyte::b#4 b zp[1]:20 4.0
(signed byte) print_sbyte::b#0 b zp[1]:16 4.0
(signed byte) print_sbyte::b#1 b zp[1]:16 2.8333333333333335
(signed byte) print_sbyte::b#4 b zp[1]:16 4.0
(byte*) print_screen
(void()) print_str((byte*) print_str::str)
(label) print_str::@1
(label) print_str::@2
(label) print_str::@return
(byte*) print_str::str
(byte*) print_str::str#0 str zp[2]:14 202.0
(byte*) print_str::str#2 str zp[2]:14 101.0
(byte*) print_str::str#0 str zp[2]:10 202.0
(byte*) print_str::str#2 str zp[2]:10 101.0
(word) rem16u
(word) rem16u#1 rem16u zp[2]:14 0.8
(word) rem16u#1 rem16u zp[2]:10 0.8
(signed word()) sin16s((dword) sin16s::x)
(dword~) sin16s::$4 zp[4]:6 4.0
(dword~) sin16s::$4 zp[4]:26 4.0
(label) sin16s::@1
(label) sin16s::@10
(label) sin16s::@11
@ -268,16 +268,16 @@
(label) sin16s::@9
(label) sin16s::@return
(byte) sin16s::isUpper
(byte) sin16s::isUpper#2 isUpper zp[1]:20 0.06060606060606061
(byte) sin16s::isUpper#2 reg byte y 0.06060606060606061
(signed word) sin16s::return
(signed word) sin16s::return#0 return zp[2]:24 22.0
(signed word) sin16s::return#1 return zp[2]:24 5.0
(signed word~) sin16s::return#5 return zp[2]:24 4.0
(signed word) sin16s::return#0 return zp[2]:20 22.0
(signed word) sin16s::return#1 return zp[2]:20 5.0
(signed word~) sin16s::return#5 return zp[2]:20 4.0
(signed word) sin16s::sinx
(signed word) sin16s::sinx#1 sinx zp[2]:24 4.0
(signed word) sin16s::sinx#1 sinx zp[2]:20 4.0
(word) sin16s::usinx
(word) sin16s::usinx#0 usinx zp[2]:24 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:24 1.0
(word) sin16s::usinx#0 usinx zp[2]:20 0.3333333333333333
(word) sin16s::usinx#1 usinx zp[2]:20 1.0
(dword) sin16s::x
(dword) sin16s::x#0 x zp[4]:6 8.5
(dword) sin16s::x#1 x zp[4]:6 4.0
@ -287,38 +287,38 @@
(word) sin16s::x1
(word) sin16s::x1#0 x1 zp[2]:30 0.6363636363636365
(word) sin16s::x2
(word) sin16s::x2#0 x2 zp[2]:16 4.0
(word) sin16s::x2#0 x2 zp[2]:12 4.0
(word) sin16s::x3
(word) sin16s::x3#0 x3 zp[2]:16 1.0
(word) sin16s::x3#0 x3 zp[2]:12 1.0
(word) sin16s::x3_6
(word) sin16s::x3_6#0 x3_6 zp[2]:32 4.0
(word) sin16s::x4
(word) sin16s::x4#0 x4 zp[2]:16 4.0
(word) sin16s::x4#0 x4 zp[2]:12 4.0
(word) sin16s::x5
(word) sin16s::x5#0 x5 zp[2]:32 4.0
(word) sin16s::x5_128
(word) sin16s::x5_128#0 x5_128 zp[2]:32 4.0
(void()) sin16s_gen((signed word*) sin16s_gen::sintab , (word) sin16s_gen::wavelength)
(signed word~) sin16s_gen::$2 zp[2]:24 22.0
(signed word~) sin16s_gen::$2 zp[2]:20 22.0
(label) sin16s_gen::@1
(label) sin16s_gen::@2
(label) sin16s_gen::@3
(label) sin16s_gen::@4
(label) sin16s_gen::@return
(word) sin16s_gen::i
(word) sin16s_gen::i#1 i zp[2]:21 22.0
(word) sin16s_gen::i#2 i zp[2]:21 3.666666666666667
(word) sin16s_gen::i#1 i zp[2]:17 22.0
(word) sin16s_gen::i#2 i zp[2]:17 3.666666666666667
(signed word*) sin16s_gen::sintab
(signed word*) sin16s_gen::sintab#0 sintab zp[2]:14 7.333333333333333
(signed word*) sin16s_gen::sintab#2 sintab zp[2]:14 4.714285714285714
(signed word*) sin16s_gen::sintab#0 sintab zp[2]:10 7.333333333333333
(signed word*) sin16s_gen::sintab#2 sintab zp[2]:10 4.714285714285714
(dword) sin16s_gen::step
(dword) sin16s_gen::step#0 step zp[4]:26 1.1818181818181819
(dword) sin16s_gen::step#0 step zp[4]:22 1.1818181818181819
(word) sin16s_gen::wavelength
(dword) sin16s_gen::x
(dword) sin16s_gen::x#1 x zp[4]:2 11.0
(dword) sin16s_gen::x#2 x zp[4]:2 4.125
(signed byte()) sin8s((word) sin8s::x)
(word~) sin8s::$4 zp[2]:21 4.0
(word~) sin8s::$4 zp[2]:17 4.0
(label) sin8s::@1
(label) sin8s::@10
(label) sin8s::@11
@ -336,7 +336,7 @@
(label) sin8s::@return
(const byte) sin8s::DIV_6 = (byte) $2b
(byte) sin8s::isUpper
(byte) sin8s::isUpper#10 isUpper zp[1]:23 0.05555555555555555
(byte) sin8s::isUpper#10 isUpper zp[1]:16 0.05555555555555555
(signed byte) sin8s::return
(signed byte) sin8s::return#0 reg byte a 22.0
(signed byte) sin8s::return#1 reg byte a 5.0
@ -349,11 +349,11 @@
(byte) sin8s::usinx#2 reg byte x 4.0
(byte) sin8s::usinx#4 reg byte x 2.0
(word) sin8s::x
(word) sin8s::x#0 x zp[2]:21 8.5
(word) sin8s::x#1 x zp[2]:21 4.0
(word) sin8s::x#2 x zp[2]:21 4.0
(word) sin8s::x#4 x zp[2]:21 5.0
(word) sin8s::x#6 x zp[2]:21 6.0
(word) sin8s::x#0 x zp[2]:17 8.5
(word) sin8s::x#1 x zp[2]:17 4.0
(word) sin8s::x#2 x zp[2]:17 4.0
(word) sin8s::x#4 x zp[2]:17 5.0
(word) sin8s::x#6 x zp[2]:17 6.0
(byte) sin8s::x1
(byte) sin8s::x1#0 x1 zp[1]:34 0.6363636363636365
(byte) sin8s::x2
@ -376,13 +376,13 @@
(label) sin8s_gen::@4
(label) sin8s_gen::@return
(word) sin8s_gen::i
(word) sin8s_gen::i#1 i zp[2]:18 22.0
(word) sin8s_gen::i#2 i zp[2]:18 3.666666666666667
(word) sin8s_gen::i#1 i zp[2]:14 22.0
(word) sin8s_gen::i#2 i zp[2]:14 3.666666666666667
(signed byte*) sin8s_gen::sintab
(signed byte*) sin8s_gen::sintab#0 sintab zp[2]:24 7.333333333333333
(signed byte*) sin8s_gen::sintab#2 sintab zp[2]:24 4.714285714285714
(signed byte*) sin8s_gen::sintab#0 sintab zp[2]:20 7.333333333333333
(signed byte*) sin8s_gen::sintab#2 sintab zp[2]:20 4.714285714285714
(word) sin8s_gen::step
(word) sin8s_gen::step#0 step zp[2]:16 1.1818181818181819
(word) sin8s_gen::step#0 step zp[2]:12 1.1818181818181819
(word) sin8s_gen::wavelength
(word) sin8s_gen::x
(word) sin8s_gen::x#1 x zp[2]:32 11.0
@ -391,28 +391,29 @@
reg byte x [ main::i#2 main::i#1 ]
reg byte a [ print_char::ch#4 print_char::ch#2 print_char::ch#3 ]
zp[4]:2 [ sin16s_gen::x#2 sin16s_gen::x#1 ]
reg byte y [ sin16s::isUpper#2 ]
reg byte x [ mulu16_sel::select#5 ]
zp[4]:6 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 sin16s::$4 ]
zp[4]:10 [ mul16u::mb#2 mul16u::mb#1 ]
zp[2]:14 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ]
zp[2]:16 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 div16u::return#2 sin8s_gen::step#0 div16u::return#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
zp[4]:6 [ mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#2 mulu16_sel::$0 mulu16_sel::$1 sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 ]
zp[2]:10 [ divr16u::rem#6 divr16u::rem#11 divr16u::rem#5 divr16u::rem#10 divr16u::rem#7 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 sin16s_gen::sintab#2 sin16s_gen::sintab#0 memset::dst#2 memset::dst#1 print_str::str#2 print_str::str#0 ]
zp[2]:12 [ divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#3 divr16u::return#4 divr16u::return#2 div32u16u::quotient_lo#0 div16u::return#2 sin8s_gen::step#0 div16u::return#0 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp[2]:18 [ sin8s_gen::i#2 sin8s_gen::i#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ]
zp[2]:14 [ sin8s_gen::i#2 sin8s_gen::i#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mul16u::b#0 ]
zp[1]:16 [ sin8s::isUpper#10 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ]
reg byte x [ sin8s::usinx#4 sin8s::usinx#1 sin8s::usinx#2 ]
reg byte a [ sin8s::return#1 sin8s::return#5 sin8s::sinx#1 ]
reg byte x [ mulu8_sel::v1#5 mulu8_sel::v1#1 mulu8_sel::v1#2 mulu8_sel::v1#3 mulu8_sel::v1#4 mulu8_sel::v1#0 ]
reg byte y [ mulu8_sel::v2#5 mulu8_sel::v2#1 mulu8_sel::v2#3 mulu8_sel::v2#4 mulu8_sel::v2#0 ]
zp[1]:20 [ mulu8_sel::select#5 sin16s::isUpper#2 print_sbyte::b#4 print_sbyte::b#0 print_sbyte::b#1 print_byte::b#0 ]
reg byte x [ mul8u::a#2 mul8u::a#1 mul8u::a#0 ]
zp[2]:21 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ]
zp[2]:17 [ mul8u::res#2 mul8u::res#6 mul8u::res#1 mul8u::return#2 mulu8_sel::$0 mulu8_sel::$1 sin8s::x#6 sin8s::x#4 sin8s::x#0 sin8s::x#1 sin8s::x#2 sin8s::$4 sin16s_gen::i#2 sin16s_gen::i#1 print_char_cursor#28 print_char_cursor#42 print_char_cursor#19 print_char_cursor#10 print_char_cursor#1 ]
reg byte a [ mul8u::b#0 ]
zp[1]:23 [ main::sb#0 sin8s::isUpper#10 ]
zp[2]:24 [ main::$3 main::$11 main::$4 main::sw#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ]
zp[1]:19 [ main::sb#0 mulu8_sel::select#5 ]
zp[2]:20 [ main::$3 main::$11 main::$4 main::sw#0 sin8s_gen::sintab#2 sin8s_gen::sintab#0 divr16u::dividend#4 divr16u::dividend#6 divr16u::dividend#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s_gen::$2 sin16s::usinx#0 ]
reg byte a [ main::$6 ]
reg byte a [ main::sd#0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]
zp[4]:26 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ]
zp[4]:22 [ div32u16u::return#2 sin16s_gen::step#0 div32u16u::return#0 ]
zp[4]:26 [ sin16s::$4 mul16u::mb#2 mul16u::mb#1 ]
zp[2]:30 [ sin16s::x1#0 mul8u::mb#2 mul8u::mb#1 ]
reg byte a [ mul16u::$1 ]
zp[2]:32 [ div32u16u::quotient_hi#0 mulu16_sel::return#0 mulu16_sel::return#12 mulu16_sel::return#2 sin16s::x3_6#0 mulu16_sel::return#11 sin16s::x5#0 sin16s::x5_128#0 sin8s_gen::x#2 sin8s_gen::x#1 mul16u::a#2 mul16u::a#1 mul16u::a#0 ]