Previous 199869 Revisions Next

r21318 Friday 22nd February, 2013 at 15:23:05 UTC by Curt Coder
(MESS) Cleanup. (nw)
[src/mess]mess.mak
[src/mess/drivers]c128.c c64.c cbm2.c pet.c* pet2001.c vic20.c
[src/mess/includes]pet.h* pet2001.h vic20.h
[src/mess/machine]c64user.c c64user.h cbmipt.c cbmipt.h pet_64k.c* pet_64k.h* petexp.h superpet.c superpet.h

trunk/src/mess/machine/c64user.h
r21317r21318
4343//  INTERFACE CONFIGURATION MACROS
4444//**************************************************************************
4545
46#define C64_USER_PORT_INTERFACE(_name) \
47   const c64_user_port_interface (_name) =
48
49
50#define MCFG_C64_USER_PORT_ADD(_tag, _config, _slot_intf, _def_slot, _def_inp) \
46#define MCFG_C64_USER_PORT_ADD(_tag, _slot_intf, _def_slot, _def_inp, _reset) \
5147   MCFG_DEVICE_ADD(_tag, C64_USER_PORT, 0) \
52   MCFG_DEVICE_CONFIG(_config) \
48   downcast<c64_user_port_device *>(device)->set_reset_callback(DEVCB2_##_reset); \
5349   MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
5450
5551
52#define MCFG_C64_USER_PORT_CIA1_CALLBACKS(_cnt, _sp) \
53   downcast<c64_user_port_device *>(device)->set_cia1_callbacks(DEVCB2_##_cnt, DEVCB2_##_sp);
5654
55#define MCFG_C64_USER_PORT_CIA2_CALLBACKS(_cnt, _sp, _flag) \
56   downcast<c64_user_port_device *>(device)->set_cia2_callbacks(DEVCB2_##_cnt, DEVCB2_##_sp, DEVCB2_##_flag);
57
58
59
5760//**************************************************************************
5861//  TYPE DEFINITIONS
5962//**************************************************************************
6063
61// ======================> c64_user_port_interface
62
63struct c64_user_port_interface
64{
65   devcb_write_line    m_out_cnt1_cb;
66   devcb_write_line    m_out_sp1_cb;
67   devcb_write_line    m_out_cnt2_cb;
68   devcb_write_line    m_out_sp2_cb;
69   devcb_write_line    m_out_flag2_cb;
70   devcb_write_line    m_out_reset_cb;
71};
72
73
7464// ======================> c64_user_port_device
7565
7666class device_c64_user_port_interface;
7767
7868class c64_user_port_device : public device_t,
79                        public c64_user_port_interface,
8069                        public device_slot_interface
8170{
8271public:
8372   // construction/destruction
8473   c64_user_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
8574
75   template<class _reset> void set_reset_callback(_reset reset) { m_write_reset.set_callback(reset); }
76   
77   template<class _cnt, class _sp> void set_cia1_callbacks(_cnt cnt, _sp sp) {
78      m_write_cnt1.set_callback(cnt);
79      m_write_sp1.set_callback(sp);
80   }
81   
82   template<class _cnt, class _sp, class _flag> void set_cia2_callbacks(_cnt cnt, _sp sp, _flag flag) {
83      m_write_cnt2.set_callback(cnt);
84      m_write_sp2.set_callback(sp);
85      m_write_flag2.set_callback(flag);
86   }
87
8688   // computer interface
8789   DECLARE_READ8_MEMBER( pb_r );
8890   DECLARE_WRITE8_MEMBER( pb_w );
r21317r21318
9698   DECLARE_WRITE_LINE_MEMBER( sp2_w );
9799
98100   // cartridge interface
99   DECLARE_WRITE_LINE_MEMBER( cia_cnt1_w ) { m_out_cnt1_func(state); }
100   DECLARE_WRITE_LINE_MEMBER( cia_sp1_w ) { m_out_sp1_func(state); }
101   DECLARE_WRITE_LINE_MEMBER( cia_cnt2_w ) { m_out_cnt2_func(state); }
102   DECLARE_WRITE_LINE_MEMBER( cia_sp2_w ) { m_out_sp2_func(state); }
103   DECLARE_WRITE_LINE_MEMBER( cia_flag2_w ) { m_out_flag2_func(state); }
104   DECLARE_WRITE_LINE_MEMBER( reset_w ) { m_out_reset_func(state); }
101   DECLARE_WRITE_LINE_MEMBER( cia_cnt1_w ) { m_write_cnt1(state); }
102   DECLARE_WRITE_LINE_MEMBER( cia_sp1_w ) { m_write_sp1(state); }
103   DECLARE_WRITE_LINE_MEMBER( cia_cnt2_w ) { m_write_cnt2(state); }
104   DECLARE_WRITE_LINE_MEMBER( cia_sp2_w ) { m_write_sp2(state); }
105   DECLARE_WRITE_LINE_MEMBER( cia_flag2_w ) { m_write_flag2(state); }
106   DECLARE_WRITE_LINE_MEMBER( reset_w ) { m_write_reset(state); }
105107
106108protected:
107109   // device-level overrides
108   virtual void device_config_complete();
109110   virtual void device_start();
110111   virtual void device_reset();
111112
112   devcb_resolved_write_line   m_out_cnt1_func;
113   devcb_resolved_write_line   m_out_sp1_func;
114   devcb_resolved_write_line   m_out_cnt2_func;
115   devcb_resolved_write_line   m_out_sp2_func;
116   devcb_resolved_write_line   m_out_flag2_func;
117   devcb_resolved_write_line   m_out_reset_func;
113   devcb2_write_line   m_write_cnt1;
114   devcb2_write_line   m_write_sp1;
115   devcb2_write_line   m_write_cnt2;
116   devcb2_write_line   m_write_sp2;
117   devcb2_write_line   m_write_flag2;
118   devcb2_write_line   m_write_reset;
118119
119120   device_c64_user_port_interface *m_card;
120121};
trunk/src/mess/machine/superpet.c
r21317r21318
111111
112112static INPUT_PORTS_START( superpet )
113113   PORT_START("SW1")
114   PORT_DIPNAME( 0x03, 0x02, "RAM" )
115   PORT_DIPSETTING(    0x00, "Read Only" )
116   PORT_DIPSETTING(    0x01, "Read/Write" )
117   PORT_DIPSETTING(    0x02, "System Port" )
114118
115119   PORT_START("SW2")
120   PORT_DIPNAME( 0x03, 0x02, "CPU" )
121   PORT_DIPSETTING(    0x00, "6809" )
122   PORT_DIPSETTING(    0x01, "6502" )
123   PORT_DIPSETTING(    0x02, "System Port" )
116124INPUT_PORTS_END
117125
118126
r21317r21318
135143//  update_cpu -
136144//-------------------------------------------------
137145
138inline void superpet_device::update_cpu(int cpu)
146inline void superpet_device::update_cpu()
139147{
148   int cpu = (m_sw2 == 2) ? BIT(m_system, 0) : m_sw2;
149
140150   if (cpu)
141151   {
142152      // 6502 active
r21317r21318
152162}
153163
154164
165//-------------------------------------------------
166//  is_ram_writable -
167//-------------------------------------------------
155168
169inline bool superpet_device::is_ram_writable()
170{
171   return (m_sw1 == 2) ? BIT(m_system, 1) : m_sw1;
172}
173
174
175
156176//**************************************************************************
157177//  LIVE DEVICE
158178//**************************************************************************
r21317r21318
169189   m_dongle(*this, MOS6702_TAG),
170190   m_rom(*this, M6809_TAG),
171191   m_ram(*this, "ram"),
172   m_sw1(*this, "SW1"),
173   m_sw2(*this, "SW2"),
192   m_io_sw1(*this, "SW1"),
193   m_io_sw2(*this, "SW2"),
174194   m_system(0),
175195   m_bank(0),
176196   m_sel9_rom(0),
r21317r21318
209229   m_system = 0;
210230   m_bank = 0;
211231   m_sel9_rom = 0;
232   m_sw1 = m_io_sw1->read();
233   m_sw2 = m_io_sw2->read();
212234
213   update_cpu(BIT(m_system, 0));
235   update_cpu();
214236}
215237
216238
r21317r21318
234256
235257   switch (sel)
236258   {
237   case SEL9:
259   case pet_expansion_slot_device::SEL9:
238260      if (m_sel9_rom)
239261      {
240262         data = m_rom->base()[offset - 0x9000];
r21317r21318
245267      }
246268      break;
247269
248   case SELA: case SELB: case SELC: case SELD: case SELF:
270   case pet_expansion_slot_device::SELA:
271   case pet_expansion_slot_device::SELB:
272   case pet_expansion_slot_device::SELC:
273   case pet_expansion_slot_device::SELD:
274   case pet_expansion_slot_device::SELF:
249275      if (!norom)
250276      {
251277         data = m_rom->base()[offset - 0x9000];
252278      }
253279      break;
254280
255   case SELE:
281   case pet_expansion_slot_device::SELE:
256282      if (!norom && !BIT(offset, 11))
257283      {
258284         data = m_rom->base()[offset - 0x9000];
r21317r21318
289315{
290316   switch (sel)
291317   {
292   case SEL9:
293      if (!m_sel9_rom && BIT(m_system, 1))
318   case pet_expansion_slot_device::SEL9:
319      if (!m_sel9_rom && is_ram_writable())
294320      {
295321         m_ram[((m_bank & 0x0f) << 12) | (offset & 0xfff)] = data;
296322      }
r21317r21318
334360         */
335361
336362         m_system = data;
337         update_cpu(BIT(m_system, 0));
363         update_cpu();
338364         printf("SYSTEM %02x\n", data);
339365      }
340366      break;
trunk/src/mess/machine/superpet.h
r21317r21318
5757   virtual int pet_diag_r();
5858   virtual void pet_irq_w(int state);
5959
60   enum
61   {
62      SEL0 = 0,
63      SEL1,
64      SEL2,
65      SEL3,
66      SEL4,
67      SEL5,
68      SEL6,
69      SEL7,
70      SEL8,
71      SEL9,
72      SELA,
73      SELB,
74      SELC,
75      SELD,
76      SELE,
77      SELF
78   };
79
8060private:
8161   required_device<cpu_device> m_maincpu;
8262   required_device<mos6551_device> m_acia;
8363   required_device<mos6702_device> m_dongle;
8464   required_memory_region m_rom;
8565   optional_shared_ptr<UINT8> m_ram;
86   required_ioport m_sw1;
87   required_ioport m_sw2;
66   required_ioport m_io_sw1;
67   required_ioport m_io_sw2;
8868
89   inline void update_cpu(int cpu);
69   inline void update_cpu();
70   inline bool is_ram_writable();
9071
9172   UINT8 m_system;
9273   UINT8 m_bank;
74   UINT8 m_sw1;
75   UINT8 m_sw2;
9376   int m_sel9_rom;
9477   int m_pet_irq;
9578   int m_acia_irq;
trunk/src/mess/machine/pet_64k.c
r0r21318
1/**********************************************************************
2
3    Commodore PET 64KB RAM Expansion emulation
4
5    Copyright MESS Team.
6    Visit http://mamedev.org for licensing and usage restrictions.
7
8**********************************************************************/
9
10#include "pet_64k.h"
11
12
13
14//**************************************************************************
15//  DEVICE DEFINITIONS
16//**************************************************************************
17
18const device_type PET_64K = &device_creator<pet_64k_expansion_device>;
19
20
21
22//**************************************************************************
23//  INLINE HELPERS
24//**************************************************************************
25
26//-------------------------------------------------
27//  read_ram -
28//-------------------------------------------------
29
30inline UINT8 pet_64k_expansion_device::read_ram(offs_t offset)
31{
32   UINT8 data = 0;
33
34   if (offset < 0xc000)
35   {
36      data = m_ram[(BIT(m_ctrl, 2) << 14) | (offset & 0x3fff)];
37   }
38   else
39   {
40      data = m_ram[0x8000 | (BIT(m_ctrl, 3) << 14) | (offset & 0x3fff)];
41   }
42
43   return data;
44}
45
46
47//-------------------------------------------------
48//  write_ram -
49//-------------------------------------------------
50
51inline void pet_64k_expansion_device::write_ram(offs_t offset, UINT8 data)
52{
53   if (offset < 0xc000)
54   {
55      if (!BIT(m_ctrl, 0))
56      {
57         m_ram[(BIT(m_ctrl, 2) << 14) | (offset & 0x3fff)] = data;
58      }
59   }
60   else
61   {
62      if (!BIT(m_ctrl, 1))
63      {
64         m_ram[0x8000 | (BIT(m_ctrl, 3) << 14) | (offset & 0x3fff)] = data;
65      }
66   }
67}
68
69
70
71//**************************************************************************
72//  LIVE DEVICE
73//**************************************************************************
74
75//-------------------------------------------------
76//  pet_64k_expansion_device - constructor
77//-------------------------------------------------
78
79pet_64k_expansion_device::pet_64k_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
80   device_t(mconfig, PET_64K, "PET 64KB RAM", tag, owner, clock),
81   device_pet_expansion_card_interface(mconfig, *this),
82   m_ram(*this, "ram"),
83   m_ctrl(0)
84{
85}
86
87
88//-------------------------------------------------
89//  device_start - device-specific startup
90//-------------------------------------------------
91
92void pet_64k_expansion_device::device_start()
93{
94   // allocate memory
95   m_ram.allocate(0x10000);
96
97   // state saving
98   save_item(NAME(m_ctrl));
99}
100
101
102//-------------------------------------------------
103//  device_reset - device-specific reset
104//-------------------------------------------------
105
106void pet_64k_expansion_device::device_reset()
107{
108   m_ctrl = 0;
109}
110
111
112//-------------------------------------------------
113//  pet_norom_r - NO ROM read
114//-------------------------------------------------
115
116int pet_64k_expansion_device::pet_norom_r(address_space &space, offs_t offset, int sel)
117{
118   return !BIT(m_ctrl, 7);
119}
120
121
122//-------------------------------------------------
123//  pet_bd_r - buffered data read
124//-------------------------------------------------
125
126UINT8 pet_64k_expansion_device::pet_bd_r(address_space &space, offs_t offset, UINT8 data, int sel)
127{
128   if (BIT(m_ctrl, 7))
129   {
130      switch (sel)
131      {
132      case pet_expansion_slot_device::SEL8:
133         if (!BIT(m_ctrl, 5))
134         {
135            data = read_ram(offset);
136         }
137         break;
138
139      case pet_expansion_slot_device::SELE:
140         if (!BIT(m_ctrl, 6) || !BIT(offset, 11))
141         {
142            data = read_ram(offset);
143         }
144         break;
145
146      case pet_expansion_slot_device::SEL9:
147      case pet_expansion_slot_device::SELA:
148      case pet_expansion_slot_device::SELB:
149      case pet_expansion_slot_device::SELC:
150      case pet_expansion_slot_device::SELD:
151      case pet_expansion_slot_device::SELF:
152         data = read_ram(offset);
153         break;
154      }
155   }
156
157   return data;
158}
159
160
161//-------------------------------------------------
162//  pet_bd_w - buffered data write
163//-------------------------------------------------
164
165void pet_64k_expansion_device::pet_bd_w(address_space &space, offs_t offset, UINT8 data, int sel)
166{
167   if (BIT(m_ctrl, 7))
168   {
169      switch (sel)
170      {
171      case pet_expansion_slot_device::SEL8:
172         if (!BIT(m_ctrl, 5))
173         {
174            write_ram(offset, data);
175         }
176         break;
177
178      case pet_expansion_slot_device::SELE:
179         if (!BIT(m_ctrl, 6) || !BIT(offset, 11))
180         {
181            write_ram(offset, data);   
182         }
183         break;
184
185      case pet_expansion_slot_device::SEL9:
186      case pet_expansion_slot_device::SELA:
187      case pet_expansion_slot_device::SELB:
188      case pet_expansion_slot_device::SELC:
189      case pet_expansion_slot_device::SELD:
190      case pet_expansion_slot_device::SELF:
191         write_ram(offset, data);
192         break;
193      }
194   }
195
196   if (offset == 0xfff0)
197   {
198      printf("CTRL %02x\n", data);
199      m_ctrl = data;
200   }
201}
Property changes on: trunk/src/mess/machine/pet_64k.c
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/mess/machine/cbmipt.c
r21317r21318
10241024INPUT_PORTS_END
10251025
10261026SLOT_INTERFACE_START( pet_expansion_cards )
1027   //SLOT_INTERFACE("64k", PET_64K)
1027   SLOT_INTERFACE("64k", PET_64K)
10281028   SLOT_INTERFACE("superpet", SUPERPET)
10291029SLOT_INTERFACE_END
10301030
trunk/src/mess/machine/pet_64k.h
r0r21318
1/**********************************************************************
2
3    Commodore PET 64KB RAM Expansion emulation
4
5    Copyright MESS Team.
6    Visit http://mamedev.org for licensing and usage restrictions.
7
8**********************************************************************/
9
10#pragma once
11
12#ifndef __PET_64K__
13#define __PET_64K__
14
15#include "emu.h"
16#include "machine/petexp.h"
17
18
19
20//**************************************************************************
21//  TYPE DEFINITIONS
22//**************************************************************************
23
24// ======================> pet_64k_expansion_device
25
26class pet_64k_expansion_device : public device_t,
27                           public device_pet_expansion_card_interface
28{
29public:
30   // construction/destruction
31   pet_64k_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
32
33protected:
34   // device-level overrides
35   virtual void device_config_complete() { m_shortname = "pet_64k"; }
36   virtual void device_start();
37   virtual void device_reset();
38
39   // device_pet_expansion_card_interface overrides
40   virtual int pet_norom_r(address_space &space, offs_t offset, int sel);
41   virtual UINT8 pet_bd_r(address_space &space, offs_t offset, UINT8 data, int sel);
42   virtual void pet_bd_w(address_space &space, offs_t offset, UINT8 data, int sel);
43
44private:
45   inline UINT8 read_ram(offs_t offset);
46   inline void write_ram(offs_t offset, UINT8 data);
47
48   optional_shared_ptr<UINT8> m_ram;
49
50   UINT8 m_ctrl;
51};
52
53
54// device type definition
55extern const device_type PET_64K;
56
57
58#endif
Property changes on: trunk/src/mess/machine/pet_64k.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/mess/machine/cbmipt.h
r21317r21318
9090#include "machine/diag264_lb_user.h"
9191#include "machine/fd2000.h"
9292#include "machine/interpod.h"
93#include "machine/pet_64k.h"
9394#include "machine/plus4_sid.h"
9495#include "machine/plus4_std.h"
9596#include "machine/serialbox.h"
trunk/src/mess/machine/petexp.h
r21317r21318
7272   UINT8 dma_bd_r(offs_t offset);
7373   void dma_bd_w(offs_t offset, UINT8 data);
7474   int phi2();
75   
76   enum
77   {
78      SEL0 = 0,
79      SEL1,
80      SEL2,
81      SEL3,
82      SEL4,
83      SEL5,
84      SEL6,
85      SEL7,
86      SEL8,
87      SEL9,
88      SELA,
89      SELB,
90      SELC,
91      SELD,
92      SELE,
93      SELF
94   };
7595
7696protected:
7797   // device-level overrides
trunk/src/mess/machine/c64user.c
r21317r21318
5454
5555c64_user_port_device::c64_user_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
5656      device_t(mconfig, C64_USER_PORT, "C64 user port", tag, owner, clock),
57      device_slot_interface(mconfig, *this)
57      device_slot_interface(mconfig, *this),
58      m_write_cnt1(*this),
59      m_write_sp1(*this),
60      m_write_cnt2(*this),
61      m_write_sp2(*this),
62      m_write_flag2(*this),
63      m_write_reset(*this)
5864{
5965}
6066
6167
6268//-------------------------------------------------
63//  device_config_complete - perform any
64//  operations now that the configuration is
65//  complete
66//-------------------------------------------------
67
68void c64_user_port_device::device_config_complete()
69{
70   // inherit a copy of the static data
71   const c64_user_port_interface *intf = reinterpret_cast<const c64_user_port_interface *>(static_config());
72   if (intf != NULL)
73   {
74      *static_cast<c64_user_port_interface *>(this) = *intf;
75   }
76
77   // or initialize to defaults if none provided
78   else
79   {
80      memset(&m_out_cnt1_cb, 0, sizeof(m_out_cnt1_cb));
81      memset(&m_out_sp1_cb, 0, sizeof(m_out_sp1_cb));
82      memset(&m_out_cnt2_cb, 0, sizeof(m_out_cnt2_cb));
83      memset(&m_out_sp2_cb, 0, sizeof(m_out_sp2_cb));
84      memset(&m_out_flag2_cb, 0, sizeof(m_out_flag2_cb));
85      memset(&m_out_reset_cb, 0, sizeof(m_out_reset_cb));
86   }
87}
88
89
90//-------------------------------------------------
9169//  device_start - device-specific startup
9270//-------------------------------------------------
9371
r21317r21318
9674   m_card = dynamic_cast<device_c64_user_port_interface *>(get_card_device());
9775
9876   // resolve callbacks
99   m_out_cnt1_func.resolve(m_out_cnt1_cb, *this);
100   m_out_sp1_func.resolve(m_out_sp1_cb, *this);
101   m_out_cnt2_func.resolve(m_out_cnt2_cb, *this);
102   m_out_sp2_func.resolve(m_out_sp2_cb, *this);
103   m_out_flag2_func.resolve(m_out_flag2_cb, *this);
104   m_out_reset_func.resolve(m_out_reset_cb, *this);
77   m_write_cnt1.resolve_safe();
78   m_write_sp1.resolve_safe();
79   m_write_cnt2.resolve_safe();
80   m_write_sp2.resolve_safe();
81   m_write_flag2.resolve_safe();
82   m_write_reset.resolve_safe();
10583}
10684
10785
trunk/src/mess/includes/pet2001.h
r21317r21318
1#pragma once
2
3#ifndef __PET__
4#define __PET__
5
6#include "emu.h"
7#include "cpu/m6502/m6502.h"
8#include "machine/cbm_snqk.h"
9#include "machine/6522via.h"
10#include "machine/6821pia.h"
11#include "machine/cbmipt.h"
12#include "machine/ieee488.h"
13#include "machine/petcass.h"
14#include "machine/petexp.h"
15#include "machine/petuser.h"
16#include "machine/ram.h"
17#include "sound/speaker.h"
18#include "video/mc6845.h"
19
20#define M6502_TAG       "f3"
21#define M6522_TAG       "a5"
22#define M6520_1_TAG     "g8"
23#define M6520_2_TAG     "b8"
24#define MC6845_TAG      "ub13"
25#define SCREEN_TAG      "screen"
26
27class pet_state : public driver_device
28{
29public:
30   pet_state(const machine_config &mconfig, device_type type, const char *tag)
31      : driver_device(mconfig, type, tag),
32         m_maincpu(*this, M6502_TAG),
33         m_via(*this, M6522_TAG),
34         m_pia1(*this, M6520_1_TAG),
35         m_pia2(*this, M6520_2_TAG),
36         m_crtc(*this, MC6845_TAG),
37         m_ieee(*this, IEEE488_TAG),
38         m_cassette(*this, PET_DATASSETTE_PORT_TAG),
39         m_cassette2(*this, PET_DATASSETTE_PORT2_TAG),
40         m_exp(*this, PET_EXPANSION_SLOT_TAG),
41         m_user(*this, PET_USER_PORT_TAG),
42         m_speaker(*this, SPEAKER_TAG),
43         m_ram(*this, RAM_TAG),
44         m_rom(*this, M6502_TAG),
45         m_char_rom(*this, "charom"),
46         m_video_ram(*this, "video_ram"),
47         m_row0(*this, "ROW0"),
48         m_row1(*this, "ROW1"),
49         m_row2(*this, "ROW2"),
50         m_row3(*this, "ROW3"),
51         m_row4(*this, "ROW4"),
52         m_row5(*this, "ROW5"),
53         m_row6(*this, "ROW6"),
54         m_row7(*this, "ROW7"),
55         m_row8(*this, "ROW8"),
56         m_row9(*this, "ROW9"),
57         m_lock(*this, "LOCK"),
58         m_key(0),
59         m_sync(0),
60         m_graphic(0),
61         m_blanktv(0),
62         m_via_irq(CLEAR_LINE),
63         m_pia1a_irq(CLEAR_LINE),
64         m_pia1b_irq(CLEAR_LINE),
65         m_pia2a_irq(CLEAR_LINE),
66         m_pia2b_irq(CLEAR_LINE),
67         m_exp_irq(CLEAR_LINE)
68   { }
69
70   required_device<m6502_device> m_maincpu;
71   required_device<via6522_device> m_via;
72   required_device<pia6821_device> m_pia1;
73   required_device<pia6821_device> m_pia2;
74   optional_device<mc6845_device> m_crtc;
75   required_device<ieee488_device> m_ieee;
76   required_device<pet_datassette_port_device> m_cassette;
77   required_device<pet_datassette_port_device> m_cassette2;
78   required_device<pet_expansion_slot_device> m_exp;
79   required_device<pet_user_port_device> m_user;
80   optional_device<speaker_sound_device> m_speaker;
81   required_device<ram_device> m_ram;
82   required_memory_region m_rom;
83   required_memory_region m_char_rom;
84   optional_shared_ptr<UINT8> m_video_ram;
85   required_ioport m_row0;
86   required_ioport m_row1;
87   required_ioport m_row2;
88   required_ioport m_row3;
89   required_ioport m_row4;
90   required_ioport m_row5;
91   required_ioport m_row6;
92   required_ioport m_row7;
93   required_ioport m_row8;
94   required_ioport m_row9;
95   required_ioport m_lock;
96
97   DECLARE_MACHINE_START( pet );
98   DECLARE_MACHINE_START( pet2001 );
99   DECLARE_MACHINE_RESET( pet );
100
101   UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
102
103   void check_interrupts();
104   void update_speaker();
105
106   DECLARE_READ8_MEMBER( read );
107   DECLARE_WRITE8_MEMBER( write );
108
109   DECLARE_WRITE_LINE_MEMBER( via_irq_w );
110   DECLARE_READ8_MEMBER( via_pb_r );
111   DECLARE_WRITE8_MEMBER( via_pb_w );
112   DECLARE_WRITE_LINE_MEMBER( via_ca2_w );
113   DECLARE_WRITE_LINE_MEMBER( via_cb2_w );
114
115   DECLARE_WRITE_LINE_MEMBER( pia1_irqa_w );
116   DECLARE_WRITE_LINE_MEMBER( pia1_irqb_w );
117   DECLARE_READ8_MEMBER( pia1_pa_r );
118   DECLARE_READ8_MEMBER( pia1_pb_r );
119   DECLARE_WRITE8_MEMBER( pia1_pa_w );
120   DECLARE_WRITE_LINE_MEMBER( pia1_ca2_w );
121   DECLARE_READ_LINE_MEMBER( pia1_cb1_r );
122
123   DECLARE_WRITE_LINE_MEMBER( pia2_irqa_w );
124   DECLARE_WRITE_LINE_MEMBER( pia2_irqb_w );
125
126   TIMER_DEVICE_CALLBACK_MEMBER( sync_tick );
127
128   enum
129   {
130      SEL0 = 0,
131      SEL1,
132      SEL2,
133      SEL3,
134      SEL4,
135      SEL5,
136      SEL6,
137      SEL7,
138      SEL8,
139      SEL9,
140      SELA,
141      SELB,
142      SELC,
143      SELD,
144      SELE,
145      SELF
146   };
147
148   // keyboard state
149   UINT8 m_key;
150
151   // video state
152   int m_sync;
153   int m_graphic;
154   int m_blanktv;
155   int m_video_ram_size;
156
157   // sound state
158   int m_via_cb2;
159   int m_pia1_pa7;
160
161   // interrupt state
162   int m_via_irq;
163   int m_pia1a_irq;
164   int m_pia1b_irq;
165   int m_pia2a_irq;
166   int m_pia2b_irq;
167   int m_exp_irq;
168};
169
170
171class pet2001b_state : public pet_state
172{
173public:
174   pet2001b_state(const machine_config &mconfig, device_type type, const char *tag)
175      : pet_state(mconfig, type, tag)
176   { }
177
178   DECLARE_READ8_MEMBER( pia1_pb_r );
179};
180
181
182class pet80_state : public pet2001b_state
183{
184public:
185   pet80_state(const machine_config &mconfig, device_type type, const char *tag)
186      : pet2001b_state(mconfig, type, tag)
187   { }
188
189   DECLARE_MACHINE_START( pet80 );
190   DECLARE_MACHINE_RESET( pet80 );
191};
192
193
194class superpet_state : public pet80_state
195{
196public:
197   superpet_state(const machine_config &mconfig, device_type type, const char *tag)
198      : pet80_state(mconfig, type, tag)
199   { }
200};
201
202
203class cbm8096_state : public pet80_state
204{
205public:
206   cbm8096_state(const machine_config &mconfig, device_type type, const char *tag)
207      : pet80_state(mconfig, type, tag)
208   { }
209};
210
211
212class cbm8296_state : public pet80_state
213{
214public:
215   cbm8296_state(const machine_config &mconfig, device_type type, const char *tag)
216      : pet80_state(mconfig, type, tag)
217   { }
218};
219
220
221
222#endif
trunk/src/mess/includes/vic20.h
r21317r21318
9999
100100   DECLARE_READ8_MEMBER( via1_pa_r );
101101   DECLARE_WRITE8_MEMBER( via1_pa_w );
102   DECLARE_READ_LINE_MEMBER( via1_ca1_r );
103102
104103   DECLARE_READ8_MEMBER( via2_pa_r );
105104   DECLARE_READ8_MEMBER( via2_pb_r );
trunk/src/mess/includes/pet.h
r0r21318
1#pragma once
2
3#ifndef __PET__
4#define __PET__
5
6#include "emu.h"
7#include "cpu/m6502/m6502.h"
8#include "machine/6522via.h"
9#include "machine/6821pia.h"
10#include "machine/cbm_snqk.h"
11#include "machine/cbmipt.h"
12#include "machine/ieee488.h"
13#include "machine/petcass.h"
14#include "machine/petexp.h"
15#include "machine/petuser.h"
16#include "machine/ram.h"
17#include "sound/speaker.h"
18#include "video/mc6845.h"
19
20#define M6502_TAG       "f3"
21#define M6522_TAG       "a5"
22#define M6520_1_TAG     "g8"
23#define M6520_2_TAG     "b8"
24#define MC6845_TAG      "ub13"
25#define SCREEN_TAG      "screen"
26
27class pet_state : public driver_device
28{
29public:
30   pet_state(const machine_config &mconfig, device_type type, const char *tag)
31      : driver_device(mconfig, type, tag),
32         m_maincpu(*this, M6502_TAG),
33         m_via(*this, M6522_TAG),
34         m_pia1(*this, M6520_1_TAG),
35         m_pia2(*this, M6520_2_TAG),
36         m_crtc(*this, MC6845_TAG),
37         m_ieee(*this, IEEE488_TAG),
38         m_cassette(*this, PET_DATASSETTE_PORT_TAG),
39         m_cassette2(*this, PET_DATASSETTE_PORT2_TAG),
40         m_exp(*this, PET_EXPANSION_SLOT_TAG),
41         m_user(*this, PET_USER_PORT_TAG),
42         m_speaker(*this, SPEAKER_TAG),
43         m_ram(*this, RAM_TAG),
44         m_rom(*this, M6502_TAG),
45         m_char_rom(*this, "charom"),
46         m_video_ram(*this, "video_ram"),
47         m_row0(*this, "ROW0"),
48         m_row1(*this, "ROW1"),
49         m_row2(*this, "ROW2"),
50         m_row3(*this, "ROW3"),
51         m_row4(*this, "ROW4"),
52         m_row5(*this, "ROW5"),
53         m_row6(*this, "ROW6"),
54         m_row7(*this, "ROW7"),
55         m_row8(*this, "ROW8"),
56         m_row9(*this, "ROW9"),
57         m_lock(*this, "LOCK"),
58         m_key(0),
59         m_sync(0),
60         m_graphic(0),
61         m_blanktv(0),
62         m_via_irq(CLEAR_LINE),
63         m_pia1a_irq(CLEAR_LINE),
64         m_pia1b_irq(CLEAR_LINE),
65         m_pia2a_irq(CLEAR_LINE),
66         m_pia2b_irq(CLEAR_LINE),
67         m_exp_irq(CLEAR_LINE)
68   { }
69
70   required_device<m6502_device> m_maincpu;
71   required_device<via6522_device> m_via;
72   required_device<pia6821_device> m_pia1;
73   required_device<pia6821_device> m_pia2;
74   optional_device<mc6845_device> m_crtc;
75   required_device<ieee488_device> m_ieee;
76   required_device<pet_datassette_port_device> m_cassette;
77   required_device<pet_datassette_port_device> m_cassette2;
78   required_device<pet_expansion_slot_device> m_exp;
79   required_device<pet_user_port_device> m_user;
80   optional_device<speaker_sound_device> m_speaker;
81   required_device<ram_device> m_ram;
82   required_memory_region m_rom;
83   required_memory_region m_char_rom;
84   optional_shared_ptr<UINT8> m_video_ram;
85   required_ioport m_row0;
86   required_ioport m_row1;
87   required_ioport m_row2;
88   required_ioport m_row3;
89   required_ioport m_row4;
90   required_ioport m_row5;
91   required_ioport m_row6;
92   required_ioport m_row7;
93   required_ioport m_row8;
94   required_ioport m_row9;
95   required_ioport m_lock;
96
97   DECLARE_MACHINE_START( pet );
98   DECLARE_MACHINE_START( pet2001 );
99   DECLARE_MACHINE_RESET( pet );
100
101   UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
102
103   void check_interrupts();
104   void update_speaker();
105
106   DECLARE_READ8_MEMBER( read );
107   DECLARE_WRITE8_MEMBER( write );
108
109   DECLARE_WRITE_LINE_MEMBER( via_irq_w );
110   DECLARE_READ8_MEMBER( via_pb_r );
111   DECLARE_WRITE8_MEMBER( via_pb_w );
112   DECLARE_WRITE_LINE_MEMBER( via_ca2_w );
113   DECLARE_WRITE_LINE_MEMBER( via_cb2_w );
114
115   DECLARE_WRITE_LINE_MEMBER( pia1_irqa_w );
116   DECLARE_WRITE_LINE_MEMBER( pia1_irqb_w );
117   DECLARE_READ8_MEMBER( pia1_pa_r );
118   DECLARE_READ8_MEMBER( pia1_pb_r );
119   DECLARE_WRITE8_MEMBER( pia1_pa_w );
120   DECLARE_WRITE_LINE_MEMBER( pia1_ca2_w );
121   DECLARE_READ_LINE_MEMBER( pia1_cb1_r );
122
123   DECLARE_WRITE_LINE_MEMBER( pia2_irqa_w );
124   DECLARE_WRITE_LINE_MEMBER( pia2_irqb_w );
125
126   TIMER_DEVICE_CALLBACK_MEMBER( sync_tick );
127
128   enum
129   {
130      SEL0 = 0,
131      SEL1,
132      SEL2,
133      SEL3,
134      SEL4,
135      SEL5,
136      SEL6,
137      SEL7,
138      SEL8,
139      SEL9,
140      SELA,
141      SELB,
142      SELC,
143      SELD,
144      SELE,
145      SELF
146   };
147
148   // keyboard state
149   UINT8 m_key;
150
151   // video state
152   int m_sync;
153   int m_graphic;
154   int m_blanktv;
155   int m_video_ram_size;
156
157   // sound state
158   int m_via_cb2;
159   int m_pia1_pa7;
160
161   // interrupt state
162   int m_via_irq;
163   int m_pia1a_irq;
164   int m_pia1b_irq;
165   int m_pia2a_irq;
166   int m_pia2b_irq;
167   int m_exp_irq;
168};
169
170
171class pet2001b_state : public pet_state
172{
173public:
174   pet2001b_state(const machine_config &mconfig, device_type type, const char *tag)
175      : pet_state(mconfig, type, tag)
176   { }
177
178   DECLARE_READ8_MEMBER( pia1_pb_r );
179};
180
181
182class pet80_state : public pet2001b_state
183{
184public:
185   pet80_state(const machine_config &mconfig, device_type type, const char *tag)
186      : pet2001b_state(mconfig, type, tag)
187   { }
188
189   DECLARE_MACHINE_START( pet80 );
190   DECLARE_MACHINE_RESET( pet80 );
191};
192
193
194class superpet_state : public pet80_state
195{
196public:
197   superpet_state(const machine_config &mconfig, device_type type, const char *tag)
198      : pet80_state(mconfig, type, tag)
199   { }
200};
201
202
203class cbm8096_state : public pet80_state
204{
205public:
206   cbm8096_state(const machine_config &mconfig, device_type type, const char *tag)
207      : pet80_state(mconfig, type, tag)
208   { }
209};
210
211
212class cbm8296_state : public pet80_state
213{
214public:
215   cbm8296_state(const machine_config &mconfig, device_type type, const char *tag)
216      : pet80_state(mconfig, type, tag)
217   { }
218};
219
220
221
222#endif
Property changes on: trunk/src/mess/includes/pet.h
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/mess/mess.mak
r21317r21318
821821   $(MESS_VIDEO)/hd44352.o     \
822822
823823$(MESSOBJ)/cbm.a:               \
824   $(MESS_DRIVERS)/pet2001.o   \
824   $(MESS_DRIVERS)/pet.o      \
825825   $(MESS_MACHINE)/petcass.o   \
826   $(MESS_MACHINE)/petexp.o   \
826   $(MESS_MACHINE)/petexp.o      \
827827   $(MESS_MACHINE)/petuser.o   \
828   $(MESS_MACHINE)/superpet.o   \
828   $(MESS_MACHINE)/pet_64k.o   \
829   $(MESS_MACHINE)/superpet.o  \
829830   $(MESS_MACHINE)/mos6702.o   \
830831   $(MESS_DRIVERS)/c64.o       \
831832   $(MESS_MACHINE)/c64_legacy.o       \
trunk/src/mess/drivers/pet2001.c
r21317r21318
1/*
2
3http://www.6502.org/users/andre/petindex/boards.html
4
5Static Board (PET 2001)
6-----------------------
7
8Four variations based on type of RAM(6550 or 2114) and ROM(6540 or 2316B).
94K or 8K static RAM (selected by jumper).
1040 column display
11A video interrupt interferes with disk drive operation.
12Display timing not compatible with Basic 4.0.
13ROM sockets:  A2  2K character      ROM sockets:  A2  2K character
14 (2316B)      H1  C000-CFFF           (6540)       H1  C000-C7FF
15              H2  D000-DFFF                        H2  D000-D7FF
16              H3  E000-E7FF                        H3  E000-E7FF
17              H4  F000-FFFF                        H4  F000-F7FF
18              H5  C000-CFFF                        H5  C800-CFFF
19              H6  D000-DFFF                        H6  D800-DFFF
20              H7  F000-FFFF                        H7  F800-FFFF
21
22
23           IEEE user tape #2
24     +------####-####--##-+
25     !                    #
26     !                    #
27     !                    # exp
28     !                    # bus
29     !                    #
30     !                    #    2000 Series
31     !                    !       circa 1977/78  Max RAM - 8k
32     !       (2k) ROMS    !       [w/daughter board exp to 32k shown]
33     !      F F E D D C C !
34     !      8 0 0 8 0 8 0 !
35     !                    !
36tape #       RAM MEMORY   !
37 #1  #                    !
38     +--------------------+
39
40
41Dynamic Board (PET/CBM 2001-N/2001-B/4000)
42------------------------------------------
43
444K, 8K, 16K or 32K dynamic RAM (selected by jumper).
4540 column display
46Can run all versions of 40 column Basic (Basic 1 must be copied to 4K ROMs)
47Can be jumpered to replace the older board.
48ROM sockets:  UD3   9000-9FFF
49              UD4   A000-AFFF
50              UD5   B000-BFFF
51              UD6   C000-CFFF
52              UD7   D000-DFFF
53              UD8   E000-E7FF
54              UD9   F000-FFFF
55              UF10  2K character
56
57
58            IEEE user tape #1
59     +------####-####--##-+
60     !                   #!
61     !                   #!
62     !                   #! exp
63     !        ROMS       #! bus
64     !    F E D C B A 9  #!
65     !                   #!    3000, 4000 Series
66     !                    !       (3000 series is European version)
67     !                    !       circa 1979/80  Max RAM - 32k
68     !                    !
69     !                    !
70     !                    !
71tape #      RAM MEMORY    !
72 #2  #                    !
73     +--------------------+
74
75
7680 Column Board (CBM 8000)
77--------------------------
78
7916K or 32K RAM (selected by jumper).
80Uses CTRC to generate 80 column display.
81Can only run the 80 column version of Basic 4.0.
82Not compatible with older boards.
83ROM sockets:  UA3   2K or 4K character
84              UD6   F000-FFFF
85              UD7   E000-E7FF
86              UD8   D000-DFFF
87              UD9   C000-CFFF
88              UD10  B000-BFFF
89              UD11  A000-AFFF
90              UD12  9000-9FFF
91
92The layout is the same of the one used in Universal Boards below.
93
94
95Universal Board (CBM 8000/PET 4000-12)
96--------------------------------------
97
98This is an 80 column board with jumpers for different configurations.
9916K or 32K RAM (selected by jumper).
100Uses CTRC to generate 40 or 80 column display (selected by jumpers).
101Can only run Basic 4.0 versions that support the CRTC.
102Can be jumpered to replace all older boards.
103ROM sockets:  UA3   2K or 4K character
104              UD6   F000-FFFF
105              UD7   E000-E7FF
106              UD8   D000-DFFF
107              UD9   C000-CFFF
108              UD10  B000-BFFF
109              UD11  A000-AFFF
110              UD12  9000-9FFF
111
112
113           IEEE user tape #1
114     +------####-####--##-+
115     !                  # # tape
116     !                  # #  #2
117     !  R       exp bus # !
118     !  A                #!
119     !  M             9  #!
120     !                A  #!     4000, 8000 Series
121     !  M          R  B   !        circa 1981     Max RAM - 32k*
122     !  E          O  C   !       [8296 layout not shown]
123     !  M          M  D   !
124     !  O          S  E   !
125     !  R             F   !
126     !  Y                 !
127     !                spkr!
128     +--------------------+
129*/
130
131/*
132
133    TODO:
134
135    - accurate video timing for non-CRTC models
136    - PET 4000-12 (40 column CRTC models)
137    - High Speed Graphics board
138    - keyboard layouts
139        - Swedish
140        - German
141    - SuperPET
142        - 6809
143        - OS/9 MMU
144    - 8096
145        - 64k expansion
146    - 8296
147        - PLA dumps
148        - high resolution graphics
149        - rom software list
150
151*/
152
153#include "includes/pet2001.h"
154
155static void cbm_pet_quick_sethiaddress( running_machine &machine, UINT16 hiaddress )
156{
157   address_space &space = machine.firstcpu->space(AS_PROGRAM);
158
159   space.write_byte(0x2e, hiaddress & 0xff);
160   space.write_byte(0x2c, hiaddress & 0xff);
161   space.write_byte(0x2a, hiaddress & 0xff);
162   space.write_byte(0x2f, hiaddress >> 8);
163   space.write_byte(0x2d, hiaddress >> 8);
164   space.write_byte(0x2b, hiaddress >> 8);
165}
166
167static QUICKLOAD_LOAD( cbm_pet )
168{
169   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_pet_quick_sethiaddress);
170}
171
172//**************************************************************************
173//  INTERRUPTS
174//**************************************************************************
175
176//-------------------------------------------------
177//  check_interrupts -
178//-------------------------------------------------
179
180void pet_state::check_interrupts()
181{
182   int irq = m_via_irq || m_pia1a_irq || m_pia1b_irq || m_pia2a_irq || m_pia2b_irq || m_exp_irq;
183
184   m_maincpu->set_input_line(M6502_IRQ_LINE, irq);
185   m_exp->irq_w(irq);
186}
187
188
189//-------------------------------------------------
190//  update_speaker -
191//-------------------------------------------------
192
193void pet_state::update_speaker()
194{
195   if (m_speaker)
196   {
197      speaker_level_w(m_speaker, !(m_via_cb2 || m_pia1_pa7));
198   }
199}
200
201
202//-------------------------------------------------
203//  read -
204//-------------------------------------------------
205
206READ8_MEMBER( pet_state::read )
207{
208   int sel = offset >> 12;
209   int norom = m_exp->norom_r(space, offset, sel);
210   UINT8 data = 0;
211
212   switch (sel)
213   {
214   case SEL0: case SEL1: case SEL2: case SEL3: case SEL4: case SEL5: case SEL6: case SEL7:
215      if (offset < m_ram->size())
216      {
217         data = m_ram->pointer()[offset];
218      }
219      break;
220
221   case SEL8:
222      data = m_video_ram[offset & (m_video_ram_size - 1)];
223      break;
224
225   case SEL9: case SELA: case SELB: case SELC: case SELD: case SELF:
226      if (norom)
227      {
228         data = m_rom->base()[offset - 0x9000];
229      }
230      break;
231
232   case SELE:
233      if (BIT(offset, 11))
234      {
235         if (BIT(offset, 4))
236         {
237            data = m_pia1->read(space, offset & 0x03);
238         }
239         if (BIT(offset, 5))
240         {
241            data = m_pia2->read(space, offset & 0x03);
242         }
243         if (BIT(offset, 6))
244         {
245            data = m_via->read(space, offset & 0x0f);
246         }
247         if (m_crtc && BIT(offset, 7) && BIT(offset, 0))
248         {
249            data = m_crtc->register_r(space, 0);
250         }
251      }
252      else if (norom)
253      {
254         data = m_rom->base()[offset - 0x9000];
255      }
256      break;
257   }
258
259   return m_exp->read(space, offset, data, sel);
260}
261
262
263//-------------------------------------------------
264//  write -
265//-------------------------------------------------
266
267WRITE8_MEMBER( pet_state::write )
268{
269   int sel = offset >> 12;
270
271   switch (sel)
272   {
273   case SEL0: case SEL1: case SEL2: case SEL3: case SEL4: case SEL5: case SEL6: case SEL7:
274      if (offset < m_ram->size())
275      {
276         m_ram->pointer()[offset] = data;
277      }
278      break;
279
280   case SEL8:
281      m_video_ram[offset & (m_video_ram_size - 1)] = data;
282      break;
283
284   case SELE:
285      if (BIT(offset, 11))
286      {
287         if (BIT(offset, 4))
288         {
289            m_pia1->write(space, offset & 0x03, data);
290         }
291         if (BIT(offset, 5))
292         {
293            m_pia2->write(space, offset & 0x03, data);
294         }
295         if (BIT(offset, 6))
296         {
297            m_via->write(space, offset & 0x0f, data);
298         }
299         if (m_crtc && BIT(offset, 7))
300         {
301            if (BIT(offset, 0))
302            {
303               m_crtc->register_w(space, 0, data);
304            }
305            else
306            {
307               m_crtc->address_w(space, 0, data);
308            }
309         }
310      }
311      break;
312   }
313
314   m_exp->write(space, offset, data, sel);
315}
316
317
318
319//**************************************************************************
320//  ADDRESS MAPS
321//**************************************************************************
322
323//-------------------------------------------------
324//  ADDRESS_MAP( pet2001_mem )
325//-------------------------------------------------
326
327static ADDRESS_MAP_START( pet2001_mem, AS_PROGRAM, 8, pet_state )
328   AM_RANGE(0x0000, 0xffff) AM_READWRITE(read, write)
329ADDRESS_MAP_END
330
331
332
333//**************************************************************************
334//  INPUT PORTS
335//**************************************************************************
336
337//-------------------------------------------------
338//  INPUT_PORTS( pet )
339//-------------------------------------------------
340
341static INPUT_PORTS_START( pet )
342   PORT_START( "ROW0" )
343   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Crsr Right Left") PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
344   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Home  Clr Screen") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))
345   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x90") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(0x2190)
346   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9)          PORT_CHAR('(')
347   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7)          PORT_CHAR('&')
348   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5)          PORT_CHAR('%')
349   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3)          PORT_CHAR('#')
350   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1)          PORT_CHAR('!')
351
352   PORT_START( "ROW1" )
353   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Del  Inst") PORT_CODE(KEYCODE_DEL) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
354   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Crsr Down Up") PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHAR(UCHAR_MAMEKEY(UP))
355   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
356   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0)          PORT_CHAR(')')
357   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8)          PORT_CHAR('\\')
358   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6)          PORT_CHAR('\'')
359   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4)          PORT_CHAR('$')
360   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2)          PORT_CHAR('"')
361
362   PORT_START( "ROW2" )
363   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD)      PORT_CHAR('9')
364   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD)      PORT_CHAR('7')
365   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x91 Pi") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0x2191) PORT_CHAR(0x03C0)
366   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O)          PORT_CHAR('O')
367   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U)          PORT_CHAR('U')
368   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T)          PORT_CHAR('T')
369   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E)          PORT_CHAR('E')
370   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q)          PORT_CHAR('Q')
371
372   PORT_START( "ROW3" )
373   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD)  PORT_CHAR('/')
374   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD)      PORT_CHAR('8')
375   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
376   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P)          PORT_CHAR('P')
377   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I)          PORT_CHAR('I')
378   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y)          PORT_CHAR('Y')
379   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R)          PORT_CHAR('R')
380   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W)          PORT_CHAR('W')
381
382   PORT_START( "ROW4" )
383   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD)      PORT_CHAR('6')
384   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD)      PORT_CHAR('4')
385   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
386   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L)          PORT_CHAR('L')
387   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J)          PORT_CHAR('J')
388   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G)          PORT_CHAR('G')
389   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D)          PORT_CHAR('D')
390   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A)          PORT_CHAR('A')
391
392   PORT_START( "ROW5" )
393   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK)   PORT_CHAR('*')
394   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD)      PORT_CHAR('5')
395   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
396   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON)      PORT_CHAR(':')
397   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K)          PORT_CHAR('K')
398   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H)          PORT_CHAR('H')
399   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F)          PORT_CHAR('F')
400   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S)          PORT_CHAR('S')
401
402   PORT_START( "ROW6" )
403   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD)      PORT_CHAR('3')
404   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD)      PORT_CHAR('1')
405   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
406   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)       PORT_CHAR(';')
407   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M)          PORT_CHAR('M')
408   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B)          PORT_CHAR('B')
409   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C)          PORT_CHAR('C')
410   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z)          PORT_CHAR('Z')
411
412   PORT_START( "ROW7" )
413   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD)   PORT_CHAR('+')
414   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD)      PORT_CHAR('2')
415   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
416   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH)      PORT_CHAR('?')
417   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA)      PORT_CHAR(',')
418   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N)          PORT_CHAR('N')
419   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V)          PORT_CHAR('V')
420   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X)          PORT_CHAR('X')
421
422   PORT_START( "ROW8" )
423   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD)  PORT_CHAR('-')
424   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD)      PORT_CHAR('0')
425   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Shift (Right)") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
426   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH)  PORT_CHAR('>')
427   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
428   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE)  PORT_CHAR(']')
429   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE)      PORT_CHAR('@')
430   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Shift (Left)") PORT_CODE(KEYCODE_LSHIFT)
431
432   PORT_START( "ROW9" )
433   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad =") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR('=')
434   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD)    PORT_CHAR('.')
435   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
436   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Stop Run") PORT_CODE(KEYCODE_QUOTE)
437   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('<')
438   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE)      PORT_CHAR(' ')
439   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)     PORT_CHAR('[')
440   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Rvs Off") PORT_CODE(KEYCODE_TAB)
441
442   PORT_START( "LOCK" )
443   PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
444   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
445INPUT_PORTS_END
446
447
448//-------------------------------------------------
449//  INPUT_PORTS( petb )
450//-------------------------------------------------
451
452INPUT_PORTS_START( petb )
453   PORT_START( "ROW0" )
454   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
455   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
456   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Crsr Right Left") PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
457   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD)      PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
458   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)     PORT_CHAR('-') PORT_CHAR('=')
459   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8)          PORT_CHAR('8') PORT_CHAR('\\')
460   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5)          PORT_CHAR('5') PORT_CHAR('%')
461   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2)          PORT_CHAR('2') PORT_CHAR('"')
462
463   PORT_START( "ROW1" )
464   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD)      PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
465   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
466   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x91") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(0x2191)
467   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD)      PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
468   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD)      PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
469   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7)          PORT_CHAR('7') PORT_CHAR('&')
470   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4)          PORT_CHAR('4') PORT_CHAR('$')
471   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1)          PORT_CHAR('1') PORT_CHAR('!')
472
473   PORT_START( "ROW2" )
474   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD)      PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
475   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON)      PORT_CHAR(';') PORT_CHAR('+')
476   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K)          PORT_CHAR('K')
477   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH)  PORT_CHAR(']')
478   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H)          PORT_CHAR('H')
479   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F)          PORT_CHAR('F')
480   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S)          PORT_CHAR('S')
481   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC)        PORT_CHAR(UCHAR_MAMEKEY(ESC))
482
483   PORT_START( "ROW3" )
484   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD)      PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
485   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE)      PORT_CHAR('@')
486   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L)          PORT_CHAR('L')
487   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
488   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J)          PORT_CHAR('J')
489   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G)          PORT_CHAR('G')
490   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D)          PORT_CHAR('D')
491   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A)          PORT_CHAR('A')
492
493   PORT_START( "ROW4" )
494   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Del  Inst") PORT_CODE(KEYCODE_DEL) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
495   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P)          PORT_CHAR('P')
496   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I)          PORT_CHAR('I')
497   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('\\')
498   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y)          PORT_CHAR('Y')
499   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R)          PORT_CHAR('R')
500   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W)          PORT_CHAR('W')
501   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB)        PORT_CHAR('\t')
502
503   PORT_START( "ROW5" )
504   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD)      PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
505   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE)  PORT_CHAR('[')
506   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O)          PORT_CHAR('O')
507   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Crsr Down Up") PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHAR(UCHAR_MAMEKEY(UP))
508   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U)          PORT_CHAR('U')
509   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T)          PORT_CHAR('T')
510   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E)          PORT_CHAR('E')
511   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q)          PORT_CHAR('Q')
512
513   PORT_START( "ROW6" )
514   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD)      PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
515   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Shift (Right)") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
516   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
517   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD)    PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
518   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)       PORT_CHAR('.') PORT_CHAR('>')
519   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B)          PORT_CHAR('B')
520   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C)          PORT_CHAR('C')
521   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Shift (Left)") PORT_CODE(KEYCODE_LSHIFT)
522
523   PORT_START( "ROW7" )
524   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD)      PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
525   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Repeat") PORT_CODE(KEYCODE_LALT)
526   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
527   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0)          PORT_CHAR('0') PORT_CHAR(')')
528   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA)      PORT_CHAR(',') PORT_CHAR('<')
529   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N)          PORT_CHAR('N')
530   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V)          PORT_CHAR('V')
531   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z)          PORT_CHAR('Z')
532
533   PORT_START( "ROW8" )
534   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD)      PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
535   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH)      PORT_CHAR('/') PORT_CHAR('?')
536   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
537   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Home  Clr Screen") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))
538   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M)          PORT_CHAR('M')
539   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE)      PORT_CHAR(' ')
540   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X)          PORT_CHAR('X')
541   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Rvs Off") PORT_CODE(KEYCODE_INSERT)
542
543   PORT_START( "ROW9" )
544   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
545   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
546   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS)      PORT_CHAR(':') PORT_CHAR('*')
547   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Stop Run") PORT_CODE(KEYCODE_END)
548   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9)          PORT_CHAR('9') PORT_CHAR('(')
549   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6)          PORT_CHAR('6') PORT_CHAR('\'')
550   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3)          PORT_CHAR('3') PORT_CHAR('#')
551   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x90") PORT_CODE(KEYCODE_TILDE) PORT_CHAR(0x2190)
552
553   PORT_START( "LOCK" )
554   PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
555   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
556INPUT_PORTS_END
557
558
559//-------------------------------------------------
560//  INPUT_PORTS( petb_de )
561//-------------------------------------------------
562
563INPUT_PORTS_START( petb_de )
564   PORT_INCLUDE( petb )
565INPUT_PORTS_END
566
567
568//-------------------------------------------------
569//  INPUT_PORTS( petb_se )
570//-------------------------------------------------
571
572INPUT_PORTS_START( petb_se )
573   PORT_INCLUDE( petb )
574INPUT_PORTS_END
575
576
577
578//**************************************************************************
579//  DEVICE CONFIGURATION
580//**************************************************************************
581
582//-------------------------------------------------
583//  via6522_interface via_intf
584//-------------------------------------------------
585
586WRITE_LINE_MEMBER( pet_state::via_irq_w )
587{
588   m_via_irq = state;
589
590   check_interrupts();
591}
592
593READ8_MEMBER( pet_state::via_pb_r )
594{
595   /*
596
597       bit     description
598
599       PB0     _NDAC IN
600       PB1
601       PB2
602       PB3
603       PB4
604       PB5     SYNC IN
605       PB6     _NRFD IN
606       PB7     _DAV IN
607
608   */
609
610   UINT8 data = 0;
611
612   // video sync
613   data |= (m_crtc ? m_crtc->vsync_r() : m_sync) << 5;
614
615   // IEEE-488
616   data |= m_ieee->ndac_r();
617   data |= m_ieee->nrfd_r() << 6;
618   data |= m_ieee->dav_r() << 7;
619
620   return data;
621}
622
623WRITE8_MEMBER( pet_state::via_pb_w )
624{
625   /*
626
627       bit     description
628
629       PB0
630       PB1     _NRFD OUT
631       PB2     _ATN OUT
632       PB3     CASS WRITE
633       PB4     #2 CASS MOTOR
634       PB5
635       PB6
636       PB7
637
638   */
639
640   // IEEE-488
641   m_ieee->nrfd_w(BIT(data, 1));
642   m_ieee->atn_w(BIT(data, 2));
643
644   // cassette
645   m_cassette->write(BIT(data, 3));
646   m_cassette2->write(BIT(data, 3));
647   m_cassette2->motor_w(BIT(data, 4));
648}
649
650WRITE_LINE_MEMBER( pet_state::via_ca2_w )
651{
652   m_graphic = state;
653}
654
655WRITE_LINE_MEMBER( pet_state::via_cb2_w )
656{
657   m_via_cb2 = state;
658   update_speaker();
659
660   m_user->cb2_w(state);
661}
662
663const via6522_interface via_intf =
664{
665   DEVCB_DEVICE_MEMBER(PET_USER_PORT_TAG, pet_user_port_device, pa_r),
666   DEVCB_DRIVER_MEMBER(pet_state, via_pb_r),
667   DEVCB_NULL,
668   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT2_TAG, pet_datassette_port_device, read),
669   DEVCB_NULL,
670   DEVCB_NULL,
671   DEVCB_DEVICE_MEMBER(PET_USER_PORT_TAG, pet_user_port_device, pa_w),
672   DEVCB_DRIVER_MEMBER(pet_state, via_pb_w),
673   DEVCB_DEVICE_LINE_MEMBER(PET_USER_PORT_TAG, pet_user_port_device, ca1_w),
674   DEVCB_DRIVER_LINE_MEMBER(pet_state, via_ca2_w),
675   DEVCB_NULL,
676   DEVCB_DRIVER_LINE_MEMBER(pet_state, via_cb2_w),
677   DEVCB_DRIVER_LINE_MEMBER(pet_state, via_irq_w)
678};
679
680
681//-------------------------------------------------
682//  pia6821_interface pia1_intf
683//-------------------------------------------------
684
685WRITE_LINE_MEMBER( pet_state::pia1_irqa_w )
686{
687   m_pia1a_irq = state;
688
689   check_interrupts();
690}
691
692WRITE_LINE_MEMBER( pet_state::pia1_irqb_w )
693{
694   m_pia1b_irq = state;
695
696   check_interrupts();
697}
698
699READ8_MEMBER( pet_state::pia1_pa_r )
700{
701   /*
702
703       bit     description
704
705       PA0     KEY A
706       PA1     KEY B
707       PA2     KEY C
708       PA3     KEY D
709       PA4     #1 CASS SWITCH
710       PA5     #2 CASS SWITCH
711       PA6     _EOI IN
712       PA7     DIAG JUMPER
713
714   */
715
716   UINT8 data = 0;
717
718   // keyboard
719   data |= m_key;
720
721   // cassette
722   data |= m_cassette->sense_r() << 4;
723   data |= m_cassette2->sense_r() << 5;
724
725   // IEEE-488
726   data |= m_ieee->eoi_r() << 6;
727
728   // diagnostic jumper
729   data |= m_exp->diag_r() << 7;
730
731   return data;
732}
733
734WRITE8_MEMBER( pet_state::pia1_pa_w )
735{
736   /*
737
738       bit     description
739
740       PA0     KEY A
741       PA1     KEY B
742       PA2     KEY C
743       PA3     KEY D
744       PA4
745       PA5
746       PA6
747       PA7     SPEAKER
748
749   */
750
751   // keyboard
752   m_key = data & 0x0f;
753
754   // speaker
755   m_pia1_pa7 = BIT(data, 7);
756   update_speaker();
757}
758
759READ8_MEMBER( pet_state::pia1_pb_r )
760{
761   UINT8 data = 0xff;
762
763   switch (m_key)
764   {
765   case 0: data &= m_row0->read(); break;
766   case 1: data &= m_row1->read(); break;
767   case 2: data &= m_row2->read(); break;
768   case 3: data &= m_row3->read(); break;
769   case 4: data &= m_row4->read(); break;
770   case 5: data &= m_row5->read(); break;
771   case 6: data &= m_row6->read(); break;
772   case 7: data &= m_row7->read(); break;
773   case 8: data &= m_row8->read() & m_lock->read(); break;
774   case 9: data &= m_row9->read(); break;
775   }
776
777   return data;
778}
779
780READ8_MEMBER( pet2001b_state::pia1_pb_r )
781{
782   UINT8 data = 0xff;
783
784   switch (m_key)
785   {
786   case 0: data &= m_row0->read(); break;
787   case 1: data &= m_row1->read(); break;
788   case 2: data &= m_row2->read(); break;
789   case 3: data &= m_row3->read(); break;
790   case 4: data &= m_row4->read(); break;
791   case 5: data &= m_row5->read(); break;
792   case 6: data &= m_row6->read() & m_lock->read(); break;
793   case 7: data &= m_row7->read(); break;
794   case 8: data &= m_row8->read(); break;
795   case 9: data &= m_row9->read(); break;
796   }
797
798   return data;
799}
800
801READ_LINE_MEMBER( pet_state::pia1_cb1_r )
802{
803   return (m_crtc ? m_crtc->vsync_r() : m_sync);
804}
805
806WRITE_LINE_MEMBER( pet_state::pia1_ca2_w )
807{
808   m_ieee->eoi_w(state);
809
810   m_blanktv = state;
811}
812
813const pia6821_interface pia1_intf =
814{
815   DEVCB_DRIVER_MEMBER(pet_state, pia1_pa_r),
816   DEVCB_DRIVER_MEMBER(pet_state, pia1_pb_r),
817   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT_TAG, pet_datassette_port_device, read),
818   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_cb1_r),
819   DEVCB_NULL,
820   DEVCB_NULL,
821   DEVCB_DRIVER_MEMBER(pet_state, pia1_pa_w),
822   DEVCB_NULL,
823   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_ca2_w),
824   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT_TAG, pet_datassette_port_device, motor_w),
825   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_irqa_w),
826   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_irqb_w)
827};
828
829const pia6821_interface pet2001b_pia1_intf =
830{
831   DEVCB_DRIVER_MEMBER(pet_state, pia1_pa_r),
832   DEVCB_DRIVER_MEMBER(pet2001b_state, pia1_pb_r),
833   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT_TAG, pet_datassette_port_device, read),
834   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_cb1_r),
835   DEVCB_NULL,
836   DEVCB_NULL,
837   DEVCB_DRIVER_MEMBER(pet_state, pia1_pa_w),
838   DEVCB_NULL,
839   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_ca2_w),
840   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT_TAG, pet_datassette_port_device, motor_w),
841   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_irqa_w),
842   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_irqb_w)
843};
844
845
846//-------------------------------------------------
847//  pia6821_interface pia2_intf
848//-------------------------------------------------
849
850WRITE_LINE_MEMBER( pet_state::pia2_irqa_w )
851{
852   m_pia2a_irq = state;
853
854   check_interrupts();
855}
856
857WRITE_LINE_MEMBER( pet_state::pia2_irqb_w )
858{
859   m_pia2b_irq = state;
860
861   check_interrupts();
862}
863
864const pia6821_interface pia2_intf =
865{
866   DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_r),
867   DEVCB_NULL,
868   DEVCB_DEVICE_LINE_MEMBER(IEEE488_TAG, ieee488_device, atn_r),
869   DEVCB_DEVICE_LINE_MEMBER(IEEE488_TAG, ieee488_device, srq_r),
870   DEVCB_NULL,
871   DEVCB_NULL,
872   DEVCB_NULL,
873   DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_w),
874   DEVCB_DEVICE_LINE_MEMBER(IEEE488_TAG, ieee488_device, ndac_w),
875   DEVCB_DEVICE_LINE_MEMBER(IEEE488_TAG, ieee488_device, dav_w),
876   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia2_irqa_w),
877   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia2_irqb_w)
878};
879
880
881//-------------------------------------------------
882//  PET_USER_PORT_INTERFACE( user_intf )
883//-------------------------------------------------
884
885static PET_USER_PORT_INTERFACE( user_intf )
886{
887   DEVCB_DEVICE_LINE_MEMBER(M6522_TAG, via6522_device, write_ca1),
888   DEVCB_DEVICE_LINE_MEMBER(M6522_TAG, via6522_device, write_cb2)
889};
890
891
892
893//**************************************************************************
894//  VIDEO
895//**************************************************************************
896
897//-------------------------------------------------
898//  TIMER_DEVICE_CALLBACK( sync_tick )
899//-------------------------------------------------
900
901TIMER_DEVICE_CALLBACK_MEMBER( pet_state::sync_tick )
902{
903   m_sync = !m_sync;
904
905   m_pia1->cb1_w(m_sync);
906}
907
908
909//-------------------------------------------------
910//  SCREEN_UPDATE( pet2001 )
911//-------------------------------------------------
912
913UINT32 pet_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
914{
915   for (int y = 0; y < 200; y++)
916   {
917      for (int sx = 0; sx < 40; sx++)
918      {
919         int sy = y / 8;
920         offs_t video_addr = (sy * 40) + sx;
921         UINT8 lsd = m_video_ram[video_addr];
922
923         int ra = y & 0x07;
924         offs_t char_addr = (m_graphic << 10) | ((lsd & 0x7f) << 3) | ra;
925         UINT8 data = m_char_rom->base()[char_addr];
926
927         for (int x = 0; x < 8; x++, data <<= 1)
928         {
929            int color = (BIT(data, 7) ^ BIT(lsd, 7)) && m_blanktv;
930            bitmap.pix32(y, (sx * 8) + x) = RGB_MONOCHROME_GREEN[color];
931         }
932      }
933   }
934
935   return 0;
936}
937
938
939//-------------------------------------------------
940//  MC6845_INTERFACE( crtc_intf )
941//-------------------------------------------------
942
943static MC6845_UPDATE_ROW( pet80_update_row )
944{
945   pet80_state *state = device->machine().driver_data<pet80_state>();
946   int x = 0;
947   int char_rom_mask = state->m_char_rom->bytes() - 1;
948
949   for (int column = 0; column < x_count; column++)
950   {
951      UINT8 lsd = 0, data = 0;
952      UINT8 rra = ra & 0x07;
953      int no_row = !(BIT(ra, 3) || BIT(ra, 4));
954      int invert = BIT(ma, 12);
955      int chr_option = BIT(ma, 13);
956
957      // even character
958
959      lsd = state->m_video_ram[((ma + column) << 1) & 0x7ff];
960
961      offs_t char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra;
962      data = state->m_char_rom->base()[char_addr & char_rom_mask];
963
964      for (int bit = 0; bit < 8; bit++, data <<= 1)
965      {
966         int video = !((BIT(data, 7) ^ BIT(lsd, 7)) && no_row) ^ invert;
967         bitmap.pix32(y, x++) = RGB_MONOCHROME_GREEN[video];
968      }
969
970      // odd character
971
972      lsd = state->m_video_ram[(((ma + column) << 1) + 1) & 0x7ff];
973
974      char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra;
975      data = state->m_char_rom->base()[char_addr & char_rom_mask];
976
977      for (int bit = 0; bit < 8; bit++, data <<= 1)
978      {
979         int video = !((BIT(data, 7) ^ BIT(lsd, 7)) && no_row) ^ invert;
980         bitmap.pix32(y, x++) = RGB_MONOCHROME_GREEN[video];
981      }
982   }
983}
984
985static MC6845_INTERFACE( crtc_intf )
986{
987   SCREEN_TAG,
988   false,
989   2*8,
990   NULL,
991   pet80_update_row,
992   NULL,
993   DEVCB_NULL,
994   DEVCB_NULL,
995   DEVCB_NULL,
996   DEVCB_DEVICE_LINE_MEMBER(M6520_1_TAG, pia6821_device, cb1_w),
997   NULL
998};
999
1000
1001
1002//**************************************************************************
1003//  MACHINE INITIALIZATION
1004//**************************************************************************
1005
1006//-------------------------------------------------
1007//  MACHINE_START( pet )
1008//-------------------------------------------------
1009
1010MACHINE_START_MEMBER( pet_state, pet )
1011{
1012   // allocate memory
1013   m_video_ram.allocate(m_video_ram_size);
1014
1015   // initialize memory
1016   UINT8 data = 0xff;
1017
1018   for (offs_t offset = 0; offset < m_ram->size(); offset++)
1019   {
1020      m_ram->pointer()[offset] = data;
1021      if (!(offset % 64)) data ^= 0xff;
1022   }
1023
1024   data = 0xff;
1025
1026   for (offs_t offset = 0; offset < m_video_ram_size; offset++)
1027   {
1028      m_video_ram[offset] = data;
1029      if (!(offset % 64)) data ^= 0xff;
1030   }
1031
1032   // state saving
1033   save_item(NAME(m_key));
1034   save_item(NAME(m_sync));
1035   save_item(NAME(m_graphic));
1036   save_item(NAME(m_blanktv));
1037   save_item(NAME(m_via_irq));
1038   save_item(NAME(m_pia1a_irq));
1039   save_item(NAME(m_pia1b_irq));
1040   save_item(NAME(m_pia2a_irq));
1041   save_item(NAME(m_pia2b_irq));
1042   save_item(NAME(m_exp_irq));
1043}
1044
1045
1046//-------------------------------------------------
1047//  MACHINE_START( pet2001 )
1048//-------------------------------------------------
1049
1050MACHINE_START_MEMBER( pet_state, pet2001 )
1051{
1052   m_video_ram_size = 0x400;
1053
1054   MACHINE_START_CALL_MEMBER(pet);
1055}
1056
1057
1058//-------------------------------------------------
1059//  MACHINE_RESET( pet )
1060//-------------------------------------------------
1061
1062MACHINE_RESET_MEMBER( pet_state, pet )
1063{
1064   m_maincpu->reset();
1065
1066   m_via->reset();
1067   m_pia1->reset();
1068   m_pia2->reset();
1069
1070   m_exp->reset();
1071}
1072
1073
1074//-------------------------------------------------
1075//  MACHINE_START( pet80 )
1076//-------------------------------------------------
1077
1078MACHINE_START_MEMBER( pet80_state, pet80 )
1079{
1080   m_video_ram_size = 0x800;
1081
1082   MACHINE_START_CALL_MEMBER(pet);
1083}
1084
1085
1086//-------------------------------------------------
1087//  MACHINE_RESET( pet80 )
1088//-------------------------------------------------
1089
1090MACHINE_RESET_MEMBER( pet80_state, pet80 )
1091{
1092   MACHINE_RESET_CALL_MEMBER(pet);
1093
1094   m_crtc->reset();
1095}
1096
1097
1098
1099//**************************************************************************
1100//  MACHINE DRIVERS
1101//**************************************************************************
1102
1103//-------------------------------------------------
1104//  MACHINE_CONFIG( 4k )
1105//-------------------------------------------------
1106
1107static MACHINE_CONFIG_FRAGMENT( 4k )
1108   MCFG_RAM_ADD(RAM_TAG)
1109   MCFG_RAM_DEFAULT_SIZE("4K")
1110   MCFG_RAM_EXTRA_OPTIONS("8K, 16K,32K")
1111MACHINE_CONFIG_END
1112
1113
1114//-------------------------------------------------
1115//  MACHINE_CONFIG( 8k )
1116//-------------------------------------------------
1117
1118static MACHINE_CONFIG_FRAGMENT( 8k )
1119   MCFG_RAM_ADD(RAM_TAG)
1120   MCFG_RAM_DEFAULT_SIZE("8K")
1121   MCFG_RAM_EXTRA_OPTIONS("16K,32K")
1122MACHINE_CONFIG_END
1123
1124
1125//-------------------------------------------------
1126//  MACHINE_CONFIG( 8k )
1127//-------------------------------------------------
1128
1129static MACHINE_CONFIG_FRAGMENT( 16k )
1130   MCFG_RAM_ADD(RAM_TAG)
1131   MCFG_RAM_DEFAULT_SIZE("16K")
1132   MCFG_RAM_EXTRA_OPTIONS("32K")
1133MACHINE_CONFIG_END
1134
1135
1136//-------------------------------------------------
1137//  MACHINE_CONFIG( 8k )
1138//-------------------------------------------------
1139
1140static MACHINE_CONFIG_FRAGMENT( 32k )
1141   MCFG_RAM_ADD(RAM_TAG)
1142   MCFG_RAM_DEFAULT_SIZE("32K")
1143MACHINE_CONFIG_END
1144
1145
1146//-------------------------------------------------
1147//  MACHINE_CONFIG( pet )
1148//-------------------------------------------------
1149
1150static MACHINE_CONFIG_START( pet, pet_state )
1151   MCFG_MACHINE_START_OVERRIDE(pet_state, pet2001)
1152   MCFG_MACHINE_RESET_OVERRIDE(pet_state, pet)
1153
1154   // basic machine hardware
1155   MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_8MHz/8)
1156   MCFG_CPU_PROGRAM_MAP(pet2001_mem)
1157
1158   // video hardware
1159   MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
1160   MCFG_SCREEN_REFRESH_RATE(60)
1161   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
1162   MCFG_SCREEN_SIZE(320, 200)
1163   MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1)
1164   MCFG_SCREEN_UPDATE_DRIVER(pet_state, screen_update)
1165   MCFG_TIMER_DRIVER_ADD_PERIODIC("sync_timer", pet_state, sync_tick, attotime::from_hz(120))
1166
1167   // devices
1168   MCFG_VIA6522_ADD(M6522_TAG, XTAL_8MHz/8, via_intf)
1169   MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf)
1170   MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf)
1171   MCFG_CBM_IEEE488_ADD("c4040")
1172   MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, cb1_w))
1173   MCFG_IEEE488_ATN_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, ca1_w))
1174   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n", NULL, DEVWRITELINE(M6520_1_TAG, pia6821_device, ca1_w))
1175   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
1176   MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_8MHz/8, pet_expansion_cards, NULL, NULL)
1177   MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
1178   MCFG_PET_USER_PORT_ADD(PET_USER_PORT_TAG, user_intf, pet_user_port_cards, NULL, NULL)
1179   MCFG_QUICKLOAD_ADD("quickload", cbm_pet, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
1180
1181   // software lists
1182   MCFG_SOFTWARE_LIST_ADD("cass_list", "pet_cass")
1183   MCFG_SOFTWARE_LIST_ADD("flop_list", "pet_flop")
1184MACHINE_CONFIG_END
1185
1186
1187//-------------------------------------------------
1188//  MACHINE_CONFIG( pet2001 )
1189//-------------------------------------------------
1190
1191static MACHINE_CONFIG_DERIVED( pet2001, pet )
1192   MCFG_FRAGMENT_ADD(4k)
1193MACHINE_CONFIG_END
1194
1195
1196//-------------------------------------------------
1197//  MACHINE_CONFIG( pet20018 )
1198//-------------------------------------------------
1199
1200static MACHINE_CONFIG_DERIVED( pet20018, pet )
1201   MCFG_FRAGMENT_ADD(8k)
1202MACHINE_CONFIG_END
1203
1204
1205//-------------------------------------------------
1206//  MACHINE_CONFIG( pet2001n )
1207//-------------------------------------------------
1208
1209static MACHINE_CONFIG_DERIVED( pet2001n, pet )
1210   MCFG_CARTSLOT_ADD("9000")
1211   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
1212   MCFG_CARTSLOT_INTERFACE("pet_9000_rom")
1213
1214   MCFG_CARTSLOT_ADD("a000")
1215   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
1216   MCFG_CARTSLOT_INTERFACE("pet_a000_rom")
1217
1218   MCFG_CARTSLOT_ADD("b000")
1219   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
1220   MCFG_CARTSLOT_INTERFACE("pet_b000_rom")
1221
1222   MCFG_SOFTWARE_LIST_ADD("rom_list", "pet_rom")
1223MACHINE_CONFIG_END
1224
1225
1226//-------------------------------------------------
1227//  MACHINE_CONFIG( pet2001n8 )
1228//-------------------------------------------------
1229
1230static MACHINE_CONFIG_DERIVED( pet2001n8, pet2001n )
1231   MCFG_FRAGMENT_ADD(8k)
1232MACHINE_CONFIG_END
1233
1234
1235//-------------------------------------------------
1236//  MACHINE_CONFIG( pet2001n16 )
1237//-------------------------------------------------
1238
1239static MACHINE_CONFIG_DERIVED( pet2001n16, pet2001n )
1240   MCFG_FRAGMENT_ADD(16k)
1241MACHINE_CONFIG_END
1242
1243
1244//-------------------------------------------------
1245//  MACHINE_CONFIG( pet2001n32 )
1246//-------------------------------------------------
1247
1248static MACHINE_CONFIG_DERIVED( pet2001n32, pet2001n )
1249   MCFG_FRAGMENT_ADD(32k)
1250MACHINE_CONFIG_END
1251
1252
1253//-------------------------------------------------
1254//  MACHINE_CONFIG( cbm3008 )
1255//-------------------------------------------------
1256
1257static MACHINE_CONFIG_DERIVED( cbm3008, pet2001n )
1258   MCFG_FRAGMENT_ADD(8k)
1259MACHINE_CONFIG_END
1260
1261
1262//-------------------------------------------------
1263//  MACHINE_CONFIG( cbm3016 )
1264//-------------------------------------------------
1265
1266static MACHINE_CONFIG_DERIVED( cbm3016, pet2001n )
1267   MCFG_FRAGMENT_ADD(16k)
1268MACHINE_CONFIG_END
1269
1270
1271//-------------------------------------------------
1272//  MACHINE_CONFIG( cbm3032 )
1273//-------------------------------------------------
1274
1275static MACHINE_CONFIG_DERIVED( cbm3032, pet2001n )
1276   MCFG_FRAGMENT_ADD(32k)
1277MACHINE_CONFIG_END
1278
1279
1280//-------------------------------------------------
1281//  MACHINE_CONFIG( pet2001b )
1282//-------------------------------------------------
1283
1284static MACHINE_CONFIG_DERIVED_CLASS( pet2001b, pet2001n, pet2001b_state )
1285   MCFG_DEVICE_REMOVE(M6520_1_TAG)
1286   MCFG_PIA6821_ADD(M6520_1_TAG, pet2001b_pia1_intf)
1287MACHINE_CONFIG_END
1288
1289
1290//-------------------------------------------------
1291//  MACHINE_CONFIG( pet2001b8 )
1292//-------------------------------------------------
1293
1294static MACHINE_CONFIG_DERIVED( pet2001b8, pet2001b )
1295   MCFG_FRAGMENT_ADD(8k)
1296MACHINE_CONFIG_END
1297
1298
1299//-------------------------------------------------
1300//  MACHINE_CONFIG( pet2001b16 )
1301//-------------------------------------------------
1302
1303static MACHINE_CONFIG_DERIVED( pet2001b16, pet2001b )
1304   MCFG_FRAGMENT_ADD(16k)
1305MACHINE_CONFIG_END
1306
1307
1308//-------------------------------------------------
1309//  MACHINE_CONFIG( pet2001b32 )
1310//-------------------------------------------------
1311
1312static MACHINE_CONFIG_DERIVED( pet2001b32, pet2001b )
1313   MCFG_FRAGMENT_ADD(32k)
1314MACHINE_CONFIG_END
1315
1316
1317//-------------------------------------------------
1318//  MACHINE_CONFIG( cbm3032b )
1319//-------------------------------------------------
1320
1321static MACHINE_CONFIG_DERIVED( cbm3032b, pet2001b )
1322   MCFG_FRAGMENT_ADD(32k)
1323MACHINE_CONFIG_END
1324
1325
1326//-------------------------------------------------
1327//  MACHINE_CONFIG( pet4000 )
1328//-------------------------------------------------
1329
1330static MACHINE_CONFIG_DERIVED( pet4000, pet2001n )
1331   MCFG_DEVICE_REMOVE("b000")
1332MACHINE_CONFIG_END
1333
1334
1335//-------------------------------------------------
1336//  MACHINE_CONFIG( pet4016 )
1337//-------------------------------------------------
1338
1339static MACHINE_CONFIG_DERIVED( pet4016, pet4000 )
1340   // RAM not upgradeable
1341   MCFG_RAM_ADD(RAM_TAG)
1342   MCFG_RAM_DEFAULT_SIZE("16K")
1343MACHINE_CONFIG_END
1344
1345
1346//-------------------------------------------------
1347//  MACHINE_CONFIG( pet4032 )
1348//-------------------------------------------------
1349
1350static MACHINE_CONFIG_DERIVED( pet4032, pet4000 )
1351   MCFG_FRAGMENT_ADD(32k)
1352MACHINE_CONFIG_END
1353
1354
1355//-------------------------------------------------
1356//  MACHINE_CONFIG( cbm4000 )
1357//-------------------------------------------------
1358
1359static MACHINE_CONFIG_DERIVED( cbm4000, pet2001n )
1360   MCFG_DEVICE_REMOVE("b000")
1361MACHINE_CONFIG_END
1362
1363
1364//-------------------------------------------------
1365//  MACHINE_CONFIG( cbm4016 )
1366//-------------------------------------------------
1367
1368static MACHINE_CONFIG_DERIVED( cbm4016, cbm4000 )
1369   // RAM not upgradeable
1370   MCFG_RAM_ADD(RAM_TAG)
1371   MCFG_RAM_DEFAULT_SIZE("16K")
1372MACHINE_CONFIG_END
1373
1374
1375//-------------------------------------------------
1376//  MACHINE_CONFIG( cbm4032 )
1377//-------------------------------------------------
1378
1379static MACHINE_CONFIG_DERIVED( cbm4032, cbm4000 )
1380   MCFG_FRAGMENT_ADD(32k)
1381MACHINE_CONFIG_END
1382
1383
1384//-------------------------------------------------
1385//  MACHINE_CONFIG( pet4000b )
1386//-------------------------------------------------
1387
1388static MACHINE_CONFIG_DERIVED( pet4000b, pet2001b )
1389   MCFG_DEVICE_REMOVE("b000")
1390MACHINE_CONFIG_END
1391
1392
1393//-------------------------------------------------
1394//  MACHINE_CONFIG( pet4032b )
1395//-------------------------------------------------
1396
1397static MACHINE_CONFIG_DERIVED( pet4032b, pet4000b )
1398   MCFG_FRAGMENT_ADD(32k)
1399MACHINE_CONFIG_END
1400
1401
1402//-------------------------------------------------
1403//  MACHINE_CONFIG( cbm4000b )
1404//-------------------------------------------------
1405
1406static MACHINE_CONFIG_DERIVED( cbm4000b, pet2001b )
1407   MCFG_DEVICE_REMOVE("b000")
1408MACHINE_CONFIG_END
1409
1410
1411//-------------------------------------------------
1412//  MACHINE_CONFIG( cbm4032b )
1413//-------------------------------------------------
1414
1415static MACHINE_CONFIG_DERIVED( cbm4032b, cbm4000b )
1416   MCFG_FRAGMENT_ADD(32k)
1417MACHINE_CONFIG_END
1418
1419
1420//-------------------------------------------------
1421//  MACHINE_CONFIG( pet80 )
1422//-------------------------------------------------
1423
1424static MACHINE_CONFIG_START( pet80, pet80_state )
1425   MCFG_MACHINE_START_OVERRIDE(pet80_state, pet80)
1426   MCFG_MACHINE_RESET_OVERRIDE(pet80_state, pet80)
1427
1428   // basic machine hardware
1429   MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/16)
1430   MCFG_CPU_PROGRAM_MAP(pet2001_mem)
1431
1432   // video hardware
1433   MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
1434   MCFG_SCREEN_REFRESH_RATE(60)
1435   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
1436   MCFG_SCREEN_SIZE(640, 250)
1437   MCFG_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 250 - 1)
1438   MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
1439   MCFG_MC6845_ADD(MC6845_TAG, MC6845, XTAL_16MHz/16, crtc_intf)
1440
1441   // sound hardware
1442   MCFG_SPEAKER_STANDARD_MONO("mono")
1443   MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0)
1444   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1445
1446   // devices
1447   MCFG_VIA6522_ADD(M6522_TAG, XTAL_16MHz/16, via_intf)
1448   MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf)
1449   MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf)
1450   MCFG_CBM_IEEE488_ADD("c8050")
1451   MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, cb1_w))
1452   MCFG_IEEE488_ATN_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, ca1_w))
1453   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n", NULL, DEVWRITELINE(M6520_1_TAG, pia6821_device, ca1_w))
1454   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
1455   MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, NULL, NULL)
1456   MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
1457   MCFG_PET_USER_PORT_ADD(PET_USER_PORT_TAG, user_intf, pet_user_port_cards, NULL, NULL)
1458   MCFG_QUICKLOAD_ADD("quickload", cbm_pet, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
1459
1460   // software lists
1461   MCFG_SOFTWARE_LIST_ADD("cass_list", "pet_cass")
1462   MCFG_SOFTWARE_LIST_ADD("flop_list", "pet_flop")
1463MACHINE_CONFIG_END
1464
1465
1466//-------------------------------------------------
1467//  MACHINE_CONFIG( pet8032 )
1468//-------------------------------------------------
1469
1470static MACHINE_CONFIG_DERIVED( pet8032, pet80 )
1471   MCFG_FRAGMENT_ADD(32k)
1472MACHINE_CONFIG_END
1473
1474
1475//-------------------------------------------------
1476//  MACHINE_CONFIG( superpet )
1477//-------------------------------------------------
1478
1479static MACHINE_CONFIG_DERIVED_CLASS( superpet, pet8032, superpet_state )
1480   MCFG_DEVICE_REMOVE(PET_EXPANSION_SLOT_TAG)
1481   MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, "superpet", NULL)
1482   MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
1483
1484   MCFG_SOFTWARE_LIST_ADD("flop_list2", "superpet_flop")
1485MACHINE_CONFIG_END
1486
1487
1488//-------------------------------------------------
1489//  MACHINE_CONFIG( cbm8096 )
1490//-------------------------------------------------
1491
1492static MACHINE_CONFIG_DERIVED_CLASS( cbm8096, pet80, cbm8096_state )
1493   MCFG_RAM_ADD(RAM_TAG)
1494   MCFG_RAM_DEFAULT_SIZE("96K")
1495
1496   MCFG_SOFTWARE_LIST_ADD("flop_list2", "cbm8096_flop")
1497MACHINE_CONFIG_END
1498
1499
1500//-------------------------------------------------
1501//  MACHINE_CONFIG( cbm8296 )
1502//-------------------------------------------------
1503
1504static MACHINE_CONFIG_DERIVED_CLASS( cbm8296, pet80, cbm8296_state )
1505   MCFG_RAM_ADD(RAM_TAG)
1506   MCFG_RAM_DEFAULT_SIZE("128K")
1507
1508   MCFG_SOFTWARE_LIST_ADD("flop_list2", "cbm8296_flop")
1509MACHINE_CONFIG_END
1510
1511
1512//-------------------------------------------------
1513//  MACHINE_CONFIG( cbm8296d )
1514//-------------------------------------------------
1515
1516static MACHINE_CONFIG_DERIVED( cbm8296d, cbm8296 )
1517MACHINE_CONFIG_END
1518
1519
1520
1521//**************************************************************************
1522//  ROMS
1523//**************************************************************************
1524
1525//-------------------------------------------------
1526//  ROM( pet2001 )
1527//-------------------------------------------------
1528
1529ROM_START( pet2001 )
1530   ROM_REGION( 0x7000, M6502_TAG, 0 )
1531   ROM_DEFAULT_BIOS( "basic1r" )
1532   ROM_SYSTEM_BIOS( 0, "basic1o", "Original" )
1533   ROMX_LOAD( "901447-01.h1", 0x3000, 0x0800, CRC(a055e33a) SHA1(831db40324113ee996c434d38b4add3fd1f820bd), ROM_BIOS(1) )
1534   ROM_SYSTEM_BIOS( 1, "basic1r", "Revised" )
1535   ROMX_LOAD( "901447-09.h1", 0x3000, 0x0800, CRC(03cf16d0) SHA1(1330580c0614d3556a389da4649488ba04a60908), ROM_BIOS(2) )
1536   ROM_LOAD( "901447-02.h5", 0x3800, 0x0800, CRC(69fd8a8f) SHA1(70c0f4fa67a70995b168668c957c3fcf2c8641bd) )
1537   ROM_LOAD( "901447-03.h2", 0x4000, 0x0800, CRC(d349f2d4) SHA1(4bf2c20c51a63d213886957485ebef336bb803d0) )
1538   ROM_LOAD( "901447-04.h6", 0x4800, 0x0800, CRC(850544eb) SHA1(d293972d529023d8fd1f493149e4777b5c253a69) )
1539   ROM_LOAD( "901447-05.h3", 0x5000, 0x0800, CRC(9e1c5cea) SHA1(f02f5fb492ba93dbbd390f24c10f7a832dec432a) )
1540   ROM_LOAD( "901447-06.h4", 0x6000, 0x0800, CRC(661a814a) SHA1(960717282878e7de893d87242ddf9d1512be162e) )
1541   ROM_LOAD( "901447-07.h7", 0x6800, 0x0800, CRC(c4f47ad1) SHA1(d440f2510bc52e20c3d6bc8b9ded9cea7f462a9c) )
1542
1543   ROM_REGION( 0x800, "charom", 0 )
1544   ROM_LOAD( "901447-08.a2", 0x000, 0x800, CRC(54f32f45) SHA1(3e067cc621e4beafca2b90cb8f6dba975df2855b) )
1545ROM_END
1546
1547#define rom_pet20018 rom_pet2001
1548
1549
1550//-------------------------------------------------
1551//  ROM( pet2001n )
1552//-------------------------------------------------
1553
1554ROM_START( pet2001n )
1555   ROM_REGION( 0x7000, M6502_TAG, 0 )
1556   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1557   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1558   ROM_CART_LOAD( "b000", 0x2000, 0x1000, ROM_MIRROR )
1559   ROM_LOAD( "901465-01.ud6", 0x3000, 0x1000, CRC(63a7fe4a) SHA1(3622111f486d0e137022523657394befa92bde44) )   // BASIC 2
1560   ROM_LOAD( "901465-02.ud7", 0x4000, 0x1000, CRC(ae4cb035) SHA1(1bc0ebf27c9bb62ad71bca40313e874234cab6ac) )   // BASIC 2
1561   ROM_LOAD( "901447-24.ud8", 0x5000, 0x0800, CRC(e459ab32) SHA1(5e5502ce32f5a7e387d65efe058916282041e54b) )   // Screen Editor (40 columns, no CRTC, Normal Keyb)
1562   ROM_LOAD( "901465-03.ud9", 0x6000, 0x1000, CRC(f02238e2) SHA1(38742bdf449f629bcba6276ef24d3daeb7da6e84) )   // Kernal
1563
1564   ROM_REGION( 0x800, "charom", 0 )
1565   ROM_LOAD( "901447-10.uf10", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )   // Character Generator
1566ROM_END
1567
1568#define rom_pet2001n16 rom_pet2001n
1569#define rom_pet2001n32 rom_pet2001n
1570#define rom_cbm3008 rom_pet2001n
1571#define rom_cbm3016 rom_pet2001n
1572#define rom_cbm3032 rom_pet2001n
1573
1574
1575//-------------------------------------------------
1576//  ROM( pet2001b )
1577//-------------------------------------------------
1578
1579ROM_START( pet2001b )
1580   ROM_REGION( 0x7000, M6502_TAG, 0 )
1581   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1582   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1583   ROM_CART_LOAD( "b000", 0x2000, 0x1000, ROM_MIRROR )
1584   ROM_LOAD( "901465-01.ud6", 0x3000, 0x1000, CRC(63a7fe4a) SHA1(3622111f486d0e137022523657394befa92bde44) )   // BASIC 2
1585   ROM_LOAD( "901465-02.ud7", 0x4000, 0x1000, CRC(ae4cb035) SHA1(1bc0ebf27c9bb62ad71bca40313e874234cab6ac) )   // BASIC 2
1586   ROM_LOAD( "901474-01.ud8", 0x5000, 0x0800, CRC(05db957e) SHA1(174ace3a8c0348cd21d39cc864e2adc58b0101a9) )   // Screen Editor (40 columns, no CRTC, Business Keyb)
1587   ROM_LOAD( "901465-03.ud9", 0x6000, 0x1000, CRC(f02238e2) SHA1(38742bdf449f629bcba6276ef24d3daeb7da6e84) )   // Kernal
1588
1589   ROM_REGION( 0x800, "charom", 0 )
1590   ROM_LOAD( "901447-10.uf10", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )   // Character Generator
1591ROM_END
1592
1593#define rom_pet2001b16 rom_pet2001b
1594#define rom_pet2001b32 rom_pet2001b
1595#define rom_cbm3032b rom_pet2001b
1596
1597
1598//-------------------------------------------------
1599//  ROM( pet4016 )
1600//-------------------------------------------------
1601
1602ROM_START( pet4016 )
1603   ROM_REGION( 0x7000, M6502_TAG, 0 )
1604   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1605   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1606   ROM_DEFAULT_BIOS( "basic4r" )
1607   ROM_SYSTEM_BIOS( 0, "basic4", "Original" )
1608   ROMX_LOAD( "901465-19.ud5", 0x2000, 0x1000, CRC(3a5f5721) SHA1(bc2b7c99495fea3eda950ee9e3d6cabe448a452b), ROM_BIOS(1) )
1609   ROM_SYSTEM_BIOS( 1, "basic4r", "Revised" )
1610   ROMX_LOAD( "901465-23.ud5", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc), ROM_BIOS(2) ) // BASIC 4
1611   ROM_LOAD( "901465-20.ud6", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1612   ROM_LOAD( "901465-21.ud7", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1613   ROM_LOAD( "901499-01.ud7", 0x5000, 0x0800, CRC(5f85bdf8) SHA1(8cbf086c1ce4dfb2a2fe24c47476dfb878493dee) )   // Screen Editor (40 columns, CRTC 60Hz, Normal Keyb?)
1614   ROM_LOAD( "901447-29.ud8", 0x5000, 0x0800, CRC(e5714d4c) SHA1(e88f56e5c54b0e8d8d4e8cb39a4647c803c1f51c) )   // Screen Editor (40 columns, no CRTC, Normal Keyb)
1615   ROM_LOAD( "901465-22.ud9", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1616
1617   ROM_REGION( 0x800, "charom", 0 )
1618   ROM_LOAD( "901447-10.uf10", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )   // Character Generator
1619ROM_END
1620
1621#define rom_pet4032 rom_pet4016
1622
1623
1624//-------------------------------------------------
1625//  ROM( cbm4016 )
1626//-------------------------------------------------
1627
1628ROM_START( cbm4016 )
1629   ROM_REGION( 0x7000, M6502_TAG, 0 )
1630   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1631   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1632   ROM_DEFAULT_BIOS( "basic4r" )
1633   ROM_SYSTEM_BIOS( 0, "basic4", "Original" )
1634   ROMX_LOAD( "901465-19.ud5", 0x2000, 0x1000, CRC(3a5f5721) SHA1(bc2b7c99495fea3eda950ee9e3d6cabe448a452b), ROM_BIOS(1) )
1635   ROM_SYSTEM_BIOS( 1, "basic4r", "Revised" )
1636   ROMX_LOAD( "901465-23.ud5", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc), ROM_BIOS(2) ) // BASIC 4
1637   ROM_LOAD( "901465-20.ud6", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1638   ROM_LOAD( "901465-21.ud7", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1639   ROM_LOAD( "901498-01.ud7", 0x5000, 0x0800, CRC(3370e359) SHA1(05af284c914d53a52987b5f602466de75765f650) )   // Screen Editor (40 columns, CRTC 50Hz, Normal Keyb?)
1640   ROM_LOAD( "901447-29.ud8", 0x5000, 0x0800, CRC(e5714d4c) SHA1(e88f56e5c54b0e8d8d4e8cb39a4647c803c1f51c) )   // Screen Editor (40 columns, no CRTC, Normal Keyb)
1641   ROM_LOAD( "901465-22.ud9", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1642
1643   ROM_REGION( 0x800, "charom", 0 )
1644   ROM_LOAD( "901447-10.uf10", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )   // Character Generator
1645ROM_END
1646
1647#define rom_cbm4032 rom_cbm4016
1648
1649
1650//-------------------------------------------------
1651//  ROM( pet4032b )
1652//-------------------------------------------------
1653
1654ROM_START( pet4032b )
1655   ROM_REGION( 0x7000, M6502_TAG, 0 )
1656   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1657   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1658   ROM_DEFAULT_BIOS( "basic4r" )
1659   ROM_SYSTEM_BIOS( 0, "basic4", "Original" )
1660   ROMX_LOAD( "901465-19.ud5", 0x2000, 0x1000, CRC(3a5f5721) SHA1(bc2b7c99495fea3eda950ee9e3d6cabe448a452b), ROM_BIOS(1) )
1661   ROM_SYSTEM_BIOS( 1, "basic4r", "Revised" )
1662   ROMX_LOAD( "901465-23.ud5", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc), ROM_BIOS(2) ) // BASIC 4
1663   ROM_LOAD( "901465-20.ud6", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1664   ROM_LOAD( "901465-21.ud7", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1665   ROM_LOAD( "901474-02.ud8", 0x5000, 0x0800, CRC(75ff4af7) SHA1(0ca5c4e8f532f914cb0bf86ea9900f20f0a655ce) )   // Screen Editor (40 columns, no CRTC, Business Keyb)
1666   ROM_LOAD( "901465-22.ud9", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1667
1668   ROM_REGION( 0x800, "charom", 0 )
1669   ROM_LOAD( "901447-10.uf10", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )   // Character Generator
1670ROM_END
1671
1672#define rom_cbm4032b rom_pet4032b
1673
1674
1675//-------------------------------------------------
1676//  ROM( pet8032 )
1677//-------------------------------------------------
1678
1679ROM_START( pet8032 )
1680   ROM_REGION( 0x7000, M6502_TAG, 0 )
1681   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1682   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1683   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1684   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1685   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1686   ROM_LOAD( "901474-03.ud7", 0x5000, 0x0800, CRC(5674dd5e) SHA1(c605fa343fd77c73cbe1e0e9567e2f014f6e7e30) )   // Screen Editor (80 columns, CRTC 60Hz, Business Keyb)
1687   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1688
1689   ROM_REGION( 0x800, "charom", 0 )
1690   ROM_LOAD( "901447-10.ua3", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )    // Character Generator
1691ROM_END
1692
1693
1694//-------------------------------------------------
1695//  ROM( cbm8032 )
1696//-------------------------------------------------
1697
1698ROM_START( cbm8032 )
1699   ROM_REGION( 0x7000, M6502_TAG, 0 )
1700   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1701   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1702   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1703   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1704   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1705   ROM_LOAD( "901474-04.ud7", 0x5000, 0x0800, CRC(abb000e7) SHA1(66887061b6c4ebef7d6efb90af9afd5e2c3b08ba) )   // Screen Editor (80 columns, CRTC 50Hz, Business Keyb)
1706   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1707
1708   ROM_REGION( 0x800, "charom", 0 )
1709   ROM_LOAD( "901447-10.ua3", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )    // Character Generator
1710ROM_END
1711
1712#define rom_cbm8096 rom_cbm8032
1713
1714
1715//-------------------------------------------------
1716//  ROM( cbm8032_de )
1717//-------------------------------------------------
1718
1719ROM_START( cbm8032_de )
1720   ROM_REGION( 0x7000, M6502_TAG, 0 )
1721   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1722   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1723   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1724   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1725   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1726   ROM_LOAD( "german.bin",    0x5000, 0x0800, CRC(1c1e597d) SHA1(7ac75ed73832847623c9f4f197fe7fb1a73bb41c) )
1727   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1728
1729   ROM_REGION( 0x800, "charom", 0 )
1730   ROM_LOAD( "chargen.de", 0x0000, 0x800, CRC(3bb8cb87) SHA1(a4f0df13473d7f9cd31fd62cfcab11318e2fb1dc) )
1731ROM_END
1732
1733
1734//-------------------------------------------------
1735//  ROM( cbm8032_se )
1736//-------------------------------------------------
1737
1738ROM_START( cbm8032_se )
1739   ROM_REGION( 0x7000, M6502_TAG, 0 )
1740   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1741   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1742   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1743   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1744   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1745   ROM_LOAD( "8000-ud7, screen-04.ud7", 0x5000, 0x0800, CRC(75901dd7) SHA1(2ead0d83255a344a42bb786428353ca48d446d03) )
1746   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1747
1748   ROM_REGION( 0x800, "charom", 0 )
1749   ROM_LOAD( "901447-14.ua3", 0x0000, 0x800, CRC(48c77d29) SHA1(aa7c8ff844d16ec05e2b32acc586c58d9e35388c) )    // Character Generator
1750ROM_END
1751
1752
1753//-------------------------------------------------
1754//  ROM( superpet )
1755//-------------------------------------------------
1756
1757ROM_START( superpet )
1758   ROM_REGION( 0x7000, M6502_TAG, 0 )
1759   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1760   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1761   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1762   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1763   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1764   ROM_LOAD( "901474-04.ud7", 0x5000, 0x0800, CRC(abb000e7) SHA1(66887061b6c4ebef7d6efb90af9afd5e2c3b08ba) )   // Screen Editor (80 columns, CRTC 50Hz, Business Keyb)
1765   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1766
1767   ROM_REGION( 0x1000, "charom", 0 )
1768   ROM_LOAD( "901640-01.ua3", 0x0000, 0x1000, CRC(ee8229c4) SHA1(bf346f11595a3e65e55d6aeeaa2c0cec807b66c7) )
1769ROM_END
1770
1771#define rom_mmf9000 rom_superpet
1772
1773
1774//-------------------------------------------------
1775//  ROM( mmf9000_se )
1776//-------------------------------------------------
1777
1778ROM_START( mmf9000_se )
1779   ROM_REGION( 0x7000, M6502_TAG, 0 )
1780   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1781   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1782   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1783   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1784   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1785   ROM_LOAD( "8000-ud7, screen-04.ud7", 0x5000, 0x0800, CRC(75901dd7) SHA1(2ead0d83255a344a42bb786428353ca48d446d03) )
1786   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1787
1788   ROM_REGION( 0x1000, "charom", 0 )
1789   ROM_LOAD( "901640-01 skand.gen.ua3", 0x0000, 0x1000, CRC(da1cd630) SHA1(35f472114ff001259bdbae073ae041b0759e32cb) )
1790ROM_END
1791
1792
1793//-------------------------------------------------
1794//  ROM( cbm8296 )
1795//-------------------------------------------------
1796
1797ROM_START( cbm8296 )
1798   ROM_REGION( 0x7000, M6502_TAG, 0 )
1799   ROM_LOAD( "324992-02.ue10", 0x0000, 0x1000, CRC(2bac5baf) SHA1(03aa866e4bc4e38e95983a6a82ba925e710bede8) ) // HiRes Emulator
1800   ROM_LOAD( "324993-02.ue9", 0x1000, 0x1000, CRC(57444531) SHA1(74aa39888a6bc95762de767fce883203daca0d34) ) // HiRes BASIC
1801   ROM_LOAD( "324746-01.ue7", 0x2000, 0x3000, CRC(7935b528) SHA1(5ab17ee70467152bf2130e3f48a2aa81e9df93c9) )   // BASIC 4
1802   ROM_CONTINUE(              0x6000, 0x1000 )
1803   ROM_LOAD( "8296.ue8", 0x5000, 0x800, CRC(a3475de6) SHA1(b715db83fd26458dfd254bef5c4aae636753f7f5) )
1804
1805   ROM_REGION( 0x1000, "charom", 0 )
1806   ROM_LOAD( "901447-10.uc5", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )    // Character Generator
1807
1808   ROM_REGION( 0x20, "prom", 0 )
1809   ROM_LOAD( "74s288.uc2", 0x00, 0x20, CRC(06030665) SHA1(19dc91ca49ecc20e66c646ba480d2c3bc70a62e6) ) // video/RAM timing
1810
1811   ROM_REGION( 0xf5, "pla1", 0 )
1812   ROM_LOAD( "324744-01.ue6", 0x00, 0xf5, NO_DUMP )
1813
1814   ROM_REGION( 0xf5, "pla2", 0 )
1815   ROM_LOAD( "324745-01.ue5", 0x00, 0xf5, NO_DUMP )
1816ROM_END
1817
1818
1819//-------------------------------------------------
1820//  ROM( cbm8296d )
1821//-------------------------------------------------
1822
1823ROM_START( cbm8296d )
1824   ROM_REGION( 0x7000, M6502_TAG, 0 )
1825   ROM_LOAD( "324992-02.ue10", 0x0000, 0x1000, CRC(2bac5baf) SHA1(03aa866e4bc4e38e95983a6a82ba925e710bede8) ) // HiRes Emulator
1826   ROM_LOAD( "324993-02.ue9", 0x1000, 0x1000, CRC(57444531) SHA1(74aa39888a6bc95762de767fce883203daca0d34) ) // HiRes BASIC
1827   ROM_LOAD( "324746-01.ue7", 0x2000, 0x3000, CRC(7935b528) SHA1(5ab17ee70467152bf2130e3f48a2aa81e9df93c9) )   // BASIC 4
1828   ROM_CONTINUE(              0x6000, 0x1000 )
1829   ROM_LOAD( "324243-01.ue8", 0x5000, 0x1000, CRC(4000e833) SHA1(dafbdf8ba0a1fe7d7b9586ffbfc9e5390c0fcf6f) )
1830
1831   ROM_REGION( 0x1000, "charom", 0 )
1832   ROM_LOAD( "901447-10.uc5", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )    // Character Generator
1833
1834   ROM_REGION( 0x20, "prom", 0 )
1835   ROM_LOAD( "74s288.uc2", 0x00, 0x20, CRC(06030665) SHA1(19dc91ca49ecc20e66c646ba480d2c3bc70a62e6) ) // video/RAM timing
1836
1837   ROM_REGION( 0xf5, "pla1", 0 )
1838   ROM_LOAD( "324744-01.ue6", 0x00, 0xf5, NO_DUMP )
1839
1840   ROM_REGION( 0xf5, "pla2", 0 )
1841   ROM_LOAD( "324745-01.ue5", 0x00, 0xf5, NO_DUMP )
1842ROM_END
1843
1844
1845//-------------------------------------------------
1846//  ROM( cbm8296d_de )
1847//-------------------------------------------------
1848
1849ROM_START( cbm8296d_de )
1850   ROM_REGION( 0x7000, M6502_TAG, 0 )
1851   ROM_LOAD( "324992-02.ue10", 0x0000, 0x1000, CRC(2bac5baf) SHA1(03aa866e4bc4e38e95983a6a82ba925e710bede8) ) // HiRes Emulator
1852   ROM_LOAD( "324993-02.ue9", 0x1000, 0x1000, CRC(57444531) SHA1(74aa39888a6bc95762de767fce883203daca0d34) ) // HiRes BASIC
1853   ROM_LOAD( "324746-01.ue7", 0x2000, 0x3000, CRC(7935b528) SHA1(5ab17ee70467152bf2130e3f48a2aa81e9df93c9) )
1854   ROM_CONTINUE(              0x6000, 0x1000 )
1855   ROM_LOAD( "324243-04.ue8", 0x5000, 0x1000, CRC(3fe48897) SHA1(c218ff3168514f1d5e7822ae1b1ac3e161523b33) )
1856
1857   ROM_REGION( 0x1000, "charom", 0 )
1858   ROM_LOAD( "324242-10.uc5", 0x0000, 0x1000, CRC(a5632a0f) SHA1(9616f7f18757cccefb702a945f954b644d5b17d1) )
1859
1860   ROM_REGION( 0x20, "prom", 0 )
1861   ROM_LOAD( "74s288.uc2", 0x00, 0x20, CRC(06030665) SHA1(19dc91ca49ecc20e66c646ba480d2c3bc70a62e6) ) // video/RAM timing
1862
1863   ROM_REGION( 0xf5, "pla1", 0 )
1864   ROM_LOAD( "324744-01.ue6", 0x00, 0xf5, NO_DUMP )
1865
1866   ROM_REGION( 0xf5, "pla2", 0 )
1867   ROM_LOAD( "324745-01.ue5", 0x00, 0xf5, NO_DUMP )
1868ROM_END
1869
1870
1871
1872//**************************************************************************
1873//  SYSTEM DRIVERS
1874//**************************************************************************
1875
1876//    YEAR  NAME        PARENT      COMPAT  MACHINE     INPUT       INIT                COMPANY                         FULLNAME        FLAGS
1877COMP( 1977, pet2001,    0,          0,      pet2001,    pet,        driver_device,  0,  "Commodore Business Machines",  "PET 2001-4",   GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1878COMP( 1977, pet20018,   pet2001,    0,      pet20018,   pet,        driver_device,  0,  "Commodore Business Machines",  "PET 2001-8",   GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1879COMP( 1979, pet2001n,   0,          0,      pet2001n8,  pet,        driver_device,  0,  "Commodore Business Machines",  "PET 2001-N8",  GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1880COMP( 1979, pet2001n16, pet2001n,   0,      pet2001n16, pet,        driver_device,  0,  "Commodore Business Machines",  "PET 2001-N16", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1881COMP( 1979, pet2001n32, pet2001n,   0,      pet2001n32, pet,        driver_device,  0,  "Commodore Business Machines",  "PET 2001-N32", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1882COMP( 1979, cbm3008,    pet2001n,   0,      cbm3008,    pet,        driver_device,  0,  "Commodore Business Machines",  "CBM 3008",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1883COMP( 1979, cbm3016,    pet2001n,   0,      cbm3016,    pet,        driver_device,  0,  "Commodore Business Machines",  "CBM 3016",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1884COMP( 1979, cbm3032,    pet2001n,   0,      cbm3032,    pet,        driver_device,  0,  "Commodore Business Machines",  "CBM 3032",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1885COMP( 1979, pet2001b,   0,          0,      pet2001b8,  petb,       driver_device,  0,  "Commodore Business Machines",  "PET 2001-B8",  GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1886COMP( 1979, pet2001b16, pet2001b,   0,      pet2001b16, petb,       driver_device,  0,  "Commodore Business Machines",  "PET 2001-B16", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1887COMP( 1979, pet2001b32, pet2001b,   0,      pet2001b32, petb,       driver_device,  0,  "Commodore Business Machines",  "PET 2001-B32", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1888COMP( 1979, cbm3032b,   pet2001b,   0,      cbm3032b,   petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 3032B",    GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1889COMP( 1980, pet4016,    0,          0,      pet4016,    pet,        driver_device,  0,  "Commodore Business Machines",  "PET 4016",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1890COMP( 1980, pet4032,    pet4016,    0,      pet4032,    pet,        driver_device,  0,  "Commodore Business Machines",  "PET 4032",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1891COMP( 1980, cbm4016,    pet4016,    0,      cbm4016,    pet,        driver_device,  0,  "Commodore Business Machines",  "CBM 4016",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1892COMP( 1980, cbm4032,    pet4016,    0,      cbm4032,    pet,        driver_device,  0,  "Commodore Business Machines",  "CBM 4032",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1893COMP( 1980, pet4032b,   0,          0,      pet4032b,   petb,       driver_device,  0,  "Commodore Business Machines",  "PET 4032B",    GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1894COMP( 1980, cbm4032b,   pet4032b,   0,      cbm4032b,   petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 4032B",    GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1895COMP( 1980, pet8032,    0,          0,      pet8032,    petb,       driver_device,  0,  "Commodore Business Machines",  "PET 8032",     GAME_SUPPORTS_SAVE )
1896COMP( 1981, cbm8032,    pet8032,    0,      pet8032,    petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 8032",     GAME_SUPPORTS_SAVE )
1897COMP( 1981, cbm8032_de, pet8032,    0,      pet8032,    petb_de,    driver_device,  0,  "Commodore Business Machines",  "CBM 8032 (Germany)",           GAME_SUPPORTS_SAVE )
1898COMP( 1981, cbm8032_se, pet8032,    0,      pet8032,    petb_se,    driver_device,  0,  "Commodore Business Machines",  "CBM 8032 (Sweden/Finland)",    GAME_SUPPORTS_SAVE )
1899COMP( 1981, superpet,   pet8032,    0,      superpet,   petb,       driver_device,  0,  "Commodore Business Machines",  "SuperPET SP-9000",             GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1900COMP( 1981, mmf9000,    pet8032,    0,      superpet,   petb,       driver_device,  0,  "Commodore Business Machines",  "MicroMainFrame 9000",          GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1901COMP( 1981, mmf9000_se, pet8032,    0,      superpet,   petb_se,    driver_device,  0,  "Commodore Business Machines",  "MicroMainFrame 9000 (Sweden/Finland)",         GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1902COMP( 1981, cbm8096,    pet8032,    0,      cbm8096,    petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 8096",                     GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1903COMP( 1984, cbm8296,    0,          0,      cbm8296,    petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 8296",                     GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1904COMP( 1984, cbm8296d,   cbm8296,    0,      cbm8296d,   petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 8296D",                    GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1905COMP( 1984, cbm8296d_de,cbm8296,    0,      cbm8296d,   petb_de,    driver_device,  0,  "Commodore Business Machines",  "CBM 8296D (Germany)",          GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
trunk/src/mess/drivers/cbm2.c
r21317r21318
24032403   MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
24042404   //MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(EXT_MOS6525_TAG, tpi6525_porta_r), NULL)
24052405   MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, ext_cia_pb_r), DEVWRITE8(DEVICE_SELF, cbm2_state, ext_cia_pb_w), NULL)
2406
2407   MCFG_SOFTWARE_LIST_ADD("flop_list2", "bx256hp_flop")
24062408MACHINE_CONFIG_END
24072409
24082410
r21317r21318
24602462   MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w))
24612463   //MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(EXT_MOS6525_TAG, tpi6525_porta_r), NULL)
24622464   MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, ext_cia_pb_r), DEVWRITE8(DEVICE_SELF, cbm2_state, ext_cia_pb_w), NULL)
2465
2466   MCFG_SOFTWARE_LIST_ADD("flop_list2", "bx256hp_flop")
24632467MACHINE_CONFIG_END
24642468
24652469
trunk/src/mess/drivers/vic20.c
r21317r21318
450450   m_iec->atn_w(!BIT(data, 7));
451451}
452452
453READ_LINE_MEMBER( vic20_state::via1_ca1_r )
454{
455   return m_restore->read();
456}
457
458453static const via6522_interface via1_intf =
459454{
460455   DEVCB_DRIVER_MEMBER(vic20_state, via1_pa_r),
461456   DEVCB_DEVICE_MEMBER(VIC20_USER_PORT_TAG, vic20_user_port_device, pb_r),
462   DEVCB_DRIVER_LINE_MEMBER(vic20_state, via1_ca1_r),
457   DEVCB_INPUT_PORT("RESTORE"),
463458   DEVCB_NULL,
464459   DEVCB_NULL,
465460   DEVCB_NULL,
r21317r21318
469464   DEVCB_DEVICE_LINE_MEMBER(VIC20_USER_PORT_TAG, vic20_user_port_device, cb1_w),
470465   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT_TAG, pet_datassette_port_device, motor_w),
471466   DEVCB_DEVICE_LINE_MEMBER(VIC20_USER_PORT_TAG, vic20_user_port_device, cb2_w),
472   DEVCB_CPU_INPUT_LINE(M6502_TAG, INPUT_LINE_NMI)
467   DEVCB_CPU_INPUT_LINE(M6502_TAG, M6502_NMI_LINE)
473468};
474469
475470
trunk/src/mess/drivers/c128.c
r21317r21318
33    TODO:
44
55    - connect CAPS LOCK to charom A12 on international variants
6    - expansion DMA
76
87*/
98
r21317r21318
13291328}
13301329
13311330
1332//-------------------------------------------------
1333//  C64_USER_PORT_INTERFACE( user_intf )
1334//-------------------------------------------------
13351331
1336static C64_USER_PORT_INTERFACE( user_intf )
1337{
1338   DEVCB_DEVICE_LINE_MEMBER(MOS6526_1_TAG, mos6526_device, sp_w),
1339   DEVCB_DEVICE_LINE_MEMBER(MOS6526_1_TAG, mos6526_device, cnt_w),
1340   DEVCB_DEVICE_LINE_MEMBER(MOS6526_2_TAG, mos6526_device, sp_w),
1341   DEVCB_DEVICE_LINE_MEMBER(MOS6526_2_TAG, mos6526_device, cnt_w),
1342   DEVCB_DEVICE_LINE_MEMBER(MOS6526_2_TAG, mos6526_device, flag_w),
1343   DEVCB_DRIVER_LINE_MEMBER(c128_state, exp_reset_w)
1344};
1345
1346
1347
13481332//**************************************************************************
13491333//  MACHINE INITIALIZATION
13501334//**************************************************************************
r21317r21318
13981382
13991383void c128_state::machine_reset()
14001384{
1401   m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
1402   m_subcpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
1403
14041385   m_maincpu->reset();
14051386   m_reset = 1;
14061387
r21317r21318
14631444   MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, cnt2_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, sp2_w))
14641445   MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, cia2_pa_r), DEVWRITE8(DEVICE_SELF, c128_state, cia2_pa_w))
14651446   MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(C64_USER_PORT_TAG, c64_user_port_device, pb_r), DEVWRITE8(C64_USER_PORT_TAG, c64_user_port_device, pb_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, pc2_w))
1466   MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
14671447   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
14681448   MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
14691449   MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS8564_TAG, mos8564_device, lp_w))
r21317r21318
14711451   MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6567_CLOCK, c64_expansion_cards, NULL, NULL)
14721452   MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACKS(DEVWRITELINE(DEVICE_SELF, c128_state, exp_irq_w), DEVWRITELINE(DEVICE_SELF, c128_state, exp_nmi_w), DEVWRITELINE(DEVICE_SELF, c128_state, exp_reset_w))
14731453   MCFG_C64_EXPANSION_SLOT_DMA_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, exp_dma_cd_r), DEVWRITE8(DEVICE_SELF, c128_state, exp_dma_cd_w), DEVWRITELINE(DEVICE_SELF, c128_state, exp_dma_w))
1474   MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL)
1454   MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, c64_user_port_cards, NULL, NULL, DEVWRITELINE(DEVICE_SELF, c128_state, exp_reset_w))
1455   MCFG_C64_USER_PORT_CIA1_CALLBACKS(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, cnt_w), DEVWRITELINE(MOS6526_1_TAG, mos6526_device, sp_w))
1456   MCFG_C64_USER_PORT_CIA2_CALLBACKS(DEVWRITELINE(MOS6526_2_TAG, mos6526_device, cnt_w), DEVWRITELINE(MOS6526_2_TAG, mos6526_device, sp_w), DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
1457   MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
14751458
14761459   // software list
14771460   MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10")
r21317r21318
15841567   MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, cnt2_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, sp2_w))
15851568   MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, cia2_pa_r), DEVWRITE8(DEVICE_SELF, c128_state, cia2_pa_w))
15861569   MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(C64_USER_PORT_TAG, c64_user_port_device, pb_r), DEVWRITE8(C64_USER_PORT_TAG, c64_user_port_device, pb_w), DEVWRITELINE(C64_USER_PORT_TAG, c64_user_port_device, pc2_w))
1587   MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
15881570   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", NULL, DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
15891571   MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
15901572   MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS8566_TAG, mos8566_device, lp_w))
r21317r21318
15921574   MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, c64_expansion_cards, NULL, NULL)
15931575   MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACKS(DEVWRITELINE(DEVICE_SELF, c128_state, exp_irq_w), DEVWRITELINE(DEVICE_SELF, c128_state, exp_nmi_w), DEVWRITELINE(DEVICE_SELF, c128_state, exp_reset_w))
15941576   MCFG_C64_EXPANSION_SLOT_DMA_CALLBACKS(DEVREAD8(DEVICE_SELF, c128_state, exp_dma_cd_r), DEVWRITE8(DEVICE_SELF, c128_state, exp_dma_cd_w), DEVWRITELINE(DEVICE_SELF, c128_state, exp_dma_w))
1595   MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL)
1577   MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, c64_user_port_cards, NULL, NULL, DEVWRITELINE(DEVICE_SELF, c128_state, exp_reset_w))
1578   MCFG_C64_USER_PORT_CIA1_CALLBACKS(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, cnt_w), DEVWRITELINE(MOS6526_1_TAG, mos6526_device, sp_w))
1579   MCFG_C64_USER_PORT_CIA2_CALLBACKS(DEVWRITELINE(MOS6526_2_TAG, mos6526_device, cnt_w), DEVWRITELINE(MOS6526_2_TAG, mos6526_device, sp_w), DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
1580   MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
15961581
15971582   // software list
15981583   MCFG_SOFTWARE_LIST_ADD("cart_list_vic10", "vic10")
trunk/src/mess/drivers/c64.c
r21317r21318
984984}
985985
986986
987//-------------------------------------------------
988//  C64_USER_PORT_INTERFACE( user_intf )
989//-------------------------------------------------
990987
991static C64_USER_PORT_INTERFACE( user_intf )
992{
993   DEVCB_DEVICE_LINE_MEMBER(MOS6526_1_TAG, mos6526_device, sp_w),
994   DEVCB_DEVICE_LINE_MEMBER(MOS6526_1_TAG, mos6526_device, cnt_w),
995   DEVCB_DEVICE_LINE_MEMBER(MOS6526_2_TAG, mos6526_device, sp_w),
996   DEVCB_DEVICE_LINE_MEMBER(MOS6526_2_TAG, mos6526_device, cnt_w),
997   DEVCB_DEVICE_LINE_MEMBER(MOS6526_2_TAG, mos6526_device, flag_w),
998   DEVCB_DRIVER_LINE_MEMBER(c64_state, exp_reset_w)
999};
1000
1001
1002
1003988//**************************************************************************
1004989//  MACHINE INITIALIZATION
1005990//**************************************************************************
r21317r21318
11021087   MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6567_CLOCK, c64_expansion_cards, NULL, NULL)
11031088   MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACKS(DEVWRITELINE(DEVICE_SELF, c64_state, exp_irq_w), DEVWRITELINE(DEVICE_SELF, c64_state, exp_nmi_w), DEVWRITELINE(DEVICE_SELF, c64_state, exp_reset_w))
11041089   MCFG_C64_EXPANSION_SLOT_DMA_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, read), DEVWRITE8(DEVICE_SELF, c64_state, write), DEVWRITELINE(DEVICE_SELF, c64_state, exp_dma_w))
1105   MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL)
1090   MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, c64_user_port_cards, NULL, NULL, DEVWRITELINE(DEVICE_SELF, c64_state, exp_reset_w))
1091   MCFG_C64_USER_PORT_CIA1_CALLBACKS(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, cnt_w), DEVWRITELINE(MOS6526_1_TAG, mos6526_device, sp_w))
1092   MCFG_C64_USER_PORT_CIA2_CALLBACKS(DEVWRITELINE(MOS6526_2_TAG, mos6526_device, cnt_w), DEVWRITELINE(MOS6526_2_TAG, mos6526_device, sp_w), DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
11061093   MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS)
11071094
11081095   // software list
r21317r21318
12131200   MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, c64_expansion_cards, NULL, NULL)
12141201   MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACKS(DEVWRITELINE(DEVICE_SELF, c64_state, exp_irq_w), DEVWRITELINE(DEVICE_SELF, c64_state, exp_nmi_w), DEVWRITELINE(DEVICE_SELF, c64_state, exp_reset_w))
12151202   MCFG_C64_EXPANSION_SLOT_DMA_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, read), DEVWRITE8(DEVICE_SELF, c64_state, write), DEVWRITELINE(DEVICE_SELF, c64_state, exp_dma_w))
1216   MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL)
1203   MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, c64_user_port_cards, NULL, NULL, DEVWRITELINE(DEVICE_SELF, c64_state, exp_reset_w))
1204   MCFG_C64_USER_PORT_CIA1_CALLBACKS(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, cnt_w), DEVWRITELINE(MOS6526_1_TAG, mos6526_device, sp_w))
1205   MCFG_C64_USER_PORT_CIA2_CALLBACKS(DEVWRITELINE(MOS6526_2_TAG, mos6526_device, cnt_w), DEVWRITELINE(MOS6526_2_TAG, mos6526_device, sp_w), DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
12171206   MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS)
12181207
12191208   // software list
r21317r21318
13021291   MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, c64_expansion_cards, NULL, NULL)
13031292   MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACKS(DEVWRITELINE(DEVICE_SELF, c64_state, exp_irq_w), DEVWRITELINE(DEVICE_SELF, c64_state, exp_nmi_w), DEVWRITELINE(DEVICE_SELF, c64_state, exp_reset_w))
13041293   MCFG_C64_EXPANSION_SLOT_DMA_CALLBACKS(DEVREAD8(DEVICE_SELF, c64_state, read), DEVWRITE8(DEVICE_SELF, c64_state, write), DEVWRITELINE(DEVICE_SELF, c64_state, exp_dma_w))
1305   MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, user_intf, c64_user_port_cards, NULL, NULL)
1294   MCFG_C64_USER_PORT_ADD(C64_USER_PORT_TAG, c64_user_port_cards, NULL, NULL, DEVWRITELINE(DEVICE_SELF, c64_state, exp_reset_w))
1295   MCFG_C64_USER_PORT_CIA1_CALLBACKS(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, cnt_w), DEVWRITELINE(MOS6526_1_TAG, mos6526_device, sp_w))
1296   MCFG_C64_USER_PORT_CIA2_CALLBACKS(DEVWRITELINE(MOS6526_2_TAG, mos6526_device, cnt_w), DEVWRITELINE(MOS6526_2_TAG, mos6526_device, sp_w), DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
13061297   MCFG_QUICKLOAD_ADD("quickload", cbm_c64, "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS)
13071298
13081299   // software list
trunk/src/mess/drivers/pet.c
r0r21318
1/*
2
3http://www.6502.org/users/andre/petindex/boards.html
4
5Static Board (PET 2001)
6-----------------------
7
8Four variations based on type of RAM(6550 or 2114) and ROM(6540 or 2316B).
94K or 8K static RAM (selected by jumper).
1040 column display
11A video interrupt interferes with disk drive operation.
12Display timing not compatible with Basic 4.0.
13ROM sockets:  A2  2K character      ROM sockets:  A2  2K character
14 (2316B)      H1  C000-CFFF           (6540)       H1  C000-C7FF
15              H2  D000-DFFF                        H2  D000-D7FF
16              H3  E000-E7FF                        H3  E000-E7FF
17              H4  F000-FFFF                        H4  F000-F7FF
18              H5  C000-CFFF                        H5  C800-CFFF
19              H6  D000-DFFF                        H6  D800-DFFF
20              H7  F000-FFFF                        H7  F800-FFFF
21
22
23           IEEE user tape #2
24     +------####-####--##-+
25     !                    #
26     !                    #
27     !                    # exp
28     !                    # bus
29     !                    #
30     !                    #    2000 Series
31     !                    !       circa 1977/78  Max RAM - 8k
32     !       (2k) ROMS    !       [w/daughter board exp to 32k shown]
33     !      F F E D D C C !
34     !      8 0 0 8 0 8 0 !
35     !                    !
36tape #       RAM MEMORY   !
37 #1  #                    !
38     +--------------------+
39
40
41Dynamic Board (PET/CBM 2001-N/2001-B/4000)
42------------------------------------------
43
444K, 8K, 16K or 32K dynamic RAM (selected by jumper).
4540 column display
46Can run all versions of 40 column Basic (Basic 1 must be copied to 4K ROMs)
47Can be jumpered to replace the older board.
48ROM sockets:  UD3   9000-9FFF
49              UD4   A000-AFFF
50              UD5   B000-BFFF
51              UD6   C000-CFFF
52              UD7   D000-DFFF
53              UD8   E000-E7FF
54              UD9   F000-FFFF
55              UF10  2K character
56
57
58            IEEE user tape #1
59     +------####-####--##-+
60     !                   #!
61     !                   #!
62     !                   #! exp
63     !        ROMS       #! bus
64     !    F E D C B A 9  #!
65     !                   #!    3000, 4000 Series
66     !                    !       (3000 series is European version)
67     !                    !       circa 1979/80  Max RAM - 32k
68     !                    !
69     !                    !
70     !                    !
71tape #      RAM MEMORY    !
72 #2  #                    !
73     +--------------------+
74
75
7680 Column Board (CBM 8000)
77--------------------------
78
7916K or 32K RAM (selected by jumper).
80Uses CTRC to generate 80 column display.
81Can only run the 80 column version of Basic 4.0.
82Not compatible with older boards.
83ROM sockets:  UA3   2K or 4K character
84              UD6   F000-FFFF
85              UD7   E000-E7FF
86              UD8   D000-DFFF
87              UD9   C000-CFFF
88              UD10  B000-BFFF
89              UD11  A000-AFFF
90              UD12  9000-9FFF
91
92The layout is the same of the one used in Universal Boards below.
93
94
95Universal Board (CBM 8000/PET 4000-12)
96--------------------------------------
97
98This is an 80 column board with jumpers for different configurations.
9916K or 32K RAM (selected by jumper).
100Uses CTRC to generate 40 or 80 column display (selected by jumpers).
101Can only run Basic 4.0 versions that support the CRTC.
102Can be jumpered to replace all older boards.
103ROM sockets:  UA3   2K or 4K character
104              UD6   F000-FFFF
105              UD7   E000-E7FF
106              UD8   D000-DFFF
107              UD9   C000-CFFF
108              UD10  B000-BFFF
109              UD11  A000-AFFF
110              UD12  9000-9FFF
111
112
113           IEEE user tape #1
114     +------####-####--##-+
115     !                  # # tape
116     !                  # #  #2
117     !  R       exp bus # !
118     !  A                #!
119     !  M             9  #!
120     !                A  #!     4000, 8000 Series
121     !  M          R  B   !        circa 1981     Max RAM - 32k*
122     !  E          O  C   !       [8296 layout not shown]
123     !  M          M  D   !
124     !  O          S  E   !
125     !  R             F   !
126     !  Y                 !
127     !                spkr!
128     +--------------------+
129*/
130
131/*
132
133    TODO:
134
135    - accurate video timing for non-CRTC models
136    - PET 4000-12 (40 column CRTC models)
137    - High Speed Graphics board
138    - keyboard layouts
139        - Swedish
140        - German
141    - SuperPET
142        - 6809
143        - OS/9 MMU
144    - 8096
145        - 64k expansion
146    - 8296
147        - PLA dumps
148        - high resolution graphics
149        - rom software list
150
151*/
152
153#include "includes/pet.h"
154
155
156
157static void cbm_pet_quick_sethiaddress( running_machine &machine, UINT16 hiaddress )
158{
159   address_space &space = machine.firstcpu->space(AS_PROGRAM);
160
161   space.write_byte(0x2e, hiaddress & 0xff);
162   space.write_byte(0x2c, hiaddress & 0xff);
163   space.write_byte(0x2a, hiaddress & 0xff);
164   space.write_byte(0x2f, hiaddress >> 8);
165   space.write_byte(0x2d, hiaddress >> 8);
166   space.write_byte(0x2b, hiaddress >> 8);
167}
168
169static QUICKLOAD_LOAD( cbm_pet )
170{
171   return general_cbm_loadsnap(image, file_type, quickload_size, 0, cbm_pet_quick_sethiaddress);
172}
173
174
175
176//**************************************************************************
177//  INTERRUPTS
178//**************************************************************************
179
180//-------------------------------------------------
181//  check_interrupts -
182//-------------------------------------------------
183
184void pet_state::check_interrupts()
185{
186   int irq = m_via_irq || m_pia1a_irq || m_pia1b_irq || m_pia2a_irq || m_pia2b_irq || m_exp_irq;
187
188   m_maincpu->set_input_line(M6502_IRQ_LINE, irq);
189   m_exp->irq_w(irq);
190}
191
192
193//-------------------------------------------------
194//  update_speaker -
195//-------------------------------------------------
196
197void pet_state::update_speaker()
198{
199   if (m_speaker)
200   {
201   speaker_level_w(m_speaker, !(m_via_cb2 || m_pia1_pa7));
202   }
203}
204
205
206//-------------------------------------------------
207//  read -
208//-------------------------------------------------
209
210READ8_MEMBER( pet_state::read )
211{
212   int sel = offset >> 12;
213   int norom = m_exp->norom_r(space, offset, sel);
214   UINT8 data = 0;
215
216   switch (sel)
217   {
218   case SEL0: case SEL1: case SEL2: case SEL3: case SEL4: case SEL5: case SEL6: case SEL7:
219   if (offset < m_ram->size())
220   {
221      data = m_ram->pointer()[offset];
222   }
223   break;
224
225   case SEL8:
226   data = m_video_ram[offset & (m_video_ram_size - 1)];
227   break;
228
229   case SEL9: case SELA: case SELB: case SELC: case SELD: case SELF:
230   if (norom)
231   {
232      data = m_rom->base()[offset - 0x9000];
233   }
234   break;
235
236   case SELE:
237   if (BIT(offset, 11))
238   {
239      if (BIT(offset, 4))
240      {
241      data = m_pia1->read(space, offset & 0x03);
242      }
243      if (BIT(offset, 5))
244      {
245      data = m_pia2->read(space, offset & 0x03);
246      }
247      if (BIT(offset, 6))
248      {
249      data = m_via->read(space, offset & 0x0f);
250      }
251      if (m_crtc && BIT(offset, 7) && BIT(offset, 0))
252      {
253      data = m_crtc->register_r(space, 0);
254      }
255   }
256   else if (norom)
257   {
258      data = m_rom->base()[offset - 0x9000];
259   }
260   break;
261   }
262
263   return m_exp->read(space, offset, data, sel);
264}
265
266
267//-------------------------------------------------
268//  write -
269//-------------------------------------------------
270
271WRITE8_MEMBER( pet_state::write )
272{
273   int sel = offset >> 12;
274
275   switch (sel)
276   {
277   case SEL0: case SEL1: case SEL2: case SEL3: case SEL4: case SEL5: case SEL6: case SEL7:
278   if (offset < m_ram->size())
279   {
280      m_ram->pointer()[offset] = data;
281   }
282   break;
283
284   case SEL8:
285   m_video_ram[offset & (m_video_ram_size - 1)] = data;
286   break;
287
288   case SELE:
289   if (BIT(offset, 11))
290   {
291      if (BIT(offset, 4))
292      {
293      m_pia1->write(space, offset & 0x03, data);
294      }
295      if (BIT(offset, 5))
296      {
297      m_pia2->write(space, offset & 0x03, data);
298      }
299      if (BIT(offset, 6))
300      {
301      m_via->write(space, offset & 0x0f, data);
302      }
303      if (m_crtc && BIT(offset, 7))
304      {
305      if (BIT(offset, 0))
306      {
307         m_crtc->register_w(space, 0, data);
308      }
309      else
310      {
311         m_crtc->address_w(space, 0, data);
312      }
313      }
314   }
315   break;
316   }
317
318   m_exp->write(space, offset, data, sel);
319}
320
321
322
323//**************************************************************************
324//  ADDRESS MAPS
325//**************************************************************************
326
327//-------------------------------------------------
328//  ADDRESS_MAP( pet2001_mem )
329//-------------------------------------------------
330
331static ADDRESS_MAP_START( pet2001_mem, AS_PROGRAM, 8, pet_state )
332   AM_RANGE(0x0000, 0xffff) AM_READWRITE(read, write)
333ADDRESS_MAP_END
334
335
336
337//**************************************************************************
338//  INPUT PORTS
339//**************************************************************************
340
341//-------------------------------------------------
342//  INPUT_PORTS( pet )
343//-------------------------------------------------
344
345static INPUT_PORTS_START( pet )
346   PORT_START( "ROW0" )
347   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Crsr Right Left") PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
348   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Home  Clr Screen") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))
349   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x90") PORT_CODE(KEYCODE_MINUS) PORT_CHAR(0x2190)
350   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9)          PORT_CHAR('(')
351   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7)          PORT_CHAR('&')
352   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5)          PORT_CHAR('%')
353   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3)          PORT_CHAR('#')
354   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1)          PORT_CHAR('!')
355
356   PORT_START( "ROW1" )
357   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Del  Inst") PORT_CODE(KEYCODE_DEL) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
358   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Crsr Down Up") PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHAR(UCHAR_MAMEKEY(UP))
359   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
360   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0)          PORT_CHAR(')')
361   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8)          PORT_CHAR('\\')
362   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6)          PORT_CHAR('\'')
363   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4)          PORT_CHAR('$')
364   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2)          PORT_CHAR('"')
365
366   PORT_START( "ROW2" )
367   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD)      PORT_CHAR('9')
368   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD)      PORT_CHAR('7')
369   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x91 Pi") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0x2191) PORT_CHAR(0x03C0)
370   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O)          PORT_CHAR('O')
371   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U)          PORT_CHAR('U')
372   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T)          PORT_CHAR('T')
373   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E)          PORT_CHAR('E')
374   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q)          PORT_CHAR('Q')
375
376   PORT_START( "ROW3" )
377   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD)  PORT_CHAR('/')
378   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD)      PORT_CHAR('8')
379   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
380   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P)          PORT_CHAR('P')
381   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I)          PORT_CHAR('I')
382   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y)          PORT_CHAR('Y')
383   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R)          PORT_CHAR('R')
384   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W)          PORT_CHAR('W')
385
386   PORT_START( "ROW4" )
387   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD)      PORT_CHAR('6')
388   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD)      PORT_CHAR('4')
389   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
390   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L)          PORT_CHAR('L')
391   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J)          PORT_CHAR('J')
392   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G)          PORT_CHAR('G')
393   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D)          PORT_CHAR('D')
394   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A)          PORT_CHAR('A')
395
396   PORT_START( "ROW5" )
397   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK)   PORT_CHAR('*')
398   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD)      PORT_CHAR('5')
399   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
400   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON)      PORT_CHAR(':')
401   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K)          PORT_CHAR('K')
402   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H)          PORT_CHAR('H')
403   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F)          PORT_CHAR('F')
404   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S)          PORT_CHAR('S')
405
406   PORT_START( "ROW6" )
407   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD)      PORT_CHAR('3')
408   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD)      PORT_CHAR('1')
409   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
410   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)       PORT_CHAR(';')
411   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M)          PORT_CHAR('M')
412   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B)          PORT_CHAR('B')
413   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C)          PORT_CHAR('C')
414   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z)          PORT_CHAR('Z')
415
416   PORT_START( "ROW7" )
417   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD)   PORT_CHAR('+')
418   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD)      PORT_CHAR('2')
419   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
420   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH)      PORT_CHAR('?')
421   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA)      PORT_CHAR(',')
422   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N)          PORT_CHAR('N')
423   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V)          PORT_CHAR('V')
424   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X)          PORT_CHAR('X')
425
426   PORT_START( "ROW8" )
427   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD)  PORT_CHAR('-')
428   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD)      PORT_CHAR('0')
429   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Shift (Right)") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
430   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH)  PORT_CHAR('>')
431   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
432   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE)  PORT_CHAR(']')
433   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE)      PORT_CHAR('@')
434   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Shift (Left)") PORT_CODE(KEYCODE_LSHIFT)
435
436   PORT_START( "ROW9" )
437   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Keypad =") PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR('=')
438   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD)    PORT_CHAR('.')
439   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
440   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Stop Run") PORT_CODE(KEYCODE_QUOTE)
441   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('<')
442   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE)      PORT_CHAR(' ')
443   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)     PORT_CHAR('[')
444   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Rvs Off") PORT_CODE(KEYCODE_TAB)
445
446   PORT_START( "LOCK" )
447   PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
448   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
449INPUT_PORTS_END
450
451
452//-------------------------------------------------
453//  INPUT_PORTS( petb )
454//-------------------------------------------------
455
456INPUT_PORTS_START( petb )
457   PORT_START( "ROW0" )
458   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
459   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
460   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Crsr Right Left") PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
461   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD)      PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
462   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)     PORT_CHAR('-') PORT_CHAR('=')
463   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8)          PORT_CHAR('8') PORT_CHAR('\\')
464   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5)          PORT_CHAR('5') PORT_CHAR('%')
465   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2)          PORT_CHAR('2') PORT_CHAR('"')
466
467   PORT_START( "ROW1" )
468   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD)      PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
469   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
470   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x91") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(0x2191)
471   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD)      PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
472   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD)      PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
473   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7)          PORT_CHAR('7') PORT_CHAR('&')
474   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4)          PORT_CHAR('4') PORT_CHAR('$')
475   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1)          PORT_CHAR('1') PORT_CHAR('!')
476
477   PORT_START( "ROW2" )
478   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD)      PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
479   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON)      PORT_CHAR(';') PORT_CHAR('+')
480   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K)          PORT_CHAR('K')
481   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH)  PORT_CHAR(']')
482   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H)          PORT_CHAR('H')
483   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F)          PORT_CHAR('F')
484   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S)          PORT_CHAR('S')
485   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC)        PORT_CHAR(UCHAR_MAMEKEY(ESC))
486
487   PORT_START( "ROW3" )
488   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD)      PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
489   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE)      PORT_CHAR('@')
490   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L)          PORT_CHAR('L')
491   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
492   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J)          PORT_CHAR('J')
493   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G)          PORT_CHAR('G')
494   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D)          PORT_CHAR('D')
495   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A)          PORT_CHAR('A')
496
497   PORT_START( "ROW4" )
498   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Del  Inst") PORT_CODE(KEYCODE_DEL) PORT_CHAR(8) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
499   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P)          PORT_CHAR('P')
500   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I)          PORT_CHAR('I')
501   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('\\')
502   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y)          PORT_CHAR('Y')
503   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R)          PORT_CHAR('R')
504   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W)          PORT_CHAR('W')
505   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB)        PORT_CHAR('\t')
506
507   PORT_START( "ROW5" )
508   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD)      PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
509   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE)  PORT_CHAR('[')
510   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O)          PORT_CHAR('O')
511   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Crsr Down Up") PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(DOWN)) PORT_CHAR(UCHAR_MAMEKEY(UP))
512   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U)          PORT_CHAR('U')
513   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T)          PORT_CHAR('T')
514   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E)          PORT_CHAR('E')
515   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q)          PORT_CHAR('Q')
516
517   PORT_START( "ROW6" )
518   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD)      PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
519   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Shift (Right)") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
520   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
521   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD)    PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
522   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)       PORT_CHAR('.') PORT_CHAR('>')
523   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B)          PORT_CHAR('B')
524   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C)          PORT_CHAR('C')
525   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Shift (Left)") PORT_CODE(KEYCODE_LSHIFT)
526
527   PORT_START( "ROW7" )
528   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD)      PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
529   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Repeat") PORT_CODE(KEYCODE_LALT)
530   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
531   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0)          PORT_CHAR('0') PORT_CHAR(')')
532   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA)      PORT_CHAR(',') PORT_CHAR('<')
533   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N)          PORT_CHAR('N')
534   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V)          PORT_CHAR('V')
535   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z)          PORT_CHAR('Z')
536
537   PORT_START( "ROW8" )
538   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD)      PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
539   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH)      PORT_CHAR('/') PORT_CHAR('?')
540   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
541   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Home  Clr Screen") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))
542   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M)          PORT_CHAR('M')
543   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE)      PORT_CHAR(' ')
544   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X)          PORT_CHAR('X')
545   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Rvs Off") PORT_CODE(KEYCODE_INSERT)
546
547   PORT_START( "ROW9" )
548   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
549   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
550   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS)      PORT_CHAR(':') PORT_CHAR('*')
551   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("Stop Run") PORT_CODE(KEYCODE_END)
552   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9)          PORT_CHAR('9') PORT_CHAR('(')
553   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6)          PORT_CHAR('6') PORT_CHAR('\'')
554   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3)          PORT_CHAR('3') PORT_CHAR('#')
555   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xE2\x86\x90") PORT_CODE(KEYCODE_TILDE) PORT_CHAR(0x2190)
556
557   PORT_START( "LOCK" )
558   PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED )
559   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
560INPUT_PORTS_END
561
562
563//-------------------------------------------------
564//  INPUT_PORTS( petb_de )
565//-------------------------------------------------
566
567INPUT_PORTS_START( petb_de )
568   PORT_INCLUDE( petb )
569INPUT_PORTS_END
570
571
572//-------------------------------------------------
573//  INPUT_PORTS( petb_se )
574//-------------------------------------------------
575
576INPUT_PORTS_START( petb_se )
577   PORT_INCLUDE( petb )
578INPUT_PORTS_END
579
580
581
582//**************************************************************************
583//  DEVICE CONFIGURATION
584//**************************************************************************
585
586//-------------------------------------------------
587//  via6522_interface via_intf
588//-------------------------------------------------
589
590WRITE_LINE_MEMBER( pet_state::via_irq_w )
591{
592   m_via_irq = state;
593
594   check_interrupts();
595}
596
597READ8_MEMBER( pet_state::via_pb_r )
598{
599   /*
600
601     bit     description
602
603     PB0     _NDAC IN
604     PB1
605     PB2
606     PB3
607     PB4
608     PB5     SYNC IN
609     PB6     _NRFD IN
610     PB7     _DAV IN
611
612   */
613
614   UINT8 data = 0;
615
616   // video sync
617   data |= (m_crtc ? m_crtc->vsync_r() : m_sync) << 5;
618
619   // IEEE-488
620   data |= m_ieee->ndac_r();
621   data |= m_ieee->nrfd_r() << 6;
622   data |= m_ieee->dav_r() << 7;
623
624   return data;
625}
626
627WRITE8_MEMBER( pet_state::via_pb_w )
628{
629   /*
630
631     bit     description
632
633     PB0
634     PB1     _NRFD OUT
635     PB2     _ATN OUT
636     PB3     CASS WRITE
637     PB4     #2 CASS MOTOR
638     PB5
639     PB6
640     PB7
641
642   */
643
644   // IEEE-488
645   m_ieee->nrfd_w(BIT(data, 1));
646   m_ieee->atn_w(BIT(data, 2));
647
648   // cassette
649   m_cassette->write(BIT(data, 3));
650   m_cassette2->write(BIT(data, 3));
651   m_cassette2->motor_w(BIT(data, 4));
652}
653
654WRITE_LINE_MEMBER( pet_state::via_ca2_w )
655{
656   m_graphic = state;
657}
658
659WRITE_LINE_MEMBER( pet_state::via_cb2_w )
660{
661   m_via_cb2 = state;
662   update_speaker();
663
664   m_user->cb2_w(state);
665}
666
667const via6522_interface via_intf =
668{
669   DEVCB_DEVICE_MEMBER(PET_USER_PORT_TAG, pet_user_port_device, pa_r),
670   DEVCB_DRIVER_MEMBER(pet_state, via_pb_r),
671   DEVCB_NULL,
672   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT2_TAG, pet_datassette_port_device, read),
673   DEVCB_NULL,
674   DEVCB_NULL,
675   DEVCB_DEVICE_MEMBER(PET_USER_PORT_TAG, pet_user_port_device, pa_w),
676   DEVCB_DRIVER_MEMBER(pet_state, via_pb_w),
677   DEVCB_DEVICE_LINE_MEMBER(PET_USER_PORT_TAG, pet_user_port_device, ca1_w),
678   DEVCB_DRIVER_LINE_MEMBER(pet_state, via_ca2_w),
679   DEVCB_NULL,
680   DEVCB_DRIVER_LINE_MEMBER(pet_state, via_cb2_w),
681   DEVCB_DRIVER_LINE_MEMBER(pet_state, via_irq_w)
682};
683
684
685//-------------------------------------------------
686//  pia6821_interface pia1_intf
687//-------------------------------------------------
688
689WRITE_LINE_MEMBER( pet_state::pia1_irqa_w )
690{
691   m_pia1a_irq = state;
692
693   check_interrupts();
694}
695
696WRITE_LINE_MEMBER( pet_state::pia1_irqb_w )
697{
698   m_pia1b_irq = state;
699
700   check_interrupts();
701}
702
703READ8_MEMBER( pet_state::pia1_pa_r )
704{
705   /*
706
707     bit     description
708
709     PA0     KEY A
710     PA1     KEY B
711     PA2     KEY C
712     PA3     KEY D
713     PA4     #1 CASS SWITCH
714     PA5     #2 CASS SWITCH
715     PA6     _EOI IN
716     PA7     DIAG JUMPER
717
718   */
719
720   UINT8 data = 0;
721
722   // keyboard
723   data |= m_key;
724
725   // cassette
726   data |= m_cassette->sense_r() << 4;
727   data |= m_cassette2->sense_r() << 5;
728
729   // IEEE-488
730   data |= m_ieee->eoi_r() << 6;
731
732   // diagnostic jumper
733   data |= m_exp->diag_r() << 7;
734
735   return data;
736}
737
738WRITE8_MEMBER( pet_state::pia1_pa_w )
739{
740   /*
741
742     bit     description
743
744     PA0     KEY A
745     PA1     KEY B
746     PA2     KEY C
747     PA3     KEY D
748     PA4
749     PA5
750     PA6
751     PA7     SPEAKER
752
753   */
754
755   // keyboard
756   m_key = data & 0x0f;
757
758   // speaker
759   m_pia1_pa7 = BIT(data, 7);
760   update_speaker();
761}
762
763READ8_MEMBER( pet_state::pia1_pb_r )
764{
765   UINT8 data = 0xff;
766
767   switch (m_key)
768   {
769   case 0: data &= m_row0->read(); break;
770   case 1: data &= m_row1->read(); break;
771   case 2: data &= m_row2->read(); break;
772   case 3: data &= m_row3->read(); break;
773   case 4: data &= m_row4->read(); break;
774   case 5: data &= m_row5->read(); break;
775   case 6: data &= m_row6->read(); break;
776   case 7: data &= m_row7->read(); break;
777   case 8: data &= m_row8->read() & m_lock->read(); break;
778   case 9: data &= m_row9->read(); break;
779   }
780
781   return data;
782}
783
784READ8_MEMBER( pet2001b_state::pia1_pb_r )
785{
786   UINT8 data = 0xff;
787
788   switch (m_key)
789   {
790   case 0: data &= m_row0->read(); break;
791   case 1: data &= m_row1->read(); break;
792   case 2: data &= m_row2->read(); break;
793   case 3: data &= m_row3->read(); break;
794   case 4: data &= m_row4->read(); break;
795   case 5: data &= m_row5->read(); break;
796   case 6: data &= m_row6->read() & m_lock->read(); break;
797   case 7: data &= m_row7->read(); break;
798   case 8: data &= m_row8->read(); break;
799   case 9: data &= m_row9->read(); break;
800   }
801
802   return data;
803}
804
805READ_LINE_MEMBER( pet_state::pia1_cb1_r )
806{
807   return (m_crtc ? m_crtc->vsync_r() : m_sync);
808}
809
810WRITE_LINE_MEMBER( pet_state::pia1_ca2_w )
811{
812   m_ieee->eoi_w(state);
813
814   m_blanktv = state;
815}
816
817const pia6821_interface pia1_intf =
818{
819   DEVCB_DRIVER_MEMBER(pet_state, pia1_pa_r),
820   DEVCB_DRIVER_MEMBER(pet_state, pia1_pb_r),
821   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT_TAG, pet_datassette_port_device, read),
822   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_cb1_r),
823   DEVCB_NULL,
824   DEVCB_NULL,
825   DEVCB_DRIVER_MEMBER(pet_state, pia1_pa_w),
826   DEVCB_NULL,
827   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_ca2_w),
828   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT_TAG, pet_datassette_port_device, motor_w),
829   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_irqa_w),
830   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_irqb_w)
831};
832
833const pia6821_interface pet2001b_pia1_intf =
834{
835   DEVCB_DRIVER_MEMBER(pet_state, pia1_pa_r),
836   DEVCB_DRIVER_MEMBER(pet2001b_state, pia1_pb_r),
837   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT_TAG, pet_datassette_port_device, read),
838   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_cb1_r),
839   DEVCB_NULL,
840   DEVCB_NULL,
841   DEVCB_DRIVER_MEMBER(pet_state, pia1_pa_w),
842   DEVCB_NULL,
843   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_ca2_w),
844   DEVCB_DEVICE_LINE_MEMBER(PET_DATASSETTE_PORT_TAG, pet_datassette_port_device, motor_w),
845   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_irqa_w),
846   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia1_irqb_w)
847};
848
849
850//-------------------------------------------------
851//  pia6821_interface pia2_intf
852//-------------------------------------------------
853
854WRITE_LINE_MEMBER( pet_state::pia2_irqa_w )
855{
856   m_pia2a_irq = state;
857
858   check_interrupts();
859}
860
861WRITE_LINE_MEMBER( pet_state::pia2_irqb_w )
862{
863   m_pia2b_irq = state;
864
865   check_interrupts();
866}
867
868const pia6821_interface pia2_intf =
869{
870   DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_r),
871   DEVCB_NULL,
872   DEVCB_DEVICE_LINE_MEMBER(IEEE488_TAG, ieee488_device, atn_r),
873   DEVCB_DEVICE_LINE_MEMBER(IEEE488_TAG, ieee488_device, srq_r),
874   DEVCB_NULL,
875   DEVCB_NULL,
876   DEVCB_NULL,
877   DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_w),
878   DEVCB_DEVICE_LINE_MEMBER(IEEE488_TAG, ieee488_device, ndac_w),
879   DEVCB_DEVICE_LINE_MEMBER(IEEE488_TAG, ieee488_device, dav_w),
880   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia2_irqa_w),
881   DEVCB_DRIVER_LINE_MEMBER(pet_state, pia2_irqb_w)
882};
883
884
885//-------------------------------------------------
886//  PET_USER_PORT_INTERFACE( user_intf )
887//-------------------------------------------------
888
889static PET_USER_PORT_INTERFACE( user_intf )
890{
891   DEVCB_DEVICE_LINE_MEMBER(M6522_TAG, via6522_device, write_ca1),
892   DEVCB_DEVICE_LINE_MEMBER(M6522_TAG, via6522_device, write_cb2)
893};
894
895
896
897//**************************************************************************
898//  VIDEO
899//**************************************************************************
900
901//-------------------------------------------------
902//  TIMER_DEVICE_CALLBACK( sync_tick )
903//-------------------------------------------------
904
905TIMER_DEVICE_CALLBACK_MEMBER( pet_state::sync_tick )
906{
907   m_sync = !m_sync;
908
909   m_pia1->cb1_w(m_sync);
910}
911
912
913//-------------------------------------------------
914//  SCREEN_UPDATE( pet2001 )
915//-------------------------------------------------
916
917UINT32 pet_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
918{
919   for (int y = 0; y < 200; y++)
920   {
921   for (int sx = 0; sx < 40; sx++)
922   {
923      int sy = y / 8;
924      offs_t video_addr = (sy * 40) + sx;
925      UINT8 lsd = m_video_ram[video_addr];
926
927      int ra = y & 0x07;
928      offs_t char_addr = (m_graphic << 10) | ((lsd & 0x7f) << 3) | ra;
929      UINT8 data = m_char_rom->base()[char_addr];
930
931      for (int x = 0; x < 8; x++, data <<= 1)
932      {
933      int color = (BIT(data, 7) ^ BIT(lsd, 7)) && m_blanktv;
934      bitmap.pix32(y, (sx * 8) + x) = RGB_MONOCHROME_GREEN[color];
935      }
936   }
937   }
938
939   return 0;
940}
941
942
943//-------------------------------------------------
944//  MC6845_INTERFACE( crtc_intf )
945//-------------------------------------------------
946
947static MC6845_UPDATE_ROW( pet80_update_row )
948{
949   pet80_state *state = device->machine().driver_data<pet80_state>();
950   int x = 0;
951   int char_rom_mask = state->m_char_rom->bytes() - 1;
952
953   for (int column = 0; column < x_count; column++)
954   {
955   UINT8 lsd = 0, data = 0;
956   UINT8 rra = ra & 0x07;
957   int no_row = !(BIT(ra, 3) || BIT(ra, 4));
958   int invert = BIT(ma, 12);
959   int chr_option = BIT(ma, 13);
960
961   // even character
962
963   lsd = state->m_video_ram[((ma + column) << 1) & 0x7ff];
964
965   offs_t char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra;
966   data = state->m_char_rom->base()[char_addr & char_rom_mask];
967
968   for (int bit = 0; bit < 8; bit++, data <<= 1)
969   {
970      int video = !((BIT(data, 7) ^ BIT(lsd, 7)) && no_row) ^ invert;
971      bitmap.pix32(y, x++) = RGB_MONOCHROME_GREEN[video];
972   }
973
974   // odd character
975
976   lsd = state->m_video_ram[(((ma + column) << 1) + 1) & 0x7ff];
977
978   char_addr = (chr_option << 11) | (state->m_graphic << 10) | ((lsd & 0x7f) << 3) | rra;
979   data = state->m_char_rom->base()[char_addr & char_rom_mask];
980
981   for (int bit = 0; bit < 8; bit++, data <<= 1)
982   {
983      int video = !((BIT(data, 7) ^ BIT(lsd, 7)) && no_row) ^ invert;
984      bitmap.pix32(y, x++) = RGB_MONOCHROME_GREEN[video];
985   }
986   }
987}
988
989static MC6845_INTERFACE( crtc_intf )
990{
991   SCREEN_TAG,
992   false,
993   2*8,
994   NULL,
995   pet80_update_row,
996   NULL,
997   DEVCB_NULL,
998   DEVCB_NULL,
999   DEVCB_NULL,
1000   DEVCB_DEVICE_LINE_MEMBER(M6520_1_TAG, pia6821_device, cb1_w),
1001   NULL
1002};
1003
1004
1005
1006//**************************************************************************
1007//  MACHINE INITIALIZATION
1008//**************************************************************************
1009
1010//-------------------------------------------------
1011//  MACHINE_START( pet )
1012//-------------------------------------------------
1013
1014MACHINE_START_MEMBER( pet_state, pet )
1015{
1016   // allocate memory
1017   m_video_ram.allocate(m_video_ram_size);
1018
1019   // initialize memory
1020   UINT8 data = 0xff;
1021
1022   for (offs_t offset = 0; offset < m_ram->size(); offset++)
1023   {
1024   m_ram->pointer()[offset] = data;
1025   if (!(offset % 64)) data ^= 0xff;
1026   }
1027
1028   data = 0xff;
1029
1030   for (offs_t offset = 0; offset < m_video_ram_size; offset++)
1031   {
1032   m_video_ram[offset] = data;
1033   if (!(offset % 64)) data ^= 0xff;
1034   }
1035
1036   // state saving
1037   save_item(NAME(m_key));
1038   save_item(NAME(m_sync));
1039   save_item(NAME(m_graphic));
1040   save_item(NAME(m_blanktv));
1041   save_item(NAME(m_via_irq));
1042   save_item(NAME(m_pia1a_irq));
1043   save_item(NAME(m_pia1b_irq));
1044   save_item(NAME(m_pia2a_irq));
1045   save_item(NAME(m_pia2b_irq));
1046   save_item(NAME(m_exp_irq));
1047}
1048
1049
1050//-------------------------------------------------
1051//  MACHINE_START( pet2001 )
1052//-------------------------------------------------
1053
1054MACHINE_START_MEMBER( pet_state, pet2001 )
1055{
1056   m_video_ram_size = 0x400;
1057
1058   MACHINE_START_CALL_MEMBER(pet);
1059}
1060
1061
1062//-------------------------------------------------
1063//  MACHINE_RESET( pet )
1064//-------------------------------------------------
1065
1066MACHINE_RESET_MEMBER( pet_state, pet )
1067{
1068   m_maincpu->reset();
1069
1070   m_via->reset();
1071   m_pia1->reset();
1072   m_pia2->reset();
1073
1074   m_exp->reset();
1075}
1076
1077
1078//-------------------------------------------------
1079//  MACHINE_START( pet80 )
1080//-------------------------------------------------
1081
1082MACHINE_START_MEMBER( pet80_state, pet80 )
1083{
1084   m_video_ram_size = 0x800;
1085
1086   MACHINE_START_CALL_MEMBER(pet);
1087}
1088
1089
1090//-------------------------------------------------
1091//  MACHINE_RESET( pet80 )
1092//-------------------------------------------------
1093
1094MACHINE_RESET_MEMBER( pet80_state, pet80 )
1095{
1096   MACHINE_RESET_CALL_MEMBER(pet);
1097
1098   m_crtc->reset();
1099}
1100
1101
1102
1103//**************************************************************************
1104//  MACHINE DRIVERS
1105//**************************************************************************
1106
1107//-------------------------------------------------
1108//  MACHINE_CONFIG( 4k )
1109//-------------------------------------------------
1110
1111static MACHINE_CONFIG_FRAGMENT( 4k )
1112   MCFG_RAM_ADD(RAM_TAG)
1113   MCFG_RAM_DEFAULT_SIZE("4K")
1114   MCFG_RAM_EXTRA_OPTIONS("8K, 16K,32K")
1115MACHINE_CONFIG_END
1116
1117
1118//-------------------------------------------------
1119//  MACHINE_CONFIG( 8k )
1120//-------------------------------------------------
1121
1122static MACHINE_CONFIG_FRAGMENT( 8k )
1123   MCFG_RAM_ADD(RAM_TAG)
1124   MCFG_RAM_DEFAULT_SIZE("8K")
1125   MCFG_RAM_EXTRA_OPTIONS("16K,32K")
1126MACHINE_CONFIG_END
1127
1128
1129//-------------------------------------------------
1130//  MACHINE_CONFIG( 8k )
1131//-------------------------------------------------
1132
1133static MACHINE_CONFIG_FRAGMENT( 16k )
1134   MCFG_RAM_ADD(RAM_TAG)
1135   MCFG_RAM_DEFAULT_SIZE("16K")
1136   MCFG_RAM_EXTRA_OPTIONS("32K")
1137MACHINE_CONFIG_END
1138
1139
1140//-------------------------------------------------
1141//  MACHINE_CONFIG( 8k )
1142//-------------------------------------------------
1143
1144static MACHINE_CONFIG_FRAGMENT( 32k )
1145   MCFG_RAM_ADD(RAM_TAG)
1146   MCFG_RAM_DEFAULT_SIZE("32K")
1147MACHINE_CONFIG_END
1148
1149
1150//-------------------------------------------------
1151//  MACHINE_CONFIG( pet )
1152//-------------------------------------------------
1153
1154static MACHINE_CONFIG_START( pet, pet_state )
1155   MCFG_MACHINE_START_OVERRIDE(pet_state, pet2001)
1156   MCFG_MACHINE_RESET_OVERRIDE(pet_state, pet)
1157
1158   // basic machine hardware
1159   MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_8MHz/8)
1160   MCFG_CPU_PROGRAM_MAP(pet2001_mem)
1161
1162   // video hardware
1163   MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
1164   MCFG_SCREEN_REFRESH_RATE(60)
1165   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
1166   MCFG_SCREEN_SIZE(320, 200)
1167   MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 200-1)
1168   MCFG_SCREEN_UPDATE_DRIVER(pet_state, screen_update)
1169   MCFG_TIMER_DRIVER_ADD_PERIODIC("sync_timer", pet_state, sync_tick, attotime::from_hz(120))
1170
1171   // devices
1172   MCFG_VIA6522_ADD(M6522_TAG, XTAL_8MHz/8, via_intf)
1173   MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf)
1174   MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf)
1175   MCFG_CBM_IEEE488_ADD("c4040")
1176   MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, cb1_w))
1177   MCFG_IEEE488_ATN_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, ca1_w))
1178   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n", NULL, DEVWRITELINE(M6520_1_TAG, pia6821_device, ca1_w))
1179   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
1180   MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_8MHz/8, pet_expansion_cards, NULL, NULL)
1181   MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
1182   MCFG_PET_USER_PORT_ADD(PET_USER_PORT_TAG, user_intf, pet_user_port_cards, NULL, NULL)
1183   MCFG_QUICKLOAD_ADD("quickload", cbm_pet, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
1184
1185   // software lists
1186   MCFG_SOFTWARE_LIST_ADD("cass_list", "pet_cass")
1187   MCFG_SOFTWARE_LIST_ADD("flop_list", "pet_flop")
1188MACHINE_CONFIG_END
1189
1190
1191//-------------------------------------------------
1192//  MACHINE_CONFIG( pet2001 )
1193//-------------------------------------------------
1194
1195static MACHINE_CONFIG_DERIVED( pet2001, pet )
1196   MCFG_FRAGMENT_ADD(4k)
1197MACHINE_CONFIG_END
1198
1199
1200//-------------------------------------------------
1201//  MACHINE_CONFIG( pet20018 )
1202//-------------------------------------------------
1203
1204static MACHINE_CONFIG_DERIVED( pet20018, pet )
1205   MCFG_FRAGMENT_ADD(8k)
1206MACHINE_CONFIG_END
1207
1208
1209//-------------------------------------------------
1210//  MACHINE_CONFIG( pet2001n )
1211//-------------------------------------------------
1212
1213static MACHINE_CONFIG_DERIVED( pet2001n, pet )
1214   MCFG_CARTSLOT_ADD("9000")
1215   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
1216   MCFG_CARTSLOT_INTERFACE("pet_9000_rom")
1217
1218   MCFG_CARTSLOT_ADD("a000")
1219   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
1220   MCFG_CARTSLOT_INTERFACE("pet_a000_rom")
1221
1222   MCFG_CARTSLOT_ADD("b000")
1223   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
1224   MCFG_CARTSLOT_INTERFACE("pet_b000_rom")
1225
1226   MCFG_SOFTWARE_LIST_ADD("rom_list", "pet_rom")
1227MACHINE_CONFIG_END
1228
1229
1230//-------------------------------------------------
1231//  MACHINE_CONFIG( pet2001n8 )
1232//-------------------------------------------------
1233
1234static MACHINE_CONFIG_DERIVED( pet2001n8, pet2001n )
1235   MCFG_FRAGMENT_ADD(8k)
1236MACHINE_CONFIG_END
1237
1238
1239//-------------------------------------------------
1240//  MACHINE_CONFIG( pet2001n16 )
1241//-------------------------------------------------
1242
1243static MACHINE_CONFIG_DERIVED( pet2001n16, pet2001n )
1244   MCFG_FRAGMENT_ADD(16k)
1245MACHINE_CONFIG_END
1246
1247
1248//-------------------------------------------------
1249//  MACHINE_CONFIG( pet2001n32 )
1250//-------------------------------------------------
1251
1252static MACHINE_CONFIG_DERIVED( pet2001n32, pet2001n )
1253   MCFG_FRAGMENT_ADD(32k)
1254MACHINE_CONFIG_END
1255
1256
1257//-------------------------------------------------
1258//  MACHINE_CONFIG( cbm3008 )
1259//-------------------------------------------------
1260
1261static MACHINE_CONFIG_DERIVED( cbm3008, pet2001n )
1262   MCFG_FRAGMENT_ADD(8k)
1263MACHINE_CONFIG_END
1264
1265
1266//-------------------------------------------------
1267//  MACHINE_CONFIG( cbm3016 )
1268//-------------------------------------------------
1269
1270static MACHINE_CONFIG_DERIVED( cbm3016, pet2001n )
1271   MCFG_FRAGMENT_ADD(16k)
1272MACHINE_CONFIG_END
1273
1274
1275//-------------------------------------------------
1276//  MACHINE_CONFIG( cbm3032 )
1277//-------------------------------------------------
1278
1279static MACHINE_CONFIG_DERIVED( cbm3032, pet2001n )
1280   MCFG_FRAGMENT_ADD(32k)
1281MACHINE_CONFIG_END
1282
1283
1284//-------------------------------------------------
1285//  MACHINE_CONFIG( pet2001b )
1286//-------------------------------------------------
1287
1288static MACHINE_CONFIG_DERIVED_CLASS( pet2001b, pet2001n, pet2001b_state )
1289   MCFG_DEVICE_REMOVE(M6520_1_TAG)
1290   MCFG_PIA6821_ADD(M6520_1_TAG, pet2001b_pia1_intf)
1291MACHINE_CONFIG_END
1292
1293
1294//-------------------------------------------------
1295//  MACHINE_CONFIG( pet2001b8 )
1296//-------------------------------------------------
1297
1298static MACHINE_CONFIG_DERIVED( pet2001b8, pet2001b )
1299   MCFG_FRAGMENT_ADD(8k)
1300MACHINE_CONFIG_END
1301
1302
1303//-------------------------------------------------
1304//  MACHINE_CONFIG( pet2001b16 )
1305//-------------------------------------------------
1306
1307static MACHINE_CONFIG_DERIVED( pet2001b16, pet2001b )
1308   MCFG_FRAGMENT_ADD(16k)
1309MACHINE_CONFIG_END
1310
1311
1312//-------------------------------------------------
1313//  MACHINE_CONFIG( pet2001b32 )
1314//-------------------------------------------------
1315
1316static MACHINE_CONFIG_DERIVED( pet2001b32, pet2001b )
1317   MCFG_FRAGMENT_ADD(32k)
1318MACHINE_CONFIG_END
1319
1320
1321//-------------------------------------------------
1322//  MACHINE_CONFIG( cbm3032b )
1323//-------------------------------------------------
1324
1325static MACHINE_CONFIG_DERIVED( cbm3032b, pet2001b )
1326   MCFG_FRAGMENT_ADD(32k)
1327MACHINE_CONFIG_END
1328
1329
1330//-------------------------------------------------
1331//  MACHINE_CONFIG( pet4000 )
1332//-------------------------------------------------
1333
1334static MACHINE_CONFIG_DERIVED( pet4000, pet2001n )
1335   MCFG_DEVICE_REMOVE("b000")
1336MACHINE_CONFIG_END
1337
1338
1339//-------------------------------------------------
1340//  MACHINE_CONFIG( pet4016 )
1341//-------------------------------------------------
1342
1343static MACHINE_CONFIG_DERIVED( pet4016, pet4000 )
1344   // RAM not upgradeable
1345   MCFG_RAM_ADD(RAM_TAG)
1346   MCFG_RAM_DEFAULT_SIZE("16K")
1347MACHINE_CONFIG_END
1348
1349
1350//-------------------------------------------------
1351//  MACHINE_CONFIG( pet4032 )
1352//-------------------------------------------------
1353
1354static MACHINE_CONFIG_DERIVED( pet4032, pet4000 )
1355   MCFG_FRAGMENT_ADD(32k)
1356MACHINE_CONFIG_END
1357
1358
1359//-------------------------------------------------
1360//  MACHINE_CONFIG( cbm4000 )
1361//-------------------------------------------------
1362
1363static MACHINE_CONFIG_DERIVED( cbm4000, pet2001n )
1364   MCFG_DEVICE_REMOVE("b000")
1365MACHINE_CONFIG_END
1366
1367
1368//-------------------------------------------------
1369//  MACHINE_CONFIG( cbm4016 )
1370//-------------------------------------------------
1371
1372static MACHINE_CONFIG_DERIVED( cbm4016, cbm4000 )
1373   // RAM not upgradeable
1374   MCFG_RAM_ADD(RAM_TAG)
1375   MCFG_RAM_DEFAULT_SIZE("16K")
1376MACHINE_CONFIG_END
1377
1378
1379//-------------------------------------------------
1380//  MACHINE_CONFIG( cbm4032 )
1381//-------------------------------------------------
1382
1383static MACHINE_CONFIG_DERIVED( cbm4032, cbm4000 )
1384   MCFG_FRAGMENT_ADD(32k)
1385MACHINE_CONFIG_END
1386
1387
1388//-------------------------------------------------
1389//  MACHINE_CONFIG( pet4000b )
1390//-------------------------------------------------
1391
1392static MACHINE_CONFIG_DERIVED( pet4000b, pet2001b )
1393   MCFG_DEVICE_REMOVE("b000")
1394MACHINE_CONFIG_END
1395
1396
1397//-------------------------------------------------
1398//  MACHINE_CONFIG( pet4032b )
1399//-------------------------------------------------
1400
1401static MACHINE_CONFIG_DERIVED( pet4032b, pet4000b )
1402   MCFG_FRAGMENT_ADD(32k)
1403MACHINE_CONFIG_END
1404
1405
1406//-------------------------------------------------
1407//  MACHINE_CONFIG( cbm4000b )
1408//-------------------------------------------------
1409
1410static MACHINE_CONFIG_DERIVED( cbm4000b, pet2001b )
1411   MCFG_DEVICE_REMOVE("b000")
1412MACHINE_CONFIG_END
1413
1414
1415//-------------------------------------------------
1416//  MACHINE_CONFIG( cbm4032b )
1417//-------------------------------------------------
1418
1419static MACHINE_CONFIG_DERIVED( cbm4032b, cbm4000b )
1420   MCFG_FRAGMENT_ADD(32k)
1421MACHINE_CONFIG_END
1422
1423
1424//-------------------------------------------------
1425//  MACHINE_CONFIG( pet80 )
1426//-------------------------------------------------
1427
1428static MACHINE_CONFIG_START( pet80, pet80_state )
1429   MCFG_MACHINE_START_OVERRIDE(pet80_state, pet80)
1430   MCFG_MACHINE_RESET_OVERRIDE(pet80_state, pet80)
1431
1432   // basic machine hardware
1433   MCFG_CPU_ADD(M6502_TAG, M6502, XTAL_16MHz/16)
1434   MCFG_CPU_PROGRAM_MAP(pet2001_mem)
1435
1436   // video hardware
1437   MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
1438   MCFG_SCREEN_REFRESH_RATE(60)
1439   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
1440   MCFG_SCREEN_SIZE(640, 250)
1441   MCFG_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 250 - 1)
1442   MCFG_SCREEN_UPDATE_DEVICE(MC6845_TAG, mc6845_device, screen_update)
1443   MCFG_MC6845_ADD(MC6845_TAG, MC6845, XTAL_16MHz/16, crtc_intf)
1444
1445   // sound hardware
1446   MCFG_SPEAKER_STANDARD_MONO("mono")
1447   MCFG_SOUND_ADD(SPEAKER_TAG, SPEAKER_SOUND, 0)
1448   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1449
1450   // devices
1451   MCFG_VIA6522_ADD(M6522_TAG, XTAL_16MHz/16, via_intf)
1452   MCFG_PIA6821_ADD(M6520_1_TAG, pia1_intf)
1453   MCFG_PIA6821_ADD(M6520_2_TAG, pia2_intf)
1454   MCFG_CBM_IEEE488_ADD("c8050")
1455   MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, cb1_w))
1456   MCFG_IEEE488_ATN_CALLBACK(DEVWRITELINE(M6520_2_TAG, pia6821_device, ca1_w))
1457   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c2n", NULL, DEVWRITELINE(M6520_1_TAG, pia6821_device, ca1_w))
1458   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT2_TAG, cbm_datassette_devices, NULL, NULL, DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
1459   MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, NULL, NULL)
1460   MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
1461   MCFG_PET_USER_PORT_ADD(PET_USER_PORT_TAG, user_intf, pet_user_port_cards, NULL, NULL)
1462   MCFG_QUICKLOAD_ADD("quickload", cbm_pet, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
1463
1464   // software lists
1465   MCFG_SOFTWARE_LIST_ADD("cass_list", "pet_cass")
1466   MCFG_SOFTWARE_LIST_ADD("flop_list", "pet_flop")
1467MACHINE_CONFIG_END
1468
1469
1470//-------------------------------------------------
1471//  MACHINE_CONFIG( pet8032 )
1472//-------------------------------------------------
1473
1474static MACHINE_CONFIG_DERIVED( pet8032, pet80 )
1475   MCFG_FRAGMENT_ADD(32k)
1476MACHINE_CONFIG_END
1477
1478
1479//-------------------------------------------------
1480//  MACHINE_CONFIG( superpet )
1481//-------------------------------------------------
1482
1483static MACHINE_CONFIG_DERIVED_CLASS( superpet, pet8032, superpet_state )
1484   MCFG_DEVICE_REMOVE(PET_EXPANSION_SLOT_TAG)
1485   MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, "superpet", NULL)
1486   MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
1487
1488   MCFG_SOFTWARE_LIST_ADD("flop_list2", "superpet_flop")
1489MACHINE_CONFIG_END
1490
1491
1492//-------------------------------------------------
1493//  MACHINE_CONFIG( cbm8096 )
1494//-------------------------------------------------
1495
1496static MACHINE_CONFIG_DERIVED_CLASS( cbm8096, pet80, cbm8096_state )
1497   MCFG_DEVICE_REMOVE(PET_EXPANSION_SLOT_TAG)
1498   MCFG_PET_EXPANSION_SLOT_ADD(PET_EXPANSION_SLOT_TAG, XTAL_16MHz/16, pet_expansion_cards, "64k", NULL)
1499   MCFG_PET_EXPANSION_SLOT_DMA_CALLBACKS(READ8(pet_state, read), WRITE8(pet_state, write))
1500
1501   MCFG_RAM_ADD(RAM_TAG)
1502   MCFG_RAM_DEFAULT_SIZE("96K")
1503
1504   MCFG_SOFTWARE_LIST_ADD("flop_list2", "cbm8096_flop")
1505MACHINE_CONFIG_END
1506
1507
1508//-------------------------------------------------
1509//  MACHINE_CONFIG( cbm8296 )
1510//-------------------------------------------------
1511
1512static MACHINE_CONFIG_DERIVED_CLASS( cbm8296, pet80, cbm8296_state )
1513   MCFG_RAM_ADD(RAM_TAG)
1514   MCFG_RAM_DEFAULT_SIZE("128K")
1515
1516   MCFG_SOFTWARE_LIST_ADD("flop_list2", "cbm8296_flop")
1517MACHINE_CONFIG_END
1518
1519
1520//-------------------------------------------------
1521//  MACHINE_CONFIG( cbm8296d )
1522//-------------------------------------------------
1523
1524static MACHINE_CONFIG_DERIVED( cbm8296d, cbm8296 )
1525MACHINE_CONFIG_END
1526
1527
1528
1529//**************************************************************************
1530//  ROMS
1531//**************************************************************************
1532
1533//-------------------------------------------------
1534//  ROM( pet2001 )
1535//-------------------------------------------------
1536
1537ROM_START( pet2001 )
1538   ROM_REGION( 0x7000, M6502_TAG, 0 )
1539   ROM_DEFAULT_BIOS( "basic1r" )
1540   ROM_SYSTEM_BIOS( 0, "basic1o", "Original" )
1541   ROMX_LOAD( "901447-01.h1", 0x3000, 0x0800, CRC(a055e33a) SHA1(831db40324113ee996c434d38b4add3fd1f820bd), ROM_BIOS(1) )
1542   ROM_SYSTEM_BIOS( 1, "basic1r", "Revised" )
1543   ROMX_LOAD( "901447-09.h1", 0x3000, 0x0800, CRC(03cf16d0) SHA1(1330580c0614d3556a389da4649488ba04a60908), ROM_BIOS(2) )
1544   ROM_LOAD( "901447-02.h5", 0x3800, 0x0800, CRC(69fd8a8f) SHA1(70c0f4fa67a70995b168668c957c3fcf2c8641bd) )
1545   ROM_LOAD( "901447-03.h2", 0x4000, 0x0800, CRC(d349f2d4) SHA1(4bf2c20c51a63d213886957485ebef336bb803d0) )
1546   ROM_LOAD( "901447-04.h6", 0x4800, 0x0800, CRC(850544eb) SHA1(d293972d529023d8fd1f493149e4777b5c253a69) )
1547   ROM_LOAD( "901447-05.h3", 0x5000, 0x0800, CRC(9e1c5cea) SHA1(f02f5fb492ba93dbbd390f24c10f7a832dec432a) )
1548   ROM_LOAD( "901447-06.h4", 0x6000, 0x0800, CRC(661a814a) SHA1(960717282878e7de893d87242ddf9d1512be162e) )
1549   ROM_LOAD( "901447-07.h7", 0x6800, 0x0800, CRC(c4f47ad1) SHA1(d440f2510bc52e20c3d6bc8b9ded9cea7f462a9c) )
1550
1551   ROM_REGION( 0x800, "charom", 0 )
1552   ROM_LOAD( "901447-08.a2", 0x000, 0x800, CRC(54f32f45) SHA1(3e067cc621e4beafca2b90cb8f6dba975df2855b) )
1553ROM_END
1554
1555#define rom_pet20018 rom_pet2001
1556
1557
1558//-------------------------------------------------
1559//  ROM( pet2001n )
1560//-------------------------------------------------
1561
1562ROM_START( pet2001n )
1563   ROM_REGION( 0x7000, M6502_TAG, 0 )
1564   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1565   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1566   ROM_CART_LOAD( "b000", 0x2000, 0x1000, ROM_MIRROR )
1567   ROM_LOAD( "901465-01.ud6", 0x3000, 0x1000, CRC(63a7fe4a) SHA1(3622111f486d0e137022523657394befa92bde44) )   // BASIC 2
1568   ROM_LOAD( "901465-02.ud7", 0x4000, 0x1000, CRC(ae4cb035) SHA1(1bc0ebf27c9bb62ad71bca40313e874234cab6ac) )   // BASIC 2
1569   ROM_LOAD( "901447-24.ud8", 0x5000, 0x0800, CRC(e459ab32) SHA1(5e5502ce32f5a7e387d65efe058916282041e54b) )   // Screen Editor (40 columns, no CRTC, Normal Keyb)
1570   ROM_LOAD( "901465-03.ud9", 0x6000, 0x1000, CRC(f02238e2) SHA1(38742bdf449f629bcba6276ef24d3daeb7da6e84) )   // Kernal
1571
1572   ROM_REGION( 0x800, "charom", 0 )
1573   ROM_LOAD( "901447-10.uf10", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )   // Character Generator
1574ROM_END
1575
1576#define rom_pet2001n16 rom_pet2001n
1577#define rom_pet2001n32 rom_pet2001n
1578#define rom_cbm3008 rom_pet2001n
1579#define rom_cbm3016 rom_pet2001n
1580#define rom_cbm3032 rom_pet2001n
1581
1582
1583//-------------------------------------------------
1584//  ROM( pet2001b )
1585//-------------------------------------------------
1586
1587ROM_START( pet2001b )
1588   ROM_REGION( 0x7000, M6502_TAG, 0 )
1589   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1590   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1591   ROM_CART_LOAD( "b000", 0x2000, 0x1000, ROM_MIRROR )
1592   ROM_LOAD( "901465-01.ud6", 0x3000, 0x1000, CRC(63a7fe4a) SHA1(3622111f486d0e137022523657394befa92bde44) )   // BASIC 2
1593   ROM_LOAD( "901465-02.ud7", 0x4000, 0x1000, CRC(ae4cb035) SHA1(1bc0ebf27c9bb62ad71bca40313e874234cab6ac) )   // BASIC 2
1594   ROM_LOAD( "901474-01.ud8", 0x5000, 0x0800, CRC(05db957e) SHA1(174ace3a8c0348cd21d39cc864e2adc58b0101a9) )   // Screen Editor (40 columns, no CRTC, Business Keyb)
1595   ROM_LOAD( "901465-03.ud9", 0x6000, 0x1000, CRC(f02238e2) SHA1(38742bdf449f629bcba6276ef24d3daeb7da6e84) )   // Kernal
1596
1597   ROM_REGION( 0x800, "charom", 0 )
1598   ROM_LOAD( "901447-10.uf10", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )   // Character Generator
1599ROM_END
1600
1601#define rom_pet2001b16 rom_pet2001b
1602#define rom_pet2001b32 rom_pet2001b
1603#define rom_cbm3032b rom_pet2001b
1604
1605
1606//-------------------------------------------------
1607//  ROM( pet4016 )
1608//-------------------------------------------------
1609
1610ROM_START( pet4016 )
1611   ROM_REGION( 0x7000, M6502_TAG, 0 )
1612   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1613   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1614   ROM_DEFAULT_BIOS( "basic4r" )
1615   ROM_SYSTEM_BIOS( 0, "basic4", "Original" )
1616   ROMX_LOAD( "901465-19.ud5", 0x2000, 0x1000, CRC(3a5f5721) SHA1(bc2b7c99495fea3eda950ee9e3d6cabe448a452b), ROM_BIOS(1) )
1617   ROM_SYSTEM_BIOS( 1, "basic4r", "Revised" )
1618   ROMX_LOAD( "901465-23.ud5", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc), ROM_BIOS(2) ) // BASIC 4
1619   ROM_LOAD( "901465-20.ud6", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1620   ROM_LOAD( "901465-21.ud7", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1621   ROM_LOAD( "901499-01.ud7", 0x5000, 0x0800, CRC(5f85bdf8) SHA1(8cbf086c1ce4dfb2a2fe24c47476dfb878493dee) )   // Screen Editor (40 columns, CRTC 60Hz, Normal Keyb?)
1622   ROM_LOAD( "901447-29.ud8", 0x5000, 0x0800, CRC(e5714d4c) SHA1(e88f56e5c54b0e8d8d4e8cb39a4647c803c1f51c) )   // Screen Editor (40 columns, no CRTC, Normal Keyb)
1623   ROM_LOAD( "901465-22.ud9", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1624
1625   ROM_REGION( 0x800, "charom", 0 )
1626   ROM_LOAD( "901447-10.uf10", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )   // Character Generator
1627ROM_END
1628
1629#define rom_pet4032 rom_pet4016
1630
1631
1632//-------------------------------------------------
1633//  ROM( cbm4016 )
1634//-------------------------------------------------
1635
1636ROM_START( cbm4016 )
1637   ROM_REGION( 0x7000, M6502_TAG, 0 )
1638   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1639   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1640   ROM_DEFAULT_BIOS( "basic4r" )
1641   ROM_SYSTEM_BIOS( 0, "basic4", "Original" )
1642   ROMX_LOAD( "901465-19.ud5", 0x2000, 0x1000, CRC(3a5f5721) SHA1(bc2b7c99495fea3eda950ee9e3d6cabe448a452b), ROM_BIOS(1) )
1643   ROM_SYSTEM_BIOS( 1, "basic4r", "Revised" )
1644   ROMX_LOAD( "901465-23.ud5", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc), ROM_BIOS(2) ) // BASIC 4
1645   ROM_LOAD( "901465-20.ud6", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1646   ROM_LOAD( "901465-21.ud7", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1647   ROM_LOAD( "901498-01.ud7", 0x5000, 0x0800, CRC(3370e359) SHA1(05af284c914d53a52987b5f602466de75765f650) )   // Screen Editor (40 columns, CRTC 50Hz, Normal Keyb?)
1648   ROM_LOAD( "901447-29.ud8", 0x5000, 0x0800, CRC(e5714d4c) SHA1(e88f56e5c54b0e8d8d4e8cb39a4647c803c1f51c) )   // Screen Editor (40 columns, no CRTC, Normal Keyb)
1649   ROM_LOAD( "901465-22.ud9", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1650
1651   ROM_REGION( 0x800, "charom", 0 )
1652   ROM_LOAD( "901447-10.uf10", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )   // Character Generator
1653ROM_END
1654
1655#define rom_cbm4032 rom_cbm4016
1656
1657
1658//-------------------------------------------------
1659//  ROM( pet4032b )
1660//-------------------------------------------------
1661
1662ROM_START( pet4032b )
1663   ROM_REGION( 0x7000, M6502_TAG, 0 )
1664   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1665   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1666   ROM_DEFAULT_BIOS( "basic4r" )
1667   ROM_SYSTEM_BIOS( 0, "basic4", "Original" )
1668   ROMX_LOAD( "901465-19.ud5", 0x2000, 0x1000, CRC(3a5f5721) SHA1(bc2b7c99495fea3eda950ee9e3d6cabe448a452b), ROM_BIOS(1) )
1669   ROM_SYSTEM_BIOS( 1, "basic4r", "Revised" )
1670   ROMX_LOAD( "901465-23.ud5", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc), ROM_BIOS(2) ) // BASIC 4
1671   ROM_LOAD( "901465-20.ud6", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1672   ROM_LOAD( "901465-21.ud7", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1673   ROM_LOAD( "901474-02.ud8", 0x5000, 0x0800, CRC(75ff4af7) SHA1(0ca5c4e8f532f914cb0bf86ea9900f20f0a655ce) )   // Screen Editor (40 columns, no CRTC, Business Keyb)
1674   ROM_LOAD( "901465-22.ud9", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1675
1676   ROM_REGION( 0x800, "charom", 0 )
1677   ROM_LOAD( "901447-10.uf10", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )   // Character Generator
1678ROM_END
1679
1680#define rom_cbm4032b rom_pet4032b
1681
1682
1683//-------------------------------------------------
1684//  ROM( pet8032 )
1685//-------------------------------------------------
1686
1687ROM_START( pet8032 )
1688   ROM_REGION( 0x7000, M6502_TAG, 0 )
1689   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1690   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1691   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1692   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1693   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1694   ROM_LOAD( "901474-03.ud7", 0x5000, 0x0800, CRC(5674dd5e) SHA1(c605fa343fd77c73cbe1e0e9567e2f014f6e7e30) )   // Screen Editor (80 columns, CRTC 60Hz, Business Keyb)
1695   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1696
1697   ROM_REGION( 0x800, "charom", 0 )
1698   ROM_LOAD( "901447-10.ua3", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )    // Character Generator
1699ROM_END
1700
1701
1702//-------------------------------------------------
1703//  ROM( cbm8032 )
1704//-------------------------------------------------
1705
1706ROM_START( cbm8032 )
1707   ROM_REGION( 0x7000, M6502_TAG, 0 )
1708   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1709   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1710   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1711   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1712   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1713   ROM_LOAD( "901474-04.ud7", 0x5000, 0x0800, CRC(abb000e7) SHA1(66887061b6c4ebef7d6efb90af9afd5e2c3b08ba) )   // Screen Editor (80 columns, CRTC 50Hz, Business Keyb)
1714   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1715
1716   ROM_REGION( 0x800, "charom", 0 )
1717   ROM_LOAD( "901447-10.ua3", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )    // Character Generator
1718ROM_END
1719
1720#define rom_cbm8096 rom_cbm8032
1721
1722
1723//-------------------------------------------------
1724//  ROM( cbm8032_de )
1725//-------------------------------------------------
1726
1727ROM_START( cbm8032_de )
1728   ROM_REGION( 0x7000, M6502_TAG, 0 )
1729   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1730   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1731   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1732   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1733   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1734   ROM_LOAD( "german.bin",    0x5000, 0x0800, CRC(1c1e597d) SHA1(7ac75ed73832847623c9f4f197fe7fb1a73bb41c) )
1735   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1736
1737   ROM_REGION( 0x800, "charom", 0 )
1738   ROM_LOAD( "chargen.de", 0x0000, 0x800, CRC(3bb8cb87) SHA1(a4f0df13473d7f9cd31fd62cfcab11318e2fb1dc) )
1739ROM_END
1740
1741
1742//-------------------------------------------------
1743//  ROM( cbm8032_se )
1744//-------------------------------------------------
1745
1746ROM_START( cbm8032_se )
1747   ROM_REGION( 0x7000, M6502_TAG, 0 )
1748   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1749   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1750   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1751   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1752   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1753   ROM_LOAD( "8000-ud7, screen-04.ud7", 0x5000, 0x0800, CRC(75901dd7) SHA1(2ead0d83255a344a42bb786428353ca48d446d03) )
1754   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1755
1756   ROM_REGION( 0x800, "charom", 0 )
1757   ROM_LOAD( "901447-14.ua3", 0x0000, 0x800, CRC(48c77d29) SHA1(aa7c8ff844d16ec05e2b32acc586c58d9e35388c) )    // Character Generator
1758ROM_END
1759
1760
1761//-------------------------------------------------
1762//  ROM( superpet )
1763//-------------------------------------------------
1764
1765ROM_START( superpet )
1766   ROM_REGION( 0x7000, M6502_TAG, 0 )
1767   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1768   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1769   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1770   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1771   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1772   ROM_LOAD( "901474-04.ud7", 0x5000, 0x0800, CRC(abb000e7) SHA1(66887061b6c4ebef7d6efb90af9afd5e2c3b08ba) )   // Screen Editor (80 columns, CRTC 50Hz, Business Keyb)
1773   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1774
1775   ROM_REGION( 0x1000, "charom", 0 )
1776   ROM_LOAD( "901640-01.ua3", 0x0000, 0x1000, CRC(ee8229c4) SHA1(bf346f11595a3e65e55d6aeeaa2c0cec807b66c7) )
1777ROM_END
1778
1779#define rom_mmf9000 rom_superpet
1780
1781
1782//-------------------------------------------------
1783//  ROM( mmf9000_se )
1784//-------------------------------------------------
1785
1786ROM_START( mmf9000_se )
1787   ROM_REGION( 0x7000, M6502_TAG, 0 )
1788   ROM_CART_LOAD( "9000", 0x0000, 0x1000, ROM_MIRROR )
1789   ROM_CART_LOAD( "a000", 0x1000, 0x1000, ROM_MIRROR )
1790   ROM_LOAD( "901465-23.ud10", 0x2000, 0x1000, CRC(ae3deac0) SHA1(975ee25e28ff302879424587e5fb4ba19f403adc) )  // BASIC 4
1791   ROM_LOAD( "901465-20.ud9", 0x3000, 0x1000, CRC(0fc17b9c) SHA1(242f98298931d21eaacb55fe635e44b7fc192b0a) )   // BASIC 4
1792   ROM_LOAD( "901465-21.ud8", 0x4000, 0x1000, CRC(36d91855) SHA1(1bb236c72c726e8fb029c68f9bfa5ee803faf0a8) )   // BASIC 4
1793   ROM_LOAD( "8000-ud7, screen-04.ud7", 0x5000, 0x0800, CRC(75901dd7) SHA1(2ead0d83255a344a42bb786428353ca48d446d03) )
1794   ROM_LOAD( "901465-22.ud6", 0x6000, 0x1000, CRC(cc5298a1) SHA1(96a0fa56e0c937da92971d9c99d504e44e898806) )   // Kernal
1795
1796   ROM_REGION( 0x1000, "charom", 0 )
1797   ROM_LOAD( "901640-01 skand.gen.ua3", 0x0000, 0x1000, CRC(da1cd630) SHA1(35f472114ff001259bdbae073ae041b0759e32cb) )
1798ROM_END
1799
1800
1801//-------------------------------------------------
1802//  ROM( cbm8296 )
1803//-------------------------------------------------
1804
1805ROM_START( cbm8296 )
1806   ROM_REGION( 0x7000, M6502_TAG, 0 )
1807   ROM_LOAD( "324992-02.ue10", 0x0000, 0x1000, CRC(2bac5baf) SHA1(03aa866e4bc4e38e95983a6a82ba925e710bede8) ) // HiRes Emulator
1808   ROM_LOAD( "324993-02.ue9", 0x1000, 0x1000, CRC(57444531) SHA1(74aa39888a6bc95762de767fce883203daca0d34) ) // HiRes BASIC
1809   ROM_LOAD( "324746-01.ue7", 0x2000, 0x3000, CRC(7935b528) SHA1(5ab17ee70467152bf2130e3f48a2aa81e9df93c9) )   // BASIC 4
1810   ROM_CONTINUE(              0x6000, 0x1000 )
1811   ROM_LOAD( "8296.ue8", 0x5000, 0x800, CRC(a3475de6) SHA1(b715db83fd26458dfd254bef5c4aae636753f7f5) )
1812
1813   ROM_REGION( 0x1000, "charom", 0 )
1814   ROM_LOAD( "901447-10.uc5", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )    // Character Generator
1815
1816   ROM_REGION( 0x20, "prom", 0 )
1817   ROM_LOAD( "74s288.uc2", 0x00, 0x20, CRC(06030665) SHA1(19dc91ca49ecc20e66c646ba480d2c3bc70a62e6) ) // video/RAM timing
1818
1819   ROM_REGION( 0xf5, "pla1", 0 )
1820   ROM_LOAD( "324744-01.ue6", 0x00, 0xf5, NO_DUMP ) // 8700-009
1821
1822   ROM_REGION( 0xf5, "pla2", 0 )
1823   ROM_LOAD( "324745-01.ue5", 0x00, 0xf5, NO_DUMP ) // 8700-008
1824ROM_END
1825
1826
1827//-------------------------------------------------
1828//  ROM( cbm8296d )
1829//-------------------------------------------------
1830
1831ROM_START( cbm8296d )
1832   ROM_REGION( 0x7000, M6502_TAG, 0 )
1833   ROM_LOAD( "324992-02.ue10", 0x0000, 0x1000, CRC(2bac5baf) SHA1(03aa866e4bc4e38e95983a6a82ba925e710bede8) ) // HiRes Emulator
1834   ROM_LOAD( "324993-02.ue9", 0x1000, 0x1000, CRC(57444531) SHA1(74aa39888a6bc95762de767fce883203daca0d34) ) // HiRes BASIC
1835   ROM_LOAD( "324746-01.ue7", 0x2000, 0x3000, CRC(7935b528) SHA1(5ab17ee70467152bf2130e3f48a2aa81e9df93c9) )   // BASIC 4
1836   ROM_CONTINUE(              0x6000, 0x1000 )
1837   ROM_LOAD( "324243-01.ue8", 0x5000, 0x1000, CRC(4000e833) SHA1(dafbdf8ba0a1fe7d7b9586ffbfc9e5390c0fcf6f) )
1838
1839   ROM_REGION( 0x1000, "charom", 0 )
1840   ROM_LOAD( "901447-10.uc5", 0x000, 0x800, CRC(d8408674) SHA1(0157a2d55b7ac4eaeb38475889ebeea52e2593db) )    // Character Generator
1841
1842   ROM_REGION( 0x20, "prom", 0 )
1843   ROM_LOAD( "74s288.uc2", 0x00, 0x20, CRC(06030665) SHA1(19dc91ca49ecc20e66c646ba480d2c3bc70a62e6) ) // video/RAM timing
1844
1845   ROM_REGION( 0xf5, "pla1", 0 )
1846   ROM_LOAD( "324744-01.ue6", 0x00, 0xf5, NO_DUMP ) // 8700-009
1847
1848   ROM_REGION( 0xf5, "pla2", 0 )
1849   ROM_LOAD( "324745-01.ue5", 0x00, 0xf5, NO_DUMP ) // 8700-008
1850ROM_END
1851
1852
1853//-------------------------------------------------
1854//  ROM( cbm8296d_de )
1855//-------------------------------------------------
1856
1857ROM_START( cbm8296d_de )
1858   ROM_REGION( 0x7000, M6502_TAG, 0 )
1859   ROM_LOAD( "324992-02.ue10", 0x0000, 0x1000, CRC(2bac5baf) SHA1(03aa866e4bc4e38e95983a6a82ba925e710bede8) ) // HiRes Emulator
1860   ROM_LOAD( "324993-02.ue9", 0x1000, 0x1000, CRC(57444531) SHA1(74aa39888a6bc95762de767fce883203daca0d34) ) // HiRes BASIC
1861   ROM_LOAD( "324746-01.ue7", 0x2000, 0x3000, CRC(7935b528) SHA1(5ab17ee70467152bf2130e3f48a2aa81e9df93c9) )
1862   ROM_CONTINUE(              0x6000, 0x1000 )
1863   ROM_LOAD( "324243-04.ue8", 0x5000, 0x1000, CRC(3fe48897) SHA1(c218ff3168514f1d5e7822ae1b1ac3e161523b33) )
1864
1865   ROM_REGION( 0x1000, "charom", 0 )
1866   ROM_LOAD( "324242-10.uc5", 0x0000, 0x1000, CRC(a5632a0f) SHA1(9616f7f18757cccefb702a945f954b644d5b17d1) )
1867
1868   ROM_REGION( 0x20, "prom", 0 )
1869   ROM_LOAD( "74s288.uc2", 0x00, 0x20, CRC(06030665) SHA1(19dc91ca49ecc20e66c646ba480d2c3bc70a62e6) ) // video/RAM timing
1870
1871   ROM_REGION( 0xf5, "pla1", 0 )
1872   ROM_LOAD( "324744-01.ue6", 0x00, 0xf5, NO_DUMP ) // 8700-009
1873
1874   ROM_REGION( 0xf5, "pla2", 0 )
1875   ROM_LOAD( "324745-01.ue5", 0x00, 0xf5, NO_DUMP ) // 8700-008
1876ROM_END
1877
1878
1879
1880//**************************************************************************
1881//  SYSTEM DRIVERS
1882//**************************************************************************
1883
1884//    YEAR  NAME        PARENT      COMPAT  MACHINE     INPUT       INIT                COMPANY                         FULLNAME        FLAGS
1885COMP( 1977, pet2001,    0,          0,      pet2001,    pet,        driver_device,  0,  "Commodore Business Machines",  "PET 2001-4",   GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1886COMP( 1977, pet20018,   pet2001,    0,      pet20018,   pet,        driver_device,  0,  "Commodore Business Machines",  "PET 2001-8",   GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1887COMP( 1979, pet2001n,   0,          0,      pet2001n8,  pet,        driver_device,  0,  "Commodore Business Machines",  "PET 2001-N8",  GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1888COMP( 1979, pet2001n16, pet2001n,   0,      pet2001n16, pet,        driver_device,  0,  "Commodore Business Machines",  "PET 2001-N16", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1889COMP( 1979, pet2001n32, pet2001n,   0,      pet2001n32, pet,        driver_device,  0,  "Commodore Business Machines",  "PET 2001-N32", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1890COMP( 1979, cbm3008,    pet2001n,   0,      cbm3008,    pet,        driver_device,  0,  "Commodore Business Machines",  "CBM 3008",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1891COMP( 1979, cbm3016,    pet2001n,   0,      cbm3016,    pet,        driver_device,  0,  "Commodore Business Machines",  "CBM 3016",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1892COMP( 1979, cbm3032,    pet2001n,   0,      cbm3032,    pet,        driver_device,  0,  "Commodore Business Machines",  "CBM 3032",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1893COMP( 1979, pet2001b,   0,          0,      pet2001b8,  petb,       driver_device,  0,  "Commodore Business Machines",  "PET 2001-B8",  GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1894COMP( 1979, pet2001b16, pet2001b,   0,      pet2001b16, petb,       driver_device,  0,  "Commodore Business Machines",  "PET 2001-B16", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1895COMP( 1979, pet2001b32, pet2001b,   0,      pet2001b32, petb,       driver_device,  0,  "Commodore Business Machines",  "PET 2001-B32", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1896COMP( 1979, cbm3032b,   pet2001b,   0,      cbm3032b,   petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 3032B",    GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1897COMP( 1980, pet4016,    0,          0,      pet4016,    pet,        driver_device,  0,  "Commodore Business Machines",  "PET 4016",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1898COMP( 1980, pet4032,    pet4016,    0,      pet4032,    pet,        driver_device,  0,  "Commodore Business Machines",  "PET 4032",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1899COMP( 1980, cbm4016,    pet4016,    0,      cbm4016,    pet,        driver_device,  0,  "Commodore Business Machines",  "CBM 4016",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1900COMP( 1980, cbm4032,    pet4016,    0,      cbm4032,    pet,        driver_device,  0,  "Commodore Business Machines",  "CBM 4032",     GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1901COMP( 1980, pet4032b,   0,          0,      pet4032b,   petb,       driver_device,  0,  "Commodore Business Machines",  "PET 4032B",    GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1902COMP( 1980, cbm4032b,   pet4032b,   0,      cbm4032b,   petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 4032B",    GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
1903COMP( 1980, pet8032,    0,          0,      pet8032,    petb,       driver_device,  0,  "Commodore Business Machines",  "PET 8032",     GAME_SUPPORTS_SAVE )
1904COMP( 1981, cbm8032,    pet8032,    0,      pet8032,    petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 8032",     GAME_SUPPORTS_SAVE )
1905COMP( 1981, cbm8032_de, pet8032,    0,      pet8032,    petb_de,    driver_device,  0,  "Commodore Business Machines",  "CBM 8032 (Germany)",           GAME_SUPPORTS_SAVE )
1906COMP( 1981, cbm8032_se, pet8032,    0,      pet8032,    petb_se,    driver_device,  0,  "Commodore Business Machines",  "CBM 8032 (Sweden/Finland)",    GAME_SUPPORTS_SAVE )
1907COMP( 1981, superpet,   pet8032,    0,      superpet,   petb,       driver_device,  0,  "Commodore Business Machines",  "SuperPET SP-9000",             GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1908COMP( 1981, mmf9000,    pet8032,    0,      superpet,   petb,       driver_device,  0,  "Commodore Business Machines",  "MicroMainFrame 9000",          GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1909COMP( 1981, mmf9000_se, pet8032,    0,      superpet,   petb_se,    driver_device,  0,  "Commodore Business Machines",  "MicroMainFrame 9000 (Sweden/Finland)",         GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1910COMP( 1981, cbm8096,    pet8032,    0,      cbm8096,    petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 8096",                     GAME_SUPPORTS_SAVE )
1911COMP( 1984, cbm8296,    0,          0,      cbm8296,    petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 8296",                     GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1912COMP( 1984, cbm8296d,   cbm8296,    0,      cbm8296d,   petb,       driver_device,  0,  "Commodore Business Machines",  "CBM 8296D",                    GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
1913COMP( 1984, cbm8296d_de,cbm8296,    0,      cbm8296d,   petb_de,    driver_device,  0,  "Commodore Business Machines",  "CBM 8296D (Germany)",          GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
Property changes on: trunk/src/mess/drivers/pet.c
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain

Previous 199869 Revisions Next


© 1997-2024 The MAME Team