mirror of
https://github.com/holub/mame
synced 2025-06-03 19:36:26 +03:00
New working machines
-------------------- ATM18 Mini Chess Computer (English) [hap] New working clones ------------------ CC2-Schachzwerg (German)
This commit is contained in:
parent
5c6511fada
commit
635cbc0c86
@ -238,7 +238,6 @@ void saitekosa_analyst_device::device_add_mconfig(machine_config &config)
|
|||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
HD44780(config, m_lcd, 0);
|
HD44780(config, m_lcd, 0);
|
||||||
m_lcd->set_lcd_size(2, 8);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
the existing opcodes has been shown to wildly corrupt the video output in Craft, so one can assume that the
|
the existing opcodes has been shown to wildly corrupt the video output in Craft, so one can assume that the
|
||||||
existing timing is 100% correct.
|
existing timing is 100% correct.
|
||||||
|
|
||||||
Unimplemented opcodes: SPM, SPM Z+, SLEEP, BREAK, WDR, EICALL, JMP, CALL
|
Unimplemented opcodes: SPM, SPM Z+, SLEEP, BREAK, WDR, EICALL
|
||||||
|
|
||||||
- Changelist -
|
- Changelist -
|
||||||
05 Jul. 2015 [Felipe Sanches]
|
05 Jul. 2015 [Felipe Sanches]
|
||||||
|
@ -91,8 +91,6 @@ void master_state::machine_start()
|
|||||||
I/O
|
I/O
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// TTL/generic
|
|
||||||
|
|
||||||
void master_state::control_w(u8 data)
|
void master_state::control_w(u8 data)
|
||||||
{
|
{
|
||||||
// d0-d3: 74145 A-D
|
// d0-d3: 74145 A-D
|
||||||
@ -215,7 +213,7 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
void master_state::master(machine_config &config)
|
void master_state::master(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
// basic machine hardware
|
||||||
Z80(config, m_maincpu, 8_MHz_XTAL/2);
|
Z80(config, m_maincpu, 8_MHz_XTAL/2);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &master_state::main_trampoline);
|
m_maincpu->set_addrmap(AS_PROGRAM, &master_state::main_trampoline);
|
||||||
ADDRESS_MAP_BANK(config, "mainmap").set_map(&master_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16);
|
ADDRESS_MAP_BANK(config, "mainmap").set_map(&master_state::main_map).set_options(ENDIANNESS_LITTLE, 8, 16);
|
||||||
@ -228,11 +226,11 @@ void master_state::master(machine_config &config)
|
|||||||
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
|
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));
|
||||||
m_board->set_delay(attotime::from_msec(150));
|
m_board->set_delay(attotime::from_msec(150));
|
||||||
|
|
||||||
/* video hardware */
|
// video hardware
|
||||||
PWM_DISPLAY(config, m_display).set_size(9, 2);
|
PWM_DISPLAY(config, m_display).set_size(9, 2);
|
||||||
config.set_default_layout(layout_ck_master);
|
config.set_default_layout(layout_ck_master);
|
||||||
|
|
||||||
/* sound hardware */
|
// sound hardware
|
||||||
SPEAKER(config, "speaker").front_center();
|
SPEAKER(config, "speaker").front_center();
|
||||||
DAC_2BIT_ONES_COMPLEMENT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.125);
|
DAC_2BIT_ONES_COMPLEMENT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.125);
|
||||||
}
|
}
|
||||||
|
@ -142,8 +142,8 @@ u8 y532xl_state::input_r()
|
|||||||
|
|
||||||
void y532xl_state::cb_w(u8 data)
|
void y532xl_state::cb_w(u8 data)
|
||||||
{
|
{
|
||||||
|
// d0-d3: lcd data (see control_w)
|
||||||
// d0-d7: chessboard input mux
|
// d0-d7: chessboard input mux
|
||||||
// d0-d3: lcd data
|
|
||||||
m_cb_mux = data;
|
m_cb_mux = data;
|
||||||
update_display();
|
update_display();
|
||||||
}
|
}
|
||||||
@ -173,10 +173,10 @@ void y532xl_state::control_w(offs_t offset, u8 data)
|
|||||||
// Q7 rising edge: write to lcd
|
// Q7 rising edge: write to lcd
|
||||||
if (~prev & m_control & 0x80)
|
if (~prev & m_control & 0x80)
|
||||||
m_lcd->data_w(m_cb_mux & 0xf);
|
m_lcd->data_w(m_cb_mux & 0xf);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Address Maps
|
Address Maps
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
@ -232,7 +232,7 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
void y532xl_state::y532xl(machine_config &config)
|
void y532xl_state::y532xl(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
// basic machine hardware
|
||||||
R65C02(config, m_maincpu, 4_MHz_XTAL);
|
R65C02(config, m_maincpu, 4_MHz_XTAL);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &y532xl_state::main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &y532xl_state::main_map);
|
||||||
|
|
||||||
@ -246,14 +246,14 @@ void y532xl_state::y532xl(machine_config &config)
|
|||||||
m_board->set_delay(attotime::from_msec(150));
|
m_board->set_delay(attotime::from_msec(150));
|
||||||
m_board->set_nvram_enable(true);
|
m_board->set_nvram_enable(true);
|
||||||
|
|
||||||
/* video hardware */
|
// video hardware
|
||||||
HD61603(config, m_lcd, 0);
|
HD61603(config, m_lcd, 0);
|
||||||
m_lcd->write_segs().set(FUNC(y532xl_state::lcd_seg_w));
|
m_lcd->write_segs().set(FUNC(y532xl_state::lcd_seg_w));
|
||||||
|
|
||||||
PWM_DISPLAY(config, m_display).set_size(9, 8);
|
PWM_DISPLAY(config, m_display).set_size(9, 8);
|
||||||
config.set_default_layout(layout_yeno_532xl);
|
config.set_default_layout(layout_yeno_532xl);
|
||||||
|
|
||||||
/* sound hardware */
|
// sound hardware
|
||||||
SPEAKER(config, "speaker").front_center();
|
SPEAKER(config, "speaker").front_center();
|
||||||
DAC_2BIT_ONES_COMPLEMENT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.125);
|
DAC_2BIT_ONES_COMPLEMENT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.125);
|
||||||
}
|
}
|
||||||
|
@ -9,27 +9,51 @@ The chess engine is H.G. Muller's micro-Max 4.8, ATMega88 port and prototype
|
|||||||
hardware design by Andre Adrian. PCB finalization by Elektor, published in
|
hardware design by Andre Adrian. PCB finalization by Elektor, published in
|
||||||
Elektor magazine in 2009.
|
Elektor magazine in 2009.
|
||||||
|
|
||||||
|
The LCD version uses Elektor's ATM18 (aka CC2) system, and a 2-wire LCD module.
|
||||||
|
It was not manufactured by Elektor, only described as a homebrew project.
|
||||||
|
|
||||||
FN 1 = new game, FN 2 = set level, FN 3 = principle variation.
|
FN 1 = new game, FN 2 = set level, FN 3 = principle variation.
|
||||||
Moves are confirmed by pressing GO twice.
|
Moves are confirmed by pressing GO twice.
|
||||||
|
|
||||||
|
The program is the same for all versions, only the display differs.
|
||||||
|
|
||||||
Hardware notes:
|
Hardware notes:
|
||||||
|
|
||||||
|
LED version:
|
||||||
- PCB label 081101-1 (c)Elektor v1.4
|
- PCB label 081101-1 (c)Elektor v1.4
|
||||||
- Atmel ATMega88P-20PU @ ~8MHz, 8KB internal ROM
|
- Atmel ATMega88P-20PU @ ~8MHz, 8KB internal ROM
|
||||||
- 4-digit 7seg display, button panel, no sound
|
- 4-digit 7seg display, button panel, no sound
|
||||||
|
|
||||||
|
LCD version:
|
||||||
|
- Elektor ATM18 Testboard (has ATmega88 TQFP32 @ 16MHz)
|
||||||
|
- Elektor 2-wire LCD board (CD4094, HD44780U, 4*20 display)
|
||||||
|
- custom keypad board
|
||||||
|
|
||||||
|
Elektor magazine references (English):
|
||||||
|
- 04/2008: ATM18 AVR Board
|
||||||
|
- 05/2008: Two-wire LCD
|
||||||
|
- 09/2009: ATM18 Mini Chess Computer
|
||||||
|
- 11/2009: AVR-Max Chess Computer
|
||||||
|
|
||||||
|
For the German magazine, AVR-Max-Schachzwerg and CC2-Schachzwerg are in 06/2009.
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- AVR8 SLEEP opcode is not working, it's used for power-saving here and was
|
- AVR8 SLEEP opcode is not working, it's used for power-saving here and was
|
||||||
harmless to hack out, but needs to be put back when it's emulated
|
harmless to hack out, but needs to be put back when it's emulated
|
||||||
- add Elektor CC2 version with custom LCD screen
|
|
||||||
|
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
|
||||||
#include "cpu/avr8/avr8.h"
|
#include "cpu/avr8/avr8.h"
|
||||||
|
#include "video/hd44780.h"
|
||||||
#include "video/pwm.h"
|
#include "video/pwm.h"
|
||||||
|
|
||||||
|
#include "screen.h"
|
||||||
|
|
||||||
// internal artwork
|
// internal artwork
|
||||||
#include "avrmax.lh" // clickable
|
#include "avrmax.lh" // clickable
|
||||||
|
#include "atm18mcc.lh" // clickable
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -40,11 +64,14 @@ public:
|
|||||||
avrmax_state(const machine_config &mconfig, device_type type, const char *tag) :
|
avrmax_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_display(*this, "display"),
|
m_digit_pwm(*this, "digit_pwm"),
|
||||||
|
m_lcd(*this, "lcd"),
|
||||||
m_inputs(*this, "IN.%u", 0)
|
m_inputs(*this, "IN.%u", 0)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
void base(machine_config &config);
|
||||||
void avrmax(machine_config &config);
|
void avrmax(machine_config &config);
|
||||||
|
void atm18mcc(machine_config &config);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void machine_start() override;
|
virtual void machine_start() override;
|
||||||
@ -52,7 +79,8 @@ protected:
|
|||||||
private:
|
private:
|
||||||
// devices/pointers
|
// devices/pointers
|
||||||
required_device<avr8_device> m_maincpu;
|
required_device<avr8_device> m_maincpu;
|
||||||
required_device<pwm_display_device> m_display;
|
optional_device<pwm_display_device> m_digit_pwm;
|
||||||
|
optional_device<hd44780_device> m_lcd;
|
||||||
required_ioport_array<4> m_inputs;
|
required_ioport_array<4> m_inputs;
|
||||||
|
|
||||||
// address maps
|
// address maps
|
||||||
@ -60,20 +88,25 @@ private:
|
|||||||
void data_map(address_map &map);
|
void data_map(address_map &map);
|
||||||
|
|
||||||
// I/O handlers
|
// I/O handlers
|
||||||
void update_display();
|
void input_w(u8 data);
|
||||||
void mux_w(u8 data);
|
|
||||||
void led_w(u8 data);
|
|
||||||
u8 input_r();
|
u8 input_r();
|
||||||
|
void digit_w(u8 data);
|
||||||
|
void segment_w(u8 data);
|
||||||
|
void lcd_w(u8 data);
|
||||||
|
|
||||||
|
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
u8 m_inp_mux = 0;
|
u8 m_inp_mux = 0;
|
||||||
u8 m_7seg_data = 0;
|
u8 m_shift_reg = 0;
|
||||||
|
int m_shift_clk = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
void avrmax_state::machine_start()
|
void avrmax_state::machine_start()
|
||||||
{
|
{
|
||||||
// register for savestates
|
// register for savestates
|
||||||
save_item(NAME(m_inp_mux));
|
save_item(NAME(m_inp_mux));
|
||||||
save_item(NAME(m_7seg_data));
|
save_item(NAME(m_shift_reg));
|
||||||
|
save_item(NAME(m_shift_clk));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -82,23 +115,12 @@ void avrmax_state::machine_start()
|
|||||||
I/O
|
I/O
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
void avrmax_state::update_display()
|
// common
|
||||||
{
|
|
||||||
m_display->matrix(m_inp_mux, m_7seg_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
void avrmax_state::mux_w(u8 data)
|
void avrmax_state::input_w(u8 data)
|
||||||
{
|
{
|
||||||
// PC0-PC3: input mux/digit select
|
// PC0-PC3: input mux
|
||||||
m_inp_mux = ~data & 0xf;
|
m_inp_mux = ~data & 0xf;
|
||||||
update_display();
|
|
||||||
}
|
|
||||||
|
|
||||||
void avrmax_state::led_w(u8 data)
|
|
||||||
{
|
|
||||||
// PD0-PD7: 7seg data
|
|
||||||
m_7seg_data = ~data;
|
|
||||||
update_display();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 avrmax_state::input_r()
|
u8 avrmax_state::input_r()
|
||||||
@ -114,6 +136,68 @@ u8 avrmax_state::input_r()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// LED handlers
|
||||||
|
|
||||||
|
void avrmax_state::digit_w(u8 data)
|
||||||
|
{
|
||||||
|
// PC0-PC3: also digit select
|
||||||
|
input_w(data);
|
||||||
|
m_digit_pwm->write_my(m_inp_mux);
|
||||||
|
}
|
||||||
|
|
||||||
|
void avrmax_state::segment_w(u8 data)
|
||||||
|
{
|
||||||
|
// PD0-PD7: digit 7seg data
|
||||||
|
m_digit_pwm->write_mx(~data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// LCD handlers
|
||||||
|
|
||||||
|
u32 avrmax_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||||
|
{
|
||||||
|
bitmap.fill(0xffffff, cliprect);
|
||||||
|
const u8 *render = m_lcd->render();
|
||||||
|
|
||||||
|
// draw lcd characters
|
||||||
|
for (int i = 0; i < 80; i++)
|
||||||
|
{
|
||||||
|
const u8 *src = render + 16 * i;
|
||||||
|
for (int y = 0; y < 8; y++)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < 5; x++)
|
||||||
|
{
|
||||||
|
int row = bitswap<2>(i / 20, 0, 1);
|
||||||
|
int col = i % 20;
|
||||||
|
u32 color = (BIT(src[y], 4 - x)) ? 0 : 0xe8e8e8;
|
||||||
|
bitmap.pix(row * 9 + y + 1, col * 6 + x + 1) = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void avrmax_state::lcd_w(u8 data)
|
||||||
|
{
|
||||||
|
// PD2: CD4094 data
|
||||||
|
int shift_data = BIT(data, 2);
|
||||||
|
|
||||||
|
// PD3: CD4094 clock
|
||||||
|
int shift_clk = BIT(data, 3);
|
||||||
|
if (shift_clk && !m_shift_clk)
|
||||||
|
m_shift_reg = (m_shift_reg << 1) | shift_data;
|
||||||
|
m_shift_clk = shift_clk;
|
||||||
|
|
||||||
|
// CD4094 Q2-Q5: LCD data
|
||||||
|
// CD4094 Q6: LCD RS
|
||||||
|
// CD4094 Q7: LCD E (ANDed with CD4094 data)
|
||||||
|
m_lcd->db_w(m_shift_reg << 3 & 0xf0);
|
||||||
|
m_lcd->rs_w(BIT(m_shift_reg, 5));
|
||||||
|
m_lcd->e_w(BIT(m_shift_reg, 6) & shift_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Address Maps
|
Address Maps
|
||||||
@ -163,23 +247,50 @@ INPUT_PORTS_END
|
|||||||
Machine Configs
|
Machine Configs
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
void avrmax_state::avrmax(machine_config &config)
|
void avrmax_state::base(machine_config &config)
|
||||||
{
|
{
|
||||||
/* basic machine hardware */
|
// basic machine hardware
|
||||||
ATMEGA88(config, m_maincpu, 8000000); // internal R/C clock
|
ATMEGA88(config, m_maincpu, 16_MHz_XTAL);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &avrmax_state::main_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &avrmax_state::main_map);
|
||||||
m_maincpu->set_addrmap(AS_DATA, &avrmax_state::data_map);
|
m_maincpu->set_addrmap(AS_DATA, &avrmax_state::data_map);
|
||||||
m_maincpu->set_eeprom_tag("eeprom");
|
m_maincpu->set_eeprom_tag("eeprom");
|
||||||
m_maincpu->gpio_in<AVR8_IO_PORTB>().set(FUNC(avrmax_state::input_r));
|
m_maincpu->gpio_in<AVR8_IO_PORTB>().set(FUNC(avrmax_state::input_r));
|
||||||
m_maincpu->gpio_out<AVR8_IO_PORTC>().set(FUNC(avrmax_state::mux_w));
|
m_maincpu->gpio_out<AVR8_IO_PORTC>().set(FUNC(avrmax_state::input_w));
|
||||||
m_maincpu->gpio_out<AVR8_IO_PORTD>().set(FUNC(avrmax_state::led_w));
|
}
|
||||||
|
|
||||||
/* video hardware */
|
void avrmax_state::avrmax(machine_config &config)
|
||||||
PWM_DISPLAY(config, m_display).set_size(4, 8);
|
{
|
||||||
m_display->set_segmask(0xf, 0xff);
|
base(config);
|
||||||
|
|
||||||
|
// basic machine hardware
|
||||||
|
m_maincpu->set_clock(8000000); // internal R/C clock
|
||||||
|
m_maincpu->gpio_out<AVR8_IO_PORTC>().set(FUNC(avrmax_state::digit_w));
|
||||||
|
m_maincpu->gpio_out<AVR8_IO_PORTD>().set(FUNC(avrmax_state::segment_w));
|
||||||
|
|
||||||
|
// video hardware
|
||||||
|
PWM_DISPLAY(config, m_digit_pwm).set_size(4, 8);
|
||||||
|
m_digit_pwm->set_segmask(0xf, 0xff);
|
||||||
config.set_default_layout(layout_avrmax);
|
config.set_default_layout(layout_avrmax);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void avrmax_state::atm18mcc(machine_config &config)
|
||||||
|
{
|
||||||
|
base(config);
|
||||||
|
|
||||||
|
// basic machine hardware
|
||||||
|
m_maincpu->gpio_out<AVR8_IO_PORTD>().set(FUNC(avrmax_state::lcd_w));
|
||||||
|
|
||||||
|
// video hardware
|
||||||
|
auto &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
|
||||||
|
screen.set_refresh_hz(60);
|
||||||
|
screen.set_size(20 * 6 + 1, 4 * 9 + 1);
|
||||||
|
screen.set_visarea_full();
|
||||||
|
screen.set_screen_update(FUNC(avrmax_state::screen_update));
|
||||||
|
|
||||||
|
HD44780(config, m_lcd, 0);
|
||||||
|
config.set_default_layout(layout_atm18mcc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
@ -188,7 +299,7 @@ void avrmax_state::avrmax(machine_config &config)
|
|||||||
|
|
||||||
ROM_START( avrmax )
|
ROM_START( avrmax )
|
||||||
ROM_REGION( 0x2000, "maincpu", 0 )
|
ROM_REGION( 0x2000, "maincpu", 0 )
|
||||||
ROM_LOAD( "elektor_081101-41.ic1", 0x0000, 0x2000, CRC(86d2a654) SHA1(3c235b8f6f735eaf408f54cbf44872166e7161d5) )
|
ROM_LOAD( "elektor_081101-41.ic1", 0x0000, 0x2000, CRC(86d2a654) SHA1(3c235b8f6f735eaf408f54cbf44872166e7161d5) ) // avrmax_en-v1.0.hex
|
||||||
|
|
||||||
// HACK: changed SLEEP to NOP
|
// HACK: changed SLEEP to NOP
|
||||||
ROM_FILL( 0x025c, 2, 0x00 )
|
ROM_FILL( 0x025c, 2, 0x00 )
|
||||||
@ -203,7 +314,7 @@ ROM_END
|
|||||||
|
|
||||||
ROM_START( avrmaxg )
|
ROM_START( avrmaxg )
|
||||||
ROM_REGION( 0x2000, "maincpu", 0 )
|
ROM_REGION( 0x2000, "maincpu", 0 )
|
||||||
ROM_LOAD( "elektor_081101-41_d.ic1", 0x0000, 0x2000, CRC(18ec7a56) SHA1(a018421aa0ad8cce3d852f7519dec3691f3c55a0) )
|
ROM_LOAD( "elektor_081101-41_d.ic1", 0x0000, 0x2000, CRC(18ec7a56) SHA1(a018421aa0ad8cce3d852f7519dec3691f3c55a0) ) // avrmax_de-v1.0.hex
|
||||||
|
|
||||||
// HACK: changed SLEEP to NOP
|
// HACK: changed SLEEP to NOP
|
||||||
ROM_FILL( 0x025c, 2, 0x00 )
|
ROM_FILL( 0x025c, 2, 0x00 )
|
||||||
@ -216,6 +327,36 @@ ROM_START( avrmaxg )
|
|||||||
ROM_REGION( 0x200, "eeprom", ROMREGION_ERASE00 )
|
ROM_REGION( 0x200, "eeprom", ROMREGION_ERASE00 )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
ROM_START( atm18mcc )
|
||||||
|
ROM_REGION( 0x2000, "maincpu", 0 )
|
||||||
|
ROM_LOAD( "avrmax_cc2_en-v1.0.bin", 0x0000, 0x2000, CRC(715f4642) SHA1(d20739c6caa49a01e002b3dfbf0f39abf7992540) )
|
||||||
|
|
||||||
|
// HACK: changed SLEEP to NOP
|
||||||
|
ROM_FILL( 0x05da, 2, 0x00 )
|
||||||
|
ROM_FILL( 0x1466, 2, 0x00 )
|
||||||
|
ROM_FILL( 0x14a2, 2, 0x00 )
|
||||||
|
ROM_FILL( 0x14de, 2, 0x00 )
|
||||||
|
ROM_FILL( 0x1528, 2, 0x00 )
|
||||||
|
ROM_FILL( 0x16fe, 2, 0x00 )
|
||||||
|
|
||||||
|
ROM_REGION( 0x200, "eeprom", ROMREGION_ERASE00 )
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
ROM_START( cc2schach )
|
||||||
|
ROM_REGION( 0x2000, "maincpu", 0 )
|
||||||
|
ROM_LOAD( "avrmax_cc2_de-v1.0.bin", 0x0000, 0x2000, CRC(64cfc646) SHA1(4c371ea9f48c8745cf5f5bcf10973838e239e564) )
|
||||||
|
|
||||||
|
// HACK: changed SLEEP to NOP
|
||||||
|
ROM_FILL( 0x05da, 2, 0x00 )
|
||||||
|
ROM_FILL( 0x1466, 2, 0x00 )
|
||||||
|
ROM_FILL( 0x14a2, 2, 0x00 )
|
||||||
|
ROM_FILL( 0x14de, 2, 0x00 )
|
||||||
|
ROM_FILL( 0x1528, 2, 0x00 )
|
||||||
|
ROM_FILL( 0x16fe, 2, 0x00 )
|
||||||
|
|
||||||
|
ROM_REGION( 0x200, "eeprom", ROMREGION_ERASE00 )
|
||||||
|
ROM_END
|
||||||
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
@ -224,6 +365,9 @@ ROM_END
|
|||||||
Drivers
|
Drivers
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||||
CONS( 2009, avrmax, 0, 0, avrmax, avrmax, avrmax_state, empty_init, "Elektor", "AVR-Max Chess Computer (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
|
CONS( 2009, avrmax, 0, 0, avrmax, avrmax, avrmax_state, empty_init, "Elektor", "AVR-Max Chess Computer (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
|
||||||
CONS( 2009, avrmaxg, avrmax, 0, avrmax, avrmax, avrmax_state, empty_init, "Elektor", "AVR-Max-Schachzwerg (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW ) // German 'text'
|
CONS( 2009, avrmaxg, avrmax, 0, avrmax, avrmax, avrmax_state, empty_init, "Elektor", "AVR-Max-Schachzwerg (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW ) // German 'text'
|
||||||
|
|
||||||
|
CONS( 2009, atm18mcc, 0, 0, atm18mcc, avrmax, avrmax_state, empty_init, "Elektor", "ATM18 Mini Chess Computer (English)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
|
||||||
|
CONS( 2009, cc2schach, atm18mcc, 0, atm18mcc, avrmax, avrmax_state, empty_init, "Elektor", "CC2-Schachzwerg (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NO_SOUND_HW )
|
||||||
|
@ -58,8 +58,8 @@ $2400 // Chess Board
|
|||||||
$2800 // Chess Board
|
$2800 // Chess Board
|
||||||
$3000 // Chess Board
|
$3000 // Chess Board
|
||||||
|
|
||||||
$4000-7FFF Opening Modul HG550
|
$4000-$7FFF Opening Module HG550
|
||||||
$8000-$FFF ROM
|
$8000-$FFFF ROM
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
|
||||||
|
69
src/mame/layout/atm18mcc.lay
Normal file
69
src/mame/layout/atm18mcc.lay
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
license:CC0
|
||||||
|
-->
|
||||||
|
<mamelayout version="2">
|
||||||
|
|
||||||
|
<!-- NOTE: no chesspieces simulation here -->
|
||||||
|
|
||||||
|
<!-- define elements -->
|
||||||
|
|
||||||
|
<element name="lcdw"><rect><color red="1" green="1" blue="1" /></rect></element>
|
||||||
|
<element name="lcdm"><rect><color red="0.37" green="0.45" blue="0.1" /></rect></element>
|
||||||
|
<element name="lcda"><rect><color red="0.02" green="0.06" blue="0.08" /></rect></element>
|
||||||
|
|
||||||
|
<element name="but" defstate="0">
|
||||||
|
<disk state="0"><color red="0.21" green="0.2" blue="0.2" /></disk>
|
||||||
|
<disk state="1"><color red="0.31" green="0.3" blue="0.3" /></disk>
|
||||||
|
</element>
|
||||||
|
|
||||||
|
<element name="text_1"><text string="A1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
<element name="text_2"><text string="B2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
<element name="text_3"><text string="C3"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
<element name="text_4"><text string="D4"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
<element name="text_5"><text string="E5"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
<element name="text_6"><text string="F6"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
<element name="text_7"><text string="G7"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
<element name="text_8"><text string="H8"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
|
||||||
|
<element name="text_fn"><text string="FN"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
<element name="text_cl"><text string="CL"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
<element name="text_go"><text string="GO"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- build screen -->
|
||||||
|
|
||||||
|
<view name="Internal Layout">
|
||||||
|
<bounds left="-13.492" right="80" top="5" bottom="47" />
|
||||||
|
|
||||||
|
<element ref="lcdw"><bounds x="-8.492" y="10" width="48.492" height="15" /></element>
|
||||||
|
<screen index="0"><bounds x="-7.792" y="10.3" width="47.092" height="14.4" /></screen>
|
||||||
|
<element ref="lcdm" blend="multiply"><bounds x="-8.492" y="10" width="48.492" height="15" /></element>
|
||||||
|
<element ref="lcda" blend="add"><bounds x="-8.492" y="10" width="48.492" height="15" /></element>
|
||||||
|
|
||||||
|
<element ref="text_1"><bounds x="50" y="6" width="5" height="4" /></element>
|
||||||
|
<element ref="text_2"><bounds x="60" y="6" width="5" height="4" /></element>
|
||||||
|
<element ref="text_3"><bounds x="70" y="6" width="5" height="4" /></element>
|
||||||
|
<element ref="text_4"><bounds x="50" y="16" width="5" height="4" /></element>
|
||||||
|
<element ref="text_5"><bounds x="60" y="16" width="5" height="4" /></element>
|
||||||
|
<element ref="text_6"><bounds x="70" y="16" width="5" height="4" /></element>
|
||||||
|
<element ref="text_7"><bounds x="50" y="26" width="5" height="4" /></element>
|
||||||
|
<element ref="text_8"><bounds x="60" y="26" width="5" height="4" /></element>
|
||||||
|
<element ref="text_fn"><bounds x="50" y="36" width="5" height="4" /></element>
|
||||||
|
<element ref="text_cl"><bounds x="60" y="36" width="5" height="4" /></element>
|
||||||
|
<element ref="text_go"><bounds x="70" y="36" width="5" height="4" /></element>
|
||||||
|
|
||||||
|
<element ref="but" inputtag="IN.0" inputmask="0x01"><bounds x="50" y="10" width="5" height="5" /></element>
|
||||||
|
<element ref="but" inputtag="IN.1" inputmask="0x01"><bounds x="60" y="10" width="5" height="5" /></element>
|
||||||
|
<element ref="but" inputtag="IN.2" inputmask="0x01"><bounds x="70" y="10" width="5" height="5" /></element>
|
||||||
|
<element ref="but" inputtag="IN.3" inputmask="0x01"><bounds x="50" y="20" width="5" height="5" /></element>
|
||||||
|
<element ref="but" inputtag="IN.0" inputmask="0x02"><bounds x="60" y="20" width="5" height="5" /></element>
|
||||||
|
<element ref="but" inputtag="IN.1" inputmask="0x02"><bounds x="70" y="20" width="5" height="5" /></element>
|
||||||
|
<element ref="but" inputtag="IN.2" inputmask="0x02"><bounds x="50" y="30" width="5" height="5" /></element>
|
||||||
|
<element ref="but" inputtag="IN.3" inputmask="0x02"><bounds x="60" y="30" width="5" height="5" /></element>
|
||||||
|
<element ref="but" inputtag="IN.0" inputmask="0x04"><bounds x="50" y="40" width="5" height="5" /></element>
|
||||||
|
<element ref="but" inputtag="IN.1" inputmask="0x04"><bounds x="60" y="40" width="5" height="5" /></element>
|
||||||
|
<element ref="but" inputtag="IN.2" inputmask="0x04"><bounds x="70" y="40" width="5" height="5" /></element>
|
||||||
|
|
||||||
|
</view>
|
||||||
|
</mamelayout>
|
@ -3257,8 +3257,10 @@ avigo_it // 1997 Avigo (Italian)
|
|||||||
aviion_4600 // Data General AViiON 4600
|
aviion_4600 // Data General AViiON 4600
|
||||||
|
|
||||||
@source:elektor/avrmax.cpp
|
@source:elektor/avrmax.cpp
|
||||||
|
atm18mcc
|
||||||
avrmax
|
avrmax
|
||||||
avrmaxg
|
avrmaxg
|
||||||
|
cc2schach
|
||||||
|
|
||||||
@source:misc/avt.cpp
|
@source:misc/avt.cpp
|
||||||
avtbingo // (c) 1985 AVT
|
avtbingo // (c) 1985 AVT
|
||||||
|
Loading…
Reference in New Issue
Block a user