diff --git a/hash/fidel_scc.xml b/hash/fidel_scc.xml new file mode 100644 index 00000000000..d6afe1e7d07 --- /dev/null +++ b/hash/fidel_scc.xml @@ -0,0 +1,20 @@ + + + + + + + + + Challenger Book Openings 2 + 1982 + Fidelity Electronics + + + + + + + + + diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index 2a17baa6590..8ccf47506a9 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -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 m_6821pia; + optional_device m_cart; optional_device m_speaker; optional_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 ) diff --git a/src/mame/drivers/fidelz80.cpp b/src/mame/drivers/fidelz80.cpp index 6e3e5cb725e..8c5c3fdbf5d 100644 --- a/src/mame/drivers/fidelz80.cpp +++ b/src/mame/drivers/fidelz80.cpp @@ -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 diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index 9670ab8be9f..d87600f8326 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -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