1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-29 03:56:15 +00:00
kickc/src/test/ref/test-comparisons.asm

502 lines
7.0 KiB
NASM
Raw Normal View History

.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
2018-03-25 21:40:38 +00:00
.label print_char_cursor = 9
.label print_line_cursor = 4
main: {
.label b = $c
.label a = 2
.label i = 3
jsr print_cls
2018-03-25 21:40:38 +00:00
lda #<$400
sta print_line_cursor
lda #>$400
sta print_line_cursor+1
lda #0
sta i
2018-03-25 21:40:38 +00:00
lda #<$400
sta print_char_cursor
lda #>$400
sta print_char_cursor+1
lda #7
sta a
b1:
lda #$ce
sec
sbc a
sta b
lda a
cmp b
bcs b23
ldx #'+'
jmp b2
b23:
ldx #'-'
b2:
lda b
sta printu.b
lda #<op
sta printu.op
lda #>op
sta printu.op+1
jsr printu
lda a
cmp #$37
bcs b24
ldx #'+'
jmp b3
b24:
ldx #'-'
b3:
lda #$37
sta printu.b
lda #<op
sta printu.op
lda #>op
sta printu.op+1
jsr printu
lda a
ldy i
cmp cs,y
bcs b25
ldx #'+'
jmp b4
b25:
ldx #'-'
b4:
ldy i
lda cs,y
sta printu.b
lda #<op
sta printu.op
lda #>op
sta printu.op+1
jsr printu
lda a
cmp a
bcs b26
ldx #'+'
jmp b5
b26:
ldx #'-'
b5:
lda a
sta printu.b
lda #<op
sta printu.op
lda #>op
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
2018-03-25 21:40:38 +00:00
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
sta print_char_cursor+1
lda #<op4
sta printu.op
lda #>op4
sta printu.op+1
jsr printu
2018-01-05 21:29:21 +00:00
lda #$37
cmp a
bcs b28
ldx #'+'
jmp b7
b28:
ldx #'-'
b7:
lda #$37
sta printu.b
lda #<op4
sta printu.op
lda #>op4
sta printu.op+1
jsr printu
ldy i
2018-01-05 21:29:21 +00:00
lda cs,y
cmp a
bcs b29
ldx #'+'
jmp b8
b29:
ldx #'-'
b8:
ldy i
lda cs,y
sta printu.b
lda #<op4
sta printu.op
lda #>op4
sta printu.op+1
jsr printu
lda a
cmp a
bcs b30
ldx #'+'
jmp b9
b30:
ldx #'-'
b9:
lda a
sta printu.b
lda #<op4
sta printu.op
lda #>op4
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
2018-03-25 21:40:38 +00:00
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
sta print_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 #<op8
sta printu.op
lda #>op8
sta printu.op+1
jsr printu
ldy i
2018-01-05 21:29:21 +00:00
lda cs,y
cmp a
bcc b33
ldx #'+'
jmp b12
b33:
ldx #'-'
b12:
ldy i
lda cs,y
sta printu.b
lda #<op8
sta printu.op
lda #>op8
sta printu.op+1
jsr printu
lda a
cmp a
bcc b34
ldx #'+'
jmp b13
b34:
ldx #'-'
b13:
lda a
sta printu.b
lda #<op8
sta printu.op
lda #>op8
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
2018-03-25 21:40:38 +00:00
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
sta print_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 #<op12
sta printu.op
lda #>op12
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 #<op12
sta printu.op
lda #>op12
sta printu.op+1
jsr printu
lda a
cmp a
bcc b38
ldx #'+'
jmp b17
b38:
ldx #'-'
b17:
lda a
sta printu.b
lda #<op12
sta printu.op
lda #>op12
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
2018-03-25 21:40:38 +00:00
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
sta print_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 #<op16
sta printu.op
lda #>op16
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 #<op16
sta printu.op
lda #>op16
sta printu.op+1
jsr printu
lda a
cmp a
bne b42
ldx #'+'
jmp b21
b42:
ldx #'-'
b21:
lda a
sta printu.b
lda #<op16
sta printu.op
lda #>op16
sta printu.op+1
jsr printu
jsr print_ln
2018-01-05 21:29:21 +00:00
lda #$30
clc
2018-01-05 21:29:21 +00:00
adc a
sta a
inc i
lda i
cmp #5
bne b71
b22:
jmp b22
b71:
2018-03-25 21:40:38 +00:00
lda print_line_cursor
sta print_char_cursor
lda print_line_cursor+1
sta print_char_cursor+1
jmp b1
op: .text "< @"
op4: .text "> @"
op8: .text "<=@"
op12: .text ">=@"
op16: .text "==@"
cs: .byte 7, $c7, $37, $97, $67
}
2019-02-17 23:12:29 +00:00
// Print a newline
print_ln: {
b1:
2019-03-18 01:23:29 +00:00
lda #$28
clc
2019-03-18 01:23:29 +00:00
adc print_line_cursor
2018-03-25 21:40:38 +00:00
sta print_line_cursor
bcc !+
2018-03-25 21:40:38 +00:00
inc print_line_cursor+1
!:
2018-03-25 21:40:38 +00:00
lda print_line_cursor+1
cmp print_char_cursor+1
bcc b1
bne !+
2018-03-25 21:40:38 +00:00
lda print_line_cursor
cmp print_char_cursor
bcc b1
!:
rts
}
// printu(byte zeropage(2) a, byte[] zeropage(6) op, byte zeropage(8) b, byte register(X) res)
printu: {
.label a = 2
.label b = 8
.label op = 6
lda #' '
jsr print_char
lda a
sta print_byte.b
jsr print_byte
jsr print_str
lda b
sta print_byte.b
jsr print_byte
lda #' '
jsr print_char
txa
jsr print_char
rts
}
2019-02-17 23:12:29 +00:00
// Print a single char
// print_char(byte register(A) ch)
print_char: {
ldy #0
2018-03-25 21:40:38 +00:00
sta (print_char_cursor),y
inc print_char_cursor
bne !+
2018-03-25 21:40:38 +00:00
inc print_char_cursor+1
!:
rts
}
2019-02-17 23:12:29 +00:00
// Print a byte as HEX
// print_byte(byte zeropage($b) b)
print_byte: {
.label b = $b
lda b
lsr
lsr
lsr
lsr
tay
lda print_hextab,y
jsr print_char
lda #$f
and b
tay
lda print_hextab,y
jsr print_char
rts
}
2019-02-17 23:12:29 +00:00
// Print a zero-terminated string
// print_str(byte* zeropage(6) str)
print_str: {
.label str = 6
b1:
ldy #0
lda (str),y
cmp #'@'
bne b2
rts
b2:
ldy #0
lda (str),y
2018-03-25 21:40:38 +00:00
sta (print_char_cursor),y
inc print_char_cursor
bne !+
2018-03-25 21:40:38 +00:00
inc print_char_cursor+1
!:
inc str
bne !+
inc str+1
!:
jmp b1
}
2019-02-17 23:12:29 +00:00
// Clear the screen. Also resets current line/char cursor.
print_cls: {
.label sc = 4
2018-03-25 21:40:38 +00:00
lda #<$400
sta sc
2018-03-25 21:40:38 +00:00
lda #>$400
sta sc+1
b1:
lda #' '
ldy #0
sta (sc),y
inc sc
bne !+
inc sc+1
!:
lda sc+1
2018-03-25 21:40:38 +00:00
cmp #>$400+$3e8
bne b1
lda sc
2018-03-25 21:40:38 +00:00
cmp #<$400+$3e8
bne b1
rts
}
print_hextab: .text "0123456789abcdef"