mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-02-17 10:30:43 +00:00
Added circular clear atan2 test
This commit is contained in:
parent
d0c23993cc
commit
e02f3bc2e0
@ -10,7 +10,7 @@ word* CORDIC_ATAN2_ANGLES_16 = 0x1000;
|
||||
// Populate cordic angles table
|
||||
kickasm(pc CORDIC_ATAN2_ANGLES_16, uses CORDIC_ITERATIONS_16) {{
|
||||
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
||||
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
||||
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
||||
}}
|
||||
|
||||
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
|
||||
|
@ -35,6 +35,11 @@ public class TestPrograms {
|
||||
public TestPrograms() {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCordicAtan2Clear() throws IOException, URISyntaxException {
|
||||
compileAndCompare("cordic-atan2-clear");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCordicAtan2Ref() throws IOException, URISyntaxException {
|
||||
compileAndCompare("cordic-atan2-16-ref");
|
||||
|
37
src/test/kc/cordic-atan2-clear.kc
Normal file
37
src/test/kc/cordic-atan2-clear.kc
Normal file
@ -0,0 +1,37 @@
|
||||
// Find atan2(x, y) using the CORDIC method
|
||||
// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf
|
||||
import "font-hex"
|
||||
import "atan2"
|
||||
import "c64"
|
||||
|
||||
const byte* CHARSET = 0x2000;
|
||||
const byte* SCREEN = 0x2800;
|
||||
|
||||
void main() {
|
||||
init_font_hex(CHARSET);
|
||||
*D018 = toD018(SCREEN, CHARSET);
|
||||
init_screen();
|
||||
|
||||
// Clear the screen by modifying the charset
|
||||
byte* clear_char = CHARSET;
|
||||
while(true) {
|
||||
do {} while(*RASTER!=0xff);
|
||||
if(clear_char<CHARSET+0x0800) {
|
||||
*clear_char++ = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void init_screen() {
|
||||
byte* screen = SCREEN;
|
||||
for(signed byte y: -12..12) {
|
||||
for(signed byte x: -19..20) {
|
||||
signed word xw = (signed word)(word){ (byte)x, 0 };
|
||||
signed word yw = (signed word)(word){ (byte)y, 0 };
|
||||
word angle_w = atan2_16(xw, yw);
|
||||
byte ang_w = >(angle_w+0x0080);
|
||||
*screen++ = ang_w;
|
||||
}
|
||||
}
|
||||
}
|
392
src/test/ref/cordic-atan2-clear.asm
Normal file
392
src/test/ref/cordic-atan2-clear.asm
Normal file
@ -0,0 +1,392 @@
|
||||
// Find atan2(x, y) using the CORDIC method
|
||||
// See http://bsvi.ru/uploads/CORDIC--_10EBA/cordic.pdf
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
// The number of iterations performed during 16-bit CORDIC atan2 calculation
|
||||
.const CORDIC_ITERATIONS_16 = $f
|
||||
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
|
||||
.label CORDIC_ATAN2_ANGLES_16 = $1000
|
||||
// The number of iterations performed during 8-bit CORDIC atan2 calculation
|
||||
.const CORDIC_ITERATIONS_8 = 8
|
||||
// Angles representing ATAN(0.5), ATAN(0.25), ATAN(0.125), ...
|
||||
.label CORDIC_ATAN2_ANGLES_8 = $1100
|
||||
.label RASTER = $d012
|
||||
.label D018 = $d018
|
||||
.label CHARSET = $2000
|
||||
.label SCREEN = $2800
|
||||
// Populate cordic angles table
|
||||
// Populate cordic angles table
|
||||
main: {
|
||||
.const toD0181_return = (>(SCREEN&$3fff)*4)|(>CHARSET)/4&$f
|
||||
.label clear_char = 2
|
||||
jsr init_font_hex
|
||||
lda #toD0181_return
|
||||
sta D018
|
||||
jsr init_screen
|
||||
lda #<CHARSET
|
||||
sta clear_char
|
||||
lda #>CHARSET
|
||||
sta clear_char+1
|
||||
b2:
|
||||
lda #$ff
|
||||
cmp RASTER
|
||||
bne b2
|
||||
lda clear_char+1
|
||||
cmp #>CHARSET+$800
|
||||
bcc !+
|
||||
bne b2
|
||||
lda clear_char
|
||||
cmp #<CHARSET+$800
|
||||
bcs b2
|
||||
!:
|
||||
lda #0
|
||||
tay
|
||||
sta (clear_char),y
|
||||
inc clear_char
|
||||
bne !+
|
||||
inc clear_char+1
|
||||
!:
|
||||
jmp b2
|
||||
}
|
||||
init_screen: {
|
||||
.label _7 = $c
|
||||
.label xw = $17
|
||||
.label yw = $19
|
||||
.label angle_w = $c
|
||||
.label screen = 5
|
||||
.label y = 4
|
||||
lda #<SCREEN
|
||||
sta screen
|
||||
lda #>SCREEN
|
||||
sta screen+1
|
||||
lda #-$c
|
||||
sta y
|
||||
b1:
|
||||
ldx #-$13
|
||||
b2:
|
||||
ldy #0
|
||||
txa
|
||||
sta xw+1
|
||||
sty xw
|
||||
lda y
|
||||
sta yw+1
|
||||
sty yw
|
||||
jsr atan2_16
|
||||
lda #$80
|
||||
clc
|
||||
adc _7
|
||||
sta _7
|
||||
bcc !+
|
||||
inc _7+1
|
||||
!:
|
||||
lda _7+1
|
||||
ldy #0
|
||||
sta (screen),y
|
||||
inc screen
|
||||
bne !+
|
||||
inc screen+1
|
||||
!:
|
||||
inx
|
||||
cpx #$15
|
||||
bne b2
|
||||
inc y
|
||||
lda #$d
|
||||
cmp y
|
||||
bne b1
|
||||
rts
|
||||
}
|
||||
// Find the atan2(x, y) - which is the angle of the line from (0,0) to (x,y)
|
||||
// Finding the angle requires a binary search using CORDIC_ITERATIONS_16
|
||||
// Returns the angle in hex-degrees (0=0, 0x8000=PI, 0x10000=2*PI)
|
||||
// atan2_16(signed word zeropage($17) x, signed word zeropage($19) y)
|
||||
atan2_16: {
|
||||
.label _2 = 7
|
||||
.label _7 = 9
|
||||
.label yi = 7
|
||||
.label xi = 9
|
||||
.label xd = $1b
|
||||
.label yd = $1d
|
||||
.label angle = $c
|
||||
.label i = $b
|
||||
.label return = $c
|
||||
.label x = $17
|
||||
.label y = $19
|
||||
lda y+1
|
||||
bne !+
|
||||
lda y
|
||||
beq !e+
|
||||
lsr
|
||||
!:
|
||||
bmi !b1+
|
||||
jmp b1
|
||||
!b1:
|
||||
!e:
|
||||
sec
|
||||
lda #0
|
||||
sbc y
|
||||
sta _2
|
||||
lda #0
|
||||
sbc y+1
|
||||
sta _2+1
|
||||
b3:
|
||||
lda x+1
|
||||
bne !+
|
||||
lda x
|
||||
beq !e+
|
||||
lsr
|
||||
!:
|
||||
bmi !b4+
|
||||
jmp b4
|
||||
!b4:
|
||||
!e:
|
||||
sec
|
||||
lda #0
|
||||
sbc x
|
||||
sta _7
|
||||
lda #0
|
||||
sbc x+1
|
||||
sta _7+1
|
||||
b6:
|
||||
lda #0
|
||||
sta angle
|
||||
sta angle+1
|
||||
sta i
|
||||
b10:
|
||||
lda yi+1
|
||||
bne b11
|
||||
lda yi
|
||||
bne b11
|
||||
b12:
|
||||
lsr angle+1
|
||||
ror angle
|
||||
lda x+1
|
||||
bpl b7
|
||||
sec
|
||||
lda #<$8000
|
||||
sbc angle
|
||||
sta angle
|
||||
lda #>$8000
|
||||
sbc angle+1
|
||||
sta angle+1
|
||||
b7:
|
||||
lda y+1
|
||||
bpl b8
|
||||
sec
|
||||
lda #0
|
||||
sbc angle
|
||||
sta angle
|
||||
lda #0
|
||||
sbc angle+1
|
||||
sta angle+1
|
||||
b8:
|
||||
rts
|
||||
b11:
|
||||
ldy i
|
||||
lda xi
|
||||
sta xd
|
||||
lda xi+1
|
||||
sta xd+1
|
||||
cpy #0
|
||||
beq !e+
|
||||
!:
|
||||
lda xd+1
|
||||
cmp #$80
|
||||
ror xd+1
|
||||
ror xd
|
||||
dey
|
||||
bne !-
|
||||
!e:
|
||||
ldy i
|
||||
lda yi
|
||||
sta yd
|
||||
lda yi+1
|
||||
sta yd+1
|
||||
cpy #0
|
||||
beq !e+
|
||||
!:
|
||||
lda yd+1
|
||||
cmp #$80
|
||||
ror yd+1
|
||||
ror yd
|
||||
dey
|
||||
bne !-
|
||||
!e:
|
||||
lda yi+1
|
||||
bne !+
|
||||
lda yi
|
||||
beq !e+
|
||||
lsr
|
||||
!:
|
||||
bpl b13
|
||||
!e:
|
||||
lda xi
|
||||
sec
|
||||
sbc yd
|
||||
sta xi
|
||||
lda xi+1
|
||||
sbc yd+1
|
||||
sta xi+1
|
||||
lda yi
|
||||
clc
|
||||
adc xd
|
||||
sta yi
|
||||
lda yi+1
|
||||
adc xd+1
|
||||
sta yi+1
|
||||
lda i
|
||||
asl
|
||||
tay
|
||||
sec
|
||||
lda angle
|
||||
sbc CORDIC_ATAN2_ANGLES_16,y
|
||||
sta angle
|
||||
lda angle+1
|
||||
sbc CORDIC_ATAN2_ANGLES_16+1,y
|
||||
sta angle+1
|
||||
b14:
|
||||
inc i
|
||||
lda #CORDIC_ITERATIONS_16-1+1
|
||||
cmp i
|
||||
bne !b12+
|
||||
jmp b12
|
||||
!b12:
|
||||
jmp b10
|
||||
b13:
|
||||
lda xi
|
||||
clc
|
||||
adc yd
|
||||
sta xi
|
||||
lda xi+1
|
||||
adc yd+1
|
||||
sta xi+1
|
||||
lda yi
|
||||
sec
|
||||
sbc xd
|
||||
sta yi
|
||||
lda yi+1
|
||||
sbc xd+1
|
||||
sta yi+1
|
||||
lda i
|
||||
asl
|
||||
tay
|
||||
clc
|
||||
lda angle
|
||||
adc CORDIC_ATAN2_ANGLES_16,y
|
||||
sta angle
|
||||
lda angle+1
|
||||
adc CORDIC_ATAN2_ANGLES_16+1,y
|
||||
sta angle+1
|
||||
jmp b14
|
||||
b4:
|
||||
lda x
|
||||
sta xi
|
||||
lda x+1
|
||||
sta xi+1
|
||||
jmp b6
|
||||
b1:
|
||||
lda y
|
||||
sta yi
|
||||
lda y+1
|
||||
sta yi+1
|
||||
jmp b3
|
||||
}
|
||||
// Make charset from proto chars
|
||||
// init_font_hex(byte* zeropage($11) charset)
|
||||
init_font_hex: {
|
||||
.label _0 = $1f
|
||||
.label idx = $16
|
||||
.label proto_lo = $13
|
||||
.label charset = $11
|
||||
.label c1 = $15
|
||||
.label proto_hi = $e
|
||||
.label c = $10
|
||||
lda #0
|
||||
sta c
|
||||
lda #<FONT_HEX_PROTO
|
||||
sta proto_hi
|
||||
lda #>FONT_HEX_PROTO
|
||||
sta proto_hi+1
|
||||
lda #<CHARSET
|
||||
sta charset
|
||||
lda #>CHARSET
|
||||
sta charset+1
|
||||
b1:
|
||||
lda #0
|
||||
sta c1
|
||||
lda #<FONT_HEX_PROTO
|
||||
sta proto_lo
|
||||
lda #>FONT_HEX_PROTO
|
||||
sta proto_lo+1
|
||||
b2:
|
||||
lda #0
|
||||
tay
|
||||
sta (charset),y
|
||||
lda #1
|
||||
sta idx
|
||||
ldx #0
|
||||
b3:
|
||||
txa
|
||||
tay
|
||||
lda (proto_hi),y
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta _0
|
||||
txa
|
||||
tay
|
||||
lda (proto_lo),y
|
||||
asl
|
||||
ora _0
|
||||
ldy idx
|
||||
sta (charset),y
|
||||
inc idx
|
||||
inx
|
||||
cpx #5
|
||||
bne b3
|
||||
lda #0
|
||||
ldy idx
|
||||
sta (charset),y
|
||||
iny
|
||||
sta (charset),y
|
||||
lda #5
|
||||
clc
|
||||
adc proto_lo
|
||||
sta proto_lo
|
||||
bcc !+
|
||||
inc proto_lo+1
|
||||
!:
|
||||
lda #8
|
||||
clc
|
||||
adc charset
|
||||
sta charset
|
||||
bcc !+
|
||||
inc charset+1
|
||||
!:
|
||||
inc c1
|
||||
lda #$10
|
||||
cmp c1
|
||||
bne b2
|
||||
lda #5
|
||||
clc
|
||||
adc proto_hi
|
||||
sta proto_hi
|
||||
bcc !+
|
||||
inc proto_hi+1
|
||||
!:
|
||||
inc c
|
||||
lda #$10
|
||||
cmp c
|
||||
bne b1
|
||||
rts
|
||||
}
|
||||
// Bit patterns for symbols 0-f (3x5 pixels) used in font hex
|
||||
FONT_HEX_PROTO: .byte 2, 5, 5, 5, 2, 6, 2, 2, 2, 7, 6, 1, 2, 4, 7, 6, 1, 2, 1, 6, 5, 5, 7, 1, 1, 7, 4, 6, 1, 6, 3, 4, 6, 5, 2, 7, 1, 1, 1, 1, 2, 5, 2, 5, 2, 2, 5, 3, 1, 1, 2, 5, 7, 5, 5, 6, 5, 6, 5, 6, 2, 5, 4, 5, 2, 6, 5, 5, 5, 6, 7, 4, 6, 4, 7, 7, 4, 6, 4, 4
|
||||
.pc = CORDIC_ATAN2_ANGLES_16 "CORDIC_ATAN2_ANGLES_16"
|
||||
.for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
||||
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
||||
|
||||
.pc = CORDIC_ATAN2_ANGLES_8 "CORDIC_ATAN2_ANGLES_8"
|
||||
.fill CORDIC_ITERATIONS_8, 2*256*atan(1/pow(2,i))/PI/2
|
||||
|
191
src/test/ref/cordic-atan2-clear.cfg
Normal file
191
src/test/ref/cordic-atan2-clear.cfg
Normal file
@ -0,0 +1,191 @@
|
||||
@begin: scope:[] from
|
||||
[0] phi()
|
||||
to:@1
|
||||
@1: scope:[] from @begin
|
||||
kickasm(location (const word*) CORDIC_ATAN2_ANGLES_16#0 uses CORDIC_ITERATIONS_16#0) {{ .for (var i=0; i<CORDIC_ITERATIONS_16; i++)
|
||||
.word 256*2*256*atan(1/pow(2,i))/PI/2
|
||||
}}
|
||||
to:@2
|
||||
@2: scope:[] from @1
|
||||
kickasm(location (const byte*) CORDIC_ATAN2_ANGLES_8#0 uses CORDIC_ITERATIONS_8#0) {{ .fill CORDIC_ITERATIONS_8, 2*256*atan(1/pow(2,i))/PI/2
|
||||
}}
|
||||
to:@3
|
||||
@3: scope:[] from @2
|
||||
[3] phi()
|
||||
[4] call main
|
||||
to:@end
|
||||
@end: scope:[] from @3
|
||||
[5] phi()
|
||||
main: scope:[main] from @3
|
||||
[6] phi()
|
||||
[7] call init_font_hex
|
||||
to:main::toD0181
|
||||
main::toD0181: scope:[main] from main
|
||||
[8] phi()
|
||||
to:main::@5
|
||||
main::@5: scope:[main] from main::toD0181
|
||||
[9] *((const byte*) D018#0) ← (const byte) main::toD0181_return#0
|
||||
[10] call init_screen
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main::@3 main::@4 main::@5
|
||||
[11] (byte*) main::clear_char#5 ← phi( main::@5/(const byte*) CHARSET#0 main::@4/(byte*) main::clear_char#1 )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1 main::@2
|
||||
[12] if(*((const byte*) RASTER#0)!=(byte) $ff) goto main::@2
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[13] if((byte*) main::clear_char#5>=(const byte*) CHARSET#0+(word) $800) goto main::@1
|
||||
to:main::@4
|
||||
main::@4: scope:[main] from main::@3
|
||||
[14] *((byte*) main::clear_char#5) ← (byte) 0
|
||||
[15] (byte*) main::clear_char#1 ← ++ (byte*) main::clear_char#5
|
||||
to:main::@1
|
||||
init_screen: scope:[init_screen] from main::@5
|
||||
[16] phi()
|
||||
to:init_screen::@1
|
||||
init_screen::@1: scope:[init_screen] from init_screen init_screen::@3
|
||||
[17] (byte*) init_screen::screen#4 ← phi( init_screen/(const byte*) SCREEN#0 init_screen::@3/(byte*) init_screen::screen#1 )
|
||||
[17] (signed byte) init_screen::y#4 ← phi( init_screen/(signed byte) -$c init_screen::@3/(signed byte) init_screen::y#1 )
|
||||
to:init_screen::@2
|
||||
init_screen::@2: scope:[init_screen] from init_screen::@1 init_screen::@4
|
||||
[18] (byte*) init_screen::screen#2 ← phi( init_screen::@1/(byte*) init_screen::screen#4 init_screen::@4/(byte*) init_screen::screen#1 )
|
||||
[18] (signed byte) init_screen::x#2 ← phi( init_screen::@1/(signed byte) -$13 init_screen::@4/(signed byte) init_screen::x#1 )
|
||||
[19] (word) init_screen::xw#0 ← (byte)(signed byte) init_screen::x#2 w= (byte) 0
|
||||
[20] (word) init_screen::yw#0 ← (byte)(signed byte) init_screen::y#4 w= (byte) 0
|
||||
[21] (signed word) atan2_16::x#0 ← (signed word)(word) init_screen::xw#0
|
||||
[22] (signed word) atan2_16::y#0 ← (signed word)(word) init_screen::yw#0
|
||||
[23] call atan2_16
|
||||
[24] (word) atan2_16::return#2 ← (word) atan2_16::return#0
|
||||
to:init_screen::@4
|
||||
init_screen::@4: scope:[init_screen] from init_screen::@2
|
||||
[25] (word) init_screen::angle_w#0 ← (word) atan2_16::return#2
|
||||
[26] (word~) init_screen::$7 ← (word) init_screen::angle_w#0 + (byte) $80
|
||||
[27] (byte) init_screen::ang_w#0 ← > (word~) init_screen::$7
|
||||
[28] *((byte*) init_screen::screen#2) ← (byte) init_screen::ang_w#0
|
||||
[29] (byte*) init_screen::screen#1 ← ++ (byte*) init_screen::screen#2
|
||||
[30] (signed byte) init_screen::x#1 ← ++ (signed byte) init_screen::x#2
|
||||
[31] if((signed byte) init_screen::x#1!=(signed byte) $15) goto init_screen::@2
|
||||
to:init_screen::@3
|
||||
init_screen::@3: scope:[init_screen] from init_screen::@4
|
||||
[32] (signed byte) init_screen::y#1 ← ++ (signed byte) init_screen::y#4
|
||||
[33] if((signed byte) init_screen::y#1!=(signed byte) $d) goto init_screen::@1
|
||||
to:init_screen::@return
|
||||
init_screen::@return: scope:[init_screen] from init_screen::@3
|
||||
[34] return
|
||||
to:@return
|
||||
atan2_16: scope:[atan2_16] from init_screen::@2
|
||||
[35] if((signed word) atan2_16::y#0>(signed byte) 0) goto atan2_16::@1
|
||||
to:atan2_16::@2
|
||||
atan2_16::@2: scope:[atan2_16] from atan2_16
|
||||
[36] (signed word~) atan2_16::$2 ← - (signed word) atan2_16::y#0
|
||||
to:atan2_16::@3
|
||||
atan2_16::@3: scope:[atan2_16] from atan2_16::@1 atan2_16::@2
|
||||
[37] (signed word) atan2_16::yi#0 ← phi( atan2_16::@1/(signed word~) atan2_16::yi#11 atan2_16::@2/(signed word~) atan2_16::$2 )
|
||||
[38] if((signed word) atan2_16::x#0>(signed byte) 0) goto atan2_16::@4
|
||||
to:atan2_16::@5
|
||||
atan2_16::@5: scope:[atan2_16] from atan2_16::@3
|
||||
[39] (signed word~) atan2_16::$7 ← - (signed word) atan2_16::x#0
|
||||
to:atan2_16::@6
|
||||
atan2_16::@6: scope:[atan2_16] from atan2_16::@4 atan2_16::@5
|
||||
[40] (signed word) atan2_16::xi#0 ← phi( atan2_16::@4/(signed word~) atan2_16::xi#8 atan2_16::@5/(signed word~) atan2_16::$7 )
|
||||
to:atan2_16::@10
|
||||
atan2_16::@10: scope:[atan2_16] from atan2_16::@14 atan2_16::@6
|
||||
[41] (word) atan2_16::angle#12 ← phi( atan2_16::@14/(word) atan2_16::angle#13 atan2_16::@6/(byte) 0 )
|
||||
[41] (byte) atan2_16::i#2 ← phi( atan2_16::@14/(byte) atan2_16::i#1 atan2_16::@6/(byte) 0 )
|
||||
[41] (signed word) atan2_16::xi#3 ← phi( atan2_16::@14/(signed word) atan2_16::xi#7 atan2_16::@6/(signed word) atan2_16::xi#0 )
|
||||
[41] (signed word) atan2_16::yi#3 ← phi( atan2_16::@14/(signed word) atan2_16::yi#7 atan2_16::@6/(signed word) atan2_16::yi#0 )
|
||||
[42] if((signed word) atan2_16::yi#3!=(signed byte) 0) goto atan2_16::@11
|
||||
to:atan2_16::@12
|
||||
atan2_16::@12: scope:[atan2_16] from atan2_16::@10 atan2_16::@14
|
||||
[43] (word) atan2_16::angle#6 ← phi( atan2_16::@10/(word) atan2_16::angle#12 atan2_16::@14/(word) atan2_16::angle#13 )
|
||||
[44] (word) atan2_16::angle#1 ← (word) atan2_16::angle#6 >> (byte) 1
|
||||
[45] if((signed word) atan2_16::x#0>=(signed byte) 0) goto atan2_16::@7
|
||||
to:atan2_16::@16
|
||||
atan2_16::@16: scope:[atan2_16] from atan2_16::@12
|
||||
[46] (word) atan2_16::angle#4 ← (word) $8000 - (word) atan2_16::angle#1
|
||||
to:atan2_16::@7
|
||||
atan2_16::@7: scope:[atan2_16] from atan2_16::@12 atan2_16::@16
|
||||
[47] (word) atan2_16::angle#11 ← phi( atan2_16::@12/(word) atan2_16::angle#1 atan2_16::@16/(word) atan2_16::angle#4 )
|
||||
[48] if((signed word) atan2_16::y#0>=(signed byte) 0) goto atan2_16::@8
|
||||
to:atan2_16::@9
|
||||
atan2_16::@9: scope:[atan2_16] from atan2_16::@7
|
||||
[49] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11
|
||||
to:atan2_16::@8
|
||||
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
|
||||
[50] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 )
|
||||
to:atan2_16::@return
|
||||
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
|
||||
[51] return
|
||||
to:@return
|
||||
atan2_16::@11: scope:[atan2_16] from atan2_16::@10
|
||||
[52] (signed word) atan2_16::xd#0 ← (signed word) atan2_16::xi#3 >> (byte) atan2_16::i#2
|
||||
[53] (signed word) atan2_16::yd#0 ← (signed word) atan2_16::yi#3 >> (byte) atan2_16::i#2
|
||||
[54] if((signed word) atan2_16::yi#3>(signed byte) 0) goto atan2_16::@13
|
||||
to:atan2_16::@15
|
||||
atan2_16::@15: scope:[atan2_16] from atan2_16::@11
|
||||
[55] (signed word) atan2_16::xi#2 ← (signed word) atan2_16::xi#3 - (signed word) atan2_16::yd#0
|
||||
[56] (signed word) atan2_16::yi#2 ← (signed word) atan2_16::yi#3 + (signed word) atan2_16::xd#0
|
||||
[57] (byte~) atan2_16::$24 ← (byte) atan2_16::i#2 << (byte) 1
|
||||
[58] (word) atan2_16::angle#3 ← (word) atan2_16::angle#12 - *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$24)
|
||||
to:atan2_16::@14
|
||||
atan2_16::@14: scope:[atan2_16] from atan2_16::@13 atan2_16::@15
|
||||
[59] (signed word) atan2_16::xi#7 ← phi( atan2_16::@13/(signed word) atan2_16::xi#1 atan2_16::@15/(signed word) atan2_16::xi#2 )
|
||||
[59] (word) atan2_16::angle#13 ← phi( atan2_16::@13/(word) atan2_16::angle#2 atan2_16::@15/(word) atan2_16::angle#3 )
|
||||
[59] (signed word) atan2_16::yi#7 ← phi( atan2_16::@13/(signed word) atan2_16::yi#1 atan2_16::@15/(signed word) atan2_16::yi#2 )
|
||||
[60] (byte) atan2_16::i#1 ← ++ (byte) atan2_16::i#2
|
||||
[61] if((byte) atan2_16::i#1==(const byte) CORDIC_ITERATIONS_16#0-(byte) 1+(byte) 1) goto atan2_16::@12
|
||||
to:atan2_16::@10
|
||||
atan2_16::@13: scope:[atan2_16] from atan2_16::@11
|
||||
[62] (signed word) atan2_16::xi#1 ← (signed word) atan2_16::xi#3 + (signed word) atan2_16::yd#0
|
||||
[63] (signed word) atan2_16::yi#1 ← (signed word) atan2_16::yi#3 - (signed word) atan2_16::xd#0
|
||||
[64] (byte~) atan2_16::$23 ← (byte) atan2_16::i#2 << (byte) 1
|
||||
[65] (word) atan2_16::angle#2 ← (word) atan2_16::angle#12 + *((const word*) CORDIC_ATAN2_ANGLES_16#0 + (byte~) atan2_16::$23)
|
||||
to:atan2_16::@14
|
||||
atan2_16::@4: scope:[atan2_16] from atan2_16::@3
|
||||
[66] (signed word~) atan2_16::xi#8 ← (signed word) atan2_16::x#0
|
||||
to:atan2_16::@6
|
||||
atan2_16::@1: scope:[atan2_16] from atan2_16
|
||||
[67] (signed word~) atan2_16::yi#11 ← (signed word) atan2_16::y#0
|
||||
to:atan2_16::@3
|
||||
init_font_hex: scope:[init_font_hex] from main
|
||||
[68] phi()
|
||||
to:init_font_hex::@1
|
||||
init_font_hex::@1: scope:[init_font_hex] from init_font_hex init_font_hex::@5
|
||||
[69] (byte) init_font_hex::c#6 ← phi( init_font_hex/(byte) 0 init_font_hex::@5/(byte) init_font_hex::c#1 )
|
||||
[69] (byte*) init_font_hex::proto_hi#6 ← phi( init_font_hex/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@5/(byte*) init_font_hex::proto_hi#1 )
|
||||
[69] (byte*) init_font_hex::charset#5 ← phi( init_font_hex/(const byte*) CHARSET#0 init_font_hex::@5/(byte*) init_font_hex::charset#0 )
|
||||
to:init_font_hex::@2
|
||||
init_font_hex::@2: scope:[init_font_hex] from init_font_hex::@1 init_font_hex::@4
|
||||
[70] (byte) init_font_hex::c1#4 ← phi( init_font_hex::@1/(byte) 0 init_font_hex::@4/(byte) init_font_hex::c1#1 )
|
||||
[70] (byte*) init_font_hex::proto_lo#4 ← phi( init_font_hex::@1/(const byte[]) FONT_HEX_PROTO#0 init_font_hex::@4/(byte*) init_font_hex::proto_lo#1 )
|
||||
[70] (byte*) init_font_hex::charset#2 ← phi( init_font_hex::@1/(byte*) init_font_hex::charset#5 init_font_hex::@4/(byte*) init_font_hex::charset#0 )
|
||||
[71] *((byte*) init_font_hex::charset#2) ← (byte) 0
|
||||
to:init_font_hex::@3
|
||||
init_font_hex::@3: scope:[init_font_hex] from init_font_hex::@2 init_font_hex::@3
|
||||
[72] (byte) init_font_hex::idx#5 ← phi( init_font_hex::@2/(byte) 1 init_font_hex::@3/(byte) init_font_hex::idx#2 )
|
||||
[72] (byte) init_font_hex::i#2 ← phi( init_font_hex::@2/(byte) 0 init_font_hex::@3/(byte) init_font_hex::i#1 )
|
||||
[73] (byte~) init_font_hex::$0 ← *((byte*) init_font_hex::proto_hi#6 + (byte) init_font_hex::i#2) << (byte) 4
|
||||
[74] (byte~) init_font_hex::$1 ← *((byte*) init_font_hex::proto_lo#4 + (byte) init_font_hex::i#2) << (byte) 1
|
||||
[75] (byte~) init_font_hex::$2 ← (byte~) init_font_hex::$0 | (byte~) init_font_hex::$1
|
||||
[76] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#5) ← (byte~) init_font_hex::$2
|
||||
[77] (byte) init_font_hex::idx#2 ← ++ (byte) init_font_hex::idx#5
|
||||
[78] (byte) init_font_hex::i#1 ← ++ (byte) init_font_hex::i#2
|
||||
[79] if((byte) init_font_hex::i#1!=(byte) 5) goto init_font_hex::@3
|
||||
to:init_font_hex::@4
|
||||
init_font_hex::@4: scope:[init_font_hex] from init_font_hex::@3
|
||||
[80] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#2) ← (byte) 0
|
||||
[81] (byte) init_font_hex::idx#3 ← ++ (byte) init_font_hex::idx#2
|
||||
[82] *((byte*) init_font_hex::charset#2 + (byte) init_font_hex::idx#3) ← (byte) 0
|
||||
[83] (byte*) init_font_hex::proto_lo#1 ← (byte*) init_font_hex::proto_lo#4 + (byte) 5
|
||||
[84] (byte*) init_font_hex::charset#0 ← (byte*) init_font_hex::charset#2 + (byte) 8
|
||||
[85] (byte) init_font_hex::c1#1 ← ++ (byte) init_font_hex::c1#4
|
||||
[86] if((byte) init_font_hex::c1#1!=(byte) $10) goto init_font_hex::@2
|
||||
to:init_font_hex::@5
|
||||
init_font_hex::@5: scope:[init_font_hex] from init_font_hex::@4
|
||||
[87] (byte*) init_font_hex::proto_hi#1 ← (byte*) init_font_hex::proto_hi#6 + (byte) 5
|
||||
[88] (byte) init_font_hex::c#1 ← ++ (byte) init_font_hex::c#6
|
||||
[89] if((byte) init_font_hex::c#1!=(byte) $10) goto init_font_hex::@1
|
||||
to:init_font_hex::@return
|
||||
init_font_hex::@return: scope:[init_font_hex] from init_font_hex::@5
|
||||
[90] return
|
||||
to:@return
|
4264
src/test/ref/cordic-atan2-clear.log
Normal file
4264
src/test/ref/cordic-atan2-clear.log
Normal file
File diff suppressed because it is too large
Load Diff
191
src/test/ref/cordic-atan2-clear.sym
Normal file
191
src/test/ref/cordic-atan2-clear.sym
Normal file
@ -0,0 +1,191 @@
|
||||
(label) @1
|
||||
(label) @2
|
||||
(label) @3
|
||||
(label) @begin
|
||||
(label) @end
|
||||
(byte*) CHARSET
|
||||
(const byte*) CHARSET#0 CHARSET = (byte*) 8192
|
||||
(word*) CORDIC_ATAN2_ANGLES_16
|
||||
(const word*) CORDIC_ATAN2_ANGLES_16#0 CORDIC_ATAN2_ANGLES_16 = (word*) 4096
|
||||
(byte*) CORDIC_ATAN2_ANGLES_8
|
||||
(const byte*) CORDIC_ATAN2_ANGLES_8#0 CORDIC_ATAN2_ANGLES_8 = (byte*) 4352
|
||||
(byte) CORDIC_ITERATIONS_16
|
||||
(const byte) CORDIC_ITERATIONS_16#0 CORDIC_ITERATIONS_16 = (byte) $f
|
||||
(byte) CORDIC_ITERATIONS_8
|
||||
(const byte) CORDIC_ITERATIONS_8#0 CORDIC_ITERATIONS_8 = (byte) 8
|
||||
(byte*) D018
|
||||
(const byte*) D018#0 D018 = (byte*) 53272
|
||||
(byte[]) FONT_HEX_PROTO
|
||||
(const byte[]) FONT_HEX_PROTO#0 FONT_HEX_PROTO = { (byte) 2, (byte) 5, (byte) 5, (byte) 5, (byte) 2, (byte) 6, (byte) 2, (byte) 2, (byte) 2, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 4, (byte) 7, (byte) 6, (byte) 1, (byte) 2, (byte) 1, (byte) 6, (byte) 5, (byte) 5, (byte) 7, (byte) 1, (byte) 1, (byte) 7, (byte) 4, (byte) 6, (byte) 1, (byte) 6, (byte) 3, (byte) 4, (byte) 6, (byte) 5, (byte) 2, (byte) 7, (byte) 1, (byte) 1, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 2, (byte) 5, (byte) 2, (byte) 2, (byte) 5, (byte) 3, (byte) 1, (byte) 1, (byte) 2, (byte) 5, (byte) 7, (byte) 5, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 5, (byte) 6, (byte) 2, (byte) 5, (byte) 4, (byte) 5, (byte) 2, (byte) 6, (byte) 5, (byte) 5, (byte) 5, (byte) 6, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 7, (byte) 7, (byte) 4, (byte) 6, (byte) 4, (byte) 4 }
|
||||
(byte*) RASTER
|
||||
(const byte*) RASTER#0 RASTER = (byte*) 53266
|
||||
(byte*) SCREEN
|
||||
(const byte*) SCREEN#0 SCREEN = (byte*) 10240
|
||||
(word()) atan2_16((signed word) atan2_16::x , (signed word) atan2_16::y)
|
||||
(signed word~) atan2_16::$2 $2 zp ZP_WORD:7 4.0
|
||||
(byte~) atan2_16::$23 reg byte a 2002.0
|
||||
(byte~) atan2_16::$24 reg byte a 2002.0
|
||||
(signed word~) atan2_16::$7 $7 zp ZP_WORD:9 4.0
|
||||
(label) atan2_16::@1
|
||||
(label) atan2_16::@10
|
||||
(label) atan2_16::@11
|
||||
(label) atan2_16::@12
|
||||
(label) atan2_16::@13
|
||||
(label) atan2_16::@14
|
||||
(label) atan2_16::@15
|
||||
(label) atan2_16::@16
|
||||
(label) atan2_16::@2
|
||||
(label) atan2_16::@3
|
||||
(label) atan2_16::@4
|
||||
(label) atan2_16::@5
|
||||
(label) atan2_16::@6
|
||||
(label) atan2_16::@7
|
||||
(label) atan2_16::@8
|
||||
(label) atan2_16::@9
|
||||
(label) atan2_16::@return
|
||||
(word) atan2_16::angle
|
||||
(word) atan2_16::angle#1 angle zp ZP_WORD:12 3.0
|
||||
(word) atan2_16::angle#11 angle zp ZP_WORD:12 4.0
|
||||
(word) atan2_16::angle#12 angle zp ZP_WORD:12 364.0
|
||||
(word) atan2_16::angle#13 angle zp ZP_WORD:12 1334.6666666666667
|
||||
(word) atan2_16::angle#2 angle zp ZP_WORD:12 2002.0
|
||||
(word) atan2_16::angle#3 angle zp ZP_WORD:12 2002.0
|
||||
(word) atan2_16::angle#4 angle zp ZP_WORD:12 4.0
|
||||
(word) atan2_16::angle#5 angle zp ZP_WORD:12 4.0
|
||||
(word) atan2_16::angle#6 angle zp ZP_WORD:12 2004.0
|
||||
(byte) atan2_16::i
|
||||
(byte) atan2_16::i#1 i zp ZP_BYTE:11 1501.5
|
||||
(byte) atan2_16::i#2 i zp ZP_BYTE:11 429.0
|
||||
(word) atan2_16::return
|
||||
(word) atan2_16::return#0 return zp ZP_WORD:12 34.99999999999999
|
||||
(word) atan2_16::return#2 return zp ZP_WORD:12 202.0
|
||||
(signed word) atan2_16::x
|
||||
(signed word) atan2_16::x#0 x zp ZP_WORD:23 3.8928571428571437
|
||||
(signed word) atan2_16::xd
|
||||
(signed word) atan2_16::xd#0 xd zp ZP_WORD:27 600.5999999999999
|
||||
(signed word) atan2_16::xi
|
||||
(signed word) atan2_16::xi#0 xi zp ZP_WORD:9 6.0
|
||||
(signed word) atan2_16::xi#1 xi zp ZP_WORD:9 500.5
|
||||
(signed word) atan2_16::xi#2 xi zp ZP_WORD:9 500.5
|
||||
(signed word) atan2_16::xi#3 xi zp ZP_WORD:9 801.2
|
||||
(signed word) atan2_16::xi#7 xi zp ZP_WORD:9 1001.0
|
||||
(signed word~) atan2_16::xi#8 xi zp ZP_WORD:9 4.0
|
||||
(signed word) atan2_16::y
|
||||
(signed word) atan2_16::y#0 y zp ZP_WORD:25 3.633333333333334
|
||||
(signed word) atan2_16::yd
|
||||
(signed word) atan2_16::yd#0 yd zp ZP_WORD:29 1501.5
|
||||
(signed word) atan2_16::yi
|
||||
(signed word) atan2_16::yi#0 yi zp ZP_WORD:7 1.2000000000000002
|
||||
(signed word) atan2_16::yi#1 yi zp ZP_WORD:7 667.3333333333334
|
||||
(signed word~) atan2_16::yi#11 yi zp ZP_WORD:7 4.0
|
||||
(signed word) atan2_16::yi#2 yi zp ZP_WORD:7 667.3333333333334
|
||||
(signed word) atan2_16::yi#3 yi zp ZP_WORD:7 858.2857142857142
|
||||
(signed word) atan2_16::yi#7 yi zp ZP_WORD:7 1001.0
|
||||
(void()) init_font_hex((byte*) init_font_hex::charset)
|
||||
(byte~) init_font_hex::$0 $0 zp ZP_BYTE:31 1001.0
|
||||
(byte~) init_font_hex::$1 reg byte a 2002.0
|
||||
(byte~) init_font_hex::$2 reg byte a 2002.0
|
||||
(label) init_font_hex::@1
|
||||
(label) init_font_hex::@2
|
||||
(label) init_font_hex::@3
|
||||
(label) init_font_hex::@4
|
||||
(label) init_font_hex::@5
|
||||
(label) init_font_hex::@return
|
||||
(byte) init_font_hex::c
|
||||
(byte) init_font_hex::c#1 c zp ZP_BYTE:16 16.5
|
||||
(byte) init_font_hex::c#6 c zp ZP_BYTE:16 1.1578947368421053
|
||||
(byte) init_font_hex::c1
|
||||
(byte) init_font_hex::c1#1 c1 zp ZP_BYTE:21 151.5
|
||||
(byte) init_font_hex::c1#4 c1 zp ZP_BYTE:21 13.466666666666667
|
||||
(byte*) init_font_hex::charset
|
||||
(byte*) init_font_hex::charset#0 charset zp ZP_WORD:17 35.5
|
||||
(byte*) init_font_hex::charset#2 charset zp ZP_WORD:17 108.35714285714285
|
||||
(byte*) init_font_hex::charset#5 charset zp ZP_WORD:17 22.0
|
||||
(byte) init_font_hex::i
|
||||
(byte) init_font_hex::i#1 reg byte x 1501.5
|
||||
(byte) init_font_hex::i#2 reg byte x 667.3333333333334
|
||||
(byte) init_font_hex::idx
|
||||
(byte) init_font_hex::idx#2 idx zp ZP_BYTE:22 551.0
|
||||
(byte) init_font_hex::idx#3 reg byte y 202.0
|
||||
(byte) init_font_hex::idx#5 idx zp ZP_BYTE:22 600.5999999999999
|
||||
(byte*) init_font_hex::proto_hi
|
||||
(byte*) init_font_hex::proto_hi#1 proto_hi zp ZP_WORD:14 7.333333333333333
|
||||
(byte*) init_font_hex::proto_hi#6 proto_hi zp ZP_WORD:14 56.83333333333334
|
||||
(byte*) init_font_hex::proto_lo
|
||||
(byte*) init_font_hex::proto_lo#1 proto_lo zp ZP_WORD:19 50.5
|
||||
(byte*) init_font_hex::proto_lo#4 proto_lo zp ZP_WORD:19 92.53846153846155
|
||||
(void()) init_screen()
|
||||
(word~) init_screen::$7 $7 zp ZP_WORD:12 202.0
|
||||
(label) init_screen::@1
|
||||
(label) init_screen::@2
|
||||
(label) init_screen::@3
|
||||
(label) init_screen::@4
|
||||
(label) init_screen::@return
|
||||
(byte) init_screen::ang_w
|
||||
(byte) init_screen::ang_w#0 reg byte a 202.0
|
||||
(word) init_screen::angle_w
|
||||
(word) init_screen::angle_w#0 angle_w zp ZP_WORD:12 202.0
|
||||
(byte*) init_screen::screen
|
||||
(byte*) init_screen::screen#1 screen zp ZP_WORD:5 42.599999999999994
|
||||
(byte*) init_screen::screen#2 screen zp ZP_WORD:5 28.545454545454547
|
||||
(byte*) init_screen::screen#4 screen zp ZP_WORD:5 22.0
|
||||
(signed byte) init_screen::x
|
||||
(signed byte) init_screen::x#1 reg byte x 151.5
|
||||
(signed byte) init_screen::x#2 reg byte x 16.833333333333332
|
||||
(signed word) init_screen::xw
|
||||
(word) init_screen::xw#0 xw zp ZP_WORD:23 50.5
|
||||
(signed byte) init_screen::y
|
||||
(signed byte) init_screen::y#1 y zp ZP_BYTE:4 16.5
|
||||
(signed byte) init_screen::y#4 y zp ZP_BYTE:4 1.4666666666666666
|
||||
(signed word) init_screen::yw
|
||||
(word) init_screen::yw#0 yw zp ZP_WORD:25 50.5
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
(label) main::@4
|
||||
(label) main::@5
|
||||
(byte*) main::clear_char
|
||||
(byte*) main::clear_char#1 clear_char zp ZP_WORD:2 22.0
|
||||
(byte*) main::clear_char#5 clear_char zp ZP_WORD:2 33.5
|
||||
(label) main::toD0181
|
||||
(word~) main::toD0181_$0
|
||||
(number~) main::toD0181_$1
|
||||
(number~) main::toD0181_$2
|
||||
(number~) main::toD0181_$3
|
||||
(word~) main::toD0181_$4
|
||||
(byte~) main::toD0181_$5
|
||||
(number~) main::toD0181_$6
|
||||
(number~) main::toD0181_$7
|
||||
(number~) main::toD0181_$8
|
||||
(byte*) main::toD0181_gfx
|
||||
(byte) main::toD0181_return
|
||||
(const byte) main::toD0181_return#0 toD0181_return = >(word)(const byte*) SCREEN#0&(word) $3fff*(byte) 4|>(word)(const byte*) CHARSET#0/(byte) 4&(byte) $f
|
||||
(byte*) main::toD0181_screen
|
||||
|
||||
zp ZP_WORD:2 [ main::clear_char#5 main::clear_char#1 ]
|
||||
zp ZP_BYTE:4 [ init_screen::y#4 init_screen::y#1 ]
|
||||
reg byte x [ init_screen::x#2 init_screen::x#1 ]
|
||||
zp ZP_WORD:5 [ init_screen::screen#2 init_screen::screen#4 init_screen::screen#1 ]
|
||||
zp ZP_WORD:7 [ atan2_16::yi#3 atan2_16::yi#7 atan2_16::yi#0 atan2_16::yi#11 atan2_16::$2 atan2_16::yi#1 atan2_16::yi#2 ]
|
||||
zp ZP_WORD:9 [ atan2_16::xi#3 atan2_16::xi#7 atan2_16::xi#0 atan2_16::xi#8 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
|
||||
zp ZP_BYTE:11 [ atan2_16::i#2 atan2_16::i#1 ]
|
||||
zp ZP_WORD:12 [ atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_screen::angle_w#0 init_screen::$7 ]
|
||||
zp ZP_WORD:14 [ init_font_hex::proto_hi#6 init_font_hex::proto_hi#1 ]
|
||||
zp ZP_BYTE:16 [ init_font_hex::c#6 init_font_hex::c#1 ]
|
||||
zp ZP_WORD:17 [ init_font_hex::charset#2 init_font_hex::charset#5 init_font_hex::charset#0 ]
|
||||
zp ZP_WORD:19 [ init_font_hex::proto_lo#4 init_font_hex::proto_lo#1 ]
|
||||
zp ZP_BYTE:21 [ init_font_hex::c1#4 init_font_hex::c1#1 ]
|
||||
reg byte x [ init_font_hex::i#2 init_font_hex::i#1 ]
|
||||
zp ZP_BYTE:22 [ init_font_hex::idx#5 init_font_hex::idx#2 ]
|
||||
zp ZP_WORD:23 [ init_screen::xw#0 atan2_16::x#0 ]
|
||||
zp ZP_WORD:25 [ init_screen::yw#0 atan2_16::y#0 ]
|
||||
reg byte a [ init_screen::ang_w#0 ]
|
||||
zp ZP_WORD:27 [ atan2_16::xd#0 ]
|
||||
zp ZP_WORD:29 [ atan2_16::yd#0 ]
|
||||
reg byte a [ atan2_16::$24 ]
|
||||
reg byte a [ atan2_16::$23 ]
|
||||
zp ZP_BYTE:31 [ init_font_hex::$0 ]
|
||||
reg byte a [ init_font_hex::$1 ]
|
||||
reg byte a [ init_font_hex::$2 ]
|
||||
reg byte y [ init_font_hex::idx#3 ]
|
Loading…
x
Reference in New Issue
Block a user