z80 is alive
[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[2];
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         simba_init();
28
29         parts[0].start = dna_start;
30         parts[0].update = dna_update;
31         parts[1].start = simba_start;
32         parts[1].update = simba_update;
33         parts[1].vblank = simba_vblank;
34         part = parts;
35
36         part->start();
37
38         for(;;) {
39                 unsigned char val;
40                 z80_grab_bus();
41                 while(!z80_have_bus());
42                 val = Z80_MEM[0x1ffc];
43                 dbgval[3] = (uint32_t)val << 8;
44                 val = Z80_MEM[0x1ffd];
45                 dbgval[3] |= val;
46                 z80_release_bus();
47
48                 dbg_setcursor(32, 0);
49                 for(i=0; i<4; i++) {
50                         printf("%04x\n", (unsigned int)dbgval[i]);
51                 }
52                 spr_begin();
53
54                 part->update();
55
56                 vdp_wait_vblank();
57                 if(part->vblank) part->vblank();
58                 spr_submit();
59                 bnstate = pad_read(0);
60                 bndiff = bnstate ^ bnprev;
61                 bnprev = bnstate;
62
63                 if(bndiff & bnstate & PAD_START) {
64                         if(++part >= parts + 2) {
65                                 part = parts;
66                         }
67                         part->start();
68                 }
69
70                 frameno++;
71         }
72
73         return 0;
74 }