Previous 15994 Revisions Next

r14907 Friday 13th April, 2012 at 21:44:10 UTC by Curt Coder
[C64] Cartridge WIP. (nw)
[hash]c64_cart.xml
[src/mess/drivers]c64.c
[src/mess/machine]c64_currah_speech.c c64_currah_speech.h c64_easyflash.c c64_easyflash.h c64_ieee488.c c64_sfx_sound_expander.c c64_sfx_sound_expander.h c64_vw64.h c64_xl80.h c64exp.c c64exp.h

hash/c64_cart.xml
r14906r14907
164164      </part>
165165   </software>
166166
167   <software name="cs64" supported="no">
167   <software name="cs64">
168168      <description>Currah Speech 64</description>
169169      <year>1984</year>
170170      <publisher>Currah</publisher>
r14906r14907
172172      <part name="cart" interface="c64_cart">
173173         <feature name="slot" value="cs64" />
174174         <feature name="game" value="1" />
175         <feature name="exrom" value="0" />
175         <feature name="exrom" value="1" />
176176
177         <dataarea name="roml" size="0x2000">
177         <dataarea name="romh" size="0x2000">
178178            <rom name="778r01" size="0x2000" crc="e3f8abd0" sha1="dc9fc1ffb033531abec03b1a06a8d5064dd0ce61" offset="0x0000" />
179179         </dataarea>
180180      </part>
src/mess/machine/c64_sfx_sound_expander.c
r14906r14907
294294//  c64_exrom_r - EXROM read
295295//-------------------------------------------------
296296 
297int c64_sfx_sound_expander_cartridge_device::c64_exrom_r()
297int c64_sfx_sound_expander_cartridge_device::c64_exrom_r(offs_t offset, int ba, int rw, int hiram)
298298{
299   return m_exp->exrom_r();
299   return m_exp->exrom_r(offset, ba, rw, hiram);
300300}
src/mess/machine/c64_sfx_sound_expander.h
r14906r14907
5555   virtual UINT8 c64_cd_r(address_space &space, offs_t offset, int roml, int romh, int io1, int io2);
5656   virtual void c64_cd_w(address_space &space, offs_t offset, UINT8 data, int roml, int romh, int io1, int io2);
5757   virtual int c64_game_r(offs_t offset, int ba, int rw, int hiram);
58   virtual int c64_exrom_r();
58   virtual int c64_exrom_r(offs_t offset, int ba, int rw, int hiram);
5959 
6060private:
6161   required_device<device_t> m_opl;
src/mess/machine/c64_xl80.h
r14906r14907
4949   virtual UINT8 c64_cd_r(address_space &space, offs_t offset, int roml, int romh, int io1, int io2);
5050   virtual void c64_cd_w(address_space &space, offs_t offset, UINT8 data, int roml, int romh, int io1, int io2);
5151   virtual int c64_game_r(offs_t offset, int ba, int rw, int hiram) { return 1; }
52   virtual int c64_exrom_r() { return 0; }
52   virtual int c64_exrom_r(offs_t offset, int ba, int rw, int hiram) { return 0; }
5353
5454private:
5555   required_device<h46505_device> m_crtc;
src/mess/machine/c64_vw64.h
r14906r14907
4040 
4141   // device_c64_expansion_card_interface overrides
4242   virtual UINT8 c64_cd_r(address_space &space, offs_t offset, int roml, int romh, int io1, int io2);
43   virtual int c64_exrom_r() { return 0; }
43   virtual int c64_exrom_r(offs_t offset, int ba, int rw, int hiram) { return 0; }
4444 
4545private:
4646   emu_timer *m_game_timer;
src/mess/machine/c64_ieee488.c
r14906r14907
106106   data |= m_bus->ifc_r();
107107   data |= m_bus->srq_r() << 1;
108108 
109   data |= m_exp->exrom_r() << 7;
109   data |= m_exp->exrom_r(offset, 1, 1, 0) << 7;
110110 
111111   return data;
112112}
src/mess/machine/c64_currah_speech.c
r14906r14907
3030   ROM    - General Instruments R09864CS-2030 8Kx8 ROM "778R01"
3131   SP0256 - General Instruments SP0256A-AL2 Speech Synthesizer
3232
33
34LA05-164 Pinout
35---------------
36            _____   _____
37DOTCLK   1 |*    \_/     | 28  +5V
38   CA7   2 |             | 27  CD7
39   CA6   3 |             | 26  CA8
40   CA5   4 |             | 25  CA9
41   CA4   5 |             | 24  CA11
42   CA3   6 |             | 23  BA
43   CA2   7 |  LA05-164   | 22  CA10
44   CA1   8 |             | 21  SP0256 _ALD
45   CA0   9 |             | 20  SP0256 OSC1
46        10 |             | 19  SP0256 SBY
47_GA+EX  11 |             | 18  CA15
48  I/O1  12 |             | 17  CA12
49 _CR/W  13 |             | 16  CA13
50   GND  14 |_____________| 15  CA14
51
52Notes:
53   _GA+EX  - _GAME and _EXROM tied together
54
3355*/
3456
57/*
58
59   BASIC Commands
60   --------------
61
62   INIT      Initialize the cartridge
63   KON 0      Enable keyvoices, low voice
64   KON 1      Enable keyvoices, high voice
65   KOFF      Disable keyvoices
66   SAY ""      Say words
67
68*/
69
3570#include "c64_currah_speech.h"
3671
3772
r14906r14907
5691//-------------------------------------------------
5792
5893ROM_START( c64_currah_speech )
59   ROM_REGION( 0x800, SP0256_TAG, 0 )
94   ROM_REGION( 0x10000, SP0256_TAG, 0 )
6095   ROM_LOAD( "sp0256a-al2", 0x000, 0x800, CRC(df8de0b0) SHA1(86fb6d9fef955ac0bc76e0c45c66585946d278a1) )
6196ROM_END
6297
r14906r14907
117152c64_currah_speech_cartridge_device::c64_currah_speech_cartridge_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
118153   device_t(mconfig, C64_CURRAH_SPEECH, "C64 Currah Speech", tag, owner, clock),
119154   device_c64_expansion_card_interface(mconfig, *this),
120   m_nsp(*this, SP0256_TAG)
155   m_nsp(*this, SP0256_TAG),
156   m_rom_en(0)
121157{
122158}
123159
r14906r14907
128164
129165void c64_currah_speech_cartridge_device::device_start()
130166{
131   // find memory regions
132   m_rom = subregion(SP0256_TAG)->base();
167   // state saving
168   save_item(NAME(m_rom_en));
133169}
134170
135171
r14906r14907
139175
140176void c64_currah_speech_cartridge_device::device_reset()
141177{
178   m_rom_en = 0;
142179}
143180
144181
r14906r14907
150187{
151188   UINT8 data = 0;
152189
153   if (!io1)
190   if (!romh)
154191   {
192      data = m_romh[offset & 0x1fff];
193   }
194   else if (!io1)
195   {
155196      /*
156197     
157198          bit     description
r14906r14907
163204          4       
164205          5       
165206          6       
166          7       LRQ
207          7       SBY
167208     
168209      */
169210
170      data = sp0256_lrq_r(m_nsp) << 7;
211      data = sp0256_sby_r(m_nsp) << 7;
171212   }
213   else if (offset == 0xa7f0)
214   {
215      m_rom_en = !m_rom_en;
216   }
172217
173218   return data;
174219}
r14906r14907
182227{
183228   if (!io1)
184229   {
185      // TODO offset bit 0 = high/low voice
186      sp0256_ALD_w(m_nsp, 0, data);
230      /*
231     
232          bit     description
233     
234          0       A1
235          1       A2
236          2       A3
237          3       A4
238          4       A5
239          5       A6
240          6       
241          7       intonation
242     
243      */
244
245      // TODO offset bit 0 = low/high voice
246      sp0256_ALD_w(m_nsp, 0, data & 0x3f);
187247   }
188248}
189249
r14906r14907
194254
195255int c64_currah_speech_cartridge_device::c64_game_r(offs_t offset, int ba, int rw, int hiram)
196256{
197   return 1; // TODO
257   return !(m_rom_en && ba && rw && ((offset & 0xe000) == 0xa000));
198258}
199259
200260
r14906r14907
202262//  c64_exrom_r - EXROM read
203263//-------------------------------------------------
204264
205int c64_currah_speech_cartridge_device::c64_exrom_r()
265int c64_currah_speech_cartridge_device::c64_exrom_r(offs_t offset, int ba, int rw, int hiram)
206266{
207   return 1; // TODO
267   return !(m_rom_en && ba && rw && ((offset & 0xe000) == 0xa000));
208268}
src/mess/machine/c64_currah_speech.h
r14906r14907
4646   virtual UINT8 c64_cd_r(address_space &space, offs_t offset, int roml, int romh, int io1, int io2);
4747   virtual void c64_cd_w(address_space &space, offs_t offset, UINT8 data, int roml, int romh, int io1, int io2);
4848   virtual int c64_game_r(offs_t offset, int ba, int rw, int hiram);
49   virtual int c64_exrom_r();
49   virtual int c64_exrom_r(offs_t offset, int ba, int rw, int hiram);
5050
5151private:
5252   required_device<device_t> m_nsp;
5353
54   UINT8 *m_rom;
54   int m_rom_en;
5555};
5656
5757
src/mess/machine/c64_easyflash.c
r14906r14907
222222//  c64_exrom_r - EXROM read
223223//-------------------------------------------------
224224 
225int c64_easyflash_cartridge_device::c64_exrom_r()
225int c64_easyflash_cartridge_device::c64_exrom_r(offs_t offset, int ba, int rw, int hiram)
226226{
227227   return !BIT(m_mode, 1);
228228}
src/mess/machine/c64_easyflash.h
r14906r14907
4747   // device_c64_expansion_card_interface overrides
4848   virtual UINT8 c64_cd_r(address_space &space, offs_t offset, int roml, int romh, int io1, int io2);
4949   virtual void c64_cd_w(address_space &space, offs_t offset, UINT8 data, int roml, int romh, int io1, int io2);
50   virtual int c64_exrom_r();
50   virtual int c64_exrom_r(offs_t offset, int ba, int rw, int hiram);
5151   virtual int c64_game_r(offs_t offset, int ba, int rw, int hiram);
5252 
5353private:
src/mess/machine/c64exp.c
r14906r14907
384384
385385
386386//-------------------------------------------------
387//  game_r - EXROM read
387//  exrom_r - EXROM read
388388//-------------------------------------------------
389389
390READ_LINE_MEMBER( c64_expansion_slot_device::exrom_r )
390int c64_expansion_slot_device::exrom_r(offs_t offset, int ba, int rw, int hiram)
391391{
392392   int state = 1;
393393
394394   if (m_cart != NULL)
395395   {
396      state = m_cart->c64_exrom_r();
396      state = m_cart->c64_exrom_r(offset, ba, rw, hiram);
397397   }
398398
399399   return state;
src/mess/machine/c64exp.h
r14906r14907
100100   UINT8 cd_r(address_space &space, offs_t offset, int roml, int romh, int io1, int io2);
101101   void cd_w(address_space &space, offs_t offset, UINT8 data, int roml, int romh, int io1, int io2);
102102   int game_r(offs_t offset, int ba, int rw, int hiram);
103   DECLARE_READ_LINE_MEMBER( exrom_r );
103   int exrom_r(offs_t offset, int ba, int rw, int hiram);
104104   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
105105
106106   // cartridge interface
r14906r14907
169169   virtual UINT8 c64_cd_r(address_space &space, offs_t offset, int roml, int romh, int io1, int io2) { return 0; };
170170   virtual void c64_cd_w(address_space &space, offs_t offset, UINT8 data, int roml, int romh, int io1, int io2) { };
171171   virtual int c64_game_r(offs_t offset, int ba, int rw, int hiram) { return m_game; }
172   virtual int c64_exrom_r() { return m_exrom; }
172   virtual int c64_exrom_r(offs_t offset, int ba, int rw, int hiram) { return m_exrom; }
173173   virtual void c64_reset_w() { };
174174   virtual UINT32 c64_screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { return false; }
175175
src/mess/drivers/c64.c
r14906r14907
6161void c64_state::bankswitch(offs_t offset, offs_t va, int rw, int aec, int ba, int cas, int *casram, int *basic, int *kernal, int *charom, int *grw, int *io, int *roml, int *romh)
6262{
6363   int game = m_exp->game_r(offset, rw, ba, m_hiram);
64   int exrom = m_exp->exrom_r();
64   int exrom = m_exp->exrom_r(offset, rw, ba, m_hiram);
6565
6666   UINT16 input = VA12 << 15 | VA13 << 14 | game << 13 | exrom << 12 | rw << 11 | aec << 10 | ba << 9 | A12 << 8 | A13 << 7 | A14 << 6 | A15 << 5 | m_va14 << 4 | m_charen << 3 | m_hiram << 2 | m_loram << 1 | cas;
6767   UINT8 data = m_pla->read(input);

Previous 15994 Revisions Next


© 1998-2018 The MESS Team