X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=boards%2Fsachen.c;h=64ad5f6d2fda98f210b3a639b0bd92b428d3f22c;hp=bcec3a9001e4fa12af02e91a27b954fde6c2f915;hb=7127faf31b5f71f70480a2f4555f2134375b7744;hpb=d97315ac0bca825d2d50a44453bc5652946e2c67 diff --git a/boards/sachen.c b/boards/sachen.c index bcec3a9..64ad5f6 100644 --- a/boards/sachen.c +++ b/boards/sachen.c @@ -23,7 +23,7 @@ static uint8 cmd; static uint8 latch[8]; -static void MSync(uint8 mirr) +static void S74LS374MSync(uint8 mirr) { switch(mirr&3) { @@ -38,7 +38,7 @@ static void S74LS374NSynco(void) { setprg32(0x8000,latch[0]); setchr8(latch[1]|latch[3]|latch[4]); - MSync(latch[2]); + S74LS374MSync(latch[2]); } static DECLFW(S74LS374NWrite) @@ -50,9 +50,9 @@ static DECLFW(S74LS374NWrite) { switch(cmd) { - case 2:latch[3]=(V&1)<<3;break; + case 2:latch[0]=V&1; latch[3]=(V&1)<<3;break; case 4:latch[4]=(V&1)<<2;break; - case 5:latch[0]=V&0x7;break; + case 5:latch[0]=V&7;break; case 6:latch[1]=V&3;break; case 7:latch[2]=V>>1;break; } @@ -60,12 +60,23 @@ static DECLFW(S74LS374NWrite) } } +static DECLFR(S74LS374NRead) +{ + uint8 ret; + if((A&0x4100)==0x4100) + ret=(X.DB&0xC0)|((~cmd)&0x3F); + else + ret=X.DB; + return ret; +} + static void S74LS374NPower(void) { latch[0]=latch[1]=latch[2]=latch[3]=latch[4]=0; S74LS374NSynco(); SetReadHandler(0x8000,0xFFFF,CartBR); SetWriteHandler(0x4100,0x7FFF,S74LS374NWrite); + SetReadHandler(0x4100,0x5fff,S74LS374NRead); } static void S74LS374NRestore(int version) @@ -85,7 +96,7 @@ static void S74LS374NASynco(void) { setprg32(0x8000,latch[0]); setchr8(latch[1]); - MSync(latch[2]); + S74LS374MSync(latch[2]); } static DECLFW(S74LS374NAWrite) @@ -104,7 +115,7 @@ static DECLFW(S74LS374NAWrite) case 6:latch[1]=(latch[1]&1)|latch[3]|((V&3)<<1);break; case 7:latch[2]=V&1;break; } - S74LS374NSynco(); + S74LS374NASynco(); } } @@ -126,7 +137,6 @@ void S74LS374NA_Init(CartInfo *info) } static int type; -//static int PPUbus; static void S8259Synco(void) { int x; @@ -159,7 +169,10 @@ static void S8259Synco(void) } } } - MSync(latch[7]>>1); + if(!(latch[7]&1)) + S74LS374MSync(latch[7]>>1); + else + setmirror(MI_V); } static DECLFW(S8259Write) @@ -230,12 +243,6 @@ void S8259D_Init(CartInfo *info) // Kevin's Horton 137 mapper static void(*WSync)(void); -static void SA0161MSynco() -{ - setprg32(0x8000,(latch[0]>>3)&1); - setchr8(latch[0]&7); -} - static DECLFW(SAWrite) { if(A&0x100) @@ -245,7 +252,7 @@ static DECLFW(SAWrite) } } -static void SAReset(void) +static void SAPower(void) { latch[0]=0; WSync(); @@ -253,36 +260,35 @@ static void SAReset(void) SetWriteHandler(0x4100,0x5FFF,SAWrite); } -static void SA0161MRestore(int version) +static void SARestore(int version) { - SA0161MSynco(); + WSync(); } -void SA0161M_Init(CartInfo *info) +static DECLFW(SADWrite) { - WSync=SA0161MSynco; - GameStateRestore=SA0161MRestore; - info->Power=SAReset; - AddExState(&latch[0], 1, 0, "LATC"); + latch[0]=V; + WSync(); } -static void SA72007Synco() +static void SADPower(void) { - setprg32(0x8000,0); - setchr8(latch[0]>>7); + latch[0]=0; + WSync(); + SetReadHandler(0x8000,0xFFFF,CartBR); + SetWriteHandler(0x8000,0xFFFF,SADWrite); } -static void SA72007Restore(int version) +static void SA0161MSynco() { - SA72007Synco(); + setprg32(0x8000,(latch[0]>>3)&1); + setchr8(latch[0]&7); } -void SA72007_Init(CartInfo *info) +static void SA72007Synco() { - WSync=SA72007Synco; - GameStateRestore=SA72007Restore; - info->Power=SAReset; - AddExState(&latch[0], 1, 0, "LATC"); + setprg32(0x8000,0); + setchr8(latch[0]>>7); } static void SA72008Synco() @@ -291,57 +297,43 @@ static void SA72008Synco() setchr8(latch[0]&3); } -static void SA72008Restore(int version) -{ - SA72008Synco(); -} - -void SA72008_Init(CartInfo *info) +void SA0161M_Init(CartInfo *info) { - WSync=SA72008Synco; - GameStateRestore=SA72008Restore; - info->Power=SAReset; + WSync=SA0161MSynco; + GameStateRestore=SARestore; + info->Power=SAPower; AddExState(&latch[0], 1, 0, "LATC"); } -static DECLFW(SADWrite) -{ - latch[0]=V; - WSync(); -} - -static void SADReset(void) -{ - latch[0]=0; - WSync(); - SetReadHandler(0x8000,0xFFFF,CartBR); - SetWriteHandler(0x8000,0xFFFF,SADWrite); -} - -static void SA0037Synco() +void SA72007_Init(CartInfo *info) { - setprg32(0x8000,(latch[0]>>3)&1); - setchr8(latch[0]&7); + WSync=SA72007Synco; + GameStateRestore=SARestore; + info->Power=SAPower; + AddExState(&latch[0], 1, 0, "LATC"); } -static void SA0037Restore(int version) +void SA72008_Init(CartInfo *info) { - SA0037Synco(); + WSync=SA72008Synco; + GameStateRestore=SARestore; + info->Power=SAPower; + AddExState(&latch[0], 1, 0, "LATC"); } void SA0036_Init(CartInfo *info) { WSync=SA72007Synco; - GameStateRestore=SA72007Restore; - info->Power=SADReset; + GameStateRestore=SARestore; + info->Power=SADPower; AddExState(&latch[0], 1, 0, "LATC"); } void SA0037_Init(CartInfo *info) { - WSync=SA0037Synco; - GameStateRestore=SA0037Restore; - info->Power=SADReset; + WSync=SA0161MSynco; + GameStateRestore=SARestore; + info->Power=SADPower; AddExState(&latch[0], 1, 0, "LATC"); } @@ -354,8 +346,10 @@ static void TCU01Synco() static DECLFW(TCWrite) { if((A&0x103)==0x102) + { latch[0]=V; - TCU01Synco(); + TCU01Synco(); + } } static void TCU01Reset(void) @@ -401,3 +395,4 @@ void TCA01_Init(CartInfo *info) { info->Power=TCA01Reset; } +