(MESS) cbm2: Rewrote the rest of the CBM-II model line. [Curt Coder]

This commit is contained in:
Curt Coder 2012-09-21 13:22:49 +00:00
parent 1c58913d46
commit 57c76989e3
13 changed files with 1223 additions and 1466 deletions

6
.gitattributes vendored
View File

@ -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

79
hash/cbm2_cart.xml Normal file
View File

@ -0,0 +1,79 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="cbm2_cart" description="Commodore CBM-II cartridges">
<software name="calcresu">
<description>Calc Result</description>
<year>198?</year>
<publisher>Handic Software</publisher>
<part name="cart" interface="cbm2_cart">
<dataarea name="bank1" size="0x2000">
<rom name="calc_result-bx700.bin" size="0x2000" crc="4775ebb3" sha1="5c6928a9cd8a3ce6a1d11221292b832295d6543e" offset="0" />
</dataarea>
</part>
<part name="flop" interface="floppy_5_25">
<dataarea name="flop" size="1070662">
<rom name="calc_result_700_bx_single_version_v1.0.d82" size="1070662" crc="244a2122" sha1="44661ed8e3307bb967f97ce1f5a247ca3cded0b3" offset="0" />
</dataarea>
</part>
</software>
<software name="profitxt">
<description>ProfiText</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cart" interface="cbm2_cart">
<dataarea name="bank1" size="0x2000">
<rom name="profitext.bin" size="0x2000" crc="ac622a2b" sha1="a02fcd187b7493a08379bbaef3d4296a083d30c8" offset="0" />
</dataarea>
</part>
</software>
<software name="demo1">
<description>Demo 1</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cart" interface="cbm2_cart">
<dataarea name="bank1" size="0x2000">
<rom name="cbm610-cart1-red-left.bin" size="0x2000" crc="be426f3d" sha1="da6f1099fd09165f8ee454e2e517cfc523deb8b7" offset="0" />
</dataarea>
<dataarea name="bank2" size="0x2000">
<rom name="cbm610-cart1-blue-right.bin" size="0x2000" crc="61a5008b" sha1="02db07ca68631aefb69e5db41fada27486263c69" offset="0" />
</dataarea>
</part>
</software>
<software name="demo2">
<description>Demo 2</description>
<year>198?</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cart" interface="cbm2_cart">
<dataarea name="bank1" size="0x2000">
<rom name="cbm610-cart2-white-left.bin" size="0x2000" crc="aeb6881c" sha1="4bdabbd7d6d642f916b5a91155396c98fce591a3" offset="0" />
</dataarea>
<dataarea name="bank2" size="0x2000">
<rom name="cbm610-cart2-green-right.bin" size="0x2000" crc="61a5008b" sha1="02db07ca68631aefb69e5db41fada27486263c69" offset="0" />
</dataarea>
</part>
</software>
<software name="moni610">
<description>Moni610</description>
<year>2008</year>
<publisher>Ullrich von Bassewitz</publisher>
<part name="cart" interface="cbm2_cart">
<dataarea name="bank1" size="0x2000">
<rom name="moni.bin" size="0x2000" crc="43b08d1f" sha1="9c0c24907e85674348dd58e81e6da64e157e9d0f" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -1,26 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
NOTE: This list is here only to document available dumps and it's not used (yet) by MESS!
-->
<softwarelist name="cbm700_cart" description="Commodore 700 cartridges">
<software name="calcresu" supported="no">
<description>Calc Result</description>
<year>198?</year>
<publisher>Handic Software</publisher>
<part name="cart" interface="cbm2_cart">
<dataarea name="bank1" size="0x2000">
<rom name="calc_result-bx700.bin" size="0x2000" crc="4775ebb3" sha1="5c6928a9cd8a3ce6a1d11221292b832295d6543e" offset="0x0000" />
</dataarea>
</part>
<part name="flop" interface="floppy_5_25">
<dataarea name="flop" size="1070662">
<rom name="calc_result_700_bx_single_version_v1.0.d82" size="1070662" crc="244a2122" sha1="44661ed8e3307bb967f97ce1f5a247ca3cded0b3" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

File diff suppressed because it is too large Load Diff

View File

@ -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 )

View File

@ -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<cpu_device> m_maincpu;
required_device<pls100_device> m_pla1;
required_device<pls100_device> m_pla2;
required_device<mos6566_device> m_vic;
optional_device<mc6845_device> m_crtc;
required_device<sid6581_device> m_sid;
required_device<tpi6525_device> m_tpi1;
required_device<tpi6525_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<UINT8> m_video_ram;
optional_shared_ptr<UINT8> 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<pls100_device> m_pla2;
required_device<mos6566_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<UINT8> 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

View File

@ -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<ieee488_device> m_ieee;
required_shared_ptr<UINT8> m_basic;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_kernal;
optional_shared_ptr<UINT8> 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_ */

View File

@ -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)
{

View File

@ -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)

View File

@ -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<cbmb_state>();
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<cbmb_state>();
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<cbmb_state>();
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<cbmb_state>();
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<cbmb_state>();
state->m_keyline_a = data;
}
WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_b )
{
cbmb_state *state = space.machine().driver_data<cbmb_state>();
state->m_keyline_b = data;
}
WRITE8_DEVICE_HANDLER( cbmb_keyboard_line_select_c )
{
cbmb_state *state = space.machine().driver_data<cbmb_state>();
state->m_keyline_c = data;
}
READ8_DEVICE_HANDLER( cbmb_keyboard_line_a )
{
cbmb_state *state = space.machine().driver_data<cbmb_state>();
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<cbmb_state>();
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<cbmb_state>();
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<cbmb_state>();
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<cbmb_state>();
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<cbmb_state>();
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

View File

@ -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

View File

@ -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 \

View File

@ -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<UINT8 *>(machine().gfx[0]->get_data(i) + y * machine().gfx[0]->rowbytes() + 8) = 0;
*const_cast<UINT8 *>(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<cbmb_state>();
state->m_font=font;
}
MC6845_UPDATE_ROW( cbm600_update_row )
{
cbmb_state *state = device->machine().driver_data<cbmb_state>();
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<cbmb_state>();
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 )
{
}