~ubuntu-branches/ubuntu/lucid/fceux/lucid

« back to all changes in this revision

Viewing changes to fceu/src/boards/t-227-1.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Fabrice Coutadeur
  • Date: 2009-12-14 08:05:17 UTC
  • Revision ID: james.westby@ubuntu.com-20091214080517-abi5tj8avthfan7c
Tags: upstream-2.1.2+repack
ImportĀ upstreamĀ versionĀ 2.1.2+repack

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* FCE Ultra - NES/Famicom Emulator
 
2
 *
 
3
 * Copyright notice for this file:
 
4
 *  Copyright (C) 2008 CaH4e3
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or modify
 
7
 * it under the terms of the GNU General Public License as published by
 
8
 * the Free Software Foundation; either version 2 of the License, or
 
9
 * (at your option) any later version.
 
10
 *
 
11
 * This program is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
14
 * GNU General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU General Public License
 
17
 * along with this program; if not, write to the Free Software
 
18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
19
 */
 
20
 
 
21
// T-227-1, 820632, MMC3 based, multimenu, 60000in1 (0010) dip switches
 
22
 
 
23
#include "mapinc.h"
 
24
#include "mmc3.h"
 
25
 
 
26
static uint8 reset_flag = 0x07;
 
27
 
 
28
static void BMCT2271CW(uint32 A, uint8 V)
 
29
{
 
30
    uint32 va = V; 
 
31
    if(EXPREGS[0]&0x20)
 
32
    {
 
33
      va|=0x200;
 
34
      va|=(EXPREGS[0]&0x10)<<4;
 
35
    }
 
36
    else
 
37
    {
 
38
      va&=0x7F;
 
39
      va|=(EXPREGS[0]&0x18)<<4;
 
40
    }
 
41
    setchr1(A,va);
 
42
}
 
43
 
 
44
static void BMCT2271PW(uint32 A, uint8 V)
 
45
{
 
46
    uint32 va = V & 0x3F; 
 
47
    if(EXPREGS[0]&0x20)
 
48
    {
 
49
       va&=0x1F;
 
50
       va|=0x40;
 
51
       va|=(EXPREGS[0]&0x10)<<1;
 
52
    }
 
53
    else
 
54
    {
 
55
       va&=0x0F;
 
56
       va|=(EXPREGS[0]&0x18)<<1;
 
57
    }
 
58
    switch(EXPREGS[0]&3)
 
59
    {
 
60
      case 0x00: setprg8(A,va); break;
 
61
      case 0x02: 
 
62
           {
 
63
             va=(va&0xFD)|((EXPREGS[0]&4)>>1);
 
64
             if(A<0xC000)
 
65
             {
 
66
               setprg16(0x8000,va >> 1); 
 
67
               setprg16(0xC000,va >> 1); 
 
68
             }
 
69
             break;
 
70
           }
 
71
      case 0x01: 
 
72
      case 0x03: if(A<0xC000) setprg32(0x8000,va >> 2); break;
 
73
    }
 
74
 
 
75
}
 
76
       
 
77
static DECLFW(BMCT2271LoWrite)
 
78
{
 
79
  if(!(EXPREGS[0]&0x80))
 
80
    EXPREGS[0] = A & 0xFF;
 
81
  FixMMC3PRG(MMC3_cmd);
 
82
  FixMMC3CHR(MMC3_cmd);
 
83
}
 
84
 
 
85
static DECLFR(BMCT2271HiRead)
 
86
{
 
87
  uint32 av = A;
 
88
  if(EXPREGS[0]&0x40) av = (av & 0xFFF0)|reset_flag;
 
89
  return CartBR(av);
 
90
}
 
91
 
 
92
static void BMCT2271Reset(void)
 
93
{
 
94
  EXPREGS[0] = 0x00;
 
95
  reset_flag++;
 
96
  reset_flag&=0x0F;
 
97
  MMC3RegReset();
 
98
}
 
99
 
 
100
static void BMCT2271Power(void)
 
101
{
 
102
  EXPREGS[0] = 0x00;
 
103
  GenMMC3Power();
 
104
  SetWriteHandler(0x6000,0x7FFF,BMCT2271LoWrite);
 
105
  SetReadHandler(0x8000,0xFFFF,BMCT2271HiRead);
 
106
}
 
107
 
 
108
void BMCT2271_Init(CartInfo *info)
 
109
{
 
110
  GenMMC3_Init(info, 128, 128, 8, 0);
 
111
  pwrap=BMCT2271PW;
 
112
  cwrap=BMCT2271CW;
 
113
  info->Power=BMCT2271Power;
 
114
  info->Reset=BMCT2271Reset;
 
115
  AddExState(EXPREGS, 1, 0, "EXPR");
 
116
}