summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-11-01 21:23:39 -0400
committer AJR <ajrhacker@users.noreply.github.com>2017-11-01 21:23:42 -0400
commitbc1c5622d4d4f0b8edd6b4bc18f5da617d433efd (patch)
tree3581364928e11dcfce59c29ecf3ccbc36ae326ff
parent476c01e6f04d4f86824047cafd86af91aecb8627 (diff)
cd2650: Add proper XTAL frequency, MCFG_SCREEN_RAW_PARAMS and some info (nw)
-rw-r--r--src/emu/drivers/xtal.h1
-rw-r--r--src/mame/drivers/cd2650.cpp46
2 files changed, 32 insertions, 15 deletions
diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h
index 8729e8e7ec3..8890811766c 100644
--- a/src/emu/drivers/xtal.h
+++ b/src/emu/drivers/xtal.h
@@ -151,6 +151,7 @@ enum
XTAL_13_5168MHz = 13516800, /* Kontron KDT6 */
XTAL_14MHz = 14000000,
XTAL_14_112MHz = 14112000, /* Timex/Sinclair TS2068 */
+ XTAL_14_192640MHz = 14192640, /* Reported by Central Data 2650 document, true xtal unchecked on PCB */
XTAL_14_3MHz = 14300000, /* Agat-7 */
XTAL_14_314MHz = 14314000, /* Taito TTL Board */
XTAL_14_31818MHz = 14318181, /* Extremely common, used on 100's of PCBs (4x NTSC subcarrier) */
diff --git a/src/mame/drivers/cd2650.cpp b/src/mame/drivers/cd2650.cpp
index 81ccfd40c71..14c48c42c2b 100644
--- a/src/mame/drivers/cd2650.cpp
+++ b/src/mame/drivers/cd2650.cpp
@@ -2,11 +2,25 @@
// copyright-holders:Robbbert
/***************************************************************************
-Central Data cd2650
+Central Data 2650 Computer System
2010-04-08 Skeleton driver.
-No info available on this computer apart from a few newsletters.
+No info available on this computer apart from a few newsletters and
+magazine articles. The computer was described in a series of articles
+published between April and June 1977 in Radio-Electronics, which include
+supposedly complete schematics and fairly detailed subsystem descriptions.
+
+All signals to and from the 2650 board (including the built-in 300 baud
+Kansas City standard cassette tape interface) are passed through six ribbon
+cables. Central Data later produced an “extender board” that adapted the
+bus signals to a S-100 backplane. This interface was missing a considerable
+number of standard S-100 timing signals, though it was compatible at least
+with some dynamic RAM boards released by the company.
+
+The unusual XTAL frequency seems deliberately chosen to produce a vertical
+sync rate of exactly 60 Hz.
+
The system only uses 1000-14FF for videoram and 17F0-17FF for
scratch ram. All other ram is optional.
@@ -23,11 +37,15 @@ V Verify?
Press Esc to exit most commands.
TODO
-- Lots, probably. The computer is a complete mystery. No manuals or schematics exist.
+- Lots, probably. The computer is a complete mystery. No manuals are known to exist.
- Cassette doesn't work.
****************************************************************************/
+#define CHARACTER_WIDTH 8
+#define CHARACTER_HEIGHT 8
+#define CHARACTER_LINES 12
+
#include "emu.h"
#include "cpu/s2650/s2650.h"
//#include "bus/s100/s100.h"
@@ -96,8 +114,8 @@ READ8_MEMBER( cd2650_state::keyin_r )
static ADDRESS_MAP_START(cd2650_mem, AS_PROGRAM, 8, cd2650_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE( 0x0000, 0x03ff) AM_ROM AM_REGION("roms", 0)
- AM_RANGE( 0x1000, 0x7fff) AM_RAM AM_SHARE("videoram")
+ AM_RANGE(0x0000, 0x0fff) AM_ROM AM_REGION("roms", 0)
+ AM_RANGE(0x1000, 0x7fff) AM_RAM AM_SHARE("videoram")
ADDRESS_MAP_END
static ADDRESS_MAP_START( cd2650_io, AS_IO, 8, cd2650_state)
@@ -133,14 +151,14 @@ uint32_t cd2650_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
for (y = 0; y < 16; y++)
{
- for (ra = 0; ra < 10; ra++)
+ for (ra = 0; ra < CHARACTER_LINES; ra++)
{
uint16_t *p = &bitmap.pix16(sy++);
for (x = 0; x < 80; x++)
{
gfx = 0;
- if ((ra) && (ra < 9))
+ if (ra < CHARACTER_HEIGHT)
{
mem = offset + y + (x<<4);
@@ -149,7 +167,7 @@ uint32_t cd2650_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
chr = m_p_videoram[mem] & 0x3f;
- gfx = m_p_chargen[(BITSWAP8(chr,7,6,2,1,0,3,4,5)<<3) | (ra-1) ];
+ gfx = m_p_chargen[(BITSWAP8(chr,7,6,2,1,0,3,4,5)<<3) | ra];
}
/* Display a scanline of a character */
@@ -262,7 +280,7 @@ QUICKLOAD_LOAD_MEMBER( cd2650_state, cd2650 )
static MACHINE_CONFIG_START( cd2650 )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",S2650, XTAL_1MHz)
+ MCFG_CPU_ADD("maincpu", S2650, XTAL_14_192640MHz / 12) // 1.182720MHz according to RE schematic
MCFG_CPU_PROGRAM_MAP(cd2650_mem)
MCFG_CPU_IO_MAP(cd2650_io)
MCFG_CPU_DATA_MAP(cd2650_data)
@@ -271,12 +289,10 @@ static MACHINE_CONFIG_START( cd2650 )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
+ MCFG_SCREEN_RAW_PARAMS(XTAL_14_192640MHz, 112 * CHARACTER_WIDTH, 0, 80 * CHARACTER_WIDTH, 22 * CHARACTER_LINES, 0, 16 * CHARACTER_LINES)
MCFG_SCREEN_UPDATE_DRIVER(cd2650_state, screen_update)
- MCFG_SCREEN_SIZE(640, 160)
- MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 159)
MCFG_SCREEN_PALETTE("palette")
+
MCFG_GFXDECODE_ADD("gfxdecode", "palette", cd2650)
MCFG_PALETTE_ADD_MONOCHROME("palette")
@@ -298,7 +314,7 @@ MACHINE_CONFIG_END
/* ROM definition */
ROM_START( cd2650 )
- ROM_REGION( 0x0400, "roms", 0 )
+ ROM_REGION( 0x1000, "roms", 0 )
ROM_LOAD( "cd2650.rom", 0x0000, 0x0400, CRC(5397328e) SHA1(7106fdb60e1ad2bc5e8e45527f348c23296e8d6a))
ROM_REGION( 0x0600, "chargen", 0 )
@@ -320,4 +336,4 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1977, cd2650, 0, 0, cd2650, cd2650, cd2650_state, 0, "Central Data", "CD 2650", 0 )
+COMP( 1977, cd2650, 0, 0, cd2650, cd2650, cd2650_state, 0, "Central Data", "2650 Computer System", 0 )