From 57c76989e30137150b9f6c5ac3616dfc102c8033 Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Fri, 21 Sep 2012 13:22:49 +0000 Subject: [PATCH] (MESS) cbm2: Rewrote the rest of the CBM-II model line. [Curt Coder] --- .gitattributes | 6 +- hash/cbm2_cart.xml | 79 +++ hash/cbm700_cart.xml | 26 - src/mess/drivers/cbm2.c | 1139 +++++++++++++++++++++++++++++++++--- src/mess/drivers/cbmb.c | 585 ------------------ src/mess/includes/cbm2.h | 127 +++- src/mess/includes/cbmb.h | 112 ---- src/mess/machine/cbm2exp.c | 2 +- src/mess/machine/cbm2exp.h | 4 - src/mess/machine/cbmb.c | 503 ---------------- src/mess/mess.lst | 3 +- src/mess/mess.mak | 3 - src/mess/video/cbmb.c | 100 ---- 13 files changed, 1223 insertions(+), 1466 deletions(-) create mode 100644 hash/cbm2_cart.xml delete mode 100644 hash/cbm700_cart.xml delete mode 100644 src/mess/drivers/cbmb.c delete mode 100644 src/mess/includes/cbmb.h delete mode 100644 src/mess/machine/cbmb.c delete mode 100644 src/mess/video/cbmb.c 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 ) -{ -} -