Previous 199869 Revisions Next

r19665 Tuesday 18th December, 2012 at 15:37:46 UTC by Curt Coder
(MESS) c1571: Some 1571CR and Mini Chief WIP. (nw)
[src/emu/machine]mos6526.c mos6526.h
[src/mess/drivers]c128.c
[src/mess/machine]c1571.c c1571.h

trunk/src/emu/machine/mos6526.c
r19664r19665
5454
5555
5656// interrupt control register
57#define ICR_TA      0x01
58#define ICR_TB      0x02
59#define ICR_ALARM   0x04
60#define ICR_SP      0x08
61#define ICR_FLAG   0x10
57#define ICR_TA      0x01
58#define ICR_TB      0x02
59#define ICR_ALARM   0x04
60#define ICR_SP      0x08
61#define ICR_FLAG    0x10
6262
6363
6464// interrupt mask register
65#define IMR_TA      BIT(m_imr, 0)
66#define IMR_TB      BIT(m_imr, 1)
67#define IMR_ALARM   BIT(m_imr, 2)
68#define IMR_SP      BIT(m_imr, 3)
69#define IMR_FLAG   BIT(m_imr, 4)
70#define IMR_SET      BIT(data, 7)
65#define IMR_TA      BIT(m_imr, 0)
66#define IMR_TB      BIT(m_imr, 1)
67#define IMR_ALARM   BIT(m_imr, 2)
68#define IMR_SP      BIT(m_imr, 3)
69#define IMR_FLAG    BIT(m_imr, 4)
70#define IMR_SET     BIT(data, 7)
7171
7272
7373// control register A
r19664r19665
7777   CRA_INMODE_CNT
7878};
7979
80#define CRA_START      0x01
81#define CRA_STARTED      BIT(m_cra, 0)
82#define CRA_PBON      BIT(m_cra, 1)
83#define CRA_OUTMODE    BIT(m_cra, 2)
84#define CRA_RUNMODE    BIT(m_cra, 3)
85#define CRA_LOAD      BIT(m_cra, 4)
86#define CRA_INMODE      BIT(m_cra, 5)
87#define CRA_SPMODE      BIT(m_cra, 6)
88#define CRA_TODIN      BIT(m_cra, 7)
80#define CRA_START       0x01
81#define CRA_STARTED     BIT(m_cra, 0)
82#define CRA_PBON        BIT(m_cra, 1)
83#define CRA_OUTMODE     BIT(m_cra, 2)
84#define CRA_RUNMODE     BIT(m_cra, 3)
85#define CRA_LOAD        BIT(m_cra, 4)
86#define CRA_INMODE      BIT(m_cra, 5)
87#define CRA_SPMODE      BIT(m_cra, 6)
88#define CRA_TODIN       BIT(m_cra, 7)
8989
9090
9191// control register B
r19664r19665
9797   CRB_INMODE_CNT_TA
9898};
9999
100#define CRB_START      0x01
101#define CRB_STARTED      BIT(m_crb, 0)
102#define CRB_PBON      BIT(m_crb, 1)
103#define CRB_OUTMODE    BIT(m_crb, 2)
104#define CRB_RUNMODE    BIT(m_crb, 3)
105#define CRB_LOAD      BIT(m_crb, 4)
106#define CRB_INMODE      ((m_crb & 0x60) >> 5)
107#define CRB_ALARM      BIT(m_crb, 7)
100#define CRB_START       0x01
101#define CRB_STARTED     BIT(m_crb, 0)
102#define CRB_PBON        BIT(m_crb, 1)
103#define CRB_OUTMODE     BIT(m_crb, 2)
104#define CRB_RUNMODE     BIT(m_crb, 3)
105#define CRB_LOAD        BIT(m_crb, 4)
106#define CRB_INMODE      ((m_crb & 0x60) >> 5)
107#define CRB_ALARM       BIT(m_crb, 7)
108108
109109
110110
r19664r19665
146146   // or initialize to defaults if none provided
147147   else
148148   {
149       memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
150       memset(&m_out_pc_cb, 0, sizeof(m_out_pc_cb));
151       memset(&m_out_cnt_cb, 0, sizeof(m_out_cnt_cb));
152       memset(&m_out_sp_cb, 0, sizeof(m_out_sp_cb));
153       memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
154       memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
155       memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
156       memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
149      memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
150      memset(&m_out_pc_cb, 0, sizeof(m_out_pc_cb));
151      memset(&m_out_cnt_cb, 0, sizeof(m_out_cnt_cb));
152      memset(&m_out_sp_cb, 0, sizeof(m_out_sp_cb));
153      memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
154      memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
155      memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
156      memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
157157   }
158158}
159159
r19664r19665
264264
265265inline void mos6526_device::clock_tod()
266266{
267   UINT8 subsecond   = (UINT8) (m_tod >>  0);
268   UINT8 second   = (UINT8) (m_tod >>  8);
269   UINT8 minute   = (UINT8) (m_tod >> 16);
270   UINT8 hour      = (UINT8) (m_tod >> 24);
267   UINT8 subsecond = (UINT8) (m_tod >>  0);
268   UINT8 second    = (UINT8) (m_tod >>  8);
269   UINT8 minute    = (UINT8) (m_tod >> 16);
270   UINT8 hour      = (UINT8) (m_tod >> 24);
271271
272272   m_tod_count++;
273273
r19664r19665
305305      }
306306   }
307307
308   m_tod = (((UINT32) subsecond)   <<  0)
309        | (((UINT32) second)      <<  8)
310        | (((UINT32) minute)      << 16)
311        | (((UINT32) hour)      << 24);
308   m_tod = (((UINT32) subsecond)   <<  0)
309         | (((UINT32) second)        <<  8)
310         | (((UINT32) minute)        << 16)
311         | (((UINT32) hour)      << 24);
312312}
313313
314314
r19664r19665
631631//-------------------------------------------------
632632
633633mos6526_device::mos6526_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
634    : device_t(mconfig, type, name, tag, owner, clock),
635     device_execute_interface(mconfig, *this),
636     m_icount(0),
637     m_variant(variant)
634   : device_t(mconfig, type, name, tag, owner, clock),
635      device_execute_interface(mconfig, *this),
636      m_icount(0),
637      m_variant(variant)
638638{
639639}
640640
641641mos6526_device::mos6526_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
642    : device_t(mconfig, MOS6526, "MOS6526", tag, owner, clock),
643     device_execute_interface(mconfig, *this),
644     m_icount(0),
645     m_variant(TYPE_6526)
642   : device_t(mconfig, MOS6526, "MOS6526", tag, owner, clock),
643      device_execute_interface(mconfig, *this),
644      m_icount(0),
645      m_variant(TYPE_6526)
646646{ }
647647
648648mos6526a_device::mos6526a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
649    : mos6526_device(mconfig, MOS6526A, "MOS6526A", tag, owner, clock, TYPE_6526A) { }
649   : mos6526_device(mconfig, MOS6526A, "MOS6526A", tag, owner, clock, TYPE_6526A) { }
650650
651651mos8520_device::mos8520_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
652    : mos6526_device(mconfig, MOS8520, "MOS8520", tag, owner, clock, TYPE_8520) { }
652   : mos6526_device(mconfig, MOS8520, "MOS8520", tag, owner, clock, TYPE_8520) { }
653653
654654mos5710_device::mos5710_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
655    : mos6526_device(mconfig, MOS5710, "MOS5710", tag, owner, clock, TYPE_5710) { }
655   : mos6526_device(mconfig, MOS5710, "MOS5710", tag, owner, clock, TYPE_5710) { }
656656
657657
658658//-------------------------------------------------
trunk/src/emu/machine/mos6526.h
r19664r19665
2828                   TOD  19 |             | 22  R/W
2929                   Vcc  20 |_____________| 21  _IRQ
3030
31                            _____   _____
32                  FCO*   1 |*    \_/     | 48  FDO*
33                   TED   2 |             | 47  FCI*
34                  phi0   3 |             | 46  FDI*
35                 CLKIN   4 |             | 45  IRQ
36                 CTRLO   5 |             | 44  RSET
37                 CTRLI   6 |             | 43
38                  phi2   7 |             | 42
39                    D7   8 |             | 41  INDEX*
40                    D6   9 |             | 40  WG2*
41                    D5  10 |             | 39  WPRT*
42                    D4  11 |             | 38  RPULSE
43                   GND  12 |   MOS5710   | 37  Q
44                   Vcc  13 |             | 36  Vcc
45                    D3  14 |             | 35  GND
46                    D2  15 |             | 34  CS3*
47                    D1  16 |             | 33  CS2*
48                    D0  17 |             | 32  CS1*
49                   A15  18 |             | 31  R/W*
50                   A14  19 |             | 30  OSC
51                   A13  20 |             | 29  XTL1
52                   A12  21 |             | 28  XTL2
53                   A10  22 |             | 27  A0
54                    A4  23 |             | 26  A1
55                    A3  24 |_____________| 25  A2
56
3157**********************************************************************/
3258
3359#pragma once
r19664r19665
137163   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
138164   virtual void execute_run();
139165
140    int m_icount;
166   int m_icount;
141167   int m_variant;
142168   int m_tod_clock;
143169
r19664r19665
157183   inline void write_tod(int offset, UINT8 data);
158184   inline void synchronize();
159185
160   devcb_resolved_write_line   m_out_irq_func;
161   devcb_resolved_write_line   m_out_pc_func;
162   devcb_resolved_write_line   m_out_cnt_func;
163   devcb_resolved_write_line   m_out_sp_func;
186   devcb_resolved_write_line   m_out_irq_func;
187   devcb_resolved_write_line   m_out_pc_func;
188   devcb_resolved_write_line   m_out_cnt_func;
189   devcb_resolved_write_line   m_out_sp_func;
164190   devcb_resolved_read8        m_in_pa_func;
165191   devcb_resolved_write8       m_out_pa_func;
166192   devcb_resolved_read8        m_in_pb_func;
trunk/src/mess/drivers/c128.c
r19664r19665
33    TODO:
44
55    - connect CAPS LOCK to charom A12 on international variants
6    - DCR models won't boot with 1571CR drive
7    - fix fast serial
86    - remove frame interrupt handler
97    - expansion DMA
108
r19664r19665
502500   PORT_INCLUDE( common_cbm_keyboard )
503501
504502   PORT_START( "K0" )
505   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD)            PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
506   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD)          PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
507   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD)          PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
508   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD)            PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
509   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("TAB") PORT_CODE(KEYCODE_F6)            PORT_CHAR('\t')
510   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD)          PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
511   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD)          PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
503   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD)             PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
504   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD)             PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
505   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD)             PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
506   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD)             PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
507   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("TAB") PORT_CODE(KEYCODE_F6)               PORT_CHAR('\t')
508   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD)             PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
509   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD)             PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
512510   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("HELP") PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
513511
514512   PORT_START( "K1" )
515   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD)          PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
516   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD)          PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
517   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD)          PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
518   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER_PAD)       PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
513   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD)             PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
514   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD)             PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
515   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD)             PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
516   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER_PAD)         PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
519517   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LINE FEED") PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(PGDN))
520   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD)         PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
521   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD)       PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
522   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_F5)            PORT_CHAR(UCHAR_MAMEKEY(ESC))
518   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD)          PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
519   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD)         PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))
520   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_F5)               PORT_CHAR(UCHAR_MAMEKEY(ESC))
523521
524522   PORT_START( "K2" )
525523   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NO SCROLL") PORT_CODE(KEYCODE_F12) PORT_TOGGLE
526   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT)          PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
527   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT)            PORT_CHAR(UCHAR_MAMEKEY(LEFT))
528   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN)            PORT_CHAR(UCHAR_MAMEKEY(DOWN))
529   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP)            PORT_CHAR(UCHAR_MAMEKEY(UP))
530   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD)         PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
531   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD)          PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
524   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT)             PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
525   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT)              PORT_CHAR(UCHAR_MAMEKEY(LEFT))
526   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN)              PORT_CHAR(UCHAR_MAMEKEY(DOWN))
527   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP)                PORT_CHAR(UCHAR_MAMEKEY(UP))
528   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD)           PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
529   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD)             PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
532530   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ALT") PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(LALT))
533531
534532   PORT_START( "SPECIAL" )
r19664r19665
549547   PORT_INCLUDE( c128 )
550548
551549   PORT_MODIFY( "ROW1" )
552   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z  { Y }") PORT_CODE(KEYCODE_Z)               PORT_CHAR('Z')
553   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3  #  { 3  Paragraph }") PORT_CODE(KEYCODE_3)      PORT_CHAR('3') PORT_CHAR('#')
550   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z  { Y }") PORT_CODE(KEYCODE_Z)                   PORT_CHAR('Z')
551   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3  #  { 3  Paragraph }") PORT_CODE(KEYCODE_3)     PORT_CHAR('3') PORT_CHAR('#')
554552
555553   PORT_MODIFY( "ROW3" )
556   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y  { Z }") PORT_CODE(KEYCODE_Y)               PORT_CHAR('Y')
557   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7  '  { 7  / }") PORT_CODE(KEYCODE_7)            PORT_CHAR('7') PORT_CHAR('\'')
554   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Y  { Z }") PORT_CODE(KEYCODE_Y)                   PORT_CHAR('Y')
555   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7  '  { 7  / }") PORT_CODE(KEYCODE_7)             PORT_CHAR('7') PORT_CHAR('\'')
558556
559557   PORT_MODIFY( "ROW4" )
560   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0  { = }") PORT_CODE(KEYCODE_0)               PORT_CHAR('0')
558   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0  { = }") PORT_CODE(KEYCODE_0)                   PORT_CHAR('0')
561559
562560   PORT_MODIFY( "ROW5" )
563   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(",  <  { ; }") PORT_CODE(KEYCODE_COMMA)         PORT_CHAR(',') PORT_CHAR('<')
561   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(",  <  { ; }") PORT_CODE(KEYCODE_COMMA)            PORT_CHAR(',') PORT_CHAR('<')
564562   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Paragraph  \xE2\x86\x91  { \xc3\xbc }") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0x00A7) PORT_CHAR(0x2191)
565   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(":  [  { \xc3\xa4 }") PORT_CODE(KEYCODE_COLON)      PORT_CHAR(':') PORT_CHAR('[')
566   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(".  >  { : }") PORT_CODE(KEYCODE_STOP)            PORT_CHAR('.') PORT_CHAR('>')
567   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-  { '  ` }") PORT_CODE(KEYCODE_EQUALS)         PORT_CHAR('-')
568   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("+  { \xc3\x9f ? }") PORT_CODE(KEYCODE_MINUS)      PORT_CHAR('+')
563   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(":  [  { \xc3\xa4 }") PORT_CODE(KEYCODE_COLON)     PORT_CHAR(':') PORT_CHAR('[')
564   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(".  >  { : }") PORT_CODE(KEYCODE_STOP)             PORT_CHAR('.') PORT_CHAR('>')
565   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-  { '  ` }") PORT_CODE(KEYCODE_EQUALS)           PORT_CHAR('-')
566   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("+  { \xc3\x9f ? }") PORT_CODE(KEYCODE_MINUS)      PORT_CHAR('+')
569567
570568   PORT_MODIFY( "ROW6" )
571   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/  ?  { -  _ }") PORT_CODE(KEYCODE_SLASH)               PORT_CHAR('/') PORT_CHAR('?')
572   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Sum  Pi  { ] \\ }") PORT_CODE(KEYCODE_DEL)            PORT_CHAR(0x03A3) PORT_CHAR(0x03C0)
573   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=  { # ' }") PORT_CODE(KEYCODE_BACKSLASH)               PORT_CHAR('=')
574   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";  ]  { \xc3\xb6 }") PORT_CODE(KEYCODE_QUOTE)            PORT_CHAR(';') PORT_CHAR(']')
575   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("*  `  { +  * }") PORT_CODE(KEYCODE_CLOSEBRACE)         PORT_CHAR('*') PORT_CHAR('`')
576   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\  { [  \xE2\x86\x91 }") PORT_CODE(KEYCODE_BACKSLASH2)   PORT_CHAR('\\')
569   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/  ?  { -  _ }") PORT_CODE(KEYCODE_SLASH)                 PORT_CHAR('/') PORT_CHAR('?')
570   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Sum  Pi  { ] \\ }") PORT_CODE(KEYCODE_DEL)                PORT_CHAR(0x03A3) PORT_CHAR(0x03C0)
571   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=  { # ' }") PORT_CODE(KEYCODE_BACKSLASH)                 PORT_CHAR('=')
572   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";  ]  { \xc3\xb6 }") PORT_CODE(KEYCODE_QUOTE)             PORT_CHAR(';') PORT_CHAR(']')
573   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("*  `  { +  * }") PORT_CODE(KEYCODE_CLOSEBRACE)            PORT_CHAR('*') PORT_CHAR('`')
574   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\  { [  \xE2\x86\x91 }") PORT_CODE(KEYCODE_BACKSLASH2)   PORT_CHAR('\\')
577575
578576   PORT_MODIFY( "ROW7" )
579   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("_  { <  > }") PORT_CODE(KEYCODE_TILDE)               PORT_CHAR('_')
577   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("_  { <  > }") PORT_CODE(KEYCODE_TILDE)                    PORT_CHAR('_')
580578
581579   PORT_MODIFY( "SPECIAL" )
582580   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ASCII/DIN") PORT_CODE(KEYCODE_F8) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, c128_state, caps_lock, 0)
r19664r19665
591589   PORT_INCLUDE( c128 )
592590
593591   PORT_MODIFY( "ROW1" )
594   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z  { W }") PORT_CODE(KEYCODE_Z)            PORT_CHAR('Z')
595   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4  $  { '  4 }") PORT_CODE(KEYCODE_4)         PORT_CHAR('4') PORT_CHAR('$')
596   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("A  { Q }") PORT_CODE(KEYCODE_A)            PORT_CHAR('A')
597   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W  { Z }") PORT_CODE(KEYCODE_W)            PORT_CHAR('W')
598   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3  #  { \"  3 }") PORT_CODE(KEYCODE_3)      PORT_CHAR('3') PORT_CHAR('#')
592   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z  { W }") PORT_CODE(KEYCODE_Z)               PORT_CHAR('Z')
593   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4  $  { '  4 }") PORT_CODE(KEYCODE_4)         PORT_CHAR('4') PORT_CHAR('$')
594   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("A  { Q }") PORT_CODE(KEYCODE_A)               PORT_CHAR('A')
595   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W  { Z }") PORT_CODE(KEYCODE_W)               PORT_CHAR('W')
596   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3  #  { \"  3 }") PORT_CODE(KEYCODE_3)        PORT_CHAR('3') PORT_CHAR('#')
599597
600598   PORT_MODIFY( "ROW2" )
601   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6  &  { Paragraph  6 }") PORT_CODE(KEYCODE_6)   PORT_CHAR('6') PORT_CHAR('&')
602   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5  %  { (  5 }") PORT_CODE(KEYCODE_5)         PORT_CHAR('5') PORT_CHAR('%')
599   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6  &  { Paragraph  6 }") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
600   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5  %  { (  5 }") PORT_CODE(KEYCODE_5)         PORT_CHAR('5') PORT_CHAR('%')
603601
604602   PORT_MODIFY( "ROW3" )
605   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8  (  { !  8 }") PORT_CODE(KEYCODE_8)         PORT_CHAR('8') PORT_CHAR('(')
606   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7  '  { \xc3\xa8  7 }") PORT_CODE(KEYCODE_7)   PORT_CHAR('7') PORT_CHAR('\'')
603   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8  (  { !  8 }") PORT_CODE(KEYCODE_8)         PORT_CHAR('8') PORT_CHAR('(')
604   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7  '  { \xc3\xa8  7 }") PORT_CODE(KEYCODE_7)  PORT_CHAR('7') PORT_CHAR('\'')
607605
608606   PORT_MODIFY( "ROW4" )
609   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("K  Large-  { \\ }") PORT_CODE(KEYCODE_K)      PORT_CHAR('K')
610   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M  Large-/  { ,  ? }") PORT_CODE(KEYCODE_M)   PORT_CHAR('M')
611   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0  { \xc3\xa0  0 }") PORT_CODE(KEYCODE_0)      PORT_CHAR('0')
612   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9  )  { \xc3\xa7  9 }") PORT_CODE(KEYCODE_9)   PORT_CHAR('9') PORT_CHAR(')')
607   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("K  Large-  { \\ }") PORT_CODE(KEYCODE_K)      PORT_CHAR('K')
608   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M  Large-/  { ,  ? }") PORT_CODE(KEYCODE_M)   PORT_CHAR('M')
609   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0  { \xc3\xa0  0 }") PORT_CODE(KEYCODE_0)     PORT_CHAR('0')
610   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9  )  { \xc3\xa7  9 }") PORT_CODE(KEYCODE_9)  PORT_CHAR('9') PORT_CHAR(')')
613611
614612   PORT_MODIFY( "ROW5" )
615   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(",  <  { ;  . }") PORT_CODE(KEYCODE_COMMA)                  PORT_CHAR(',') PORT_CHAR('<')
616   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@  \xc3\xbb  { ^  \xc2\xa8 }") PORT_CODE(KEYCODE_OPENBRACE)   PORT_CHAR('@') PORT_CHAR(0x00FB)
617   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(":  [  { \xc3\xb9  % }") PORT_CODE(KEYCODE_COLON)            PORT_CHAR(':') PORT_CHAR('[')
618   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(".  >  { :  / }") PORT_CODE(KEYCODE_STOP)                  PORT_CHAR('.') PORT_CHAR('>')
619   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-  \xc2\xb0  { -  _ }") PORT_CODE(KEYCODE_EQUALS)            PORT_CHAR('-') PORT_CHAR('\xB0')
620   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("+  \xc3\xab  { )  \xc2\xb0 }") PORT_CODE(KEYCODE_MINUS)      PORT_CHAR('+') PORT_CHAR(0x00EB)
613   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(",  <  { ;  . }") PORT_CODE(KEYCODE_COMMA)                     PORT_CHAR(',') PORT_CHAR('<')
614   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@  \xc3\xbb  { ^  \xc2\xa8 }") PORT_CODE(KEYCODE_OPENBRACE)   PORT_CHAR('@') PORT_CHAR(0x00FB)
615   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(":  [  { \xc3\xb9  % }") PORT_CODE(KEYCODE_COLON)              PORT_CHAR(':') PORT_CHAR('[')
616   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(".  >  { :  / }") PORT_CODE(KEYCODE_STOP)                      PORT_CHAR('.') PORT_CHAR('>')
617   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-  \xc2\xb0  { -  _ }") PORT_CODE(KEYCODE_EQUALS)             PORT_CHAR('-') PORT_CHAR('\xB0')
618   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("+  \xc3\xab  { )  \xc2\xb0 }") PORT_CODE(KEYCODE_MINUS)       PORT_CHAR('+') PORT_CHAR(0x00EB)
621619
622620   PORT_MODIFY( "ROW6" )
623   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/  ?  { =  + }") PORT_CODE(KEYCODE_SLASH)                  PORT_CHAR('/') PORT_CHAR('?')
624   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x91  Pi  { *  ] }") PORT_CODE(KEYCODE_DEL)         PORT_CHAR(0x2191) PORT_CHAR(0x03C0)
625   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=  {\xE2\x86\x91  \\ }") PORT_CODE(KEYCODE_BACKSLASH)         PORT_CHAR('=')
626   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";  ]  { M  Large-/ }") PORT_CODE(KEYCODE_QUOTE)            PORT_CHAR(';') PORT_CHAR(']')
627   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("*  `  { $  [ }") PORT_CODE(KEYCODE_CLOSEBRACE)            PORT_CHAR('*') PORT_CHAR('`')
628   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\  { @  # }") PORT_CODE(KEYCODE_BACKSLASH)               PORT_CHAR('\\')
621   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/  ?  { =  + }") PORT_CODE(KEYCODE_SLASH)                     PORT_CHAR('/') PORT_CHAR('?')
622   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x91  Pi  { *  ] }") PORT_CODE(KEYCODE_DEL)           PORT_CHAR(0x2191) PORT_CHAR(0x03C0)
623   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=  {\xE2\x86\x91  \\ }") PORT_CODE(KEYCODE_BACKSLASH)         PORT_CHAR('=')
624   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";  ]  { M  Large-/ }") PORT_CODE(KEYCODE_QUOTE)               PORT_CHAR(';') PORT_CHAR(']')
625   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("*  `  { $  [ }") PORT_CODE(KEYCODE_CLOSEBRACE)                PORT_CHAR('*') PORT_CHAR('`')
626   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\  { @  # }") PORT_CODE(KEYCODE_BACKSLASH)                   PORT_CHAR('\\')
629627
630628   PORT_MODIFY( "ROW7" )
631   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q  { A }") PORT_CODE(KEYCODE_Q)            PORT_CHAR('Q')
632   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2  \"  { \xc3\xa9  2 }") PORT_CODE(KEYCODE_2)   PORT_CHAR('2') PORT_CHAR('\"')
633   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("_   { <  > }") PORT_CODE(KEYCODE_TILDE)      PORT_CHAR('_')
634   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1  !  { &  1 }") PORT_CODE(KEYCODE_1)         PORT_CHAR('1') PORT_CHAR('!')
629   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Q  { A }") PORT_CODE(KEYCODE_Q)               PORT_CHAR('Q')
630   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2  \"  { \xc3\xa9  2 }") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
631   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("_   { <  > }") PORT_CODE(KEYCODE_TILDE)       PORT_CHAR('_')
632   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1  !  { &  1 }") PORT_CODE(KEYCODE_1)         PORT_CHAR('1') PORT_CHAR('!')
635633
636634   PORT_MODIFY( "SPECIAL" )
637635   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK ASCII/CC") PORT_CODE(KEYCODE_F8) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, c128_state, caps_lock, 0)
r19664r19665
646644   PORT_INCLUDE( c128 )
647645
648646   PORT_MODIFY( "ROW1" )
649   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z  { W }") PORT_CODE(KEYCODE_Z)                  PORT_CHAR('Z')
650   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4  $  { '  4 }") PORT_CODE(KEYCODE_4)               PORT_CHAR('4') PORT_CHAR('$')
651   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W  { Z }") PORT_CODE(KEYCODE_W)                  PORT_CHAR('W')
652   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3  #  { \"  3 }") PORT_CODE(KEYCODE_3)            PORT_CHAR('3') PORT_CHAR('#')
647   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Z  { W }") PORT_CODE(KEYCODE_Z)                       PORT_CHAR('Z')
648   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("4  $  { '  4 }") PORT_CODE(KEYCODE_4)                 PORT_CHAR('4') PORT_CHAR('$')
649   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("W  { Z }") PORT_CODE(KEYCODE_W)                       PORT_CHAR('W')
650   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3  #  { \"  3 }") PORT_CODE(KEYCODE_3)                PORT_CHAR('3') PORT_CHAR('#')
653651
654652   PORT_MODIFY( "ROW2" )
655   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6  &  { _  6 }") PORT_CODE(KEYCODE_6)               PORT_CHAR('6') PORT_CHAR('&')
656   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5  %  { (  5 }") PORT_CODE(KEYCODE_5)               PORT_CHAR('5') PORT_CHAR('%')
653   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("6  &  { _  6 }") PORT_CODE(KEYCODE_6)                 PORT_CHAR('6') PORT_CHAR('&')
654   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("5  %  { (  5 }") PORT_CODE(KEYCODE_5)                 PORT_CHAR('5') PORT_CHAR('%')
657655
658656   PORT_MODIFY( "ROW3" )
659   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8  (  { &  8 }") PORT_CODE(KEYCODE_8)               PORT_CHAR('8') PORT_CHAR('(')
660   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7  '  { \xc3\xa8  7 }") PORT_CODE(KEYCODE_7)         PORT_CHAR('7') PORT_CHAR('\'')
657   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("8  (  { &  8 }") PORT_CODE(KEYCODE_8)                 PORT_CHAR('8') PORT_CHAR('(')
658   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7  '  { \xc3\xa8  7 }") PORT_CODE(KEYCODE_7)          PORT_CHAR('7') PORT_CHAR('\'')
661659
662660   PORT_MODIFY( "ROW4" )
663   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M  Large-/  { ,  ? }") PORT_CODE(KEYCODE_M)         PORT_CHAR('M')
664   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0  { \xc3\xa0  0 }") PORT_CODE(KEYCODE_0)            PORT_CHAR('0')
665   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9  )  { \xc3\xa7  9 }") PORT_CODE(KEYCODE_9)         PORT_CHAR('9') PORT_CHAR(')')
661   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("M  Large-/  { ,  ? }") PORT_CODE(KEYCODE_M)           PORT_CHAR('M')
662   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("0  { \xc3\xa0  0 }") PORT_CODE(KEYCODE_0)             PORT_CHAR('0')
663   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("9  )  { \xc3\xa7  9 }") PORT_CODE(KEYCODE_9)          PORT_CHAR('9') PORT_CHAR(')')
666664
667665   PORT_MODIFY( "ROW5" )
668   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(",  <   { ;  . }") PORT_CODE(KEYCODE_COMMA)         PORT_CHAR(',') PORT_CHAR('<')
666   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(",  <   { ;  . }") PORT_CODE(KEYCODE_COMMA)            PORT_CHAR(',') PORT_CHAR('<')
669667   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@  \xc3\xbb  { \xc3\xac  = }") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@') PORT_CHAR(0x00FB)
670   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(":  [  { \xc3\xb9  % }") PORT_CODE(KEYCODE_COLON)      PORT_CHAR(':') PORT_CHAR('[')
671   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(".  >  { :  / }") PORT_CODE(KEYCODE_STOP)            PORT_CHAR('.') PORT_CHAR('>')
672   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-  \xc2\xb0  { -  + }") PORT_CODE(KEYCODE_EQUALS)      PORT_CHAR('-') PORT_CHAR('\xb0')
668   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(":  [  { \xc3\xb9  % }") PORT_CODE(KEYCODE_COLON)      PORT_CHAR(':') PORT_CHAR('[')
669   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(".  >  { :  / }") PORT_CODE(KEYCODE_STOP)              PORT_CHAR('.') PORT_CHAR('>')
670   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("-  \xc2\xb0  { -  + }") PORT_CODE(KEYCODE_EQUALS)     PORT_CHAR('-') PORT_CHAR('\xb0')
673671   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("+  \xc3\xab  { )  \xc2\xb0 }") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('+') PORT_CHAR(0x00EB)
674672
675673   PORT_MODIFY( "ROW6" )
676   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/  ?  { \xc3\xb2  ! }") PORT_CODE(KEYCODE_SLASH)      PORT_CHAR('/') PORT_CHAR('?')
677   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x91  Pi  { *  ] }") PORT_CODE(KEYCODE_DEL)   PORT_CHAR(0x2191) PORT_CHAR(0x03C0)
674   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("/  ?  { \xc3\xb2  ! }") PORT_CODE(KEYCODE_SLASH)      PORT_CHAR('/') PORT_CHAR('?')
675   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x91  Pi  { *  ] }") PORT_CODE(KEYCODE_DEL)   PORT_CHAR(0x2191) PORT_CHAR(0x03C0)
678676   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("=  { \xE2\x86\x91  \\ }") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('=')
679   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";  ]  { M }") PORT_CODE(KEYCODE_QUOTE)            PORT_CHAR(';') PORT_CHAR(']')
680   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("*  `  { $  [ }") PORT_CODE(KEYCODE_CLOSEBRACE)      PORT_CHAR('*') PORT_CHAR('`')
681   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\  { @  # }") PORT_CODE(KEYCODE_BACKSLASH2)         PORT_CHAR('\\')
677   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";  ]  { M }") PORT_CODE(KEYCODE_QUOTE)                PORT_CHAR(';') PORT_CHAR(']')
678   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("*  `  { $  [ }") PORT_CODE(KEYCODE_CLOSEBRACE)        PORT_CHAR('*') PORT_CHAR('`')
679   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\\  { @  # }") PORT_CODE(KEYCODE_BACKSLASH2)          PORT_CHAR('\\')
682680
683681   PORT_MODIFY( "ROW7" )
684   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2  \"  { \xc3\xa9  2 }") PORT_CODE(KEYCODE_2)         PORT_CHAR('2') PORT_CHAR('"')
685   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("_  { <  > }") PORT_CODE(KEYCODE_TILDE)            PORT_CHAR('_')
686   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1  !  { \xc2\xa3  1 }") PORT_CODE(KEYCODE_1)         PORT_CHAR('1') PORT_CHAR('!')
682   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("2  \"  { \xc3\xa9  2 }") PORT_CODE(KEYCODE_2)         PORT_CHAR('2') PORT_CHAR('"')
683   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("_  { <  > }") PORT_CODE(KEYCODE_TILDE)                PORT_CHAR('_')
684   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("1  !  { \xc2\xa3  1 }") PORT_CODE(KEYCODE_1)          PORT_CHAR('1') PORT_CHAR('!')
687685INPUT_PORTS_END
688686#endif
689687
r19664r19665
695693   PORT_INCLUDE( c128 )
696694
697695   PORT_MODIFY( "ROW1" )
698   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3  #  { 3  Paragraph }") PORT_CODE(KEYCODE_3)      PORT_CHAR('3') PORT_CHAR('#')
696   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("3  #  { 3  Paragraph }") PORT_CODE(KEYCODE_3)     PORT_CHAR('3') PORT_CHAR('#')
699697
700698   PORT_MODIFY( "ROW3" )
701   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7  '  { 7  / }") PORT_CODE(KEYCODE_7)            PORT_CHAR('7') PORT_CHAR('\'')
699   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("7  '  { 7  / }") PORT_CODE(KEYCODE_7)             PORT_CHAR('7') PORT_CHAR('\'')
702700
703701   PORT_MODIFY( "ROW5" )
704   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("]  { \xc3\xa2 }") PORT_CODE(KEYCODE_OPENBRACE)   PORT_CHAR(']')
705   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[  { \xc3\xa4 }") PORT_CODE(KEYCODE_COLON)      PORT_CHAR('[')
706   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)                           PORT_CHAR('=')
707   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS)                              PORT_CHAR('-')
702   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("]  { \xc3\xa2 }") PORT_CODE(KEYCODE_OPENBRACE)    PORT_CHAR(']')
703   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("[  { \xc3\xa4 }") PORT_CODE(KEYCODE_COLON)        PORT_CHAR('[')
704   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)                                    PORT_CHAR('=')
705   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS)                                     PORT_CHAR('-')
708706
709707   PORT_MODIFY( "ROW6" )
710   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";  +") PORT_CODE(KEYCODE_BACKSLASH)            PORT_CHAR(';') PORT_CHAR('+')
711   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xc2\xa3  { \xc3\xb6 }") PORT_CODE(KEYCODE_QUOTE)   PORT_CHAR('\xA3')
712    PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_CLOSEBRACE)               PORT_CHAR('@')
713   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(":  *") PORT_CODE(KEYCODE_BACKSLASH2)            PORT_CHAR(':') PORT_CHAR('*')
708   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(";  +") PORT_CODE(KEYCODE_BACKSLASH)               PORT_CHAR(';') PORT_CHAR('+')
709   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("\xc2\xa3  { \xc3\xb6 }") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\xA3')
710   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("@") PORT_CODE(KEYCODE_CLOSEBRACE)                 PORT_CHAR('@')
711   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME(":  *") PORT_CODE(KEYCODE_BACKSLASH2)              PORT_CHAR(':') PORT_CHAR('*')
714712
715713   PORT_MODIFY( "ROW7" )
716   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("_  { <  > }") PORT_CODE(KEYCODE_TILDE)         PORT_CHAR('_')
714   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("_  { <  > }") PORT_CODE(KEYCODE_TILDE)            PORT_CHAR('_')
717715
718716   PORT_MODIFY( "SPECIAL" )
719717   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("CAPS LOCK ASCII/CC") PORT_CODE(KEYCODE_F8) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, c128_state, caps_lock, 0)
r19664r19665
893891{
894892   /*
895893
896        bit     description
894       bit     description
897895
898        PA0     COL0, JOY B0
899        PA1     COL1, JOY B1
900        PA2     COL2, JOY B2
901        PA3     COL3, JOY B3
902        PA4     COL4, BTNB
903        PA5     COL5
904        PA6     COL6
905        PA7     COL7
896       PA0     COL0, JOY B0
897       PA1     COL1, JOY B1
898       PA2     COL2, JOY B2
899       PA3     COL3, JOY B3
900       PA4     COL4, BTNB
901       PA5     COL5
902       PA6     COL6
903       PA7     COL7
906904
907    */
905   */
908906
909907   UINT8 cia0portb = m_cia1->pb_r();
910908
r19664r19665
915913{
916914   /*
917915
918        bit     description
916       bit     description
919917
920        PB0     JOY A0
921        PB1     JOY A1
922        PB2     JOY A2
923        PB3     JOY A3
924        PB4     BTNA/_LP
925        PB5
926        PB6
927        PB7
918       PB0     JOY A0
919       PB1     JOY A1
920       PB2     JOY A2
921       PB3     JOY A3
922       PB4     BTNA/_LP
923       PB5
924       PB6
925       PB7
928926
929    */
927   */
930928
931929   UINT8 data = 0xff;
932930   UINT8 cia0porta = m_cia1->pa_r();
933931
934932   data &= cbm_common_cia0_port_b_r(m_cia1, cia0porta);
935933
936    if (!BIT(m_vic_k, 0)) data &= ~ioport("K0")->read();
937    if (!BIT(m_vic_k, 1)) data &= ~ioport("K1")->read();
938    if (!BIT(m_vic_k, 2)) data &= ~ioport("K2")->read();
934   if (!BIT(m_vic_k, 0)) data &= ~ioport("K0")->read();
935   if (!BIT(m_vic_k, 1)) data &= ~ioport("K1")->read();
936   if (!BIT(m_vic_k, 2)) data &= ~ioport("K2")->read();
939937
940938   return data;
941939}
r19664r19665
944942{
945943   /*
946944
947        bit     description
945       bit     description
948946
949        PB0     ROW0
950        PB1     ROW1
951        PB2     ROW2
952        PB3     ROW3
953        PB4     ROW4
954        PB5     ROW5
955        PB6     ROW6
956        PB7     ROW7
947       PB0     ROW0
948       PB1     ROW1
949       PB2     ROW2
950       PB3     ROW3
951       PB4     ROW4
952       PB5     ROW5
953       PB6     ROW6
954       PB7     ROW7
957955
958    */
956   */
959957
960958   m_vic->lp_w(BIT(data, 4));
961959}
r19664r19665
10021000{
10031001   /*
10041002
1005        bit     description
1003       bit     description
10061004
1007        PA0
1008        PA1
1009        PA2     USER PORT
1010        PA3
1011        PA4
1012        PA5
1013        PA6     CLK
1014        PA7     DATA
1005       PA0
1006       PA1
1007       PA2     USER PORT
1008       PA3
1009       PA4
1010       PA5
1011       PA6     CLK
1012       PA7     DATA
10151013
1016    */
1014   */
10171015
10181016   UINT8 data = 0;
10191017
r19664r19665
10311029{
10321030   /*
10331031
1034        bit     description
1032       bit     description
10351033
1036        PA0     _VA14
1037        PA1     _VA15
1038        PA2     USER PORT
1039        PA3     ATN OUT
1040        PA4     CLK OUT
1041        PA5     DATA OUT
1042        PA6
1043        PA7
1034       PA0     _VA14
1035       PA1     _VA15
1036       PA2     USER PORT
1037       PA3     ATN OUT
1038       PA4     CLK OUT
1039       PA5     DATA OUT
1040       PA6
1041       PA7
10441042
1045    */
1043   */
10461044
10471045   // VIC banking
10481046   m_va14 = BIT(data, 0);
r19664r19665
10801078{
10811079   /*
10821080
1083        bit     description
1081       bit     description
10841082
1085        P0      1
1086        P1      1
1087        P2      1
1088        P3
1089        P4      CASS SENSE
1090        P5
1091        P6      CAPS LOCK
1083       P0      1
1084       P1      1
1085       P2      1
1086       P3
1087       P4      CASS SENSE
1088       P5
1089       P6      CAPS LOCK
10921090
1093    */
1091   */
10941092
10951093   UINT8 data = 0x07;
10961094
r19664r19665
11071105{
11081106   /*
11091107
1110        bit     description
1108       bit     description
11111109
1112        P0      LORAM
1113        P1      HIRAM
1114        P2      CHAREN
1115        P3      CASS WRT
1116        P4
1117        P5      CASS MOTOR
1118        P6
1110       P0      LORAM
1111       P1      HIRAM
1112       P2      CHAREN
1113       P3      CASS WRT
1114       P4
1115       P5      CASS MOTOR
1116       P6
11191117
1120    */
1118   */
11211119
1122    // memory banking
1120   // memory banking
11231121   m_loram = BIT(data, 0);
11241122   m_hiram = BIT(data, 1);
11251123   m_charen = BIT(data, 2);
r19664r19665
14481446static MACHINE_CONFIG_DERIVED( c128dcr, ntsc )
14491447   MCFG_CBM_IEC_BUS_ADD(cbm_iec_intf)
14501448   MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, NULL, NULL)
1451   MCFG_CBM_IEC_SLOT_ADD("iec8", 8, c128dcr_iec_devices, "c1571cr", NULL)
1449   MCFG_CBM_IEC_SLOT_ADD("iec8", 8, c128dcr_iec_devices, "c1571", NULL) // TODO c1571cr
14521450   MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, NULL, NULL)
14531451   MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, NULL, NULL)
14541452   MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, NULL, NULL)
r19664r19665
15541552static MACHINE_CONFIG_DERIVED( c128dcrp, pal )
15551553   MCFG_CBM_IEC_BUS_ADD(cbm_iec_intf)
15561554   MCFG_CBM_IEC_SLOT_ADD("iec4", 4, cbm_iec_devices, NULL, NULL)
1557   MCFG_CBM_IEC_SLOT_ADD("iec8", 8, c128dcr_iec_devices, "c1571cr", NULL)
1555   MCFG_CBM_IEC_SLOT_ADD("iec8", 8, c128dcr_iec_devices, "c1571", NULL) // TODO c1571cr
15581556   MCFG_CBM_IEC_SLOT_ADD("iec9", 9, cbm_iec_devices, NULL, NULL)
15591557   MCFG_CBM_IEC_SLOT_ADD("iec10", 10, cbm_iec_devices, NULL, NULL)
15601558   MCFG_CBM_IEC_SLOT_ADD("iec11", 11, cbm_iec_devices, NULL, NULL)
r19664r19665
16621660//  ROM( c128d )
16631661//-------------------------------------------------
16641662
1665#define rom_c128d      rom_c128
1663#define rom_c128d       rom_c128
16661664
16671665
16681666//-------------------------------------------------
16691667//  ROM( c128dp )
16701668//-------------------------------------------------
16711669
1672#define rom_c128dp      rom_c128
1670#define rom_c128dp      rom_c128
16731671
16741672
16751673//-------------------------------------------------
16761674//  ROM( c128dpr )
16771675//-------------------------------------------------
16781676
1679#define rom_c128dpr      rom_c128d
1677#define rom_c128dpr     rom_c128d
16801678
16811679
16821680//-------------------------------------------------
r19664r19665
16851683
16861684ROM_START( c128cr )
16871685   /* C128CR prototype, owned by Bo Zimmers
1688    PCB markings: "COMMODORE 128CR REV.3 // PCB NO.252270" and "PCB ASSY NO.250783"
1689    Sticker on rom cart shield: "C128CR  No.2 // ENG. SAMPLE // Jun/9/'86   KNT"
1690    3 ROMs (combined basic, combined c64/kernal, plain character rom)
1691    6526A-1 CIAs
1692    ?prototype? 2568R1X VDC w/ 1186 datecode
1693    */
1686   PCB markings: "COMMODORE 128CR REV.3 // PCB NO.252270" and "PCB ASSY NO.250783"
1687   Sticker on rom cart shield: "C128CR  No.2 // ENG. SAMPLE // Jun/9/'86   KNT"
1688   3 ROMs (combined basic, combined c64/kernal, plain character rom)
1689   6526A-1 CIAs
1690   ?prototype? 2568R1X VDC w/ 1186 datecode
1691   */
16941692   ROM_REGION( 0x10000, M8502_TAG, 0 )
16951693   ROM_LOAD( "252343-03.u34", 0x4000, 0x8000, CRC(bc07ed87) SHA1(0eec437994a3f2212343a712847213a8a39f4a7b) ) // "252343-03 // U34"
16961694   ROM_LOAD( "252343-04.u32", 0x0000, 0x4000, CRC(cc6bdb69) SHA1(36286b2e8bea79f7767639fd85e12c5447c7041b) ) // "252343-04 // US // U32"
r19664r19665
17341732//  ROM( c128dcrp )
17351733//-------------------------------------------------
17361734
1737#define rom_c128dcrp   rom_c128dcr
1735#define rom_c128dcrp    rom_c128dcr
17381736
17391737
17401738//-------------------------------------------------
r19664r19665
17941792//**************************************************************************
17951793
17961794//    YEAR  NAME        PARENT  COMPAT  MACHINE     INPUT       INIT                COMPANY                        FULLNAME                                 FLAGS
1797COMP( 1985, c128,      0,      0,      c128,      c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128 (NTSC)",               GAME_SUPPORTS_SAVE )
1798COMP( 1985, c128p,      0,      0,      c128pal,   c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128 (PAL)",               GAME_SUPPORTS_SAVE )
1799COMP( 1985, c128_de,   c128,   0,      c128pal,   c128ger,   driver_device,   0,   "Commodore Business Machines", "Commodore 128 (Germany)",            GAME_SUPPORTS_SAVE )
1795COMP( 1985, c128,       0,      0,      c128,       c128,       driver_device,  0,  "Commodore Business Machines", "Commodore 128 (NTSC)",                  GAME_SUPPORTS_SAVE )
1796COMP( 1985, c128p,      0,      0,      c128pal,    c128,       driver_device,  0,  "Commodore Business Machines", "Commodore 128 (PAL)",                   GAME_SUPPORTS_SAVE )
1797COMP( 1985, c128_de,    c128,   0,      c128pal,    c128ger,    driver_device,  0,  "Commodore Business Machines", "Commodore 128 (Germany)",               GAME_SUPPORTS_SAVE )
18001798//COMP( 1985, c128_fr,   c128,  0,   c128pal,  c128fra, driver_device, 0,  "Commodore Business Machines", "Commodore 128 (France)", GAME_SUPPORTS_SAVE )
18011799//COMP( 1985, c128_no,   c128,  0,   c128pal,  c128ita, driver_device, 0,  "Commodore Business Machines", "Commodore 128 (Norway)", GAME_SUPPORTS_SAVE )
1802COMP( 1985, c128_se,   c128,   0,      c128pal,   c128swe,   driver_device,   0,   "Commodore Business Machines", "Commodore 128 (Sweden/Finland)",      GAME_SUPPORTS_SAVE )
1803COMP( 1986, c128d,      c128,   0,      c128,      c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128D (NTSC, prototype)",      GAME_SUPPORTS_SAVE )
1804COMP( 1986, c128dp,      c128,   0,      c128pal,   c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128D (PAL)",               GAME_SUPPORTS_SAVE )
1800COMP( 1985, c128_se,    c128,   0,      c128pal,    c128swe,    driver_device,  0,  "Commodore Business Machines", "Commodore 128 (Sweden/Finland)",        GAME_SUPPORTS_SAVE )
1801COMP( 1986, c128d,      c128,   0,      c128,       c128,       driver_device,  0,  "Commodore Business Machines", "Commodore 128D (NTSC, prototype)",      GAME_SUPPORTS_SAVE )
1802COMP( 1986, c128dp,     c128,   0,      c128pal,    c128,       driver_device,  0,  "Commodore Business Machines", "Commodore 128D (PAL)",                  GAME_SUPPORTS_SAVE )
18051803
1806COMP( 1986, c128cr,      c128,   0,      c128,      c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128CR (NTSC, prototype)",      GAME_SUPPORTS_SAVE )
1804COMP( 1986, c128cr,     c128,   0,      c128,       c128,       driver_device,  0,  "Commodore Business Machines", "Commodore 128CR (NTSC, prototype)",     GAME_SUPPORTS_SAVE )
18071805
1808COMP( 1987, c128dcr,   c128,   0,      c128dcr,   c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128DCR (NTSC)",            GAME_SUPPORTS_SAVE )
1809COMP( 1987, c128dcrp,   c128,   0,      c128dcrp,   c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128DCR (PAL)",            GAME_SUPPORTS_SAVE )
1810COMP( 1987, c128dcr_de,   c128,   0,      c128dcrp,   c128ger,   driver_device,   0,   "Commodore Business Machines", "Commodore 128DCR (Germany)",         GAME_SUPPORTS_SAVE )
1806COMP( 1987, c128dcr,    c128,   0,      c128dcr,    c128,       driver_device,  0,  "Commodore Business Machines", "Commodore 128DCR (NTSC)",               GAME_SUPPORTS_SAVE )
1807COMP( 1987, c128dcrp,   c128,   0,      c128dcrp,   c128,       driver_device,  0,  "Commodore Business Machines", "Commodore 128DCR (PAL)",                GAME_SUPPORTS_SAVE )
1808COMP( 1987, c128dcr_de, c128,   0,      c128dcrp,   c128ger,    driver_device,  0,  "Commodore Business Machines", "Commodore 128DCR (Germany)",            GAME_SUPPORTS_SAVE )
18111809//COMP( 1986, c128dcr_it,  c128,  0,   c128dcrp, c128ita, driver_device, 0,"Commodore Business Machines", "Commodore 128DCR (Italy)", GAME_SUPPORTS_SAVE )
1812COMP( 1987, c128dcr_se,   c128,   0,      c128dcrp,   c128swe,   driver_device,   0,   "Commodore Business Machines", "Commodore 128DCR (Sweden/Finland)",      GAME_SUPPORTS_SAVE )
1810COMP( 1987, c128dcr_se, c128,   0,      c128dcrp,   c128swe,    driver_device,  0,  "Commodore Business Machines", "Commodore 128DCR (Sweden/Finland)",     GAME_SUPPORTS_SAVE )
18131811
1814COMP( 1986, c128d81,   c128,   0,      c128d81,   c128,      driver_device,   0,   "Commodore Business Machines", "Commodore 128D/81 (NTSC, prototype)",   GAME_SUPPORTS_SAVE )
1812COMP( 1986, c128d81,    c128,   0,      c128d81,    c128,       driver_device,  0,  "Commodore Business Machines", "Commodore 128D/81 (NTSC, prototype)",   GAME_SUPPORTS_SAVE )
trunk/src/mess/machine/c1571.c
r19664r19665
1111
1212    TODO:
1313
14   - refactor to use wd_fdc and modern floppy
14    - modernize floppy
15        - add wpt callback to floppy.c
16        - refactor d64/g64
17        - refactor 64H156
18    - 1571CR
19        - MOS5710
20    - ICT Mini Chief MC-20
21        - WD1002A-WX1 ISA controller card
22        - Seagate ST225 (-chs 615,4,17 -ss 512)
1523
1624*/
1725
r19664r19665
2432//  MACROS / CONSTANTS
2533//**************************************************************************
2634
27#define M6502_TAG      "u1"
28#define M6522_0_TAG      "u9"
29#define M6522_1_TAG      "u4"
30#define M6526_TAG      "u20"
31#define WD1770_TAG      "u11"
32#define C64H156_TAG      "u6"
33#define C64H157_TAG      "u5"
35#define M6502_TAG       "u1"
36#define M6522_0_TAG     "u9"
37#define M6522_1_TAG     "u4"
38#define M6526_TAG       "u20"
39#define M5710_TAG       "u107"
40#define WD1770_TAG      "u11"
41#define C64H156_TAG     "u6"
42#define C64H157_TAG     "u5"
43#define ISA_BUS_TAG     "isabus"
3444
3545
3646enum
r19664r19665
97107
98108ROM_START( c1571 )
99109   ROM_REGION( 0x8000, M6502_TAG, 0 )
100    ROM_DEFAULT_BIOS("r5")
101    ROM_SYSTEM_BIOS( 0, "r3", "Revision 3" )
110   ROM_DEFAULT_BIOS("r5")
111   ROM_SYSTEM_BIOS( 0, "r3", "Revision 3" )
102112   ROMX_LOAD( "310654-03.u2", 0x0000, 0x8000, CRC(3889b8b8) SHA1(e649ef4419d65829d2afd65e07d31f3ce147d6eb), ROM_BIOS(1) )
103113   ROM_SYSTEM_BIOS( 1, "r5", "Revision 5" )
104114   ROMX_LOAD( "310654-05.u2", 0x0000, 0x8000, CRC(5755bae3) SHA1(f1be619c106641a685f6609e4d43d6fc9eac1e70), ROM_BIOS(2) )
r19664r19665
114124ROM_START( c1571cr )
115125   ROM_REGION( 0x8000, M6502_TAG, 0 )
116126   ROM_DEFAULT_BIOS("cbm")
117    ROM_SYSTEM_BIOS( 0, "cbm", "Commodore" )
127   ROM_SYSTEM_BIOS( 0, "cbm", "Commodore" )
118128   ROMX_LOAD( "318047-01.u102", 0x0000, 0x8000, CRC(f24efcc4) SHA1(14ee7a0fb7e1c59c51fbf781f944387037daa3ee), ROM_BIOS(1) )
119129   ROM_SYSTEM_BIOS( 1, "jiffydos", "JiffyDOS v6.01" )
120130   ROMX_LOAD( "jiffydos 1571d.u102", 0x0000, 0x8000, CRC(9cba146d) SHA1(823b178561302b403e6bfd8dd741d757efef3958), ROM_BIOS(2) )
r19664r19665
163173   AM_RANGE(0x0000, 0x07ff) AM_RAM
164174   AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x03f0) AM_DEVREADWRITE(M6522_0_TAG, via6522_device, read, write)
165175   AM_RANGE(0x1c00, 0x1c0f) AM_MIRROR(0x03f0) AM_READWRITE(via1_r, via1_w)
166   AM_RANGE(0x2000, 0x2003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE_LEGACY(WD1770_TAG, wd17xx_r, wd17xx_w)
176   AM_RANGE(0x2000, 0x2003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE(WD1770_TAG, wd1770_t, read, write)
167177   AM_RANGE(0x4000, 0x400f) AM_MIRROR(0x3ff0) AM_DEVREADWRITE(M6526_TAG, mos6526_device, read, write)
168178   AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(M6502_TAG, 0)
169179ADDRESS_MAP_END
170180
171181
172182//-------------------------------------------------
183//  ADDRESS_MAP( mini_chief_mem )
184//-------------------------------------------------
185
186static ADDRESS_MAP_START( mini_chief_mem, AS_PROGRAM, 8, mini_chief_device )
187   AM_RANGE(0x0000, 0x07ff) AM_RAM
188   AM_RANGE(0x1800, 0x180f) AM_MIRROR(0x03f0) AM_DEVREADWRITE(M6522_0_TAG, via6522_device, read, write)
189   AM_RANGE(0x1c00, 0x1c0f) AM_MIRROR(0x03f0) AM_READWRITE(via1_r, via1_w)
190   AM_RANGE(0x2000, 0x2003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE(WD1770_TAG, wd1770_t, read, write)
191   AM_RANGE(0x4000, 0x400f) AM_MIRROR(0xff0) AM_DEVREADWRITE(M6526_TAG, mos6526_device, read, write)
192   AM_RANGE(0x5000, 0x5fff) AM_MIRROR(0x2000) AM_RAM
193   AM_RANGE(0x6000, 0x6fff) AM_RAM
194   AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(M6502_TAG, 0)
195ADDRESS_MAP_END
196
197
198//-------------------------------------------------
173199//  via6522_interface via0_intf
174200//-------------------------------------------------
175201
r19664r19665
184210{
185211   /*
186212
187        bit     description
213       bit     description
188214
189        PA0     TRK0 SNS
190        PA1
191        PA2
192        PA3
193        PA4
194        PA5
195        PA6
196        PA7     BYTE RDY
215       PA0     TRK0 SNS
216       PA1
217       PA2
218       PA3
219       PA4
220       PA5
221       PA6
222       PA7     BYTE RDY
197223
198    */
224   */
199225
200226   UINT8 data = 0;
201227
r19664r19665
212238{
213239   /*
214240
215        bit     description
241       bit     description
216242
217        PA0
218        PA1     SER DIR
219        PA2     SIDE
220        PA3
221        PA4
222        PA5     _1/2 MHZ
223        PA6     ATN OUT
224        PA7
243       PA0
244       PA1     SER DIR
245       PA2     SIDE
246       PA3
247       PA4
248       PA5     _1/2 MHZ
249       PA6     ATN OUT
250       PA7
225251
226    */
252   */
227253
228254   // fast serial direction
229255   m_ser_dir = BIT(data, 1);
r19664r19665
253279   update_iec();
254280}
255281
282WRITE8_MEMBER( c1571cr_device::via0_pa_w )
283{
284   /*
285
286       bit     description
287
288       PA0
289       PA1
290       PA2     SIDE
291       PA3
292       PA4
293       PA5     _1/2 MHZ
294       PA6
295       PA7
296
297   */
298
299   // side select
300   m_ga->set_side(BIT(data, 2));
301
302   // 1/2 MHz
303   int clock_1_2 = BIT(data, 5);
304
305   if (m_1_2mhz != clock_1_2)
306   {
307      UINT32 clock = clock_1_2 ? XTAL_16MHz/8 : XTAL_16MHz/16;
308
309      m_maincpu->set_unscaled_clock(clock);
310      m_cia->set_unscaled_clock(clock);
311      m_via0->set_unscaled_clock(clock);
312      m_via1->set_unscaled_clock(clock);
313      m_ga->accl_w(clock_1_2);
314
315      m_1_2mhz = clock_1_2;
316   }
317}
318
256319READ8_MEMBER( base_c1571_device::via0_pb_r )
257320{
258321   /*
259322
260        bit     description
323       bit     description
261324
262        PB0     DATA IN
263        PB1
264        PB2     CLK IN
265        PB3
266        PB4
267        PB5     DEV# SEL
268        PB6     DEV# SEL
269        PB7     ATN IN
325       PB0     DATA IN
326       PB1
327       PB2     CLK IN
328       PB3
329       PB4
330       PB5     DEV# SEL
331       PB6     DEV# SEL
332       PB7     ATN IN
270333
271    */
334   */
272335
273336   UINT8 data = 0;
274337
r19664r19665
291354{
292355   /*
293356
294        bit     description
357       bit     description
295358
296        PB0
297        PB1     DATA OUT
298        PB2
299        PB3     CLK OUT
300        PB4     ATN ACK
301        PB5
302        PB6
303        PB7
359       PB0
360       PB1     DATA OUT
361       PB2
362       PB3     CLK OUT
363       PB4     ATN ACK
364       PB5
365       PB6
366       PB7
304367
305    */
368   */
306369
307370   // data out
308371   m_data_out = BIT(data, 1);
r19664r19665
316379   update_iec();
317380}
318381
382WRITE8_MEMBER( c1571cr_device::via0_pb_w )
383{
384   /*
385
386       bit     description
387
388       PB0
389       PB1     DATA OUT
390       PB2
391       PB3     CLK OUT
392       PB4     ATNI
393       PB5
394       PB6
395       PB7
396
397   */
398
399   // data out
400   m_data_out = BIT(data, 1);
401
402   // clock out
403   m_bus->clk_w(this, !BIT(data, 3));
404
405   // attention in
406   m_ga->atni_w(BIT(data, 4));
407
408   update_iec();
409}
410
319411READ_LINE_MEMBER( base_c1571_device::atn_in_r )
320412{
321413   return !m_bus->atn_r();
r19664r19665
345437   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_irq_w)
346438};
347439
440static const via6522_interface c1571cr_via0_intf =
441{
442   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_pa_r),
443   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_pb_r),
444   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, atn_in_r),
445   DEVCB_NULL,
446   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, wprt_r),
447   DEVCB_NULL,
348448
449   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571cr_device, via0_pa_w),
450   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, c1571cr_device, via0_pb_w),
451   DEVCB_NULL,
452   DEVCB_NULL,
453   DEVCB_NULL,
454   DEVCB_NULL,
455
456   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, via0_irq_w)
457};
458
459
349460//-------------------------------------------------
350461//  via6522_interface via1_intf
351462//-------------------------------------------------
r19664r19665
353464READ8_MEMBER( base_c1571_device::via1_r )
354465{
355466   UINT8 data = m_via1->read(space, offset);
356   
467
357468   m_ga->ted_w(!m_1_2mhz);
358469   m_ga->ted_w(1);
359470
r19664r19665
379490{
380491   /*
381492
382        bit     signal      description
493       bit     signal      description
383494
384        PB0
385        PB1
386        PB2
387        PB3
388        PB4     _WPRT       write protect sense
389        PB5
390        PB6
391        PB7     _SYNC       SYNC detect line
495       PB0
496       PB1
497       PB2
498       PB3
499       PB4     _WPRT       write protect sense
500       PB5
501       PB6
502       PB7     _SYNC       SYNC detect line
392503
393    */
504   */
394505
395506   UINT8 data = 0;
396507
r19664r19665
407518{
408519   /*
409520
410        bit     signal      description
521       bit     signal      description
411522
412        PB0     STP0        stepping motor bit 0
413        PB1     STP1        stepping motor bit 1
414        PB2     MTR         motor ON/OFF
415        PB3     ACT         drive 0 LED
416        PB4
417        PB5     DS0         density select 0
418        PB6     DS1         density select 1
419        PB7
523       PB0     STP0        stepping motor bit 0
524       PB1     STP1        stepping motor bit 1
525       PB2     MTR         motor ON/OFF
526       PB3     ACT         drive 0 LED
527       PB4
528       PB5     DS0         density select 0
529       PB6     DS1         density select 1
530       PB7
420531
421    */
532   */
422533
423534   // spindle motor
424535   m_ga->mtr_w(BIT(data, 2));
r19664r19665
467578WRITE_LINE_MEMBER( base_c1571_device::cia_pc_w )
468579{
469580   if (m_other != NULL)
470    {
471       m_other->parallel_strobe_w(state);
472    }
581   {
582      m_other->parallel_strobe_w(state);
583   }
473584}
474585
475586WRITE_LINE_MEMBER( base_c1571_device::cia_cnt_w )
r19664r19665
492603WRITE8_MEMBER( base_c1571_device::cia_pb_w )
493604{
494605   if (m_other != NULL)
495    {
606   {
496607      m_other->parallel_data_w(data);
497608   }
498609}
r19664r19665
509620   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_pb_w)
510621};
511622
623//-------------------------------------------------
624//  MOS6526_INTERFACE( mini_chief_cia_intf )
625//-------------------------------------------------
512626
627READ8_MEMBER( mini_chief_device::cia_pa_r )
628{
629   // TODO read from ISA bus @ 0x320 | A2 A1 A0
630
631   return 0;
632}
633
634WRITE8_MEMBER( mini_chief_device::cia_pa_w )
635{
636   // TODO write to ISA bus @ 0x320 | A2 A1 A0
637}
638
639WRITE8_MEMBER( mini_chief_device::cia_pb_w )
640{
641   /*
642
643       bit     description
644
645       0       ISA A0
646       1       ISA A1
647       2       ISA A2
648       3       ISA /SMEMR
649       4       ISA /SMEMW
650       5       ISA RESET
651       6
652       7
653
654   */
655}
656
657static MOS6526_INTERFACE( mini_chief_cia_intf )
658{
659   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_irq_w),
660   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_pc_w),
661   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_cnt_w),
662   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, base_c1571_device, cia_sp_w),
663   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, mini_chief_device, cia_pa_r),
664   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, mini_chief_device, cia_pa_w),
665   DEVCB_NULL,
666   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, mini_chief_device, cia_pb_w)
667};
668
669
513670//-------------------------------------------------
514671//  C64H156_INTERFACE( ga_intf )
515672//-------------------------------------------------
r19664r19665
529686
530687
531688//-------------------------------------------------
532//  wd17xx_interface fdc_intf
689//  SLOT_INTERFACE( c1570_floppies )
533690//-------------------------------------------------
691/*
692static SLOT_INTERFACE_START( c1570_floppies )
693    SLOT_INTERFACE( "525ssdd", FLOPPY_525_SSDD )
694SLOT_INTERFACE_END
695*/
534696
535static const wd17xx_interface fdc_intf =
536{
537   DEVCB_LINE_GND,
538   DEVCB_NULL,
539   DEVCB_NULL,
540   { FLOPPY_0, NULL, NULL, NULL }
541};
697//-------------------------------------------------
698//  SLOT_INTERFACE( c1571_floppies )
699//-------------------------------------------------
700/*
701static SLOT_INTERFACE_START( c1571_floppies )
702    SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
703SLOT_INTERFACE_END
704*/
542705
543
544706//-------------------------------------------------
545707//  LEGACY_FLOPPY_OPTIONS( c1571 )
546708//-------------------------------------------------
r19664r19665
594756
595757
596758//-------------------------------------------------
759//  isa8bus_interface isabus_intf
760//-------------------------------------------------
761
762static SLOT_INTERFACE_START( mini_chief_isa8_cards )
763   //SLOT_INTERFACE("wd1002a_wx1", WD1002A_WX1)
764SLOT_INTERFACE_END
765
766static const isa8bus_interface isabus_intf =
767{
768   // interrupts
769   DEVCB_NULL,
770   DEVCB_NULL,
771   DEVCB_NULL,
772   DEVCB_NULL,
773   DEVCB_NULL,
774   DEVCB_NULL,
775
776   // dma request
777   DEVCB_NULL,
778   DEVCB_NULL,
779   DEVCB_NULL
780};
781
782
783//-------------------------------------------------
597784//  MACHINE_DRIVER( c1570 )
598785//-------------------------------------------------
599786
r19664r19665
605792   MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, via0_intf)
606793   MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
607794   MCFG_MOS6526_ADD(M6526_TAG, XTAL_16MHz/16, 0, cia_intf)
608   MCFG_WD1770_ADD(WD1770_TAG, /* XTAL_16MHz/2, */ fdc_intf)
795   MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
609796
610797   MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1570_floppy_interface)
798   //MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1570_floppies, "525ssdd", 0, base_c1571_device::floppy_formats)
611799   MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
612800MACHINE_CONFIG_END
613801
r19664r19665
624812   MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, via0_intf)
625813   MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
626814   MCFG_MOS6526_ADD(M6526_TAG, XTAL_16MHz/16, 0, cia_intf)
627   MCFG_WD1770_ADD(WD1770_TAG, /* XTAL_16MHz/2, */ fdc_intf)
815   MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
628816
629817   MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1571_floppy_interface)
818   //MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1571_floppies, "525dd", 0, base_c1571_device::floppy_formats)
630819   MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
631820MACHINE_CONFIG_END
632821
r19664r19665
640829   MCFG_CPU_PROGRAM_MAP(c1571_mem)
641830   MCFG_QUANTUM_PERFECT_CPU(M6502_TAG)
642831
832   MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, c1571cr_via0_intf)
833   MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
834   MCFG_MOS5710_ADD(M5710_TAG, XTAL_16MHz/16, 0, cia_intf)
835   MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
836
837   MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1571_floppy_interface)
838   //MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1571_floppies, "525dd", 0, base_c1571_device::floppy_formats)
839   MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
840MACHINE_CONFIG_END
841
842
843//-------------------------------------------------
844//  MACHINE_DRIVER( mini_chief )
845//-------------------------------------------------
846
847static MACHINE_CONFIG_FRAGMENT( mini_chief )
848   MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/16)
849   MCFG_CPU_PROGRAM_MAP(mini_chief_mem)
850   MCFG_QUANTUM_PERFECT_CPU(M6502_TAG)
851
643852   MCFG_VIA6522_ADD(M6522_0_TAG, XTAL_16MHz/16, via0_intf)
644853   MCFG_VIA6522_ADD(M6522_1_TAG, XTAL_16MHz/16, via1_intf)
645   MCFG_MOS5710_ADD(M6526_TAG, XTAL_16MHz/16, 0, cia_intf)
646   MCFG_WD1770_ADD(WD1770_TAG, /* XTAL_16MHz/2, */ fdc_intf)
854   MCFG_MOS6526_ADD(M6526_TAG, XTAL_16MHz/16, 0, mini_chief_cia_intf)
855   MCFG_WD1770x_ADD(WD1770_TAG, XTAL_16MHz/2)
647856
648857   MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, c1571_floppy_interface)
858   //MCFG_FLOPPY_DRIVE_ADD(WD1770_TAG":0", c1571_floppies, "525dd", 0, base_c1571_device::floppy_formats)
649859   MCFG_64H156_ADD(C64H156_TAG, XTAL_16MHz, ga_intf)
860
861   MCFG_ISA8_BUS_ADD(ISA_BUS_TAG, M6502_TAG, isabus_intf)
862   MCFG_ISA8_SLOT_ADD(ISA_BUS_TAG, "isa1", mini_chief_isa8_cards, NULL/*"wd1002a_wx1"*/, NULL, false)
650863MACHINE_CONFIG_END
651864
652865
r19664r19665
668881
669882   case TYPE_1571CR:
670883      return MACHINE_CONFIG_NAME( c1571cr );
884
885   case TYPE_MINI_CHIEF:
886      return MACHINE_CONFIG_NAME( mini_chief );
671887   }
672888}
673889
r19664r19665
682898//-------------------------------------------------
683899
684900base_c1571_device::base_c1571_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
685    : device_t(mconfig, type, name, tag, owner, clock),
686     device_cbm_iec_interface(mconfig, *this),
687      device_c64_floppy_parallel_interface(mconfig, *this),
688     m_maincpu(*this, M6502_TAG),
689     m_via0(*this, M6522_0_TAG),
690     m_via1(*this, M6522_1_TAG),
691     m_cia(*this, M6526_TAG),
692     m_fdc(*this, WD1770_TAG),
693     m_ga(*this, C64H156_TAG),
694     m_image(*this, FLOPPY_0),
695     m_1_2mhz(0),
696     m_data_out(1),
697     m_ser_dir(0),
698     m_sp_out(1),
699     m_cnt_out(1),
700     m_via0_irq(CLEAR_LINE),
701     m_via1_irq(CLEAR_LINE),
702     m_cia_irq(CLEAR_LINE),
703     m_variant(variant)
901   : device_t(mconfig, type, name, tag, owner, clock),
902      device_cbm_iec_interface(mconfig, *this),
903      device_c64_floppy_parallel_interface(mconfig, *this),
904      m_maincpu(*this, M6502_TAG),
905      m_via0(*this, M6522_0_TAG),
906      m_via1(*this, M6522_1_TAG),
907      m_cia(*this, M6526_TAG),
908      m_fdc(*this, WD1770_TAG),
909      m_ga(*this, C64H156_TAG),
910      m_image(*this, FLOPPY_0),
911      m_1_2mhz(0),
912      m_data_out(1),
913      m_ser_dir(0),
914      m_sp_out(1),
915      m_cnt_out(1),
916      m_via0_irq(CLEAR_LINE),
917      m_via1_irq(CLEAR_LINE),
918      m_cia_irq(CLEAR_LINE),
919      m_variant(variant)
704920{
705921}
706922
r19664r19665
710926//-------------------------------------------------
711927
712928c1570_device::c1570_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
713   : base_c1571_device(mconfig, C1570, "C1570", tag, owner, clock, TYPE_1570) { }
929   : base_c1571_device(mconfig, C1570, "C1570", tag, owner, clock, TYPE_1570)
930      //m_floppy(*this, WD1770_TAG":0:525ssdd")
931{
932}
714933
715934
716935//-------------------------------------------------
r19664r19665
718937//-------------------------------------------------
719938
720939c1571_device::c1571_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
721   : base_c1571_device(mconfig, C1571, "C1571", tag, owner, clock, TYPE_1571) { }
940   : base_c1571_device(mconfig, C1571, "C1571", tag, owner, clock, TYPE_1571)
941      //m_floppy(*this, WD1770_TAG":0:525dd")
942{
943}
722944
723945
724946//-------------------------------------------------
r19664r19665
726948//-------------------------------------------------
727949
728950c1571cr_device::c1571cr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
729   : base_c1571_device(mconfig, C1571CR, "C1571CR", tag, owner, clock, TYPE_1571CR) { }
951   : base_c1571_device(mconfig, C1571CR, "C1571CR", tag, owner, clock, TYPE_1571CR)
952      //m_floppy(*this, WD1770_TAG":0:525dd")
953{
954}
730955
731956
732957//-------------------------------------------------
r19664r19665
734959//-------------------------------------------------
735960
736961mini_chief_device::mini_chief_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
737   : base_c1571_device(mconfig, MINI_CHIEF, "ICT Mini Chief", tag, owner, clock, TYPE_MINI_CHIEF) { }
962   : base_c1571_device(mconfig, MINI_CHIEF, "ICT Mini Chief", tag, owner, clock, TYPE_MINI_CHIEF)
963      //m_floppy(*this, WD1770_TAG":0:525dd")
964{
965}
738966
739967
740968//-------------------------------------------------
r19664r19665
765993
766994void base_c1571_device::device_reset()
767995{
768    m_maincpu->reset();
996   m_maincpu->reset();
769997
770    m_via0->reset();
771    m_via1->reset();
772    m_cia->reset();
998   m_via0->reset();
999   m_via1->reset();
1000   m_cia->reset();
1001   m_fdc->reset();
7731002
774   wd17xx_mr_w(m_fdc, 0);
775   wd17xx_mr_w(m_fdc, 1);
1003   //m_fdc->set_floppy(m_floppy);
1004   m_fdc->dden_w(0);
7761005
7771006   m_sp_out = 1;
7781007   m_cnt_out = 1;
r19664r19665
8301059
8311060void base_c1571_device::parallel_data_w(UINT8 data)
8321061{
833    m_parallel_data = data;
1062   m_parallel_data = data;
8341063}
8351064
8361065
r19664r19665
8401069
8411070void base_c1571_device::parallel_strobe_w(int state)
8421071{
843    m_cia->flag_w(state);
1072   m_cia->flag_w(state);
8441073}
8451074
8461075
r19664r19665
8501079
8511080void base_c1571_device::on_disk_change(device_image_interface &image)
8521081{
853    base_c1571_device *c1571 = static_cast<base_c1571_device *>(image.device().owner());
1082   base_c1571_device *c1571 = static_cast<base_c1571_device *>(image.device().owner());
8541083
855    int wp = floppy_wpt_r(image);
1084   int wp = floppy_wpt_r(image);
8561085   c1571->m_ga->on_disk_changed(wp);
8571086}
8581087
trunk/src/mess/machine/c1571.h
r19664r19665
1212#ifndef __C1571__
1313#define __C1571__
1414
15
1615#include "emu.h"
1716#include "cpu/m6502/m6502.h"
1817#include "imagedev/flopdrv.h"
r19664r19665
2221#include "machine/6522via.h"
2322#include "machine/c64_bn1541.h"
2423#include "machine/cbmiec.h"
24#include "machine/isa.h"
2525#include "machine/mos6526.h"
26#include "machine/wd17xx.h"
26#include "machine/wd_fdc.h"
2727
2828
2929
r19664r19665
3131//  MACROS / CONSTANTS
3232//**************************************************************************
3333
34#define C1571_TAG         "c1571"
34#define C1571_TAG           "c1571"
3535
3636
3737
r19664r19665
4242// ======================> c1571_device
4343
4444class base_c1571_device :  public device_t,
45                     public device_cbm_iec_interface,
46                     public device_c64_floppy_parallel_interface
45                     public device_cbm_iec_interface,
46                     public device_c64_floppy_parallel_interface
4747{
4848public:
4949   enum
r19664r19665
5454      TYPE_MINI_CHIEF
5555   };
5656
57    // construction/destruction
58    base_c1571_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
57   // construction/destruction
58   base_c1571_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
5959
6060   // optional information overrides
6161   virtual const rom_entry *device_rom_region() const;
r19664r19665
7171   DECLARE_WRITE8_MEMBER( via0_pb_w );
7272   DECLARE_READ_LINE_MEMBER( atn_in_r );
7373   DECLARE_READ_LINE_MEMBER( wprt_r );
74
7475   DECLARE_READ8_MEMBER( via1_r );
7576   DECLARE_WRITE8_MEMBER( via1_w );
7677   DECLARE_WRITE_LINE_MEMBER( via1_irq_w );
7778   DECLARE_READ8_MEMBER( via1_pb_r );
7879   DECLARE_WRITE8_MEMBER( via1_pb_w );
80
7981   DECLARE_WRITE_LINE_MEMBER( cia_irq_w );
8082   DECLARE_WRITE_LINE_MEMBER( cia_pc_w );
8183   DECLARE_WRITE_LINE_MEMBER( cia_cnt_w );
8284   DECLARE_WRITE_LINE_MEMBER( cia_sp_w );
8385   DECLARE_READ8_MEMBER( cia_pb_r );
8486   DECLARE_WRITE8_MEMBER( cia_pb_w );
87
8588   DECLARE_WRITE_LINE_MEMBER( byte_w );
89
8690   DECLARE_WRITE_LINE_MEMBER( wpt_w );
8791
8892protected:
89    // device-level overrides
93   // device-level overrides
9094   virtual void device_config_complete();
91    virtual void device_start();
95   virtual void device_start();
9296   virtual void device_reset();
9397
9498   // device_cbm_iec_interface overrides
r19664r19665
107111   required_device<via6522_device> m_via0;
108112   required_device<via6522_device> m_via1;
109113   required_device<mos6526_device> m_cia;
110   required_device<wd1770_device> m_fdc;
114   required_device<wd1770_t> m_fdc;
111115   required_device<c64h156_device> m_ga;
112116   required_device<legacy_floppy_image_device> m_image;
117   //required_device<floppy_image_device> m_floppy;
113118
114119   // signals
115   int m_1_2mhz;                     // clock speed
120   int m_1_2mhz;                           // clock speed
116121
117122   // IEC bus
118   int m_data_out;                     // serial data out
119   int m_ser_dir;                     // fast serial direction
120   int m_sp_out;                     // fast serial data out
121   int m_cnt_out;                     // fast serial clock out
123   int m_data_out;                         // serial data out
124   int m_ser_dir;                          // fast serial direction
125   int m_sp_out;                           // fast serial data out
126   int m_cnt_out;                          // fast serial clock out
122127
123128   // interrupts
124   int m_via0_irq;                     // VIA #0 interrupt request
125   int m_via1_irq;                     // VIA #1 interrupt request
126   int m_cia_irq;                     // CIA interrupt request
129   int m_via0_irq;                         // VIA #0 interrupt request
130   int m_via1_irq;                         // VIA #1 interrupt request
131   int m_cia_irq;                          // CIA interrupt request
127132
128133   int m_variant;
129134};
r19664r19665
134139class c1570_device :  public base_c1571_device
135140{
136141public:
137    // construction/destruction
138    c1570_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
142   // construction/destruction
143   c1570_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
139144};
140145
141146
r19664r19665
144149class c1571_device :  public base_c1571_device
145150{
146151public:
147    // construction/destruction
148    c1571_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
152   // construction/destruction
153   c1571_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
149154};
150155
151156
r19664r19665
154159class c1571cr_device :  public base_c1571_device
155160{
156161public:
157    // construction/destruction
158    c1571cr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
162   // construction/destruction
163   c1571cr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
164
165   DECLARE_WRITE8_MEMBER( via0_pa_w );
166   DECLARE_WRITE8_MEMBER( via0_pb_w );
159167};
160168
161169
r19664r19665
164172class mini_chief_device :  public base_c1571_device
165173{
166174public:
167    // construction/destruction
168    mini_chief_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
175   // construction/destruction
176   mini_chief_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
177
178   DECLARE_READ8_MEMBER( cia_pa_r );
179   DECLARE_WRITE8_MEMBER( cia_pa_w );
180   DECLARE_WRITE8_MEMBER( cia_pb_w );
169181};
170182
171183

Previous 199869 Revisions Next


© 1997-2024 The MAME Team