diff --git a/.gitattributes b/.gitattributes
index d4f15ec41b1..7ec24f9c76c 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -45,7 +45,7 @@ hash/c128_rom.xml svneol=native#text/xml
hash/c64_cart.xml svneol=native#text/xml
hash/c64_flop.xml svneol=native#text/xml
hash/casloopy.xml svneol=native#text/xml
-hash/cbm700_cart.xml svneol=native#text/xml
+hash/cbm2_cart.xml svneol=native#text/xml
hash/cd32.xml svneol=native#text/xml
hash/cdi.xml svneol=native#text/xml
hash/cdtv.xml svneol=native#text/xml
@@ -5587,7 +5587,6 @@ src/mess/drivers/camplynx.c svneol=native#text/plain
src/mess/drivers/casloopy.c svneol=native#text/plain
src/mess/drivers/cat.c svneol=native#text/plain
src/mess/drivers/cbm2.c svneol=native#text/plain
-src/mess/drivers/cbmb.c svneol=native#text/plain
src/mess/drivers/ccs2422.c svneol=native#text/plain
src/mess/drivers/ccs2810.c svneol=native#text/plain
src/mess/drivers/cd2650.c svneol=native#text/plain
@@ -6066,7 +6065,6 @@ src/mess/includes/c65.h svneol=native#text/plain
src/mess/includes/c80.h svneol=native#text/plain
src/mess/includes/cbm.h svneol=native#text/plain
src/mess/includes/cbm2.h svneol=native#text/plain
-src/mess/includes/cbmb.h svneol=native#text/plain
src/mess/includes/cgc7900.h svneol=native#text/plain
src/mess/includes/cgenie.h svneol=native#text/plain
src/mess/includes/channelf.h svneol=native#text/plain
@@ -6621,7 +6619,6 @@ src/mess/machine/cbm2_std.c svneol=native#text/plain
src/mess/machine/cbm2_std.h svneol=native#text/plain
src/mess/machine/cbm2exp.c svneol=native#text/plain
src/mess/machine/cbm2exp.h svneol=native#text/plain
-src/mess/machine/cbmb.c svneol=native#text/plain
src/mess/machine/cbmiec.c svneol=native#text/plain
src/mess/machine/cbmiec.h svneol=native#text/plain
src/mess/machine/cbmipt.c svneol=native#text/plain
@@ -7320,7 +7317,6 @@ src/mess/video/b2m.c svneol=native#text/plain
src/mess/video/bbc.c svneol=native#text/plain
src/mess/video/bk.c svneol=native#text/plain
src/mess/video/busicom.c svneol=native#text/plain
-src/mess/video/cbmb.c svneol=native#text/plain
src/mess/video/cgc7900.c svneol=native#text/plain
src/mess/video/cgenie.c svneol=native#text/plain
src/mess/video/channelf.c svneol=native#text/plain
diff --git a/hash/cbm2_cart.xml b/hash/cbm2_cart.xml
new file mode 100644
index 00000000000..6787240cb97
--- /dev/null
+++ b/hash/cbm2_cart.xml
@@ -0,0 +1,79 @@
+
+
+
+
+
+ Calc Result
+ 198?
+ Handic Software
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ProfiText
+ 198?
+ <unknown>
+
+
+
+
+
+
+
+
+
+ Demo 1
+ 198?
+ <unknown>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Demo 2
+ 198?
+ <unknown>
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Moni610
+ 2008
+ Ullrich von Bassewitz
+
+
+
+
+
+
+
+
+
diff --git a/hash/cbm700_cart.xml b/hash/cbm700_cart.xml
deleted file mode 100644
index f28509b7768..00000000000
--- a/hash/cbm700_cart.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
- Calc Result
- 198?
- Handic Software
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/mess/drivers/cbm2.c b/src/mess/drivers/cbm2.c
index db7d063954b..2cf1e9d622b 100644
--- a/src/mess/drivers/cbm2.c
+++ b/src/mess/drivers/cbm2.c
@@ -2,8 +2,8 @@
TODO:
- - cbm600
- - cbm700
+ - foreign keyboard inputs
+ - cbm620hu charom banking?
- read VIC video RAM thru PLA
- read VIC color RAM thru PLA
- user port
@@ -29,30 +29,277 @@
#define A12 BIT(offset, 12)
#define A11 BIT(offset, 11)
#define A10 BIT(offset, 10)
+#define A0 BIT(offset, 0)
#define VA12 BIT(va, 12)
//**************************************************************************
-// INTERRUPTS
+// ADDRESS DECODING
//**************************************************************************
//-------------------------------------------------
-// check_interrupts -
+// bankswitch -
//-------------------------------------------------
-void p500_state::check_interrupts()
+void cbm2_state::bankswitch(offs_t offset, int busy2, int eras, int ecas, int refen, int cas, int ras, int *sysioen, int *dramen,
+ int *casseg1, int *casseg2, int *casseg3, int *casseg4, int *buframcs, int *extbufcs, int *vidramcs,
+ int *diskromcs, int *csbank1, int *csbank2, int *csbank3, int *basiccs, int *knbcs, int *kernalcs,
+ int *crtccs, int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs)
{
- m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq);
+ UINT32 input = P0 << 15 | P1 << 14 | P2 << 13 | P3 << 12 | busy2 << 11 | eras << 10 | ecas << 9 | refen << 8 | cas << 7 | ras << 6;
+ UINT32 data = m_pla1->read(input);
- mos6526_flag_w(m_cia, m_cass_rd && m_user_flag);
+ *casseg1 = BIT(data, 0);
+ //*rasseg1 = BIT(data, 1);
+ //*rasseg2 = BIT(data, 2);
+ *casseg2 = BIT(data, 3);
+ //*rasseg4 = BIT(data, 4);
+ *casseg4 = BIT(data, 5);
+ *casseg3 = BIT(data, 6);
+ //*rasseg3 = BIT(data, 7);
+
+ int busen1 = m_dramon;
+ int decoden = 0; // TODO
+ *sysioen = !(P0 && P1 && P2 && P3) && busen1;
+ *dramen = !((!(P0 && P1 && P2 && P3)) && busen1);
+
+ if (!decoden && !*sysioen)
+ {
+ switch ((offset >> 13) & 0x07)
+ {
+ case 0:
+ switch ((offset >> 11) & 0x03)
+ {
+ case 0: *buframcs = 0; break;
+ case 1: *extbufcs = 0; break;
+ case 2: // fallthru
+ case 3: *diskromcs = 0; break;
+ }
+ break;
+
+ case 1: *csbank1 = 0; break;
+ case 2: *csbank2 = 0; break;
+ case 3: *csbank3 = 0; break;
+ case 4: *basiccs = 0; break;
+ case 5: *knbcs = 0; break;
+ case 6:
+ switch ((offset >> 11) & 0x03)
+ {
+ case 2: *vidramcs = 0; break;
+ case 3:
+ switch ((offset >> 8) & 0x07)
+ {
+ case 0: *crtccs = 0; break;
+ case 1: *cs1 = 0; break;
+ case 2: *sidcs = 0; break;
+ case 3: *extprtcs = 0; break;
+ case 4: *ciacs = 0; break;
+ case 5: *aciacs = 0; break;
+ case 6: *tript1cs = 0; break;
+ case 7: *tript2cs = 0; break;
+ }
+ break;
+ }
+ break;
+
+ case 7: *kernalcs = 0; break;
+ }
+ }
}
+//-------------------------------------------------
+// read -
+//-------------------------------------------------
+
+READ8_MEMBER( cbm2_state::read )
+{
+ int busy2 = 1, eras = 1, ecas = 1, refen = 1, cas = 1, ras = 1, sysioen = 1, dramen = 1;
+ int casseg1 = 1, casseg2 = 1, casseg3 = 1, casseg4 = 1, buframcs = 1, extbufcs = 1, vidramcs = 1;
+ int diskromcs = 1, csbank1 = 1, csbank2 = 1, csbank3 = 1, basiccs = 1, knbcs = 1, kernalcs = 1;
+ int crtccs = 1, cs1 = 1, sidcs = 1, extprtcs = 1, ciacs = 1, aciacs = 1, tript1cs = 1, tript2cs = 1;
+
+ bankswitch(offset, busy2, eras, ecas, refen, cas, ras, &sysioen, &dramen,
+ &casseg1, &casseg2, &casseg3, &casseg4, &buframcs, &extbufcs, &vidramcs,
+ &diskromcs, &csbank1, &csbank2, &csbank3, &basiccs, &knbcs, &kernalcs,
+ &crtccs, &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs);
+/*
+ if (!space.debugger_access())
+ 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,
+ casseg1, casseg2, casseg3, casseg4, buframcs, extbufcs, vidramcs,
+ diskromcs, csbank1, csbank2, csbank3, basiccs, knbcs, kernalcs,
+ crtccs, cs1, sidcs, extprtcs, ciacs, aciacs, tript1cs, tript2cs);
+*/
+ UINT8 data = 0;
+
+ if (!dramen)
+ {
+ if (!casseg1)
+ {
+ data = m_ram->pointer()[offset & 0xffff];
+ }
+ else if (!casseg2)
+ {
+ data = m_ram->pointer()[0x10000 | (offset & 0xffff)];
+ }
+ else if (!casseg3 && (m_ram->size() > 0x20000))
+ {
+ data = m_ram->pointer()[0x20000 | (offset & 0xffff)];
+ }
+ else if (!casseg4 && (m_ram->size() > 0x30000))
+ {
+ data = m_ram->pointer()[0x30000 | (offset & 0xffff)];
+ }
+ }
+
+ if (!sysioen)
+ {
+ if (!buframcs)
+ {
+ data = m_buffer_ram[offset & 0x7ff];
+ }
+ else if (!vidramcs)
+ {
+ data = m_video_ram[offset & 0x7ff];
+ }
+ else if (!basiccs || !knbcs)
+ {
+ data = m_basic[offset & 0x3fff];
+ }
+ else if (!kernalcs)
+ {
+ data = m_kernal[offset & 0x1fff];
+ }
+ else if (!crtccs)
+ {
+ if (A0)
+ {
+ data = m_crtc->register_r(space, 0);
+ }
+ else
+ {
+ data = m_crtc->status_r(space, 0);
+ }
+ }
+ else if (!sidcs)
+ {
+ data = m_sid->read(space, offset & 0x1f);
+ }
+ else if (!ciacs)
+ {
+ data = m_cia->read(space, offset & 0x0f);
+ }
+ else if (!aciacs)
+ {
+ data = m_acia->read(space, offset & 0x03);
+ }
+ else if (!tript1cs)
+ {
+ data = m_tpi1->read(space, offset & 0x07);
+ }
+ else if (!tript2cs)
+ {
+ data = m_tpi2->read(space, offset & 0x07);
+ }
+
+ data = m_exp->read(space, offset & 0x1fff, data, csbank1, csbank2, csbank3);
+ }
+
+ return data;
+}
+
+
+//-------------------------------------------------
+// write -
+//-------------------------------------------------
+
+WRITE8_MEMBER( cbm2_state::write )
+{
+ int busy2 = 1, eras = 1, ecas = 1, refen = 1, cas = 1, ras = 1, sysioen = 1, dramen = 1;
+ int casseg1 = 1, casseg2 = 1, casseg3 = 1, casseg4 = 1, buframcs = 1, extbufcs = 1, vidramcs = 1;
+ int diskromcs = 1, csbank1 = 1, csbank2 = 1, csbank3 = 1, basiccs = 1, knbcs = 1, kernalcs = 1;
+ int crtccs = 1, cs1 = 1, sidcs = 1, extprtcs = 1, ciacs = 1, aciacs = 1, tript1cs = 1, tript2cs = 1;
+
+ bankswitch(offset, busy2, eras, ecas, refen, cas, ras, &sysioen, &dramen,
+ &casseg1, &casseg2, &casseg3, &casseg4, &buframcs, &extbufcs, &vidramcs,
+ &diskromcs, &csbank1, &csbank2, &csbank3, &basiccs, &knbcs, &kernalcs,
+ &crtccs, &cs1, &sidcs, &extprtcs, &ciacs, &aciacs, &tript1cs, &tript2cs);
+
+ if (!dramen)
+ {
+ if (!casseg1)
+ {
+ m_ram->pointer()[offset & 0xffff] = data;
+ }
+ else if (!casseg2)
+ {
+ m_ram->pointer()[0x10000 | (offset & 0xffff)] = data;
+ }
+ else if (!casseg3 && (m_ram->size() > 0x20000))
+ {
+ m_ram->pointer()[0x20000 | (offset & 0xffff)] = data;
+ }
+ else if (!casseg4 && (m_ram->size() > 0x30000))
+ {
+ m_ram->pointer()[0x30000 | (offset & 0xffff)] = data;
+ }
+ }
+
+ if (!sysioen)
+ {
+ if (!buframcs)
+ {
+ m_buffer_ram[offset & 0x7ff] = data;
+ }
+ else if (!vidramcs)
+ {
+ m_video_ram[offset & 0x7ff] = data;
+ }
+ else if (!basiccs || !knbcs)
+ {
+ m_basic[offset & 0x3fff] = data;
+ }
+ else if (!kernalcs)
+ {
+ m_kernal[offset & 0x1fff] = data;
+ }
+ else if (!crtccs)
+ {
+ if (A0)
+ {
+ m_crtc->register_w(space, 0, data);
+ }
+ else
+ {
+ m_crtc->address_w(space, 0, data);
+ }
+ }
+ else if (!sidcs)
+ {
+ m_sid->write(space, offset & 0x1f, data);
+ }
+ else if (!ciacs)
+ {
+ m_cia->write(space, offset & 0x0f, data);
+ }
+ else if (!aciacs)
+ {
+ m_acia->write(space, offset & 0x03, data);
+ }
+ else if (!tript1cs)
+ {
+ m_tpi1->write(space, offset & 0x07, data);
+ }
+ else if (!tript2cs)
+ {
+ m_tpi2->write(space, offset & 0x07, data);
+ }
+
+ m_exp->write(space, offset & 0x1fff, data, csbank1, csbank2, csbank3);
+ }
+}
-//**************************************************************************
-// MEMORY MANAGEMENT UNIT
-//**************************************************************************
//-------------------------------------------------
// bankswitch -
@@ -427,6 +674,15 @@ READ8_MEMBER( p500_state::vic_videoram_r )
// ADDRESS MAPS
//**************************************************************************
+//-------------------------------------------------
+// ADDRESS_MAP( cbm2_mem )
+//-------------------------------------------------
+
+static ADDRESS_MAP_START( cbm2_mem, AS_PROGRAM, 8, cbm2_state )
+ AM_RANGE(0x00000, 0xfffff) AM_READWRITE(read, write)
+ADDRESS_MAP_END
+
+
//-------------------------------------------------
// ADDRESS_MAP( p500_mem )
//-------------------------------------------------
@@ -460,10 +716,10 @@ ADDRESS_MAP_END
//**************************************************************************
//-------------------------------------------------
-// INPUT_PORTS( p500 )
+// INPUT_PORTS( cbm2 )
//-------------------------------------------------
-static INPUT_PORTS_START( p500 )
+static INPUT_PORTS_START( cbm2 )
PORT_START("PB0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("F1") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC)
@@ -615,6 +871,89 @@ INPUT_PORTS_END
// DEVICE CONFIGURATION
//**************************************************************************
+//-------------------------------------------------
+// mc6845_interface crtc_intf
+//-------------------------------------------------
+
+static MC6845_UPDATE_ROW( lp_crtc_update_row )
+{
+ cbm2_state *state = device->machine().driver_data();
+
+ int x = 0;
+
+ for (int column = 0; column < x_count; column++)
+ {
+ UINT8 code = state->m_video_ram[(ma + column) & 0x7ff];
+ offs_t char_rom_addr = (ma & 0x1000) | (state->m_graphics << 11) | ((code & 0x7f) << 4) | (ra & 0x0f);
+ UINT8 data = state->m_charom[char_rom_addr & 0xfff];
+
+ for (int bit = 0; bit < 8; bit++)
+ {
+ int color = BIT(data, 7) ^ BIT(code, 7) ^ BIT(ma, 13);
+ if (cursor_x == column) color ^= 1;
+
+ bitmap.pix32(y, x++) = RGB_MONOCHROME_GREEN[color];
+
+ data <<= 1;
+ }
+ }
+}
+
+static const mc6845_interface lp_crtc_intf =
+{
+ SCREEN_TAG,
+ 8,
+ NULL,
+ lp_crtc_update_row,
+ NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ NULL
+};
+
+
+static MC6845_UPDATE_ROW( hp_crtc_update_row )
+{
+ cbm2_state *state = device->machine().driver_data();
+
+ int x = 0;
+
+ for (int column = 0; column < x_count; column++)
+ {
+ UINT8 code = state->m_video_ram[(ma + column) & 0x7ff];
+ offs_t char_rom_addr = (ma & 0x1000) | (state->m_graphics << 11) | ((code & 0x7f) << 4) | (ra & 0x0f);
+ UINT8 data = state->m_charom[char_rom_addr & 0xfff];
+
+ for (int bit = 0; bit < 8; bit++)
+ {
+ int color = BIT(data, 7) ^ BIT(code, 7) ^ BIT(ma, 13);
+ if (cursor_x == column) color ^= 1;
+
+ bitmap.pix32(y, x++) = RGB_MONOCHROME_GREEN[color];
+
+ data <<= 1;
+ }
+
+ x++;
+ }
+}
+
+static const mc6845_interface hp_crtc_intf =
+{
+ SCREEN_TAG,
+ 9,
+ NULL,
+ hp_crtc_update_row,
+ NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL,
+ NULL
+};
+
//-------------------------------------------------
// vic2_interface vic_intf
//-------------------------------------------------
@@ -623,7 +962,7 @@ WRITE_LINE_MEMBER( p500_state::vic_irq_w )
{
m_vic_irq = state;
- check_interrupts();
+ m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq || m_user_irq);
}
static MOS6567_INTERFACE( vic_intf )
@@ -643,7 +982,7 @@ static MOS6567_INTERFACE( vic_intf )
// MOS6581_INTERFACE( sid_intf )
//-------------------------------------------------
-READ8_MEMBER( p500_state::sid_potx_r )
+READ8_MEMBER( cbm2_state::sid_potx_r )
{
int sela = BIT(m_cia_pa, 6);
int selb = BIT(m_cia_pa, 7);
@@ -656,7 +995,7 @@ READ8_MEMBER( p500_state::sid_potx_r )
return data;
}
-READ8_MEMBER( p500_state::sid_poty_r )
+READ8_MEMBER( cbm2_state::sid_poty_r )
{
int sela = BIT(m_cia_pa, 6);
int selb = BIT(m_cia_pa, 7);
@@ -671,8 +1010,8 @@ READ8_MEMBER( p500_state::sid_poty_r )
static MOS6581_INTERFACE( sid_intf )
{
- DEVCB_DRIVER_MEMBER(p500_state, sid_potx_r),
- DEVCB_DRIVER_MEMBER(p500_state, sid_poty_r)
+ DEVCB_DRIVER_MEMBER(cbm2_state, sid_potx_r),
+ DEVCB_DRIVER_MEMBER(cbm2_state, sid_poty_r)
};
@@ -680,14 +1019,21 @@ static MOS6581_INTERFACE( sid_intf )
// tpi6525_interface tpi1_intf
//-------------------------------------------------
+WRITE_LINE_MEMBER( cbm2_state::tpi1_irq_w )
+{
+ m_tpi1_irq = state;
+
+ m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_tpi1_irq || m_user_irq);
+}
+
WRITE_LINE_MEMBER( p500_state::tpi1_irq_w )
{
m_tpi1_irq = state;
- check_interrupts();
+ m_maincpu->set_input_line(INPUT_LINE_IRQ0, m_vic_irq || m_tpi1_irq || m_user_irq);
}
-READ8_MEMBER( p500_state::tpi1_pa_r )
+READ8_MEMBER( cbm2_state::tpi1_pa_r )
{
/*
@@ -717,7 +1063,7 @@ READ8_MEMBER( p500_state::tpi1_pa_r )
return data;
}
-WRITE8_MEMBER( p500_state::tpi1_pa_w )
+WRITE8_MEMBER( cbm2_state::tpi1_pa_w )
{
/*
@@ -743,7 +1089,7 @@ WRITE8_MEMBER( p500_state::tpi1_pa_w )
m_ieee->nrfd_w(BIT(data, 7));
}
-READ8_MEMBER( p500_state::tpi1_pb_r )
+READ8_MEMBER( cbm2_state::tpi1_pb_r )
{
/*
@@ -772,7 +1118,7 @@ READ8_MEMBER( p500_state::tpi1_pb_r )
return data;
}
-WRITE8_MEMBER( p500_state::tpi1_pb_w )
+WRITE8_MEMBER( cbm2_state::tpi1_pb_w )
{
/*
@@ -801,27 +1147,41 @@ WRITE8_MEMBER( p500_state::tpi1_pb_w )
m_cassette->motor_w(BIT(data, 6));
}
+WRITE_LINE_MEMBER( cbm2_state::tpi1_ca_w )
+{
+ m_graphics = state;
+}
+
WRITE_LINE_MEMBER( p500_state::tpi1_ca_w )
{
- //logerror("STATVID %u\n", state);
-
m_statvid = state;
}
WRITE_LINE_MEMBER( p500_state::tpi1_cb_w )
{
- //logerror("VICDOTSEL %u\n", state);
-
m_vicdotsel = state;
}
static const tpi6525_interface tpi1_intf =
+{
+ DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tpi1_irq_w),
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_r),
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_w),
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_r),
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_w),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tpi1_ca_w),
+ DEVCB_NULL
+};
+
+static const tpi6525_interface p500_tpi1_intf =
{
DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_irq_w),
- DEVCB_DRIVER_MEMBER(p500_state, tpi1_pa_r),
- DEVCB_DRIVER_MEMBER(p500_state, tpi1_pa_w),
- DEVCB_DRIVER_MEMBER(p500_state, tpi1_pb_r),
- DEVCB_DRIVER_MEMBER(p500_state, tpi1_pb_w),
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_r),
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pa_w),
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_r),
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi1_pb_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(p500_state, tpi1_ca_w),
@@ -833,33 +1193,8 @@ static const tpi6525_interface tpi1_intf =
// tpi6525_interface tpi2_intf
//-------------------------------------------------
-WRITE8_MEMBER( p500_state::tpi2_pa_w )
+UINT8 cbm2_state::read_keyboard()
{
- m_tpi2_pa = data;
-}
-
-WRITE8_MEMBER( p500_state::tpi2_pb_w )
-{
- m_tpi2_pb = data;
-}
-
-READ8_MEMBER( p500_state::tpi2_pc_r )
-{
- /*
-
- bit description
-
- 0 COLUMN 0
- 1 COLUMN 1
- 2 COLUMN 2
- 3 COLUMN 3
- 4 COLUMN 4
- 5 COLUMN 5
- 6
- 7
-
- */
-
UINT8 data = 0xff;
if (!BIT(m_tpi2_pa, 0)) data &= ioport("PA0")->read();
@@ -882,6 +1217,76 @@ READ8_MEMBER( p500_state::tpi2_pc_r )
return data;
}
+WRITE8_MEMBER( cbm2_state::tpi2_pa_w )
+{
+ m_tpi2_pa = data;
+}
+
+WRITE8_MEMBER( cbm2_state::tpi2_pb_w )
+{
+ m_tpi2_pb = data;
+}
+
+READ8_MEMBER( cbm2lp_state::tpi2_pc_r )
+{
+ /*
+
+ bit description
+
+ 0 COLUMN 0
+ 1 COLUMN 1
+ 2 COLUMN 2
+ 3 COLUMN 3
+ 4 COLUMN 4
+ 5 COLUMN 5
+ 6 0=PAL, 1=NTSC
+ 7 0
+
+ */
+
+ return (m_ntsc << 6) | (read_keyboard() & 0x3f);
+}
+
+READ8_MEMBER( cbm2hp_state::tpi2_pc_r )
+{
+ /*
+
+ bit description
+
+ 0 COLUMN 0
+ 1 COLUMN 1
+ 2 COLUMN 2
+ 3 COLUMN 3
+ 4 COLUMN 4
+ 5 COLUMN 5
+ 6 1
+ 7 1
+
+ */
+
+ return read_keyboard();
+}
+
+READ8_MEMBER( p500_state::tpi2_pc_r )
+{
+ /*
+
+ bit description
+
+ 0 COLUMN 0
+ 1 COLUMN 1
+ 2 COLUMN 2
+ 3 COLUMN 3
+ 4 COLUMN 4
+ 5 COLUMN 5
+ 6
+ 7
+
+ */
+
+ return read_keyboard();
+}
+
WRITE8_MEMBER( p500_state::tpi2_pc_w )
{
/*
@@ -906,9 +1311,35 @@ static const tpi6525_interface tpi2_intf =
{
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(p500_state, tpi2_pa_w),
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
DEVCB_NULL,
- DEVCB_DRIVER_MEMBER(p500_state, tpi2_pb_w),
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
+ DEVCB_DRIVER_MEMBER(cbm2lp_state, tpi2_pc_r),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
+};
+
+static const tpi6525_interface hp_tpi2_intf =
+{
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
+ DEVCB_NULL,
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
+ DEVCB_DRIVER_MEMBER(cbm2hp_state, tpi2_pc_r),
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_NULL
+};
+
+static const tpi6525_interface p500_tpi2_intf =
+{
+ DEVCB_NULL,
+ DEVCB_NULL,
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pa_w),
+ DEVCB_NULL,
+ DEVCB_DRIVER_MEMBER(cbm2_state, tpi2_pb_w),
DEVCB_DRIVER_MEMBER(p500_state, tpi2_pc_r),
DEVCB_DRIVER_MEMBER(p500_state, tpi2_pc_w),
DEVCB_NULL,
@@ -920,7 +1351,7 @@ static const tpi6525_interface tpi2_intf =
// mos6526_interface cia_intf
//-------------------------------------------------
-READ8_MEMBER( p500_state::cia_pa_r )
+READ8_MEMBER( cbm2_state::cia_pa_r )
{
/*
@@ -946,7 +1377,7 @@ READ8_MEMBER( p500_state::cia_pa_r )
return data;
}
-WRITE8_MEMBER( p500_state::cia_pa_w )
+WRITE8_MEMBER( cbm2_state::cia_pa_w )
{
/*
@@ -966,7 +1397,7 @@ WRITE8_MEMBER( p500_state::cia_pa_w )
m_cia_pa = data;
}
-READ8_MEMBER( p500_state::cia_pb_r )
+READ8_MEMBER( cbm2_state::cia_pb_r )
{
/*
@@ -992,7 +1423,7 @@ READ8_MEMBER( p500_state::cia_pb_r )
return data;
}
-WRITE8_MEMBER( p500_state::cia_pb_w )
+WRITE8_MEMBER( cbm2_state::cia_pb_w )
{
/*
@@ -1016,10 +1447,10 @@ static const mos6526_interface cia_intf =
DEVCB_NULL, // user port
DEVCB_NULL, // user port
DEVCB_NULL, // user port
- DEVCB_DRIVER_MEMBER(p500_state, cia_pa_r),
- DEVCB_DRIVER_MEMBER(p500_state, cia_pa_w),
- DEVCB_DRIVER_MEMBER(p500_state, cia_pb_r),
- DEVCB_DRIVER_MEMBER(p500_state, cia_pb_w),
+ DEVCB_DRIVER_MEMBER(cbm2_state, cia_pa_r),
+ DEVCB_DRIVER_MEMBER(cbm2_state, cia_pa_w),
+ DEVCB_DRIVER_MEMBER(cbm2_state, cia_pb_r),
+ DEVCB_DRIVER_MEMBER(cbm2_state, cia_pb_w),
};
@@ -1027,16 +1458,16 @@ static const mos6526_interface cia_intf =
// PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
//-------------------------------------------------
-WRITE_LINE_MEMBER( p500_state::tape_read_w )
+WRITE_LINE_MEMBER( cbm2_state::tape_read_w )
{
m_cass_rd = state;
- check_interrupts();
+ mos6526_flag_w(m_cia, m_cass_rd && m_user_flag);
}
static PET_DATASSETTE_PORT_INTERFACE( datassette_intf )
{
- DEVCB_DRIVER_LINE_MEMBER(p500_state, tape_read_w)
+ DEVCB_DRIVER_LINE_MEMBER(cbm2_state, tape_read_w)
};
@@ -1066,7 +1497,7 @@ static IEEE488_INTERFACE( ieee488_intf )
// device_timer - handler timer events
//-------------------------------------------------
-void p500_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+void cbm2_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
m_tpi1->i0_w(m_todclk);
@@ -1075,10 +1506,10 @@ void p500_state::device_timer(emu_timer &timer, device_timer_id id, int param, v
//-------------------------------------------------
-// MACHINE_START( p500 )
+// MACHINE_START( cbm2 )
//-------------------------------------------------
-void p500_state::machine_start()
+MACHINE_START_MEMBER( cbm2_state, cbm2 )
{
// find memory regions
m_basic = memregion("basic")->base();
@@ -1086,20 +1517,20 @@ void p500_state::machine_start()
m_charom = memregion("charom")->base();
// allocate memory
- m_video_ram.allocate(0x400);
+ m_video_ram.allocate(m_video_ram_size);
m_buffer_ram.allocate(0x800);
// allocate timer
+ int todclk = (m_ntsc ? 60 : 50) * 2;
+
m_todclk_timer = timer_alloc();
- m_todclk_timer->adjust(attotime::from_hz(60 * 2), 0, attotime::from_hz(60 * 2));
+ m_todclk_timer->adjust(attotime::from_hz(todclk), 0, attotime::from_hz(todclk));
// state saving
save_item(NAME(m_dramon));
- save_item(NAME(m_statvid));
- save_item(NAME(m_vicdotsel));
- save_item(NAME(m_vicbnksel));
+ save_item(NAME(m_graphics));
+ save_item(NAME(m_ntsc));
save_item(NAME(m_todclk));
- save_item(NAME(m_vic_irq));
save_item(NAME(m_tpi1_irq));
save_item(NAME(m_cass_rd));
save_item(NAME(m_user_flag));
@@ -1110,18 +1541,61 @@ void p500_state::machine_start()
//-------------------------------------------------
-// MACHINE_RESET( p500 )
+// MACHINE_START( cbm2_ntsc )
//-------------------------------------------------
-void p500_state::machine_reset()
+MACHINE_START_MEMBER( cbm2_state, cbm2_ntsc )
+{
+ m_video_ram_size = 0x800;
+ m_ntsc = 1;
+
+ MACHINE_START_CALL_MEMBER(cbm2);
+}
+
+
+//-------------------------------------------------
+// MACHINE_START( cbm2_pal )
+//-------------------------------------------------
+
+MACHINE_START_MEMBER( cbm2_state, cbm2_pal )
+{
+ m_video_ram_size = 0x800;
+ m_ntsc = 0;
+
+ MACHINE_START_CALL_MEMBER(cbm2);
+}
+
+
+//-------------------------------------------------
+// MACHINE_START( p500 )
+//-------------------------------------------------
+
+MACHINE_START_MEMBER( p500_state, p500 )
+{
+ m_video_ram_size = 0x400;
+ m_ntsc = 1;
+
+ MACHINE_START_CALL_MEMBER(cbm2);
+
+ // state saving
+ save_item(NAME(m_statvid));
+ save_item(NAME(m_vicdotsel));
+ save_item(NAME(m_vicbnksel));
+ save_item(NAME(m_vic_irq));
+}
+
+
+//-------------------------------------------------
+// MACHINE_RESET( cbm2 )
+//-------------------------------------------------
+
+MACHINE_RESET_MEMBER( cbm2_state, cbm2 )
{
m_dramon = 1;
- m_statvid = 1;
- m_vicdotsel = 1;
- m_vicbnksel = 0x03;
- m_vic_irq = CLEAR_LINE;
+ m_graphics = 1;
m_tpi1_irq = CLEAR_LINE;
m_cass_rd = 1;
+ m_user_irq = CLEAR_LINE;
m_maincpu->reset();
@@ -1134,16 +1608,57 @@ void p500_state::machine_reset()
}
+//-------------------------------------------------
+// MACHINE_RESET( p500 )
+//-------------------------------------------------
+
+MACHINE_RESET_MEMBER( p500_state, p500 )
+{
+ MACHINE_RESET_CALL_MEMBER(cbm2);
+
+ m_statvid = 1;
+ m_vicdotsel = 1;
+ m_vicbnksel = 0x03;
+ m_vic_irq = CLEAR_LINE;
+}
+
+
//**************************************************************************
// MACHINE DRIVERS
//**************************************************************************
+//-------------------------------------------------
+// MACHINE_CONFIG( 128k )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_FRAGMENT( 128k )
+ // internal ram
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("128K")
+ MCFG_RAM_EXTRA_OPTIONS("256K")
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( 256k )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_FRAGMENT( 256k )
+ // internal ram
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("256K")
+MACHINE_CONFIG_END
+
+
//-------------------------------------------------
// MACHINE_CONFIG( p500 )
//-------------------------------------------------
static MACHINE_CONFIG_START( p500, p500_state )
+ MCFG_MACHINE_START_OVERRIDE(p500_state, p500)
+ MCFG_MACHINE_RESET_OVERRIDE(p500_state, p500)
+
// basic hardware
MCFG_CPU_ADD(M6509_TAG, M6509, VIC6567_CLOCK)
MCFG_CPU_PROGRAM_MAP(p500_mem)
@@ -1163,12 +1678,11 @@ static MACHINE_CONFIG_START( p500, p500_state )
// devices
MCFG_PLS100_ADD(PLA1_TAG)
MCFG_PLS100_ADD(PLA2_TAG)
- MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf)
- MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf)
+ MCFG_TPI6525_ADD(MOS6525_1_TAG, p500_tpi1_intf)
+ MCFG_TPI6525_ADD(MOS6525_2_TAG, p500_tpi2_intf)
MCFG_ACIA6551_ADD(MOS6551A_TAG)
MCFG_MOS6526R1_ADD(MOS6526_TAG, VIC6567_CLOCK, 60, cia_intf)
- //MCFG_QUICKLOAD_ADD("quickload", cbm_p500, "p00,prg,t64", CBM_QUICKLOAD_DELAY_SECONDS)
- MCFG_CBM_IEEE488_ADD(ieee488_intf, NULL)
+ MCFG_CBM_IEEE488_ADD(ieee488_intf, "sfd1001")
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL)
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL)
@@ -1176,12 +1690,211 @@ static MACHINE_CONFIG_START( p500, p500_state )
//MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, user_intf, cbm2_user_port_cards, NULL, NULL)
//MCFG_CBM2_SYSTEM_PORT_ADD(CBM2_SYSTEM_PORT_TAG, system_intf, cbm2_system_port_cards, NULL, NULL)
- // software list
-
// internal ram
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("128K")
- MCFG_RAM_EXTRA_OPTIONS("256K")
+ MCFG_FRAGMENT_ADD(128k)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( cbm2lp_ntsc )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( cbm2lp_ntsc, cbm2lp_state )
+ MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_ntsc)
+ MCFG_MACHINE_RESET_OVERRIDE(cbm2_state, cbm2)
+
+ // basic hardware
+ MCFG_CPU_ADD(M6509_TAG, M6509, XTAL_18MHz/8)
+ MCFG_CPU_PROGRAM_MAP(cbm2_mem)
+ MCFG_QUANTUM_PERFECT_CPU(M6509_TAG)
+
+ // video hardware
+ MCFG_SCREEN_ADD(SCREEN_TAG, RASTER)
+ MCFG_SCREEN_UPDATE_DEVICE(MC68B45_TAG, mc6845_device, screen_update)
+
+ MCFG_SCREEN_REFRESH_RATE(60)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
+ MCFG_SCREEN_SIZE(768, 312)
+ MCFG_SCREEN_VISIBLE_AREA(0, 768-1, 0, 312-1)
+
+ MCFG_MC6845_ADD(MC68B45_TAG, MC6845, XTAL_18MHz/8, lp_crtc_intf)
+
+ // sound hardware
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD(MOS6851_TAG, SID6581, XTAL_18MHz/8)
+ MCFG_SOUND_CONFIG(sid_intf)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
+ MCFG_SOUND_ADD("dac", DAC, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+
+ // devices
+ MCFG_PLS100_ADD(PLA1_TAG)
+ MCFG_TPI6525_ADD(MOS6525_1_TAG, tpi1_intf)
+ MCFG_TPI6525_ADD(MOS6525_2_TAG, tpi2_intf)
+ MCFG_ACIA6551_ADD(MOS6551A_TAG)
+ MCFG_MOS6526R1_ADD(MOS6526_TAG, XTAL_18MHz/8, 60, cia_intf)
+ MCFG_CBM_IEEE488_ADD(ieee488_intf, "sfd1001")
+ MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, datassette_intf, cbm_datassette_devices, NULL, NULL)
+ MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL, NULL)
+ MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL, NULL)
+ MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, XTAL_18MHz/8, cbm2_expansion_cards, NULL, NULL)
+ //MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, user_intf, cbm2_user_port_cards, NULL, NULL)
+ //MCFG_CBM2_SYSTEM_PORT_ADD(CBM2_SYSTEM_PORT_TAG, system_intf, cbm2_system_port_cards, NULL, NULL)
+
+ // software list
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "cbm2_cart")
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( b128 )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( b128, cbm2lp_state )
+ MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
+ MCFG_FRAGMENT_ADD(128k)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( b256 )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( b256, cbm2lp_state )
+ MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
+ MCFG_FRAGMENT_ADD(256k)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( cbm2lp_pal )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( cbm2lp_pal, cbm2lp_state )
+ MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
+
+ MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal)
+
+ MCFG_DEVICE_REMOVE(MOS6526_TAG)
+ MCFG_MOS6526R1_ADD(MOS6526_TAG, XTAL_18MHz/8, 50, cia_intf)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( cbm610 )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( cbm610, cbm2lp_state )
+ MCFG_FRAGMENT_ADD(cbm2lp_pal)
+ MCFG_FRAGMENT_ADD(128k)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( cbm620 )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( cbm620, cbm2lp_state )
+ MCFG_FRAGMENT_ADD(cbm2lp_pal)
+ MCFG_FRAGMENT_ADD(256k)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( cbm2hp_ntsc )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( cbm2hp_ntsc, cbm2hp_state )
+ MCFG_FRAGMENT_ADD(cbm2lp_ntsc)
+
+ MCFG_DEVICE_REMOVE(MC68B45_TAG)
+ MCFG_MC6845_ADD(MC68B45_TAG, MC6845, XTAL_18MHz/8, hp_crtc_intf)
+
+ // devices
+ MCFG_DEVICE_REMOVE(MOS6525_2_TAG)
+ MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( b128hp )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( b128hp, cbm2hp_state )
+ MCFG_FRAGMENT_ADD(cbm2hp_ntsc)
+ MCFG_FRAGMENT_ADD(128k)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( b256hp )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( b256hp, cbm2hp_state )
+ MCFG_FRAGMENT_ADD(cbm2hp_ntsc)
+ MCFG_FRAGMENT_ADD(256k)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( bx256hp )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( bx256hp, cbm2hp_state )
+ MCFG_FRAGMENT_ADD(b256hp)
+
+ //MCFG_DEVICE_REMOVE(CBM2_SYSTEM_PORT_TAG)
+ //MCFG_CBM2_SYSTEM_PORT_ADD(CBM2_SYSTEM_PORT_TAG, system_intf, cbm2_system_port_cards, "8088", NULL)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( cbm2hp_pal )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( cbm2hp_pal, cbm2hp_state )
+ MCFG_FRAGMENT_ADD(cbm2hp_ntsc)
+
+ MCFG_MACHINE_START_OVERRIDE(cbm2_state, cbm2_pal)
+
+ // devices
+ MCFG_DEVICE_REMOVE(MOS6525_2_TAG)
+ MCFG_TPI6525_ADD(MOS6525_2_TAG, hp_tpi2_intf)
+
+ MCFG_DEVICE_REMOVE(MOS6526_TAG)
+ MCFG_MOS6526R1_ADD(MOS6526_TAG, XTAL_18MHz/8, 50, cia_intf)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( cbm710 )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( cbm710, cbm2hp_state )
+ MCFG_FRAGMENT_ADD(cbm2hp_pal)
+ MCFG_FRAGMENT_ADD(128k)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( cbm720 )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( cbm720, cbm2hp_state )
+ MCFG_FRAGMENT_ADD(cbm2hp_pal)
+ MCFG_FRAGMENT_ADD(256k)
+MACHINE_CONFIG_END
+
+
+//-------------------------------------------------
+// MACHINE_CONFIG( cbm730 )
+//-------------------------------------------------
+
+static MACHINE_CONFIG_START( cbm730, cbm2hp_state )
+ MCFG_FRAGMENT_ADD(cbm720)
+
+ //MCFG_DEVICE_REMOVE(CBM2_SYSTEM_PORT_TAG)
+ //MCFG_CBM2_SYSTEM_PORT_ADD(CBM2_SYSTEM_PORT_TAG, system_intf, cbm2_system_port_cards, "8088", NULL)
MACHINE_CONFIG_END
@@ -1219,10 +1932,246 @@ ROM_START( p500 )
ROM_END
+//-------------------------------------------------
+// ROM( b500 )
+//-------------------------------------------------
+
+ROM_START( b500 )
+ ROM_REGION( 0x4000, "basic", 0 )
+ ROM_LOAD( "901243-01.u59", 0x0000, 0x2000, CRC(22822706) SHA1(901bbf59d8b8682b481be8b2de99b406fffa4bab) )
+ ROM_LOAD( "901242-01a.u60", 0x2000, 0x2000, CRC(ef13d595) SHA1(2fb72985d7d4ab69c5780179178828c931a9f5b0) )
+
+ ROM_REGION( 0x2000, "kernal", 0 )
+ ROM_LOAD( "901244-01.u61", 0x0000, 0x2000, CRC(93414213) SHA1(a54a593dbb420ae1ac39b0acde9348160f7840ff) )
+
+ ROM_REGION( 0x1000, "charom", 0 )
+ ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
+
+ ROM_REGION( 0xf5, PLA1_TAG, 0 )
+ ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
+ROM_END
+
+
+//-------------------------------------------------
+// ROM( b128 )
+//-------------------------------------------------
+
+ROM_START( b128 )
+ ROM_REGION( 0x4000, "basic", 0 )
+ ROM_DEFAULT_BIOS("r2")
+ ROM_SYSTEM_BIOS( 0, "r1", "Revision 1" )
+ ROMX_LOAD( "901243-02b.u59", 0x0000, 0x2000, CRC(9d0366f9) SHA1(625f7337ea972a8bce2bdf2daababc0ed0b3b69b), ROM_BIOS(1) )
+ ROMX_LOAD( "901242-02b.u60", 0x2000, 0x2000, CRC(837978b5) SHA1(56e8d2f86bf73ba36b3d3cb84dd75806b66c530a), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "r2", "Revision 2" )
+ ROMX_LOAD( "901243-04a.u59", 0x0000, 0x2000, CRC(b0dcb56d) SHA1(08d333208060ee2ce84d4532028d94f71c016b96), ROM_BIOS(2) )
+ ROMX_LOAD( "901242-04a.u60", 0x2000, 0x2000, CRC(de04ea4f) SHA1(7c6de17d46a3343dc597d9b9519cf63037b31908), ROM_BIOS(2) )
+
+ ROM_REGION( 0x2000, "kernal", 0 )
+ ROMX_LOAD( "901244-03b.u61", 0x0000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(1) )
+ ROMX_LOAD( "901244-04a.u61", 0x0000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(2) )
+
+ ROM_REGION( 0x1000, "charom", 0 )
+ ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
+
+ ROM_REGION( 0xf5, PLA1_TAG, 0 )
+ ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
+ROM_END
+
+
+//-------------------------------------------------
+// ROM( b256 )
+//-------------------------------------------------
+
+ROM_START( b256 )
+ ROM_REGION( 0x4000, "basic", 0 )
+ ROM_LOAD( "901241-03.u59", 0x0000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
+ ROM_LOAD( "901240-03.u60", 0x2000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
+
+ ROM_REGION( 0x2000, "kernal", 0 )
+ ROM_DEFAULT_BIOS("r2")
+ ROM_SYSTEM_BIOS( 0, "r1", "Revision 1" )
+ ROMX_LOAD( "901244-03b.u61", 0x0000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "r2", "Revision 2" )
+ ROMX_LOAD( "901244-04a.u61", 0x0000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(2) )
+
+ ROM_REGION( 0x1000, "charom", 0 )
+ ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
+
+ ROM_REGION( 0xf5, PLA1_TAG, 0 )
+ ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
+ROM_END
+
+
+//-------------------------------------------------
+// ROM( cbm610 )
+//-------------------------------------------------
+
+#define rom_cbm610 rom_b128
+
+
+//-------------------------------------------------
+// ROM( cbm620 )
+//-------------------------------------------------
+
+#define rom_cbm620 rom_b256
+
+
+//-------------------------------------------------
+// ROM( cbm620hu )
+//-------------------------------------------------
+
+ROM_START( cbm620hu )
+ ROM_REGION( 0x4000, "basic", 0 )
+ ROM_LOAD( "610.u60", 0x0000, 0x4000, CRC(8eed0d7e) SHA1(9d06c5c3c012204eaaef8b24b1801759b62bf57e) )
+
+ ROM_REGION( 0x2000, "kernal", 0 )
+ ROM_LOAD( "kernhun.bin", 0x0000, 0x2000, CRC(0ea8ca4d) SHA1(9977c9f1136ee9c04963e0b50ae0c056efa5663f) )
+
+ ROM_REGION( 0x2000, "charom", 0 )
+ ROM_LOAD( "charhun.bin", 0x0000, 0x2000, CRC(1fb5e596) SHA1(3254e069f8691b30679b19a9505b6afdfedce6ac) )
+
+ ROM_REGION( 0xf5, PLA1_TAG, 0 )
+ ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
+ROM_END
+
+
+//-------------------------------------------------
+// ROM( b128hp )
+//-------------------------------------------------
+
+ROM_START( b128hp )
+ ROM_REGION( 0x4000, "basic", 0 )
+ ROM_DEFAULT_BIOS("r2")
+ ROM_SYSTEM_BIOS( 0, "r1", "Revision 1" )
+ ROMX_LOAD( "901243-02b.u59", 0x0000, 0x2000, CRC(9d0366f9) SHA1(625f7337ea972a8bce2bdf2daababc0ed0b3b69b), ROM_BIOS(1) )
+ ROMX_LOAD( "901242-02b.u60", 0x2000, 0x2000, CRC(837978b5) SHA1(56e8d2f86bf73ba36b3d3cb84dd75806b66c530a), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "r2", "Revision 2" )
+ ROMX_LOAD( "901243-04a.u59", 0x0000, 0x2000, CRC(b0dcb56d) SHA1(08d333208060ee2ce84d4532028d94f71c016b96), ROM_BIOS(2) )
+ ROMX_LOAD( "901242-04a.u60", 0x2000, 0x2000, CRC(de04ea4f) SHA1(7c6de17d46a3343dc597d9b9519cf63037b31908), ROM_BIOS(2) )
+
+ ROM_REGION( 0x2000, "kernal", 0 )
+ ROMX_LOAD( "901244-03b.u61", 0x0000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(1) )
+ ROMX_LOAD( "901244-04a.u61", 0x0000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(2) )
+
+ ROM_REGION( 0x1000, "charom", 0 )
+ ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
+
+ ROM_REGION( 0xf5, PLA1_TAG, 0 )
+ ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
+ROM_END
+
+
+//-------------------------------------------------
+// ROM( b256hp )
+//-------------------------------------------------
+
+ROM_START( b256hp )
+ ROM_REGION( 0x4000, "basic", 0 )
+ ROM_LOAD( "901241-03.u59", 0x0000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
+ ROM_LOAD( "901240-03.u60", 0x2000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
+
+ ROM_REGION( 0x2000, "kernal", 0 )
+ ROM_DEFAULT_BIOS("r2")
+ ROM_SYSTEM_BIOS( 0, "r1", "Revision 1" )
+ ROMX_LOAD( "901244-03b.u61", 0x0000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "r2", "Revision 2" )
+ ROMX_LOAD( "901244-04a.u61", 0x0000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(2) )
+
+ ROM_REGION( 0x1000, "charom", 0 )
+ ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
+
+ ROM_REGION( 0xf5, PLA1_TAG, 0 )
+ ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
+ROM_END
+
+
+//-------------------------------------------------
+// ROM( bx256hp )
+//-------------------------------------------------
+
+ROM_START( bx256hp )
+ ROM_REGION( 0x4000, "basic", 0 )
+ ROM_LOAD( "901241-03.u59", 0x0000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
+ ROM_LOAD( "901240-03.u60", 0x2000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
+
+ ROM_REGION( 0x1000, "8088", 0)
+ ROM_LOAD( "8088.u14", 0x0000, 0x1000, CRC(195e0281) SHA1(ce8acd2a5fb6cbd70d837811d856d656544a1f97) )
+
+ ROM_REGION( 0x2000, "kernal", 0 )
+ ROM_DEFAULT_BIOS("r2")
+ ROM_SYSTEM_BIOS( 0, "r1", "Revision 1" )
+ ROMX_LOAD( "901244-03b.u61", 0x0000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(1) )
+ ROM_SYSTEM_BIOS( 1, "r2", "Revision 2" )
+ ROMX_LOAD( "901244-04a.u61", 0x0000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(2) )
+
+ ROM_REGION( 0x1000, "charom", 0 )
+ ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
+
+ ROM_REGION( 0xf5, PLA1_TAG, 0 )
+ ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
+ROM_END
+
+
+//-------------------------------------------------
+// ROM( cbm710 )
+//-------------------------------------------------
+
+#define rom_cbm710 rom_b128hp
+
+
+//-------------------------------------------------
+// ROM( cbm720 )
+//-------------------------------------------------
+
+#define rom_cbm720 rom_b256hp
+
+
+//-------------------------------------------------
+// ROM( cbm730 )
+//-------------------------------------------------
+
+#define rom_cbm730 rom_bx256hp
+
+
+//-------------------------------------------------
+// ROM( cbm720sw )
+//-------------------------------------------------
+
+ROM_START( cbm720sw )
+ ROM_REGION( 0x4000, "basic", 0 )
+ ROM_LOAD( "901241-03.u59", 0x0000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
+ ROM_LOAD( "901240-03.u60", 0x2000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
+
+ ROM_REGION( 0x2000, "kernal", 0 )
+ ROM_LOAD( "swe-901244-03.u61", 0x0000, 0x2000, CRC(87bc142b) SHA1(fa711f6082741b05a9c80744f5aee68dc8c1dcf4) )
+
+ ROM_REGION( 0x1000, "charom", 0 )
+ ROM_LOAD( "901233-03.u25", 0x0000, 0x1000, CRC(09518b19) SHA1(2e28491e31e2c0a3b6db388055216140a637cd09) )
+
+ ROM_REGION( 0xf5, PLA1_TAG, 0 )
+ ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
+ROM_END
+
+
//**************************************************************************
// SYSTEM DRIVERS
//**************************************************************************
-// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS
-COMP( 1983, p500, 0, 0, p500, p500, driver_device, 0, "Commodore Business Machines", "P500 ~ B128-40 ~ PET-II (NTSC)", GAME_NOT_WORKING )
+// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS
+COMP( 1983, p500, 0, 0, p500, cbm2, driver_device, 0, "Commodore Business Machines", "P500 ~ C128-40 ~ PET-II (NTSC)", GAME_NOT_WORKING )
+
+COMP( 1983, b500, p500, 0, b128, cbm2, driver_device, 0, "Commodore Business Machines", "B500 (NTSC)", GAME_NOT_WORKING )
+COMP( 1983, b128, p500, 0, b128, cbm2, driver_device, 0, "Commodore Business Machines", "B128 (NTSC)", GAME_NOT_WORKING )
+COMP( 1983, b256, p500, 0, b256, cbm2, driver_device, 0, "Commodore Business Machines", "B256 (NTSC)", GAME_NOT_WORKING )
+COMP( 1983, cbm610, p500, 0, cbm610, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 610 (PAL)", GAME_NOT_WORKING )
+COMP( 1983, cbm620, p500, 0, cbm620, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 620 (PAL)", GAME_NOT_WORKING )
+COMP( 1983, cbm620hu, p500, 0, cbm620, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 620 (Hungary)", GAME_NOT_WORKING )
+
+COMP( 1983, b128hp, p500, 0, b128hp, cbm2, driver_device, 0, "Commodore Business Machines", "B128-80HP (NTSC)", GAME_NOT_WORKING )
+COMP( 1983, b256hp, p500, 0, b256hp, cbm2, driver_device, 0, "Commodore Business Machines", "B256-80HP (NTSC)", GAME_NOT_WORKING )
+COMP( 1983, bx256hp, p500, 0, bx256hp, cbm2, driver_device, 0, "Commodore Business Machines", "BX256-80HP (NTSC)", GAME_NOT_WORKING )
+COMP( 1983, cbm710, p500, 0, cbm710, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 710 (PAL)", GAME_NOT_WORKING )
+COMP( 1983, cbm720, p500, 0, cbm720, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 720 (PAL)", GAME_NOT_WORKING )
+COMP( 1983, cbm720sw, p500, 0, cbm720, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 720 (Sweden/Finland)", GAME_NOT_WORKING )
+COMP( 1983, cbm730, p500, 0, cbm730, cbm2, driver_device, 0, "Commodore Business Machines", "CBM 730 (PAL)", GAME_NOT_WORKING )
diff --git a/src/mess/drivers/cbmb.c b/src/mess/drivers/cbmb.c
deleted file mode 100644
index 855e13e2df6..00000000000
--- a/src/mess/drivers/cbmb.c
+++ /dev/null
@@ -1,585 +0,0 @@
-/***************************************************************************
- commodore b series computer
-
- PeT mess@utanet.at
-
- documentation
- vice emulator
- www.funet.fi
-***************************************************************************/
-
-/*
-
-2008 - Driver Updates
----------------------
-
-(most of the informations are taken from http://www.zimmers.net/cbmpics/ )
-(according to http://ca.geocities.com/sjgray@rogers.com/CBM/index.html there
-are MANY more models in this family... but I haven't found confirmations, nor
-dumps)
-
-[CBM systems which belong to this driver]
-
-* Commodore CBM-II Series (1983)
-
- Notice that, despite the Datasette port present on the board, the BASIC ROMs
-miss the routines needed to actually load from a tape
-
- Various models:
-
-U.S. name EU name RAM
-
-B500 (*) - 128k
-B128 CBM 610 128k
-B256 CBM 620 256k
-B128-80HP (**) CBM 710 128k
-B256-80HP (**) CBM 720 256k
-BX256-80HP (***) CBM 730 256k
-
-(*) Prototype for the B128? As you can read at http://www.zimmers.net/cbmpics/cb500.html
- the naming of these machines is not clear: either they were B500/128 &
- B500/256 or B128 & B256. However, these names always refer to the low
- profile models.
-(**) HP stands for High Profile. The other systems were the low profile models.
- HP machines had a detachable keyboard
-(***) Additional 8088 CPU present
-
-CPU: MOS 6509 (2 MHz)
-RAM: 128 Kilobytes (Expandable to 256k internal, 704k external)
-ROM: 24 Kilobytes
-Video: MOS 6545 CTRC (Text: 80 columns, 25 rows)
-Sound: MOS 6581 SID (3 voice stereo synthesizer/digital sound capabilities)
-Ports: CSG 6551/6525x2/6526 (IEEE-488 port; CBM Datasette port; RS232 port;
- CBM Monitor port; CBM-II/PET-II expansion port; 1 RCA audio port; Power
- and reset switches
-Keyboard: Full-sized 102 key QWERTY (19 key numeric keypad!; 4 direction
- cursor-pad)
-
-
-* Commodore PET-II Series (1983)
-
- This series only features the P500 machine, which never even reached the
-market. In this machine, the Datasette port can be used (the BASIC ROMs
-contain the necessary routines). It is also probably know as C128-40.
-
-CPU: CSG 6509 (1 MHz)
-RAM: 128 kilobytes, expandable to 720k
-ROM: 24 kilobytes
-Video: CSG 6569 "VIC-II" (320 x 200 Hi-Resolution; 40 columns text; Palette
- of 16 colors)
-Sound: CSG 6581 "SID" (3 voice stereo synthesizer/digital sound capabilities)
-Ports: CSG 6551/6522 (2 Joystick/Mouse ports; IEEE-488 port; CBM Datasette
- port; RS232 port; CBM Monitor port; CBM-II/PET-II expansion port; 1 RCA
- audio port; Power and reset switches)
-Keyboard: Full-sized 102 key QWERTY (19 key numeric keypad!; 4 direction
- cursor-pad)
-
-[To Do]
-
-* Support is still missing for: Sound, internal slots
-
-* Emulate 8088 co-processor for BX-256HP and eventually add its European
- counterpart CBM 730
-
-* Add better P500 emulation (almost everything: memory access, inputs,
- Datasette, etc.)
-
-* Was CBM 710 / 720 monitor at 50Hz? If not remove MACHINE_CONFIG_START( cbm700pal, cbmb_state )
- and use the 60Hz version for the whole High Profile
-
-* Find info about the following models (if ever existed):
- + BX128-80HP
- + CBM 700
- + CBM 505, CBM 510 (these seems proto as CBM 500 but with less RAM, 64
- & 128)
-*/
-
-
-#include "emu.h"
-//#include "cpu/i86/i86.h"
-#include "cpu/m6502/m6509.h"
-#include "sound/sid6581.h"
-#include "machine/6525tpi.h"
-#include "machine/6526cia.h"
-
-#include "formats/cbm_snqk.h"
-#include "includes/cbm.h"
-#include "includes/cbmb.h"
-#include "machine/ieee488.h"
-#include "machine/cbmipt.h"
-#include "video/mos6566.h"
-#include "video/mc6845.h"
-
-#include "includes/cbmb.h"
-
-
-/*************************************
- *
- * Main CPU memory handlers
- *
- *************************************/
-
-
-static ADDRESS_MAP_START(cbmb_mem , AS_PROGRAM, 8, cbmb_state )
- AM_RANGE(0x00000, 0x0ffff) AM_READONLY AM_WRITENOP
- AM_RANGE(0x10000, 0x4ffff) AM_RAM
- AM_RANGE(0x50002, 0x5ffff) AM_READONLY AM_WRITENOP
- AM_RANGE(0x60000, 0xf07ff) AM_RAM
-#if 0
- AM_RANGE(0xf0800, 0xf0fff) AM_READ_LEGACY(SMH_ROM)
-#endif
- AM_RANGE(0xf1000, 0xf1fff) AM_ROM /* cartridges or ram */
- AM_RANGE(0xf2000, 0xf3fff) AM_ROM /* cartridges or ram */
- AM_RANGE(0xf4000, 0xf5fff) AM_ROM
- AM_RANGE(0xf6000, 0xf7fff) AM_ROM
- AM_RANGE(0xf8000, 0xfbfff) AM_ROM AM_SHARE("basic")
- AM_RANGE(0xfd000, 0xfd7ff) AM_RAM AM_SHARE("videoram") /* VIDEORAM */
- AM_RANGE(0xfd800, 0xfd800) AM_MIRROR(0xfe) AM_DEVWRITE("crtc", mc6845_device, address_w)
- AM_RANGE(0xfd801, 0xfd801) AM_MIRROR(0xfe) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
- /* disk units */
- AM_RANGE(0xfda00, 0xfdaff) AM_DEVREADWRITE("sid6581", sid6581_device, read, write)
- /* db00 coprocessor */
- AM_RANGE(0xfdc00, 0xfdcff) AM_DEVREADWRITE_LEGACY("cia", mos6526_r, mos6526_w)
- /* dd00 acia */
- AM_RANGE(0xfde00, 0xfdeff) AM_DEVREADWRITE_LEGACY("tpi6525_0", tpi6525_r, tpi6525_w)
- AM_RANGE(0xfdf00, 0xfdfff) AM_DEVREADWRITE_LEGACY("tpi6525_1", tpi6525_r, tpi6525_w)
- AM_RANGE(0xfe000, 0xfffff) AM_ROM AM_SHARE("kernal")
-ADDRESS_MAP_END
-
-
-/*************************************
- *
- * Input Ports
- *
- *************************************/
-
-
-static INPUT_PORTS_START( p500 )
- PORT_INCLUDE( cbmb_keyboard ) /* ROW0 -> ROW11 */
-
- PORT_INCLUDE( cbmb_special ) /* SPECIAL */
-
- PORT_INCLUDE( c64_controls ) /* CTRLSEL, JOY0, JOY1, PADDLE0 -> PADDLE3, TRACKX, TRACKY, LIGHTX, LIGHTY, OTHER */
-INPUT_PORTS_END
-
-
-static INPUT_PORTS_START( cbm600 )
- PORT_INCLUDE( p500 )
-
- PORT_MODIFY("ROW0")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Graph Norm") PORT_CODE(KEYCODE_PGUP)
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RVS Off") PORT_CODE(KEYCODE_HOME)
-INPUT_PORTS_END
-
-
-static INPUT_PORTS_START( cbm600pal )
- PORT_INCLUDE( p500 )
-
- PORT_MODIFY("ROW0")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Graph Norm") PORT_CODE(KEYCODE_HOME)
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("ASCII DIN") PORT_CODE(KEYCODE_PGUP)
-INPUT_PORTS_END
-
-
-static INPUT_PORTS_START( cbm700 )
- PORT_INCLUDE( p500 )
-
- PORT_MODIFY("ROW0")
- PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("RVS Off") PORT_CODE(KEYCODE_HOME)
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Graph Norm") PORT_CODE(KEYCODE_PGUP)
-INPUT_PORTS_END
-
-
-
-/*************************************
- *
- * Graphics definitions
- *
- *************************************/
-
-
-static const unsigned char cbm700_palette[] =
-{
- 0,0,0, /* black */
- 0,0x80,0, /* green */
-};
-
-static const unsigned short cbmb_colortable[] = {
- 0, 1
-};
-
-static const gfx_layout cbm600_charlayout =
-{
- 8,16,
- 256, /* 256 characters */
- 1, /* 1 bits per pixel */
- { 0 }, /* no bitplanes; 1 bit per pixel */
- /* x offsets */
- { 0,1,2,3,4,5,6,7 },
- /* y offsets */
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
- 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8
- },
- 8*16
-};
-
-static const gfx_layout cbm700_charlayout =
-{
- 9,16,
- 256, /* 256 characters */
- 1, /* 1 bits per pixel */
- { 0 }, /* no bitplanes; 1 bit per pixel */
- /* x offsets */
- { 0,1,2,3,4,5,6,7,7 }, // 8.column will be cleared in cbm700_vh_start
- /* y offsets */
- { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
- 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8
- },
- 8*16
-};
-
-static GFXDECODE_START( cbm600 )
- GFXDECODE_ENTRY( "gfx1", 0x0000, cbm600_charlayout, 0, 1 )
- GFXDECODE_ENTRY( "gfx1", 0x1000, cbm600_charlayout, 0, 1 )
-GFXDECODE_END
-
-static GFXDECODE_START( cbm700 )
- GFXDECODE_ENTRY( "gfx1", 0x0000, cbm700_charlayout, 0, 1 )
- GFXDECODE_ENTRY( "gfx1", 0x1000, cbm700_charlayout, 0, 1 )
-GFXDECODE_END
-
-PALETTE_INIT_MEMBER(cbmb_state,cbm700)
-{
- int i;
-
- for ( i = 0; i < 2; i++ ) {
- palette_set_color_rgb(machine(), i, cbm700_palette[i*3], cbm700_palette[i*3+1], cbm700_palette[i*3+2]);
- }
-}
-
-
-static const mc6845_interface cbm600_crtc = {
- "screen",
- 8 /*?*/,
- NULL,
- cbm600_update_row,
- NULL,
- DEVCB_LINE(cbmb_display_enable_changed),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- NULL
-};
-
-static const mc6845_interface cbm700_crtc = {
- "screen",
- 9 /*?*/,
- NULL,
- cbm700_update_row,
- NULL,
- DEVCB_LINE(cbmb_display_enable_changed),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- NULL
-};
-
-static const sid6581_interface sid_intf =
-{
- DEVCB_NULL,
- DEVCB_NULL
-};
-
-
-/*************************************
- *
- * Machine driver
- *
- *************************************/
-
-static const tpi6525_interface cbmb_tpi_0_intf =
-{
- DEVCB_LINE(cbmb_irq),
- DEVCB_HANDLER(cbmb_tpi0_port_a_r),
- DEVCB_HANDLER(cbmb_tpi0_port_a_w),
- DEVCB_HANDLER(cbmb_tpi0_port_b_r),
- DEVCB_HANDLER(cbmb_tpi0_port_b_w),
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_LINE(cbmb_change_font),
- DEVCB_NULL
-};
-
-static const tpi6525_interface cbmb_tpi_1_intf =
-{
- DEVCB_NULL,
- DEVCB_HANDLER(cbmb_keyboard_line_a),
- DEVCB_HANDLER(cbmb_keyboard_line_select_a),
- DEVCB_HANDLER(cbmb_keyboard_line_b),
- DEVCB_HANDLER(cbmb_keyboard_line_select_b),
- DEVCB_HANDLER(cbmb_keyboard_line_c),
- DEVCB_HANDLER(cbmb_keyboard_line_select_c),
- DEVCB_NULL,
- DEVCB_NULL
-};
-
-static IEEE488_INTERFACE( ieee488_intf )
-{
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL
-};
-
-static MACHINE_CONFIG_START( cbm600, cbmb_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6509, 7833600) /* 7.8336 MHz */
- MCFG_CPU_PROGRAM_MAP(cbmb_mem)
-
- MCFG_MACHINE_RESET_OVERRIDE(cbmb_state, cbmb )
-
- /* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_SIZE(640, 200)
- MCFG_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 200 - 1)
- MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update)
-
- MCFG_GFXDECODE( cbm600 )
- MCFG_PALETTE_LENGTH(ARRAY_LENGTH(cbm700_palette) / 3)
- MCFG_PALETTE_INIT_OVERRIDE(cbmb_state, cbm700 )
-
- MCFG_MC6845_ADD("crtc", MC6845, XTAL_18MHz / 8 /*?*/ /* I do not know if this is correct, please verify */, cbm600_crtc)
-
- MCFG_VIDEO_START_OVERRIDE(cbmb_state, cbmb_crtc )
-
- /* sound hardware */
- MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_SOUND_ADD("sid6581", SID6581, 1000000)
- MCFG_SOUND_CONFIG(sid_intf)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
-
- /* quickload */
- MCFG_QUICKLOAD_ADD("quickload", cbmb, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS)
-
- /* cia */
- MCFG_MOS6526R1_ADD("cia", 7833600, 60, cbmb_cia)
-
- /* tpi */
- MCFG_TPI6525_ADD("tpi6525_0", cbmb_tpi_0_intf)
- MCFG_TPI6525_ADD("tpi6525_1", cbmb_tpi_1_intf)
-
- /* IEEE bus */
- MCFG_CBM_IEEE488_ADD(ieee488_intf, "c8250")
-
- MCFG_FRAGMENT_ADD(cbmb_cartslot)
-MACHINE_CONFIG_END
-
-
-static MACHINE_CONFIG_DERIVED( cbm600pal, cbm600 )
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(50)
-MACHINE_CONFIG_END
-
-
-static MACHINE_CONFIG_DERIVED( cbm700, cbm600 )
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_SIZE(720, 350)
- MCFG_SCREEN_VISIBLE_AREA(0, 720 - 1, 0, 350 - 1)
- MCFG_GFXDECODE( cbm700 )
-
- MCFG_DEVICE_REMOVE("crtc")
- MCFG_MC6845_ADD("crtc", MC6845, XTAL_18MHz / 8 /*? I do not know if this is correct, please verify */, cbm700_crtc)
-
- MCFG_VIDEO_START_OVERRIDE(cbmb_state, cbm700 )
-MACHINE_CONFIG_END
-
-
-static MACHINE_CONFIG_DERIVED( cbm700pal, cbm700 )
- MCFG_SCREEN_MODIFY("screen")
- MCFG_SCREEN_REFRESH_RATE(50)
-MACHINE_CONFIG_END
-
-
-static MACHINE_CONFIG_DERIVED( bx256hp, cbm700 )
-
-// MCFG_CPU_ADD("8088", I8088, /* ? */)
-MACHINE_CONFIG_END
-
-
-/*************************************
- *
- * ROM definition(s)
- *
- *************************************/
-
-
-/* Low Profile Series - CBM 600 Series */
-/* chargen: 8x16 chars for 8x8 size; 128 ascii, 128 ascii graphics; inversion logic in hardware */
-
-ROM_START( b500 )
- ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_LOAD( "901243-01.u59", 0xf8000, 0x2000, CRC(22822706) SHA1(901bbf59d8b8682b481be8b2de99b406fffa4bab) )
- ROM_LOAD( "901242-01a.u60", 0xfa000, 0x2000, CRC(ef13d595) SHA1(2fb72985d7d4ab69c5780179178828c931a9f5b0) )
- ROM_LOAD( "901244-01.u61", 0xfe000, 0x2000, CRC(93414213) SHA1(a54a593dbb420ae1ac39b0acde9348160f7840ff) )
-
- ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
-
- ROM_REGION( 0xf5, "pla", 0 )
- ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
-ROM_END
-
-ROM_START( b128 )
- ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_SYSTEM_BIOS( 0, "default", "BASIC 4.0 r" )
- ROMX_LOAD( "901243-04a.u59", 0xf8000, 0x2000, CRC(b0dcb56d) SHA1(08d333208060ee2ce84d4532028d94f71c016b96), ROM_BIOS(1) )
- ROMX_LOAD( "901242-04a.u60", 0xfa000, 0x2000, CRC(de04ea4f) SHA1(7c6de17d46a3343dc597d9b9519cf63037b31908), ROM_BIOS(1) )
- ROMX_LOAD( "901244-04a.u61", 0xfe000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(1) )
- ROM_SYSTEM_BIOS( 1, "older", "BASIC 4.0" )
- ROMX_LOAD( "901243-02b.u59", 0xf8000, 0x2000, CRC(9d0366f9) SHA1(625f7337ea972a8bce2bdf2daababc0ed0b3b69b), ROM_BIOS(2) )
- ROMX_LOAD( "901242-02b.u60", 0xfa000, 0x2000, CRC(837978b5) SHA1(56e8d2f86bf73ba36b3d3cb84dd75806b66c530a), ROM_BIOS(2) )
- ROMX_LOAD( "901244-03b.u61", 0xfe000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(2) )
-
- ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
-
- ROM_REGION( 0xf5, "pla", 0 )
- ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
-ROM_END
-
-ROM_START( b256 )
- ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_LOAD( "901241-03.u59", 0xf8000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
- ROM_LOAD( "901240-03.u60", 0xfa000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
- ROM_SYSTEM_BIOS( 0, "default", "BASIC 4.0 r" )
- ROMX_LOAD( "901244-04a.u61", 0xfe000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(1) )
- ROM_SYSTEM_BIOS( 1, "older", "BASIC 4.0" )
- ROMX_LOAD( "901244-03b.u61", 0xfe000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(2) )
-
- ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "901237-01.u25", 0x0000, 0x1000, CRC(1acf5098) SHA1(e63bf18da48e5a53c99ef127c1ae721333d1d102) )
-
- ROM_REGION( 0xf5, "pla", 0 )
- ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
-ROM_END
-
-
-#define rom_cbm610 rom_b128
-#define rom_cbm620 rom_b256
-
-
-ROM_START( cbm620hu )
- ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_LOAD( "610.u60", 0xf8000, 0x4000, CRC(8eed0d7e) SHA1(9d06c5c3c012204eaaef8b24b1801759b62bf57e) )
- ROM_LOAD( "kernhun.bin", 0xfe000, 0x2000, CRC(0ea8ca4d) SHA1(9977c9f1136ee9c04963e0b50ae0c056efa5663f) )
-
- ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "charhun.bin", 0x0000, 0x2000, CRC(1fb5e596) SHA1(3254e069f8691b30679b19a9505b6afdfedce6ac) )
-
- ROM_REGION( 0xf5, "pla", 0 )
- ROM_LOAD( "906114-04.bin", 0x00, 0xf5, CRC(ae3ec265) SHA1(334e0bc4b2c957ecb240c051d84372f7b47efba3) )
-ROM_END
-
-
-/* High Profile Series - CBM 700 Series */
-/* chargen: 8x16 chars for 9x14 size */
-
-ROM_START( b128hp )
- ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_SYSTEM_BIOS( 0, "default", "BASIC 4.0 r" )
- ROMX_LOAD( "901243-04a.u59", 0xf8000, 0x2000, CRC(b0dcb56d) SHA1(08d333208060ee2ce84d4532028d94f71c016b96), ROM_BIOS(1) )
- ROMX_LOAD( "901242-04a.u60", 0xfa000, 0x2000, CRC(de04ea4f) SHA1(7c6de17d46a3343dc597d9b9519cf63037b31908), ROM_BIOS(1) )
- ROMX_LOAD( "901244-04a.u61", 0xfe000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(1) )
- ROM_SYSTEM_BIOS( 1, "older", "BASIC 4.0" )
- ROMX_LOAD( "901243-02b.u59", 0xf8000, 0x2000, CRC(9d0366f9) SHA1(625f7337ea972a8bce2bdf2daababc0ed0b3b69b), ROM_BIOS(2) )
- ROMX_LOAD( "901242-02b.u60", 0xfa000, 0x2000, CRC(837978b5) SHA1(56e8d2f86bf73ba36b3d3cb84dd75806b66c530a), ROM_BIOS(2) )
- ROMX_LOAD( "901244-03b.u61", 0xfe000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(2) )
-
- ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
-
- ROM_REGION( 0xf5, "pla", 0 )
- ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
-ROM_END
-
-ROM_START( b256hp )
- ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_LOAD( "901241-03.u59", 0xf8000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
- ROM_LOAD( "901240-03.u60", 0xfa000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
- ROM_SYSTEM_BIOS( 0, "default", "BASIC 4.0 r" )
- ROMX_LOAD( "901244-04a.u61", 0xfe000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(1) )
- ROM_SYSTEM_BIOS( 1, "older", "BASIC 4.0" )
- ROMX_LOAD( "901244-03b.u61", 0xfe000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(2) )
-
- ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
-
- ROM_REGION( 0xf5, "pla", 0 )
- ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
-ROM_END
-
-#define rom_cbm710 rom_b128hp
-#define rom_cbm720 rom_b256hp
-
-
-/* BX-256HP - only ROM loading added */
-ROM_START( bx256hp )
- ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_LOAD( "901241-03.u59", 0xf8000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
- ROM_LOAD( "901240-03.u60", 0xfa000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
- ROM_SYSTEM_BIOS( 0, "default", "BASIC 4.0 r" )
- ROMX_LOAD( "901244-04a.u61", 0xfe000, 0x2000, CRC(09a5667e) SHA1(abb26418b9e1614a8f52bdeee0822d4a96071439), ROM_BIOS(1) )
- ROM_SYSTEM_BIOS( 1, "older", "BASIC 4.0" )
- ROMX_LOAD( "901244-03b.u61", 0xfe000, 0x2000, CRC(4276dbba) SHA1(a624899c236bc4458570144d25aaf0b3be08b2cd), ROM_BIOS(2) )
-
- ROM_REGION( 0x1000, "8088", 0)
- ROM_LOAD( "8088.u14", 0x0000, 0x1000, CRC(195e0281) SHA1(ce8acd2a5fb6cbd70d837811d856d656544a1f97) )
-
- ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "901232-01.u25", 0x0000, 0x1000, CRC(3a350bc3) SHA1(e7f3cbc8e282f79a00c3e95d75c8d725ee3c6287) )
-
- ROM_REGION( 0xf5, "pla", 0 )
- ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
-ROM_END
-
-ROM_START( cbm720se )
- ROM_REGION( 0x100000, "maincpu", 0 )
- ROM_LOAD( "901241-03.u59", 0xf8000, 0x2000, CRC(5c1f3347) SHA1(2d46be2cd89594b718cdd0a86d51b6f628343f42) )
- ROM_LOAD( "901240-03.u60", 0xfa000, 0x2000, CRC(72aa44e1) SHA1(0d7f77746290afba8d0abeb87c9caab9a3ad89ce) )
- ROM_LOAD( "swe-901244-03.u61", 0xfe000, 0x2000, CRC(87bc142b) SHA1(fa711f6082741b05a9c80744f5aee68dc8c1dcf4) )
-
- ROM_REGION( 0x2000, "gfx1", 0 )
- ROM_LOAD( "901233-03.u25", 0x0000, 0x1000, CRC(09518b19) SHA1(2e28491e31e2c0a3b6db388055216140a637cd09) )
-
- ROM_REGION( 0xf5, "pla", 0 )
- ROM_LOAD( "906114-05.bin", 0x00, 0xf5, CRC(ff6ba6b6) SHA1(45808c570eb2eda7091c51591b3dbd2db1ac646a) )
-ROM_END
-
-
-/***************************************************************************
-
- Game driver(s)
-
-***************************************************************************/
-
-/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-COMP( 1983, b500, cbm610, 0, cbm600, cbm600, cbmb_state, cbm600, "Commodore Business Machines", "B500 (proto, 60Hz)", GAME_NOT_WORKING )
-COMP( 1983, b128, cbm610, 0, cbm600pal, cbm600pal, cbmb_state, cbm600pal, "Commodore Business Machines", "B128 (60Hz)", GAME_NOT_WORKING )
-COMP( 1983, b256, cbm610, 0, cbm600pal, cbm600pal, cbmb_state, cbm600hu, "Commodore Business Machines", "B256 (60Hz)", GAME_NOT_WORKING )
-COMP( 1983, cbm610, 0, 0, cbm600, cbm600, cbmb_state, cbm600, "Commodore Business Machines", "CBM 610 (50Hz)", GAME_NOT_WORKING )
-COMP( 1983, cbm620, cbm610, 0, cbm600pal, cbm600pal, cbmb_state, cbm600pal, "Commodore Business Machines", "CBM 620 (50Hz)", GAME_NOT_WORKING )
-COMP( 1983, cbm620hu, cbm610, 0, cbm600pal, cbm600pal, cbmb_state, cbm600hu, "Commodore Business Machines", "CBM 620 (Hungary, 50Hz)", GAME_NOT_WORKING )
-
-COMP( 1983, b128hp, cbm610, 0, cbm700, cbm700, cbmb_state, cbm700, "Commodore Business Machines", "B128-80HP (60Hz)", GAME_NOT_WORKING )
-COMP( 1983, b256hp, cbm610, 0, cbm700, cbm700, cbmb_state, cbm700, "Commodore Business Machines", "B256-80HP (60Hz)", GAME_NOT_WORKING )
-COMP( 1983, cbm710, cbm610, 0, cbm700pal, cbm700, cbmb_state, cbm700, "Commodore Business Machines", "CBM 710 (50Hz)", GAME_NOT_WORKING )
-COMP( 1983, cbm720, cbm610, 0, cbm700pal, cbm700, cbmb_state, cbm700, "Commodore Business Machines", "CBM 720 (50Hz)", GAME_NOT_WORKING )
-COMP( 1983, cbm720se, cbm610, 0, cbm700pal, cbm700, cbmb_state, cbm700, "Commodore Business Machines", "CBM 720 (Sweden/Finland, 50Hz)", GAME_NOT_WORKING )
-
-COMP( 1983, bx256hp, cbm610, 0, bx256hp, cbm700, cbmb_state, cbm700, "Commodore Business Machines", "BX256-80HP (60Hz)", GAME_NOT_WORKING )
diff --git a/src/mess/includes/cbm2.h b/src/mess/includes/cbm2.h
index a4349b4cd29..5f50f4bbd43 100644
--- a/src/mess/includes/cbm2.h
+++ b/src/mess/includes/cbm2.h
@@ -19,6 +19,7 @@
#include "machine/vcsctrl.h"
#include "sound/dac.h"
#include "sound/sid6581.h"
+#include "video/mc6845.h"
#include "video/mos6566.h"
#define M6509_TAG "u13"
@@ -26,6 +27,7 @@
#define PLA2_TAG "u88"
#define MOS6567_TAG "u23"
#define MOS6569_TAG "u23"
+#define MC68B45_TAG "u7"
#define MOS6851_TAG "u4"
#define MOS6525_1_TAG "u20"
#define MOS6525_2_TAG "u102"
@@ -35,15 +37,14 @@
#define CONTROL1_TAG "joy1"
#define CONTROL2_TAG "joy2"
-class p500_state : public driver_device
+class cbm2_state : public driver_device
{
public:
- p500_state(const machine_config &mconfig, device_type type, const char *tag)
+ cbm2_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, M6509_TAG),
m_pla1(*this, PLA1_TAG),
- m_pla2(*this, PLA2_TAG),
- m_vic(*this, MOS6569_TAG),
+ m_crtc(*this, MC68B45_TAG),
m_sid(*this, MOS6851_TAG),
m_tpi1(*this, MOS6525_1_TAG),
m_tpi2(*this, MOS6525_2_TAG),
@@ -58,23 +59,18 @@ public:
m_buffer_ram(*this, "buffer_ram"),
m_dramon(1),
m_video_ram(*this, "video_ram"),
- m_color_ram(*this, "color_ram"),
- m_statvid(1),
- m_vicdotsel(1),
- m_vicbnksel(0x03),
m_todclk(0),
- m_vic_irq(CLEAR_LINE),
m_tpi1_irq(CLEAR_LINE),
m_cass_rd(1),
m_user_flag(0),
+ m_user_irq(CLEAR_LINE),
m_tpi2_pa(0),
m_tpi2_pb(0)
{ }
required_device m_maincpu;
required_device m_pla1;
- required_device m_pla2;
- required_device m_vic;
+ optional_device m_crtc;
required_device m_sid;
required_device m_tpi1;
required_device m_tpi2;
@@ -89,24 +85,21 @@ public:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
- virtual void machine_start();
- virtual void machine_reset();
+ DECLARE_MACHINE_START( cbm2 );
+ DECLARE_MACHINE_START( cbm2_ntsc );
+ DECLARE_MACHINE_START( cbm2_pal );
+ DECLARE_MACHINE_RESET( cbm2 );
- void check_interrupts();
- 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,
- int *datxen, int *dramxen, int *clrniben, int *_64kcasen, int *casenb, int *viddaten, int *viddat_tr,
- int *clrnibcs, int *extbufcs, int *discromcs, int *buframcs, int *charomcs, int *viccs, int *vidmatcs,
- int *csbank1, int *csbank2, int *csbank3, int *basiclocs, int *basichics, int *kernalcs,
- int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs, int *aec, int *vsysaden);
- 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);
- 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);
+ void bankswitch(offs_t offset, int busy2, int eras, int ecas, int refen, int cas, int ras, int *sysioen, int *dramen,
+ int *casseg1, int *casseg2, int *casseg3, int *casseg4, int *buframcs, int *extbufcs, int *vidramcs,
+ int *diskromcs, int *csbank1, int *csbank2, int *csbank3, int *basiccs, int *knbcs, int *kernalcs,
+ int *crtccs, int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs);
+
+ UINT8 read_keyboard();
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
- DECLARE_READ8_MEMBER( vic_videoram_r );
- DECLARE_WRITE_LINE_MEMBER( vic_irq_w );
-
DECLARE_READ8_MEMBER( sid_potx_r );
DECLARE_READ8_MEMBER( sid_poty_r );
@@ -120,8 +113,6 @@ public:
DECLARE_WRITE8_MEMBER( tpi2_pa_w );
DECLARE_WRITE8_MEMBER( tpi2_pb_w );
- DECLARE_READ8_MEMBER( tpi2_pc_r );
- DECLARE_WRITE8_MEMBER( tpi2_pc_w );
DECLARE_READ8_MEMBER( cia_pa_r );
DECLARE_WRITE8_MEMBER( cia_pa_w );
@@ -139,17 +130,16 @@ public:
// video state
optional_shared_ptr m_video_ram;
- optional_shared_ptr m_color_ram;
- int m_statvid;
- int m_vicdotsel;
- int m_vicbnksel;
+ size_t m_video_ram_size;
+ int m_graphics;
+ int m_ntsc;
// interrupt state
int m_todclk;
- int m_vic_irq;
int m_tpi1_irq;
int m_cass_rd;
int m_user_flag;
+ int m_user_irq;
// keyboard state;
UINT8 m_tpi2_pa;
@@ -161,4 +151,79 @@ public:
};
+class p500_state : public cbm2_state
+{
+public:
+ p500_state(const machine_config &mconfig, device_type type, const char *tag)
+ : cbm2_state(mconfig, type, tag),
+ m_pla2(*this, PLA2_TAG),
+ m_vic(*this, MOS6569_TAG),
+ m_color_ram(*this, "color_ram"),
+ m_statvid(1),
+ m_vicdotsel(1),
+ m_vicbnksel(0x03),
+ m_vic_irq(CLEAR_LINE)
+ { }
+
+ required_device m_pla2;
+ required_device m_vic;
+
+ DECLARE_MACHINE_START( p500 );
+ DECLARE_MACHINE_RESET( p500 );
+
+ 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,
+ int *datxen, int *dramxen, int *clrniben, int *_64kcasen, int *casenb, int *viddaten, int *viddat_tr,
+ int *clrnibcs, int *extbufcs, int *discromcs, int *buframcs, int *charomcs, int *viccs, int *vidmatcs,
+ int *csbank1, int *csbank2, int *csbank3, int *basiclocs, int *basichics, int *kernalcs,
+ int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs, int *aec, int *vsysaden);
+ 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);
+ 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);
+
+ DECLARE_READ8_MEMBER( read );
+ DECLARE_WRITE8_MEMBER( write );
+
+ DECLARE_READ8_MEMBER( vic_videoram_r );
+ DECLARE_WRITE_LINE_MEMBER( vic_irq_w );
+
+ DECLARE_WRITE_LINE_MEMBER( tpi1_irq_w );
+ DECLARE_WRITE_LINE_MEMBER( tpi1_ca_w );
+ DECLARE_WRITE_LINE_MEMBER( tpi1_cb_w );
+
+ DECLARE_READ8_MEMBER( tpi2_pc_r );
+ DECLARE_WRITE8_MEMBER( tpi2_pc_w );
+
+ // video state
+ optional_shared_ptr m_color_ram;
+ int m_statvid;
+ int m_vicdotsel;
+ int m_vicbnksel;
+
+ // interrupt state
+ int m_vic_irq;
+};
+
+
+class cbm2lp_state : public cbm2_state
+{
+public:
+ cbm2lp_state(const machine_config &mconfig, device_type type, const char *tag)
+ : cbm2_state(mconfig, type, tag)
+ { }
+
+ DECLARE_READ8_MEMBER( tpi2_pc_r );
+};
+
+
+class cbm2hp_state : public cbm2_state
+{
+public:
+ cbm2hp_state(const machine_config &mconfig, device_type type, const char *tag)
+ : cbm2_state(mconfig, type, tag)
+ { }
+
+ DECLARE_READ8_MEMBER( tpi2_pc_r );
+};
+
+
+
#endif
diff --git a/src/mess/includes/cbmb.h b/src/mess/includes/cbmb.h
deleted file mode 100644
index 3d776cb7301..00000000000
--- a/src/mess/includes/cbmb.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*****************************************************************************
- *
- * includes/cbmb.h
- *
- * Commodore B Series Computer
- *
- * peter.trauner@jk.uni-linz.ac.at
- *
- ****************************************************************************/
-
-#ifndef CBMB_H_
-#define CBMB_H_
-
-#include "video/mc6845.h"
-#include "machine/6526cia.h"
-#include "machine/ieee488.h"
-#include "imagedev/cartslot.h"
-
-class cbmb_state : public driver_device
-{
-public:
- cbmb_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_ieee(*this, IEEE488_TAG),
- m_basic(*this, "basic"),
- m_videoram(*this, "videoram"),
- m_kernal(*this, "kernal"),
- m_colorram(*this, "colorram"){ }
-
- required_device m_ieee;
- required_shared_ptr m_basic;
- required_shared_ptr m_videoram;
- required_shared_ptr m_kernal;
- optional_shared_ptr m_colorram;
-
- DECLARE_READ8_MEMBER( vic_lightpen_x_cb );
- DECLARE_READ8_MEMBER( vic_lightpen_y_cb );
- DECLARE_READ8_MEMBER( vic_lightpen_button_cb );
- DECLARE_READ8_MEMBER( vic_dma_read );
- DECLARE_READ8_MEMBER( vic_dma_read_color );
- DECLARE_READ8_MEMBER( vic_rdy_cb );
-
- /* keyboard lines */
- int m_cbmb_keyline_a;
- int m_cbmb_keyline_b;
- int m_cbmb_keyline_c;
-
- int m_p500;
- int m_cbm700;
- int m_cbm_ntsc;
- int m_keyline_a;
- int m_keyline_b;
- int m_keyline_c;
- UINT8 *m_chargen;
- int m_old_level;
- int m_irq_level;
- int m_font;
- DECLARE_WRITE8_MEMBER(cbmb_colorram_w);
- DECLARE_DRIVER_INIT(cbm600);
- DECLARE_DRIVER_INIT(p500);
- DECLARE_DRIVER_INIT(cbm600hu);
- DECLARE_DRIVER_INIT(cbm600pal);
- DECLARE_DRIVER_INIT(cbm700);
- DECLARE_MACHINE_RESET(cbmb);
- DECLARE_VIDEO_START(cbmb_crtc);
- DECLARE_PALETTE_INIT(cbm700);
- DECLARE_VIDEO_START(cbm700);
-};
-
-/*----------- defined in machine/cbmb.c -----------*/
-
-extern const mos6526_interface cbmb_cia;
-
-
-DECLARE_READ8_DEVICE_HANDLER( cbmb_tpi0_port_a_r );
-DECLARE_WRITE8_DEVICE_HANDLER( cbmb_tpi0_port_a_w );
-DECLARE_READ8_DEVICE_HANDLER( cbmb_tpi0_port_b_r );
-DECLARE_WRITE8_DEVICE_HANDLER( cbmb_tpi0_port_b_w );
-
-DECLARE_WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_a );
-DECLARE_WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_b );
-DECLARE_WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_c );
-DECLARE_READ8_DEVICE_HANDLER( cbmb_keyboard_line_a );
-DECLARE_READ8_DEVICE_HANDLER( cbmb_keyboard_line_b );
-DECLARE_READ8_DEVICE_HANDLER( cbmb_keyboard_line_c );
-WRITE_LINE_DEVICE_HANDLER( cbmb_irq );
-
-int cbmb_dma_read(running_machine &machine, int offset);
-int cbmb_dma_read_color(running_machine &machine, int offset);
-
-WRITE_LINE_DEVICE_HANDLER( cbmb_change_font );
-
-
-
-MACHINE_CONFIG_EXTERN( cbmb_cartslot );
-
-
-/*----------- defined in video/cbmb.c -----------*/
-
-
-MC6845_UPDATE_ROW( cbm600_update_row );
-MC6845_UPDATE_ROW( cbm700_update_row );
-WRITE_LINE_DEVICE_HANDLER( cbmb_display_enable_changed );
-
-void cbm600_vh_init(running_machine &machine);
-void cbm700_vh_init(running_machine &machine);
-
-
-void cbmb_vh_set_font(running_machine &machine, int font);
-
-
-#endif /* CBMB_H_ */
diff --git a/src/mess/machine/cbm2exp.c b/src/mess/machine/cbm2exp.c
index 5f301d41235..cc9232ca238 100644
--- a/src/mess/machine/cbm2exp.c
+++ b/src/mess/machine/cbm2exp.c
@@ -157,7 +157,7 @@ UINT8* device_cbm2_expansion_card_interface::cbm2_nvram_pointer(running_machine
//-------------------------------------------------
cbm2_expansion_slot_device::cbm2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
- device_t(mconfig, CBM2_EXPANSION_SLOT, "PET-II expansion port", tag, owner, clock),
+ device_t(mconfig, CBM2_EXPANSION_SLOT, "CBM-II expansion port", tag, owner, clock),
device_slot_interface(mconfig, *this),
device_image_interface(mconfig, *this)
{
diff --git a/src/mess/machine/cbm2exp.h b/src/mess/machine/cbm2exp.h
index bd405b6483a..2ea720ed578 100644
--- a/src/mess/machine/cbm2exp.h
+++ b/src/mess/machine/cbm2exp.h
@@ -46,10 +46,6 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
-#define CBM2_EXPANSION_INTERFACE(_name) \
- const pet_expansion_slot_interface (_name) =
-
-
#define MCFG_CBM2_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot, _def_inp) \
MCFG_DEVICE_ADD(_tag, CBM2_EXPANSION_SLOT, _clock) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
diff --git a/src/mess/machine/cbmb.c b/src/mess/machine/cbmb.c
deleted file mode 100644
index dead30b4a59..00000000000
--- a/src/mess/machine/cbmb.c
+++ /dev/null
@@ -1,503 +0,0 @@
-/***************************************************************************
- commodore b series computer
-
- peter.trauner@jk.uni-linz.ac.at
-***************************************************************************/
-
-#include "emu.h"
-#include "cpu/m6502/m6509.h"
-#include "sound/sid6581.h"
-#include "machine/6525tpi.h"
-#include "machine/6526cia.h"
-#include "machine/ieee488.h"
-
-#include "includes/cbmb.h"
-#include "crsshair.h"
-
-#include "imagedev/cartslot.h"
-
-/* 2008-05 FP: Were these added as a reminder to add configs of
-drivers 8 & 9 as in pet.c ? */
-#define IEEE8ON 0
-#define IEEE9ON 0
-
-#define VERBOSE_LEVEL 0
-#define DBG_LOG( MACHINE, N, M, A ) \
- do { \
- if(VERBOSE_LEVEL >= N) \
- { \
- if( M ) \
- logerror("%11.6f: %-24s", MACHINE.time().as_double(), (char*) M ); \
- logerror A; \
- } \
- } while (0)
-
-static TIMER_CALLBACK( cbmb_frame_interrupt );
-/* keyboard lines */
-
-
-/* tpi at 0xfde00
- in interrupt mode
- irq to m6509 irq
- pa7 ieee nrfd
- pa6 ieee ndac
- pa5 ieee eoi
- pa4 ieee dav
- pa3 ieee atn
- pa2 ieee ren
- pa1 ieee io chips te
- pa0 ieee io chip dc
- pb1 ieee seq
- pb0 ieee ifc
- cb ?
- ca chargen rom address line 12
- i4 acia irq
- i3 ?
- i2 cia6526 irq
- i1 self pb0
- i0 tod (50 or 60 hertz frequency)
- */
-READ8_DEVICE_HANDLER( cbmb_tpi0_port_a_r )
-{
- cbmb_state *state = space.machine().driver_data();
- UINT8 data = 0;
-
- if (state->m_ieee->nrfd_r())
- data |= 0x80;
-
- if (state->m_ieee->ndac_r())
- data |= 0x40;
-
- if (state->m_ieee->eoi_r())
- data |= 0x20;
-
- if (state->m_ieee->dav_r())
- data |= 0x10;
-
- if (state->m_ieee->atn_r())
- data |= 0x08;
-
- if (state->m_ieee->ren_r())
- data |= 0x04;
-
- return data;
-}
-
-WRITE8_DEVICE_HANDLER( cbmb_tpi0_port_a_w )
-{
- cbmb_state *state = space.machine().driver_data();
-
- state->m_ieee->nrfd_w(BIT(data, 7));
- state->m_ieee->ndac_w(BIT(data, 6));
- state->m_ieee->eoi_w(BIT(data, 5));
- state->m_ieee->dav_w(BIT(data, 4));
- state->m_ieee->atn_w(BIT(data, 3));
- state->m_ieee->ren_w(BIT(data, 2));
-}
-
-READ8_DEVICE_HANDLER( cbmb_tpi0_port_b_r )
-{
- cbmb_state *state = space.machine().driver_data();
- UINT8 data = 0;
-
- if (state->m_ieee->srq_r())
- data |= 0x02;
-
- if (state->m_ieee->ifc_r())
- data |= 0x01;
-
- return data;
-}
-
-WRITE8_DEVICE_HANDLER( cbmb_tpi0_port_b_w )
-{
- cbmb_state *state = space.machine().driver_data();
-
- state->m_ieee->srq_w(BIT(data, 1));
- state->m_ieee->ifc_w(BIT(data, 0));
-}
-
-/* tpi at 0xfdf00
- cbm 500
- port c7 video address lines?
- port c6 ?
- cbm 600
- port c7 low
- port c6 ntsc 1, 0 pal
- cbm 700
- port c7 high
- port c6 ?
- port c5 .. c0 keyboard line select
- port a7..a0 b7..b0 keyboard input */
-WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_a )
-{
- cbmb_state *state = space.machine().driver_data();
- state->m_keyline_a = data;
-}
-
-WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_b )
-{
- cbmb_state *state = space.machine().driver_data();
- state->m_keyline_b = data;
-}
-
-WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_c )
-{
- cbmb_state *state = space.machine().driver_data();
- state->m_keyline_c = data;
-}
-
-READ8_DEVICE_HANDLER( cbmb_keyboard_line_a )
-{
- cbmb_state *state = space.machine().driver_data();
- int data = 0;
- if (!(state->m_keyline_c & 0x01))
- data |= space.machine().root_device().ioport("ROW0")->read();
-
- if (!(state->m_keyline_c & 0x02))
- data |= space.machine().root_device().ioport("ROW2")->read();
-
- if (!(state->m_keyline_c & 0x04))
- data |= space.machine().root_device().ioport("ROW4")->read();
-
- if (!(state->m_keyline_c & 0x08))
- data |= space.machine().root_device().ioport("ROW6")->read();
-
- if (!(state->m_keyline_c & 0x10))
- data |= space.machine().root_device().ioport("ROW8")->read();
-
- if (!(state->m_keyline_c & 0x20))
- data |= state->ioport("ROW10")->read();
-
- return data ^0xff;
-}
-
-READ8_DEVICE_HANDLER( cbmb_keyboard_line_b )
-{
- cbmb_state *state = space.machine().driver_data();
- int data = 0;
- if (!(state->m_keyline_c & 0x01))
- data |= space.machine().root_device().ioport("ROW1")->read();
-
- if (!(state->m_keyline_c & 0x02))
- data |= space.machine().root_device().ioport("ROW3")->read();
-
- if (!(state->m_keyline_c & 0x04))
- data |= space.machine().root_device().ioport("ROW5")->read();
-
- if (!(state->m_keyline_c & 0x08))
- data |= space.machine().root_device().ioport("ROW7")->read();
-
- if (!(state->m_keyline_c & 0x10))
- data |= space.machine().root_device().ioport("ROW9")->read() | ((space.machine().root_device().ioport("SPECIAL")->read() & 0x04) ? 1 : 0 );
-
- if (!(state->m_keyline_c & 0x20))
- data |= state->ioport("ROW11")->read();
-
- return data ^0xff;
-}
-
-READ8_DEVICE_HANDLER( cbmb_keyboard_line_c )
-{
- int data = 0;
- cbmb_state *state = space.machine().driver_data();
- if ((space.machine().root_device().ioport("ROW0")->read() & ~state->m_keyline_a) ||
- (space.machine().root_device().ioport("ROW1")->read() & ~state->m_keyline_b))
- data |= 0x01;
-
- if ((space.machine().root_device().ioport("ROW2")->read() & ~state->m_keyline_a) ||
- (space.machine().root_device().ioport("ROW3")->read() & ~state->m_keyline_b))
- data |= 0x02;
-
- if ((space.machine().root_device().ioport("ROW4")->read() & ~state->m_keyline_a) ||
- (space.machine().root_device().ioport("ROW5")->read() & ~state->m_keyline_b))
- data |= 0x04;
-
- if ((space.machine().root_device().ioport("ROW6")->read() & ~state->m_keyline_a) ||
- (space.machine().root_device().ioport("ROW7")->read() & ~state->m_keyline_b))
- data |= 0x08;
-
- if ((space.machine().root_device().ioport("ROW8")->read() & ~state->m_keyline_a) ||
- ((space.machine().root_device().ioport("ROW9")->read() | ((space.machine().root_device().ioport("SPECIAL")->read() & 0x04) ? 1 : 0)) & ~state->m_keyline_b))
- data |= 0x10;
-
- if ((space.machine().root_device().ioport("ROW10")->read() & ~state->m_keyline_a) ||
- (state->ioport("ROW11")->read() & ~state->m_keyline_b))
- data |= 0x20;
-
- if (!state->m_p500)
- {
- if (!state->m_cbm_ntsc)
- data |= 0x40;
-
- if (!state->m_cbm700)
- data |= 0x80;
- }
- return data ^0xff;
-}
-
-WRITE_LINE_DEVICE_HANDLER( cbmb_irq )
-{
- cbmb_state *driver_state = device->machine().driver_data();
- if (state != driver_state->m_old_level)
- {
- DBG_LOG(device->machine(), 3, "mos6509", ("irq %s\n", state ? "start" : "end"));
- device->machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, state);
- driver_state->m_old_level = state;
- }
-}
-
-/*
- port a ieee in/out
- pa7 trigger gameport 2
- pa6 trigger gameport 1
- pa1 ?
- pa0 ?
- pb7 .. 4 gameport 2
- pb3 .. 0 gameport 1
- */
-
-const mos6526_interface cbmb_cia =
-{
- DEVCB_DEVICE_LINE("tpi6525_0", tpi6525_i2_w),
- DEVCB_NULL, /* pc_func */
- DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_r),
- DEVCB_DEVICE_MEMBER(IEEE488_TAG, ieee488_device, dio_w),
- DEVCB_NULL,
- DEVCB_NULL
-};
-
-WRITE8_MEMBER(cbmb_state::cbmb_colorram_w)
-{
- m_colorram[offset] = data | 0xf0;
-}
-
-WRITE_LINE_DEVICE_HANDLER( cbmb_change_font )
-{
- cbmb_vh_set_font(device->machine(), state);
-}
-
-static void cbmb_common_driver_init( running_machine &machine )
-{
- cbmb_state *state = machine.driver_data();
- state->m_chargen = state->memregion("maincpu")->base() + 0x100000;
- /* memset(c64_memory, 0, 0xfd00); */
-
- machine.scheduler().timer_pulse(attotime::from_msec(10), FUNC(cbmb_frame_interrupt));
-
- state->m_p500 = 0;
- state->m_cbm700 = 0;
-}
-
-DRIVER_INIT_MEMBER(cbmb_state,cbm600)
-{
- cbmb_common_driver_init(machine());
- m_cbm_ntsc = 1;
- cbm600_vh_init(machine());
-}
-
-DRIVER_INIT_MEMBER(cbmb_state,cbm600pal)
-{
- cbmb_common_driver_init(machine());
- m_cbm_ntsc = 0;
- cbm600_vh_init(machine());
-}
-
-DRIVER_INIT_MEMBER(cbmb_state,cbm600hu)
-{
- cbmb_common_driver_init(machine());
- m_cbm_ntsc = 0;
-}
-
-DRIVER_INIT_MEMBER(cbmb_state,cbm700)
-{
- cbmb_common_driver_init(machine());
- m_cbm700 = 1;
- m_cbm_ntsc = 0;
- cbm700_vh_init(machine());
-}
-
-DRIVER_INIT_MEMBER(cbmb_state,p500)
-{
- cbmb_common_driver_init(machine());
- m_p500 = 1;
- m_cbm_ntsc = 1;
-}
-
-MACHINE_RESET_MEMBER(cbmb_state,cbmb)
-{
-//removed cbm_drive_0_config (IEEE8ON ? IEEE : 0, 8);
-//removed cbm_drive_1_config (IEEE9ON ? IEEE : 0, 9);
-}
-
-
-static TIMER_CALLBACK( p500_lightpen_tick )
-{
- if ((machine.root_device().ioport("CTRLSEL")->read_safe(0x00) & 0x07) == 0x04)
- {
- /* enable lightpen crosshair */
- crosshair_set_screen(machine, 0, CROSSHAIR_SCREEN_ALL);
- }
- else
- {
- /* disable lightpen crosshair */
- crosshair_set_screen(machine, 0, CROSSHAIR_SCREEN_NONE);
- }
-}
-
-static TIMER_CALLBACK(cbmb_frame_interrupt)
-{
- cbmb_state *state = machine.driver_data();
- device_t *tpi_0 = machine.device("tpi6525_0");
-
-#if 0
- int controller1 = machine.root_device().ioport("CTRLSEL")->read() & 0x07;
- int controller2 = machine.root_device().ioport("CTRLSEL")->read() & 0x70;
-#endif
-
- tpi6525_i0_w(tpi_0, state->m_irq_level);
- state->m_irq_level = !state->m_irq_level;
- if (state->m_irq_level) return ;
-
-#if 0
- value = 0xff;
- switch (controller1)
- {
- case 0x00:
- value &= ~machine.root_device().ioport("JOY1_1B")->read(); /* Joy1 Directions + Button 1 */
- break;
-
- case 0x01:
- if (machine.root_device().ioport("OTHER")->read() & 0x40) /* Paddle2 Button */
- value &= ~0x08;
- if (machine.root_device().ioport("OTHER")->read() & 0x80) /* Paddle1 Button */
- value &= ~0x04;
- break;
-
- case 0x02:
- if (machine.root_device().ioport("OTHER")->read() & 0x02) /* Mouse Button Left */
- value &= ~0x10;
- if (machine.root_device().ioport("OTHER")->read() & 0x01) /* Mouse Button Right */
- value &= ~0x01;
- break;
-
- case 0x03:
- value &= ~(machine.root_device().ioport("JOY1_2B")->read() & 0x1f); /* Joy1 Directions + Button 1 */
- break;
-
- case 0x04:
-/* was there any input on the lightpen? where is it mapped? */
-// if (machine.root_device().ioport("OTHER")->read() & 0x04) /* Lightpen Signal */
-// value &= ?? ;
- break;
-
- case 0x07:
- break;
-
- default:
- logerror("Invalid Controller 1 Setting %d\n", controller1);
- break;
- }
-
- c64_keyline[8] = value;
-
-
- value = 0xff;
- switch (controller2)
- {
- case 0x00:
- value &= ~machine.root_device().ioport("JOY2_1B")->read(); /* Joy2 Directions + Button 1 */
- break;
-
- case 0x10:
- if (machine.root_device().ioport("OTHER")->read() & 0x10) /* Paddle4 Button */
- value &= ~0x08;
- if (machine.root_device().ioport("OTHER")->read() & 0x20) /* Paddle3 Button */
- value &= ~0x04;
- break;
-
- case 0x20:
- if (machine.root_device().ioport("OTHER")->read() & 0x02) /* Mouse Button Left */
- value &= ~0x10;
- if (machine.root_device().ioport("OTHER")->read() & 0x01) /* Mouse Button Right */
- value &= ~0x01;
- break;
-
- case 0x30:
- value &= ~(machine.root_device().ioport("JOY2_2B")->read() & 0x1f); /* Joy2 Directions + Button 1 */
- break;
-
- case 0x40:
-/* was there any input on the lightpen? where is it mapped? */
-// if (machine.root_device().ioport("OTHER")->read() & 0x04) /* Lightpen Signal */
-// value &= ?? ;
- break;
-
- case 0x70:
- break;
-
- default:
- logerror("Invalid Controller 2 Setting %d\n", controller2);
- break;
- }
-
- c64_keyline[9] = value;
-#endif
-
-// 128u4 FIXME
-// vic2_frame_interrupt (device);
-
- /* for p500, check if lightpen has been chosen as input: if so, enable crosshair (but c64-like inputs for p500 are not working atm) */
- machine.scheduler().timer_set(attotime::zero, FUNC(p500_lightpen_tick));
-
- set_led_status(machine, 1, machine.root_device().ioport("SPECIAL")->read() & 0x04 ? 1 : 0); /* Shift Lock */
-}
-
-
-/***********************************************
-
- CBM Business Computers Cartridges
-
-***********************************************/
-
-static DEVICE_IMAGE_LOAD(cbmb_cart)
-{
- UINT32 size = image.length();
- const char *filetype = image.filetype();
- UINT8 *cbmb_memory = image.device().machine().root_device().memregion("maincpu")->base();
- int address = 0;
-
- /* Assign loading address according to extension */
- if (!mame_stricmp(filetype, "10"))
- address = 0x1000;
-
- else if (!mame_stricmp(filetype, "20"))
- address = 0x2000;
-
- else if (!mame_stricmp(filetype, "40"))
- address = 0x4000;
-
- else if (!mame_stricmp(filetype, "60"))
- address = 0x6000;
-
- logerror("Loading cart %s at %.4x size:%.4x\n", image.filename(), address, size);
-
- image.fread(cbmb_memory + 0xf0000 + address, size);
-
- return IMAGE_INIT_PASS;
-}
-
-
-MACHINE_CONFIG_FRAGMENT(cbmb_cartslot)
- MCFG_CARTSLOT_ADD("cart1")
- MCFG_CARTSLOT_EXTENSION_LIST("10,20,40,60")
- MCFG_CARTSLOT_NOT_MANDATORY
- MCFG_CARTSLOT_LOAD(cbmb_cart)
-
- MCFG_CARTSLOT_ADD("cart2")
- MCFG_CARTSLOT_EXTENSION_LIST("10,20,40,60")
- MCFG_CARTSLOT_NOT_MANDATORY
- MCFG_CARTSLOT_LOAD(cbmb_cart)
-MACHINE_CONFIG_END
diff --git a/src/mess/mess.lst b/src/mess/mess.lst
index 2a735a78452..03ce52f7d7f 100644
--- a/src/mess/mess.lst
+++ b/src/mess/mess.lst
@@ -618,7 +618,8 @@ b256hp // Commodore B256HP
bx256hp // Commodore BX256HP
cbm710 // Commodore CBM 710
cbm720 // Commodore CBM 720
-cbm720se // Commodore CBM 720 (Sweden / Finland)
+cbm720sw // Commodore CBM 720 (Sweden / Finland)
+cbm730
p500 // Commodore P500 (proto, a.k.a. C128-40, PET-II)
c264
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index 22da54b02e6..1e25ba3aba3 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -885,9 +885,6 @@ $(MESSOBJ)/cbm.a: \
$(MESS_MACHINE)/diag264_lb_iec.o \
$(MESS_MACHINE)/diag264_lb_tape.o \
$(MESS_MACHINE)/diag264_lb_user.o \
- $(MESS_DRIVERS)/cbmb.o \
- $(MESS_MACHINE)/cbmb.o \
- $(MESS_VIDEO)/cbmb.o \
$(MESS_DRIVERS)/cbm2.o \
$(MESS_MACHINE)/cbm2exp.o \
$(MESS_MACHINE)/cbm2_std.o \
diff --git a/src/mess/video/cbmb.c b/src/mess/video/cbmb.c
deleted file mode 100644
index ccece9bcd56..00000000000
--- a/src/mess/video/cbmb.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/***************************************************************************
-
- PeT mess@utanet.at
-
-***************************************************************************/
-
-#include "emu.h"
-#include "includes/cbmb.h"
-#include "video/mc6845.h"
-
-
-
-VIDEO_START_MEMBER(cbmb_state,cbmb_crtc)
-{
-}
-
-void cbm600_vh_init(running_machine &machine)
-{
- UINT8 *gfx = machine.root_device().memregion("gfx1")->base();
- int i;
-
- /* inversion logic on board */
- for (i=0; i<0x800; i++) {
- gfx[0x1000+i]=gfx[0x800+i];
- gfx[0x1800+i]=gfx[0x1000+i]^0xff;
- gfx[0x800+i]=gfx[i]^0xff;
- }
-}
-
-void cbm700_vh_init(running_machine &machine)
-{
- UINT8 *gfx = machine.root_device().memregion("gfx1")->base();
- int i;
- for (i=0; i<0x800; i++) {
- gfx[0x1000+i]=gfx[0x800+i];
- gfx[0x1800+i]=gfx[0x1000+i]^0xff;
- gfx[0x800+i]=gfx[i]^0xff;
- }
-}
-
-VIDEO_START_MEMBER(cbmb_state,cbm700)
-{
- int i;
-
- /* remove pixel column 9 for character codes 0 - 175 and 224 - 255 */
- for( i = 0; i < 256; i++)
- {
-// if( i < 176 || i > 223 )
- {
- int y;
- for( y = 0; y < machine().gfx[0]->height(); y++ ) {
- *const_cast(machine().gfx[0]->get_data(i) + y * machine().gfx[0]->rowbytes() + 8) = 0;
- *const_cast(machine().gfx[1]->get_data(i) + y * machine().gfx[1]->rowbytes() + 8) = 0;
- }
- }
- }
-}
-
-void cbmb_vh_set_font(running_machine &machine, int font)
-{
- cbmb_state *state = machine.driver_data();
- state->m_font=font;
-}
-
-MC6845_UPDATE_ROW( cbm600_update_row )
-{
- cbmb_state *state = device->machine().driver_data();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
- UINT8 *videoram = state->m_videoram;
- int i;
-
- for( i = 0; i < x_count; i++ ) {
- if ( i == cursor_x ) {
- bitmap.plot_box( device->machine().gfx[state->m_font]->width() * i, y, device->machine().gfx[state->m_font]->width(), 1, palette[1] );
- } else {
- 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 );
- }
- }
-}
-
-MC6845_UPDATE_ROW( cbm700_update_row )
-{
- cbmb_state *state = device->machine().driver_data();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
- UINT8 *videoram = state->m_videoram;
- int i;
-
- for( i = 0; i < x_count; i++ ) {
- if ( i == cursor_x ) {
- bitmap.plot_box( device->machine().gfx[state->m_font]->width() * i, y, device->machine().gfx[state->m_font]->width(), 1, palette[1] );
- } else {
- 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 );
- }
- }
-}
-
-WRITE_LINE_DEVICE_HANDLER( cbmb_display_enable_changed )
-{
-}
-