aboutsummaryrefslogtreecommitdiff
path: root/game/text.asm
blob: 0c7a1e647099f2a1a63ca16ee2cfdc02e210bdfb (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
;
; Bitmap font
;

;
; Write text on screen
;
; Expects a 4x8 font on "font" label.
;
; in: [a : x]: text to write
;     b, y: (x, y) dst coords
put_text:
    push y
    push b

put_text_loop:
    ld y, [a : x]
    cmp y, 0
    bz
    jmp put_text_exit

    sub y, 32

    push a
    push x

    rol y, 5
    ld x, y
    and x, 31
    and y, 224

    ld a, >font
    add a, x

    ld x, <font
    add x, y
    bo
    inc a

    call put_text_c

    pop x
    pop a

    inc x
    bo
    inc a

    pop b
    add b, 4
    push b

    jmp put_text_loop

put_text_exit:
    pop b
    pop y
    ret

put_text_c:
    ; settings mode
    ld y, 128
    ld b, 0xb0
    port b, y

    ; setup
    inc b

    ; addr: char sprite
    ld y, x
    port b, y
    ld y, a
    port b, y

    ; x
    ld y, [sp + 4]
    port b, y

    ; y
    ld y, [sp + 5]
    port b, y

    ; w
    ld y, 4
    port b, y
    ; h
    ld y, 8
    port b, y

    ; blit
    dec b
    ; write, transparent
    ld y, 3
    port b, y
    ret

;
; in: [a : x]: number
;     b, y: (x, y) dst coords
;     stack: 1 byte digits
put_bcd_number:
    push y
    push b

put_bcd_number_loop:
    ld y, [a : x]
    inc x
    bo
    inc a

    add y, 16

    push a
    push x

    rol y, 5
    ld x, y
    and x, 31
    and y, 224

    ld a, >font
    add a, x

    ld x, <font
    add x, y
    bo
    inc a

    call put_text_c

    pop x
    pop a

    pop b
    add b, 4
    push b

    ld y, [sp + 4]
    dec y
    ld [sp + 4], y
    bnz
    jmp put_bcd_number_loop

    pop b
    pop y
    ret