Previous 199869 Revisions Next

r25385 Saturday 21st September, 2013 at 21:20:33 UTC by Curt Coder
(MESS) c64: Implemented logic for PARTNER 64 cartridge. (nw)
[hash]c64_cart.xml
[src/mess/machine/c64]partner.c partner.h

trunk/hash/c64_cart.xml
r25384r25385
69246924      <part name="cart" interface="c64_cart">
69256925         <feature name="slot" value="partner" />
69266926         <feature name="game" value="0" />
6927         <feature name="exrom" value="0" />
6927         <feature name="exrom" value="1" />
69286928   
6929         <dataarea name="roml" size="0x4000">
6929         <dataarea name="romh" size="0x4000">
69306930            <rom name="timeworks c-64 ver 2-16-87" size="0x4000" status="nodump" offset="0" />
69316931         </dataarea>
69326932      </part>
trunk/src/mess/machine/c64/partner.c
r25384r25385
4343//  INPUT_PORTS( c64_partner )
4444//-------------------------------------------------
4545
46WRITE_LINE_MEMBER( c64_partner_cartridge_device::nmi_w )
47{
48   if (!state && !m_a6 && !m_nmi)
49   {
50      m_slot->nmi_w(ASSERT_LINE);
51      m_nmi = 1;
52   }
53}
54
4655static INPUT_PORTS_START( c64_partner )
47   PORT_START("RESET")
48   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F11) PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_expansion_slot_device, reset_w)
56   PORT_START("NMI")
57   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("NMI") PORT_CODE(KEYCODE_F11) PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF_OWNER, c64_partner_cartridge_device, nmi_w)
4958INPUT_PORTS_END
5059
5160
r25384r25385
7079
7180c64_partner_cartridge_device::c64_partner_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
7281   device_t(mconfig, C64_PARTNER, "C64 PARTNER 64 cartridge", tag, owner, clock, "c64_partner", __FILE__),
73   device_c64_expansion_card_interface(mconfig, *this)
82   device_c64_expansion_card_interface(mconfig, *this),
83   m_a0(1),
84   m_a6(1),
85   m_nmi(0)
7486{
7587}
7688
r25384r25385
92104
93105void c64_partner_cartridge_device::device_reset()
94106{
107   m_a0 = 1;
108   m_a6 = 1;
109
110   if (m_nmi && m_a6)
111   {
112      m_slot->nmi_w(CLEAR_LINE);
113      m_nmi = 0;
114   }
95115}
96116
97117
r25384r25385
101121
102122UINT8 c64_partner_cartridge_device::c64_cd_r(address_space &space, offs_t offset, UINT8 data, int sphi2, int ba, int roml, int romh, int io1, int io2)
103123{
124   if (!io1)
125   {
126      data = m_romh[offset & 0x3fff];
127   }
128
129   if (m_nmi && (offset == 0xfffa || offset == 0xfffb))
130   {
131      m_a0 = 1;
132   }
133
134   if (m_a0 && BIT(offset, 15))
135   {
136      switch ((offset >> 13) & 0x03)
137      {
138      case 0: case 3:
139         data = m_romh[offset & 0x3fff];
140         break;
141
142      case 1:
143         data = m_ram[offset & 0x1fff];
144         break;
145      }
146   }
147
104148   return data;
105149}
106150
r25384r25385
111155
112156void c64_partner_cartridge_device::c64_cd_w(address_space &space, offs_t offset, UINT8 data, int sphi2, int ba, int roml, int romh, int io1, int io2)
113157{
114}
158   if (!io1)
159   {
160      m_a0 = BIT(offset, 0);
161      m_a6 = BIT(offset, 6);
115162
163      if (m_nmi && m_a6)
164      {
165         m_slot->nmi_w(CLEAR_LINE);
166         m_nmi = 0;
167      }
168   }
116169
117//-------------------------------------------------
118//  c64_exrom_r - EXROM read
119//-------------------------------------------------
170   if (m_a0 && BIT(offset, 15))
171   {
172      switch ((offset >> 13) & 0x03)
173      {
174      case 1:
175         m_ram[offset & 0x1fff] = data;
176         break;
177      }
178   }
120179
121int c64_partner_cartridge_device::c64_exrom_r(offs_t offset, int sphi2, int ba, int rw)
122{
123   return m_exrom;
180   if (m_nmi && (offset == 0xfffa || offset == 0xfffb))
181   {
182      m_a0 = 1;
183   }
124184}
125185
126186
r25384r25385
130190
131191int c64_partner_cartridge_device::c64_game_r(offs_t offset, int sphi2, int ba, int rw)
132192{
133   return m_game;
193   int game = 1;
194
195   if (m_a0 && BIT(offset, 15))
196   {
197      switch ((offset >> 13) & 0x03)
198      {
199      case 0: case 1:   case 3:
200         game = 0;
201         break;
202      }
203   }
204
205   // TODO if I/O1=0, GAME=0
206
207   return game;
134208}
trunk/src/mess/machine/c64/partner.h
r25384r25385
3333   // optional information overrides
3434   virtual ioport_constructor device_input_ports() const;
3535
36   DECLARE_WRITE_LINE_MEMBER( nmi_w );
37
3638protected:
3739   // device-level overrides
3840   virtual void device_start();
r25384r25385
4143   // device_c64_expansion_card_interface overrides
4244   virtual UINT8 c64_cd_r(address_space &space, offs_t offset, UINT8 data, int sphi2, int ba, int roml, int romh, int io1, int io2);
4345   virtual void c64_cd_w(address_space &space, offs_t offset, UINT8 data, int sphi2, int ba, int roml, int romh, int io1, int io2);
44   virtual int c64_exrom_r(offs_t offset, int sphi2, int ba, int rw);
4546   virtual int c64_game_r(offs_t offset, int sphi2, int ba, int rw);
47
48private:
49   int m_a0;
50   int m_a6;
51   int m_nmi;
4652};
4753
4854

Previous 199869 Revisions Next


© 1997-2024 The MAME Team