X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=boards%2Fsachen.c;h=ab57f3c30d4559b28330f29025fc239fac8626eb;hp=64ad5f6d2fda98f210b3a639b0bd92b428d3f22c;hb=386f5371eb984fb9c2860c83e740890a75cd45c1;hpb=eec2623f6183dd0f9494b99065a16bf90f2a1ccf diff --git a/boards/sachen.c b/boards/sachen.c index 64ad5f6..ab57f3c 100644 --- a/boards/sachen.c +++ b/boards/sachen.c @@ -15,12 +15,12 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "mapinc.h" -static uint8 cmd; +static uint8 cmd, dip; static uint8 latch[8]; static void S74LS374MSync(uint8 mirr) @@ -64,7 +64,8 @@ static DECLFR(S74LS374NRead) { uint8 ret; if((A&0x4100)==0x4100) - ret=(X.DB&0xC0)|((~cmd)&0x3F); +// ret=(X.DB&0xC0)|((~cmd)&0x3F); + ret=((~cmd)&0x3F)^dip; else ret=X.DB; return ret; @@ -72,6 +73,7 @@ static DECLFR(S74LS374NRead) static void S74LS374NPower(void) { + dip=0; latch[0]=latch[1]=latch[2]=latch[3]=latch[4]=0; S74LS374NSynco(); SetReadHandler(0x8000,0xFFFF,CartBR); @@ -79,6 +81,13 @@ static void S74LS374NPower(void) SetReadHandler(0x4100,0x5fff,S74LS374NRead); } +static void S74LS374NReset(void) +{ + dip^=1; + latch[0]=latch[1]=latch[2]=latch[3]=latch[4]=0; + S74LS374NSynco(); +} + static void S74LS374NRestore(int version) { S74LS374NSynco(); @@ -87,9 +96,11 @@ static void S74LS374NRestore(int version) void S74LS374N_Init(CartInfo *info) { info->Power=S74LS374NPower; + info->Reset=S74LS374NReset; GameStateRestore=S74LS374NRestore; AddExState(latch, 5, 0, "LATC"); AddExState(&cmd, 1, 0, "CMD"); + AddExState(&dip, 1, 0, "DIP"); } static void S74LS374NASynco(void) @@ -291,6 +302,12 @@ static void SA72007Synco() setchr8(latch[0]>>7); } +static void SA009Synco() +{ + setprg32(0x8000,0); + setchr8(latch[0]&1); +} + static void SA72008Synco() { setprg32(0x8000,(latch[0]>>2)&1); @@ -321,6 +338,14 @@ void SA72008_Init(CartInfo *info) AddExState(&latch[0], 1, 0, "LATC"); } +void SA009_Init(CartInfo *info) +{ + WSync=SA009Synco; + GameStateRestore=SARestore; + info->Power=SAPower; + AddExState(&latch[0], 1, 0, "LATC"); +} + void SA0036_Init(CartInfo *info) { WSync=SA72007Synco; @@ -337,13 +362,15 @@ void SA0037_Init(CartInfo *info) AddExState(&latch[0], 1, 0, "LATC"); } +// ----------------------------------------------- + static void TCU01Synco() { - setprg32(0x8000,(latch[0]>>2)&1); + setprg32(0x8000,((latch[0]&0x80)>>6)|((latch[0]>>2)&1)); setchr8((latch[0]>>3)&0xF); } -static DECLFW(TCWrite) +static DECLFW(TCU01Write) { if((A&0x103)==0x102) { @@ -352,11 +379,11 @@ static DECLFW(TCWrite) } } -static void TCU01Reset(void) +static void TCU01Power(void) { latch[0]=0; SetReadHandler(0x8000,0xFFFF,CartBR); - SetWriteHandler(0x4100,0xFFFF,TCWrite); + SetWriteHandler(0x4100,0xFFFF,TCU01Write); TCU01Synco(); } @@ -368,10 +395,55 @@ static void TCU01Restore(int version) void TCU01_Init(CartInfo *info) { GameStateRestore=TCU01Restore; - info->Power=TCU01Reset; + 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; @@ -382,7 +454,7 @@ static DECLFR(TCA01Read) return ret; } -static void TCA01Reset(void) +static void TCA01Power(void) { setprg16(0x8000,0); setprg16(0xC000,1); @@ -393,6 +465,6 @@ static void TCA01Reset(void) void TCA01_Init(CartInfo *info) { - info->Power=TCA01Reset; + info->Power=TCA01Power; }