Previous 199869 Revisions Next

r18061 Friday 21st September, 2012 at 13:22:49 UTC by Curt Coder
(MESS) cbm2: Rewrote the rest of the CBM-II model line. [Curt Coder]
[hash]cbm2_cart.xml* cbm700_cart.xml
[src/mess]mess.lst mess.mak
[src/mess/drivers]cbm2.c cbmb.c
[src/mess/includes]cbm2.h cbmb.h
[src/mess/machine]cbm2exp.c cbm2exp.h cbmb.c
[src/mess/video]cbmb.c

trunk/hash/cbm700_cart.xml
r18060r18061
1<?xml version="1.0"?>
2<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
3<!--
4NOTE: This list is here only to document available dumps and it's not used (yet) by MESS!
5-->
6<softwarelist name="cbm700_cart" description="Commodore 700 cartridges">
7
8   <software name="calcresu" supported="no">
9      <description>Calc Result</description>
10      <year>198?</year>
11      <publisher>Handic Software</publisher>
12     
13      <part name="cart" interface="cbm2_cart">
14         <dataarea name="bank1" size="0x2000">
15            <rom name="calc_result-bx700.bin" size="0x2000" crc="4775ebb3" sha1="5c6928a9cd8a3ce6a1d11221292b832295d6543e" offset="0x0000" />
16         </dataarea>
17      </part>
18
19      <part name="flop" interface="floppy_5_25">
20         <dataarea name="flop" size="1070662">
21            <rom name="calc_result_700_bx_single_version_v1.0.d82" size="1070662" crc="244a2122" sha1="44661ed8e3307bb967f97ce1f5a247ca3cded0b3" offset="0" />
22         </dataarea>
23      </part>
24   </software>
25
26</softwarelist>
trunk/hash/cbm2_cart.xml
r0r18061
1<?xml version="1.0"?>
2<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
3<softwarelist name="cbm2_cart" description="Commodore CBM-II cartridges">
4
5   <software name="calcresu">
6      <description>Calc Result</description>
7      <year>198?</year>
8      <publisher>Handic Software</publisher>
9     
10      <part name="cart" interface="cbm2_cart">
11         <dataarea name="bank1" size="0x2000">
12            <rom name="calc_result-bx700.bin" size="0x2000" crc="4775ebb3" sha1="5c6928a9cd8a3ce6a1d11221292b832295d6543e" offset="0" />
13         </dataarea>
14      </part>
15
16      <part name="flop" interface="floppy_5_25">
17         <dataarea name="flop" size="1070662">
18            <rom name="calc_result_700_bx_single_version_v1.0.d82" size="1070662" crc="244a2122" sha1="44661ed8e3307bb967f97ce1f5a247ca3cded0b3" offset="0" />
19         </dataarea>
20      </part>
21   </software>
22
23   <software name="profitxt">
24      <description>ProfiText</description>
25      <year>198?</year>
26      <publisher>&lt;unknown&gt;</publisher>
27     
28      <part name="cart" interface="cbm2_cart">
29         <dataarea name="bank1" size="0x2000">
30            <rom name="profitext.bin" size="0x2000" crc="ac622a2b" sha1="a02fcd187b7493a08379bbaef3d4296a083d30c8" offset="0" />
31         </dataarea>
32      </part>
33   </software>
34
35   <software name="demo1">
36      <description>Demo 1</description>
37      <year>198?</year>
38      <publisher>&lt;unknown&gt;</publisher>
39     
40      <part name="cart" interface="cbm2_cart">
41         <dataarea name="bank1" size="0x2000">
42            <rom name="cbm610-cart1-red-left.bin" size="0x2000" crc="be426f3d" sha1="da6f1099fd09165f8ee454e2e517cfc523deb8b7" offset="0" />
43         </dataarea>
44
45         <dataarea name="bank2" size="0x2000">
46            <rom name="cbm610-cart1-blue-right.bin" size="0x2000" crc="61a5008b" sha1="02db07ca68631aefb69e5db41fada27486263c69" offset="0" />
47         </dataarea>
48      </part>
49   </software>
50
51   <software name="demo2">
52      <description>Demo 2</description>
53      <year>198?</year>
54      <publisher>&lt;unknown&gt;</publisher>
55     
56      <part name="cart" interface="cbm2_cart">
57         <dataarea name="bank1" size="0x2000">
58            <rom name="cbm610-cart2-white-left.bin" size="0x2000" crc="aeb6881c" sha1="4bdabbd7d6d642f916b5a91155396c98fce591a3" offset="0" />
59         </dataarea>
60
61         <dataarea name="bank2" size="0x2000">
62            <rom name="cbm610-cart2-green-right.bin" size="0x2000" crc="61a5008b" sha1="02db07ca68631aefb69e5db41fada27486263c69" offset="0" />
63         </dataarea>
64      </part>
65   </software>
66
67   <software name="moni610">
68      <description>Moni610</description>
69      <year>2008</year>
70      <publisher>Ullrich von Bassewitz</publisher>
71     
72      <part name="cart" interface="cbm2_cart">
73         <dataarea name="bank1" size="0x2000">
74            <rom name="moni.bin" size="0x2000" crc="43b08d1f" sha1="9c0c24907e85674348dd58e81e6da64e157e9d0f" offset="0" />
75         </dataarea>
76      </part>
77   </software>
78
79</softwarelist>
trunk/src/mess/machine/cbmb.c
r18060r18061
1/***************************************************************************
2    commodore b series computer
3
4    peter.trauner@jk.uni-linz.ac.at
5***************************************************************************/
6
7#include "emu.h"
8#include "cpu/m6502/m6509.h"
9#include "sound/sid6581.h"
10#include "machine/6525tpi.h"
11#include "machine/6526cia.h"
12#include "machine/ieee488.h"
13
14#include "includes/cbmb.h"
15#include "crsshair.h"
16
17#include "imagedev/cartslot.h"
18
19/* 2008-05 FP: Were these added as a reminder to add configs of
20drivers 8 & 9 as in pet.c ? */
21#define IEEE8ON 0
22#define IEEE9ON 0
23
24#define VERBOSE_LEVEL 0
25#define DBG_LOG( MACHINE, N, M, A ) \
26   do { \
27      if(VERBOSE_LEVEL >= N) \
28      { \
29         if( M ) \
30            logerror("%11.6f: %-24s", MACHINE.time().as_double(), (char*) M ); \
31         logerror A; \
32      } \
33   } while (0)
34
35static TIMER_CALLBACK( cbmb_frame_interrupt );
36/* keyboard lines */
37
38
39/* tpi at 0xfde00
40 in interrupt mode
41 irq to m6509 irq
42 pa7 ieee nrfd
43 pa6 ieee ndac
44 pa5 ieee eoi
45 pa4 ieee dav
46 pa3 ieee atn
47 pa2 ieee ren
48 pa1 ieee io chips te
49 pa0 ieee io chip dc
50 pb1 ieee seq
51 pb0 ieee ifc
52 cb ?
53 ca chargen rom address line 12
54 i4 acia irq
55 i3 ?
56 i2 cia6526 irq
57 i1 self pb0
58 i0 tod (50 or 60 hertz frequency)
59 */
60READ8_DEVICE_HANDLER( cbmb_tpi0_port_a_r )
61{
62   cbmb_state *state = space.machine().driver_data<cbmb_state>();
63   UINT8 data = 0;
64
65   if (state->m_ieee->nrfd_r())
66      data |= 0x80;
67
68   if (state->m_ieee->ndac_r())
69      data |= 0x40;
70
71   if (state->m_ieee->eoi_r())
72      data |= 0x20;
73
74   if (state->m_ieee->dav_r())
75      data |= 0x10;
76
77   if (state->m_ieee->atn_r())
78      data |= 0x08;
79
80   if (state->m_ieee->ren_r())
81        data |= 0x04;
82
83   return data;
84}
85
86WRITE8_DEVICE_HANDLER( cbmb_tpi0_port_a_w )
87{
88   cbmb_state *state = space.machine().driver_data<cbmb_state>();
89
90   state->m_ieee->nrfd_w(BIT(data, 7));
91   state->m_ieee->ndac_w(BIT(data, 6));
92   state->m_ieee->eoi_w(BIT(data, 5));
93   state->m_ieee->dav_w(BIT(data, 4));
94   state->m_ieee->atn_w(BIT(data, 3));
95   state->m_ieee->ren_w(BIT(data, 2));
96}
97
98READ8_DEVICE_HANDLER( cbmb_tpi0_port_b_r )
99{
100   cbmb_state *state = space.machine().driver_data<cbmb_state>();
101   UINT8 data = 0;
102
103   if (state->m_ieee->srq_r())
104      data |= 0x02;
105
106   if (state->m_ieee->ifc_r())
107      data |= 0x01;
108
109   return data;
110}
111
112WRITE8_DEVICE_HANDLER( cbmb_tpi0_port_b_w )
113{
114   cbmb_state *state = space.machine().driver_data<cbmb_state>();
115
116   state->m_ieee->srq_w(BIT(data, 1));
117   state->m_ieee->ifc_w(BIT(data, 0));
118}
119
120/* tpi at 0xfdf00
121  cbm 500
122   port c7 video address lines?
123   port c6 ?
124  cbm 600
125   port c7 low
126   port c6 ntsc 1, 0 pal
127  cbm 700
128   port c7 high
129   port c6 ?
130  port c5 .. c0 keyboard line select
131  port a7..a0 b7..b0 keyboard input */
132WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_a )
133{
134   cbmb_state *state = space.machine().driver_data<cbmb_state>();
135   state->m_keyline_a = data;
136}
137
138WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_b )
139{
140   cbmb_state *state = space.machine().driver_data<cbmb_state>();
141   state->m_keyline_b = data;
142}
143
144WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_c )
145{
146   cbmb_state *state = space.machine().driver_data<cbmb_state>();
147   state->m_keyline_c = data;
148}
149
150READ8_DEVICE_HANDLER( cbmb_keyboard_line_a )
151{
152   cbmb_state *state = space.machine().driver_data<cbmb_state>();
153   int data = 0;
154   if (!(state->m_keyline_c & 0x01))
155      data |= space.machine().root_device().ioport("ROW0")->read();
156
157   if (!(state->m_keyline_c & 0x02))
158      data |= space.machine().root_device().ioport("ROW2")->read();
159
160   if (!(state->m_keyline_c & 0x04))
161      data |= space.machine().root_device().ioport("ROW4")->read();
162
163   if (!(state->m_keyline_c & 0x08))
164      data |= space.machine().root_device().ioport("ROW6")->read();
165
166   if (!(state->m_keyline_c & 0x10))
167      data |= space.machine().root_device().ioport("ROW8")->read();
168
169   if (!(state->m_keyline_c & 0x20))
170      data |= state->ioport("ROW10")->read();
171
172   return data ^0xff;
173}
174
175READ8_DEVICE_HANDLER( cbmb_keyboard_line_b )
176{
177   cbmb_state *state = space.machine().driver_data<cbmb_state>();
178   int data = 0;
179   if (!(state->m_keyline_c & 0x01))
180      data |= space.machine().root_device().ioport("ROW1")->read();
181
182   if (!(state->m_keyline_c & 0x02))
183      data |= space.machine().root_device().ioport("ROW3")->read();
184
185   if (!(state->m_keyline_c & 0x04))
186      data |= space.machine().root_device().ioport("ROW5")->read();
187
188   if (!(state->m_keyline_c & 0x08))
189      data |= space.machine().root_device().ioport("ROW7")->read();
190
191   if (!(state->m_keyline_c & 0x10))
192      data |= space.machine().root_device().ioport("ROW9")->read() | ((space.machine().root_device().ioport("SPECIAL")->read() & 0x04) ? 1 : 0 );
193
194   if (!(state->m_keyline_c & 0x20))
195      data |= state->ioport("ROW11")->read();
196
197   return data ^0xff;
198}
199
200READ8_DEVICE_HANDLER( cbmb_keyboard_line_c )
201{
202   int data = 0;
203   cbmb_state *state = space.machine().driver_data<cbmb_state>();
204   if ((space.machine().root_device().ioport("ROW0")->read() & ~state->m_keyline_a) ||
205            (space.machine().root_device().ioport("ROW1")->read() & ~state->m_keyline_b))
206       data |= 0x01;
207
208   if ((space.machine().root_device().ioport("ROW2")->read() & ~state->m_keyline_a) ||
209            (space.machine().root_device().ioport("ROW3")->read() & ~state->m_keyline_b))
210       data |= 0x02;
211
212   if ((space.machine().root_device().ioport("ROW4")->read() & ~state->m_keyline_a) ||
213            (space.machine().root_device().ioport("ROW5")->read() & ~state->m_keyline_b))
214       data |= 0x04;
215
216   if ((space.machine().root_device().ioport("ROW6")->read() & ~state->m_keyline_a) ||
217            (space.machine().root_device().ioport("ROW7")->read() & ~state->m_keyline_b))
218       data |= 0x08;
219
220   if ((space.machine().root_device().ioport("ROW8")->read() & ~state->m_keyline_a) ||
221            ((space.machine().root_device().ioport("ROW9")->read() | ((space.machine().root_device().ioport("SPECIAL")->read() & 0x04) ? 1 : 0)) & ~state->m_keyline_b))
222       data |= 0x10;
223
224   if ((space.machine().root_device().ioport("ROW10")->read() & ~state->m_keyline_a) ||
225            (state->ioport("ROW11")->read() & ~state->m_keyline_b))
226       data |= 0x20;
227
228   if (!state->m_p500)
229   {
230      if (!state->m_cbm_ntsc)
231         data |= 0x40;
232
233      if (!state->m_cbm700)
234         data |= 0x80;
235   }
236   return data ^0xff;
237}
238
239WRITE_LINE_DEVICE_HANDLER( cbmb_irq )
240{
241   cbmb_state *driver_state = device->machine().driver_data<cbmb_state>();
242   if (state != driver_state->m_old_level)
243   {
244      DBG_LOG(device->machine(), 3, "mos6509", ("irq %s\n", state ? "start" : "end"));
245      device->machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, state);
246      driver_state->m_old_level = state;
247   }
248}
249
250/*
251  port a ieee in/out
252  pa7 trigger gameport 2
253  pa6 trigger gameport 1
254  pa1 ?
255  pa0 ?
256  pb7 .. 4 gameport 2
257  pb3 .. 0 gameport 1
258 */
259
260const mos6526_interface cbmb_cia =
261{
262   DEVCB_DEVICE_LINE("tpi6525_0", tpi6525_i2_w),
263   DEVCB_NULL,   /* pc_func */
264   DEVCB_NULL,
265   DEVCB_NULL,
266   DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_r),
267   DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_w),
268   DEVCB_NULL,
269   DEVCB_NULL
270};
271
272WRITE8_MEMBER(cbmb_state::cbmb_colorram_w)
273{
274   m_colorram[offset] = data | 0xf0;
275}
276
277WRITE_LINE_DEVICE_HANDLER( cbmb_change_font )
278{
279   cbmb_vh_set_font(device->machine(), state);
280}
281
282static void cbmb_common_driver_init( running_machine &machine )
283{
284   cbmb_state *state = machine.driver_data<cbmb_state>();
285   state->m_chargen = state->memregion("maincpu")->base() + 0x100000;
286   /*    memset(c64_memory, 0, 0xfd00); */
287
288   machine.scheduler().timer_pulse(attotime::from_msec(10), FUNC(cbmb_frame_interrupt));
289
290   state->m_p500 = 0;
291   state->m_cbm700 = 0;
292}
293
294DRIVER_INIT_MEMBER(cbmb_state,cbm600)
295{
296   cbmb_common_driver_init(machine());
297   m_cbm_ntsc = 1;
298   cbm600_vh_init(machine());
299}
300
301DRIVER_INIT_MEMBER(cbmb_state,cbm600pal)
302{
303   cbmb_common_driver_init(machine());
304   m_cbm_ntsc = 0;
305   cbm600_vh_init(machine());
306}
307
308DRIVER_INIT_MEMBER(cbmb_state,cbm600hu)
309{
310   cbmb_common_driver_init(machine());
311   m_cbm_ntsc = 0;
312}
313
314DRIVER_INIT_MEMBER(cbmb_state,cbm700)
315{
316   cbmb_common_driver_init(machine());
317   m_cbm700 = 1;
318   m_cbm_ntsc = 0;
319   cbm700_vh_init(machine());
320}
321
322DRIVER_INIT_MEMBER(cbmb_state,p500)
323{
324   cbmb_common_driver_init(machine());
325   m_p500 = 1;
326   m_cbm_ntsc = 1;
327}
328
329MACHINE_RESET_MEMBER(cbmb_state,cbmb)
330{
331//removed   cbm_drive_0_config (IEEE8ON ? IEEE : 0, 8);
332//removed   cbm_drive_1_config (IEEE9ON ? IEEE : 0, 9);
333}
334
335
336static TIMER_CALLBACK( p500_lightpen_tick )
337{
338   if ((machine.root_device().ioport("CTRLSEL")->read_safe(0x00) & 0x07) == 0x04)
339   {
340      /* enable lightpen crosshair */
341      crosshair_set_screen(machine, 0, CROSSHAIR_SCREEN_ALL);
342   }
343   else
344   {
345      /* disable lightpen crosshair */
346      crosshair_set_screen(machine, 0, CROSSHAIR_SCREEN_NONE);
347   }
348}
349
350static TIMER_CALLBACK(cbmb_frame_interrupt)
351{
352   cbmb_state *state = machine.driver_data<cbmb_state>();
353   device_t *tpi_0 = machine.device("tpi6525_0");
354
355#if 0
356   int controller1 = machine.root_device().ioport("CTRLSEL")->read() & 0x07;
357   int controller2 = machine.root_device().ioport("CTRLSEL")->read() & 0x70;
358#endif
359
360   tpi6525_i0_w(tpi_0, state->m_irq_level);
361   state->m_irq_level = !state->m_irq_level;
362   if (state->m_irq_level) return ;
363
364#if 0
365   value = 0xff;
366   switch (controller1)
367   {
368      case 0x00:
369         value &= ~machine.root_device().ioport("JOY1_1B")->read();         /* Joy1 Directions + Button 1 */
370         break;
371
372      case 0x01:
373         if (machine.root_device().ioport("OTHER")->read() & 0x40)         /* Paddle2 Button */
374            value &= ~0x08;
375         if (machine.root_device().ioport("OTHER")->read() & 0x80)         /* Paddle1 Button */
376            value &= ~0x04;
377         break;
378
379      case 0x02:
380         if (machine.root_device().ioport("OTHER")->read() & 0x02)         /* Mouse Button Left */
381            value &= ~0x10;
382         if (machine.root_device().ioport("OTHER")->read() & 0x01)         /* Mouse Button Right */
383            value &= ~0x01;
384         break;
385
386      case 0x03:
387         value &= ~(machine.root_device().ioport("JOY1_2B")->read() & 0x1f);   /* Joy1 Directions + Button 1 */
388         break;
389
390      case 0x04:
391/* was there any input on the lightpen? where is it mapped? */
392//          if (machine.root_device().ioport("OTHER")->read() & 0x04)           /* Lightpen Signal */
393//              value &= ?? ;
394         break;
395
396      case 0x07:
397         break;
398
399      default:
400         logerror("Invalid Controller 1 Setting %d\n", controller1);
401         break;
402   }
403
404   c64_keyline[8] = value;
405
406
407   value = 0xff;
408   switch (controller2)
409   {
410      case 0x00:
411         value &= ~machine.root_device().ioport("JOY2_1B")->read();         /* Joy2 Directions + Button 1 */
412         break;
413
414      case 0x10:
415         if (machine.root_device().ioport("OTHER")->read() & 0x10)         /* Paddle4 Button */
416            value &= ~0x08;
417         if (machine.root_device().ioport("OTHER")->read() & 0x20)         /* Paddle3 Button */
418            value &= ~0x04;
419         break;
420
421      case 0x20:
422         if (machine.root_device().ioport("OTHER")->read() & 0x02)         /* Mouse Button Left */
423            value &= ~0x10;
424         if (machine.root_device().ioport("OTHER")->read() & 0x01)         /* Mouse Button Right */
425            value &= ~0x01;
426         break;
427
428      case 0x30:
429         value &= ~(machine.root_device().ioport("JOY2_2B")->read() & 0x1f);   /* Joy2 Directions + Button 1 */
430         break;
431
432      case 0x40:
433/* was there any input on the lightpen? where is it mapped? */
434//          if (machine.root_device().ioport("OTHER")->read() & 0x04)           /* Lightpen Signal */
435//              value &= ?? ;
436         break;
437
438      case 0x70:
439         break;
440
441      default:
442         logerror("Invalid Controller 2 Setting %d\n", controller2);
443         break;
444   }
445
446   c64_keyline[9] = value;
447#endif
448
449// 128u4 FIXME
450//  vic2_frame_interrupt (device);
451
452   /* for p500, check if lightpen has been chosen as input: if so, enable crosshair (but c64-like inputs for p500 are not working atm) */
453   machine.scheduler().timer_set(attotime::zero, FUNC(p500_lightpen_tick));
454
455   set_led_status(machine, 1, machine.root_device().ioport("SPECIAL")->read() & 0x04 ? 1 : 0);      /* Shift Lock */
456}
457
458
459/***********************************************
460
461    CBM Business Computers Cartridges
462
463***********************************************/
464
465static DEVICE_IMAGE_LOAD(cbmb_cart)
466{
467   UINT32 size = image.length();
468   const char *filetype = image.filetype();
469   UINT8 *cbmb_memory = image.device().machine().root_device().memregion("maincpu")->base();
470   int address = 0;
471
472   /* Assign loading address according to extension */
473   if (!mame_stricmp(filetype, "10"))
474      address = 0x1000;
475
476   else if (!mame_stricmp(filetype, "20"))
477      address = 0x2000;
478
479   else if (!mame_stricmp(filetype, "40"))
480      address = 0x4000;
481
482   else if (!mame_stricmp(filetype, "60"))
483      address = 0x6000;
484
485   logerror("Loading cart %s at %.4x size:%.4x\n", image.filename(), address, size);
486
487   image.fread(cbmb_memory + 0xf0000 + address, size);
488
489   return IMAGE_INIT_PASS;
490}
491
492
493MACHINE_CONFIG_FRAGMENT(cbmb_cartslot)
494   MCFG_CARTSLOT_ADD("cart1")
495   MCFG_CARTSLOT_EXTENSION_LIST("10,20,40,60")
496   MCFG_CARTSLOT_NOT_MANDATORY
497   MCFG_CARTSLOT_LOAD(cbmb_cart)
498
499   MCFG_CARTSLOT_ADD("cart2")
500   MCFG_CARTSLOT_EXTENSION_LIST("10,20,40,60")
501   MCFG_CARTSLOT_NOT_MANDATORY
502   MCFG_CARTSLOT_LOAD(cbmb_cart)
503MACHINE_CONFIG_END
trunk/src/mess/machine/cbm2exp.c
r18060r18061
157157//-------------------------------------------------
158158
159159cbm2_expansion_slot_device::cbm2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
160        device_t(mconfig, CBM2_EXPANSION_SLOT, "PET-II expansion port", tag, owner, clock),
160        device_t(mconfig, CBM2_EXPANSION_SLOT, "CBM-II expansion port", tag, owner, clock),
161161      device_slot_interface(mconfig, *this),
162162      device_image_interface(mconfig, *this)
163163{
trunk/src/mess/machine/cbm2exp.h
r18060r18061
4646//  INTERFACE CONFIGURATION MACROS
4747//**************************************************************************
4848
49#define CBM2_EXPANSION_INTERFACE(_name) \
50   const pet_expansion_slot_interface (_name) =
51
52
5349#define MCFG_CBM2_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot, _def_inp) \
5450    MCFG_DEVICE_ADD(_tag, CBM2_EXPANSION_SLOT, _clock) \
5551   MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
trunk/src/mess/includes/cbmb.h
r18060r18061
1/*****************************************************************************
2 *
3 * includes/cbmb.h
4 *
5 * Commodore B Series Computer
6 *
7 * peter.trauner@jk.uni-linz.ac.at
8 *
9 ****************************************************************************/
10
11#ifndef CBMB_H_
12#define CBMB_H_
13
14#include "video/mc6845.h"
15#include "machine/6526cia.h"
16#include "machine/ieee488.h"
17#include "imagedev/cartslot.h"
18
19class cbmb_state : public driver_device
20{
21public:
22   cbmb_state(const machine_config &mconfig, device_type type, const char *tag)
23      : driver_device(mconfig, type, tag),
24        m_ieee(*this, IEEE488_TAG),
25      m_basic(*this, "basic"),
26      m_videoram(*this, "videoram"),
27      m_kernal(*this, "kernal"),
28      m_colorram(*this, "colorram"){ }
29
30   required_device<ieee488_device> m_ieee;
31   required_shared_ptr<UINT8> m_basic;
32   required_shared_ptr<UINT8> m_videoram;
33   required_shared_ptr<UINT8> m_kernal;
34   optional_shared_ptr<UINT8> m_colorram;
35
36   DECLARE_READ8_MEMBER( vic_lightpen_x_cb );
37   DECLARE_READ8_MEMBER( vic_lightpen_y_cb );
38   DECLARE_READ8_MEMBER( vic_lightpen_button_cb );
39   DECLARE_READ8_MEMBER( vic_dma_read );
40   DECLARE_READ8_MEMBER( vic_dma_read_color );
41   DECLARE_READ8_MEMBER( vic_rdy_cb );
42
43   /* keyboard lines */
44   int m_cbmb_keyline_a;
45   int m_cbmb_keyline_b;
46   int m_cbmb_keyline_c;
47
48   int m_p500;
49   int m_cbm700;
50   int m_cbm_ntsc;
51   int m_keyline_a;
52   int m_keyline_b;
53   int m_keyline_c;
54   UINT8 *m_chargen;
55   int m_old_level;
56   int m_irq_level;
57   int m_font;
58   DECLARE_WRITE8_MEMBER(cbmb_colorram_w);
59   DECLARE_DRIVER_INIT(cbm600);
60   DECLARE_DRIVER_INIT(p500);
61   DECLARE_DRIVER_INIT(cbm600hu);
62   DECLARE_DRIVER_INIT(cbm600pal);
63   DECLARE_DRIVER_INIT(cbm700);
64   DECLARE_MACHINE_RESET(cbmb);
65   DECLARE_VIDEO_START(cbmb_crtc);
66   DECLARE_PALETTE_INIT(cbm700);
67   DECLARE_VIDEO_START(cbm700);
68};
69
70/*----------- defined in machine/cbmb.c -----------*/
71
72extern const mos6526_interface cbmb_cia;
73
74
75DECLARE_READ8_DEVICE_HANDLER( cbmb_tpi0_port_a_r );
76DECLARE_WRITE8_DEVICE_HANDLER( cbmb_tpi0_port_a_w );
77DECLARE_READ8_DEVICE_HANDLER( cbmb_tpi0_port_b_r );
78DECLARE_WRITE8_DEVICE_HANDLER( cbmb_tpi0_port_b_w );
79
80DECLARE_WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_a );
81DECLARE_WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_b );
82DECLARE_WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_c );
83DECLARE_READ8_DEVICE_HANDLER( cbmb_keyboard_line_a );
84DECLARE_READ8_DEVICE_HANDLER( cbmb_keyboard_line_b );
85DECLARE_READ8_DEVICE_HANDLER( cbmb_keyboard_line_c );
86WRITE_LINE_DEVICE_HANDLER( cbmb_irq );
87
88int cbmb_dma_read(running_machine &machine, int offset);
89int cbmb_dma_read_color(running_machine &machine, int offset);
90
91WRITE_LINE_DEVICE_HANDLER( cbmb_change_font );
92
93
94
95MACHINE_CONFIG_EXTERN( cbmb_cartslot );
96
97
98/*----------- defined in video/cbmb.c -----------*/
99
100
101MC6845_UPDATE_ROW( cbm600_update_row );
102MC6845_UPDATE_ROW( cbm700_update_row );
103WRITE_LINE_DEVICE_HANDLER( cbmb_display_enable_changed );
104
105void cbm600_vh_init(running_machine &machine);
106void cbm700_vh_init(running_machine &machine);
107
108
109void cbmb_vh_set_font(running_machine &machine, int font);
110
111
112#endif /* CBMB_H_ */
trunk/src/mess/includes/cbm2.h
r18060r18061
1919#include "machine/vcsctrl.h"
2020#include "sound/dac.h"
2121#include "sound/sid6581.h"
22#include "video/mc6845.h"
2223#include "video/mos6566.h"
2324
2425#define M6509_TAG      "u13"
r18060r18061
2627#define PLA2_TAG      "u88"
2728#define MOS6567_TAG      "u23"
2829#define MOS6569_TAG      "u23"
30#define MC68B45_TAG      "u7"
2931#define MOS6851_TAG      "u4"
3032#define MOS6525_1_TAG   "u20"
3133#define MOS6525_2_TAG   "u102"
r18060r18061
3537#define CONTROL1_TAG   "joy1"
3638#define CONTROL2_TAG   "joy2"
3739
38class p500_state : public driver_device
40class cbm2_state : public driver_device
3941{
4042public:
41   p500_state(const machine_config &mconfig, device_type type, const char *tag)
43   cbm2_state(const machine_config &mconfig, device_type type, const char *tag)
4244      : driver_device(mconfig, type, tag),
4345        m_maincpu(*this, M6509_TAG),
4446        m_pla1(*this, PLA1_TAG),
45        m_pla2(*this, PLA2_TAG),
46        m_vic(*this, MOS6569_TAG),
47        m_crtc(*this, MC68B45_TAG),
4748        m_sid(*this, MOS6851_TAG),
4849        m_tpi1(*this, MOS6525_1_TAG),
4950        m_tpi2(*this, MOS6525_2_TAG),
r18060r18061
5859        m_buffer_ram(*this, "buffer_ram"),
5960        m_dramon(1),
6061        m_video_ram(*this, "video_ram"),
61        m_color_ram(*this, "color_ram"),
62        m_statvid(1),
63        m_vicdotsel(1),
64        m_vicbnksel(0x03),
6562        m_todclk(0),
66        m_vic_irq(CLEAR_LINE),
6763        m_tpi1_irq(CLEAR_LINE),
6864        m_cass_rd(1),
6965        m_user_flag(0),
66        m_user_irq(CLEAR_LINE),
7067        m_tpi2_pa(0),
7168        m_tpi2_pb(0)
7269   { }
7370
7471   required_device<cpu_device> m_maincpu;
7572   required_device<pls100_device> m_pla1;
76   required_device<pls100_device> m_pla2;
77   required_device<mos6566_device> m_vic;
73   optional_device<mc6845_device> m_crtc;
7874   required_device<sid6581_device> m_sid;
7975   required_device<tpi6525_device> m_tpi1;
8076   required_device<tpi6525_device> m_tpi2;
r18060r18061
8985
9086   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
9187
92   virtual void machine_start();
93   virtual void machine_reset();
88   DECLARE_MACHINE_START( cbm2 );
89   DECLARE_MACHINE_START( cbm2_ntsc );
90   DECLARE_MACHINE_START( cbm2_pal );
91   DECLARE_MACHINE_RESET( cbm2 );
9492
95   void check_interrupts();
96   void bankswitch(offs_t offset, offs_t va, int srw, int sphi0, int sphi1, int sphi2, int ba, int ae, int bras, int bcas, int busy2, int refen,
97      int *datxen, int *dramxen, int *clrniben, int *_64kcasen, int *casenb, int *viddaten, int *viddat_tr,
98      int *clrnibcs, int *extbufcs, int *discromcs, int *buframcs, int *charomcs, int *viccs, int *vidmatcs,
99      int *csbank1, int *csbank2, int *csbank3, int *basiclocs, int *basichics, int *kernalcs,
100      int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs, int *aec, int *vsysaden);
101   UINT8 read_memory(address_space &space, offs_t offset, offs_t va, int sphi0, int sphi1, int sphi2, int ba, int ae, int bras, int bcas);
102   void write_memory(address_space &space, offs_t offset, UINT8 data, int sphi0, int sphi1, int sphi2, int ba, int ae, int bras, int bcas);
93   void bankswitch(offs_t offset, int busy2, int eras, int ecas, int refen, int cas, int ras, int *sysioen, int *dramen,
94      int *casseg1, int *casseg2, int *casseg3, int *casseg4, int *buframcs, int *extbufcs, int *vidramcs,
95      int *diskromcs, int *csbank1, int *csbank2, int *csbank3, int *basiccs, int *knbcs, int *kernalcs,
96      int *crtccs, int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs);
10397
98   UINT8 read_keyboard();
99
104100   DECLARE_READ8_MEMBER( read );
105101   DECLARE_WRITE8_MEMBER( write );
106102
107   DECLARE_READ8_MEMBER( vic_videoram_r );
108   DECLARE_WRITE_LINE_MEMBER( vic_irq_w );
109
110103   DECLARE_READ8_MEMBER( sid_potx_r );
111104   DECLARE_READ8_MEMBER( sid_poty_r );
112105
r18060r18061
120113
121114   DECLARE_WRITE8_MEMBER( tpi2_pa_w );
122115   DECLARE_WRITE8_MEMBER( tpi2_pb_w );
123   DECLARE_READ8_MEMBER( tpi2_pc_r );
124   DECLARE_WRITE8_MEMBER( tpi2_pc_w );
125116
126117   DECLARE_READ8_MEMBER( cia_pa_r );
127118   DECLARE_WRITE8_MEMBER( cia_pa_w );
r18060r18061
139130
140131   // video state
141132   optional_shared_ptr<UINT8> m_video_ram;
142   optional_shared_ptr<UINT8> m_color_ram;
143   int m_statvid;
144   int m_vicdotsel;
145   int m_vicbnksel;
133   size_t m_video_ram_size;
134   int m_graphics;
135   int m_ntsc;
146136
147137   // interrupt state
148138   int m_todclk;
149   int m_vic_irq;
150139   int m_tpi1_irq;
151140   int m_cass_rd;
152141   int m_user_flag;
142   int m_user_irq;
153143
154144   // keyboard state;
155145   UINT8 m_tpi2_pa;
r18060r18061
161151};
162152
163153
154class p500_state : public cbm2_state
155{
156public:
157   p500_state(const machine_config &mconfig, device_type type, const char *tag)
158      : cbm2_state(mconfig, type, tag),
159        m_pla2(*this, PLA2_TAG),
160        m_vic(*this, MOS6569_TAG),
161        m_color_ram(*this, "color_ram"),
162        m_statvid(1),
163        m_vicdotsel(1),
164        m_vicbnksel(0x03),
165        m_vic_irq(CLEAR_LINE)
166   { }
167
168   required_device<pls100_device> m_pla2;
169   required_device<mos6566_device> m_vic;
170
171   DECLARE_MACHINE_START( p500 );
172   DECLARE_MACHINE_RESET( p500 );
173
174   void bankswitch(offs_t offset, offs_t va, int srw, int sphi0, int sphi1, int sphi2, int ba, int ae, int bras, int bcas, int busy2, int refen,
175      int *datxen, int *dramxen, int *clrniben, int *_64kcasen, int *casenb, int *viddaten, int *viddat_tr,
176      int *clrnibcs, int *extbufcs, int *discromcs, int *buframcs, int *charomcs, int *viccs, int *vidmatcs,
177      int *csbank1, int *csbank2, int *csbank3, int *basiclocs, int *basichics, int *kernalcs,
178      int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs, int *aec, int *vsysaden);
179   UINT8 read_memory(address_space &space, offs_t offset, offs_t va, int sphi0, int sphi1, int sphi2, int ba, int ae, int bras, int bcas);
180   void write_memory(address_space &space, offs_t offset, UINT8 data, int sphi0, int sphi1, int sphi2, int ba, int ae, int bras, int bcas);
181
182   DECLARE_READ8_MEMBER( read );
183   DECLARE_WRITE8_MEMBER( write );
184
185   DECLARE_READ8_MEMBER( vic_videoram_r );
186   DECLARE_WRITE_LINE_MEMBER( vic_irq_w );
187
188   DECLARE_WRITE_LINE_MEMBER( tpi1_irq_w );
189   DECLARE_WRITE_LINE_MEMBER( tpi1_ca_w );
190   DECLARE_WRITE_LINE_MEMBER( tpi1_cb_w );
191
192   DECLARE_READ8_MEMBER( tpi2_pc_r );
193   DECLARE_WRITE8_MEMBER( tpi2_pc_w );
194
195   // video state
196   optional_shared_ptr<UINT8> m_color_ram;
197   int m_statvid;
198   int m_vicdotsel;
199   int m_vicbnksel;
200
201   // interrupt state
202   int m_vic_irq;
203};
204
205
206class cbm2lp_state : public cbm2_state
207{
208public:
209   cbm2lp_state(const machine_config &mconfig, device_type type, const char *tag)
210      : cbm2_state(mconfig, type, tag)
211   { }
212
213   DECLARE_READ8_MEMBER( tpi2_pc_r );
214};
215
216
217class cbm2hp_state : public cbm2_state
218{
219public:
220   cbm2hp_state(const machine_config &mconfig, device_type type, const char *tag)
221      : cbm2_state(mconfig, type, tag)
222   { }
223
224   DECLARE_READ8_MEMBER( tpi2_pc_r );
225};
226
227
228
164229#endif
trunk/src/mess/video/cbmb.c
r18060r18061
1/***************************************************************************
2
3  PeT mess@utanet.at
4
5***************************************************************************/
6
7#include "emu.h"
8#include "includes/cbmb.h"
9#include "video/mc6845.h"
10
11
12
13VIDEO_START_MEMBER(cbmb_state,cbmb_crtc)
14{
15}
16
17void cbm600_vh_init(running_machine &machine)
18{
19   UINT8 *gfx = machine.root_device().memregion("gfx1")->base();
20   int i;
21
22   /* inversion logic on board */
23   for (i=0; i<0x800; i++) {
24      gfx[0x1000+i]=gfx[0x800+i];
25      gfx[0x1800+i]=gfx[0x1000+i]^0xff;
26      gfx[0x800+i]=gfx[i]^0xff;
27   }
28}
29
30void cbm700_vh_init(running_machine &machine)
31{
32   UINT8 *gfx = machine.root_device().memregion("gfx1")->base();
33   int i;
34   for (i=0; i<0x800; i++) {
35      gfx[0x1000+i]=gfx[0x800+i];
36      gfx[0x1800+i]=gfx[0x1000+i]^0xff;
37      gfx[0x800+i]=gfx[i]^0xff;
38   }
39}
40
41VIDEO_START_MEMBER(cbmb_state,cbm700)
42{
43   int i;
44
45    /* remove pixel column 9 for character codes 0 - 175 and 224 - 255 */
46   for( i = 0; i < 256; i++)
47   {
48//      if( i < 176 || i > 223 )
49      {
50         int y;
51         for( y = 0; y < machine().gfx[0]->height(); y++ ) {
52            *const_cast<UINT8 *>(machine().gfx[0]->get_data(i) + y * machine().gfx[0]->rowbytes() + 8) = 0;
53            *const_cast<UINT8 *>(machine().gfx[1]->get_data(i) + y * machine().gfx[1]->rowbytes() + 8) = 0;
54         }
55      }
56   }
57}
58
59void cbmb_vh_set_font(running_machine &machine, int font)
60{
61   cbmb_state *state = machine.driver_data<cbmb_state>();
62   state->m_font=font;
63}
64
65MC6845_UPDATE_ROW( cbm600_update_row )
66{
67   cbmb_state *state = device->machine().driver_data<cbmb_state>();
68   const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
69   UINT8 *videoram = state->m_videoram;
70   int i;
71
72   for( i = 0; i < x_count; i++ ) {
73      if ( i == cursor_x ) {
74         bitmap.plot_box( device->machine().gfx[state->m_font]->width() * i, y, device->machine().gfx[state->m_font]->width(), 1, palette[1] );
75      } else {
76         drawgfx_opaque( bitmap, cliprect, device->machine().gfx[state->m_font], videoram[(ma+i )& 0x7ff], 0, 0, 0, device->machine().gfx[state->m_font]->width() * i, y-ra );
77      }
78   }
79}
80
81MC6845_UPDATE_ROW( cbm700_update_row )
82{
83   cbmb_state *state = device->machine().driver_data<cbmb_state>();
84   const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
85   UINT8 *videoram = state->m_videoram;
86   int i;
87
88   for( i = 0; i < x_count; i++ ) {
89      if ( i == cursor_x ) {
90         bitmap.plot_box( device->machine().gfx[state->m_font]->width() * i, y, device->machine().gfx[state->m_font]->width(), 1, palette[1] );
91      } else {
92         drawgfx_opaque( bitmap, cliprect, device->machine().gfx[state->m_font], videoram[(ma+i) & 0x7ff], 0, 0, 0, device->machine().gfx[state->m_font]->width() * i, y-ra );
93      }
94   }
95}
96
97WRITE_LINE_DEVICE_HANDLER( cbmb_display_enable_changed )
98{
99}
100
trunk/src/mess/mess.lst
r18060r18061
618618bx256hp   // Commodore BX256HP
619619cbm710   // Commodore CBM 710
620620cbm720   // Commodore CBM 720
621cbm720se  // Commodore CBM 720 (Sweden / Finland)
621cbm720sw  // Commodore CBM 720 (Sweden / Finland)
622cbm730
622623p500     // Commodore P500 (proto, a.k.a. C128-40, PET-II)
623624
624625c264
trunk/src/mess/drivers/cbmb.c
r18060r18061
1/***************************************************************************
2    commodore b series computer
3
4    PeT mess@utanet.at
5
6    documentation
7     vice emulator
8     www.funet.fi
9***************************************************************************/
10
11/*
12
132008 - Driver Updates
14---------------------
15
16(most of the informations are taken from http://www.zimmers.net/cbmpics/ )
17(according to http://ca.geocities.com/sjgray@rogers.com/CBM/index.html there
18are MANY more models in this family... but I haven't found confirmations, nor
19dumps)
20
21[CBM systems which belong to this driver]
22
23* Commodore CBM-II Series (1983)
24
25  Notice that, despite the Datasette port present on the board, the BASIC ROMs
26miss the routines needed to actually load from a tape
27
28  Various models:
29
30U.S. name           EU name     RAM
31
32B500 (*)            -           128k
33B128                CBM 610     128k
34B256                CBM 620     256k
35B128-80HP (**)      CBM 710     128k
36B256-80HP (**)      CBM 720     256k
37BX256-80HP (***)    CBM 730     256k
38
39(*) Prototype for the B128? As you can read at http://www.zimmers.net/cbmpics/cb500.html
40    the naming of these machines is not clear: either they were B500/128 &
41    B500/256 or B128 & B256. However, these names always refer to the low
42    profile models.
43(**) HP stands for High Profile. The other systems were the low profile models.
44    HP machines had a detachable keyboard
45(***) Additional 8088 CPU present
46
47CPU: MOS 6509 (2 MHz)
48RAM: 128 Kilobytes (Expandable to 256k internal, 704k external)
49ROM: 24 Kilobytes
50Video: MOS 6545 CTRC (Text: 80 columns, 25 rows)
51Sound: MOS 6581 SID (3 voice stereo synthesizer/digital sound capabilities)
52Ports: CSG 6551/6525x2/6526 (IEEE-488 port; CBM Datasette port; RS232 port;
53    CBM Monitor port; CBM-II/PET-II expansion port; 1 RCA audio port; Power
54    and reset switches
55Keyboard: Full-sized 102 key QWERTY (19 key numeric keypad!; 4 direction
56    cursor-pad)
57
58
59* Commodore PET-II Series (1983)
60
61  This series only features the P500 machine, which never even reached the
62market. In this machine, the Datasette port can be used (the BASIC ROMs
63contain the necessary routines). It is also probably know as C128-40.
64
65CPU: CSG 6509 (1 MHz)
66RAM: 128 kilobytes, expandable to 720k
67ROM: 24 kilobytes
68Video: CSG 6569 "VIC-II" (320 x 200 Hi-Resolution; 40 columns text; Palette
69    of 16 colors)
70Sound: CSG 6581 "SID" (3 voice stereo synthesizer/digital sound capabilities)
71Ports: CSG 6551/6522 (2 Joystick/Mouse ports; IEEE-488 port; CBM Datasette
72    port; RS232 port; CBM Monitor port; CBM-II/PET-II expansion port; 1 RCA
73    audio port; Power and reset switches)
74Keyboard: Full-sized 102 key QWERTY (19 key numeric keypad!; 4 direction
75    cursor-pad)
76
77[To Do]
78
79* Support is still missing for: Sound, internal slots
80
81* Emulate 8088 co-processor for BX-256HP and eventually add its European
82    counterpart CBM 730
83
84* Add better P500 emulation (almost everything: memory access, inputs,
85    Datasette, etc.)
86
87* Was CBM 710 / 720 monitor at 50Hz? If not remove MACHINE_CONFIG_START( cbm700pal, cbmb_state )
88    and use the 60Hz version for the whole High Profile
89
90* Find info about the following models (if ever existed):
91    + BX128-80HP
92    + CBM 700
93    + CBM 505, CBM 510 (these seems proto as CBM 500 but with less RAM, 64
94        & 128)
95*/
96
97
98#include "emu.h"
99//#include "cpu/i86/i86.h"
100#include "cpu/m6502/m6509.h"
101#include "sound/sid6581.h"
102#include "machine/6525tpi.h"
103#include "machine/6526cia.h"
104
105#include "formats/cbm_snqk.h"
106#include "includes/cbm.h"
107#include "includes/cbmb.h"
108#include "machine/ieee488.h"
109#include "machine/cbmipt.h"
110#include "video/mos6566.h"
111#include "video/mc6845.h"
112
113#include "includes/cbmb.h"
114
115
116/*************************************
117 *
118 *  Main CPU memory handlers
119 *
120 *************************************/
121
122
123static ADDRESS_MAP_START(cbmb_mem , AS_PROGRAM, 8, cbmb_state )
124   AM_RANGE(0x00000, 0x0ffff) AM_READONLY AM_WRITENOP
125   AM_RANGE(0x10000, 0x4ffff) AM_RAM
126   AM_RANGE(0x50002, 0x5ffff) AM_READONLY AM_WRITENOP
127   AM_RANGE(0x60000, 0xf07ff) AM_RAM
128#if 0
129   AM_RANGE(0xf0800, 0xf0fff) AM_READ_LEGACY(SMH_ROM)
130#endif
131   AM_RANGE(0xf1000, 0xf1fff) AM_ROM   /* cartridges or ram */
132   AM_RANGE(0xf2000, 0xf3fff) AM_ROM   /* cartridges or ram */
133   AM_RANGE(0xf4000, 0xf5fff) AM_ROM
134   AM_RANGE(0xf6000, 0xf7fff) AM_ROM
135   AM_RANGE(0xf8000, 0xfbfff) AM_ROM AM_SHARE("basic")
136   AM_RANGE(0xfd000, 0xfd7ff) AM_RAM AM_SHARE("videoram") /* VIDEORAM */
137   AM_RANGE(0xfd800, 0xfd800) AM_MIRROR(0xfe) AM_DEVWRITE("crtc", mc6845_device, address_w)
138   AM_RANGE(0xfd801, 0xfd801) AM_MIRROR(0xfe) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
139   /* disk units */
140   AM_RANGE(0xfda00, 0xfdaff) AM_DEVREADWRITE("sid6581", sid6581_device, read, write)
141   /* db00 coprocessor */
142   AM_RANGE(0xfdc00, 0xfdcff) AM_DEVREADWRITE_LEGACY("cia", mos6526_r, mos6526_w)
143   /* dd00 acia */
144   AM_RANGE(0xfde00, 0xfdeff) AM_DEVREADWRITE_LEGACY("tpi6525_0", tpi6525_r, tpi6525_w)
145   AM_RANGE(0xfdf00, 0xfdfff) AM_DEVREADWRITE_LEGACY("tpi6525_1", tpi6525_r, tpi6525_w)
146   AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_SHARE("kernal")
147ADDRESS_MAP_END
148
149
150/*************************************
151 *
152 *  Input Ports
153 *
154 *************************************/
155
156
157static INPUT_PORTS_START( p500 )
158   PORT_INCLUDE( cbmb_keyboard )         /* ROW0 -> ROW11 */
159
160   PORT_INCLUDE( cbmb_special )         /* SPECIAL */
161
162   PORT_INCLUDE( c64_controls )         /* CTRLSEL, JOY0, JOY1, PADDLE0 -> PADDLE3, TRACKX, TRACKY, LIGHTX, LIGHTY, OTHER */
163INPUT_PORTS_END
164
165
166static INPUT_PORTS_START( cbm600 )
167   PORT_INCLUDE( p500 )
168
169   PORT_MODIFY("ROW0")
170   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Graph  Norm") PORT_CODE(KEYCODE_PGUP)
171   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RVS  Off") PORT_CODE(KEYCODE_HOME)
172INPUT_PORTS_END
173
174
175static INPUT_PORTS_START( cbm600pal )
176   PORT_INCLUDE( p500 )
177
178   PORT_MODIFY("ROW0")
179   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Graph  Norm") PORT_CODE(KEYCODE_HOME)
180   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ASCII  DIN") PORT_CODE(KEYCODE_PGUP)
181INPUT_PORTS_END
182
183
184static INPUT_PORTS_START( cbm700 )
185   PORT_INCLUDE( p500 )
186
187   PORT_MODIFY("ROW0")
188   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RVS  Off") PORT_CODE(KEYCODE_HOME)
189   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Graph  Norm") PORT_CODE(KEYCODE_PGUP)
190INPUT_PORTS_END
191
192
193
194/*************************************
195 *
196 *  Graphics definitions
197 *
198 *************************************/
199
200
201static const unsigned char cbm700_palette[] =
202{
203   0,0,0, /* black */
204   0,0x80,0, /* green */
205};
206
207static const unsigned short cbmb_colortable[] = {
208   0, 1
209};
210
211static const gfx_layout cbm600_charlayout =
212{
213   8,16,
214   256,                                    /* 256 characters */
215   1,                      /* 1 bits per pixel */
216   { 0 },                  /* no bitplanes; 1 bit per pixel */
217   /* x offsets */
218   { 0,1,2,3,4,5,6,7 },
219   /* y offsets */
220   { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
221     8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8
222   },
223   8*16
224};
225
226static const gfx_layout cbm700_charlayout =
227{
228   9,16,
229   256,                                    /* 256 characters */
230   1,                      /* 1 bits per pixel */
231   { 0 },                  /* no bitplanes; 1 bit per pixel */
232   /* x offsets */
233   { 0,1,2,3,4,5,6,7,7 }, // 8.column will be cleared in cbm700_vh_start
234   /* y offsets */
235   { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
236     8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8
237   },
238   8*16
239};
240
241static GFXDECODE_START( cbm600 )
242   GFXDECODE_ENTRY( "gfx1", 0x0000, cbm600_charlayout, 0, 1 )
243   GFXDECODE_ENTRY( "gfx1", 0x1000, cbm600_charlayout, 0, 1 )
244GFXDECODE_END
245
246static GFXDECODE_START( cbm700 )
247   GFXDECODE_ENTRY( "gfx1", 0x0000, cbm700_charlayout, 0, 1 )
248   GFXDECODE_ENTRY( "gfx1", 0x1000, cbm700_charlayout, 0, 1 )
249GFXDECODE_END
250
251PALETTE_INIT_MEMBER(cbmb_state,cbm700)
252{
253   int i;
254
255   for ( i = 0; i < 2; i++ ) {
256      palette_set_color_rgb(machine(), i, cbm700_palette[i*3], cbm700_palette[i*3+1], cbm700_palette[i*3+2]);
257   }
258}
259
260
261static const mc6845_interface cbm600_crtc = {
262   "screen",
263   8 /*?*/,
264   NULL,
265   cbm600_update_row,
266   NULL,
267   DEVCB_LINE(cbmb_display_enable_changed),
268   DEVCB_NULL,
269   DEVCB_NULL,
270   DEVCB_NULL,
271   NULL
272};
273
274static const mc6845_interface cbm700_crtc = {
275   "screen",
276   9 /*?*/,
277   NULL,
278   cbm700_update_row,
279   NULL,
280   DEVCB_LINE(cbmb_display_enable_changed),
281   DEVCB_NULL,
282   DEVCB_NULL,
283   DEVCB_NULL,
284   NULL
285};
286
287static const sid6581_interface sid_intf =
288{
289   DEVCB_NULL,
290   DEVCB_NULL
291};
292
293
294/*************************************
295 *
296 *  Machine driver
297 *
298 *************************************/
299
300static const tpi6525_interface cbmb_tpi_0_intf =
301{
302   DEVCB_LINE(cbmb_irq),
303   DEVCB_HANDLER(cbmb_tpi0_port_a_r),
304   DEVCB_HANDLER(cbmb_tpi0_port_a_w),
305   DEVCB_HANDLER(cbmb_tpi0_port_b_r),
306   DEVCB_HANDLER(cbmb_tpi0_port_b_w),
307   DEVCB_NULL,
308   DEVCB_NULL,
309   DEVCB_LINE(cbmb_change_font),
310   DEVCB_NULL
311};
312
313static const tpi6525_interface cbmb_tpi_1_intf =
314{
315   DEVCB_NULL,
316   DEVCB_HANDLER(cbmb_keyboard_line_a),
317   DEVCB_HANDLER(cbmb_keyboard_line_select_a),
318   DEVCB_HANDLER(cbmb_keyboard_line_b),
319   DEVCB_HANDLER(cbmb_keyboard_line_select_b),
320   DEVCB_HANDLER(cbmb_keyboard_line_c),
321   DEVCB_HANDLER(cbmb_keyboard_line_select_c),
322   DEVCB_NULL,
323   DEVCB_NULL
324};
325
326static IEEE488_INTERFACE( ieee488_intf )
327{
328   DEVCB_NULL,
329   DEVCB_NULL,
330   DEVCB_NULL,
331   DEVCB_NULL,
332   DEVCB_NULL,
333   DEVCB_NULL,
334   DEVCB_NULL,
335   DEVCB_NULL
336};
337
338static MACHINE_CONFIG_START( cbm600, cbmb_state )
339   /* basic machine hardware */
340   MCFG_CPU_ADD("maincpu", M6509, 7833600)        /* 7.8336 MHz */
341   MCFG_CPU_PROGRAM_MAP(cbmb_mem)
342
343   MCFG_MACHINE_RESET_OVERRIDE(cbmb_state, cbmb )
344
345    /* video hardware */
346   MCFG_SCREEN_ADD("screen", RASTER)
347   MCFG_SCREEN_REFRESH_RATE(60)
348   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
349   MCFG_SCREEN_SIZE(640, 200)
350   MCFG_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 200 - 1)
351   MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
352
353   MCFG_GFXDECODE( cbm600 )
354   MCFG_PALETTE_LENGTH(ARRAY_LENGTH(cbm700_palette) / 3)
355   MCFG_PALETTE_INIT_OVERRIDE(cbmb_state, cbm700 )
356
357   MCFG_MC6845_ADD("crtc", MC6845, XTAL_18MHz / 8 /*?*/ /*  I do not know if this is correct, please verify */, cbm600_crtc)
358
359   MCFG_VIDEO_START_OVERRIDE(cbmb_state, cbmb_crtc )
360
361   /* sound hardware */
362   MCFG_SPEAKER_STANDARD_MONO("mono")
363   MCFG_SOUND_ADD("sid6581", SID6581, 1000000)
364   MCFG_SOUND_CONFIG(sid_intf)
365   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
366
367   /* quickload */
368   MCFG_QUICKLOAD_ADD("quickload", cbmb, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
369
370   /* cia */
371   MCFG_MOS6526R1_ADD("cia", 7833600, 60, cbmb_cia)
372
373   /* tpi */
374   MCFG_TPI6525_ADD("tpi6525_0", cbmb_tpi_0_intf)
375   MCFG_TPI6525_ADD("tpi6525_1", cbmb_tpi_1_intf)
376
377   /* IEEE bus */
378   MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8250")
379
380   MCFG_FRAGMENT_ADD(cbmb_cartslot)
381MACHINE_CONFIG_END
382
383
384static MACHINE_CONFIG_DERIVED( cbm600pal, cbm600 )
385   MCFG_SCREEN_MODIFY("screen")
386   MCFG_SCREEN_REFRESH_RATE(50)
387MACHINE_CONFIG_END
388
389
390static MACHINE_CONFIG_DERIVED( cbm700, cbm600 )
391   MCFG_SCREEN_MODIFY("screen")
392   MCFG_SCREEN_SIZE(720, 350)
393   MCFG_SCREEN_VISIBLE_AREA(0, 720 - 1, 0, 350 - 1)
394   MCFG_GFXDECODE( cbm700 )
395
396   MCFG_DEVICE_REMOVE("crtc")
397   MCFG_MC6845_ADD("crtc", MC6845, XTAL_18MHz / 8 /*? I do not know if this is correct, please verify */, cbm700_crtc)
398
399   MCFG_VIDEO_START_OVERRIDE(cbmb_state, cbm700 )
400MACHINE_CONFIG_END
401
402
403static MACHINE_CONFIG_DERIVED( cbm700pal, cbm700 )
404   MCFG_SCREEN_MODIFY("screen")
405   MCFG_SCREEN_REFRESH_RATE(50)
406MACHINE_CONFIG_END
407
408
409static MACHINE_CONFIG_DERIVED( bx256hp, cbm700 )
410
411//  MCFG_CPU_ADD("8088", I8088, /* ? */)
412MACHINE_CONFIG_END
413
414
415/*************************************
416 *
417 *  ROM definition(s)
418 *
419 *************************************/
420
421
422/* Low Profile Series - CBM 600 Series */
423/* chargen: 8x16 chars for 8x8 size; 128 ascii, 128 ascii graphics; inversion logic in hardware */
424
425ROM_START( b500 )
426   ROM_REGION( 0x100000, "maincpu", 0 )
427   ROM_LOAD( "901243-01.u59",  0xf8000, 0x2000, CRC(22822706) SHA1(901bbf59d8b8682b481be8b2de99b406fffa4bab) )
428   ROM_LOAD( "901242-01a.u60", 0xfa000, 0x2000, CRC(ef13d595) SHA1(2fb72985d7d4ab69c5780179178828c931a9f5b0) )
429   ROM_LOAD( "901244-01.u61",  0xfe000, 0x2000, CRC(93414213) SHA1(a54a593dbb420ae1ac39b0acde9348160f7840ff) )
430
431   ROM_REGION( 0x2000, "gfx1", 0 )
432   ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
433
434   ROM_REGION( 0xf5, "pla", 0 )
435   ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
436ROM_END
437
438ROM_START( b128 )
439   ROM_REGION( 0x100000, "maincpu", 0 )
440   ROM_SYSTEM_BIOS( 0, "default", "BASIC 4.0 r" )
441   ROMX_LOAD( "901243-04a.u59", 0xf8000, 0x2000, CRC(b0dcb56d) SHA1(08d333208060ee2ce84d4532028d94f71c016b96), ROM_BIOS(1) )
442   ROMX_LOAD( "901242-04a.u60", 0xfa000, 0x2000, CRC(de04ea4f) SHA1(7c6de17d46a3343dc597d9b9519cf63037b31908), ROM_BIOS(1) )
443   ROMX_LOAD( "901244-04a.u61", 0xfe000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(1) )
444   ROM_SYSTEM_BIOS( 1, "older", "BASIC 4.0" )
445   ROMX_LOAD( "901243-02b.u59", 0xf8000, 0x2000, CRC(9d0366f9) SHA1(625f7337ea972a8bce2bdf2daababc0ed0b3b69b), ROM_BIOS(2) )
446   ROMX_LOAD( "901242-02b.u60", 0xfa000, 0x2000, CRC(837978b5) SHA1(56e8d2f86bf73ba36b3d3cb84dd75806b66c530a), ROM_BIOS(2) )
447   ROMX_LOAD( "901244-03b.u61", 0xfe000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(2) )
448
449   ROM_REGION( 0x2000, "gfx1", 0 )
450   ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
451
452   ROM_REGION( 0xf5, "pla", 0 )
453   ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
454ROM_END
455
456ROM_START( b256 )
457   ROM_REGION( 0x100000, "maincpu", 0 )
458   ROM_LOAD( "901241-03.u59", 0xf8000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
459   ROM_LOAD( "901240-03.u60", 0xfa000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
460   ROM_SYSTEM_BIOS( 0, "default", "BASIC 4.0 r" )
461   ROMX_LOAD( "901244-04a.u61", 0xfe000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(1) )
462   ROM_SYSTEM_BIOS( 1, "older", "BASIC 4.0" )
463   ROMX_LOAD( "901244-03b.u61", 0xfe000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(2) )
464
465   ROM_REGION( 0x2000, "gfx1", 0 )
466   ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
467
468   ROM_REGION( 0xf5, "pla", 0 )
469   ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
470ROM_END
471
472
473#define rom_cbm610   rom_b128
474#define rom_cbm620   rom_b256
475
476
477ROM_START( cbm620hu )
478   ROM_REGION( 0x100000, "maincpu", 0 )
479   ROM_LOAD( "610.u60", 0xf8000, 0x4000, CRC(8eed0d7e) SHA1(9d06c5c3c012204eaaef8b24b1801759b62bf57e) )
480   ROM_LOAD( "kernhun.bin", 0xfe000, 0x2000, CRC(0ea8ca4d) SHA1(9977c9f1136ee9c04963e0b50ae0c056efa5663f) )
481
482   ROM_REGION( 0x2000, "gfx1", 0 )
483   ROM_LOAD( "charhun.bin", 0x0000, 0x2000, CRC(1fb5e596) SHA1(3254e069f8691b30679b19a9505b6afdfedce6ac) )
484
485   ROM_REGION( 0xf5, "pla", 0 )
486   ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
487ROM_END
488
489
490/* High Profile Series - CBM 700 Series */
491/* chargen: 8x16 chars for 9x14 size */
492
493ROM_START( b128hp )
494   ROM_REGION( 0x100000, "maincpu", 0 )
495   ROM_SYSTEM_BIOS( 0, "default", "BASIC 4.0 r" )
496   ROMX_LOAD( "901243-04a.u59", 0xf8000, 0x2000, CRC(b0dcb56d) SHA1(08d333208060ee2ce84d4532028d94f71c016b96), ROM_BIOS(1) )
497   ROMX_LOAD( "901242-04a.u60", 0xfa000, 0x2000, CRC(de04ea4f) SHA1(7c6de17d46a3343dc597d9b9519cf63037b31908), ROM_BIOS(1) )
498   ROMX_LOAD( "901244-04a.u61", 0xfe000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(1) )
499   ROM_SYSTEM_BIOS( 1, "older", "BASIC 4.0" )
500   ROMX_LOAD( "901243-02b.u59", 0xf8000, 0x2000, CRC(9d0366f9) SHA1(625f7337ea972a8bce2bdf2daababc0ed0b3b69b), ROM_BIOS(2) )
501   ROMX_LOAD( "901242-02b.u60", 0xfa000, 0x2000, CRC(837978b5) SHA1(56e8d2f86bf73ba36b3d3cb84dd75806b66c530a), ROM_BIOS(2) )
502   ROMX_LOAD( "901244-03b.u61", 0xfe000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(2) )
503
504   ROM_REGION( 0x2000, "gfx1", 0 )
505   ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
506
507   ROM_REGION( 0xf5, "pla", 0 )
508   ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
509ROM_END
510
511ROM_START( b256hp )
512   ROM_REGION( 0x100000, "maincpu", 0 )
513   ROM_LOAD( "901241-03.u59", 0xf8000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
514   ROM_LOAD( "901240-03.u60", 0xfa000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
515   ROM_SYSTEM_BIOS( 0, "default", "BASIC 4.0 r" )
516   ROMX_LOAD( "901244-04a.u61", 0xfe000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(1) )
517   ROM_SYSTEM_BIOS( 1, "older", "BASIC 4.0" )
518   ROMX_LOAD( "901244-03b.u61", 0xfe000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(2) )
519
520   ROM_REGION( 0x2000, "gfx1", 0 )
521   ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
522
523   ROM_REGION( 0xf5, "pla", 0 )
524   ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
525ROM_END
526
527#define rom_cbm710   rom_b128hp
528#define rom_cbm720   rom_b256hp
529
530
531/* BX-256HP - only ROM loading added */
532ROM_START( bx256hp )
533   ROM_REGION( 0x100000, "maincpu", 0 )
534   ROM_LOAD( "901241-03.u59", 0xf8000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
535   ROM_LOAD( "901240-03.u60", 0xfa000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
536   ROM_SYSTEM_BIOS( 0, "default", "BASIC 4.0 r" )
537   ROMX_LOAD( "901244-04a.u61", 0xfe000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(1) )
538   ROM_SYSTEM_BIOS( 1, "older", "BASIC 4.0" )
539   ROMX_LOAD( "901244-03b.u61", 0xfe000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(2) )
540
541   ROM_REGION( 0x1000, "8088", 0)
542   ROM_LOAD( "8088.u14", 0x0000, 0x1000, CRC(195e0281) SHA1(ce8acd2a5fb6cbd70d837811d856d656544a1f97) )
543
544   ROM_REGION( 0x2000, "gfx1", 0 )
545   ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
546
547   ROM_REGION( 0xf5, "pla", 0 )
548   ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
549ROM_END
550
551ROM_START( cbm720se )
552   ROM_REGION( 0x100000, "maincpu", 0 )
553   ROM_LOAD( "901241-03.u59", 0xf8000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
554   ROM_LOAD( "901240-03.u60", 0xfa000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
555   ROM_LOAD( "swe-901244-03.u61", 0xfe000, 0x2000, CRC(87bc142b) SHA1(fa711f6082741b05a9c80744f5aee68dc8c1dcf4) )
556
557   ROM_REGION( 0x2000, "gfx1", 0 )
558   ROM_LOAD( "901233-03.u25", 0x0000, 0x1000, CRC(09518b19) SHA1(2e28491e31e2c0a3b6db388055216140a637cd09) )
559
560   ROM_REGION( 0xf5, "pla", 0 )
561   ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
562ROM_END
563
564
565/***************************************************************************
566
567  Game driver(s)
568
569***************************************************************************/
570
571/*    YEAR  NAME      PARENT  COMPAT  MACHINE    INPUT      INIT       COMPANY                             FULLNAME                                  FLAGS */
572COMP( 1983,   b500,     cbm610, 0,      cbm600,    cbm600, cbmb_state,    cbm600,    "Commodore Business Machines",  "B500 (proto, 60Hz)",                     GAME_NOT_WORKING )
573COMP( 1983,   b128,     cbm610, 0,      cbm600pal, cbm600pal, cbmb_state, cbm600pal, "Commodore Business Machines",  "B128 (60Hz)",                            GAME_NOT_WORKING )
574COMP( 1983,   b256,     cbm610, 0,      cbm600pal, cbm600pal, cbmb_state, cbm600hu,  "Commodore Business Machines",  "B256 (60Hz)",                            GAME_NOT_WORKING )
575COMP( 1983,   cbm610,   0,      0,      cbm600,    cbm600, cbmb_state,    cbm600,    "Commodore Business Machines",  "CBM 610 (50Hz)",                         GAME_NOT_WORKING )
576COMP( 1983,   cbm620,   cbm610, 0,      cbm600pal, cbm600pal, cbmb_state, cbm600pal, "Commodore Business Machines",  "CBM 620 (50Hz)",                         GAME_NOT_WORKING )
577COMP( 1983,   cbm620hu, cbm610, 0,      cbm600pal, cbm600pal, cbmb_state, cbm600hu,  "Commodore Business Machines",  "CBM 620 (Hungary, 50Hz)",                GAME_NOT_WORKING )
578
579COMP( 1983, b128hp,   cbm610, 0,      cbm700,    cbm700, cbmb_state,    cbm700,    "Commodore Business Machines",  "B128-80HP (60Hz)",                       GAME_NOT_WORKING )
580COMP( 1983, b256hp,   cbm610, 0,      cbm700,    cbm700, cbmb_state,    cbm700,    "Commodore Business Machines",  "B256-80HP (60Hz)",                       GAME_NOT_WORKING )
581COMP( 1983, cbm710,   cbm610, 0,      cbm700pal, cbm700, cbmb_state,    cbm700,    "Commodore Business Machines",  "CBM 710 (50Hz)",                         GAME_NOT_WORKING )
582COMP( 1983, cbm720,   cbm610, 0,      cbm700pal, cbm700, cbmb_state,    cbm700,    "Commodore Business Machines",  "CBM 720 (50Hz)",                         GAME_NOT_WORKING )
583COMP( 1983, cbm720se, cbm610, 0,      cbm700pal, cbm700, cbmb_state,    cbm700,    "Commodore Business Machines",  "CBM 720 (Sweden/Finland, 50Hz)",         GAME_NOT_WORKING )
584
585COMP( 1983,   bx256hp,  cbm610, 0,      bx256hp,   cbm700, cbmb_state,    cbm700,    "Commodore Business Machines",  "BX256-80HP (60Hz)",                      GAME_NOT_WORKING )
trunk/src/mess/drivers/cbm2.c
r18060r18061
22
33    TODO:
44
5   - cbm600
6   - cbm700
5   - foreign keyboard inputs
6   - cbm620hu charom banking?
77   - read VIC video RAM thru PLA
88   - read VIC color RAM thru PLA
99   - user port
r18060r18061
2929#define A12 BIT(offset, 12)
3030#define A11 BIT(offset, 11)
3131#define A10 BIT(offset, 10)
32#define A0 BIT(offset, 0)
3233#define VA12 BIT(va, 12)
3334
3435
3536
3637//**************************************************************************
37//  INTERRUPTS
38//  ADDRESS DECODING
3839//**************************************************************************
3940
4041//-------------------------------------------------
41//  check_interrupts -
42//  bankswitch -
4243//-------------------------------------------------
4344
44void p500_state::check_interrupts()
45void cbm2_state::bankswitch(offs_t offset, int busy2, int eras, int ecas, int refen, int cas, int ras, int *sysioen, int *dramen,
46   int *casseg1, int *casseg2, int *casseg3, int *casseg4, int *buframcs, int *extbufcs, int *vidramcs,
47   int *diskromcs, int *csbank1, int *csbank2, int *csbank3, int *basiccs, int *knbcs, int *kernalcs,
48   int *crtccs, int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs)
4549{
46   m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq);   
50   UINT32 input = P0 << 15 | P1 << 14 | P2 << 13 | P3 << 12 | busy2 << 11 | eras << 10 | ecas << 9 | refen << 8 | cas << 7 | ras << 6;
51   UINT32 data = m_pla1->read(input);
4752
48   mos6526_flag_w(m_cia, m_cass_rd && m_user_flag);
53   *casseg1 = BIT(data, 0);
54   //*rasseg1 = BIT(data, 1);
55   //*rasseg2 = BIT(data, 2);
56   *casseg2 = BIT(data, 3);
57   //*rasseg4 = BIT(data, 4);
58   *casseg4 = BIT(data, 5);
59   *casseg3 = BIT(data, 6);
60   //*rasseg3 = BIT(data, 7);
61
62   int busen1 = m_dramon;
63   int decoden = 0; // TODO
64   *sysioen = !(P0 && P1 && P2 && P3) && busen1;
65   *dramen = !((!(P0 && P1 && P2 && P3)) && busen1);
66
67   if (!decoden && !*sysioen)
68   {
69      switch ((offset >> 13) & 0x07)
70      {
71      case 0:
72         switch ((offset >> 11) & 0x03)
73         {
74         case 0: *buframcs = 0; break;
75         case 1: *extbufcs = 0; break;
76         case 2: // fallthru
77         case 3: *diskromcs = 0; break;
78         }
79         break;
80
81      case 1: *csbank1 = 0; break;
82      case 2: *csbank2 = 0; break;
83      case 3: *csbank3 = 0; break;
84      case 4: *basiccs = 0; break;
85      case 5: *knbcs = 0; break;
86      case 6:
87         switch ((offset >> 11) & 0x03)
88         {
89         case 2: *vidramcs = 0; break;
90         case 3:
91            switch ((offset >> 8) & 0x07)
92            {
93            case 0: *crtccs = 0; break;
94            case 1: *cs1 = 0; break;
95            case 2: *sidcs = 0; break;
96            case 3: *extprtcs = 0; break;
97            case 4: *ciacs = 0; break;
98            case 5: *aciacs = 0; break;
99            case 6: *tript1cs = 0; break;
100            case 7: *tript2cs = 0; break;
101            }
102            break;
103         }
104         break;
105
106      case 7: *kernalcs = 0; break;
107      }
108   }
49109}
50110
51111
112//-------------------------------------------------
113//  read -
114//-------------------------------------------------
52115
53//**************************************************************************
54//  MEMORY MANAGEMENT UNIT
55//**************************************************************************
116READ8_MEMBER( cbm2_state::read )
117{
118   int busy2 = 1, eras = 1, ecas = 1, refen = 1, cas = 1, ras = 1, sysioen = 1, dramen = 1;
119   int casseg1 = 1, casseg2 = 1, casseg3 = 1, casseg4 = 1, buframcs = 1, extbufcs = 1, vidramcs = 1;
120   int diskromcs = 1, csbank1 = 1, csbank2 = 1, csbank3 = 1, basiccs = 1, knbcs = 1, kernalcs = 1;
121   int crtccs = 1, cs1 = 1, sidcs = 1, extprtcs = 1, ciacs = 1, aciacs = 1, tript1cs = 1, tript2cs = 1;
56122
123   bankswitch(offset, busy2, eras, ecas, refen, cas, ras, &sysioen, &dramen,
124      &casseg1, &casseg2, &casseg3, &casseg4, &buframcs, &extbufcs, &vidramcs,
125      &diskromcs, &csbank1, &csbank2, &csbank3, &basiccs, &knbcs, &kernalcs,
126      &crtccs, &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs);
127/*
128   if (!space.debugger_access())
129   logerror("%05x %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u %u - %u %u %u %u %u %u %u %u\n", offset, sysioen, dramen,
130      casseg1, casseg2, casseg3, casseg4, buframcs, extbufcs, vidramcs,
131      diskromcs, csbank1, csbank2, csbank3, basiccs, knbcs, kernalcs,
132      crtccs, cs1, sidcs, extprtcs, ciacs, aciacs, tript1cs, tript2cs);
133*/
134   UINT8 data = 0;
135
136   if (!dramen)
137   {
138      if (!casseg1)
139      {
140         data = m_ram->pointer()[offset & 0xffff];
141      }
142      else if (!casseg2)
143      {
144         data = m_ram->pointer()[0x10000 | (offset & 0xffff)];
145      }
146      else if (!casseg3 && (m_ram->size() > 0x20000))
147      {
148         data = m_ram->pointer()[0x20000 | (offset & 0xffff)];
149      }
150      else if (!casseg4 && (m_ram->size() > 0x30000))
151      {
152         data = m_ram->pointer()[0x30000 | (offset & 0xffff)];
153      }
154   }
155
156   if (!sysioen)
157   {
158      if (!buframcs)
159      {
160         data = m_buffer_ram[offset & 0x7ff];
161      }
162      else if (!vidramcs)
163      {
164         data = m_video_ram[offset & 0x7ff];
165      }
166      else if (!basiccs || !knbcs)
167      {
168         data = m_basic[offset & 0x3fff];
169      }
170      else if (!kernalcs)
171      {
172         data = m_kernal[offset & 0x1fff];
173      }
174      else if (!crtccs)
175      {
176         if (A0)
177         {
178            data = m_crtc->register_r(space, 0);
179         }
180         else
181         {
182            data = m_crtc->status_r(space, 0);
183         }
184      }
185      else if (!sidcs)
186      {
187         data = m_sid->read(space, offset & 0x1f);
188      }
189      else if (!ciacs)
190      {
191         data = m_cia->read(space, offset & 0x0f);
192      }
193      else if (!aciacs)
194      {
195         data = m_acia->read(space, offset & 0x03);
196      }
197      else if (!tript1cs)
198      {
199         data = m_tpi1->read(space, offset & 0x07);
200      }
201      else if (!tript2cs)
202      {
203         data = m_tpi2->read(space, offset & 0x07);
204      }
205
206      data = m_exp->read(space, offset & 0x1fff, data, csbank1, csbank2, csbank3);
207   }
208
209   return data;
210}
211
212
57213//-------------------------------------------------
214//  write -
215//-------------------------------------------------
216
217WRITE8_MEMBER( cbm2_state::write )
218{
219   int busy2 = 1, eras = 1, ecas = 1, refen = 1, cas = 1, ras = 1, sysioen = 1, dramen = 1;
220   int casseg1 = 1, casseg2 = 1, casseg3 = 1, casseg4 = 1, buframcs = 1, extbufcs = 1, vidramcs = 1;
221   int diskromcs = 1, csbank1 = 1, csbank2 = 1, csbank3 = 1, basiccs = 1, knbcs = 1, kernalcs = 1;
222   int crtccs = 1, cs1 = 1, sidcs = 1, extprtcs = 1, ciacs = 1, aciacs = 1, tript1cs = 1, tript2cs = 1;
223
224   bankswitch(offset, busy2, eras, ecas, refen, cas, ras, &sysioen, &dramen,
225      &casseg1, &casseg2, &casseg3, &casseg4, &buframcs, &extbufcs, &vidramcs,
226      &diskromcs, &csbank1, &csbank2, &csbank3, &basiccs, &knbcs, &kernalcs,
227      &crtccs, &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs);
228
229   if (!dramen)
230   {
231      if (!casseg1)
232      {
233         m_ram->pointer()[offset & 0xffff] = data;
234      }
235      else if (!casseg2)
236      {
237         m_ram->pointer()[0x10000 | (offset & 0xffff)] = data;
238      }
239      else if (!casseg3 && (m_ram->size() > 0x20000))
240      {
241         m_ram->pointer()[0x20000 | (offset & 0xffff)] = data;
242      }
243      else if (!casseg4 && (m_ram->size() > 0x30000))
244      {
245         m_ram->pointer()[0x30000 | (offset & 0xffff)] = data;
246      }
247   }
248
249   if (!sysioen)
250   {
251      if (!buframcs)
252      {
253         m_buffer_ram[offset & 0x7ff] = data;
254      }
255      else if (!vidramcs)
256      {
257         m_video_ram[offset & 0x7ff] = data;
258      }
259      else if (!basiccs || !knbcs)
260      {
261         m_basic[offset & 0x3fff] = data;
262      }
263      else if (!kernalcs)
264      {
265         m_kernal[offset & 0x1fff] = data;
266      }
267      else if (!crtccs)
268      {
269         if (A0)
270         {
271            m_crtc->register_w(space, 0, data);
272         }
273         else
274         {
275            m_crtc->address_w(space, 0, data);
276         }
277      }
278      else if (!sidcs)
279      {
280         m_sid->write(space, offset & 0x1f, data);
281      }
282      else if (!ciacs)
283      {
284         m_cia->write(space, offset & 0x0f, data);
285      }
286      else if (!aciacs)
287      {
288         m_acia->write(space, offset & 0x03, data);
289      }
290      else if (!tript1cs)
291      {
292         m_tpi1->write(space, offset & 0x07, data);
293      }
294      else if (!tript2cs)
295      {
296         m_tpi2->write(space, offset & 0x07, data);
297      }
298
299      m_exp->write(space, offset & 0x1fff, data, csbank1, csbank2, csbank3);
300   }
301}
302
303
304//-------------------------------------------------
58305//  bankswitch -
59306//-------------------------------------------------
60307
r18060r18061
428675//**************************************************************************
429676
430677//-------------------------------------------------
678//  ADDRESS_MAP( cbm2_mem )
679//-------------------------------------------------
680
681static ADDRESS_MAP_START( cbm2_mem, AS_PROGRAM, 8, cbm2_state )
682   AM_RANGE(0x00000, 0xfffff) AM_READWRITE(read, write)
683ADDRESS_MAP_END
684
685
686//-------------------------------------------------
431687//  ADDRESS_MAP( p500_mem )
432688//-------------------------------------------------
433689
r18060r18061
460716//**************************************************************************
461717
462718//-------------------------------------------------
463//  INPUT_PORTS( p500 )
719//  INPUT_PORTS( cbm2 )
464720//-------------------------------------------------
465721
466static INPUT_PORTS_START( p500 )
722static INPUT_PORTS_START( cbm2 )
467723   PORT_START("PB0")
468724   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
469725   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC)
r18060r18061
616872//**************************************************************************
617873
618874//-------------------------------------------------
875//  mc6845_interface crtc_intf
876//-------------------------------------------------
877
878static MC6845_UPDATE_ROW( lp_crtc_update_row )
879{
880   cbm2_state *state = device->machine().driver_data<cbm2_state>();
881
882   int x = 0;
883
884   for (int column = 0; column < x_count; column++)
885   {
886      UINT8 code = state->m_video_ram[(ma + column) & 0x7ff];
887      offs_t char_rom_addr = (ma & 0x1000) | (state->m_graphics << 11) | ((code & 0x7f) << 4) | (ra & 0x0f);
888      UINT8 data = state->m_charom[char_rom_addr & 0xfff];
889
890      for (int bit = 0; bit < 8; bit++)
891      {
892         int color = BIT(data, 7) ^ BIT(code, 7) ^ BIT(ma, 13);
893         if (cursor_x == column) color ^= 1;
894         
895         bitmap.pix32(y, x++) = RGB_MONOCHROME_GREEN[color];
896
897         data <<= 1;
898      }
899   }
900}
901
902static const mc6845_interface lp_crtc_intf =
903{
904   SCREEN_TAG,
905   8,
906   NULL,
907   lp_crtc_update_row,
908   NULL,
909   DEVCB_NULL,
910   DEVCB_NULL,
911   DEVCB_NULL,
912   DEVCB_NULL,
913   NULL
914};
915
916
917static MC6845_UPDATE_ROW( hp_crtc_update_row )
918{
919   cbm2_state *state = device->machine().driver_data<cbm2_state>();
920
921   int x = 0;
922
923   for (int column = 0; column < x_count; column++)
924   {
925      UINT8 code = state->m_video_ram[(ma + column) & 0x7ff];
926      offs_t char_rom_addr = (ma & 0x1000) | (state->m_graphics << 11) | ((code & 0x7f) << 4) | (ra & 0x0f);
927      UINT8 data = state->m_charom[char_rom_addr & 0xfff];
928
929      for (int bit = 0; bit < 8; bit++)
930      {
931         int color = BIT(data, 7) ^ BIT(code, 7) ^ BIT(ma, 13);
932         if (cursor_x == column) color ^= 1;
933         
934         bitmap.pix32(y, x++) = RGB_MONOCHROME_GREEN[color];
935
936         data <<= 1;
937      }
938
939      x++;
940   }
941}
942
943static const mc6845_interface hp_crtc_intf =
944{
945   SCREEN_TAG,
946   9,
947   NULL,
948   hp_crtc_update_row,
949   NULL,
950   DEVCB_NULL,
951   DEVCB_NULL,
952   DEVCB_NULL,
953   DEVCB_NULL,
954   NULL
955};
956
957//-------------------------------------------------
619958//  vic2_interface vic_intf
620959//-------------------------------------------------
621960
r18060r18061
623962{
624963   m_vic_irq = state;
625964
626   check_interrupts();
965   m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq || m_user_irq);
627966}
628967
629968static MOS6567_INTERFACE( vic_intf )
r18060r18061
643982//  MOS6581_INTERFACE( sid_intf )
644983//-------------------------------------------------
645984
646READ8_MEMBER( p500_state::sid_potx_r )
985READ8_MEMBER( cbm2_state::sid_potx_r )
647986{
648987   int sela = BIT(m_cia_pa, 6);
649988   int selb = BIT(m_cia_pa, 7);
r18060r18061
656995   return data;
657996}
658997
659READ8_MEMBER( p500_state::sid_poty_r )
998READ8_MEMBER( cbm2_state::sid_poty_r )
660999{
6611000   int sela = BIT(m_cia_pa, 6);
6621001   int selb = BIT(m_cia_pa, 7);
r18060r18061
6711010
6721011static MOS6581_INTERFACE( sid_intf )
6731012{
674   DEVCB_DRIVER_MEMBER(p500_state, sid_potx_r),
675   DEVCB_DRIVER_MEMBER(p500_state, sid_poty_r)
1013   DEVCB_DRIVER_MEMBER(cbm2_state, sid_potx_r),
1014   DEVCB_DRIVER_MEMBER(cbm2_state, sid_poty_r)
6761015};
6771016
6781017
r18060r18061
6801019//  tpi6525_interface tpi1_intf
6811020//-------------------------------------------------
6821021
1022WRITE_LINE_MEMBER( cbm2_state::tpi1_irq_w )
1023{
1024   m_tpi1_irq = state;
1025
1026   m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_tpi1_irq || m_user_irq);
1027}
1028
6831029WRITE_LINE_MEMBER( p500_state::tpi1_irq_w )
6841030{
6851031   m_tpi1_irq = state;
6861032
687   check_interrupts();
1033   m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq || m_user_irq);
6881034}
6891035
690READ8_MEMBER( p500_state::tpi1_pa_r )
1036READ8_MEMBER( cbm2_state::tpi1_pa_r )
6911037{
6921038   /*
6931039   
r18060r18061
7171063   return data;
7181064}
7191065
720WRITE8_MEMBER( p500_state::tpi1_pa_w )
1066WRITE8_MEMBER( cbm2_state::tpi1_pa_w )
7211067{
7221068   /*
7231069   
r18060r18061
7431089   m_ieee->nrfd_w(BIT(data, 7));
7441090}
7451091
746READ8_MEMBER( p500_state::tpi1_pb_r )
1092READ8_MEMBER( cbm2_state::tpi1_pb_r )
7471093{
7481094   /*
7491095   
r18060r18061
7721118   return data;
7731119}
7741120
775WRITE8_MEMBER( p500_state::tpi1_pb_w )
1121WRITE8_MEMBER( cbm2_state::tpi1_pb_w )
7761122{
7771123   /*
7781124   
r18060r18061
8011147   m_cassette->motor_w(BIT(data, 6));
8021148}
8031149
1150WRITE_LINE_MEMBER( cbm2_state::tpi1_ca_w )
1151{
1152   m_graphics = state;
1153}
1154
8041155WRITE_LINE_MEMBER( p500_state::tpi1_ca_w )
8051156{
806   //logerror("STATVID %u\n", state);
807
8081157   m_statvid = state;
8091158}
8101159
8111160WRITE_LINE_MEMBER( p500_state::tpi1_cb_w )
8121161{
813   //logerror("VICDOTSEL %u\n", state);
814
8151162   m_vicdotsel = state;
8161163}
8171164
8181165static const tpi6525_interface tpi1_intf =
8191166{
1167   DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tpi1_irq_w),
1168   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_r),
1169   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_w),
1170   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_r),
1171   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_w),
1172   DEVCB_NULL,
1173   DEVCB_NULL,
1174   DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tpi1_ca_w),
1175   DEVCB_NULL
1176};
1177
1178static const tpi6525_interface p500_tpi1_intf =
1179{
8201180   DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_irq_w),
821   DEVCB_DRIVER_MEMBER(p500_state, tpi1_pa_r),
822   DEVCB_DRIVER_MEMBER(p500_state, tpi1_pa_w),
823   DEVCB_DRIVER_MEMBER(p500_state, tpi1_pb_r),
824   DEVCB_DRIVER_MEMBER(p500_state, tpi1_pb_w),
1181   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_r),
1182   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_w),
1183   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_r),
1184   DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_w),
8251185   DEVCB_NULL,
8261186   DEVCB_NULL,
8271187   DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_ca_w),
r18060r18061
8331193//  tpi6525_interface tpi2_intf
8341194//-------------------------------------------------
8351195
836WRITE8_MEMBER( p500_state::tpi2_pa_w )
1196UINT8 cbm2_state::read_keyboard()
8371197{
1198   UINT8 data = 0xff;
1199
1200   if (!BIT(m_tpi2_pa, 0)) data &= ioport("PA0")->read();
1201   if (!BIT(m_tpi2_pa, 1)) data &= ioport("PA1")->read();
1202   if (!BIT(m_tpi2_pa, 2)) data &= ioport("PA2")->read();
1203   if (!BIT(m_tpi2_pa, 3)) data &= ioport("PA3")->read();
1204   if (!BIT(m_tpi2_pa, 4)) data &= ioport("PA4")->read();
1205   if (!BIT(m_tpi2_pa, 5)) data &= ioport("PA5")->read();
1206   if (!BIT(m_tpi2_pa, 6)) data &= ioport("PA6")->read();
1207   if (!BIT(m_tpi2_pa, 7)) data &= ioport("PA7")->read();
1208   if (!BIT(m_tpi2_pb, 0)) data &= ioport("PB0")->read();
1209   if (!BIT(m_tpi2_pb, 1)) data &= ioport("PB1")->read();
1210   if (!BIT(m_tpi2_pb, 2)) data &= ioport("PB2")->read();
1211   if (!BIT(m_tpi2_pb, 3)) data &= ioport("PB3")->read();
1212   if (!BIT(m_tpi2_pb, 4)) data &= ioport("PB4")->read();
1213   if (!BIT(m_tpi2_pb, 5)) data &= ioport("PB5")->read();
1214   if (!BIT(m_tpi2_pb, 6)) data &= ioport("PB6")->read();
1215   if (!BIT(m_tpi2_pb, 7)) data &= ioport("PB7")->read();
1216
1217   return data;
1218}
1219
1220WRITE8_MEMBER( cbm2_state::tpi2_pa_w )
1221{
8381222   m_tpi2_pa = data;
8391223}
8401224
841WRITE8_MEMBER( p500_state::tpi2_pb_w )
1225WRITE8_MEMBER( cbm2_state::tpi2_pb_w )
8421226{
8431227   m_tpi2_pb = data;
8441228}
8451229
1230READ8_MEMBER( cbm2lp_state::tpi2_pc_r )
1231{
1232   /*
1233   
1234       bit     description
1235   
1236       0       COLUMN 0
1237       1       COLUMN 1
1238       2       COLUMN 2
1239       3       COLUMN 3
1240       4       COLUMN 4
1241       5       COLUMN 5
1242       6       0=PAL, 1=NTSC
1243       7       0
1244   
1245   */
1246
1247   return (m_ntsc << 6) | (read_keyboard() & 0x3f);
1248}
1249
1250READ8_MEMBER( cbm2hp_state::tpi2_pc_r )
1251{
1252   /*
1253   
1254       bit     description
1255   
1256       0       COLUMN 0
1257       1       COLUMN 1
1258       2       COLUMN 2
1259       3       COLUMN 3
1260       4       COLUMN 4
1261       5       COLUMN 5
1262       6       1
1263       7       1
1264   
1265   */
1266
1267   return read_keyboard();
1268}
1269
8461270READ8_MEMBER( p500_state::tpi2_pc_r )
8471271{
8481272   /*
r18060r18061
8601284   
8611285   */
8621286
863   UINT8 data = 0xff;
864
865   if (!BIT(m_tpi2_pa, 0)) data &= ioport("PA0")->read();
866   if (!BIT(m_tpi2_pa, 1)) data &= ioport("PA1")->read();
867   if (!BIT(m_tpi2_pa, 2)) data &= ioport("PA2")->read();
868   if (!BIT(m_tpi2_pa, 3)) data &= ioport("PA3")->read();
869   if (!BIT(m_tpi2_pa, 4)) data &= ioport("PA4")->read();
870   if (!BIT(m_tpi2_pa, 5)) data &= ioport("PA5")->read();
871   if (!BIT(m_tpi2_pa, 6)) data &= ioport("PA6")->read();
872   if (!BIT(m_tpi2_pa, 7)) data &= ioport("PA7")->read();
873   if (!BIT(m_tpi2_pb, 0)) data &= ioport("PB0")->read();
874   if (!BIT(m_tpi2_pb, 1)) data &= ioport("PB1")->read();
875   if (!BIT(m_tpi2_pb, 2)) data &= ioport("PB2")->read();
876   if (!BIT(m_tpi2_pb, 3)) data &= ioport("PB3")->read();
877   if (!BIT(m_tpi2_pb, 4)) data &= ioport("PB4")->read();
878   if (!BIT(m_tpi2_pb, 5)) data &= ioport("PB5")->read();
879   if (!BIT(m_tpi2_pb, 6)) data &= ioport("PB6")->read();
880   if (!BIT(m_tpi2_pb, 7)) data &= ioport("PB7")->read();
881
882   return data;
1287   return read_keyboard();
8831288}
8841289
8851290WRITE8_MEMBER( p500_state::tpi2_pc_w )
r18060r18061
9061311{
9071312   DEVCB_NULL,
9081313   DEVCB_NULL,
909   DEVCB_DRIVER_MEMBER(p500_state, tpi2_pa_w),
1314   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
9101315   DEVCB_NULL,
911   DEVCB_DRIVER_MEMBER(p500_state, tpi2_pb_w),
1316   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
1317   DEVCB_DRIVER_MEMBER(cbm2lp_state, tpi2_pc_r),
1318   DEVCB_NULL,
1319   DEVCB_NULL,
1320   DEVCB_NULL
1321};
1322
1323static const tpi6525_interface hp_tpi2_intf =
1324{
1325   DEVCB_NULL,
1326   DEVCB_NULL,
1327   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
1328   DEVCB_NULL,
1329   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
1330   DEVCB_DRIVER_MEMBER(cbm2hp_state, tpi2_pc_r),
1331   DEVCB_NULL,
1332   DEVCB_NULL,
1333   DEVCB_NULL
1334};
1335
1336static const tpi6525_interface p500_tpi2_intf =
1337{
1338   DEVCB_NULL,
1339   DEVCB_NULL,
1340   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
1341   DEVCB_NULL,
1342   DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
9121343   DEVCB_DRIVER_MEMBER(p500_state, tpi2_pc_r),
9131344   DEVCB_DRIVER_MEMBER(p500_state, tpi2_pc_w),
9141345   DEVCB_NULL,
r18060r18061
9201351//  mos6526_interface cia_intf
9211352//-------------------------------------------------
9221353
923READ8_MEMBER( p500_state::cia_pa_r )
1354READ8_MEMBER( cbm2_state::cia_pa_r )
9241355{
9251356   /*
9261357   
r18060r18061
9461377   return data;
9471378}
9481379
949WRITE8_MEMBER( p500_state::cia_pa_w )
1380WRITE8_MEMBER( cbm2_state::cia_pa_w )
9501381{
9511382   /*
9521383   
r18060r18061
9661397   m_cia_pa = data;
9671398}
9681399
969READ8_MEMBER( p500_state::cia_pb_r )
1400READ8_MEMBER( cbm2_state::cia_pb_r )
9701401{
9711402   /*
9721403   
r18060r18061
9921423   return data;
9931424}
9941425
995WRITE8_MEMBER( p500_state::cia_pb_w )
1426WRITE8_MEMBER( cbm2_state::cia_pb_w )
9961427{
9971428   /*
9981429   
r18060r18061
10161447   DEVCB_NULL, // user port
10171448   DEVCB_NULL, // user port
10181449   DEVCB_NULL, // user port
1019   DEVCB_DRIVER_MEMBER(p500_state, cia_pa_r),
1020   DEVCB_DRIVER_MEMBER(p500_state, cia_pa_w),
1021   DEVCB_DRIVER_MEMBER(p500_state, cia_pb_r),
1022   DEVCB_DRIVER_MEMBER(p500_state, cia_pb_w),
1450   DEVCB_DRIVER_MEMBER(cbm2_state, cia_pa_r),
1451   DEVCB_DRIVER_MEMBER(cbm2_state, cia_pa_w),
1452   DEVCB_DRIVER_MEMBER(cbm2_state, cia_pb_r),
1453   DEVCB_DRIVER_MEMBER(cbm2_state, cia_pb_w),
10231454};
10241455
10251456
r18060r18061
10271458//  PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
10281459//-------------------------------------------------
10291460
1030WRITE_LINE_MEMBER( p500_state::tape_read_w )
1461WRITE_LINE_MEMBER( cbm2_state::tape_read_w )
10311462{
10321463   m_cass_rd = state;
10331464
1034   check_interrupts();
1465   mos6526_flag_w(m_cia, m_cass_rd && m_user_flag);
10351466}
10361467
10371468static PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
10381469{
1039   DEVCB_DRIVER_LINE_MEMBER(p500_state, tape_read_w)
1470   DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tape_read_w)
10401471};
10411472
10421473
r18060r18061
10661497//  device_timer - handler timer events
10671498//-------------------------------------------------
10681499
1069void p500_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
1500void cbm2_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
10701501{
10711502   m_tpi1->i0_w(m_todclk);
10721503
r18060r18061
10751506
10761507
10771508//-------------------------------------------------
1078//  MACHINE_START( p500 )
1509//  MACHINE_START( cbm2 )
10791510//-------------------------------------------------
10801511
1081void p500_state::machine_start()
1512MACHINE_START_MEMBER( cbm2_state, cbm2 )
10821513{
10831514   // find memory regions
10841515   m_basic = memregion("basic")->base();
r18060r18061
10861517   m_charom = memregion("charom")->base();
10871518
10881519   // allocate memory
1089   m_video_ram.allocate(0x400);
1520   m_video_ram.allocate(m_video_ram_size);
10901521   m_buffer_ram.allocate(0x800);
10911522
10921523   // allocate timer
1524   int todclk = (m_ntsc ? 60 : 50) * 2;
1525
10931526   m_todclk_timer = timer_alloc();
1094   m_todclk_timer->adjust(attotime::from_hz(60 * 2), 0, attotime::from_hz(60 * 2));
1527   m_todclk_timer->adjust(attotime::from_hz(todclk), 0, attotime::from_hz(todclk));
10951528
10961529   // state saving
10971530   save_item(NAME(m_dramon));
1098   save_item(NAME(m_statvid));
1099   save_item(NAME(m_vicdotsel));
1100   save_item(NAME(m_vicbnksel));
1531   save_item(NAME(m_graphics));
1532   save_item(NAME(m_ntsc));
11011533   save_item(NAME(m_todclk));
1102   save_item(NAME(m_vic_irq));
11031534   save_item(NAME(m_tpi1_irq));
11041535   save_item(NAME(m_cass_rd));
11051536   save_item(NAME(m_user_flag));
r18060r18061
11101541
11111542
11121543//-------------------------------------------------
1113//  MACHINE_RESET( p500 )
1544//  MACHINE_START( cbm2_ntsc )
11141545//-------------------------------------------------
11151546
1116void p500_state::machine_reset()
1547MACHINE_START_MEMBER( cbm2_state, cbm2_ntsc )
11171548{
1549   m_video_ram_size = 0x800;
1550   m_ntsc = 1;
1551
1552   MACHINE_START_CALL_MEMBER(cbm2);
1553}
1554
1555
1556//-------------------------------------------------
1557//  MACHINE_START( cbm2_pal )
1558//-------------------------------------------------
1559
1560MACHINE_START_MEMBER( cbm2_state, cbm2_pal )
1561{
1562   m_video_ram_size = 0x800;
1563   m_ntsc = 0;
1564
1565   MACHINE_START_CALL_MEMBER(cbm2);
1566}
1567
1568
1569//-------------------------------------------------
1570//  MACHINE_START( p500 )
1571//-------------------------------------------------
1572
1573MACHINE_START_MEMBER( p500_state, p500 )
1574{
1575   m_video_ram_size = 0x400;
1576   m_ntsc = 1;
1577
1578   MACHINE_START_CALL_MEMBER(cbm2);
1579
1580   // state saving
1581   save_item(NAME(m_statvid));
1582   save_item(NAME(m_vicdotsel));
1583   save_item(NAME(m_vicbnksel));
1584   save_item(NAME(m_vic_irq));
1585}
1586
1587
1588//-------------------------------------------------
1589//  MACHINE_RESET( cbm2 )
1590//-------------------------------------------------
1591
1592MACHINE_RESET_MEMBER( cbm2_state, cbm2 )
1593{
11181594   m_dramon = 1;
1119   m_statvid = 1;
1120   m_vicdotsel = 1;
1121   m_vicbnksel = 0x03;
1122   m_vic_irq = CLEAR_LINE;
1595   m_graphics = 1;
11231596   m_tpi1_irq = CLEAR_LINE;
11241597   m_cass_rd = 1;
1598   m_user_irq = CLEAR_LINE;
11251599
11261600   m_maincpu->reset();
11271601
r18060r18061
11341608}
11351609
11361610
1611//-------------------------------------------------
1612//  MACHINE_RESET( p500 )
1613//-------------------------------------------------
11371614
1615MACHINE_RESET_MEMBER( p500_state, p500 )
1616{
1617   MACHINE_RESET_CALL_MEMBER(cbm2);
1618
1619   m_statvid = 1;
1620   m_vicdotsel = 1;
1621   m_vicbnksel = 0x03;
1622   m_vic_irq = CLEAR_LINE;
1623}
1624
1625
1626
11381627//**************************************************************************
11391628//  MACHINE DRIVERS
11401629//**************************************************************************
11411630
11421631//-------------------------------------------------
1632//  MACHINE_CONFIG( 128k )
1633//-------------------------------------------------
1634
1635static MACHINE_CONFIG_FRAGMENT( 128k )
1636   // internal ram
1637   MCFG_RAM_ADD(RAM_TAG)
1638   MCFG_RAM_DEFAULT_SIZE("128K")
1639   MCFG_RAM_EXTRA_OPTIONS("256K")
1640MACHINE_CONFIG_END
1641
1642
1643//-------------------------------------------------
1644//  MACHINE_CONFIG( 256k )
1645//-------------------------------------------------
1646
1647static MACHINE_CONFIG_FRAGMENT( 256k )
1648   // internal ram
1649   MCFG_RAM_ADD(RAM_TAG)
1650   MCFG_RAM_DEFAULT_SIZE("256K")
1651MACHINE_CONFIG_END
1652
1653
1654//-------------------------------------------------
11431655//  MACHINE_CONFIG( p500 )
11441656//-------------------------------------------------
11451657
11461658static MACHINE_CONFIG_START( p500, p500_state )
1659   MCFG_MACHINE_START_OVERRIDE(p500_state, p500)
1660   MCFG_MACHINE_RESET_OVERRIDE(p500_state, p500)
1661
11471662   // basic hardware
11481663   MCFG_CPU_ADD(M6509_TAG, M6509, VIC6567_CLOCK)
11491664   MCFG_CPU_PROGRAM_MAP(p500_mem)
r18060r18061
11631678   // devices
11641679   MCFG_PLS100_ADD(PLA1_TAG)
11651680   MCFG_PLS100_ADD(PLA2_TAG)
1166   MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf)
1167   MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf)
1681   MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
1682   MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
11681683   MCFG_ACIA6551_ADD(MOS6551A_TAG)
11691684   MCFG_MOS6526R1_ADD(MOS6526_TAG, VIC6567_CLOCK, 60, cia_intf)
1170   //MCFG_QUICKLOAD_ADD("quickload", cbm_p500, "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS)
1171   MCFG_CBM_IEEE488_ADD(ieee488_intf, NULL)
1685   MCFG_CBM_IEEE488_ADD(ieee488_intf, "sfd1001")
11721686   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL)
11731687   MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
11741688   MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL)
r18060r18061
11761690   //MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, user_intf, cbm2_user_port_cards, NULL, NULL)
11771691   //MCFG_CBM2_SYSTEM_PORT_ADD(CBM2_SYSTEM_PORT_TAG, system_intf, cbm2_system_port_cards, NULL, NULL)
11781692
1693   // internal ram
1694   MCFG_FRAGMENT_ADD(128k)
1695MACHINE_CONFIG_END
1696
1697
1698//-------------------------------------------------
1699//  MACHINE_CONFIG( cbm2lp_ntsc )
1700//-------------------------------------------------
1701
1702static MACHINE_CONFIG_START( cbm2lp_ntsc, cbm2lp_state )
1703   MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_ntsc)
1704   MCFG_MACHINE_RESET_OVERRIDE(cbm2_state, cbm2)
1705
1706   // basic hardware
1707   MCFG_CPU_ADD(M6509_TAG, M6509, XTAL_18MHz/8)
1708   MCFG_CPU_PROGRAM_MAP(cbm2_mem)
1709   MCFG_QUANTUM_PERFECT_CPU(M6509_TAG)
1710
1711   // video hardware
1712   MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
1713   MCFG_SCREEN_UPDATE_DEVICE(MC68B45_TAG, mc6845_device, screen_update)
1714
1715   MCFG_SCREEN_REFRESH_RATE(60)
1716   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
1717   MCFG_SCREEN_SIZE(768, 312)
1718   MCFG_SCREEN_VISIBLE_AREA(0, 768-1, 0, 312-1)
1719
1720   MCFG_MC6845_ADD(MC68B45_TAG, MC6845, XTAL_18MHz/8, lp_crtc_intf)
1721
1722   // sound hardware
1723   MCFG_SPEAKER_STANDARD_MONO("mono")
1724   MCFG_SOUND_ADD(MOS6851_TAG, SID6581, XTAL_18MHz/8)
1725   MCFG_SOUND_CONFIG(sid_intf)
1726   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
1727   MCFG_SOUND_ADD("dac", DAC, 0)
1728   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
1729
1730   // devices
1731   MCFG_PLS100_ADD(PLA1_TAG)
1732   MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf)
1733   MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf)
1734   MCFG_ACIA6551_ADD(MOS6551A_TAG)
1735   MCFG_MOS6526R1_ADD(MOS6526_TAG, XTAL_18MHz/8, 60, cia_intf)
1736   MCFG_CBM_IEEE488_ADD(ieee488_intf, "sfd1001")
1737   MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL)
1738   MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
1739   MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL)
1740   MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, XTAL_18MHz/8, cbm2_expansion_cards, NULL, NULL)
1741   //MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, user_intf, cbm2_user_port_cards, NULL, NULL)
1742   //MCFG_CBM2_SYSTEM_PORT_ADD(CBM2_SYSTEM_PORT_TAG, system_intf, cbm2_system_port_cards, NULL, NULL)
1743
11791744   // software list
1745   MCFG_SOFTWARE_LIST_ADD("cart_list", "cbm2_cart")
1746MACHINE_CONFIG_END
11801747
1181   // internal ram
1182   MCFG_RAM_ADD(RAM_TAG)
1183   MCFG_RAM_DEFAULT_SIZE("128K")
1184   MCFG_RAM_EXTRA_OPTIONS("256K")
1748
1749//-------------------------------------------------
1750//  MACHINE_CONFIG( b128 )
1751//-------------------------------------------------
1752
1753static MACHINE_CONFIG_START( b128, cbm2lp_state )
1754   MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
1755   MCFG_FRAGMENT_ADD(128k)
11851756MACHINE_CONFIG_END
11861757
11871758
1759//-------------------------------------------------
1760//  MACHINE_CONFIG( b256 )
1761//-------------------------------------------------
11881762
1763static MACHINE_CONFIG_START( b256, cbm2lp_state )
1764   MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
1765   MCFG_FRAGMENT_ADD(256k)
1766MACHINE_CONFIG_END
1767
1768
1769//-------------------------------------------------
1770//  MACHINE_CONFIG( cbm2lp_pal )
1771//-------------------------------------------------
1772
1773static MACHINE_CONFIG_START( cbm2lp_pal, cbm2lp_state )
1774   MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
1775
1776   MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal)
1777
1778   MCFG_DEVICE_REMOVE(MOS6526_TAG)
1779   MCFG_MOS6526R1_ADD(MOS6526_TAG, XTAL_18MHz/8, 50, cia_intf)
1780MACHINE_CONFIG_END
1781
1782
1783//-------------------------------------------------
1784//  MACHINE_CONFIG( cbm610 )
1785//-------------------------------------------------
1786
1787static MACHINE_CONFIG_START( cbm610, cbm2lp_state )
1788   MCFG_FRAGMENT_ADD(cbm2lp_pal)
1789   MCFG_FRAGMENT_ADD(128k)
1790MACHINE_CONFIG_END
1791
1792
1793//-------------------------------------------------
1794//  MACHINE_CONFIG( cbm620 )
1795//-------------------------------------------------
1796
1797static MACHINE_CONFIG_START( cbm620, cbm2lp_state )
1798   MCFG_FRAGMENT_ADD(cbm2lp_pal)
1799   MCFG_FRAGMENT_ADD(256k)
1800MACHINE_CONFIG_END
1801
1802
1803//-------------------------------------------------
1804//  MACHINE_CONFIG( cbm2hp_ntsc )
1805//-------------------------------------------------
1806
1807static MACHINE_CONFIG_START( cbm2hp_ntsc, cbm2hp_state )
1808   MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
1809
1810   MCFG_DEVICE_REMOVE(MC68B45_TAG)
1811   MCFG_MC6845_ADD(MC68B45_TAG, MC6845, XTAL_18MHz/8, hp_crtc_intf)
1812
1813   // devices
1814   MCFG_DEVICE_REMOVE(MOS6525_2_TAG)
1815   MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
1816MACHINE_CONFIG_END
1817
1818
1819//-------------------------------------------------
1820//  MACHINE_CONFIG( b128hp )
1821//-------------------------------------------------
1822
1823static MACHINE_CONFIG_START( b128hp, cbm2hp_state )
1824   MCFG_FRAGMENT_ADD(cbm2hp_ntsc)
1825   MCFG_FRAGMENT_ADD(128k)
1826MACHINE_CONFIG_END
1827
1828
1829//-------------------------------------------------
1830//  MACHINE_CONFIG( b256hp )
1831//-------------------------------------------------
1832
1833static MACHINE_CONFIG_START( b256hp, cbm2hp_state )
1834   MCFG_FRAGMENT_ADD(cbm2hp_ntsc)
1835   MCFG_FRAGMENT_ADD(256k)
1836MACHINE_CONFIG_END
1837
1838
1839//-------------------------------------------------
1840//  MACHINE_CONFIG( bx256hp )
1841//-------------------------------------------------
1842
1843static MACHINE_CONFIG_START( bx256hp, cbm2hp_state )
1844   MCFG_FRAGMENT_ADD(b256hp)
1845
1846   //MCFG_DEVICE_REMOVE(CBM2_SYSTEM_PORT_TAG)
1847   //MCFG_CBM2_SYSTEM_PORT_ADD(CBM2_SYSTEM_PORT_TAG, system_intf, cbm2_system_port_cards, "8088", NULL)
1848MACHINE_CONFIG_END
1849
1850
1851//-------------------------------------------------
1852//  MACHINE_CONFIG( cbm2hp_pal )
1853//-------------------------------------------------
1854
1855static MACHINE_CONFIG_START( cbm2hp_pal, cbm2hp_state )
1856   MCFG_FRAGMENT_ADD(cbm2hp_ntsc)
1857
1858   MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal)
1859
1860   // devices
1861   MCFG_DEVICE_REMOVE(MOS6525_2_TAG)
1862   MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
1863
1864   MCFG_DEVICE_REMOVE(MOS6526_TAG)
1865   MCFG_MOS6526R1_ADD(MOS6526_TAG, XTAL_18MHz/8, 50, cia_intf)
1866MACHINE_CONFIG_END
1867
1868
1869//-------------------------------------------------
1870//  MACHINE_CONFIG( cbm710 )
1871//-------------------------------------------------
1872
1873static MACHINE_CONFIG_START( cbm710, cbm2hp_state )
1874   MCFG_FRAGMENT_ADD(cbm2hp_pal)
1875   MCFG_FRAGMENT_ADD(128k)
1876MACHINE_CONFIG_END
1877
1878
1879//-------------------------------------------------
1880//  MACHINE_CONFIG( cbm720 )
1881//-------------------------------------------------
1882
1883static MACHINE_CONFIG_START( cbm720, cbm2hp_state )
1884   MCFG_FRAGMENT_ADD(cbm2hp_pal)
1885   MCFG_FRAGMENT_ADD(256k)
1886MACHINE_CONFIG_END
1887
1888
1889//-------------------------------------------------
1890//  MACHINE_CONFIG( cbm730 )
1891//-------------------------------------------------
1892
1893static MACHINE_CONFIG_START( cbm730, cbm2hp_state )
1894   MCFG_FRAGMENT_ADD(cbm720)
1895
1896   //MCFG_DEVICE_REMOVE(CBM2_SYSTEM_PORT_TAG)
1897   //MCFG_CBM2_SYSTEM_PORT_ADD(CBM2_SYSTEM_PORT_TAG, system_intf, cbm2_system_port_cards, "8088", NULL)
1898MACHINE_CONFIG_END
1899
1900
1901
11891902//**************************************************************************
11901903//  ROMS
11911904//**************************************************************************
r18060r18061
12191932ROM_END
12201933
12211934
1935//-------------------------------------------------
1936//  ROM( b500 )
1937//-------------------------------------------------
12221938
1939ROM_START( b500 )
1940   ROM_REGION( 0x4000, "basic", 0 )
1941   ROM_LOAD( "901243-01.u59",  0x0000, 0x2000, CRC(22822706) SHA1(901bbf59d8b8682b481be8b2de99b406fffa4bab) )
1942   ROM_LOAD( "901242-01a.u60", 0x2000, 0x2000, CRC(ef13d595) SHA1(2fb72985d7d4ab69c5780179178828c931a9f5b0) )
1943
1944   ROM_REGION( 0x2000, "kernal", 0 )
1945   ROM_LOAD( "901244-01.u61",  0x0000, 0x2000, CRC(93414213) SHA1(a54a593dbb420ae1ac39b0acde9348160f7840ff) )
1946
1947   ROM_REGION( 0x1000, "charom", 0 )
1948   ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
1949
1950   ROM_REGION( 0xf5, PLA1_TAG, 0 )
1951   ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
1952ROM_END
1953
1954
1955//-------------------------------------------------
1956//  ROM( b128 )
1957//-------------------------------------------------
1958
1959ROM_START( b128 )
1960   ROM_REGION( 0x4000, "basic", 0 )
1961   ROM_DEFAULT_BIOS("r2")
1962   ROM_SYSTEM_BIOS( 0, "r1", "Revision 1" )
1963   ROMX_LOAD( "901243-02b.u59", 0x0000, 0x2000, CRC(9d0366f9) SHA1(625f7337ea972a8bce2bdf2daababc0ed0b3b69b), ROM_BIOS(1) )
1964   ROMX_LOAD( "901242-02b.u60", 0x2000, 0x2000, CRC(837978b5) SHA1(56e8d2f86bf73ba36b3d3cb84dd75806b66c530a), ROM_BIOS(1) )
1965   ROM_SYSTEM_BIOS( 1, "r2", "Revision 2" )
1966   ROMX_LOAD( "901243-04a.u59", 0x0000, 0x2000, CRC(b0dcb56d) SHA1(08d333208060ee2ce84d4532028d94f71c016b96), ROM_BIOS(2) )
1967   ROMX_LOAD( "901242-04a.u60", 0x2000, 0x2000, CRC(de04ea4f) SHA1(7c6de17d46a3343dc597d9b9519cf63037b31908), ROM_BIOS(2) )
1968
1969   ROM_REGION( 0x2000, "kernal", 0 )
1970   ROMX_LOAD( "901244-03b.u61", 0x0000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(1) )
1971   ROMX_LOAD( "901244-04a.u61", 0x0000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(2) )
1972
1973   ROM_REGION( 0x1000, "charom", 0 )
1974   ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
1975
1976   ROM_REGION( 0xf5, PLA1_TAG, 0 )
1977   ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
1978ROM_END
1979
1980
1981//-------------------------------------------------
1982//  ROM( b256 )
1983//-------------------------------------------------
1984
1985ROM_START( b256 )
1986   ROM_REGION( 0x4000, "basic", 0 )
1987   ROM_LOAD( "901241-03.u59", 0x0000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
1988   ROM_LOAD( "901240-03.u60", 0x2000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
1989
1990   ROM_REGION( 0x2000, "kernal", 0 )
1991   ROM_DEFAULT_BIOS("r2")
1992   ROM_SYSTEM_BIOS( 0, "r1", "Revision 1" )
1993   ROMX_LOAD( "901244-03b.u61", 0x0000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(1) )
1994   ROM_SYSTEM_BIOS( 1, "r2", "Revision 2" )
1995   ROMX_LOAD( "901244-04a.u61", 0x0000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(2) )
1996
1997   ROM_REGION( 0x1000, "charom", 0 )
1998   ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
1999
2000   ROM_REGION( 0xf5, PLA1_TAG, 0 )
2001   ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
2002ROM_END
2003
2004
2005//-------------------------------------------------
2006//  ROM( cbm610 )
2007//-------------------------------------------------
2008
2009#define rom_cbm610   rom_b128
2010
2011
2012//-------------------------------------------------
2013//  ROM( cbm620 )
2014//-------------------------------------------------
2015
2016#define rom_cbm620   rom_b256
2017
2018
2019//-------------------------------------------------
2020//  ROM( cbm620hu )
2021//-------------------------------------------------
2022
2023ROM_START( cbm620hu )
2024   ROM_REGION( 0x4000, "basic", 0 )
2025   ROM_LOAD( "610.u60", 0x0000, 0x4000, CRC(8eed0d7e) SHA1(9d06c5c3c012204eaaef8b24b1801759b62bf57e) )
2026
2027   ROM_REGION( 0x2000, "kernal", 0 )
2028   ROM_LOAD( "kernhun.bin", 0x0000, 0x2000, CRC(0ea8ca4d) SHA1(9977c9f1136ee9c04963e0b50ae0c056efa5663f) )
2029
2030   ROM_REGION( 0x2000, "charom", 0 )
2031   ROM_LOAD( "charhun.bin", 0x0000, 0x2000, CRC(1fb5e596) SHA1(3254e069f8691b30679b19a9505b6afdfedce6ac) )
2032
2033   ROM_REGION( 0xf5, PLA1_TAG, 0 )
2034   ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
2035ROM_END
2036
2037
2038//-------------------------------------------------
2039//  ROM( b128hp )
2040//-------------------------------------------------
2041
2042ROM_START( b128hp )
2043   ROM_REGION( 0x4000, "basic", 0 )
2044   ROM_DEFAULT_BIOS("r2")
2045   ROM_SYSTEM_BIOS( 0, "r1", "Revision 1" )
2046   ROMX_LOAD( "901243-02b.u59", 0x0000, 0x2000, CRC(9d0366f9) SHA1(625f7337ea972a8bce2bdf2daababc0ed0b3b69b), ROM_BIOS(1) )
2047   ROMX_LOAD( "901242-02b.u60", 0x2000, 0x2000, CRC(837978b5) SHA1(56e8d2f86bf73ba36b3d3cb84dd75806b66c530a), ROM_BIOS(1) )
2048   ROM_SYSTEM_BIOS( 1, "r2", "Revision 2" )
2049   ROMX_LOAD( "901243-04a.u59", 0x0000, 0x2000, CRC(b0dcb56d) SHA1(08d333208060ee2ce84d4532028d94f71c016b96), ROM_BIOS(2) )
2050   ROMX_LOAD( "901242-04a.u60", 0x2000, 0x2000, CRC(de04ea4f) SHA1(7c6de17d46a3343dc597d9b9519cf63037b31908), ROM_BIOS(2) )
2051
2052   ROM_REGION( 0x2000, "kernal", 0 )
2053   ROMX_LOAD( "901244-03b.u61", 0x0000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(1) )
2054   ROMX_LOAD( "901244-04a.u61", 0x0000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(2) )
2055
2056   ROM_REGION( 0x1000, "charom", 0 )
2057   ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
2058
2059   ROM_REGION( 0xf5, PLA1_TAG, 0 )
2060   ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
2061ROM_END
2062
2063
2064//-------------------------------------------------
2065//  ROM( b256hp )
2066//-------------------------------------------------
2067
2068ROM_START( b256hp )
2069   ROM_REGION( 0x4000, "basic", 0 )
2070   ROM_LOAD( "901241-03.u59", 0x0000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
2071   ROM_LOAD( "901240-03.u60", 0x2000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
2072
2073   ROM_REGION( 0x2000, "kernal", 0 )
2074   ROM_DEFAULT_BIOS("r2")
2075   ROM_SYSTEM_BIOS( 0, "r1", "Revision 1" )
2076   ROMX_LOAD( "901244-03b.u61", 0x0000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(1) )
2077   ROM_SYSTEM_BIOS( 1, "r2", "Revision 2" )
2078   ROMX_LOAD( "901244-04a.u61", 0x0000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(2) )
2079
2080   ROM_REGION( 0x1000, "charom", 0 )
2081   ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
2082
2083   ROM_REGION( 0xf5, PLA1_TAG, 0 )
2084   ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
2085ROM_END
2086
2087
2088//-------------------------------------------------
2089//  ROM( bx256hp )
2090//-------------------------------------------------
2091
2092ROM_START( bx256hp )
2093   ROM_REGION( 0x4000, "basic", 0 )
2094   ROM_LOAD( "901241-03.u59", 0x0000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
2095   ROM_LOAD( "901240-03.u60", 0x2000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
2096
2097   ROM_REGION( 0x1000, "8088", 0)
2098   ROM_LOAD( "8088.u14", 0x0000, 0x1000, CRC(195e0281) SHA1(ce8acd2a5fb6cbd70d837811d856d656544a1f97) )
2099
2100   ROM_REGION( 0x2000, "kernal", 0 )
2101   ROM_DEFAULT_BIOS("r2")
2102   ROM_SYSTEM_BIOS( 0, "r1", "Revision 1" )
2103   ROMX_LOAD( "901244-03b.u61", 0x0000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(1) )
2104   ROM_SYSTEM_BIOS( 1, "r2", "Revision 2" )
2105   ROMX_LOAD( "901244-04a.u61", 0x0000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(2) )
2106
2107   ROM_REGION( 0x1000, "charom", 0 )
2108   ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
2109
2110   ROM_REGION( 0xf5, PLA1_TAG, 0 )
2111   ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
2112ROM_END
2113
2114
2115//-------------------------------------------------
2116//  ROM( cbm710 )
2117//-------------------------------------------------
2118
2119#define rom_cbm710   rom_b128hp
2120
2121
2122//-------------------------------------------------
2123//  ROM( cbm720 )
2124//-------------------------------------------------
2125
2126#define rom_cbm720   rom_b256hp
2127
2128
2129//-------------------------------------------------
2130//  ROM( cbm730 )
2131//-------------------------------------------------
2132
2133#define rom_cbm730   rom_bx256hp
2134
2135
2136//-------------------------------------------------
2137//  ROM( cbm720sw )
2138//-------------------------------------------------
2139
2140ROM_START( cbm720sw )
2141   ROM_REGION( 0x4000, "basic", 0 )
2142   ROM_LOAD( "901241-03.u59", 0x0000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
2143   ROM_LOAD( "901240-03.u60", 0x2000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
2144
2145   ROM_REGION( 0x2000, "kernal", 0 )
2146   ROM_LOAD( "swe-901244-03.u61", 0x0000, 0x2000, CRC(87bc142b) SHA1(fa711f6082741b05a9c80744f5aee68dc8c1dcf4) )
2147
2148   ROM_REGION( 0x1000, "charom", 0 )
2149   ROM_LOAD( "901233-03.u25", 0x0000, 0x1000, CRC(09518b19) SHA1(2e28491e31e2c0a3b6db388055216140a637cd09) )
2150
2151   ROM_REGION( 0xf5, PLA1_TAG, 0 )
2152   ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
2153ROM_END
2154
2155
2156
12232157//**************************************************************************
12242158//  SYSTEM DRIVERS
12252159//**************************************************************************
12262160
1227//    YEAR  NAME    PARENT  COMPAT  MACHINE     INPUT   INIT                        COMPANY                         FULLNAME                            FLAGS
1228COMP( 1983,   p500,   0,      0,      p500,      p500,   driver_device,      0,      "Commodore Business Machines",   "P500 ~ B128-40 ~ PET-II (NTSC)",   GAME_NOT_WORKING )
2161//    YEAR  NAME        PARENT  COMPAT  MACHINE     INPUT   INIT                        COMPANY                         FULLNAME                            FLAGS
2162COMP( 1983,   p500,      0,      0,      p500,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "P500 ~ C128-40 ~ PET-II (NTSC)",   GAME_NOT_WORKING )
2163
2164COMP( 1983,   b500,      p500,   0,      b128,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "B500 (NTSC)",                  GAME_NOT_WORKING )
2165COMP( 1983,   b128,      p500,   0,      b128,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "B128 (NTSC)",                  GAME_NOT_WORKING )
2166COMP( 1983,   b256,      p500,   0,      b256,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "B256 (NTSC)",                  GAME_NOT_WORKING )
2167COMP( 1983,   cbm610,      p500,   0,      cbm610,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "CBM 610 (PAL)",               GAME_NOT_WORKING )
2168COMP( 1983,   cbm620,      p500,   0,      cbm620,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "CBM 620 (PAL)",               GAME_NOT_WORKING )
2169COMP( 1983,   cbm620hu,   p500,   0,      cbm620,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "CBM 620 (Hungary)",            GAME_NOT_WORKING )
2170
2171COMP( 1983,   b128hp,      p500,   0,      b128hp,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "B128-80HP (NTSC)",               GAME_NOT_WORKING )
2172COMP( 1983,   b256hp,      p500,   0,      b256hp,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "B256-80HP (NTSC)",               GAME_NOT_WORKING )
2173COMP( 1983,   bx256hp,   p500,   0,      bx256hp,   cbm2,   driver_device,      0,      "Commodore Business Machines",   "BX256-80HP (NTSC)",            GAME_NOT_WORKING )
2174COMP( 1983,   cbm710,      p500,   0,      cbm710,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "CBM 710 (PAL)",               GAME_NOT_WORKING )
2175COMP( 1983,   cbm720,      p500,   0,      cbm720,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "CBM 720 (PAL)",               GAME_NOT_WORKING )
2176COMP( 1983,   cbm720sw,   p500,   0,      cbm720,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "CBM 720 (Sweden/Finland)",         GAME_NOT_WORKING )
2177COMP( 1983,   cbm730,      p500,   0,      cbm730,      cbm2,   driver_device,      0,      "Commodore Business Machines",   "CBM 730 (PAL)",               GAME_NOT_WORKING )
trunk/src/mess/mess.mak
r18060r18061
885885   $(MESS_MACHINE)/diag264_lb_iec.o   \
886886   $(MESS_MACHINE)/diag264_lb_tape.o   \
887887   $(MESS_MACHINE)/diag264_lb_user.o   \
888   $(MESS_DRIVERS)/cbmb.o      \
889   $(MESS_MACHINE)/cbmb.o      \
890   $(MESS_VIDEO)/cbmb.o      \
891888   $(MESS_DRIVERS)/cbm2.o      \
892889   $(MESS_MACHINE)/cbm2exp.o   \
893890   $(MESS_MACHINE)/cbm2_std.o   \

Previous 199869 Revisions Next


© 1997-2024 The MAME Team