per-line scrolling test
[mdlife] / src / main.c
1 #include <stdio.h>
2 #include "z80.h"
3 #include "vdp.h"
4 #include "pad.h"
5 #include "sprite.h"
6 #include "parts.h"
7 #include "debug.h"
8
9 uint32_t frameno;
10 uint32_t dbgval[4];
11
12 struct part parts[3];
13 static struct part *part;
14
15
16 int main(void)
17 {
18         int i;
19         static unsigned short bnprev;
20
21         z80_init();
22         vdp_init();
23         pad_init();
24         dbg_init();
25
26         dna_init();
27         mitosis_init();
28         simba_init();
29
30         parts[0].start = dna_start;
31         parts[0].update = dna_update;
32         parts[1].start = mitosis_start;
33         parts[1].update = mitosis_update;
34         parts[1].vblank = mitosis_vblank;
35         parts[2].start = simba_start;
36         parts[2].update = simba_update;
37         parts[2].vblank = simba_vblank;
38         part = parts;
39
40         part->start();
41
42         for(;;) {
43                 unsigned char val;
44                 z80_grab_bus();
45                 while(!z80_have_bus());
46                 val = Z80_MEM[0x1ffc];
47                 dbgval[3] = (uint32_t)val << 8;
48                 val = Z80_MEM[0x1ffd];
49                 dbgval[3] |= val;
50                 z80_release_bus();
51
52                 dbg_setcursor(32, 0);
53                 for(i=0; i<4; i++) {
54                         printf("%04x\n", (unsigned int)dbgval[i]);
55                 }
56                 spr_begin();
57
58                 part->update();
59
60                 vdp_wait_vblank();
61                 if(part->vblank) part->vblank();
62                 spr_submit();
63                 bnstate = pad_read(0);
64                 bndiff = bnstate ^ bnprev;
65                 bnprev = bnstate;
66
67                 if(bndiff & bnstate & PAD_START) {
68                         if(++part >= parts + 3) {
69                                 part = parts;
70                         }
71                         part->start();
72                 }
73
74                 frameno++;
75         }
76
77         return 0;
78 }