+ TCU01Synco();
+}
+
+void TCU01_Init(CartInfo *info)
+{
+ GameStateRestore=TCU01Restore;
+ info->Power=TCU01Power;
+ AddExState(&latch[0], 1, 0, "LATC");
+}
+
+//-----------------------------------------------
+
+static void TCU02Synco()
+{
+ setprg32(0x8000,0);
+ setchr8(latch[0]&3);
+}
+
+static DECLFW(TCU02Write)
+{
+ if((A&0x103)==0x102)
+ {
+ latch[0]=V+3;
+ TCU02Synco();
+ }
+}
+
+static DECLFR(TCU02Read)
+{
+ return (latch[0]&0x3F)|(X.DB&0xC0);
+}
+
+static void TCU02Power(void)
+{
+ latch[0]=0;
+ SetReadHandler(0x8000,0xFFFF,CartBR);
+ SetReadHandler(0x4100,0x4100,TCU02Read);
+ SetWriteHandler(0x4100,0xFFFF,TCU02Write);
+ TCU02Synco();
+}
+
+static void TCU02Restore(int version)
+{
+ TCU02Synco();
+}
+
+void TCU02_Init(CartInfo *info)
+{
+ GameStateRestore=TCU02Restore;
+ info->Power=TCU02Power;
+ AddExState(&latch[0], 1, 0, "LATC");
+}
+
+// ---------------------------------------------
+
+static DECLFR(TCA01Read)
+{
+ uint8 ret;
+ if((A&0x4100)==0x4100)
+ ret=(X.DB&0xC0)|((~A)&0x3F);
+ else
+ ret=X.DB;
+ return ret;