fidel6502: added SC12 cartridge handling

This commit is contained in:
hap 2016-01-27 16:53:04 +01:00
parent a1629ac21b
commit 8cbabcd9ad
4 changed files with 106 additions and 13 deletions

20
hash/fidel_scc.xml Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="fidel_scc" description="Fidelity SCC Modules">
<!-- Sensory Chess Challenger: 9, 12, A/S, .. -->
<software name="cb16">
<description>Challenger Book Openings 2</description>
<year>1982</year>
<publisher>Fidelity Electronics</publisher>
<part name="cart" interface="fidel_scc">
<dataarea name="rom" size="0x4000">
<rom name="101-1042a01" size="0x2000" crc="591b3e4a" sha1="f75ae850f2f70808b5423f847ff12ee890752bf8" offset="0x0000" />
<rom name="101-1042a02" size="0x2000" crc="1bdf0a21" sha1="1c6f673c0bf846e705d15c802f433ac1dc9b153c" offset="0x2000" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -16,6 +16,9 @@
#include "cpu/m6502/m65sc02.h"
#include "machine/6821pia.h"
#include "sound/speaker.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "softlist.h"
#include "includes/fidelz80.h"
@ -32,12 +35,14 @@ public:
fidel6502_state(const machine_config &mconfig, device_type type, const char *tag)
: fidelz80base_state(mconfig, type, tag),
m_6821pia(*this, "6821pia"),
m_cart(*this, "cartslot"),
m_speaker(*this, "speaker"),
m_irq_off(*this, "irq_off")
{ }
// devices/pointers
optional_device<pia6821_device> m_6821pia;
optional_device<generic_slot_device> m_cart;
optional_device<speaker_sound_device> m_speaker;
optional_device<timer_device> m_irq_off;
@ -57,6 +62,8 @@ public:
DECLARE_READ_LINE_MEMBER(csc_pia1_cb1_r);
// model SC12
DECLARE_MACHINE_START(sc12);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(scc_cartridge);
TIMER_DEVICE_CALLBACK_MEMBER(irq_off);
TIMER_DEVICE_CALLBACK_MEMBER(sc12_irq);
DECLARE_WRITE8_MEMBER(sc12_control_w);
@ -203,6 +210,34 @@ WRITE_LINE_MEMBER(fidel6502_state::csc_pia1_ca2_w)
SC12
******************************************************************************/
// cartridge
DEVICE_IMAGE_LOAD_MEMBER(fidel6502_state, scc_cartridge)
{
UINT32 size = m_cart->common_get_size("rom");
// max size is 16KB
if (size > 0x4000)
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Invalid file size");
return IMAGE_INIT_FAIL;
}
m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
return IMAGE_INIT_PASS;
}
MACHINE_START_MEMBER(fidel6502_state, sc12)
{
if (m_cart->exists())
m_maincpu->space(AS_PROGRAM).install_read_handler(0x2000, 0x5fff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_cart));
fidelz80base_state::machine_start();
}
// interrupt handling
TIMER_DEVICE_CALLBACK_MEMBER(fidel6502_state::irq_off)
@ -331,7 +366,7 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L) // level
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L)
PORT_START("IN.4")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
@ -384,8 +419,8 @@ static INPUT_PORTS_START( csc )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Bishop") PORT_CODE(KEYCODE_4)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Queen") PORT_CODE(KEYCODE_5)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("King") PORT_CODE(KEYCODE_6)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) // clear
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) // reset
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R)
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) PORT_UNUSED
INPUT_PORTS_END
@ -477,8 +512,8 @@ static INPUT_PORTS_START( sc12 )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV / Rook") PORT_CODE(KEYCODE_4)
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PV / Queen") PORT_CODE(KEYCODE_5)
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("PB / King") PORT_CODE(KEYCODE_6)
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL) // clear
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R) // reset
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CL") PORT_CODE(KEYCODE_DEL)
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RE") PORT_CODE(KEYCODE_R)
INPUT_PORTS_END
@ -533,10 +568,19 @@ static MACHINE_CONFIG_START( sc12, fidel6502_state )
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
MCFG_DEFAULT_LAYOUT(layout_fidel_sc12)
MCFG_MACHINE_START_OVERRIDE(fidel6502_state, sc12)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* cartridge */
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "fidel_scc")
MCFG_GENERIC_EXTENSIONS("bin,dat")
MCFG_GENERIC_LOAD(fidel6502_state, scc_cartridge)
MCFG_SOFTWARE_LIST_ADD("cart_list", "fidel_scc")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( fev, fidel6502_state )

View File

