diff options
Diffstat (limited to 'src/mame/drivers/fidel6502.cpp')
-rw-r--r-- | src/mame/drivers/fidel6502.cpp | 824 |
1 files changed, 227 insertions, 597 deletions
diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp index 43bdd8337c8..2a17baa6590 100644 --- a/src/mame/drivers/fidel6502.cpp +++ b/src/mame/drivers/fidel6502.cpp @@ -3,260 +3,10 @@ /****************************************************************************** Fidelity Electronics 6502 based board driver - -****************************************************************************** - -Champion Sensory Chess Challenger (CSC) ---------------------------------------- - -Memory map: ------------ -0000-07FF: 2K of RAM -0800-0FFF: 1K of RAM (note: mirrored twice) -1000-17FF: PIA 0 (display, TSI speech chip) -1800-1FFF: PIA 1 (keypad, LEDs) -2000-3FFF: 101-64019 ROM (also used on the regular sensory chess challenger) -4000-7FFF: mirror of 0000-3FFF -8000-9FFF: not used -A000-BFFF: 101-1025A03 ROM -C000-DFFF: 101-1025A02 ROM -E000-FDFF: 101-1025A01 ROM -FE00-FFFF: 512 byte 74S474 PROM - -CPU is a 6502 running at 1.95MHz (3.9MHz resonator, divided by 2) - -NMI is not used. -IRQ is connected to a 600Hz oscillator (38.4KHz divided by 64). -Reset is connected to a power-on reset circuit. - -PIA 0: ------- -PA0 - 7seg segments E, TSI A0 -PA1 - 7seg segments D, TSI A1 -PA2 - 7seg segments C, TSI A2 -PA3 - 7seg segments H, TSI A3 -PA4 - 7seg segments G, TSI A4 -PA5 - 7seg segments F, TSI A5 -PA6 - 7seg segments B -PA7 - 7seg segments A - -PB0 - A12 on speech ROM (if used... not used on this model, ROM is 4K) -PB1 - START line on TSI -PB2 - white wire -PB3 - BUSY line from TSI -PB4 - hi/lo TSI speaker volume -PB5 - button row 9 -PB6 - selection jumper (resistor to 5V) -PB7 - selection jumper (resistor to ground) - -CA1 - NC -CA2 - violet wire - -CB1 - NC -CB2 - NC (connects to pin 14 of soldered connector) - -PIA 1: ------- -PA0 - button row 1 -PA1 - button row 2 -PA2 - button row 3 -PA3 - button row 4 -PA4 - button row 5 -PA5 - button row 6 -PA6 - 7442 selector bit 0 -PA7 - 7442 selector bit 1 - -PB0 - LED row 1 -PB1 - LED row 2 -PB2 - LED row 3 -PB3 - LED row 4 -PB4 - LED row 5 -PB5 - LED row 6 -PB6 - LED row 7 -PB7 - LED row 8 - -CA1 - button row 7 -CA2 - selector bit 3 - -CB1 - button row 8 -CB2 - selector bit 2 - -Selector: (attached to PIA 1, outputs 1 of 10 pins low. 7442) ---------- -output # (selected turns this column on, and all others off) -0 - LED column A, button column A, 7seg digit 1 -1 - LED column B, button column B, 7seg digit 2 -2 - LED column C, button column C, 7seg digit 3 -3 - LED column D, button column D, 7seg digit 4 -4 - LED column E, button column E -5 - LED column F, button column F -6 - LED column G, button column G -7 - LED column H, button column H -8 - button column I -9 - Tone line (toggle to make a tone in the buzzer) - -The rows/columns are indicated on the game board: - - ABCDEFGH I --------------- -| | 8 -| | 7 -| | 6 -| | 5 -| | 4 -| | 3 -| | 2 -| | 1 --------------- - -The "lone LED" is above the control column. -column I is the "control column" on the right for starting a new game, etc. - -The upper 6 buttons are connected as such: - -column A - speak -column B - RV -column C - TM -column D - LV -column E - DM -column F - ST - -these 6 buttons use row 9 (connects to PIA 0) - -LED display: ------------- -43 21 (digit number) ------ -88:88 - -The LED display is four 7 segment digits. normal ABCDEFG lettering is used for segments. - -The upper dot is connected to digit 3 common -The lower dot is connected to digit 4 common -The lone LED is connected to digit 1 common - -All three of the above are called "segment H". - - -****************************************************************************** - -Sensory Chess Challenger (SC12-B, 6086) -4 versions are known to exist: A,B,C, and X, with increasing CPU speed. ---------------------------------- -RE information from netlist 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 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. - - -****************************************************************************** - -Voice Excellence (model 6092) ----------------- -PCB 1: 510.1117A02, appears to be identical to other "Excellence" boards -CPU: GTE G65SC102P-3, 32 KB PRG ROM: AMI 101-1080A01(IC5), 8192x8 SRAM SRM2264C10(IC6) -2 rows of LEDs on the side: 1*8 green, 1*8 red - -PCB 2: 510.1117A01 -Speech: TSI S14001A, 32 KB ROM: AMI 101-1081A01(IC2) -Dip Switches set ROM A13 and ROM A14, on the side of the board - -ROM A12 is tied to S14001A's A11 (yuck) -ROM A11 is however tied to the CPU's XYZ - -0000_07FF - Spanish 1/4 -0800_0FFF - Spanish 3/4 -1000_17FF - Spanish 2/4 -1800_1FFF - Spanish 4/4 - -2000_27FF - French 1/4 -2800_2FFF - French 3/4 -3000_3FFF - French 2/4 -3800_3FFF - French 4/4 - -4000_47FF - German 1/4 -4800_4FFF - German 3/4 -5000_57FF - German 2/4 -5800_5FFF - German 4/4 + See drivers/fidelz80.cpp for hardware description -6000_67FF - English 1/2 -6800_6FFF - Bridge Challenger 1/2 -7000_77FF - English 2/2 -7800_7FFF - Bridge Challenger 2/2 - ------------------- -RE info by hap, based on PCB photos - -Memory map: ------------ -0000-3FFF: 8K RAM (SRM2264) -4000-7FFF: control (R/W) -8000-FFFF: 32K ROM (M27256 compatible) - -control (W): ------------- -Z80 A0-A2 to 3*74259, Z80 Dx to D (_C unused) - -Z80 D0: -- Q4,Q5: led commons -- Q6,Q7,Q2,Q1: 7seg panel digit select -- Q0-Q3: 7442 A0-A3 - + 0-7: led data - + 0-8: keypad mux - + 9: buzzer out - -Z80 D1: (model 6093) -- Q0-Q7: 7seg data - -Z80 D2: (model 6092) -- Q0-Q5: TSI C0-C5 -- Q6: TSI START pin -- Q7: TSI ROM A11 - -A11 from TSI is tied to TSI ROM A12(!) -TSI ROM A13,A14 are hardwired to the 2 language switches. -Sound comes from the Audio out pin, digital out pins are N/C. - -control (R): ------------- -Z80 A0-A2 to 2*74251, Z80 Dx to output - -Z80 D7 to Y: -- D0-D7: keypad row data - -Z80 D6 to W: (model 6092, tied to VCC otherwise) -- D0,D1: language switches -- D2-D6: VCC -- D7: TSI BUSY + TODO: + - x ******************************************************************************/ @@ -265,13 +15,15 @@ Z80 D6 to W: (model 6092, tied to VCC otherwise) #include "cpu/m6502/r65c02.h" #include "cpu/m6502/m65sc02.h" #include "machine/6821pia.h" +#include "sound/speaker.h" #include "includes/fidelz80.h" // internal artwork -#include "fidel_csc.lh" // clickable -#include "fidel_fev.lh" // clickable -#include "fidel_sc12.lh" // clickable +#include "fidel_sc12.lh" +#include "fidel_fev.lh" + +extern const char layout_fidel_vsc[]; // same layout as fidelz80/vsc class fidel6502_state : public fidelz80base_state @@ -280,17 +32,16 @@ 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; - - TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE); } - TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); } + optional_device<speaker_sound_device> m_speaker; + optional_device<timer_device> m_irq_off; - // CSC + // model CSC void csc_prepare_display(); DECLARE_READ8_MEMBER(csc_speech_r); DECLARE_WRITE8_MEMBER(csc_pia0_pa_w); @@ -305,16 +56,11 @@ public: DECLARE_READ_LINE_MEMBER(csc_pia1_ca1_r); DECLARE_READ_LINE_MEMBER(csc_pia1_cb1_r); - // SC12/6086 + // model SC12 + TIMER_DEVICE_CALLBACK_MEMBER(irq_off); + TIMER_DEVICE_CALLBACK_MEMBER(sc12_irq); DECLARE_WRITE8_MEMBER(sc12_control_w); DECLARE_READ8_MEMBER(sc12_input_r); - DECLARE_READ8_MEMBER(sc12_cart_r); - - // 6080/6092/6093 (Excellence) - DECLARE_INPUT_CHANGED_MEMBER(fexcelv_bankswitch); - DECLARE_READ8_MEMBER(fexcelv_speech_r); - DECLARE_WRITE8_MEMBER(fexcel_ttl_w); - DECLARE_READ8_MEMBER(fexcel_ttl_r); }; @@ -329,22 +75,21 @@ public: void fidel6502_state::csc_prepare_display() { - // 7442 0-8: led select, input mux - m_inp_mux = 1 << m_led_select & 0x3ff; - - // 7442 9: speaker out - m_speaker->level_w(m_inp_mux >> 9 & 1); + // 7442 output, also update input mux (9 is unused) + m_inp_mux = (1 << m_led_select) & 0x1ff; // 4 7seg leds + H for (int i = 0; i < 4; i++) + { + m_display_segmask[i] = 0x7f; m_display_state[i] = (m_inp_mux >> i & 1) ? m_7seg_data : 0; + } // 8*8 chessboard leds for (int i = 0; i < 8; i++) m_display_state[i+4] = (m_inp_mux >> i & 1) ? m_led_data : 0; - set_display_size(8, 4+8); - set_display_segmask(0xf, 0x7f); + set_display_size(8, 12); display_update(); } @@ -374,9 +119,9 @@ WRITE8_MEMBER(fidel6502_state::csc_pia0_pb_w) // d1: TSI START line m_speech->start_w(data >> 1 & 1); - - // d4: lower TSI volume - m_speech->set_output_gain(0, (data & 0x10) ? 0.5 : 1.0); + + // d4: tone line + m_speaker->level_w(data >> 4 & 1); } READ8_MEMBER(fidel6502_state::csc_pia0_pb_r) @@ -389,9 +134,12 @@ READ8_MEMBER(fidel6502_state::csc_pia0_pb_r) data |= 0x08; // d5: button row 8 (active low) + if (!(read_inputs(9) & 0x100)) + data |= 0x20; + // d6,d7: language switches - data |= (~read_inputs(9) >> 3 & 0x20) | (~m_inp_matrix[9]->read() << 6 & 0xc0); - + data|=0xc0; + return data; } @@ -452,12 +200,24 @@ WRITE_LINE_MEMBER(fidel6502_state::csc_pia1_ca2_w) /****************************************************************************** - SC12/6086 + SC12 ******************************************************************************/ +// interrupt handling +TIMER_DEVICE_CALLBACK_MEMBER(fidel6502_state::irq_off) +{ + 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/generic + +// TTL WRITE8_MEMBER(fidel6502_state::sc12_control_w) { @@ -479,96 +239,7 @@ WRITE8_MEMBER(fidel6502_state::sc12_control_w) READ8_MEMBER(fidel6502_state::sc12_input_r) { // a0-a2,d7: multiplexed inputs (active low) - return (read_inputs(9) >> offset & 1) ? 0 : 0x80; -} - -READ8_MEMBER(fidel6502_state::sc12_cart_r) -{ - if (m_cart->exists()) - return m_cart->read_rom(space, offset); - else - return 0; -} - - - -/****************************************************************************** - 6080/6092/6093 (Excellence) -******************************************************************************/ - -// misc handlers - -INPUT_CHANGED_MEMBER(fidel6502_state::fexcelv_bankswitch) -{ - // tied to speech ROM highest bits - m_speech->force_update(); - m_speech_bank = (m_speech_bank & 1) | newval << 1; -} - -READ8_MEMBER(fidel6502_state::fexcelv_speech_r) -{ - // TSI A11 is A12, program controls A11, user controls A13,A14(language switches) - offset = (offset & 0x7ff) | (offset << 1 & 0x1000); - return m_speech_rom[offset | (m_speech_bank << 11 & 0x800) | (~m_speech_bank << 12 & 0x6000)]; -} - - -// TTL - -WRITE8_MEMBER(fidel6502_state::fexcel_ttl_w) -{ - // a0-a2,d0: 74259(1) - UINT8 mask = 1 << offset; - m_led_select = (m_led_select & ~mask) | ((data & 1) ? mask : 0); - - // 74259 Q0-Q3: 7442 a0-a3 - // 7442 0-8: led data, input mux - UINT16 sel = 1 << (m_led_select & 0xf) & 0x3ff; - UINT8 led_data = sel & 0xff; - m_inp_mux = sel & 0x1ff; - - // 7442 9: speaker out (optional?) - m_speaker->level_w(sel >> 9 & 1); - - // 74259 Q4-Q7,Q2,Q1: digit/led select (active low) - UINT8 led_sel = ~BITSWAP8(m_led_select,0,3,1,2,7,6,5,4) & 0x3f; - - // a0-a2,d1: digit segment data (model 6093) - m_7seg_data = (m_7seg_data & ~mask) | ((data & 2) ? mask : 0); - UINT8 seg_data = BITSWAP8(m_7seg_data,0,1,3,2,7,5,6,4); - - // update display: 4 7seg leds, 2*8 chessboard leds - for (int i = 0; i < 6; i++) - m_display_state[i] = (led_sel >> i & 1) ? ((i < 2) ? led_data : seg_data) : 0; - - set_display_size(8, 2+4); - set_display_segmask(0x3c, 0x7f); - display_update(); - - // speech (model 6092) - if (m_speech != nullptr) - { - // a0-a2,d2: 74259(2) to speech board - m_speech_data = (m_speech_data & ~mask) | ((data & 4) ? mask : 0); - - // 74259 Q6: TSI ROM A11 - m_speech->force_update(); // update stream to now - m_speech_bank = (m_speech_bank & ~1) | (m_speech_data >> 6 & 1); - - // Q0-Q5: TSI C0-C5 - // Q7: TSI START line - m_speech->data_w(space, 0, m_speech_data & 0x3f); - m_speech->start_w(m_speech_data >> 7 & 1); - } -} - -READ8_MEMBER(fidel6502_state::fexcel_ttl_r) -{ - // a0-a2,d6: from speech board: language switches and TSI BUSY line, otherwise tied to VCC - UINT8 d6 = (read_safe(m_inp_matrix[9], 0xff) >> offset & 1) ? 0x40 : 0; - - // a0-a2,d7: multiplexed inputs (active low) - return d6 | ((read_inputs(9) >> offset & 1) ? 0 : 0x80); + return (read_inputs(9) << (offset^7) & 0x80) ^ 0xff; } @@ -590,12 +261,11 @@ static ADDRESS_MAP_START( csc_map, AS_PROGRAM, 8, fidel6502_state ) ADDRESS_MAP_END -// SC12/6086 +// SC12 static ADDRESS_MAP_START( sc12_map, AS_PROGRAM, 8, fidel6502_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x0fff) AM_RAM - AM_RANGE(0x2000, 0x5fff) AM_READ(sc12_cart_r) AM_RANGE(0x6000, 0x6000) AM_MIRROR(0x1fff) AM_WRITE(sc12_control_w) AM_RANGE(0x8000, 0x9fff) AM_ROM AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x1ff8) AM_READ(sc12_input_r) @@ -604,11 +274,11 @@ static ADDRESS_MAP_START( sc12_map, AS_PROGRAM, 8, fidel6502_state ) ADDRESS_MAP_END -// 6080/6092/6093 (Excellence) +// FEV -static ADDRESS_MAP_START( fexcel_map, AS_PROGRAM, 8, fidel6502_state ) - AM_RANGE(0x0000, 0x1fff) AM_MIRROR(0x2000) AM_RAM - AM_RANGE(0x4000, 0x4007) AM_MIRROR(0x3ff8) AM_READWRITE(fexcel_ttl_r, fexcel_ttl_w) +static ADDRESS_MAP_START( fev_map, AS_PROGRAM, 8, fidel6502_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x1fff) AM_RAM AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -618,171 +288,197 @@ ADDRESS_MAP_END Input Ports ******************************************************************************/ -static INPUT_PORTS_START( sc12 ) +static INPUT_PORTS_START( csc ) PORT_START("IN.0") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a1") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a2") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a3") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a4") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a5") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a6") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a7") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square a8") + 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_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Speak") PORT_CODE(KEYCODE_SPACE) PORT_START("IN.1") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b1") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b2") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b3") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b4") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b5") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b6") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b7") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square b8") + 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_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RV") PORT_CODE(KEYCODE_V) PORT_START("IN.2") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c1") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c2") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c3") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c4") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c5") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c6") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c7") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square c8") + 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_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TM") PORT_CODE(KEYCODE_T) PORT_START("IN.3") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d1") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d2") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d3") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d4") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d5") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d6") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d7") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square d8") + 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_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L) // level PORT_START("IN.4") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e1") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e2") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e3") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e4") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e5") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e6") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e7") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square e8") + 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_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("DM") PORT_CODE(KEYCODE_M) PORT_START("IN.5") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f1") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f2") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f3") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f4") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f5") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f6") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f7") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square f8") + 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_BIT(0x100,IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ST") PORT_CODE(KEYCODE_S) PORT_START("IN.6") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g1") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g2") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g3") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g4") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g5") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g6") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g7") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square g8") + 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_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) PORT_START("IN.7") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h1") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h2") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h3") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h4") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h5") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h6") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h7") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Square h8") + 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_BIT(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) PORT_START("IN.8") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("RV/Pawn") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("DM/Knight") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("TB/Bishop") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("LV/Rook") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("PV/Queen") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("PB/King") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("CL") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("RE") -INPUT_PORTS_END - -static INPUT_PORTS_START( fexcel ) - PORT_INCLUDE( sc12 ) - - PORT_MODIFY("IN.8") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Clear") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Move/Pawn") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Hint/Knight") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Take Back/Bishop") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Level/Rook") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Options/Queen") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Verify/King") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Pawn") PORT_CODE(KEYCODE_1) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Rook") PORT_CODE(KEYCODE_2) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Knight") PORT_CODE(KEYCODE_3) + 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(0x100,IP_ACTIVE_HIGH, IPT_UNUSED) PORT_UNUSED INPUT_PORTS_END -static INPUT_PORTS_START( fexcelv ) - PORT_INCLUDE( fexcel ) - - PORT_START("IN.9") - PORT_CONFNAME( 0x03, 0x00, "Language" ) PORT_CHANGED_MEMBER(DEVICE_SELF, fidel6502_state, fexcelv_bankswitch, 0) - PORT_CONFSETTING( 0x00, "English" ) - PORT_CONFSETTING( 0x01, "German" ) - PORT_CONFSETTING( 0x02, "French" ) - PORT_CONFSETTING( 0x03, "Spanish" ) - PORT_BIT(0x7c, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_SPECIAL) PORT_READ_LINE_DEVICE_MEMBER("speech", s14001a_device, busy_r) -INPUT_PORTS_END - - -static INPUT_PORTS_START( csc ) - PORT_INCLUDE( sc12 ) - - PORT_MODIFY("IN.0") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Speaker") - - PORT_MODIFY("IN.1") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("RV") +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_MODIFY("IN.2") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("TM") + 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_MODIFY("IN.3") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("LV") + 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_MODIFY("IN.4") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("DM") + 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_MODIFY("IN.5") - PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("ST") + 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_MODIFY("IN.8") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Pawn") - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Rook") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Knight") - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Bishop") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Queen") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("King") + 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.9") // hardwired - PORT_CONFNAME( 0x01, 0x00, "Language" ) - PORT_CONFSETTING( 0x00, "English" ) - PORT_CONFSETTING( 0x01, "Other" ) - PORT_CONFNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) - PORT_CONFSETTING( 0x02, DEF_STR( On ) ) -INPUT_PORTS_END + 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) -static INPUT_PORTS_START( cscg ) - PORT_INCLUDE( csc ) + 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_MODIFY("IN.9") - PORT_CONFNAME( 0x01, 0x01, "Language" ) - PORT_CONFSETTING( 0x00, "English" ) - PORT_CONFSETTING( 0x01, "Other" ) + 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 @@ -814,7 +510,7 @@ static MACHINE_CONFIG_START( csc, fidel6502_state ) MCFG_PIA_CB2_HANDLER(WRITELINE(fidel6502_state, csc_pia1_cb2_w)) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) - MCFG_DEFAULT_LAYOUT(layout_fidel_csc) + MCFG_DEFAULT_LAYOUT(layout_fidel_vsc) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -831,9 +527,8 @@ static MACHINE_CONFIG_START( sc12, fidel6502_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", R65C02, XTAL_4MHz) MCFG_CPU_PROGRAM_MAP(sc12_map) - MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_on", fidel6502_state, irq_on, attotime::from_hz(780)) // from 556 timer - MCFG_TIMER_START_DELAY(attotime::from_hz(780) - attotime::from_nsec(15250)) // active for 15.25us - MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_off", fidel6502_state, irq_off, attotime::from_hz(780)) + 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_DEFAULT_LAYOUT(layout_fidel_sc12) @@ -842,37 +537,21 @@ static MACHINE_CONFIG_START( sc12, fidel6502_state ) 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(fidelz80base_state, scc_cartridge) - MCFG_SOFTWARE_LIST_ADD("cart_list", "fidel_scc") MACHINE_CONFIG_END -static MACHINE_CONFIG_START( fexcel, fidel6502_state ) +static MACHINE_CONFIG_START( fev, fidel6502_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M65SC02, XTAL_12MHz/4) // G65SC102P-3, 12.0M ceramic resonator - MCFG_CPU_PROGRAM_MAP(fexcel_map) - MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_on", fidel6502_state, irq_on, attotime::from_hz(780)) // from 556 timer, PCB photo suggests it's same as sc12 - MCFG_TIMER_START_DELAY(attotime::from_hz(780) - attotime::from_nsec(15250)) // active for 15.25us - MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_off", fidel6502_state, irq_off, attotime::from_hz(780)) + MCFG_CPU_ADD("maincpu", M65SC02, XTAL_3MHz) // M65SC102 (CMD) + MCFG_CPU_PROGRAM_MAP(fev_map) MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", fidelz80base_state, display_decay_tick, attotime::from_msec(1)) MCFG_DEFAULT_LAYOUT(layout_fidel_fev) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) -MACHINE_CONFIG_END - -static MACHINE_CONFIG_DERIVED( fexcelv, fexcel ) - - /* sound hardware */ MCFG_SOUND_ADD("speech", S14001A, 25000) // R/C circuit, around 25khz - MCFG_S14001A_EXT_READ_HANDLER(READ8(fidel6502_state, fexcelv_speech_r)) + MCFG_S14001A_EXT_READ_HANDLER(READ8(fidel6502_state, csc_speech_r)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) MACHINE_CONFIG_END @@ -895,43 +574,6 @@ ROM_START( csc ) ROM_RELOAD( 0x1000, 0x1000) ROM_END -ROM_START( cscsp ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) ) - ROM_LOAD("1025a03.bin", 0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c) ) - ROM_LOAD("1025a02.bin", 0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0) ) - ROM_LOAD("1025a01.bin", 0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b) ) - ROM_LOAD("74s474.bin", 0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456) ) - - ROM_REGION( 0x2000, "speech", 0 ) - ROM_LOAD("vcc-spanish.bin", 0x0000, 0x2000, BAD_DUMP CRC(8766e128) SHA1(78c7413bf240159720b131ab70bfbdf4e86eb1e9) ) // taken from vcc/fexcelv, assume correct -ROM_END - -ROM_START( cscg ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) ) - ROM_LOAD("1025a03.bin", 0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c) ) - ROM_LOAD("1025a02.bin", 0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0) ) - ROM_LOAD("1025a01.bin", 0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b) ) - ROM_LOAD("74s474.bin", 0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456) ) - - ROM_REGION( 0x2000, "speech", 0 ) - ROM_LOAD("vcc-german.bin", 0x0000, 0x2000, BAD_DUMP CRC(6c85e310) SHA1(20d1d6543c1e6a1f04184a2df2a468f33faec3ff) ) // taken from fexcelv, assume correct -ROM_END - -ROM_START( cscfr ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("101-64109.bin", 0x2000, 0x2000, CRC(08a3577c) SHA1(69fe379d21a9d4b57c84c3832d7b3e7431eec341) ) - ROM_LOAD("1025a03.bin", 0xa000, 0x2000, CRC(63982c07) SHA1(5ed4356323d5c80df216da55994abe94ba4aa94c) ) - ROM_LOAD("1025a02.bin", 0xc000, 0x2000, CRC(9e6e7c69) SHA1(4f1ed9141b6596f4d2b1217d7a4ba48229f3f1b0) ) - ROM_LOAD("1025a01.bin", 0xe000, 0x2000, CRC(57f068c3) SHA1(7d2ac4b9a2fba19556782863bdd89e2d2d94e97b) ) - ROM_LOAD("74s474.bin", 0xfe00, 0x0200, CRC(4511ba31) SHA1(e275b1739f8c3aa445cccb6a2b597475f507e456) ) - - ROM_REGION( 0x2000, "speech", 0 ) - ROM_LOAD("vcc-french.bin", 0x0000, 0x2000, BAD_DUMP CRC(fe8c5c18) SHA1(2b64279ab3747ee81c86963c13e78321c6cfa3a3) ) // taken from fexcelv, assume correct -ROM_END - - ROM_START( fscc12 ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("101-1068a01", 0x8000, 0x2000, CRC(63c76cdd) SHA1(e0771c98d4483a6b1620791cb99a7e46b0db95c4) ) // SSS SCM23C65E4 @@ -939,33 +581,21 @@ ROM_START( fscc12 ) ROM_LOAD("tmm2764d-2", 0xe000, 0x2000, CRC(183d3edc) SHA1(3296a4c3bce5209587d4a1694fce153558544e63) ) // Toshiba TMM2764D-2 ROM_END - -ROM_START( fexcel ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) // same as fexcelv -ROM_END - ROM_START( fexcelv ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) // PCB1, M27256 + ROM_LOAD("101-1080a01.ic5", 0x8000, 0x8000, CRC(846f8e40) SHA1(4e1d5b08d5ff3422192b54fa82cb3f505a69a971) ) ROM_REGION( 0x8000, "speech", 0 ) - ROM_LOAD("101-1081a01.ic2", 0x0000, 0x8000, CRC(c8ae1607) SHA1(6491ce6be60ed77f3dd931c0ca17616f13af943e) ) // PCB2, M27256 + ROM_LOAD("101-1081a01.ic2", 0x0000, 0x8000, CRC(c8ae1607) SHA1(6491ce6be60ed77f3dd931c0ca17616f13af943e) ) ROM_END - - /****************************************************************************** Drivers ******************************************************************************/ -/* 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 (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -COMP( 1981, cscsp, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (Spanish)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -COMP( 1981, cscg, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -COMP( 1981, cscfr, csc, 0, csc, cscg, driver_device, 0, "Fidelity Electronics", "Champion Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +/* 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( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_NOT_WORKING ) -COMP( 1987, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "Excellence (model 6080/6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -COMP( 1987, fexcelv, 0, 0, fexcelv, fexcelv, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1987, fexcelv, 0, 0, fev, csc, driver_device, 0, "Fidelity Electronics", "Voice Excellence", MACHINE_NOT_WORKING ) |