1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-08-03 01:29:04 +00:00

Implemented the rest of the comparison test. Fixed a double jump problem.

This commit is contained in:
jespergravgaard 2018-01-02 10:17:59 +01:00
parent 53d8afbb1d
commit 2084be92e0
12 changed files with 10716 additions and 1874 deletions

View File

@ -42,7 +42,7 @@ public class AsmFragmentManager {
if(log.isVerboseFragmentLog()) { if(log.isVerboseFragmentLog()) {
log.append("Unknown fragment " + signature.getSignature()); log.append("Unknown fragment " + signature.getSignature());
} }
throw new UnknownFragmentException(signature.toString()); throw new UnknownFragmentException(signature.getSignature());
} }
if(bestTemplate == null) { if(bestTemplate == null) {
AsmFragmentTemplateSynthesizer synthesizer = new AsmFragmentTemplateSynthesizer(signature.getSignature(), log); AsmFragmentTemplateSynthesizer synthesizer = new AsmFragmentTemplateSynthesizer(signature.getSignature(), log);
@ -52,7 +52,7 @@ public class AsmFragmentManager {
log.append("Unknown fragment " + signature.toString()); log.append("Unknown fragment " + signature.toString());
} }
bestFragmentCache.put(signature.getSignature(), UNKNOWN); bestFragmentCache.put(signature.getSignature(), UNKNOWN);
throw new UnknownFragmentException(signature.toString()); throw new UnknownFragmentException(signature.getSignature());
} }
double minScore = Double.MAX_VALUE; double minScore = Double.MAX_VALUE;
double maxScore = Double.MIN_VALUE; double maxScore = Double.MIN_VALUE;
@ -550,7 +550,7 @@ public class AsmFragmentManager {
private String fragmentSignature; private String fragmentSignature;
UnknownFragmentException(String signature) { UnknownFragmentException(String signature) {
super("Fragment not found " + signature + ".asm"); super("Fragment not found " + signature );
this.fragmentSignature = signature; this.fragmentSignature = signature;
} }

View File

@ -1,3 +1,3 @@
cmp {z1} cmp {c1}
bcc {la1} bcc {la1}
beq {la1} beq {la1}

View File

@ -0,0 +1,4 @@
cmp {c1},y
beq !+
bcs {la1}
!:

View File

@ -0,0 +1,3 @@
cmp {c1},y
bcc {la1}
beq {la1}

View File

@ -0,0 +1,2 @@
cmp {c1},y
bcc {la1}

View File

@ -0,0 +1,2 @@
cmp {c1},y
bne {la1}

View File

@ -62,7 +62,7 @@ public class Pass5DoubleJumpElimination extends Pass5AsmOptimization {
AsmInstruction asmInstruction = (AsmInstruction) line; AsmInstruction asmInstruction = (AsmInstruction) line;
if(asmInstruction.getType().isJump()) { if(asmInstruction.getType().isJump()) {
String immediateJmpTarget = immediateJumps.get(currentScope + "::" + asmInstruction.getParameter()); String immediateJmpTarget = immediateJumps.get(currentScope + "::" + asmInstruction.getParameter());
if(immediateJmpTarget != null) { if(immediateJmpTarget != null && !immediateJmpTarget.equals(asmInstruction.getParameter())) {
getLog().append("Skipping double jump to " + immediateJmpTarget + " in " + asmInstruction.toString()); getLog().append("Skipping double jump to " + immediateJmpTarget + " in " + asmInstruction.toString());
asmInstruction.setParameter(immediateJmpTarget); asmInstruction.setParameter(immediateJmpTarget);
optimized = true; optimized = true;

View File

@ -1,10 +1,11 @@
.pc = $801 "Basic" .pc = $801 "Basic"
:BasicUpstart(main) :BasicUpstart(main)
.pc = $80d "Program" .pc = $80d "Program"
.label char_cursor = 9
.label line_cursor = 4 .label line_cursor = 4
.label char_cursor = 8
jsr main jsr main
main: { main: {
.label b = $c
.label a = 2 .label a = 2
.label i = 3 .label i = 3
jsr print_cls jsr print_cls
@ -21,81 +22,384 @@ main: {
lda #7 lda #7
sta a sta a
b1: b1:
lda #$ee lda #$ce
sec sec
sbc a sbc a
tay sta b
lda a lda a
sty $ff cmp b
cmp $ff bcs b23
bcs b6
ldx #'+' ldx #'+'
jmp b2 jmp b2
b6: b23:
ldx #'-' ldx #'-'
b2: b2:
sty printu.b lda b
lda #'<' sta printu.b
lda #<op
sta printu.op sta printu.op
lda #>op
sta printu.op+1
jsr printu jsr printu
lda a lda a
cmp #$87 cmp #$37
bcs b7 bcs b24
ldx #'+' ldx #'+'
jmp b3 jmp b3
b7: b24:
ldx #'-' ldx #'-'
b3: b3:
lda #$87 lda #$37
sta printu.b sta printu.b
lda #'<' lda #<op1
sta printu.op sta printu.op
lda #>op1
sta printu.op+1
jsr printu jsr printu
lda a lda a
ldy i ldy i
cmp cs,y cmp cs,y
bcs b8 bcs b25
ldx #'+' ldx #'+'
jmp b4 jmp b4
b8: b25:
ldx #'-' ldx #'-'
b4: b4:
ldy i ldy i
lda cs,y lda cs,y
sta printu.b sta printu.b
lda #'<' lda #<op2
sta printu.op sta printu.op
lda #>op2
sta printu.op+1
jsr printu jsr printu
lda a lda a
cmp a cmp a
bcs b9 bcs b26
ldx #'+' ldx #'+'
jmp b5 jmp b5
b9: b26:
ldx #'-' ldx #'-'
b5: b5:
lda a lda a
sta printu.b sta printu.b
lda #'<' lda #<op3
sta printu.op sta printu.op
lda #>op3
sta printu.op+1
jsr printu
jsr print_ln
lda b
cmp a
bcs b27
ldx #'+'
jmp b6
b27:
ldx #'-'
b6:
lda b
sta printu.b
lda line_cursor
sta char_cursor
lda line_cursor+1
sta char_cursor+1
lda #<op4
sta printu.op
lda #>op4
sta printu.op+1
jsr printu
lda a
cmp #$37
bcc b28
beq b28
ldx #'+'
jmp b7
b28:
ldx #'-'
b7:
lda #$37
sta printu.b
lda #<op5
sta printu.op
lda #>op5
sta printu.op+1
jsr printu
lda a
ldy i
cmp cs,y
bcc b29
beq b29
ldx #'+'
jmp b8
b29:
ldx #'-'
b8:
ldy i
lda cs,y
sta printu.b
lda #<op6
sta printu.op
lda #>op6
sta printu.op+1
jsr printu
lda a
cmp a
bcs b30
ldx #'+'
jmp b9
b30:
ldx #'-'
b9:
lda a
sta printu.b
lda #<op7
sta printu.op
lda #>op7
sta printu.op+1
jsr printu
jsr print_ln
lda b
cmp a
bcc b31
ldx #'+'
jmp b10
b31:
ldx #'-'
b10:
lda b
sta printu.b
lda line_cursor
sta char_cursor
lda line_cursor+1
sta char_cursor+1
lda #<op8
sta printu.op
lda #>op8
sta printu.op+1
jsr printu
lda a
cmp #$37
beq !+
bcs b32
!:
ldx #'+'
jmp b11
b32:
ldx #'-'
b11:
lda #$37
sta printu.b
lda #<op9
sta printu.op
lda #>op9
sta printu.op+1
jsr printu
lda a
ldy i
cmp cs,y
beq !+
bcs b33
!:
ldx #'+'
jmp b12
b33:
ldx #'-'
b12:
ldy i
lda cs,y
sta printu.b
lda #<op10
sta printu.op
lda #>op10
sta printu.op+1
jsr printu
lda a
cmp a
bcc b34
ldx #'+'
jmp b13
b34:
ldx #'-'
b13:
lda a
sta printu.b
lda #<op11
sta printu.op
lda #>op11
sta printu.op+1
jsr printu
jsr print_ln
lda a
cmp b
bcc b35
ldx #'+'
jmp b14
b35:
ldx #'-'
b14:
lda b
sta printu.b
lda line_cursor
sta char_cursor
lda line_cursor+1
sta char_cursor+1
lda #<op12
sta printu.op
lda #>op12
sta printu.op+1
jsr printu
lda a
cmp #$37
bcc b36
ldx #'+'
jmp b15
b36:
ldx #'-'
b15:
lda #$37
sta printu.b
lda #<op13
sta printu.op
lda #>op13
sta printu.op+1
jsr printu
lda a
ldy i
cmp cs,y
bcc b37
ldx #'+'
jmp b16
b37:
ldx #'-'
b16:
ldy i
lda cs,y
sta printu.b
lda #<op14
sta printu.op
lda #>op14
sta printu.op+1
jsr printu
lda a
cmp a
bcc b38
ldx #'+'
jmp b17
b38:
ldx #'-'
b17:
lda a
sta printu.b
lda #<op15
sta printu.op
lda #>op15
sta printu.op+1
jsr printu
jsr print_ln
lda a
cmp b
bne b39
ldx #'+'
jmp b18
b39:
ldx #'-'
b18:
lda b
sta printu.b
lda line_cursor
sta char_cursor
lda line_cursor+1
sta char_cursor+1
lda #<op16
sta printu.op
lda #>op16
sta printu.op+1
jsr printu
lda a
cmp #$37
bne b40
ldx #'+'
jmp b19
b40:
ldx #'-'
b19:
lda #$37
sta printu.b
lda #<op17
sta printu.op
lda #>op17
sta printu.op+1
jsr printu
lda a
ldy i
cmp cs,y
bne b41
ldx #'+'
jmp b20
b41:
ldx #'-'
b20:
ldy i
lda cs,y
sta printu.b
lda #<op18
sta printu.op
lda #>op18
sta printu.op+1
jsr printu
lda a
cmp a
bne b42
ldx #'+'
jmp b21
b42:
ldx #'-'
b21:
lda a
sta printu.b
lda #<op19
sta printu.op
lda #>op19
sta printu.op+1
jsr printu jsr printu
jsr print_ln jsr print_ln
lda a lda a
clc clc
adc #$10 adc #$30
sta a sta a
inc i inc i
lda i lda i
cmp #$10 cmp #5
bne b17 bne b71
rts b22:
b17: jmp b22
b71:
lda line_cursor lda line_cursor
sta char_cursor sta char_cursor
lda line_cursor+1 lda line_cursor+1
sta char_cursor+1 sta char_cursor+1
jmp b1 jmp b1
cs: .byte 7, $f7, $17, $e7, $27, $d7, $37, $c7, $47, $b7, $57, $a7, $67, $97, $77, $87 op: .text "< @"
op1: .text "< @"
op2: .text "< @"
op3: .text "< @"
op4: .text "> @"
op5: .text "> @"
op6: .text "> @"
op7: .text "> @"
op8: .text "<=@"
op9: .text "<=@"
op10: .text "<=@"
op11: .text "<=@"
op12: .text ">=@"
op13: .text ">=@"
op14: .text ">=@"
op15: .text ">=@"
op16: .text "==@"
op17: .text "==@"
op18: .text "==@"
op19: .text "==@"
cs: .byte 7, $c7, $37, $97, $67
} }
print_ln: { print_ln: {
b1: b1:
@ -118,15 +422,14 @@ print_ln: {
} }
printu: { printu: {
.label a = 2 .label a = 2
.label b = 7 .label b = 8
.label op = 6 .label op = 6
lda #' ' lda #' '
jsr print_char jsr print_char
lda a lda a
sta print_byte.b sta print_byte.b
jsr print_byte jsr print_byte
lda op jsr print_str
jsr print_char
lda b lda b
sta print_byte.b sta print_byte.b
jsr print_byte jsr print_byte
@ -146,7 +449,7 @@ print_char: {
rts rts
} }
print_byte: { print_byte: {
.label b = $a .label b = $b
lda b lda b
lsr lsr
lsr lsr
@ -163,6 +466,28 @@ print_byte: {
rts rts
hextab: .text "0123456789abcdef" hextab: .text "0123456789abcdef"
} }
print_str: {
.label str = 6
b1:
ldy #0
lda (str),y
cmp #'@'
bne b2
rts
b2:
ldy #0
lda (str),y
sta (char_cursor),y
inc char_cursor
bne !+
inc char_cursor+1
!:
inc str
bne !+
inc str+1
!:
jmp b1
}
print_cls: { print_cls: {
.label sc = 4 .label sc = 4
lda #<$400 lda #<$400

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,56 +2,153 @@
(label) @begin (label) @begin
(label) @end (label) @end
(byte*) char_cursor (byte*) char_cursor
(byte*) char_cursor#27 char_cursor zp ZP_WORD:8 8.0 (byte*) char_cursor#1 char_cursor zp ZP_WORD:9 11.0
(byte*) char_cursor#28 char_cursor zp ZP_WORD:8 3.041666666666665 (byte*) char_cursor#114 char_cursor zp ZP_WORD:9 2.75
(byte*) char_cursor#45 char_cursor zp ZP_WORD:8 46.0 (byte*~) char_cursor#137 char_cursor zp ZP_WORD:9 22.0
(byte*) char_cursor#46 char_cursor zp ZP_WORD:8 2.75 (byte*~) char_cursor#138 char_cursor zp ZP_WORD:9 22.0
(byte*~) char_cursor#58 char_cursor zp ZP_WORD:8 22.0 (byte*~) char_cursor#142 char_cursor zp ZP_WORD:9 22.0
(byte*~) char_cursor#146 char_cursor zp ZP_WORD:9 22.0
(byte*~) char_cursor#154 char_cursor zp ZP_WORD:9 22.0
(byte*) char_cursor#2 char_cursor zp ZP_WORD:9 6.166666666666666
(byte*) char_cursor#51 char_cursor zp ZP_WORD:9 7.0
(byte*) char_cursor#52 char_cursor zp ZP_WORD:9 2.106060606060605
(byte*) char_cursor#89 char_cursor zp ZP_WORD:9 2.0
(byte*) char_cursor#90 char_cursor zp ZP_WORD:9 222.0
(byte*) line_cursor (byte*) line_cursor
(byte*) line_cursor#1 line_cursor zp ZP_WORD:4 40.625 (byte*) line_cursor#1 line_cursor zp ZP_WORD:4 3.2265625
(byte*) line_cursor#13 line_cursor zp ZP_WORD:4 0.41935483870967744 (byte*) line_cursor#10 line_cursor zp ZP_WORD:4 204.0
(byte*) line_cursor#6 line_cursor zp ZP_WORD:4 204.0 (byte*) line_cursor#20 line_cursor zp ZP_WORD:4 57.0
(byte*) line_cursor#21 line_cursor zp ZP_WORD:4 0.7333333333333333
(void()) main() (void()) main()
(label) main::@1 (label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12 (label) main::@12
(label) main::@13 (label) main::@13
(label) main::@14 (label) main::@14
(label) main::@15 (label) main::@15
(label) main::@16 (label) main::@16
(label) main::@17 (label) main::@17
(label) main::@18
(label) main::@19
(label) main::@2 (label) main::@2
(label) main::@20
(label) main::@21
(label) main::@22
(label) main::@23
(label) main::@24
(label) main::@25
(label) main::@26
(label) main::@27
(label) main::@28
(label) main::@29
(label) main::@3 (label) main::@3
(label) main::@30
(label) main::@31
(label) main::@32
(label) main::@33
(label) main::@34
(label) main::@35
(label) main::@36
(label) main::@37
(label) main::@38
(label) main::@39
(label) main::@4 (label) main::@4
(label) main::@40
(label) main::@41
(label) main::@42
(label) main::@46
(label) main::@47
(label) main::@48
(label) main::@49
(label) main::@5 (label) main::@5
(label) main::@50
(label) main::@51
(label) main::@52
(label) main::@53
(label) main::@54
(label) main::@55
(label) main::@56
(label) main::@57
(label) main::@58
(label) main::@59
(label) main::@6 (label) main::@6
(label) main::@60
(label) main::@61
(label) main::@62
(label) main::@63
(label) main::@64
(label) main::@65
(label) main::@66
(label) main::@67
(label) main::@68
(label) main::@69
(label) main::@7 (label) main::@7
(label) main::@70
(label) main::@71
(label) main::@8 (label) main::@8
(label) main::@9 (label) main::@9
(label) main::@return (label) main::@return
(byte) main::a (byte) main::a
(byte) main::a#1 a zp ZP_BYTE:2 5.5 (byte) main::a#1 a zp ZP_BYTE:2 5.5
(byte) main::a#10 a zp ZP_BYTE:2 4.612903225806452 (byte) main::a#10 a zp ZP_BYTE:2 3.860927152317884
(byte) main::b (byte) main::b
(byte) main::b#0 reg byte y 6.6000000000000005 (byte) main::b#0 b zp ZP_BYTE:12 0.9758064516129035
(byte[16]) main::cs (byte[5]) main::cs
(const byte[16]) main::cs#0 cs = { (byte/signed byte/word/signed word) 7, (byte/word/signed word) 247, (byte/signed byte/word/signed word) 23, (byte/word/signed word) 231, (byte/signed byte/word/signed word) 39, (byte/word/signed word) 215, (byte/signed byte/word/signed word) 55, (byte/word/signed word) 199, (byte/signed byte/word/signed word) 71, (byte/word/signed word) 183, (byte/signed byte/word/signed word) 87, (byte/word/signed word) 167, (byte/signed byte/word/signed word) 103, (byte/word/signed word) 151, (byte/signed byte/word/signed word) 119, (byte/word/signed word) 135 } (const byte[5]) main::cs#0 cs = { (byte/signed byte/word/signed word) 7, (byte/word/signed word) 199, (byte/signed byte/word/signed word) 55, (byte/word/signed word) 151, (byte/signed byte/word/signed word) 103 }
(byte) main::i (byte) main::i
(byte) main::i#1 i zp ZP_BYTE:3 11.0 (byte) main::i#1 i zp ZP_BYTE:3 11.0
(byte) main::i#10 i zp ZP_BYTE:3 1.375 (byte) main::i#10 i zp ZP_BYTE:3 0.8684210526315792
(const string) main::op op = (string) "< @"
(const string) main::op1 op1 = (string) "< @"
(const string) main::op10 op10 = (string) "<=@"
(const string) main::op11 op11 = (string) "<=@"
(const string) main::op12 op12 = (string) ">=@"
(const string) main::op13 op13 = (string) ">=@"
(const string) main::op14 op14 = (string) ">=@"
(const string) main::op15 op15 = (string) ">=@"
(const string) main::op16 op16 = (string) "==@"
(const string) main::op17 op17 = (string) "==@"
(const string) main::op18 op18 = (string) "==@"
(const string) main::op19 op19 = (string) "==@"
(const string) main::op2 op2 = (string) "< @"
(const string) main::op3 op3 = (string) "< @"
(const string) main::op4 op4 = (string) "> @"
(const string) main::op5 op5 = (string) "> @"
(const string) main::op6 op6 = (string) "> @"
(const string) main::op7 op7 = (string) "> @"
(const string) main::op8 op8 = (string) "<=@"
(const string) main::op9 op9 = (string) "<=@"
(byte) main::r (byte) main::r
(byte) main::r#10 reg byte x 3.6666666666666665 (byte) main::r#40 reg byte x 3.6666666666666665
(byte) main::r#11 reg byte x 3.6666666666666665 (byte) main::r#41 reg byte x 5.5
(byte) main::r#8 reg byte x 3.6666666666666665 (byte) main::r#42 reg byte x 3.6666666666666665
(byte) main::r#9 reg byte x 5.5 (byte) main::r#43 reg byte x 3.6666666666666665
(byte) main::r#44 reg byte x 3.6666666666666665
(byte) main::r#45 reg byte x 5.5
(byte) main::r#46 reg byte x 3.6666666666666665
(byte) main::r#47 reg byte x 3.6666666666666665
(byte) main::r#48 reg byte x 3.6666666666666665
(byte) main::r#49 reg byte x 5.5
(byte) main::r#50 reg byte x 3.6666666666666665
(byte) main::r#51 reg byte x 3.6666666666666665
(byte) main::r#52 reg byte x 3.6666666666666665
(byte) main::r#53 reg byte x 5.5
(byte) main::r#54 reg byte x 3.6666666666666665
(byte) main::r#55 reg byte x 3.6666666666666665
(byte) main::r#56 reg byte x 3.6666666666666665
(byte) main::r#57 reg byte x 5.5
(byte) main::r#58 reg byte x 3.6666666666666665
(byte) main::r#59 reg byte x 3.6666666666666665
(void()) print_byte((byte) print_byte::b) (void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte y 4.0 (byte~) print_byte::$0 reg byte y 4.0
(byte~) print_byte::$2 reg byte y 4.0 (byte~) print_byte::$2 reg byte y 4.0
(label) print_byte::@1 (label) print_byte::@1
(label) print_byte::@return (label) print_byte::@return
(byte) print_byte::b (byte) print_byte::b
(byte) print_byte::b#0 b zp ZP_BYTE:10 4.0 (byte) print_byte::b#0 b zp ZP_BYTE:11 4.0
(byte) print_byte::b#1 b zp ZP_BYTE:10 4.0 (byte) print_byte::b#1 b zp ZP_BYTE:11 4.0
(byte) print_byte::b#2 b zp ZP_BYTE:10 2.0 (byte) print_byte::b#2 b zp ZP_BYTE:11 2.0
(byte[]) print_byte::hextab (byte[]) print_byte::hextab
(const string) print_byte::hextab#0 hextab = (string) "0123456789abcdef" (const string) print_byte::hextab#0 hextab = (string) "0123456789abcdef"
(void()) print_char((byte) print_char::ch) (void()) print_char((byte) print_char::ch)
@ -59,9 +156,8 @@
(byte) print_char::ch (byte) print_char::ch
(byte) print_char::ch#0 reg byte a 4.0 (byte) print_char::ch#0 reg byte a 4.0
(byte) print_char::ch#1 reg byte a 4.0 (byte) print_char::ch#1 reg byte a 4.0
(byte) print_char::ch#3 reg byte a 4.0 (byte) print_char::ch#4 reg byte a 4.0
(byte) print_char::ch#5 reg byte a 4.0 (byte) print_char::ch#5 reg byte a 8.0
(byte) print_char::ch#6 reg byte a 10.0
(void()) print_cls() (void()) print_cls()
(label) print_cls::@1 (label) print_cls::@1
(label) print_cls::@return (label) print_cls::@return
@ -71,7 +167,15 @@
(void()) print_ln() (void()) print_ln()
(label) print_ln::@1 (label) print_ln::@1
(label) print_ln::@return (label) print_ln::@return
(void()) printu((byte) printu::a , (byte) printu::op , (byte) printu::b , (byte) printu::res) (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 ZP_WORD:6 22.0
(byte*) print_str::str#1 str zp ZP_WORD:6 2.0
(byte*) print_str::str#2 str zp ZP_WORD:6 11.5
(void()) printu((byte) printu::a , (byte[]) printu::op , (byte) printu::b , (byte) printu::res)
(label) printu::@1 (label) printu::@1
(label) printu::@2 (label) printu::@2
(label) printu::@3 (label) printu::@3
@ -81,36 +185,96 @@
(byte) printu::a (byte) printu::a
(byte) printu::a#0 a zp ZP_BYTE:2 7.333333333333333 (byte) printu::a#0 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#1 a zp ZP_BYTE:2 11.0 (byte) printu::a#1 a zp ZP_BYTE:2 11.0
(byte) printu::a#10 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#11 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#12 a zp ZP_BYTE:2 5.5
(byte) printu::a#13 a zp ZP_BYTE:2 11.0
(byte) printu::a#14 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#15 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#16 a zp ZP_BYTE:2 5.5
(byte) printu::a#17 a zp ZP_BYTE:2 11.0
(byte) printu::a#18 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#19 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#2 a zp ZP_BYTE:2 7.333333333333333 (byte) printu::a#2 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#20 a zp ZP_BYTE:2 111.0
(byte) printu::a#3 a zp ZP_BYTE:2 7.333333333333333 (byte) printu::a#3 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#4 a zp ZP_BYTE:2 23.0 (byte) printu::a#4 a zp ZP_BYTE:2 5.5
(byte) printu::a#5 a zp ZP_BYTE:2 11.0
(byte) printu::a#6 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#7 a zp ZP_BYTE:2 7.333333333333333
(byte) printu::a#8 a zp ZP_BYTE:2 5.5
(byte) printu::a#9 a zp ZP_BYTE:2 11.0
(byte) printu::b (byte) printu::b
(byte) printu::b#0 b zp ZP_BYTE:7 11.0 (byte) printu::b#0 b zp ZP_BYTE:8 11.0
(byte) printu::b#2 b zp ZP_BYTE:7 11.0 (byte) printu::b#10 b zp ZP_BYTE:8 11.0
(byte) printu::b#3 b zp ZP_BYTE:7 11.0 (byte) printu::b#11 b zp ZP_BYTE:8 11.0
(byte) printu::b#4 b zp ZP_BYTE:7 5.833333333333333 (byte) printu::b#12 b zp ZP_BYTE:8 7.333333333333333
(byte) printu::op (byte) printu::b#14 b zp ZP_BYTE:8 11.0
(byte) printu::op#4 op zp ZP_BYTE:6 0.5 (byte) printu::b#15 b zp ZP_BYTE:8 11.0
(byte) printu::b#16 b zp ZP_BYTE:8 7.333333333333333
(byte) printu::b#18 b zp ZP_BYTE:8 11.0
(byte) printu::b#19 b zp ZP_BYTE:8 11.0
(byte) printu::b#2 b zp ZP_BYTE:8 11.0
(byte) printu::b#20 b zp ZP_BYTE:8 27.833333333333325
(byte) printu::b#3 b zp ZP_BYTE:8 11.0
(byte) printu::b#4 b zp ZP_BYTE:8 7.333333333333333
(byte) printu::b#6 b zp ZP_BYTE:8 11.0
(byte) printu::b#7 b zp ZP_BYTE:8 11.0
(byte) printu::b#8 b zp ZP_BYTE:8 7.333333333333333
(byte[]) printu::op
(byte[]) printu::op#20 op zp ZP_WORD:6 0.5
(byte) printu::res (byte) printu::res
(byte) printu::res#0 reg byte x 22.0 (byte) printu::res#0 reg byte x 22.0
(byte) printu::res#1 reg byte x 22.0 (byte) printu::res#1 reg byte x 22.0
(byte) printu::res#10 reg byte x 22.0
(byte) printu::res#11 reg byte x 22.0
(byte) printu::res#12 reg byte x 11.0
(byte) printu::res#13 reg byte x 22.0
(byte) printu::res#14 reg byte x 22.0
(byte) printu::res#15 reg byte x 22.0
(byte) printu::res#16 reg byte x 11.0
(byte) printu::res#17 reg byte x 22.0
(byte) printu::res#18 reg byte x 22.0
(byte) printu::res#19 reg byte x 22.0
(byte) printu::res#2 reg byte x 22.0 (byte) printu::res#2 reg byte x 22.0
(byte) printu::res#20 reg byte x 22.200000000000003
(byte) printu::res#3 reg byte x 22.0 (byte) printu::res#3 reg byte x 22.0
(byte) printu::res#4 reg byte x 4.6000000000000005 (byte) printu::res#4 reg byte x 11.0
(byte) printu::res#5 reg byte x 22.0
(byte) printu::res#6 reg byte x 22.0
(byte) printu::res#7 reg byte x 22.0
(byte) printu::res#8 reg byte x 11.0
(byte) printu::res#9 reg byte x 22.0
zp ZP_BYTE:2 [ main::a#10 main::a#1 printu::a#4 printu::a#0 printu::a#1 printu::a#2 printu::a#3 ] zp ZP_BYTE:2 [ main::a#10 main::a#1 printu::a#20 printu::a#8 printu::a#9 printu::a#10 printu::a#11 printu::a#12 printu::a#13 printu::a#14 printu::a#15 printu::a#16 printu::a#17 printu::a#0 printu::a#18 printu::a#19 printu::a#1 printu::a#2 printu::a#3 printu::a#4 printu::a#5 printu::a#6 printu::a#7 ]
zp ZP_BYTE:3 [ main::i#10 main::i#1 ] zp ZP_BYTE:3 [ main::i#10 main::i#1 ]
reg byte x [ main::r#8 ] reg byte x [ main::r#40 ]
reg byte x [ main::r#9 ] reg byte x [ main::r#41 ]
reg byte x [ main::r#10 ] reg byte x [ main::r#42 ]
reg byte x [ main::r#11 ] reg byte x [ main::r#43 ]
zp ZP_WORD:4 [ line_cursor#6 line_cursor#13 line_cursor#1 print_cls::sc#2 print_cls::sc#1 ] reg byte x [ main::r#44 ]
zp ZP_BYTE:6 [ printu::op#4 ] reg byte x [ main::r#45 ]
zp ZP_BYTE:7 [ printu::b#4 printu::b#0 printu::b#2 printu::b#3 ] reg byte x [ main::r#46 ]
reg byte x [ printu::res#4 printu::res#0 printu::res#1 printu::res#2 printu::res#3 ] reg byte x [ main::r#47 ]
reg byte a [ print_char::ch#6 print_char::ch#0 print_char::ch#1 print_char::ch#3 print_char::ch#5 ] reg byte x [ main::r#48 ]
zp ZP_WORD:8 [ char_cursor#27 char_cursor#45 char_cursor#46 char_cursor#58 char_cursor#28 ] reg byte x [ main::r#49 ]
zp ZP_BYTE:10 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ] reg byte x [ main::r#50 ]
reg byte y [ main::b#0 ] reg byte x [ main::r#51 ]
reg byte x [ main::r#52 ]
reg byte x [ main::r#53 ]
reg byte x [ main::r#54 ]
reg byte x [ main::r#55 ]
reg byte x [ main::r#56 ]
reg byte x [ main::r#57 ]
reg byte x [ main::r#58 ]
reg byte x [ main::r#59 ]
zp ZP_WORD:4 [ line_cursor#10 line_cursor#20 line_cursor#21 line_cursor#1 print_cls::sc#2 print_cls::sc#1 ]
zp ZP_WORD:6 [ printu::op#20 print_str::str#2 print_str::str#1 print_str::str#0 ]
zp ZP_BYTE:8 [ printu::b#20 printu::b#8 printu::b#10 printu::b#11 printu::b#12 printu::b#14 printu::b#15 printu::b#16 printu::b#0 printu::b#18 printu::b#19 printu::b#2 printu::b#3 printu::b#4 printu::b#6 printu::b#7 ]
reg byte x [ printu::res#20 printu::res#8 printu::res#9 printu::res#10 printu::res#11 printu::res#12 printu::res#13 printu::res#14 printu::res#15 printu::res#16 printu::res#17 printu::res#0 printu::res#18 printu::res#19 printu::res#1 printu::res#2 printu::res#3 printu::res#4 printu::res#5 printu::res#6 printu::res#7 ]
reg byte a [ print_char::ch#5 print_char::ch#0 print_char::ch#1 print_char::ch#4 ]
zp ZP_WORD:9 [ char_cursor#51 char_cursor#89 char_cursor#90 char_cursor#138 char_cursor#52 char_cursor#142 char_cursor#146 char_cursor#114 char_cursor#137 char_cursor#154 char_cursor#2 char_cursor#1 ]
zp ZP_BYTE:11 [ print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
zp ZP_BYTE:12 [ main::b#0 ]
reg byte y [ print_byte::$0 ] reg byte y [ print_byte::$0 ]
reg byte y [ print_byte::$2 ] reg byte y [ print_byte::$2 ]

View File

@ -2,26 +2,48 @@ import "print.kc"
void main() { void main() {
print_cls(); print_cls();
byte r;
byte[$10] cs = { $07, $f7, $17, $e7, $27, $d7 , $37, $c7, $47, $b7, $57, $a7, $67, $97, $77, $87 };
byte a = 7; byte a = 7;
for( byte i : 0..$f ) { for( byte i : 0..4 ) {
byte b = $ee-a; byte r;
r = '-'; if(a<b) r='+'; printu(a, '<', b, r); byte b = $ce-a;
r = '-'; if(a<$87) r='+'; printu(a, '<', $87, r); byte[5] cs = { $07, $c7, $37, $97, $67 };
r = '-'; if(a<cs[i]) r='+'; printu(a, '<', cs[i], r); r = '-'; if(a<b) r='+'; printu(a, "< @", b, r);
r = '-'; if(a<a) r='+'; printu(a, '<', a, r); r = '-'; if(a<$37) r='+'; printu(a, "< @", $37, r);
r = '-'; if(a<cs[i]) r='+'; printu(a, "< @", cs[i], r);
r = '-'; if(a<a) r='+'; printu(a, "< @", a, r);
print_ln(); print_ln();
a=a+$10; r = '-'; if(a>b) r='+'; printu(a, "> @", b, r);
r = '-'; if(a>$37) r='+'; printu(a, "> @", $37, r);
r = '-'; if(a>cs[i]) r='+'; printu(a, "> @", cs[i], r);
r = '-'; if(a>a) r='+'; printu(a, "> @", a, r);
print_ln();
r = '-'; if(a<=b) r='+'; printu(a, "<=@", b, r);
r = '-'; if(a<=$37) r='+'; printu(a, "<=@", $37, r);
r = '-'; if(a<=cs[i]) r='+'; printu(a, "<=@", cs[i], r);
r = '-'; if(a<=a) r='+'; printu(a, "<=@", a, r);
print_ln();
r = '-'; if(a>=b) r='+'; printu(a, ">=@", b, r);
r = '-'; if(a>=$37) r='+'; printu(a, ">=@", $37, r);
r = '-'; if(a>=cs[i]) r='+'; printu(a, ">=@", cs[i], r);
r = '-'; if(a>=a) r='+'; printu(a, ">=@", a, r);
print_ln();
r = '-'; if(a==b) r='+'; printu(a, "==@", b, r);
r = '-'; if(a==$37) r='+'; printu(a, "==@", $37, r);
r = '-'; if(a==cs[i]) r='+'; printu(a, "==@", cs[i], r);
r = '-'; if(a==a) r='+'; printu(a, "==@", a, r);
print_ln();
a=a+$30;
} }
do {
// nothing;
} while(true);
} }
void printu(byte a, byte op, byte b, byte res) { void printu(byte a, byte[] op, byte b, byte res) {
print_char(' '); print_char(' ');
print_byte(a); print_byte(a);
print_char(op); print_str(op);
print_byte(b); print_byte(b);
print_char(' '); print_char(' ');
print_char(res); print_char(res);