]> git.sur5r.net Git - cc65/blob - testcode/lib/gamate/lcdtest.s
remove TABs
[cc65] / testcode / lib / gamate / lcdtest.s
1 ;
2 ; original lcdtest.s by PeT (mess@utanet.at)
3 ;
4 ; cl65 -t gamate -o lcdtest.bin lcdtest.s
5 ;
6
7         .include "gamate.inc"
8
9         .zeropage
10 addr:           .word 0
11 psa:            .word 0
12
13         .bss
14 temp_x:         .byte 0
15 temp_y:         .byte 0
16 temp_a:         .byte 0
17 irq_count:      .byte 0
18 nmi_count:      .byte 0
19 psx:            .byte 0
20 psy:            .byte 0
21 count:          .word 0
22 counted:        .word 0
23 xpos:           .byte 0
24 ypos:           .byte 0
25
26         .rodata
27
28 chars:          .incbin "cga2.chr"
29
30 hex2asc:        .byte "0123456789abcdef"
31 format:         .byte "IrqNmiCountXposYpos", 0
32 xdesc:          .byte "0123456789abcdefghijklmnopqrstuv", 0
33 ydesc:          .byte "0123456789ABCDEFGHIJKLMNOPQRSTUV", 0
34
35         .code
36
37 ;-------------------------------------------------------------------------------
38         .export IRQStub, NMIStub
39
40
41 .proc   NMIStub
42
43         inc     nmi_count
44         rts
45 .endproc
46
47 .proc   IRQStub
48
49         inc     irq_count
50         lda     count
51         sta     counted
52         lda     count+1
53         sta     counted+1
54         lda     #0
55         sta     count
56         sta     count+1
57         rts
58 .endproc
59
60 ;-------------------------------------------------------------------------------
61         .export Start
62
63 .proc   Start
64         sei
65         lda     #0
66         sta     ZP_IRQ_CTRL
67
68         lda #0
69         sta     LCD_XPOS
70         sta     LCD_YPOS
71         cli
72         lda     #LCD_MODE_INC_Y
73         sta     LCD_MODE
74
75         lda     #0
76         sta     LCD_X
77         lda     #<xdesc
78         ldx     #>xdesc
79         ldy     #0
80         jsr     printstring
81
82         lda     #LCD_XPOS_PLANE2
83         sta     LCD_X
84         lda     #<xdesc
85         ldx     #>xdesc
86         ldy     #128
87         jsr     printstring
88
89         lda     #0
90         sta     LCD_X
91         lda     #<ydesc
92         ldx     #>ydesc
93         ldy     #0
94         sty     LCD_Y
95         jsr     printstringy
96
97         lda     #(LCD_XPOS_PLANE2|(128/8))          ; ???
98         sta     LCD_X
99         lda     #<ydesc
100         ldx     #>ydesc
101         ldy     #0
102         sty     LCD_Y
103         jsr     printstringy
104
105         lda     #<format
106         ldx     #>format
107         ldy     #8
108         jsr     printstring
109
110         lda     #0
111         sta     LCD_MODE
112         lda     #24/8
113         sta     LCD_X
114         lda     #24
115         sta     LCD_Y
116         lda     #'X'
117         jsr     printsign
118
119         lda     #$80
120         sta     LCD_MODE
121         lda     #32/8
122         sta     LCD_X
123         lda     #32
124         sta     LCD_Y
125         lda     #'Y'
126         jsr     printsign
127
128         lda     #$c0
129         sta     LCD_MODE
130         lda     #40/8
131         sta     LCD_X
132         lda     #40
133         sta     LCD_Y
134         lda     #'Z'
135         jsr     printsign
136
137         lda     #0
138         sta     LCD_MODE
139         lda     #LCD_XPOS_PLANE2|(48/8)
140         sta     LCD_X
141         lda     #48
142         sta     LCD_Y
143         lda     #'x'
144         jsr     printsign
145
146         lda     #$80
147         sta     LCD_MODE
148         lda     #(LCD_XPOS_PLANE2|(56/8))
149         sta     LCD_X
150         lda     #56
151         sta     LCD_Y
152         lda     #'y'
153         jsr     printsign
154
155         lda     #$c0
156         sta     LCD_MODE
157         lda     #(LCD_XPOS_PLANE2|(64/8))
158         sta     LCD_X
159         lda     #64
160         sta     LCD_Y
161         lda     #'z'
162         jsr     printsign
163
164         lda     #LCD_MODE_INC_Y|1
165         sta     LCD_MODE
166         lda     #16/8
167         sta     LCD_X
168         lda     #72
169         sta     LCD_Y
170         lda     #'V'
171         jsr     printsign
172
173         lda     #LCD_MODE_INC_Y|2
174         sta     LCD_MODE
175         lda     #24/8
176         sta     LCD_X
177         lda     #72
178         sta     LCD_Y
179         lda     #'V'
180         jsr     printsign
181
182         lda     #LCD_MODE_INC_Y|4
183         sta     LCD_MODE
184         lda     #32/8
185         sta     LCD_X
186         lda     #72
187         sta     LCD_Y
188         lda     #'V'
189         jsr     printsign
190
191         lda     #LCD_MODE_INC_Y|8
192         sta     LCD_MODE
193         lda     #40/8
194         sta     LCD_X
195         lda     #72
196         sta     LCD_Y
197         lda     #'V'
198         jsr     printsign
199
200         lda     #1
201         sta     ZP_IRQ_CTRL
202
203 loop:
204         lda     count
205         clc
206         adc     #1
207         sta     count
208         lda     count+1
209         adc     #0
210         sta     count+1
211
212         lda     irq_count
213         cmp     irq_count
214         beq     loop
215
216         jsr     inputs
217
218         lda     #LCD_MODE_INC_Y
219         sta     LCD_MODE
220         jsr     printy
221
222         jmp     loop
223 .endproc
224
225
226 ;-------------------------------------------------------------------------------
227
228 .proc printy
229         ldx     #0
230         ldy     #16
231         lda     irq_count
232         jsr     printhex
233
234         ldx     #3
235         ldy     #16
236         lda     nmi_count
237         jsr     printhex
238
239         ldx     #6
240         ldy     #16
241         lda     counted+1
242         jsr     printhex
243         ldx     #8
244         ldy     #16
245         lda     counted
246         jsr     printhex
247
248         ldx     #11
249         ldy     #16
250         lda     xpos
251         jsr     printhex
252         ldx     #14
253         ldy     #16
254         lda     ypos
255         jsr     printhex
256         rts
257 .endproc
258
259 .proc inputs
260         lda     JOY_DATA
261         and     #JOY_DATA_UP
262         bne     notup
263         dec     ypos
264         lda     ypos
265         sta     LCD_YPOS
266 notup:
267         lda     JOY_DATA
268         and     #JOY_DATA_DOWN
269         bne     notdown
270         inc     ypos
271         lda     ypos
272         sta     LCD_YPOS
273 notdown:
274         lda     JOY_DATA
275         and     #JOY_DATA_LEFT
276         bne     notleft
277         dec     xpos
278         lda     xpos
279         sta     LCD_XPOS
280 notleft:
281         lda     JOY_DATA
282         and     #JOY_DATA_RIGHT
283         bne     notright
284         inc     xpos
285         lda     xpos
286         sta     LCD_XPOS
287 notright:
288         lda     JOY_DATA
289         and     #JOY_DATA_START
290         bne     notstart
291 notstart:
292         lda     JOY_DATA
293         and     #JOY_DATA_SELECT
294         bne     notselect
295 notselect:
296         lda     JOY_DATA
297         and     #JOY_DATA_FIRE_A
298         bne     notbuttona
299 notbuttona:
300         lda     JOY_DATA
301         and     #JOY_DATA_FIRE_B
302         bne     notbuttonb
303 notbuttonb:
304         rts
305 .endproc
306
307 ;-------------------------------------------------------------------------------
308
309 .proc printstring
310         sta     psa
311         stx     psa+1
312         ldx     #0
313         stx     psx
314         sty     psy
315 printstring2:
316         ldy     #0
317         lda     (psa),y
318         beq     printstring1
319         ldx     psx
320         stx     LCD_X
321         ldy      psy
322         sty     LCD_Y
323         jsr     printsign
324         inc     psx
325         lda     psa
326         clc
327         adc     #1
328         sta     psa
329         lda     psa+1
330         adc     #0
331         sta     psa+1
332         jmp     printstring2
333 printstring1:
334         rts
335 .endproc
336
337 .proc printstringy
338         sta     psa
339         stx     psa+1
340 printstring2:
341         ldy     #0
342         lda     (psa),y
343         beq     printstring1
344         jsr     printsign
345         lda     psa
346         clc
347         adc     #1
348         sta     psa
349         lda     psa+1
350         adc     #0
351         sta     psa+1
352         jmp     printstring2
353 printstring1:
354         rts
355 .endproc
356
357
358 .proc printhex
359         pha
360         lsr
361         lsr
362         lsr
363         lsr
364         and     #$0f
365         stx     temp_x
366         tax
367         lda     hex2asc,x
368         ldx     temp_x
369         stx     LCD_X
370         sty     LCD_Y
371         jsr     printsign
372         pla
373         and     #$0f
374         inx
375         stx     temp_x
376         tax
377         lda     hex2asc,x
378         ldx     temp_x
379         stx     LCD_X
380         sty     LCD_Y
381         jmp     printsign
382 .endproc
383
384 .proc printsign
385         sty     temp_y
386         stx     temp_x
387         sta     temp_a
388
389         lda     temp_a
390         sta     addr
391
392         lda     #0
393         sta     addr+1
394         asl     addr
395         rol     addr+1
396         asl     addr
397         rol     addr+1
398         asl     addr
399         rol     addr+1
400
401         lda     addr
402         clc
403         adc     #<chars
404         sta     addr
405         lda     addr+1
406         adc     #>chars
407         sta     addr+1
408
409         ldx     #8
410         ldy     #0
411 printsign1:
412         lda     (addr),y
413         sta     LCD_DATA
414         iny
415         dex
416         bne     printsign1
417
418         ldx     temp_x
419         ldy     temp_y
420         rts
421 .endproc