Previous 199869 Revisions Next

r18590 Thursday 18th October, 2012 at 14:17:00 UTC by Curt Coder
(MESS) c128: Fixed keyboard and C64 mode. (nw)
(MESS) c64: Cleanup. (nw)
(MESS) mos6566: Implemented FAST register and removed hacks from interface. (nw)
[src/mess]mess.lst
[src/mess/drivers]c128.c c64.c cbm2.c vic10.c
[src/mess/includes]c128.h c64.h
[src/mess/video]mos6566.c mos6566.h

trunk/src/mess/includes/c64.h
r18589r18590
33#ifndef __C64__
44#define __C64__
55
6
76#include "emu.h"
87#include "formats/cbm_snqk.h"
98#include "includes/cbm.h"
r18589r18590
2322#define M6510_TAG      "u7"
2423#define MOS6567_TAG      "u19"
2524#define MOS6569_TAG      "u19"
26#define MOS6851_TAG      "u18"
25#define MOS6581_TAG      "u18"
2726#define MOS6526_1_TAG   "u1"
2827#define MOS6526_2_TAG   "u2"
2928#define PLA_TAG         "u17"
r18589r18590
3938        m_maincpu(*this, M6510_TAG),
4039        m_pla(*this, PLA_TAG),
4140        m_vic(*this, MOS6569_TAG),
42        m_sid(*this, MOS6851_TAG),
41        m_sid(*this, MOS6581_TAG),
4342        m_cia1(*this, MOS6526_1_TAG),
4443        m_cia2(*this, MOS6526_2_TAG),
4544        m_iec(*this, CBM_IEC_TAG),
r18589r18590
8281   virtual void machine_reset();
8382
8483   void check_interrupts();
85   void 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);
86   UINT8 read_memory(address_space &space, offs_t offset, int ba, int casram, int basic, int kernal, int charom, int io, int roml, int romh);
84   void read_pla(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);
85   UINT8 read_memory(address_space &space, offs_t offset, offs_t va, int rw, int aec, int ba, int cas);
86   void write_memory(address_space &space, offs_t offset, UINT8 data, int rw, int aec, int ba, int cas);
8787
8888   DECLARE_READ8_MEMBER( read );
8989   DECLARE_WRITE8_MEMBER( write );
r18589r18590
115115   DECLARE_WRITE8_MEMBER( exp_dma_w );
116116   DECLARE_WRITE_LINE_MEMBER( exp_irq_w );
117117   DECLARE_WRITE_LINE_MEMBER( exp_nmi_w );
118   DECLARE_WRITE_LINE_MEMBER( exp_dma_w );
118119   DECLARE_WRITE_LINE_MEMBER( exp_reset_w );
119120
120121   // memory state
r18589r18590
136137   int m_vic_irq;
137138   int m_exp_irq;
138139   int m_exp_nmi;
140   int m_exp_dma;
139141   int m_cass_rd;
140142   int m_iec_srq;
141143};
trunk/src/mess/includes/c128.h
r18589r18590
8282        m_exp_irq(CLEAR_LINE),
8383        m_exp_nmi(CLEAR_LINE),
8484        m_cass_rd(1),
85        m_iec_srq(1)
85        m_iec_srq(1),
86        m_vic_k(0x07)
8687   { }
8788
8889   required_device<legacy_cpu_device> m_maincpu;
r18589r18590
129130   DECLARE_READ_LINE_MEMBER( mmu_sense40_r );
130131
131132   INTERRUPT_GEN_MEMBER( frame_interrupt );
132   DECLARE_READ8_MEMBER( vic_dma_read );
133   DECLARE_READ8_MEMBER( vic_dma_read_color );
134133   DECLARE_WRITE_LINE_MEMBER( vic_irq_w );
134   DECLARE_WRITE8_MEMBER( vic_k_w );
135135   
136136   DECLARE_READ8_MEMBER( sid_potx_r );
137137   DECLARE_READ8_MEMBER( sid_poty_r );
r18589r18590
194194   int m_vic_irq;
195195   int m_exp_irq;
196196   int m_exp_nmi;
197   int m_exp_dma;
197198   int m_cass_rd;
198199   int m_iec_srq;
199200
200201   // keyboard state
201   UINT8 m_keyline[3];
202   UINT8 m_vic_k;
202203};
203204
204205
trunk/src/mess/video/mos6566.c
r18589r18590
2222
2323    - cleanup
2424    - light pen
25    - remove RDY hack
2625    - http://hitmen.c02.at/temp/palstuff/
2726
2827*/
r18589r18590
8685   REGISTER_M4C,
8786   REGISTER_M5C,
8887   REGISTER_M6C,
89   REGISTER_M7C
88   REGISTER_M7C,
89   REGISTER_KCR,
90   REGISTER_FAST
9091};
9192
9293
r18589r18590
155156#define VIC2_X_VALUE         ((LIGHTPEN_X_VALUE / 1.3) + 12)
156157#define VIC2_Y_VALUE         ((LIGHTPEN_Y_VALUE      ) + 10)
157158
158#define VIC2E_K0_LEVEL         (m_reg[0x2f] & 0x01)
159#define VIC2E_K1_LEVEL         (m_reg[0x2f] & 0x02)
160#define VIC2E_K2_LEVEL         (m_reg[0x2f] & 0x04)
161
162
163159/* sprites 0 .. 7 */
164160#define SPRITEON(nr)         (m_reg[0x15] & (1 << nr))
165161#define SPRITE_Y_EXPAND(nr)      (m_reg[0x17] & (1 << nr))
r18589r18590
328324   if (m_device_suspended == 0)
329325   {
330326      m_first_ba_cycle = m_cycles_counter;
331      if (m_in_rdy_workaround_func(0) != 7 )
327      //if (m_in_rdy_workaround_func(0) != 7 )
332328      {
333329//          machine.firstcpu->suspend(SUSPEND_REASON_SPIN, 0);
334330      }
r18589r18590
618614   // resolve callbacks
619615   m_out_irq_func.resolve(m_out_irq_cb, *this);
620616   m_out_rdy_func.resolve(m_out_rdy_cb, *this);
621   m_in_lightpen_x_func.resolve(m_in_x_cb, *this);
622   m_in_lightpen_y_func.resolve(m_in_y_cb, *this);
623   m_in_lightpen_button_func.resolve(m_in_button_cb, *this);
624   m_in_rdy_workaround_func.resolve(m_in_rdy_cb, *this);
617   m_out_k_func.resolve(m_out_k_cb, *this);
625618
626619   m_cpu = machine().device<cpu_device>(m_cpu_tag);
627620
r18589r18590
838831
839832   //          if (LIGHTPEN_BUTTON)
840833            {
841               m_reg[0x13] = VIC2_X_VALUE;
842               m_reg[0x14] = VIC2_Y_VALUE;
834//               m_reg[0x13] = VIC2_X_VALUE;
835//               m_reg[0x14] = VIC2_Y_VALUE;
843836            }
844837            vic2_set_interrupt(8);
845838         }
r18589r18590
14591452
14601453   //          if (LIGHTPEN_BUTTON)
14611454            {
1462               m_reg[0x13] = VIC2_X_VALUE;
1463               m_reg[0x14] = VIC2_Y_VALUE;
1455//               m_reg[0x13] = VIC2_X_VALUE;
1456//               m_reg[0x14] = VIC2_Y_VALUE;
14641457            }
14651458            vic2_set_interrupt(8);
14661459         }
r18589r18590
16501643
16511644         m_raster_x = 0xfffc;
16521645
1653         if ((m_in_rdy_workaround_func(0) == 0 ) && (m_is_bad_line))
1654            m_rdy_cycles += (43+adjust(0));
1646//         if ((m_in_rdy_workaround_func(0) == 0 ) && (m_is_bad_line))
1647//            m_rdy_cycles += (43+adjust(0));
16551648
16561649         m_cycle++;
16571650         break;
r18589r18590
16651658
16661659         m_vc = m_vc_base;
16671660
1668         if ((m_in_rdy_workaround_func(0) == 1 ) && (m_is_bad_line))
1669            m_rdy_cycles += (42+adjust(0));
1661//         if ((m_in_rdy_workaround_func(0) == 1 ) && (m_is_bad_line))
1662//            m_rdy_cycles += (42+adjust(0));
16701663
16711664         m_cycle++;
16721665         break;
r18589r18590
16851678         m_ml_index = 0;
16861679         vic2_matrix_access();
16871680
1688         if ((m_in_rdy_workaround_func(0) == 2 ) && (m_is_bad_line))
1689            m_rdy_cycles += (41+adjust(0));
1681//         if ((m_in_rdy_workaround_func(0) == 2 ) && (m_is_bad_line))
1682//            m_rdy_cycles += (41+adjust(0));
16901683
16911684         m_cycle++;
16921685         break;
r18589r18590
17091702
17101703         vic2_matrix_access();
17111704
1712         if ((m_in_rdy_workaround_func(0) == 3 ) && (m_is_bad_line))
1713            m_rdy_cycles += (40+adjust(0));
1705//         if ((m_in_rdy_workaround_func(0) == 3 ) && (m_is_bad_line))
1706//            m_rdy_cycles += (40+adjust(0));
17141707
17151708         m_cycle++;
17161709         break;
r18589r18590
17461739         vic2_fetch_if_bad_line();
17471740         vic2_matrix_access();
17481741
1749         if ((m_in_rdy_workaround_func(0) == 4 ) && (m_is_bad_line))
1750            m_rdy_cycles += (40+adjust(0));
1742//         if ((m_in_rdy_workaround_func(0) == 4 ) && (m_is_bad_line))
1743//            m_rdy_cycles += (40+adjust(0));
17511744
17521745         m_cycle++;
17531746         break;
r18589r18590
25542547      val = m_reg[offset];
25552548      break;
25562549
2557   case 0x2f:
2558   case 0x30:
2550   case REGISTER_KCR:
2551   case REGISTER_FAST:
25592552      if (IS_VICIIE)
25602553      {
25612554         val = m_reg[offset];
r18589r18590
27822775      }
27832776      break;
27842777
2785   case 0x2f:
2778   case REGISTER_KCR:
27862779      if (IS_VICIIE)
27872780      {
2788         DBG_LOG(2, "vic write", ("%.2x:%.2x\n", offset, data));
2789         m_reg[offset] = data;
2781         m_reg[offset] = data | 0xf8;
2782
2783         m_out_k_func(0, data & 0x07);
27902784      }
27912785      break;
27922786
2793   case 0x30:
2787   case REGISTER_FAST:
27942788      if (IS_VICIIE)
27952789      {
2796         m_reg[offset] = data;
2790         if (BIT(m_reg[offset], 0) != BIT(data, 0))
2791         {
2792            m_cpu->set_unscaled_clock(clock() << BIT(data, 0));
2793            printf("clock %u\n",clock() << BIT(data, 0));
2794         }
2795         
2796         m_reg[offset] = data | 0xfc;
2797
27972798         m_on = !BIT(data, 0);
27982799      }
27992800      break;
r18589r18590
28412842{
28422843   return m_last_data;
28432844}
2844
2845
2846READ_LINE_MEMBER( mos8564_device::k0_r ) { return VIC2E_K0_LEVEL; }
2847READ_LINE_MEMBER( mos8564_device::k1_r ) { return VIC2E_K1_LEVEL; }
2848READ_LINE_MEMBER( mos8564_device::k2_r ) { return VIC2E_K2_LEVEL; }
2849
2850READ_LINE_MEMBER( mos8566_device::k0_r ) { return VIC2E_K0_LEVEL; }
2851READ_LINE_MEMBER( mos8566_device::k1_r ) { return VIC2E_K1_LEVEL; }
2852READ_LINE_MEMBER( mos8566_device::k2_r ) { return VIC2E_K2_LEVEL; }
trunk/src/mess/video/mos6566.h
r18589r18590
291291   devcb_write_line   m_out_irq_cb;
292292   devcb_write_line   m_out_rdy_cb;
293293
294   devcb_read8         m_in_x_cb;
295   devcb_read8         m_in_y_cb;
296   devcb_read8         m_in_button_cb;
297
298   devcb_read8         m_in_rdy_cb;
294   devcb_write8      m_out_k_cb;
299295};
300296
301297
r18589r18590
443439   UINT64 m_first_ba_cycle;
444440   UINT8 m_device_suspended;
445441
446   /* IRQ */
447442   devcb_resolved_write_line      m_out_irq_func;
448
449   /* RDY */
450443   devcb_resolved_write_line      m_out_rdy_func;
451   devcb_resolved_read8      m_in_rdy_workaround_func;
452
453   /* lightpen */
454   devcb_resolved_read8 m_in_lightpen_button_func;
455   devcb_resolved_read8 m_in_lightpen_x_func;
456   devcb_resolved_read8 m_in_lightpen_y_func;
444   devcb_resolved_write8         m_out_k_func;
457445};
458446
459447
r18589r18590
477465    mos8562_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
478466};
479467
480class vic2e_device_interface
481{
482public:
483   vic2e_device_interface() {}
484   virtual ~vic2e_device_interface() {}
485468
486    virtual DECLARE_READ_LINE_MEMBER( k0_r ) { return 1; }
487    virtual DECLARE_READ_LINE_MEMBER( k1_r ) { return 1; }
488    virtual DECLARE_READ_LINE_MEMBER( k2_r ) { return 1; }
489};
490
491
492469// ======================> mos8564_device
493470
494class mos8564_device :  public mos6567_device, public vic2e_device_interface
471class mos8564_device :  public mos6567_device
495472{
496473public:
497474    // construction/destruction
498475    mos8564_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
499
500    DECLARE_READ_LINE_MEMBER( k0_r );
501    DECLARE_READ_LINE_MEMBER( k1_r );
502    DECLARE_READ_LINE_MEMBER( k2_r );
503476};
504477
505478
r18589r18590
529502
530503// ======================> mos8566_device
531504
532class mos8566_device :  public mos6569_device, public vic2e_device_interface
505class mos8566_device :  public mos6569_device
533506{
534507public:
535508    // construction/destruction
536509    mos8566_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
537
538    DECLARE_READ_LINE_MEMBER( k0_r );
539    DECLARE_READ_LINE_MEMBER( k1_r );
540    DECLARE_READ_LINE_MEMBER( k2_r );
541510};
542511
543512
trunk/src/mess/mess.lst
r18589r18590
635635
636636c128     // Commodore 128 - NTSC
637637c128cr   // Commodore 128CR - NTSC (proto?)
638c128sfi   // Commodore 128 - PAL (Swedish / Finnish)
639//c128fra   // Commodore 128 - PAL (French)
640c128ger   // Commodore 128 - PAL (German)
641//c128nor   // Commodore 128 - PAL (Norwegian)
638c128_se   // Commodore 128 - PAL (Swedish / Finnish)
639//c128_rr   // Commodore 128 - PAL (French)
640c128_de   // Commodore 128 - PAL (German)
641//c128_no   // Commodore 128 - PAL (Norwegian)
642642c128d    // Commodore 128D - PAL
643643c128dpr   // Commodore 128D - NTSC (proto)
644644c128dcr   // Commodore 128DCR - NTSC
645c128drde  // Commodore 128DCR - PAL (German)
646//c128drit  // Commodore 128DCR - PAL (Italian)
647c128drsw  // Commodore 128DCR - PAL (Swedish)
645c128dr_de  // Commodore 128DCR - PAL (German)
646//c128dr_it  // Commodore 128DCR - PAL (Italian)
647c128dr_se  // Commodore 128DCR - PAL (Swedish)
648648c128d81   // Commodore 128D/81
649649
650650
trunk/src/mess/drivers/cbm2.c
r18589r18590
10411041   M6509_TAG,
10421042   DEVCB_DRIVER_LINE_MEMBER(p500_state, vic_irq_w),
10431043   DEVCB_NULL, // RDY
1044   DEVCB_NULL,
1045   DEVCB_NULL,
1046   DEVCB_NULL,
10471044   DEVCB_NULL
10481045};
10491046
trunk/src/mess/drivers/c128.c
r18589r18590
22
33    TODO:
44
5   - C64 mode charrom read
65    - fix fast serial
7    - K0-K2 key line read
86    - clean up inputs
97    - expansion DMA
10    - inherit from c64_state and use common members from there
118
129*/
1310
r18589r18590
4643
4744   int irq = m_cia1_irq || m_vic_irq || m_exp_irq;
4845   int nmi = m_cia2_irq || restore || m_exp_nmi;
46   //int aec = m_exp_dma && m_z80_busack;
47   //int rdy = m_vic_aec && m_z80en && m_vic_ba;
48   //int busreq = !m_z80en || !(m_z80_busack && !aec)
4949
5050   m_maincpu->set_input_line(INPUT_LINE_IRQ0, irq);
5151
r18589r18590
7979   m_game = m_exp->game_r(ca, ba, rw, m_hiram);
8080   m_exrom = m_exp->exrom_r(ca, ba, rw, m_hiram);
8181
82   UINT32 input = clk << 26 | !m_va14 << 25 | m_charen << 24 |
82   UINT32 input = clk << 26 | m_va14 << 25 | m_charen << 24 |
8383      m_hiram << 23 | m_loram << 22 | ba << 21 | VMA5 << 20 | VMA4 << 19 | ms0 << 18 | ms1 << 17 | ms2 << 16 |
8484      m_exrom << 15 | m_game << 14 | rw << 13 | aec << 12 | A10 << 11 | A11 << 10 | A12 << 9 | A13 << 8 |
8585      A14 << 7 | A15 << 6 | z80io << 5 | m_z80en << 4 | ms3 << 3 | vicfix << 2 | dmaack << 1 | _128_256;
8686
87   /*
88   000000000001111111112222222
89   012345678901234567890123456
90   --11--------0------10---0-- 000000000000000001
91   ---0--------0-1----10----1- 000000000000000001
92   ---0--------0--0---10----1- 000000000000000001
93   ---0--1101--111-------1-0-- 000000000000000001
94   ---0--1101--111--------10-- 000000000000000001
95   ---0--1101--11-0-------10-- 000000000000000001
96   ---11-1101--11--100-------- 000000000000000001
97   */
98
9987   UINT32 data = m_pla->read(input);
10088
10189   *sden = BIT(data, 0);
r18589r18590
169157      {
170158         data = m_ram->pointer()[ma];
171159      }
172      else if (!cas1)
160      if (!cas1)
173161      {
174162         data = m_ram->pointer()[0x10000 | ma];
175163      }
176164   }
177   else if (!rom1)
165   if (!rom1)
178166   {
179167      // CR: data = m_rom1[(ms3 << 14) | ((BIT(ta, 14) && BIT(offset, 13)) << 13) | (ta & 0x1000) | (offset & 0xfff)];
180168      data = m_rom1[((BIT(ta, 14) && BIT(offset, 13)) << 13) | (ta & 0x1000) | (offset & 0xfff)];
181169   }
182   else if (!rom2)
170   if (!rom2)
183171   {
184172      data = m_rom2[offset & 0x3fff];
185173   }
186   else if (!rom3)
174   if (!rom3)
187175   {
188176      // CR: data = m_rom3[(BIT(offset, 15) << 14) | (offset & 0x3fff)];
189177      data = m_rom3[offset & 0x3fff];
190178   }
191   else if (!rom4)
179   if (!rom4)
192180   {
193181      data = m_rom4[(ta & 0x1000) | (offset & 0x2fff)];
194182   }
195   else if (!charom)
183   if (!charom)
196184   {
197185      data = m_charom[(ms3 << 12) | (ta & 0xf00) | sa];
198186   }
199   else if (!colorram)
187   if (!colorram && aec)
200188   {
201189      data = m_color_ram[(clrbank << 10) | (ta & 0x300) | sa] & 0x0f;
202190   }
203   else if (!vic)
191   if (!vic)
204192   {
205193      data = m_vic->read(space, offset & 0x3f);
206194   }
207   else if (!from1)
195   if (!from1)
208196   {
209197      data = m_from[offset & 0x7fff];
210198   }
211   else if (!iocs && BIT(offset, 10))
199   if (!iocs && BIT(offset, 10))
212200   {
213201      switch ((BIT(offset, 11) << 2) | ((offset >> 8) & 0x03))
214202      {
r18589r18590
277265      {
278266         m_ram->pointer()[ma] = data;
279267      }
280      else if (!cas1)
268      if (!cas1)
281269      {
282270         m_ram->pointer()[0x10000 | ma] = data;
283271      }
284272   }
285   else if (!colorram && !gwe)
273   if (!colorram && !gwe)
286274   {
287      m_color_ram[(clrbank << 10) | (ta & 0x300) | sa] = data | 0xf0;
275      m_color_ram[(clrbank << 10) | (ta & 0x300) | sa] = data & 0x0f;
288276   }
289   else if (!vic)
277   if (!vic)
290278   {
291279      m_vic->write(space, offset & 0x3f, data);
292280   }
293   else if (!iocs && BIT(offset, 10))
281   if (!iocs && BIT(offset, 10))
294282   {
295283      switch ((BIT(offset, 11) << 2) | ((offset >> 8) & 0x03))
296284      {
r18589r18590
504492static INPUT_PORTS_START( c128 )
505493   PORT_INCLUDE( common_cbm_keyboard )      /* ROW0 -> ROW7 */
506494
507   PORT_START( "KP0" )
495   PORT_START( "K0" )
508496   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD)            PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
509497   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD)          PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
510498   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD)          PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
r18589r18590
514502   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD)          PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
515503   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Help") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
516504
517   PORT_START( "KP1" )
505   PORT_START( "K1" )
518506   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD)          PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
519507   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD)          PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
520508   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD)          PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
r18589r18590
524512   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD)       PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
525513   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC)            PORT_CHAR(UCHAR_MAMEKEY(ESC))
526514
527   PORT_START( "KP2" )
515   PORT_START( "K2" )
528516   PORT_CONFNAME( 0x80, 0x00, "No Scroll (switch)") PORT_CODE(KEYCODE_F9)
529517   PORT_CONFSETTING(   0x00, DEF_STR( Off ) )
530518   PORT_CONFSETTING(   0x80, DEF_STR( On ) )
r18589r18590
751739      if (m_reset)
752740      {
753741         m_subcpu->reset();
754         //m_subcpu->set_state_int(M8502_PC, 0xff3d);
742
755743         m_reset = 0;
756744      }
757745   }
r18589r18590
800788
801789INTERRUPT_GEN_MEMBER( c128_state::frame_interrupt )
802790{
803   static const char *const c128ports[] = { "KP0", "KP1", "KP2" };
804
805791   check_interrupts();
806792
807   /* common keys input ports */
808793   cbm_common_interrupt(&device);
809794
810   /* Fix Me! Currently, neither left Shift nor Shift Lock work in c128, but reading the correspondent input produces a bug!
811    Hence, we overwrite the actual reading as it never happens */
812   if ((ioport("SPECIAL")->read() & 0x40))   //
795   // hack in ShiftLock
796   if ((ioport("SPECIAL")->read() & 0x40))
813797      c64_keyline[1] |= 0x80;
814
815   /* c128 specific: keypad input ports */
816   for (int i = 0; i < 3; i++)
817   {
818      UINT8 value = 0xff;
819      value &= ~ioport(c128ports[i])->read();
820      m_keyline[i] = value;
821   }
822798}
823799
824800WRITE_LINE_MEMBER( c128_state::vic_irq_w )
r18589r18590
828804   check_interrupts();
829805}
830806
807WRITE8_MEMBER( c128_state::vic_k_w )
808{
809   m_vic_k = data;
810}
811
831812static MOS8564_INTERFACE( vic_intf )
832813{
833814   SCREEN_VIC_TAG,
834   Z80A_TAG,
815   M8502_TAG,
835816   DEVCB_DRIVER_LINE_MEMBER(c128_state, vic_irq_w),
836817   DEVCB_NULL,
837   DEVCB_NULL,
838   DEVCB_NULL,
839   DEVCB_NULL,
840   DEVCB_NULL
818   DEVCB_DRIVER_MEMBER(c128_state, vic_k_w)
841819};
842820
843821
r18589r18590
953931
954932   UINT8 data = 0xff;
955933   UINT8 cia0porta = m_cia1->pa_r();
956   //vic2e_device_interface *intf = dynamic_cast<vic2e_device_interface*>(&m_vic);
957934
958935   data &= cbm_common_cia0_port_b_r(m_cia1, cia0porta);
959/*
960    if (!intf->k0_r()) data &= m_keyline[0];
961    if (!intf->k1_r()) data &= m_keyline[1];
962    if (!intf->k2_r()) data &= m_keyline[2];
963*/
936
937    if (!BIT(m_vic_k, 0)) data &= ~ioport("K0")->read();
938    if (!BIT(m_vic_k, 1)) data &= ~ioport("K1")->read();
939    if (!BIT(m_vic_k, 2)) data &= ~ioport("K2")->read();
940
964941   return data;
965942}
966943
r18589r18590
12421219
12431220READ8_MEMBER( c128_state::exp_dma_r )
12441221{
1245   return m_subcpu->space(AS_PROGRAM).read_byte(offset);
1222   int ba = 0, aec = 1, z80io = 1;
1223   offs_t vma = 0;
1224
1225   return read_memory(space, offset, vma, ba, aec, z80io);
12461226}
12471227
12481228WRITE8_MEMBER( c128_state::exp_dma_w )
12491229{
1250   m_subcpu->space(AS_PROGRAM).write_byte(offset, data);
1230   int ba = 0, aec = 1, z80io = 1;
1231   offs_t vma = 0;
1232
1233   return write_memory(space, offset, data, vma, ba, aec, z80io);
12511234}
12521235
12531236WRITE_LINE_MEMBER( c128_state::exp_irq_w )
r18589r18590
12661249
12671250WRITE_LINE_MEMBER( c128_state::exp_dma_w )
12681251{
1269   // TODO
1252   m_exp_dma = state;
1253
1254   check_interrupts();
12701255}
12711256
12721257WRITE_LINE_MEMBER( c128_state::exp_reset_w )
r18589r18590
13141299void c128_state::machine_start()
13151300{
13161301   cbm_common_init();
1317   m_keyline[0] = m_keyline[1] = m_keyline[2] = 0xff;
13181302
13191303   // find memory regions
13201304   m_rom1 = memregion(M8502_TAG)->base();
r18589r18590
13261310
13271311   // allocate memory
13281312   m_color_ram.allocate(0x800);
1313
1314   // state saving
1315   save_item(NAME(m_z80en));
1316   save_item(NAME(m_loram));
1317   save_item(NAME(m_hiram));
1318   save_item(NAME(m_charen));
1319   save_item(NAME(m_game));
1320   save_item(NAME(m_exrom));
1321   save_item(NAME(m_reset));
1322   save_item(NAME(m_va14));
1323   save_item(NAME(m_va15));
1324   save_item(NAME(m_clrbank));
1325   save_item(NAME(m_cnt1));
1326   save_item(NAME(m_sp1));
1327   save_item(NAME(m_iec_data_out));
1328   save_item(NAME(m_cia1_irq));
1329   save_item(NAME(m_cia2_irq));
1330   save_item(NAME(m_vic_irq));
1331   save_item(NAME(m_exp_irq));
1332   save_item(NAME(m_exp_nmi));
1333   save_item(NAME(m_exp_dma));
1334   save_item(NAME(m_cass_rd));
1335   save_item(NAME(m_iec_srq));
13291336}
13301337
13311338
13321339//-------------------------------------------------
1333//  MACHINE_RESET( c64 )
1340//  MACHINE_RESET( c128 )
13341341//-------------------------------------------------
13351342
13361343void c128_state::machine_reset()
r18589r18590
13611368
13621369static MACHINE_CONFIG_START( ntsc, c128_state )
13631370   // basic hardware
1364   MCFG_CPU_ADD(Z80A_TAG, Z80, VIC6567_CLOCK)
1365   MCFG_CPU_PROGRAM_MAP( z80_mem)
1366   MCFG_CPU_IO_MAP( z80_io)
1371   MCFG_CPU_ADD(Z80A_TAG, Z80, VIC6567_CLOCK*2)
1372   MCFG_CPU_PROGRAM_MAP(z80_mem)
1373   MCFG_CPU_IO_MAP(z80_io)
13671374   MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_VIC_TAG, c128_state, frame_interrupt)
13681375   MCFG_QUANTUM_PERFECT_CPU(Z80A_TAG)
13691376
13701377   MCFG_CPU_ADD(M8502_TAG, M8502, VIC6567_CLOCK)
1371   MCFG_CPU_PROGRAM_MAP( m8502_mem)
1372   MCFG_CPU_CONFIG( cpu_intf )
1378   MCFG_CPU_PROGRAM_MAP(m8502_mem)
1379   MCFG_CPU_CONFIG(cpu_intf)
13731380   MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_VIC_TAG, c128_state, frame_interrupt)
13741381   MCFG_QUANTUM_PERFECT_CPU(M8502_TAG)
13751382
r18589r18590
14741481
14751482static MACHINE_CONFIG_START( pal, c128_state )
14761483   // basic hardware
1477   MCFG_CPU_ADD(Z80A_TAG, Z80, VIC6569_CLOCK)
1478   MCFG_CPU_PROGRAM_MAP( z80_mem)
1484   MCFG_CPU_ADD(Z80A_TAG, Z80, VIC6569_CLOCK*2)
1485   MCFG_CPU_PROGRAM_MAP(z80_mem)
14791486   MCFG_CPU_IO_MAP(z80_io)
14801487   MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_VIC_TAG, c128_state, frame_interrupt)
14811488   MCFG_QUANTUM_PERFECT_CPU(Z80A_TAG)
14821489
14831490   MCFG_CPU_ADD(M8502_TAG, M8502, VIC6569_CLOCK)
1484   MCFG_CPU_PROGRAM_MAP( m8502_mem)
1485   MCFG_CPU_CONFIG( cpu_intf )
1491   MCFG_CPU_PROGRAM_MAP(m8502_mem)
1492   MCFG_CPU_CONFIG(cpu_intf)
14861493   MCFG_CPU_VBLANK_INT_DRIVER(SCREEN_VIC_TAG, c128_state, frame_interrupt)
14871494   MCFG_QUANTUM_PERFECT_CPU(M8502_TAG)
14881495
r18589r18590
16061613
16071614
16081615//-------------------------------------------------
1609//  ROM( c128ger )
1616//  ROM( c128_de )
16101617//-------------------------------------------------
16111618
1612ROM_START( c128ger )
1619ROM_START( c128_de )
16131620   ROM_REGION( 0x10000, M8502_TAG, 0 )
16141621   ROM_DEFAULT_BIOS("r4")
16151622   ROM_LOAD( "251913-01.u32", 0x0000, 0x4000, CRC(0010ec31) SHA1(765372a0e16cbb0adf23a07b80f6b682b39fbf88) )
r18589r18590
16351642
16361643
16371644//-------------------------------------------------
1638//  ROM( c128sfi )
1645//  ROM( c128_se )
16391646//-------------------------------------------------
16401647
1641ROM_START( c128sfi )
1648ROM_START( c128_se )
16421649   ROM_REGION( 0x10000, M8502_TAG, 0 )
16431650   ROM_LOAD( "325182-01.u32", 0x0000, 0x4000, CRC(2aff27d3) SHA1(267654823c4fdf2167050f41faa118218d2569ce) ) // "C128 64 Sw/Fi"
16441651   ROM_LOAD( "318018-02.u33", 0x4000, 0x4000, CRC(2ee6e2fa) SHA1(60e1491e1d5782e3cf109f518eb73427609badc6) )
r18589r18590
17231730
17241731
17251732//-------------------------------------------------
1726//  ROM( c128drde )
1733//  ROM( c128dr_de )
17271734//-------------------------------------------------
17281735
1729ROM_START( c128drde )
1736ROM_START( c128dr_de )
17301737   ROM_REGION( 0x10000, M8502_TAG, 0 )
17311738   ROM_LOAD( "318022-02.u34", 0x4000, 0x8000, CRC(af1ae1e8) SHA1(953dcdf5784a6b39ef84dd6fd968c7a03d8d6816) )
17321739   ROM_LOAD( "318077-01.u32", 0x0000, 0x4000, CRC(eb6e2c8f) SHA1(6b3d891fedabb5335f388a5d2a71378472ea60f4) )
r18589r18590
17451752
17461753
17471754//-------------------------------------------------
1748//  ROM( c128drsw )
1755//  ROM( c128dr_se )
17491756//-------------------------------------------------
17501757
1751ROM_START( c128drsw )
1758ROM_START( c128dr_se )
17521759   ROM_REGION( 0x10000, M8502_TAG, 0 )
17531760   ROM_LOAD( "318022-02.u34", 0x4000, 0x8000, CRC(af1ae1e8) SHA1(953dcdf5784a6b39ef84dd6fd968c7a03d8d6816) )
17541761   ROM_LOAD( "318034-01.u32", 0x0000, 0x4000, CRC(cb4e1719) SHA1(9b0a0cef56d00035c611e07170f051ee5e63aa3a) )
r18589r18590
17781785//  SYSTEM DRIVERS
17791786//**************************************************************************
17801787
1781//    YEAR  NAME    PARENT  COMPAT  MACHINE     INPUT   INIT                        COMPANY                        FULLNAME                                     FLAGS
1782COMP( 1985, c128,      0,     0,   c128,     c128, driver_device,    0,     "Commodore Business Machines", "Commodore 128 (NTSC)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1783COMP( 1985, c128sfi,   c128,  0,   c128pal,  c128swe, driver_device, 0,  "Commodore Business Machines", "Commodore 128 (Sweden/Finland)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1784//COMP( 1985, c128fra,   c128,  0,   c128pal,  c128fra, driver_device, 0,  "Commodore Business Machines", "Commodore 128 (France)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1785COMP( 1985, c128ger,   c128,  0,   c128pal,  c128ger, driver_device, 0,  "Commodore Business Machines", "Commodore 128 (Germany)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1786//COMP( 1985, c128nor,   c128,  0,   c128pal,  c128ita, driver_device, 0,  "Commodore Business Machines", "Commodore 128 (Norway)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1787COMP( 1985, c128dpr,   c128,  0,   c128d,    c128, driver_device,    0,   "Commodore Business Machines", "Commodore 128D (NTSC, prototype)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1788COMP( 1985, c128d,     c128,  0,   c128dpal, c128, driver_device,    0,"Commodore Business Machines", "Commodore 128D (PAL)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1788//    YEAR  NAME        PARENT  COMPAT  MACHINE     INPUT       INIT                COMPANY                        FULLNAME                                 FLAGS
1789COMP( 1985, c128,      0,      0,      c128,      c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128 (NTSC)",               GAME_SUPPORTS_SAVE )
1790COMP( 1985, c128_se,   c128,   0,      c128pal,   c128swe,   driver_device,   0,   "Commodore Business Machines", "Commodore 128 (Sweden/Finland)",      GAME_SUPPORTS_SAVE )
1791//COMP( 1985, c128fra,   c128,  0,   c128pal,  c128fra, driver_device, 0,  "Commodore Business Machines", "Commodore 128 (France)", GAME_SUPPORTS_SAVE )
1792COMP( 1985, c128_de,   c128,   0,      c128pal,   c128ger,   driver_device,   0,   "Commodore Business Machines", "Commodore 128 (Germany)",            GAME_SUPPORTS_SAVE )
1793//COMP( 1985, c128nor,   c128,  0,   c128pal,  c128ita, driver_device, 0,  "Commodore Business Machines", "Commodore 128 (Norway)", GAME_SUPPORTS_SAVE )
1794COMP( 1985, c128dpr,   c128,   0,      c128d,      c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128D (NTSC, prototype)",      GAME_SUPPORTS_SAVE )
1795COMP( 1985, c128d,      c128,   0,      c128dpal,   c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128D (PAL)",               GAME_SUPPORTS_SAVE )
17891796
1790COMP( 1985, c128cr,    c128,  0,   c128,     c128, driver_device,    0,     "Commodore Business Machines", "Commodore 128CR (NTSC, prototype?)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1791COMP( 1986, c128dcr,   c128,  0,   c128dcr,  c128, driver_device,    0, "Commodore Business Machines", "Commodore 128DCR (NTSC)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1792COMP( 1986, c128drde,  c128,  0,   c128dcrp, c128ger, driver_device, 0,"Commodore Business Machines", "Commodore 128DCR (Germany)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1797COMP( 1985, c128cr,      c128,   0,      c128,      c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128CR (NTSC, prototype)",      GAME_SUPPORTS_SAVE )
1798COMP( 1986, c128dcr,   c128,   0,      c128dcr,   c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128DCR (NTSC)",            GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1799COMP( 1986, c128dr_de,   c128,   0,      c128dcrp,   c128ger,   driver_device,   0,   "Commodore Business Machines", "Commodore 128DCR (Germany)",         GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
17931800//COMP( 1986, c128drit,  c128,  0,   c128dcrp, c128ita, driver_device, 0,"Commodore Business Machines", "Commodore 128DCR (Italy)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1794COMP( 1986, c128drsw,  c128,  0,   c128dcrp, c128swe, driver_device, 0,"Commodore Business Machines", "Commodore 128DCR (Sweden/Finland)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1795COMP( 1986, c128d81,   c128,  0,   c128d81,  c128, driver_device,    0, "Commodore Business Machines", "Commodore 128D/81 (NTSC, prototype)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1801COMP( 1986, c128dr_se,   c128,   0,      c128dcrp,   c128swe,   driver_device,   0,   "Commodore Business Machines", "Commodore 128DCR (Sweden/Finland)",      GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1802COMP( 1986, c128d81,   c128,   0,      c128d81,   c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128D/81 (NTSC, prototype)",   GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
trunk/src/mess/drivers/c64.c
r18589r18590
77    - tsuit215 test failures
88        - IRQ (WRONG $DC0D)
99        - NMI (WRONG $DD0D)
10        - all CIA tests
10        - some CIA tests
1111
1212    - 64C PLA dump
1313    - clean up inputs
r18589r18590
4949{
5050   int restore = BIT(ioport("SPECIAL")->read(), 7);
5151
52   m_maincpu->set_input_line(M6510_IRQ_LINE, m_cia1_irq || m_vic_irq || m_exp_irq);
53   m_maincpu->set_input_line(INPUT_LINE_NMI, m_cia2_irq || restore || m_exp_nmi);
52   int irq = m_cia1_irq || m_vic_irq || m_exp_irq;
53   int nmi = m_cia2_irq || restore || m_exp_nmi;
54   //int rdy = m_exp_dma && m_vic_ba;
5455
55   m_cia1->flag_w(m_cass_rd && m_iec_srq);
56   m_maincpu->set_input_line(M6510_IRQ_LINE, irq);
57   m_maincpu->set_input_line(INPUT_LINE_NMI, nmi);
58
59   int flag = m_cass_rd && m_iec_srq;
60
61   m_cia1->flag_w(flag);
5662}
5763
5864
r18589r18590
6268//**************************************************************************
6369
6470//-------------------------------------------------
65//  bankswitch -
71//  read_pla -
6672//-------------------------------------------------
6773
68void 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)
74void c64_state::read_pla(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)
6975{
7076   int game = m_exp->game_r(offset, ba, rw, m_hiram);
7177   int exrom = m_exp->exrom_r(offset, ba, rw, m_hiram);
7278
73   UINT32 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;
79   UINT32 input = VA12 << 15 | VA13 << 14 | game << 13 | exrom << 12 | rw << 11 | aec << 10 | ba << 9 | A12 << 8 |
80      A13 << 7 | A14 << 6 | A15 << 5 | m_va14 << 4 | m_charen << 3 | m_hiram << 2 | m_loram << 1 | cas;
81
7482   UINT32 data = m_pla->read(input);
7583
7684   *casram = BIT(data, 0);
r18589r18590
8896//  read_memory -
8997//-------------------------------------------------
9098
91UINT8 c64_state::read_memory(address_space &space, offs_t offset, int ba, int casram, int basic, int kernal, int charom, int io, int roml, int romh)
99UINT8 c64_state::read_memory(address_space &space, offs_t offset, offs_t va, int rw, int aec, int ba, int cas)
92100{
101   int casram, basic, kernal, charom, grw, io, roml, romh;
93102   int io1 = 1, io2 = 1;
94103
104   read_pla(offset, va, rw, !aec, ba, cas, &casram, &basic, &kernal, &charom, &grw, &io, &roml, &romh);
105
95106   UINT8 data = 0xff;
96107
97   if (ba)
108   if (!aec)
98109   {
99110      data = m_vic->bus_r();
100111   }
r18589r18590
103114   {
104115      data = m_ram->pointer()[offset];
105116   }
106   else if (!basic)
117   if (!basic)
107118   {
108119      data = m_basic[offset & 0x1fff];
109120   }
110   else if (!kernal)
121   if (!kernal)
111122   {
112123      data = m_kernal[offset & 0x1fff];
113124   }
114   else if (!charom)
125   if (!charom)
115126   {
116127      data = m_charom[offset & 0xfff];
117128   }
118   else if (!io)
129   if (!io)
119130   {
120131      switch ((offset >> 10) & 0x03)
121132      {
r18589r18590
128139         break;
129140
130141      case 2: // COLOR
131         data = m_color_ram[offset & 0x3ff] | 0xf0;
142         data = m_color_ram[offset & 0x3ff] & 0x0f;
132143         break;
133144
134145      case 3: // CIAS
r18589r18590
159170
160171
161172//-------------------------------------------------
162//  read -
173//  write_memory -
163174//-------------------------------------------------
164175
165READ8_MEMBER( c64_state::read )
176void c64_state::write_memory(address_space &space, offs_t offset, UINT8 data, int rw, int aec, int ba, int cas)
166177{
167   offs_t va = 0;
168   int rw = 1, aec = 0, ba = 1, cas = 0;
169178   int casram, basic, kernal, charom, grw, io, roml, romh;
170
171   bankswitch(offset, va, rw, aec, ba, cas, &casram, &basic, &kernal, &charom, &grw, &io, &roml, &romh);
172
173   return read_memory(space, offset, ba, casram, basic, kernal, charom, io, roml, romh);
174}
175
176
177//-------------------------------------------------
178//  write -
179//-------------------------------------------------
180
181WRITE8_MEMBER( c64_state::write )
182{
183179   offs_t va = 0;
184   int rw = 0, aec = 0, ba = 1, cas = 0;
185180   int io1 = 1, io2 = 1;
186   int casram, basic, kernal, charom, grw, io, roml, romh;
187181
188   bankswitch(offset, va, rw, aec, ba, cas, &casram, &basic, &kernal, &charom, &grw, &io, &roml, &romh);
189
182   read_pla(offset, va, rw, !aec, ba, cas, &casram, &basic, &kernal, &charom, &grw, &io, &roml, &romh);
183   
190184   if (offset < 0x0002)
191185   {
192186      // write to internal CPU register
r18589r18590
197191   {
198192      m_ram->pointer()[offset] = data;
199193   }
200   else if (!io)
194   if (!io)
201195   {
202196      switch ((offset >> 10) & 0x03)
203197      {
r18589r18590
241235
242236
243237//-------------------------------------------------
238//  read -
239//-------------------------------------------------
240
241READ8_MEMBER( c64_state::read )
242{
243   offs_t va = 0;
244   int rw = 1, aec = 1, ba = 1, cas = 0;
245
246   return read_memory(space, offset, va, rw, aec, ba, cas);
247}
248
249
250//-------------------------------------------------
251//  write -
252//-------------------------------------------------
253
254WRITE8_MEMBER( c64_state::write )
255{
256   int rw = 0, aec = 1, ba = 1, cas = 0;
257   
258   write_memory(space, offset, data, rw, aec, ba, cas);
259}
260
261
262//-------------------------------------------------
244263//  vic_videoram_r -
245264//-------------------------------------------------
246265
247266READ8_MEMBER( c64_state::vic_videoram_r )
248267{
249   offset = (!m_va15 << 15) | (!m_va14 << 14) | offset;
268   offs_t va = (!m_va15 << 15) | (!m_va14 << 14) | offset;
269   int rw = 1, aec = 0, ba = 0, cas = 0;
250270
251   int rw = 1, aec = 1, ba = 0, cas = 0;
252   int casram, basic, kernal, charom, grw, io, roml, romh;
253   bankswitch(0xffff, offset, rw, aec, ba, cas, &casram, &basic, &kernal, &charom, &grw, &io, &roml, &romh);
254
255   return read_memory(space, offset, ba, casram, basic, kernal, charom, io, roml, romh);
271   return read_memory(space, offset, va, rw, aec, ba, cas);
256272}
257273
258274
r18589r18590
386402   SCREEN_TAG,
387403   M6510_TAG,
388404   DEVCB_DRIVER_LINE_MEMBER(c64_state, vic_irq_w),
389   DEVCB_NULL, // RDY
390405   DEVCB_NULL,
391   DEVCB_NULL,
392   DEVCB_NULL,
393406   DEVCB_NULL
394407};
395408
r18589r18590
844857   check_interrupts();
845858}
846859
860WRITE_LINE_MEMBER( c64_state::exp_dma_w )
861{
862   if (m_exp_dma != state)
863   {
864      m_exp_dma = state;
865
866      m_maincpu->set_input_line(INPUT_LINE_HALT, m_exp_dma);
867   }
868}
869
847870WRITE_LINE_MEMBER( c64_state::exp_reset_w )
848871{
849872   if (state == ASSERT_LINE)
r18589r18590
858881   DEVCB_DRIVER_MEMBER(c64_state, exp_dma_w),
859882   DEVCB_DRIVER_LINE_MEMBER(c64_state, exp_irq_w),
860883   DEVCB_DRIVER_LINE_MEMBER(c64_state, exp_nmi_w),
861   DEVCB_CPU_INPUT_LINE(M6510_TAG, INPUT_LINE_HALT),
884   DEVCB_DRIVER_LINE_MEMBER(c64_state, exp_dma_w),
862885   DEVCB_DRIVER_LINE_MEMBER(c64_state, exp_reset_w)
863886};
864887
r18589r18590
907930   save_item(NAME(m_vic_irq));
908931   save_item(NAME(m_exp_irq));
909932   save_item(NAME(m_exp_nmi));
933   save_item(NAME(m_exp_dma));
910934   save_item(NAME(m_cass_rd));
911935   save_item(NAME(m_iec_srq));
912936}
r18589r18590
974998
975999   // sound hardware
9761000   MCFG_SPEAKER_STANDARD_MONO("mono")
977   MCFG_SOUND_ADD(MOS6851_TAG, SID6581, VIC6567_CLOCK)
1001   MCFG_SOUND_ADD(MOS6581_TAG, SID6581, VIC6567_CLOCK)
9781002   MCFG_SOUND_CONFIG(sid_intf)
9791003   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
9801004   MCFG_SOUND_ADD("dac", DAC, 0)
r18589r18590
10501074//-------------------------------------------------
10511075
10521076static MACHINE_CONFIG_DERIVED_CLASS( ntsc_c, ntsc, c64c_state )
1053   MCFG_SOUND_REPLACE(MOS6851_TAG, SID8580, VIC6567_CLOCK)
1077   MCFG_SOUND_REPLACE(MOS6581_TAG, SID8580, VIC6567_CLOCK)
10541078   MCFG_SOUND_CONFIG(sid_intf)
10551079   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
10561080MACHINE_CONFIG_END
r18589r18590
10731097
10741098   // sound hardware
10751099   MCFG_SPEAKER_STANDARD_MONO("mono")
1076   MCFG_SOUND_ADD(MOS6851_TAG, SID6581, VIC6569_CLOCK)
1100   MCFG_SOUND_ADD(MOS6581_TAG, SID6581, VIC6569_CLOCK)
10771101   MCFG_SOUND_CONFIG(sid_intf)
10781102   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
10791103   MCFG_SOUND_ADD("dac", DAC, 0)
r18589r18590
11271151//-------------------------------------------------
11281152
11291153static MACHINE_CONFIG_DERIVED_CLASS( pal_c, pal, c64c_state )
1130   MCFG_SOUND_REPLACE(MOS6851_TAG, SID8580, VIC6569_CLOCK)
1154   MCFG_SOUND_REPLACE(MOS6581_TAG, SID8580, VIC6569_CLOCK)
11311155   MCFG_SOUND_CONFIG(sid_intf)
11321156   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
11331157MACHINE_CONFIG_END
r18589r18590
11501174
11511175   // sound hardware
11521176   MCFG_SPEAKER_STANDARD_MONO("mono")
1153   MCFG_SOUND_ADD(MOS6851_TAG, SID8580, VIC6569_CLOCK)
1177   MCFG_SOUND_ADD(MOS6581_TAG, SID8580, VIC6569_CLOCK)
11541178   MCFG_SOUND_CONFIG(sid_intf)
11551179   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
11561180   MCFG_SOUND_ADD("dac", DAC, 0)
trunk/src/mess/drivers/vic10.c
r18589r18590
207207   cbm_common_interrupt(&device);
208208}
209209
210READ8_MEMBER( vic10_state::vic_lightpen_x_cb )
211{
212   return ioport("LIGHTX")->read() & ~0x01;
213}
214
215READ8_MEMBER( vic10_state::vic_lightpen_y_cb )
216{
217   return ioport("LIGHTY")->read() & ~0x01;
218}
219
220READ8_MEMBER( vic10_state::vic_lightpen_button_cb )
221{
222   return ioport("OTHER")->read() & 0x04;
223}
224
225210WRITE_LINE_MEMBER( vic10_state::vic_irq_w )
226211{
227212   m_vic_irq = state;
r18589r18590
229214   check_interrupts();
230215}
231216
232READ8_MEMBER( vic10_state::vic_rdy_cb )
233{
234   return ioport("CYCLES")->read() & 0x07;
235}
236
237217static MOS6566_INTERFACE( vic_intf )
238218{
239219   SCREEN_TAG,
240220   M6510_TAG,
241221   DEVCB_DRIVER_LINE_MEMBER(vic10_state, vic_irq_w),
242222   DEVCB_NULL,
243   DEVCB_DRIVER_MEMBER(vic10_state, vic_lightpen_x_cb),
244   DEVCB_DRIVER_MEMBER(vic10_state, vic_lightpen_y_cb),
245   DEVCB_DRIVER_MEMBER(vic10_state, vic_lightpen_button_cb),
246   DEVCB_DRIVER_MEMBER(vic10_state, vic_rdy_cb)
223   DEVCB_NULL
247224};
248225
249226

Previous 199869 Revisions Next


© 1997-2024 The MAME Team