diff options
Diffstat (limited to 'src/mess/drivers/cbmb.c')
-rw-r--r-- | src/mess/drivers/cbmb.c | 720 |
1 files changed, 720 insertions, 0 deletions
diff --git a/src/mess/drivers/cbmb.c b/src/mess/drivers/cbmb.c new file mode 100644 index 00000000000..7244a0d05de --- /dev/null +++ b/src/mess/drivers/cbmb.c @@ -0,0 +1,720 @@ +/*************************************************************************** + 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/vic6567.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_LEGACY("sid6581", sid6581_r, sid6581_w) + /* 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 + +static ADDRESS_MAP_START(p500_mem , AS_PROGRAM, 8, cbmb_state ) + AM_RANGE(0x00000, 0x1ffff) AM_RAM + AM_RANGE(0x20000, 0x2ffff) AM_READONLY AM_WRITENOP + AM_RANGE(0x30000, 0x7ffff) AM_RAM + AM_RANGE(0x80000, 0x8ffff) AM_READONLY AM_WRITENOP + AM_RANGE(0x90000, 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, 0xfd3ff) AM_RAM AM_SHARE("videoram") /* videoram */ + AM_RANGE(0xfd400, 0xfd7ff) AM_RAM_WRITE(cbmb_colorram_w) AM_SHARE("colorram") /* colorram */ + AM_RANGE(0xfd800, 0xfd8ff) AM_DEVREADWRITE_LEGACY("vic6567", vic2_port_r, vic2_port_w) + /* disk units */ + AM_RANGE(0xfda00, 0xfdaff) AM_DEVREADWRITE_LEGACY("sid6581", sid6581_r, sid6581_w) + /* 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 + +static PALETTE_INIT( 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 +}; + +/* p500 uses a VIC II chip */ + +static const unsigned char p500_palette[] = +{ +/* black, white, red, cyan */ +/* purple, green, blue, yellow */ +/* orange, brown, light red, dark gray, */ +/* medium gray, light green, light blue, light gray */ +/* taken from the vice emulator */ + 0x00, 0x00, 0x00, 0xfd, 0xfe, 0xfc, 0xbe, 0x1a, 0x24, 0x30, 0xe6, 0xc6, + 0xb4, 0x1a, 0xe2, 0x1f, 0xd2, 0x1e, 0x21, 0x1b, 0xae, 0xdf, 0xf6, 0x0a, + 0xb8, 0x41, 0x04, 0x6a, 0x33, 0x04, 0xfe, 0x4a, 0x57, 0x42, 0x45, 0x40, + 0x70, 0x74, 0x6f, 0x59, 0xfe, 0x59, 0x5f, 0x53, 0xfe, 0xa4, 0xa7, 0xa2 +}; + +static PALETTE_INIT( p500 ) +{ + int i; + + for (i = 0; i < sizeof(p500_palette) / 3; i++) + { + palette_set_color_rgb(machine, i, p500_palette[i * 3], p500_palette[i * 3 + 1], p500_palette[i * 3 + 2]); + } +} + +static SCREEN_UPDATE_IND16( p500 ) +{ + device_t *vic2 = screen.machine().device("vic6567"); + + vic2_video_update(vic2, bitmap, cliprect); + return 0; +} + +READ8_MEMBER( cbmb_state::vic_lightpen_x_cb ) +{ + return ioport("LIGHTX")->read() & ~0x01; +} + +READ8_MEMBER( cbmb_state::vic_lightpen_y_cb ) +{ + return ioport("LIGHTY")->read() & ~0x01; +} + +READ8_MEMBER( cbmb_state::vic_lightpen_button_cb ) +{ + return ioport("OTHER")->read() & 0x04; +} + +READ8_MEMBER( cbmb_state::vic_dma_read ) +{ + if (offset >= 0x1000) + return m_videoram[offset & 0x3ff]; + else + return m_chargen[offset & 0xfff]; +} + +READ8_MEMBER( cbmb_state::vic_dma_read_color ) +{ + return m_colorram[offset & 0x3ff]; +} + +READ8_MEMBER( cbmb_state::vic_rdy_cb ) +{ + return ioport("CTRLSEL")->read() & 0x08; +} + + +static const vic2_interface p500_vic2_intf = { + "screen", + "maincpu", + VIC6567, + DEVCB_DRIVER_MEMBER(cbmb_state, vic_lightpen_x_cb), + DEVCB_DRIVER_MEMBER(cbmb_state, vic_lightpen_y_cb), + DEVCB_DRIVER_MEMBER(cbmb_state, vic_lightpen_button_cb), + DEVCB_DRIVER_MEMBER(cbmb_state, vic_dma_read), + DEVCB_DRIVER_MEMBER(cbmb_state, vic_dma_read_color), + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(cbmb_state, vic_rdy_cb) +}; + +/************************************* + * + * 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( 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( cbm700 ) + + MCFG_MC6845_ADD("crtc", MC6845, XTAL_18MHz / 8 /*?*/ /* I do not know if this is correct, please verify */, cbm600_crtc) + + MCFG_VIDEO_START( cbmb_crtc ) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("sid6581", SID6581, 1000000) + 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, 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( 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 + + +static MACHINE_CONFIG_START( p500, cbmb_state ) + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M6509, VIC6567_CLOCK) /* 7.8336 MHz */ + MCFG_CPU_PROGRAM_MAP(p500_mem) + //MCFG_CPU_PERIODIC_INT(vic2_raster_irq, VIC6567_HRETRACERATE) + + MCFG_MACHINE_RESET( cbmb ) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_SIZE(VIC6567_COLUMNS, VIC6567_LINES) + MCFG_SCREEN_VISIBLE_AREA(0, VIC6567_VISIBLECOLUMNS - 1, 0, VIC6567_VISIBLELINES - 1) + MCFG_SCREEN_REFRESH_RATE(VIC6567_VRETRACERATE) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ + MCFG_SCREEN_UPDATE_STATIC( p500 ) + + MCFG_PALETTE_INIT( p500 ) + MCFG_PALETTE_LENGTH(ARRAY_LENGTH(p500_palette) / 3) + + MCFG_VIC2_ADD("vic6567", p500_vic2_intf) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("sid6581", SID6581, 1000000) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + + /* devices */ + MCFG_QUICKLOAD_ADD("quickload", p500, "p00,prg", CBM_QUICKLOAD_DELAY_SECONDS) + + /* cia */ + MCFG_MOS6526R1_ADD("cia", VIC6567_CLOCK, 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 + + + +/************************************* + * + * 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_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_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_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_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_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_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_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_END + +ROM_START( p500 ) + ROM_REGION( 0x101000, "maincpu", 0 ) + ROM_SYSTEM_BIOS(0, "default", "BASIC 4.0 new" ) + ROMX_LOAD( "901236-02.bin", 0xf8000, 0x2000, CRC(c62ab16f) SHA1(f50240407bade901144f7e9f489fa9c607834eca), ROM_BIOS(1) ) + ROMX_LOAD( "901235-02.bin", 0xfa000, 0x2000, CRC(20b7df33) SHA1(1b9a55f12f8cf025754d8029cc5324b474c35841), ROM_BIOS(1) ) + ROMX_LOAD( "901234-02.bin", 0xfe000, 0x2000, CRC(f46bbd2b) SHA1(097197d4d08e0b82e0466a5f1fbd49a24f3d2523), ROM_BIOS(1) ) + ROM_SYSTEM_BIOS(1, "old", "BASIC 4.0 old" ) + ROMX_LOAD( "901236-01.bin", 0xf8000, 0x2000, CRC(33eb6aa2) SHA1(7e3497ae2edbb38c753bd31ed1bf3ae798c9a976), ROM_BIOS(2) ) + ROMX_LOAD( "901235-01.bin", 0xfa000, 0x2000, CRC(18a27feb) SHA1(951b5370dd7db762b8504a141f9f26de345069bb), ROM_BIOS(2) ) + ROMX_LOAD( "901234-01.bin", 0xfe000, 0x2000, CRC(67962025) SHA1(24b41b65c85bf30ab4e2911f677ce9843845b3b1), ROM_BIOS(2) ) + + ROM_LOAD( "901225-01.bin", 0x100000, 0x1000, CRC(ec4272ee) SHA1(adc7c31e18c7c7413d54802ef2f4193da14711aa) ) +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 ) + +COMP( 1983, p500, 0, 0, p500, p500, cbmb_state, p500, "Commodore Business Machines", "P500 (proto, a.k.a. B128-40 or Pet-II)", GAME_NOT_WORKING ) |