per-line scrolling test
[mdlife] / src / main.c
index 66efdda..a48d881 100644 (file)
@@ -1,17 +1,78 @@
+#include <stdio.h>
 #include "z80.h"
 #include "vdp.h"
+#include "pad.h"
+#include "sprite.h"
+#include "parts.h"
 #include "debug.h"
 
+uint32_t frameno;
+uint32_t dbgval[4];
+
+struct part parts[3];
+static struct part *part;
+
+
 int main(void)
 {
+       int i;
+       static unsigned short bnprev;
+
        z80_init();
        vdp_init();
+       pad_init();
        dbg_init();
 
-       vdp_setcolor(0, 0, 2, 2, 2);
-       vdp_setcolor(0, 15, 15, 15, 15);
+       dna_init();
+       mitosis_init();
+       simba_init();
+
+       parts[0].start = dna_start;
+       parts[0].update = dna_update;
+       parts[1].start = mitosis_start;
+       parts[1].update = mitosis_update;
+       parts[1].vblank = mitosis_vblank;
+       parts[2].start = simba_start;
+       parts[2].update = simba_update;
+       parts[2].vblank = simba_vblank;
+       part = parts;
+
+       part->start();
+
+       for(;;) {
+               unsigned char val;
+               z80_grab_bus();
+               while(!z80_have_bus());
+               val = Z80_MEM[0x1ffc];
+               dbgval[3] = (uint32_t)val << 8;
+               val = Z80_MEM[0x1ffd];
+               dbgval[3] |= val;
+               z80_release_bus();
+
+               dbg_setcursor(32, 0);
+               for(i=0; i<4; i++) {
+                       printf("%04x\n", (unsigned int)dbgval[i]);
+               }
+               spr_begin();
+
+               part->update();
+
+               vdp_wait_vblank();
+               if(part->vblank) part->vblank();
+               spr_submit();
+               bnstate = pad_read(0);
+               bndiff = bnstate ^ bnprev;
+               bnprev = bnstate;
+
+               if(bndiff & bnstate & PAD_START) {
+                       if(++part >= parts + 3) {
+                               part = parts;
+                       }
+                       part->start();
+               }
 
-       dbg_printstr(0, 0, "Mindlapse");
+               frameno++;
+       }
 
        return 0;
 }