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