@ -3,18 +3,41 @@
/******************************************************************************
Fidelity Electronics Z80 based board driver
for 6502 based boards, see drivers/fidel6502.cpp
Detailed RE work done by Kevin 'kevtris' Horton, except where noted
for 6502 based boards, see drivers/fidel6502.cpp (documentation is in this driver)
TODO:
- Figure out why it says the first speech line twice; it shouldn't?
It sometimes does this on Voice Sensory Chess Challenger real hardware.
It can also be heard on Advanced Voice Chess Challenger real hardware, but not the whole line:
"I I am Fidelity's chess challenger", instead.
- Get rom locations from pcb (done for UVC, VCC is probably similar)
- correctly hook up VBRC speech so that the z80 is halted while words are being spoken
Read the official manual(s) on how to play.
Keypad legend:
- RE: Reset
- CL: Clear
- EN: Enter
- PB: Problem Mode
- PV: Position Verification
- LV: Playing Levels
- TB: Take Back
- DM: Display Move/Double Move
- RV: Reverse
Peripherals, compatible with various boards:
- Fidelity Challenger Printer - thermal printer, MCU=?
Program/data cartridges, for various boards, some cross-compatible:
- CG6: Greatest Chess Games 1
- CAC: Challenger Advanced Chess - 8KB 101-1038A01
- CB9: Challenger Book Openings 1 - 8KB?
- CB16: Challenger Book Openings 2 - 8+8KB 101-1042A01,02
- others are alt. titles of these?
Board hardware descriptions below.
Detailed RE work done by Kevin 'kevtris' Horton, except where noted
***********************************************************************
Voice Chess Challenger (VCC) (version A and B?)
@ -305,7 +328,7 @@ A detailed description of the hardware can be found also in the patent 4,373,719
******************************************************************************
Champion Sensory Chess Challenger (CSC) (6502 based -> fidel6502.cpp driver)
Champion Sensory Chess Challenger (CSC)
---------------------------------------
Memory map:
@ -594,10 +617,11 @@ expect that the software reads these once on startup only.
******************************************************************************
Sensory Chess Challenger (SC12-B) (6502 based -> fidel6502.cpp driver)
Sensory Chess Challenger (SC12-B)
4 versions are known to exist: A,B,C, and X, with increasing CPU speed.
---------------------------------
RE information by Berger
RE information from netlist by Berger
8*(8+1) buttons, 8+8+2 red LEDs
DIN 41524C printer port
@ -637,7 +661,7 @@ If control Q4 is set, printer data can be read from I0.
******************************************************************************
Voice Excellence (FEV, model 6092) (6502 based -> fidel6502.cpp driver)
Voice Excellence (FEV, model 6092)
----------------------------------
PCB 1: 510.1117A02, appears to be identical to other "Excellence" boards

View File

@ -14,15 +14,19 @@
@CP0904A TMS0970 1977, Milton Bradley Comp IV
@MP0905B TMS0970 1977, Parker Brothers Codename Sector
*MP0057 TMS1000 1978, APH Student Speech+ (same ROM contents as TSI Speech+?)
*MP0158 TMS1000 1979, Entex Soccer
*MP0168 TMS1000? 1979, Conic Basketball
*MP0170 TMS1000? 1979, E.R.S. Football
@MP0914 TMS1000 1979, Entex Baseball 1
@MP0923 TMS1000 1979, Entex Baseball 2
@MP1030 TMS1100 1980, APF Mathemagician
@MP1133 TMS1470 1979, Kosmos Astro
@MP1180 TMS1100 1980, Tomy Power House Pinball
*MP1181 TMS1100 1979, Conic Football 2
@MP1204 TMS1100 1980, Entex Baseball 3 (6007)
@MP1211 TMS1100 1980, Entex Space Invader
@MP1218 TMS1100 1980, Entex Basketball 2 (6010)
*MP1219 TMS1100 1980, U.S. Games Super Sports 4
@MP1221 TMS1100 1980, Entex Raise The Devil
*MP1296 TMS1100? 1982, Entex Black Knight
*MP1312 TMS1100 198?, Tandy/RadioShack Science Fair Microcomputer Trainer
@ -59,6 +63,7 @@
MP3496 TMS1100 1980, MicroVision cartridge: Sea Duel
M34009 TMS1100 1981, MicroVision cartridge: Alien Raiders (note: MP3498, MP3499, M3400x..)
@M34012 TMS1100 1980, Mattel Dungeons & Dragons - Computer Labyrinth Game
*M34014 TMS1100 1981, Coleco Bowlatronic
M34017 TMS1100 1981, MicroVision cartridge: Cosmic Hunter
M34047 TMS1100 1982, MicroVision cartridge: Super Blockbuster
*M34078A TMS1100 1983, Milton Bradley Arcade Mania