mirror of
https://github.com/holub/mame
synced 2025-07-04 01:18:59 +03:00
fidel6502: improved SC12 emulation
This commit is contained in:
parent
5041e43092
commit
d960922c77
@ -32,12 +32,14 @@ public:
|
|||||||
fidel6502_state(const machine_config &mconfig, device_type type, const char *tag)
|
fidel6502_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: fidelz80base_state(mconfig, type, tag),
|
: fidelz80base_state(mconfig, type, tag),
|
||||||
m_6821pia(*this, "6821pia"),
|
m_6821pia(*this, "6821pia"),
|
||||||
m_speaker(*this, "speaker")
|
m_speaker(*this, "speaker"),
|
||||||
|
m_irq_off(*this, "irq_off")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// devices/pointers
|
// devices/pointers
|
||||||
optional_device<pia6821_device> m_6821pia;
|
optional_device<pia6821_device> m_6821pia;
|
||||||
optional_device<speaker_sound_device> m_speaker;
|
optional_device<speaker_sound_device> m_speaker;
|
||||||
|
optional_device<timer_device> m_irq_off;
|
||||||
|
|
||||||
// model CSC
|
// model CSC
|
||||||
void csc_prepare_display();
|
void csc_prepare_display();
|
||||||
@ -54,10 +56,11 @@ public:
|
|||||||
DECLARE_READ_LINE_MEMBER(csc_pia1_ca1_r);
|
DECLARE_READ_LINE_MEMBER(csc_pia1_ca1_r);
|
||||||
DECLARE_READ_LINE_MEMBER(csc_pia1_cb1_r);
|
DECLARE_READ_LINE_MEMBER(csc_pia1_cb1_r);
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(irq_timer);
|
// model SC12
|
||||||
|
TIMER_DEVICE_CALLBACK_MEMBER(irq_off);
|
||||||
protected:
|
TIMER_DEVICE_CALLBACK_MEMBER(sc12_irq);
|
||||||
virtual void machine_start() override;
|
DECLARE_WRITE8_MEMBER(sc12_control_w);
|
||||||
|
DECLARE_READ8_MEMBER(sc12_input_r);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -196,35 +199,83 @@ WRITE_LINE_MEMBER(fidel6502_state::csc_pia1_ca2_w)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
SC12
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(fidel6502_state::irq_timer)
|
// interrupt handling
|
||||||
|
|
||||||
|
TIMER_DEVICE_CALLBACK_MEMBER(fidel6502_state::irq_off)
|
||||||
{
|
{
|
||||||
m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
|
m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TIMER_DEVICE_CALLBACK_MEMBER(fidel6502_state::sc12_irq)
|
||||||
|
{
|
||||||
|
m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
|
||||||
|
m_irq_off->adjust(attotime::from_nsec(15250)); // active low for 15.25us
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TTL
|
||||||
|
|
||||||
|
WRITE8_MEMBER(fidel6502_state::sc12_control_w)
|
||||||
|
{
|
||||||
|
// d0-d3: 7442 a0-a3
|
||||||
|
// 7442 0-8: led data, input mux
|
||||||
|
UINT16 sel = 1 << (data & 0xf) & 0x3ff;
|
||||||
|
m_inp_mux = sel & 0x1ff;
|
||||||
|
|
||||||
|
// 7442 9: speaker out
|
||||||
|
m_speaker->level_w(sel >> 9 & 1);
|
||||||
|
|
||||||
|
// d6,d7: led select (active low)
|
||||||
|
display_matrix(9, 2, sel & 0x1ff, ~data >> 6 & 3);
|
||||||
|
|
||||||
|
// d4,d5: printer
|
||||||
|
//..
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(fidel6502_state::sc12_input_r)
|
||||||
|
{
|
||||||
|
// a0-a2,d7: multiplexed inputs (active low)
|
||||||
|
return (read_inputs(9) << (offset^7) & 0x80) ^ 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Address Maps
|
Address Maps
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
// CSC
|
||||||
|
|
||||||
static ADDRESS_MAP_START( csc_map, AS_PROGRAM, 8, fidel6502_state )
|
static ADDRESS_MAP_START( csc_map, AS_PROGRAM, 8, fidel6502_state )
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x07ff) AM_RAM AM_MIRROR(0x4000)
|
AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x4000) AM_RAM
|
||||||
AM_RANGE(0x0800, 0x0bff) AM_RAM AM_MIRROR(0x4400)
|
AM_RANGE(0x0800, 0x0bff) AM_MIRROR(0x4400) AM_RAM
|
||||||
AM_RANGE(0x1000, 0x1003) AM_DEVREADWRITE("pia0", pia6821_device, read, write) AM_MIRROR(0x47fc)
|
AM_RANGE(0x1000, 0x1003) AM_MIRROR(0x47fc) AM_DEVREADWRITE("pia0", pia6821_device, read, write)
|
||||||
AM_RANGE(0x1800, 0x1803) AM_DEVREADWRITE("pia1", pia6821_device, read, write) AM_MIRROR(0x47fc)
|
AM_RANGE(0x1800, 0x1803) AM_MIRROR(0x47fc) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
|
||||||
AM_RANGE(0x2000, 0x3fff) AM_ROM AM_MIRROR(0x4000)
|
AM_RANGE(0x2000, 0x3fff) AM_MIRROR(0x4000) AM_ROM
|
||||||
AM_RANGE(0xa000, 0xffff) AM_ROM
|
AM_RANGE(0xa000, 0xffff) AM_ROM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
// SC12
|
||||||
|
|
||||||
static ADDRESS_MAP_START( sc12_map, AS_PROGRAM, 8, fidel6502_state )
|
static ADDRESS_MAP_START( sc12_map, AS_PROGRAM, 8, fidel6502_state )
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x0fff) AM_RAM
|
AM_RANGE(0x0000, 0x0fff) AM_RAM
|
||||||
|
AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x1fff) AM_WRITE(sc12_control_w)
|
||||||
AM_RANGE(0x8000, 0x9fff) AM_ROM
|
AM_RANGE(0x8000, 0x9fff) AM_ROM
|
||||||
AM_RANGE(0xc000, 0xcfff) AM_ROM AM_MIRROR(0x1000)
|
AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x1ff8) AM_READ(sc12_input_r)
|
||||||
|
AM_RANGE(0xc000, 0xcfff) AM_MIRROR(0x1000) AM_ROM
|
||||||
AM_RANGE(0xe000, 0xffff) AM_ROM
|
AM_RANGE(0xe000, 0xffff) AM_ROM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
// FEV
|
||||||
|
|
||||||
static ADDRESS_MAP_START( fev_map, AS_PROGRAM, 8, fidel6502_state )
|
static ADDRESS_MAP_START( fev_map, AS_PROGRAM, 8, fidel6502_state )
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x1fff) AM_RAM
|
AM_RANGE(0x0000, 0x1fff) AM_RAM
|
||||||
@ -232,6 +283,7 @@ static ADDRESS_MAP_START( fev_map, AS_PROGRAM, 8, fidel6502_state )
|
|||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Input Ports
|
Input Ports
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
@ -337,11 +389,98 @@ static INPUT_PORTS_START( csc )
|
|||||||
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) PORT_UNUSED
|
PORT_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) PORT_UNUSED
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
static INPUT_PORTS_START( sc12 )
|
||||||
|
PORT_START("IN.0")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
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_START("IN.1")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
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_START("IN.2")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
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_START("IN.3")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
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_START("IN.4")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
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_START("IN.5")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
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_START("IN.6")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
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_START("IN.7")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD)
|
||||||
|
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_START("IN.8")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RV / Pawn") PORT_CODE(KEYCODE_1)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM / Knight") PORT_CODE(KEYCODE_2)
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TB / Bishop") PORT_CODE(KEYCODE_3)
|
||||||
|
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
|
||||||
|
INPUT_PORTS_END
|
||||||
|
|
||||||
void fidel6502_state::machine_start()
|
|
||||||
{
|
|
||||||
fidelz80base_state::machine_start();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
@ -351,11 +490,9 @@ void fidel6502_state::machine_start()
|
|||||||
static MACHINE_CONFIG_START( csc, fidel6502_state )
|
static MACHINE_CONFIG_START( csc, fidel6502_state )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD("maincpu", M6502, 3900000/2)
|
MCFG_CPU_ADD("maincpu", M6502, 3900000/2) // from 3.9MHz resonator
|
||||||
MCFG_CPU_PROGRAM_MAP(csc_map)
|
MCFG_CPU_PROGRAM_MAP(csc_map)
|
||||||
|
MCFG_CPU_PERIODIC_INT_DRIVER(fidelz80base_state, irq0_line_hold, 600) // 38400kHz/64
|
||||||
|
|
||||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer", fidel6502_state, irq_timer, attotime::from_hz(38400/64))
|
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("pia0", PIA6821, 0)
|
MCFG_DEVICE_ADD("pia0", PIA6821, 0)
|
||||||
MCFG_PIA_READPB_HANDLER(READ8(fidel6502_state, csc_pia0_pb_r))
|
MCFG_PIA_READPB_HANDLER(READ8(fidel6502_state, csc_pia0_pb_r))
|
||||||
@ -385,12 +522,13 @@ static MACHINE_CONFIG_START( csc, fidel6502_state )
|
|||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( sc12, fidel6502_state )
|
static MACHINE_CONFIG_START( sc12, fidel6502_state )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD("maincpu", R65C02, XTAL_4MHz)
|
MCFG_CPU_ADD("maincpu", R65C02, XTAL_4MHz)
|
||||||
MCFG_CPU_PROGRAM_MAP(sc12_map)
|
MCFG_CPU_PROGRAM_MAP(sc12_map)
|
||||||
|
MCFG_TIMER_DRIVER_ADD_PERIODIC("sc12_irq", fidel6502_state, sc12_irq, attotime::from_hz(780)) // from 556 timer
|
||||||
|
MCFG_TIMER_DRIVER_ADD("irq_off", fidel6502_state, irq_off)
|
||||||
|
|
||||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
|
MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1))
|
||||||
MCFG_DEFAULT_LAYOUT(layout_fidel_sc12)
|
MCFG_DEFAULT_LAYOUT(layout_fidel_sc12)
|
||||||
@ -401,8 +539,6 @@ static MACHINE_CONFIG_START( sc12, fidel6502_state )
|
|||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( fev, fidel6502_state )
|
static MACHINE_CONFIG_START( fev, fidel6502_state )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -420,6 +556,7 @@ static MACHINE_CONFIG_START( fev, fidel6502_state )
|
|||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
ROM Definitions
|
ROM Definitions
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
@ -459,6 +596,6 @@ ROM_END
|
|||||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
|
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */
|
||||||
COMP( 1981, csc, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
COMP( 1981, csc, 0, 0, csc, csc, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||||
|
|
||||||
COMP( 1984, fscc12, 0, 0, sc12, csc, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_NOT_WORKING )
|
COMP( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_NOT_WORKING )
|
||||||
|
|
||||||
COMP( 1987, fexcelv, 0, 0, fev, csc, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_NOT_WORKING )
|
COMP( 1987, fexcelv, 0, 0, fev, csc, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_NOT_WORKING )
|
||||||
|
@ -310,6 +310,7 @@ Champion Sensory Chess Challenger (CSC) (6502 based -> fidel6502.cpp driver)
|
|||||||
|
|
||||||
Memory map:
|
Memory map:
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
0000-07FF: 2K of RAM
|
0000-07FF: 2K of RAM
|
||||||
0800-0FFF: 1K of RAM (note: mirrored twice)
|
0800-0FFF: 1K of RAM (note: mirrored twice)
|
||||||
1000-17FF: PIA 0 (display, TSI speech chip)
|
1000-17FF: PIA 0 (display, TSI speech chip)
|
||||||
@ -598,9 +599,40 @@ Sensory Chess Challenger (SC12-B) (6502 based -> fidel6502.cpp driver)
|
|||||||
|
|
||||||
RE information by Berger
|
RE information by Berger
|
||||||
|
|
||||||
|
8*(8+1) buttons, 8+8+2 red LEDs
|
||||||
|
DIN 41524C printer port
|
||||||
|
36-pin edge connector
|
||||||
|
CPU is a R65C02P4, running at 4MHz
|
||||||
|
|
||||||
|
NE556 dual-timer IC:
|
||||||
|
- timer#1, one-shot at power-on, to CPU _RESET
|
||||||
|
- timer#2: R1=82K, R2=1K, C=22nf, to CPU _IRQ: ~780Hz, active low=15.25us
|
||||||
|
|
||||||
|
|
||||||
|
Memory map:
|
||||||
|
-----------
|
||||||
|
|
||||||
|
6000-0FFF: 4K of RAM (2016 * 2)
|
||||||
|
2000-5FFF: cartridge
|
||||||
|
6000-7FFF: control(W)
|
||||||
|
8000-9FFF: 8K ROM SSS SCM23C65E4
|
||||||
|
A000-BFFF: keypad(R)
|
||||||
|
C000-DFFF: 4K ROM TI TMS2732AJL-45
|
||||||
|
E000-FFFF: 8K ROM Toshiba TMM2764D-2
|
||||||
|
|
||||||
|
control: (74LS377)
|
||||||
|
--------
|
||||||
|
|
||||||
|
Q0-Q3: 7442 A0-A3
|
||||||
|
Q4: enable printer port pin 1 input
|
||||||
|
Q5: printer port pin 5 output
|
||||||
|
Q6,Q7: LEDs common anode
|
||||||
|
|
||||||
|
7442 0-8: input mux and LEDs cathode
|
||||||
|
7442 9: buzzer
|
||||||
|
|
||||||
|
The keypad is read through a 74HC251, where S0,1,2 is from CPU A0,1,2, Y is connected to CPU D7.
|
||||||
|
If control Q4 is set, printer data can be read from I0.
|
||||||
|
|
||||||
|
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
@ -1126,7 +1158,7 @@ ADDRESS_MAP_END
|
|||||||
static ADDRESS_MAP_START( vcc_map, AS_PROGRAM, 8, fidelz80_state )
|
static ADDRESS_MAP_START( vcc_map, AS_PROGRAM, 8, fidelz80_state )
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x2fff) AM_ROM
|
AM_RANGE(0x0000, 0x2fff) AM_ROM
|
||||||
AM_RANGE(0x4000, 0x43ff) AM_RAM AM_MIRROR(0x1c00)
|
AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0x1c00) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( vcc_io, AS_IO, 8, fidelz80_state )
|
static ADDRESS_MAP_START( vcc_io, AS_IO, 8, fidelz80_state )
|
||||||
@ -1140,8 +1172,8 @@ ADDRESS_MAP_END
|
|||||||
static ADDRESS_MAP_START( vsc_map, AS_PROGRAM, 8, fidelz80_state )
|
static ADDRESS_MAP_START( vsc_map, AS_PROGRAM, 8, fidelz80_state )
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||||
AM_RANGE(0x4000, 0x4fff) AM_ROM AM_MIRROR(0x1000)
|
AM_RANGE(0x4000, 0x4fff) AM_MIRROR(0x1000) AM_ROM
|
||||||
AM_RANGE(0x6000, 0x63ff) AM_RAM AM_MIRROR(0x1c00)
|
AM_RANGE(0x6000, 0x63ff) AM_MIRROR(0x1c00) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
// VSC io: A2 is 8255 _CE, A3 is Z80 PIO _CE - in theory, both chips can be accessed simultaneously
|
// VSC io: A2 is 8255 _CE, A3 is Z80 PIO _CE - in theory, both chips can be accessed simultaneously
|
||||||
@ -1187,8 +1219,8 @@ WRITE8_MEMBER(fidelz80_state::vbrc_speech_w)
|
|||||||
static ADDRESS_MAP_START( vbrc_main_map, AS_PROGRAM, 8, fidelz80_state )
|
static ADDRESS_MAP_START( vbrc_main_map, AS_PROGRAM, 8, fidelz80_state )
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x5fff) AM_ROM
|
AM_RANGE(0x0000, 0x5fff) AM_ROM
|
||||||
AM_RANGE(0x6000, 0x63ff) AM_RAM AM_MIRROR(0x1c00)
|
AM_RANGE(0x6000, 0x63ff) AM_MIRROR(0x1c00) AM_RAM
|
||||||
AM_RANGE(0xe000, 0xffff) AM_WRITE(vbrc_speech_w) AM_MIRROR(0x1fff)
|
AM_RANGE(0xe000, 0xffff) AM_MIRROR(0x1fff) AM_WRITE(vbrc_speech_w)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( vbrc_main_io, AS_IO, 8, fidelz80_state )
|
static ADDRESS_MAP_START( vbrc_main_io, AS_IO, 8, fidelz80_state )
|
||||||
|
@ -14,26 +14,26 @@
|
|||||||
<view name="Internal Layout">
|
<view name="Internal Layout">
|
||||||
<bounds left="0" right="20" top="0" bottom="20" />
|
<bounds left="0" right="20" top="0" bottom="20" />
|
||||||
|
|
||||||
<bezel name="0.0" element="led"><bounds x="1" y="1" width="1" height="1" /></bezel>
|
<bezel name="1.0" element="led"><bounds x="1" y="1" width="1" height="1" /></bezel>
|
||||||
<bezel name="0.1" element="led"><bounds x="1" y="2" width="1" height="1" /></bezel>
|
<bezel name="1.1" element="led"><bounds x="1" y="2" width="1" height="1" /></bezel>
|
||||||
<bezel name="0.2" element="led"><bounds x="1" y="3" width="1" height="1" /></bezel>
|
<bezel name="1.2" element="led"><bounds x="1" y="3" width="1" height="1" /></bezel>
|
||||||
<bezel name="0.3" element="led"><bounds x="1" y="4" width="1" height="1" /></bezel>
|
<bezel name="1.3" element="led"><bounds x="1" y="4" width="1" height="1" /></bezel>
|
||||||
<bezel name="0.4" element="led"><bounds x="1" y="5" width="1" height="1" /></bezel>
|
<bezel name="1.4" element="led"><bounds x="1" y="5" width="1" height="1" /></bezel>
|
||||||
<bezel name="0.5" element="led"><bounds x="1" y="6" width="1" height="1" /></bezel>
|
<bezel name="1.5" element="led"><bounds x="1" y="6" width="1" height="1" /></bezel>
|
||||||
<bezel name="0.6" element="led"><bounds x="1" y="7" width="1" height="1" /></bezel>
|
<bezel name="1.6" element="led"><bounds x="1" y="7" width="1" height="1" /></bezel>
|
||||||
<bezel name="0.7" element="led"><bounds x="1" y="8" width="1" height="1" /></bezel>
|
<bezel name="1.7" element="led"><bounds x="1" y="8" width="1" height="1" /></bezel>
|
||||||
|
|
||||||
<bezel name="1.0" element="led"><bounds x="2" y="9" width="1" height="1" /></bezel>
|
<bezel name="0.0" element="led"><bounds x="2" y="9" width="1" height="1" /></bezel>
|
||||||
<bezel name="1.1" element="led"><bounds x="3" y="9" width="1" height="1" /></bezel>
|
<bezel name="0.1" element="led"><bounds x="3" y="9" width="1" height="1" /></bezel>
|
||||||
<bezel name="1.2" element="led"><bounds x="4" y="9" width="1" height="1" /></bezel>
|
<bezel name="0.2" element="led"><bounds x="4" y="9" width="1" height="1" /></bezel>
|
||||||
<bezel name="1.3" element="led"><bounds x="5" y="9" width="1" height="1" /></bezel>
|
<bezel name="0.3" element="led"><bounds x="5" y="9" width="1" height="1" /></bezel>
|
||||||
<bezel name="1.4" element="led"><bounds x="6" y="9" width="1" height="1" /></bezel>
|
<bezel name="0.4" element="led"><bounds x="6" y="9" width="1" height="1" /></bezel>
|
||||||
<bezel name="1.5" element="led"><bounds x="7" y="9" width="1" height="1" /></bezel>
|
<bezel name="0.5" element="led"><bounds x="7" y="9" width="1" height="1" /></bezel>
|
||||||
<bezel name="1.6" element="led"><bounds x="8" y="9" width="1" height="1" /></bezel>
|
<bezel name="0.6" element="led"><bounds x="8" y="9" width="1" height="1" /></bezel>
|
||||||
<bezel name="1.7" element="led"><bounds x="9" y="9" width="1" height="1" /></bezel>
|
<bezel name="0.7" element="led"><bounds x="9" y="9" width="1" height="1" /></bezel>
|
||||||
|
|
||||||
<bezel name="2.0" element="led"><bounds x="11" y="7" width="1" height="1" /></bezel>
|
<bezel name="1.8" element="led"><bounds x="11" y="7" width="1" height="1" /></bezel>
|
||||||
<bezel name="2.1" element="led"><bounds x="11" y="8" width="1" height="1" /></bezel>
|
<bezel name="0.8" element="led"><bounds x="11" y="8" width="1" height="1" /></bezel>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
</mamelayout>
|
</mamelayout>
|
||||||
|
Loading…
Reference in New Issue
Block a user