aboutsummaryrefslogtreecommitdiff
path: root/example.asm
blob: 2ab0ee77423042cff0522847e3e344e55f58d9f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
;
; example.asm for TR8
;
.org 0

; address of the frame interrupt vector
.equ INT_VECT 0xff00

    ; setup an int handler so we
    ; can use the frame int to sync
    ld a, >INT_VECT
    ld x, <INT_VECT
    ld b, <int_handler
    ld [a : x], b
    inc x
    ld b, >int_handler
    ld [a : x], b

    ; enable interrupts
    cif

    ; loop filling the screen with one
    ; colour cycling the whole palette
    ld b, 0
loop:
    call fill
    inc b
    and b, 15

    push b
    call draw_sprite
    pop b

    ; wait 1 second
    ld x, 60
wait_loop:
    halt
    dec x
    bnz
    jmp wait_loop

    jmp loop

    ; fill frame-buffer with a color in reg b
fill:
    ld a, 0xbf
    ld x, 0
    ld y, 0x40
fill_loop:
    ld [a : x], b
    inc x
    bno
    jmp fill_loop
    inc a
    dec y
    bnz
    jmp fill_loop
    ret

int_handler:
    iret

draw_sprite:
    push y
    ld y, 16
    ld [sp + 0], y

    ; src
    ld a, >sprite
    ld x, <sprite

    ; dst
    ld b, 0xdb
    ld y, 56
line:
    push x
    ld x, [a : x]

    ; any color with index > 15
    ; is transparent
    cmp x, 16
    bnc
    jmp transparent

    ld [b : y], x

transparent:
    pop x

    inc x
    bo
    inc a

    inc y

    push y
    ld y, [sp + 1]
    dec y
    ld [sp + 1], y
    pop y

    bnz
    jmp line

    add y, 112
    bo
    inc b

    cmp x, <end_sprite
    bnz
    jmp next_row
    cmp a, >end_sprite
    bz
    jmp done

next_row:
    push y
    ld y, 16
    ld [sp + 1], y
    pop y

    jmp line

done:
    pop y
    ret

sprite:
    .incpng "assets/icon.png"
end_sprite: