mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +03:00
novag*: refactor diablo,delta1,presto (nw)
This commit is contained in:
parent
1983c113ae
commit
24da0f87e2
@ -2,6 +2,15 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger
|
// thanks-to:Berger
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* cking_master.cpp, subdriver of ckingbase.cpp
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
- 1 WAIT CLK per M1, workaround with z80_set_cycle_tables is possible
|
||||||
|
(wait state is similar to MSX) but I can't be bothered, better solution
|
||||||
|
is to add M1 pin to the z80 core. Until then, it'll run ~20% too fast.
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Master: (yes, it's plainly named "Master")
|
Master: (yes, it's plainly named "Master")
|
||||||
- Z80 CPU(NEC D780C-1) @ 4MHz(8MHz XTAL), IRQ from 555 timer
|
- Z80 CPU(NEC D780C-1) @ 4MHz(8MHz XTAL), IRQ from 555 timer
|
||||||
@ -9,11 +18,6 @@ Master: (yes, it's plainly named "Master")
|
|||||||
- simple I/O via 2*74373 and a 74145
|
- simple I/O via 2*74373 and a 74145
|
||||||
- 8*8 chessboard buttons, 32+1 border leds, piezo
|
- 8*8 chessboard buttons, 32+1 border leds, piezo
|
||||||
|
|
||||||
TODO:
|
|
||||||
- 1 WAIT CLK per M1, workaround with z80_set_cycle_tables is possible
|
|
||||||
(wait state is similar to MSX) but I can't be bothered, better solution
|
|
||||||
is to add M1 pin to the z80 core. Until then, it'll run ~20% too fast.
|
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger
|
// thanks-to:Berger
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* cxg_ch2001.cpp, subdriver of cxgbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Chess 2001:
|
Chess 2001:
|
||||||
- Zilog Z8400APS @ 4 MHz (8MHz XTAL)
|
- Zilog Z8400APS @ 4 MHz (8MHz XTAL)
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:yoyo_chessboard
|
// thanks-to:yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_as12.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Fidelity Elegance Chess Challenger (AS12)
|
Fidelity Elegance Chess Challenger (AS12)
|
||||||
----------------
|
----------------
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
|
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_card.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
Fidelity electronic card games
|
Fidelity electronic card games
|
||||||
- *Bridge Challenger (BRC)
|
- *Bridge Challenger (BRC)
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
// copyright-holders:Jonathan Gevaryahu,Sandro Ronco,hap
|
// copyright-holders:Jonathan Gevaryahu,Sandro Ronco,hap
|
||||||
// thanks-to:Berger
|
// thanks-to:Berger
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_cc10.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Fidelity Chess Challenger 10 (CCX)
|
Fidelity Chess Challenger 10 (CCX)
|
||||||
-------------------
|
-------------------
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger
|
// thanks-to:Berger
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_cc7.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Fidelity Chess Challenger 7 (BCC)
|
Fidelity Chess Challenger 7 (BCC)
|
||||||
------------------------
|
------------------------
|
||||||
|
@ -2,11 +2,14 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:yoyo_chessboard
|
// thanks-to:yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_chesster.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Fidelity Chesster (model 6120)
|
Fidelity Chesster (model 6120)
|
||||||
There is also a German version titled Kishon Chesster (model 6120G, or 6127)
|
There is also a German version titled Kishon Chesster (model 6120G, or 6127)
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
8*(8+1) buttons, 8+8+1 LEDs
|
8*(8+1) buttons, 8+8+1 LEDs
|
||||||
8KB RAM(UM6264-12), 32KB ROM(M27C256B)
|
8KB RAM(UM6264-12), 32KB ROM(M27C256B)
|
||||||
Ricoh RP65C02G CPU, 5MHz XTAL
|
Ricoh RP65C02G CPU, 5MHz XTAL
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
|
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
|
||||||
// thanks-to:Berger,yoyo_chessboard
|
// thanks-to:Berger,yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_csc.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
Fidelity CSC(and derived) hardware
|
Fidelity CSC(and derived) hardware
|
||||||
- Champion Sensory Chess Challenger
|
- Champion Sensory Chess Challenger
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:yoyo_chessboard
|
// thanks-to:yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_dames.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Fidelity Dame Sensory Challenger (DSC)
|
Fidelity Dame Sensory Challenger (DSC)
|
||||||
It's a checkers game for once instead of chess
|
It's a checkers game for once instead of chess
|
||||||
|
@ -2,8 +2,11 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger,yoyo_chessboard
|
// thanks-to:Berger,yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_desdis.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
Fidelity Designer Display series (6502-based displayless Designer is in fidel_excel.cpp)
|
Fidelity Designer Display series, 6502 and 68000
|
||||||
|
(6502-based displayless Designer is in fidel_excel.cpp)
|
||||||
|
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger,yoyo_chessboard
|
// thanks-to:Berger,yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_eag68k.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
Fidelity 68000-based Elite Avant Garde driver
|
Fidelity 68000-based Elite Avant Garde driver
|
||||||
For 6502-based EAG, see fidel_elite.cpp
|
For 6502-based EAG, see fidel_elite.cpp
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger
|
// thanks-to:Berger
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_elite.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
Fidelity Elite A/S series hardware (EAS, EAG, PC)
|
Fidelity Elite A/S series hardware (EAS, EAG, PC)
|
||||||
see fidel_eag68k.cpp for 68000-based EAG hardware
|
see fidel_eag68k.cpp for 68000-based EAG hardware
|
||||||
|
@ -2,8 +2,11 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger,yoyo_chessboard
|
// thanks-to:Berger,yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_vsc.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
Fidelity Excellence series hardware (for Excel 68000, see fidel_eag68k.cpp)
|
Fidelity Excellence series hardware
|
||||||
|
(for Excel 68000, see fidel_eag68k.cpp)
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- granits gives error beeps at start, need to press clear to play
|
- granits gives error beeps at start, need to press clear to play
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
Fidelity Phantom Chess Challenger
|
* fidel_phantom.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- everything
|
- everything, this is a skeleton driver
|
||||||
|
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger,yoyo_chessboard
|
// thanks-to:Berger,yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_sc12.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Fidelity Sensory 12 Chess Challenger (SC12-B, 6086)
|
Fidelity Sensory 12 Chess Challenger (SC12-B, 6086)
|
||||||
4 versions are known to exist: A,B,C, and X, with increasing CPU speed.
|
4 versions are known to exist: A,B,C, and X, with increasing CPU speed.
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:yoyo_chessboard
|
// thanks-to:yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_sc6.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Fidelity Sensory Chess Challenger 6 (model SC6):
|
Fidelity Sensory Chess Challenger 6 (model SC6):
|
||||||
- PCB label 510-1045B01
|
- PCB label 510-1045B01
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:yoyo_chessboard
|
// thanks-to:yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_sc8.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Fidelity Sensory Chess Challenger 8
|
Fidelity Sensory Chess Challenger 8
|
||||||
---------------
|
---------------
|
||||||
|
@ -2,6 +2,10 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger,yoyo_chessboard
|
// thanks-to:Berger,yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_sc9.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Fidelity Sensory Chess Challenger "9" (SC9)
|
Fidelity Sensory Chess Challenger "9" (SC9)
|
||||||
3 versions were available, the newest "B" version was 2MHz and included the Budapest program.
|
3 versions were available, the newest "B" version was 2MHz and included the Budapest program.
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
|
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_vcc.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
Fidelity Voice Chess Challenger series hardware
|
Fidelity Voice Chess Challenger series hardware
|
||||||
- Voice Chess Challenger (VCC) (version A and B?)
|
- Voice Chess Challenger (VCC) (version A and B?)
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
|
// copyright-holders:Kevin Horton,Jonathan Gevaryahu,Sandro Ronco,hap
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* fidel_vsc.cpp, subdriver of fidelbase.cpp
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
|
||||||
Fidelity Voice Sensory Chess Challenger (VSC)
|
Fidelity Voice Sensory Chess Challenger (VSC)
|
||||||
---------------------------------------------
|
---------------------------------------------
|
||||||
|
@ -2,20 +2,20 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger
|
// thanks-to:Berger
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* novag_delta1.cpp, subdriver of novagbase.cpp
|
||||||
|
|
||||||
Novag generic F8 based chess computer driver
|
TODO:
|
||||||
|
- ccdelta1 doesn't work, goes bonkers when you press Enter. CPU core bug?
|
||||||
TODO:
|
I suspect related to interrupts
|
||||||
- ccdelta1 doesn't work, goes bonkers when you press Enter. CPU core bug?
|
|
||||||
- hardware is similar to MK I, the drivers can be merged in theory.
|
|
||||||
But I prefer my source code to be licensed BSD3, mk1.cpp is GPL2.
|
|
||||||
|
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
Delta-1:
|
Delta-1
|
||||||
- 3850PK CPU at ~2MHz, 3853PK memory interface
|
------------
|
||||||
- 4KB ROM(2332A), 256 bytes RAM(2*2111A-4)
|
3850PK CPU at ~2MHz, 3853PK memory interface
|
||||||
- 4-digit 7seg panel, no sound, no chessboard
|
4KB ROM(2332A), 256 bytes RAM(2*2111A-4)
|
||||||
|
4-digit 7seg panel, no sound, no chessboard
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
@ -29,53 +29,50 @@ Delta-1:
|
|||||||
#include "novag_delta1.lh"
|
#include "novag_delta1.lh"
|
||||||
|
|
||||||
|
|
||||||
class novagf8_state : public novagbase_state
|
namespace {
|
||||||
|
|
||||||
|
class delta1_state : public novagbase_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
novagf8_state(const machine_config &mconfig, device_type type, const char *tag) :
|
delta1_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
novagbase_state(mconfig, type, tag)
|
novagbase_state(mconfig, type, tag)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void delta1(machine_config &config);
|
void delta1(machine_config &config);
|
||||||
|
|
||||||
DECLARE_INPUT_CHANGED_MEMBER(reset_button);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
u8 m_io[2]; // F8 CPU I/O ports
|
// address maps
|
||||||
|
void main_map(address_map &map);
|
||||||
|
void main_io(address_map &map);
|
||||||
|
|
||||||
// Delta-1
|
// I/O handlers
|
||||||
DECLARE_WRITE8_MEMBER(delta1_io0_w);
|
DECLARE_WRITE8_MEMBER(io0_w);
|
||||||
DECLARE_WRITE8_MEMBER(delta1_io1_w);
|
DECLARE_WRITE8_MEMBER(io1_w);
|
||||||
DECLARE_READ8_MEMBER(delta1_io0_r);
|
DECLARE_READ8_MEMBER(io0_r);
|
||||||
DECLARE_READ8_MEMBER(delta1_io1_r);
|
DECLARE_READ8_MEMBER(io1_r);
|
||||||
void delta1_io(address_map &map);
|
|
||||||
void delta1_map(address_map &map);
|
u8 m_io[2]; // F8 CPU I/O ports
|
||||||
|
|
||||||
virtual void machine_start() override;
|
virtual void machine_start() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
void novagf8_state::machine_start()
|
void delta1_state::machine_start()
|
||||||
{
|
{
|
||||||
novagbase_state::machine_start();
|
novagbase_state::machine_start();
|
||||||
|
|
||||||
// zerofill
|
// zerofill/register for savestates
|
||||||
memset(m_io, 0, sizeof(m_io));
|
memset(m_io, 0, sizeof(m_io));
|
||||||
|
|
||||||
// register for savestates
|
|
||||||
save_item(NAME(m_io));
|
save_item(NAME(m_io));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Devices, I/O
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Delta-1
|
Devices, I/O
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// CPU I/O ports
|
// CPU I/O ports
|
||||||
|
|
||||||
WRITE8_MEMBER(novagf8_state::delta1_io0_w)
|
WRITE8_MEMBER(delta1_state::io0_w)
|
||||||
{
|
{
|
||||||
m_io[0] = data;
|
m_io[0] = data;
|
||||||
|
|
||||||
@ -90,13 +87,13 @@ WRITE8_MEMBER(novagf8_state::delta1_io0_w)
|
|||||||
display_matrix(7, 4, m_led_data, sel >> 4);
|
display_matrix(7, 4, m_led_data, sel >> 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER(novagf8_state::delta1_io0_r)
|
READ8_MEMBER(delta1_state::io0_r)
|
||||||
{
|
{
|
||||||
// IO04-07: multiplexed inputs
|
// IO04-07: multiplexed inputs
|
||||||
return read_inputs(5) << 4 | m_io[0];
|
return read_inputs(5) << 4 | m_io[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(novagf8_state::delta1_io1_w)
|
WRITE8_MEMBER(delta1_state::io1_w)
|
||||||
{
|
{
|
||||||
m_io[1] = data;
|
m_io[1] = data;
|
||||||
|
|
||||||
@ -106,7 +103,7 @@ WRITE8_MEMBER(novagf8_state::delta1_io1_w)
|
|||||||
m_led_data = bitswap<7>(data, 0,1,2,3,4,5,6);
|
m_led_data = bitswap<7>(data, 0,1,2,3,4,5,6);
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER(novagf8_state::delta1_io1_r)
|
READ8_MEMBER(delta1_state::io1_r)
|
||||||
{
|
{
|
||||||
// unused?
|
// unused?
|
||||||
return m_io[1];
|
return m_io[1];
|
||||||
@ -118,19 +115,17 @@ READ8_MEMBER(novagf8_state::delta1_io1_r)
|
|||||||
Address Maps
|
Address Maps
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// Delta-1
|
void delta1_state::main_map(address_map &map)
|
||||||
|
|
||||||
void novagf8_state::delta1_map(address_map &map)
|
|
||||||
{
|
{
|
||||||
map.global_mask(0x3fff);
|
map.global_mask(0x3fff);
|
||||||
map(0x0000, 0x0fff).mirror(0x1000).rom(); // _A13
|
map(0x0000, 0x0fff).mirror(0x1000).rom(); // _A13
|
||||||
map(0x2000, 0x20ff).mirror(0x1f00).ram(); // A13
|
map(0x2000, 0x20ff).mirror(0x1f00).ram(); // A13
|
||||||
}
|
}
|
||||||
|
|
||||||
void novagf8_state::delta1_io(address_map &map)
|
void delta1_state::main_io(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x0, 0x0).rw(FUNC(novagf8_state::delta1_io0_r), FUNC(novagf8_state::delta1_io0_w));
|
map(0x0, 0x0).rw(FUNC(delta1_state::io0_r), FUNC(delta1_state::io0_w));
|
||||||
map(0x1, 0x1).rw(FUNC(novagf8_state::delta1_io1_r), FUNC(novagf8_state::delta1_io1_w));
|
map(0x1, 0x1).rw(FUNC(delta1_state::io1_r), FUNC(delta1_state::io1_w));
|
||||||
map(0xc, 0xf).rw("f3853", FUNC(f3853_device::read), FUNC(f3853_device::write));
|
map(0xc, 0xf).rw("f3853", FUNC(f3853_device::read), FUNC(f3853_device::write));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,12 +135,6 @@ void novagf8_state::delta1_io(address_map &map)
|
|||||||
Input Ports
|
Input Ports
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
INPUT_CHANGED_MEMBER(novagf8_state::reset_button)
|
|
||||||
{
|
|
||||||
// wired directly to CPU reset pin
|
|
||||||
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
|
|
||||||
}
|
|
||||||
|
|
||||||
static INPUT_PORTS_START( delta1 )
|
static INPUT_PORTS_START( delta1 )
|
||||||
PORT_START("IN.0")
|
PORT_START("IN.0")
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Time Set")
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Time Set")
|
||||||
@ -176,7 +165,7 @@ static INPUT_PORTS_START( delta1 )
|
|||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
|
||||||
|
|
||||||
PORT_START("RESET") // not on matrix
|
PORT_START("RESET") // not on matrix
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CHANGED_MEMBER(DEVICE_SELF, novagf8_state, reset_button, nullptr) PORT_NAME("New Game")
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CHANGED_MEMBER(DEVICE_SELF, delta1_state, reset_button, nullptr) PORT_NAME("New Game")
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
@ -185,20 +174,20 @@ INPUT_PORTS_END
|
|||||||
Machine Drivers
|
Machine Drivers
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
MACHINE_CONFIG_START(novagf8_state::delta1)
|
void delta1_state::delta1(machine_config &config)
|
||||||
|
{
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_DEVICE_ADD("maincpu", F8, 2000000) // LC circuit, measured 2MHz
|
F8(config, m_maincpu, 2000000); // LC circuit, measured 2MHz
|
||||||
MCFG_DEVICE_PROGRAM_MAP(delta1_map)
|
m_maincpu->set_addrmap(AS_PROGRAM, &delta1_state::main_map);
|
||||||
MCFG_DEVICE_IO_MAP(delta1_io)
|
m_maincpu->set_addrmap(AS_IO, &delta1_state::main_io);
|
||||||
MCFG_DEVICE_IRQ_ACKNOWLEDGE_DEVICE("f3853", f3853_device, int_acknowledge)
|
m_maincpu->set_irq_acknowledge_callback("f3853", FUNC(f3853_device::int_acknowledge));
|
||||||
|
|
||||||
f3853_device &f3853(F3853(config, "f3853", 2000000));
|
f3853_device &f3853(F3853(config, "f3853", 2000000));
|
||||||
f3853.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ);
|
f3853.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ);
|
||||||
|
|
||||||
TIMER(config, "display_decay").configure_periodic(FUNC(novagf8_state::display_decay_tick), attotime::from_msec(1));
|
TIMER(config, "display_decay").configure_periodic(FUNC(delta1_state::display_decay_tick), attotime::from_msec(1));
|
||||||
config.set_default_layout(layout_novag_delta1);
|
config.set_default_layout(layout_novag_delta1);
|
||||||
MACHINE_CONFIG_END
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -211,11 +200,13 @@ ROM_START( ccdelta1 )
|
|||||||
ROM_LOAD("ma_winke_y1d", 0x0000, 0x1000, CRC(ddc04aca) SHA1(bbf334c82bc89b2f131f5a50f0a617bc3bc4c329) ) // 2332a
|
ROM_LOAD("ma_winke_y1d", 0x0000, 0x1000, CRC(ddc04aca) SHA1(bbf334c82bc89b2f131f5a50f0a617bc3bc4c329) ) // 2332a
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Drivers
|
Drivers
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
|
||||||
CONS( 1979, ccdelta1, 0, 0, delta1, delta1, novagf8_state, empty_init, "Novag", "Chess Champion: Delta-1", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING )
|
CONS( 1979, ccdelta1, 0, 0, delta1, delta1, delta1_state, empty_init, "Novag", "Chess Champion: Delta-1", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING )
|
||||||
|
@ -2,25 +2,21 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:yoyo_chessboard
|
// thanks-to:yoyo_chessboard
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* novag_diablo.cpp, subdriver of novagbase.cpp
|
||||||
|
|
||||||
Novag generic 68000 based chess computer driver
|
TODO:
|
||||||
|
- RS232 port (when connected, I'm only getting "New Game")
|
||||||
NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
|
|
||||||
greatly affecting user playability of emulated electronic board games.
|
|
||||||
As workaround for the chess games, use an external chess GUI on the side,
|
|
||||||
such as Arena(in editmode).
|
|
||||||
|
|
||||||
TODO:
|
|
||||||
- RS232 port (when connected, I'm only getting "New Game")
|
|
||||||
|
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
Diablo 68000:
|
Diablo 68000
|
||||||
- M68000 @ 16MHz, IPL1 256Hz, IPL2 from ACIA IRQ(always high)
|
----------------
|
||||||
- 2*8KB RAM TC5565 battery-backed, 2*32KB hashtable RAM TC55257 3*32KB ROM
|
M68000 @ 16MHz, IPL1 256Hz, IPL2 from ACIA IRQ(always high)
|
||||||
- HD44780 LCD controller (16x1)
|
2*8KB RAM TC5565 battery-backed, 2*32KB hashtable RAM TC55257 3*32KB ROM
|
||||||
- R65C51P2 ACIA @ 1.8432MHz, RS232
|
HD44780 LCD controller (16x1)
|
||||||
- magnetic sensors, 8*8 chessboard leds
|
R65C51P2 ACIA @ 1.8432MHz, RS232
|
||||||
|
magnetic sensors, 8*8 chessboard leds
|
||||||
|
|
||||||
Scorpio 68000 hardware is very similar, but with chessboard buttons and side leds.
|
Scorpio 68000 hardware is very similar, but with chessboard buttons and side leds.
|
||||||
|
|
||||||
@ -40,41 +36,40 @@ Scorpio 68000 hardware is very similar, but with chessboard buttons and side led
|
|||||||
#include "novag_scorpio68k.lh" // clickable
|
#include "novag_scorpio68k.lh" // clickable
|
||||||
|
|
||||||
|
|
||||||
class novag68k_state : public novagbase_state
|
namespace {
|
||||||
|
|
||||||
|
class diablo_state : public novagbase_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
novag68k_state(const machine_config &mconfig, device_type type, const char *tag) :
|
diablo_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
novagbase_state(mconfig, type, tag)
|
novagbase_state(mconfig, type, tag)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
// machine drivers
|
||||||
void diablo68k(machine_config &config);
|
void diablo68k(machine_config &config);
|
||||||
void scorpio68k(machine_config &config);
|
void scorpio68k(machine_config &config);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Diablo 68000
|
// address maps
|
||||||
DECLARE_WRITE8_MEMBER(diablo68k_control_w);
|
|
||||||
DECLARE_WRITE8_MEMBER(diablo68k_lcd_data_w);
|
|
||||||
DECLARE_WRITE8_MEMBER(diablo68k_leds_w);
|
|
||||||
DECLARE_READ8_MEMBER(diablo68k_input1_r);
|
|
||||||
DECLARE_READ8_MEMBER(diablo68k_input2_r);
|
|
||||||
void diablo68k_map(address_map &map);
|
void diablo68k_map(address_map &map);
|
||||||
|
|
||||||
// Scorpio 68000
|
|
||||||
DECLARE_WRITE8_MEMBER(scorpio68k_control_w);
|
|
||||||
void scorpio68k_map(address_map &map);
|
void scorpio68k_map(address_map &map);
|
||||||
|
|
||||||
|
// I/O handlers
|
||||||
|
DECLARE_WRITE8_MEMBER(control_w);
|
||||||
|
DECLARE_WRITE8_MEMBER(lcd_data_w);
|
||||||
|
DECLARE_WRITE8_MEMBER(leds_w);
|
||||||
|
DECLARE_READ8_MEMBER(input1_r);
|
||||||
|
DECLARE_READ8_MEMBER(input2_r);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Devices, I/O
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Diablo 68000
|
Devices, I/O
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// TTL
|
// TTL
|
||||||
|
|
||||||
WRITE8_MEMBER(novag68k_state::diablo68k_control_w)
|
WRITE8_MEMBER(diablo_state::control_w)
|
||||||
{
|
{
|
||||||
// d0: HD44780 E
|
// d0: HD44780 E
|
||||||
// d1: HD44780 RS
|
// d1: HD44780 RS
|
||||||
@ -85,31 +80,34 @@ WRITE8_MEMBER(novag68k_state::diablo68k_control_w)
|
|||||||
// d7: enable beeper
|
// d7: enable beeper
|
||||||
m_beeper->set_state(data >> 7 & 1);
|
m_beeper->set_state(data >> 7 & 1);
|
||||||
|
|
||||||
|
// d2,d3: side leds(scorpio)
|
||||||
|
u8 leds2 = ~data >> 2 & 3;
|
||||||
|
|
||||||
// d4-d6: input mux, led select
|
// d4-d6: input mux, led select
|
||||||
m_inp_mux = 1 << (data >> 4 & 0x7) & 0xff;
|
m_inp_mux = 1 << (data >> 4 & 0x7) & 0xff;
|
||||||
display_matrix(8, 8, m_led_data, m_inp_mux);
|
display_matrix(8+2, 8, m_led_data | leds2 << 8, m_inp_mux);
|
||||||
m_led_data = 0; // ?
|
m_led_data = 0; // ?
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(novag68k_state::diablo68k_lcd_data_w)
|
WRITE8_MEMBER(diablo_state::lcd_data_w)
|
||||||
{
|
{
|
||||||
// d0-d7: HD44780 data
|
// d0-d7: HD44780 data
|
||||||
m_lcd_data = data;
|
m_lcd_data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(novag68k_state::diablo68k_leds_w)
|
WRITE8_MEMBER(diablo_state::leds_w)
|
||||||
{
|
{
|
||||||
// d0-d7: chessboard leds
|
// d0-d7: chessboard leds
|
||||||
m_led_data = data;
|
m_led_data = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER(novag68k_state::diablo68k_input1_r)
|
READ8_MEMBER(diablo_state::input1_r)
|
||||||
{
|
{
|
||||||
// d0-d7: multiplexed inputs (chessboard squares)
|
// d0-d7: multiplexed inputs (chessboard squares)
|
||||||
return ~read_inputs(8) & 0xff;
|
return ~read_inputs(8) & 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER(novag68k_state::diablo68k_input2_r)
|
READ8_MEMBER(diablo_state::input2_r)
|
||||||
{
|
{
|
||||||
// d0-d2: multiplexed inputs (side panel)
|
// d0-d2: multiplexed inputs (side panel)
|
||||||
// other: ?
|
// other: ?
|
||||||
@ -118,43 +116,28 @@ READ8_MEMBER(novag68k_state::diablo68k_input2_r)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
Scorpio 68000
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
WRITE8_MEMBER(novag68k_state::scorpio68k_control_w)
|
|
||||||
{
|
|
||||||
// d2,d3: led data, rest same as diablo
|
|
||||||
m_led_data = ~data >> 2 & 3;
|
|
||||||
diablo68k_control_w(space, offset, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Address Maps
|
Address Maps
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// Diablo 68000 / Scorpio 68000
|
void diablo_state::diablo68k_map(address_map &map)
|
||||||
|
|
||||||
void novag68k_state::diablo68k_map(address_map &map)
|
|
||||||
{
|
{
|
||||||
map(0x000000, 0x00ffff).rom();
|
map(0x000000, 0x00ffff).rom();
|
||||||
map(0x200000, 0x20ffff).rom().region("maincpu", 0x10000);
|
map(0x200000, 0x20ffff).rom().region("maincpu", 0x10000);
|
||||||
map(0x280000, 0x28ffff).ram();
|
map(0x280000, 0x28ffff).ram();
|
||||||
map(0x300000, 0x300007).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)).umask16(0xff00);
|
map(0x300000, 0x300007).rw("acia", FUNC(mos6551_device::read), FUNC(mos6551_device::write)).umask16(0xff00);
|
||||||
map(0x380000, 0x380001).nopr();
|
map(0x380000, 0x380001).nopr();
|
||||||
map(0x380000, 0x380000).w(FUNC(novag68k_state::diablo68k_leds_w));
|
map(0x380000, 0x380000).w(FUNC(diablo_state::leds_w));
|
||||||
map(0x3a0000, 0x3a0000).w(FUNC(novag68k_state::diablo68k_lcd_data_w));
|
map(0x3a0000, 0x3a0000).w(FUNC(diablo_state::lcd_data_w));
|
||||||
map(0x3c0000, 0x3c0000).rw(FUNC(novag68k_state::diablo68k_input2_r), FUNC(novag68k_state::diablo68k_control_w));
|
map(0x3c0000, 0x3c0000).rw(FUNC(diablo_state::input2_r), FUNC(diablo_state::control_w));
|
||||||
map(0x3e0000, 0x3e0000).r(FUNC(novag68k_state::diablo68k_input1_r));
|
map(0x3e0000, 0x3e0000).r(FUNC(diablo_state::input1_r));
|
||||||
map(0xff8000, 0xffbfff).ram().share("nvram");
|
map(0xff8000, 0xffbfff).ram().share("nvram");
|
||||||
}
|
}
|
||||||
|
|
||||||
void novag68k_state::scorpio68k_map(address_map &map)
|
void diablo_state::scorpio68k_map(address_map &map)
|
||||||
{
|
{
|
||||||
diablo68k_map(map);
|
diablo68k_map(map);
|
||||||
map(0x380000, 0x380000).w(FUNC(novag68k_state::scorpio68k_control_w));
|
map(0x380000, 0x380000).w(FUNC(diablo_state::control_w));
|
||||||
map(0x3c0000, 0x3c0001).nopw();
|
map(0x3c0000, 0x3c0001).nopw();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,16 +205,16 @@ INPUT_PORTS_END
|
|||||||
Machine Drivers
|
Machine Drivers
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
MACHINE_CONFIG_START(novag68k_state::diablo68k)
|
MACHINE_CONFIG_START(diablo_state::diablo68k)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_DEVICE_ADD("maincpu", M68000, 16_MHz_XTAL)
|
M68000(config, m_maincpu, 16_MHz_XTAL);
|
||||||
MCFG_DEVICE_PROGRAM_MAP(diablo68k_map)
|
m_maincpu->set_addrmap(AS_PROGRAM, &diablo_state::diablo68k_map);
|
||||||
|
|
||||||
const attotime irq_period = attotime::from_hz(32.768_kHz_XTAL/128); // 256Hz
|
const attotime irq_period = attotime::from_hz(32.768_kHz_XTAL/128); // 256Hz
|
||||||
TIMER(config, m_irq_on).configure_periodic(FUNC(novag68k_state::irq_on<M68K_IRQ_2>), irq_period);
|
TIMER(config, m_irq_on).configure_periodic(FUNC(diablo_state::irq_on<M68K_IRQ_2>), irq_period);
|
||||||
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1100)); // active for 1.1us
|
m_irq_on->set_start_delay(irq_period - attotime::from_nsec(1100)); // active for 1.1us
|
||||||
TIMER(config, "irq_off").configure_periodic(FUNC(novag68k_state::irq_off<M68K_IRQ_2>), irq_period);
|
TIMER(config, "irq_off").configure_periodic(FUNC(diablo_state::irq_off<M68K_IRQ_2>), irq_period);
|
||||||
|
|
||||||
mos6551_device &acia(MOS6551(config, "acia", 0));
|
mos6551_device &acia(MOS6551(config, "acia", 0));
|
||||||
acia.set_xtal(1.8432_MHz_XTAL);
|
acia.set_xtal(1.8432_MHz_XTAL);
|
||||||
@ -246,13 +229,13 @@ MACHINE_CONFIG_START(novag68k_state::diablo68k)
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0, 6*16, 0, 10-1)
|
MCFG_SCREEN_VISIBLE_AREA(0, 6*16, 0, 10-1)
|
||||||
MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update)
|
||||||
MCFG_SCREEN_PALETTE("palette")
|
MCFG_SCREEN_PALETTE("palette")
|
||||||
PALETTE(config, "palette", FUNC(novag68k_state::novag_lcd_palette), 3);
|
PALETTE(config, "palette", FUNC(diablo_state::novag_lcd_palette), 3);
|
||||||
|
|
||||||
HD44780(config, m_lcd, 0);
|
HD44780(config, m_lcd, 0);
|
||||||
m_lcd->set_lcd_size(2, 8);
|
m_lcd->set_lcd_size(2, 8);
|
||||||
m_lcd->set_pixel_update_cb(FUNC(novag68k_state::novag_lcd_pixel_update), this);
|
m_lcd->set_pixel_update_cb(FUNC(diablo_state::novag_lcd_pixel_update), this);
|
||||||
|
|
||||||
TIMER(config, "display_decay").configure_periodic(FUNC(novag68k_state::display_decay_tick), attotime::from_msec(1));
|
TIMER(config, "display_decay").configure_periodic(FUNC(diablo_state::display_decay_tick), attotime::from_msec(1));
|
||||||
config.set_default_layout(layout_novag_diablo68k);
|
config.set_default_layout(layout_novag_diablo68k);
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
@ -261,15 +244,14 @@ MACHINE_CONFIG_START(novag68k_state::diablo68k)
|
|||||||
m_beeper->add_route(ALL_OUTPUTS, "mono", 0.25);
|
m_beeper->add_route(ALL_OUTPUTS, "mono", 0.25);
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
MACHINE_CONFIG_START(novag68k_state::scorpio68k)
|
void diablo_state::scorpio68k(machine_config &config)
|
||||||
|
{
|
||||||
diablo68k(config);
|
diablo68k(config);
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_DEVICE_MODIFY("maincpu")
|
m_maincpu->set_addrmap(AS_PROGRAM, &diablo_state::scorpio68k_map);
|
||||||
MCFG_DEVICE_PROGRAM_MAP(scorpio68k_map)
|
|
||||||
|
|
||||||
config.set_default_layout(layout_novag_scorpio68k);
|
config.set_default_layout(layout_novag_scorpio68k);
|
||||||
MACHINE_CONFIG_END
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -292,12 +274,14 @@ ROM_START( scorpio68 )
|
|||||||
ROM_LOAD16_BYTE("502.u4", 0x10000, 0x8000, CRC(553a5c8c) SHA1(ccb5460ff10766a5ca8008ae2cffcff794318108) ) // no odd rom
|
ROM_LOAD16_BYTE("502.u4", 0x10000, 0x8000, CRC(553a5c8c) SHA1(ccb5460ff10766a5ca8008ae2cffcff794318108) ) // no odd rom
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Drivers
|
Drivers
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
// YEAR NAME PARENT CMP MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
|
||||||
CONS( 1991, diablo68, 0, 0, diablo68k, diablo68k, novag68k_state, empty_init, "Novag", "Diablo 68000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
CONS( 1991, diablo68, 0, 0, diablo68k, diablo68k, diablo_state, empty_init, "Novag", "Diablo 68000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||||
CONS( 1991, scorpio68, 0, 0, scorpio68k, scorpio68k, novag68k_state, empty_init, "Novag", "Scorpio 68000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
CONS( 1991, scorpio68, 0, 0, scorpio68k, scorpio68k, diablo_state, empty_init, "Novag", "Scorpio 68000", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||||
|
@ -2,26 +2,24 @@
|
|||||||
// copyright-holders:hap
|
// copyright-holders:hap
|
||||||
// thanks-to:Berger
|
// thanks-to:Berger
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
*
|
||||||
|
* novag_presto.cpp, subdriver of novagbase.cpp
|
||||||
|
|
||||||
Novag generic MCS-48 based chess computer driver
|
TODO:
|
||||||
|
- is presto led handling correct? mux data needs to be auto cleared
|
||||||
NOTE: MAME doesn't include a generalized implementation for boardpieces yet,
|
similar to diablo/sexpert
|
||||||
greatly affecting user playability of emulated electronic board games.
|
|
||||||
As workaround for the chess games, use an external chess GUI on the side,
|
|
||||||
such as Arena(in editmode).
|
|
||||||
|
|
||||||
TODO:
|
|
||||||
- is presto led handling correct? mux data needs to be auto cleared
|
|
||||||
similar to diablo/sexpert
|
|
||||||
|
|
||||||
*******************************************************************************
|
*******************************************************************************
|
||||||
|
|
||||||
Presto:
|
Presto
|
||||||
- NEC D80C49C MCU(serial 186), OSC from LC circuit measured ~6MHz
|
----------
|
||||||
- buzzer, 16+4 LEDs, 8*8 chessboard buttons
|
NEC D80C49C MCU(serial 186), OSC from LC circuit measured ~6MHz
|
||||||
|
buzzer, 16+4 LEDs, 8*8 chessboard buttons
|
||||||
|
|
||||||
|
Octo
|
||||||
|
----------
|
||||||
|
NEC D80C49HC MCU(serial 111), OSC from LC circuit measured ~12MHz
|
||||||
|
|
||||||
Octo:
|
|
||||||
- NEC D80C49HC MCU(serial 111), OSC from LC circuit measured ~12MHz
|
|
||||||
The buzzer has a little electronic circuit going on, not sure whatfor.
|
The buzzer has a little electronic circuit going on, not sure whatfor.
|
||||||
Otherwise, it's identical to Presto. The MCU internal ROM is same too.
|
Otherwise, it's identical to Presto. The MCU internal ROM is same too.
|
||||||
|
|
||||||
@ -38,48 +36,71 @@ Otherwise, it's identical to Presto. The MCU internal ROM is same too.
|
|||||||
#include "novag_presto.lh" // clickable
|
#include "novag_presto.lh" // clickable
|
||||||
|
|
||||||
|
|
||||||
class novagmcs48_state : public novagbase_state
|
namespace {
|
||||||
|
|
||||||
|
class presto_state : public novagbase_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
novagmcs48_state(const machine_config &mconfig, device_type type, const char *tag) :
|
presto_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
novagbase_state(mconfig, type, tag),
|
novagbase_state(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu")
|
m_maincpu(*this, "maincpu")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
// machine drivers
|
||||||
void presto(machine_config &config);
|
void presto(machine_config &config);
|
||||||
void octo(machine_config &config);
|
void octo(machine_config &config);
|
||||||
|
|
||||||
DECLARE_INPUT_CHANGED_MEMBER(octo_cpu_freq);
|
protected:
|
||||||
|
// devices/pointers
|
||||||
private:
|
|
||||||
required_device<mcs48_cpu_device> m_maincpu;
|
required_device<mcs48_cpu_device> m_maincpu;
|
||||||
|
|
||||||
// Presto/Octo
|
// I/O handlers
|
||||||
DECLARE_WRITE8_MEMBER(presto_mux_w);
|
DECLARE_WRITE8_MEMBER(mux_w);
|
||||||
DECLARE_WRITE8_MEMBER(presto_control_w);
|
DECLARE_WRITE8_MEMBER(control_w);
|
||||||
DECLARE_READ8_MEMBER(presto_input_r);
|
DECLARE_READ8_MEMBER(input_r);
|
||||||
DECLARE_MACHINE_RESET(octo);
|
};
|
||||||
|
|
||||||
|
class octo_state : public presto_state
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
octo_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
|
presto_state(mconfig, type, tag)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
DECLARE_INPUT_CHANGED_MEMBER(octo_cpu_freq) { octo_set_cpu_freq(); }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void machine_reset() override;
|
||||||
void octo_set_cpu_freq();
|
void octo_set_cpu_freq();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void octo_state::machine_reset()
|
||||||
|
{
|
||||||
|
presto_state::machine_reset();
|
||||||
|
octo_set_cpu_freq();
|
||||||
|
}
|
||||||
|
|
||||||
|
void octo_state::octo_set_cpu_freq()
|
||||||
|
{
|
||||||
|
// Octo was released with either 12MHz or 15MHz CPU
|
||||||
|
m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? (15000000) : (12000000));
|
||||||
|
}
|
||||||
|
|
||||||
// Devices, I/O
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Presto/Octo
|
Devices, I/O
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// MCU ports/generic
|
// MCU ports/generic
|
||||||
|
|
||||||
WRITE8_MEMBER(novagmcs48_state::presto_mux_w)
|
WRITE8_MEMBER(presto_state::mux_w)
|
||||||
{
|
{
|
||||||
// D0-D7: input mux low, led data
|
// D0-D7: input mux low, led data
|
||||||
m_inp_mux = (m_inp_mux & ~0xff) | (~data & 0xff);
|
m_inp_mux = (m_inp_mux & ~0xff) | (~data & 0xff);
|
||||||
display_matrix(8, 3, m_inp_mux, m_led_select);
|
display_matrix(8, 3, m_inp_mux, m_led_select);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(novagmcs48_state::presto_control_w)
|
WRITE8_MEMBER(presto_state::control_w)
|
||||||
{
|
{
|
||||||
// P21: input mux high
|
// P21: input mux high
|
||||||
m_inp_mux = (m_inp_mux & 0xff) | (~data << 7 & 0x100);
|
m_inp_mux = (m_inp_mux & 0xff) | (~data << 7 & 0x100);
|
||||||
@ -92,24 +113,12 @@ WRITE8_MEMBER(novagmcs48_state::presto_control_w)
|
|||||||
m_inp_mux &= ~0xff; // ?
|
m_inp_mux &= ~0xff; // ?
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER(novagmcs48_state::presto_input_r)
|
READ8_MEMBER(presto_state::input_r)
|
||||||
{
|
{
|
||||||
// P10-P17: multiplexed inputs
|
// P10-P17: multiplexed inputs
|
||||||
return ~read_inputs(9) & 0xff;
|
return ~read_inputs(9) & 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
void novagmcs48_state::octo_set_cpu_freq()
|
|
||||||
{
|
|
||||||
// Octo was released with either 12MHz or 15MHz CPU
|
|
||||||
m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? (15000000) : (12000000));
|
|
||||||
}
|
|
||||||
|
|
||||||
MACHINE_RESET_MEMBER(novagmcs48_state, octo)
|
|
||||||
{
|
|
||||||
novagbase_state::machine_reset();
|
|
||||||
octo_set_cpu_freq();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
@ -134,31 +143,26 @@ static INPUT_PORTS_START( octo )
|
|||||||
PORT_INCLUDE( presto )
|
PORT_INCLUDE( presto )
|
||||||
|
|
||||||
PORT_START("FAKE")
|
PORT_START("FAKE")
|
||||||
PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, novagmcs48_state, octo_cpu_freq, nullptr) // factory set
|
PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, octo_state, octo_cpu_freq, nullptr) // factory set
|
||||||
PORT_CONFSETTING( 0x00, "12MHz" )
|
PORT_CONFSETTING( 0x00, "12MHz" )
|
||||||
PORT_CONFSETTING( 0x01, "15MHz" )
|
PORT_CONFSETTING( 0x01, "15MHz" )
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
INPUT_CHANGED_MEMBER(novagmcs48_state::octo_cpu_freq)
|
|
||||||
{
|
|
||||||
octo_set_cpu_freq();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Machine Drivers
|
Machine Drivers
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
void novagmcs48_state::presto(machine_config &config)
|
void presto_state::presto(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
I8049(config, m_maincpu, 6000000); // LC circuit, measured 6MHz
|
I8049(config, m_maincpu, 6000000); // LC circuit, measured 6MHz
|
||||||
m_maincpu->p1_in_cb().set(FUNC(novagmcs48_state::presto_input_r));
|
m_maincpu->p1_in_cb().set(FUNC(presto_state::input_r));
|
||||||
m_maincpu->p2_out_cb().set(FUNC(novagmcs48_state::presto_control_w));
|
m_maincpu->p2_out_cb().set(FUNC(presto_state::control_w));
|
||||||
m_maincpu->bus_out_cb().set(FUNC(novagmcs48_state::presto_mux_w));
|
m_maincpu->bus_out_cb().set(FUNC(presto_state::mux_w));
|
||||||
|
|
||||||
TIMER(config, "display_decay").configure_periodic(FUNC(novagmcs48_state::display_decay_tick), attotime::from_msec(1));
|
TIMER(config, "display_decay").configure_periodic(FUNC(presto_state::display_decay_tick), attotime::from_msec(1));
|
||||||
config.set_default_layout(layout_novag_presto);
|
config.set_default_layout(layout_novag_presto);
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
@ -167,14 +171,12 @@ void novagmcs48_state::presto(machine_config &config)
|
|||||||
VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
VOLTAGE_REGULATOR(config, "vref").add_route(0, "dac", 1.0, DAC_VREF_POS_INPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void novagmcs48_state::octo(machine_config &config)
|
void presto_state::octo(machine_config &config)
|
||||||
{
|
{
|
||||||
presto(config);
|
presto(config);
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
m_maincpu->set_clock(12000000); // LC circuit, measured, see octo_set_cpu_freq
|
m_maincpu->set_clock(12000000); // LC circuit, measured, see octo_set_cpu_freq
|
||||||
|
|
||||||
MCFG_MACHINE_RESET_OVERRIDE(novagmcs48_state, octo)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -193,12 +195,14 @@ ROM_START( nocto )
|
|||||||
ROM_LOAD("d80c49hc_111", 0x0000, 0x0800, CRC(29a0eb4c) SHA1(e058d6018e53ddcaa3b5ec25b33b8bff091b04db) ) // same program as npresto
|
ROM_LOAD("d80c49hc_111", 0x0000, 0x0800, CRC(29a0eb4c) SHA1(e058d6018e53ddcaa3b5ec25b33b8bff091b04db) ) // same program as npresto
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Drivers
|
Drivers
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
|
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
|
||||||
CONS( 1984, npresto, 0, 0, presto, presto, novagmcs48_state, empty_init, "Novag", "Presto (Novag)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
CONS( 1984, npresto, 0, 0, presto, presto, presto_state, empty_init, "Novag", "Presto (Novag)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||||
CONS( 1987, nocto, npresto, 0, octo, octo, novagmcs48_state, empty_init, "Novag", "Octo (Novag)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
CONS( 1987, nocto, npresto, 0, octo, octo, octo_state, empty_init, "Novag", "Octo (Novag)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_CONTROLS )
|
||||||
|
@ -40,8 +40,8 @@
|
|||||||
class rzone_state : public hh_sm510_state
|
class rzone_state : public hh_sm510_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
rzone_state(const machine_config &mconfig, device_type type, const char *tag)
|
rzone_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
: hh_sm510_state(mconfig, type, tag),
|
hh_sm510_state(mconfig, type, tag),
|
||||||
m_led_out(*this, "led"),
|
m_led_out(*this, "led"),
|
||||||
m_led_off(*this, "led_off")
|
m_led_off(*this, "led_off")
|
||||||
{ }
|
{ }
|
||||||
|
@ -3,15 +3,14 @@
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Fidelity Electronics chess machines base class
|
* Fidelity Electronics chess machines base class
|
||||||
* main driver is fidelz80.cpp
|
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#ifndef MAME_INCLUDES_FIDELBASE_H
|
#ifndef MAME_INCLUDES_FIDELBASE_H
|
||||||
#define MAME_INCLUDES_FIDELBASE_H
|
#define MAME_INCLUDES_FIDELBASE_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include "machine/bankdev.h"
|
#include "machine/bankdev.h"
|
||||||
#include "machine/timer.h"
|
#include "machine/timer.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/dac.h"
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
class hh_sm510_state : public driver_device
|
class hh_sm510_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
hh_sm510_state(const machine_config &mconfig, device_type type, const char *tag)
|
hh_sm510_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
: driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_inp_matrix(*this, "IN.%u", 0),
|
m_inp_matrix(*this, "IN.%u", 0),
|
||||||
m_out_x(*this, "%u.%u.%u", 0U, 0U, 0U),
|
m_out_x(*this, "%u.%u.%u", 0U, 0U, 0U),
|
||||||
|
@ -26,8 +26,8 @@
|
|||||||
class hh_tms1k_state : public driver_device
|
class hh_tms1k_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
hh_tms1k_state(const machine_config &mconfig, device_type type, const char *tag)
|
hh_tms1k_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
: driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_inp_matrix(*this, "IN.%u", 0),
|
m_inp_matrix(*this, "IN.%u", 0),
|
||||||
m_out_x(*this, "%u.%u", 0U, 0U),
|
m_out_x(*this, "%u.%u", 0U, 0U),
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
class hh_ucom4_state : public driver_device
|
class hh_ucom4_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
hh_ucom4_state(const machine_config &mconfig, device_type type, const char *tag)
|
hh_ucom4_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
: driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_inp_matrix(*this, "IN.%u", 0),
|
m_inp_matrix(*this, "IN.%u", 0),
|
||||||
m_out_x(*this, "%u.%u", 0U, 0U),
|
m_out_x(*this, "%u.%u", 0U, 0U),
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
*
|
*
|
||||||
* Novag chess machines base class
|
* Novag chess machines base class
|
||||||
* main driver is novag6502.cpp
|
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#ifndef MAME_INCLUDES_NOVAGBASE_H
|
#ifndef MAME_INCLUDES_NOVAGBASE_H
|
||||||
#define MAME_INCLUDES_NOVAGBASE_H
|
#define MAME_INCLUDES_NOVAGBASE_H
|
||||||
|
|
||||||
@ -36,10 +36,6 @@ public:
|
|||||||
m_display_maxx(0)
|
m_display_maxx(0)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual void machine_start() override;
|
|
||||||
virtual void machine_reset() override;
|
|
||||||
|
|
||||||
// devices/pointers
|
// devices/pointers
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
optional_device<timer_device> m_irq_on;
|
optional_device<timer_device> m_irq_on;
|
||||||
@ -60,6 +56,9 @@ protected:
|
|||||||
|
|
||||||
u16 read_inputs(int columns);
|
u16 read_inputs(int columns);
|
||||||
|
|
||||||
|
// in case reset button is directly tied to maincpu reset pin
|
||||||
|
virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); }
|
||||||
|
|
||||||
// periodic interrupts
|
// periodic interrupts
|
||||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
||||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
||||||
@ -80,6 +79,10 @@ protected:
|
|||||||
void set_display_size(int maxx, int maxy);
|
void set_display_size(int maxx, int maxy);
|
||||||
void set_display_segmask(u32 digits, u32 mask);
|
void set_display_segmask(u32 digits, u32 mask);
|
||||||
void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
|
void display_matrix(int maxx, int maxy, u32 setx, u32 sety, bool update = true);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void machine_start() override;
|
||||||
|
virtual void machine_reset() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -183,23 +183,23 @@
|
|||||||
|
|
||||||
<!-- chessboard leds -->
|
<!-- chessboard leds -->
|
||||||
|
|
||||||
<bezel name="7.1" element="ledr"><bounds x="-1" y="7.5" width="2" height="1" /></bezel>
|
<bezel name="7.9" element="ledr"><bounds x="-1" y="7.5" width="2" height="1" /></bezel>
|
||||||
<bezel name="6.1" element="ledr"><bounds x="-1" y="17.5" width="2" height="1" /></bezel>
|
<bezel name="6.9" element="ledr"><bounds x="-1" y="17.5" width="2" height="1" /></bezel>
|
||||||
<bezel name="5.1" element="ledr"><bounds x="-1" y="27.5" width="2" height="1" /></bezel>
|
<bezel name="5.9" element="ledr"><bounds x="-1" y="27.5" width="2" height="1" /></bezel>
|
||||||
<bezel name="4.1" element="ledr"><bounds x="-1" y="37.5" width="2" height="1" /></bezel>
|
<bezel name="4.9" element="ledr"><bounds x="-1" y="37.5" width="2" height="1" /></bezel>
|
||||||
<bezel name="3.1" element="ledr"><bounds x="-1" y="47.5" width="2" height="1" /></bezel>
|
<bezel name="3.9" element="ledr"><bounds x="-1" y="47.5" width="2" height="1" /></bezel>
|
||||||
<bezel name="2.1" element="ledr"><bounds x="-1" y="57.5" width="2" height="1" /></bezel>
|
<bezel name="2.9" element="ledr"><bounds x="-1" y="57.5" width="2" height="1" /></bezel>
|
||||||
<bezel name="1.1" element="ledr"><bounds x="-1" y="67.5" width="2" height="1" /></bezel>
|
<bezel name="1.9" element="ledr"><bounds x="-1" y="67.5" width="2" height="1" /></bezel>
|
||||||
<bezel name="0.1" element="ledr"><bounds x="-1" y="77.5" width="2" height="1" /></bezel>
|
<bezel name="0.9" element="ledr"><bounds x="-1" y="77.5" width="2" height="1" /></bezel>
|
||||||
|
|
||||||
<bezel name="7.0" element="ledr"><bounds x="7" y="85" width="2" height="1" /></bezel>
|
<bezel name="7.8" element="ledr"><bounds x="7" y="85" width="2" height="1" /></bezel>
|
||||||
<bezel name="6.0" element="ledr"><bounds x="17" y="85" width="2" height="1" /></bezel>
|
<bezel name="6.8" element="ledr"><bounds x="17" y="85" width="2" height="1" /></bezel>
|
||||||
<bezel name="5.0" element="ledr"><bounds x="27" y="85" width="2" height="1" /></bezel>
|
<bezel name="5.8" element="ledr"><bounds x="27" y="85" width="2" height="1" /></bezel>
|
||||||
<bezel name="4.0" element="ledr"><bounds x="37" y="85" width="2" height="1" /></bezel>
|
<bezel name="4.8" element="ledr"><bounds x="37" y="85" width="2" height="1" /></bezel>
|
||||||
<bezel name="3.0" element="ledr"><bounds x="47" y="85" width="2" height="1" /></bezel>
|
<bezel name="3.8" element="ledr"><bounds x="47" y="85" width="2" height="1" /></bezel>
|
||||||
<bezel name="2.0" element="ledr"><bounds x="57" y="85" width="2" height="1" /></bezel>
|
<bezel name="2.8" element="ledr"><bounds x="57" y="85" width="2" height="1" /></bezel>
|
||||||
<bezel name="1.0" element="ledr"><bounds x="67" y="85" width="2" height="1" /></bezel>
|
<bezel name="1.8" element="ledr"><bounds x="67" y="85" width="2" height="1" /></bezel>
|
||||||
<bezel name="0.0" element="ledr"><bounds x="77" y="85" width="2" height="1" /></bezel>
|
<bezel name="0.8" element="ledr"><bounds x="77" y="85" width="2" height="1" /></bezel>
|
||||||
|
|
||||||
<!-- chessboard sensors -->
|
<!-- chessboard sensors -->
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user