per-line scrolling test
[mdlife] / src / main.c
index 8550c67..a48d881 100644 (file)
@@ -9,6 +9,10 @@
 uint32_t frameno;
 uint32_t dbgval[4];
 
+struct part parts[3];
+static struct part *part;
+
+
 int main(void)
 {
        int i;
@@ -20,22 +24,53 @@ int main(void)
        dbg_init();
 
        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(;;) {
-               dbg_setcursor(30, 0);
+               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("%08x\n", (unsigned int)dbgval[i]);
+                       printf("%04x\n", (unsigned int)dbgval[i]);
                }
                spr_begin();
 
-               dna_update();
+               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();
+               }
+
                frameno++;
        }