#include "game_types.h"

/* Sub_0800D000 @ 0x0800D000 (real 184B) -- init block plus mode-gated 3/-1 pin. Mirrors src/matched/Sub_0800D000.c. */
/* Zero word-4 latches byte 2080, runs the CA4C chain, and inits the preset
   quad (flag 2; 61/128/0/4096). Otherwise the mode dispatch (both pairs for
   mode 1, first pair for 2/3, true otherwise) pins words 2/3 to 3/-1 when
   set. Same idiom as D0D0/103E4/F134/C6E8. */
extern void Sub_0800CA4C(int *p);

void Sub_0800D000(int *p)
{
    int *base = *(int **)0x02000134;
    int r;
    if (p[4] == 0) {
        int *q;
        ((unsigned char *)p)[2080] = 1;
        Sub_0800CA4C(p);
        *(int *)((char *)base + 0xA34) = 2;
        q = (int *)((char *)base + 0xA38);
        q[3] = 61;
        q[2] = 128;
        q[0] = 0;
        q[1] = 4096;
        return;
    }
    {
        int mode = *(int *)((char *)base + 0xA34);
        int *q = (int *)((char *)base + 0xA38);
        int *q2 = (int *)((char *)base + 0xA48);
        if (mode == 1)
            r = q[0] == q[1] && q2[0] == q2[1];
        else if (mode == 2 || mode == 3)
            r = q[0] == q[1];
        else
            r = 1;
    }
    if (((r << 24) & 0xFF000000) == 0)
        return;
    p[2] = 3;
    p[3] = -1;
}
