mirror of
https://github.com/holub/mame
synced 2025-10-04 08:28:39 +03:00
(MESS) cbm2: Rewrote the rest of the CBM-II model line. [Curt Coder]
This commit is contained in:
parent
1c58913d46
commit
57c76989e3
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -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
79
hash/cbm2_cart.xml
Normal 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><unknown></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><unknown></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><unknown></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>
|
@ -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
@ -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 )
|
@ -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
|
||||
|
@ -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_ */
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
|
@ -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
|
@ -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
|
||||
|
@ -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 \
|
||||
|
@ -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 )
|
||||
{
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user