mirror of
https://github.com/holub/mame
synced 2025-04-22 00:11:58 +03:00
Software list items promoted to working
--------------------------------------- c64_cart: The Final ChessCard (Ger, v1.0) [hap] New working software list additions ----------------------------------- c64_cart: The Final ChessCard (Eng, v1.0) [hap, Ratuv] c64_cart: The Final ChessCard (Ger, v1.5) [hap, DDI]
This commit is contained in:
parent
fa2c75735a
commit
f748a7fe59
@ -6661,18 +6661,63 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fcc" supported="no">
|
||||
<description>The Final ChessCard (Ger)</description>
|
||||
<software name="fcc">
|
||||
<description>The Final ChessCard (Eng, v1.0)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Tasc</publisher>
|
||||
|
||||
<part name="cart" interface="c64_cart">
|
||||
<feature name="slot" value="fcc" />
|
||||
<feature name="exrom" value="0" />
|
||||
<feature name="game" value="0" />
|
||||
<feature name="exrom" value="1" />
|
||||
<feature name="game" value="1" />
|
||||
|
||||
<dataarea name="roml" size="0x8000">
|
||||
<rom name="fcc_rom2" size="0x8000" crc="8fc0f156" sha1="c843729870e7ce59bb64b60ebec028f7200f93d1" offset="0x0000" />
|
||||
<dataarea name="roml" size="0x8000"> <!-- c64 cpu -->
|
||||
<rom name="fcc_rom2" size="0x8000" crc="1680163b" sha1="ddd7154c6ccd6aed9d99c1b7892c3513f0aa2b47" />
|
||||
</dataarea>
|
||||
<dataarea name="romh" size="0x8000"> <!-- cartridge cpu -->
|
||||
<rom name="fcc_rom1" size="0x8000" crc="2949836a" sha1="9e6283095df9e3f4802ed0c654101f8e37168bf6" />
|
||||
</dataarea>
|
||||
|
||||
<dataarea name="nvram" size="0x2000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fccg">
|
||||
<description>The Final ChessCard (Ger, v1.5)</description>
|
||||
<year>1990</year>
|
||||
<publisher>Tasc</publisher>
|
||||
|
||||
<part name="cart" interface="c64_cart">
|
||||
<feature name="slot" value="fcc" />
|
||||
<feature name="exrom" value="1" />
|
||||
<feature name="game" value="1" />
|
||||
|
||||
<dataarea name="roml" size="0x8000"> <!-- c64 cpu -->
|
||||
<rom name="fcc_rom2" size="0x8000" crc="181be1a4" sha1="4c84ca97a94c2577bf1c7ce4acc5fe12ec284751" />
|
||||
</dataarea>
|
||||
<dataarea name="romh" size="0x8000"> <!-- cartridge cpu -->
|
||||
<rom name="fcc_rom1" size="0x8000" crc="a45b6090" sha1="a9912f82364bb424df9eced39fb709b3ba8a7f9e" />
|
||||
</dataarea>
|
||||
|
||||
<dataarea name="nvram" size="0x2000" />
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fccgo">
|
||||
<description>The Final ChessCard (Ger, v1.0)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Tasc</publisher>
|
||||
|
||||
<part name="cart" interface="c64_cart">
|
||||
<feature name="slot" value="fcc" />
|
||||
<feature name="exrom" value="1" />
|
||||
<feature name="game" value="1" />
|
||||
|
||||
<dataarea name="roml" size="0x8000"> <!-- c64 cpu -->
|
||||
<rom name="fcc_rom2" size="0x8000" crc="8fc0f156" sha1="c843729870e7ce59bb64b60ebec028f7200f93d1" />
|
||||
</dataarea>
|
||||
<dataarea name="romh" size="0x8000"> <!-- cartridge cpu -->
|
||||
<rom name="fcc_rom1" size="0x8000" crc="2949836a" sha1="9e6283095df9e3f4802ed0c654101f8e37168bf6" />
|
||||
</dataarea>
|
||||
|
||||
<dataarea name="nvram" size="0x2000" />
|
||||
|
@ -149,6 +149,27 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fcc"> <!-- optional -->
|
||||
<description>The Final ChessCard</description>
|
||||
<year>1990</year>
|
||||
<publisher>Tasc</publisher>
|
||||
<sharedfeat name="requirement" value="c64_cart:fcc"/>
|
||||
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<feature name="part_id" value="Disk 1"/>
|
||||
<dataarea name="flop" size="174848">
|
||||
<rom name="fcc_disk1.d64" size="174848" crc="c726ab83" sha1="9196fb222faf4b7c07e7814a25f65779ee35032d" />
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
<part name="flop2" interface="floppy_5_25">
|
||||
<feature name="part_id" value="Disk 2"/>
|
||||
<dataarea name="flop" size="174848">
|
||||
<rom name="fcc_disk2.d64" size="174848" crc="60042a32" sha1="c768a13201bdf78e1dd387ef9370dc10259d3f22" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="grnberet">
|
||||
<description>Green Beret</description>
|
||||
<year>1986</year>
|
||||
|
@ -1,38 +1,19 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
// copyright-holders:Curt Coder, hap
|
||||
/**********************************************************************
|
||||
|
||||
Tasc Final ChessCard cartridge emulation
|
||||
Tasc Final ChessCard cartridge emulation
|
||||
|
||||
The cartridge includes its own CPU (G65SC02P-4 @ 5MHz), making a relatively
|
||||
strong chess program possible on C64.
|
||||
It was also released for IBM PC, with an ISA card.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
/*
|
||||
|
||||
TODO:
|
||||
|
||||
629D ldx #$00
|
||||
629F stx $0e
|
||||
62A1 sta $df00
|
||||
62A4 inc $d020
|
||||
62A7 dec $d020
|
||||
62AA cpx $0e
|
||||
62AC beq $62a4 <-- eternal loop here
|
||||
62AE rts
|
||||
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "fcc.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// MACROS/CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define G65SC02P4_TAG "g65sc02p4"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
@ -40,34 +21,15 @@
|
||||
DEFINE_DEVICE_TYPE(C64_FCC, c64_final_chesscard_device, "c64_fcc", "Final ChessCard")
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( c64_fcc )
|
||||
//-------------------------------------------------
|
||||
|
||||
ROM_START( c64_fcc )
|
||||
ROM_REGION( 0x8000, G65SC02P4_TAG, 0 )
|
||||
ROM_LOAD( "fcc_rom1", 0x0000, 0x8000, CRC(2949836a) SHA1(9e6283095df9e3f4802ed0c654101f8e37168bf6) )
|
||||
ROM_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rom_region - device-specific ROM region
|
||||
//-------------------------------------------------
|
||||
|
||||
const tiny_rom_entry *c64_final_chesscard_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME( c64_fcc );
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ADDRESS_MAP( c64_fcc_map )
|
||||
//-------------------------------------------------
|
||||
|
||||
void c64_final_chesscard_device::c64_fcc_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x1fff).mirror(0x6000).rw(FUNC(c64_final_chesscard_device::nvram_r), FUNC(c64_final_chesscard_device::nvram_w));
|
||||
map(0x8000, 0xffff).rom().region(G65SC02P4_TAG, 0);
|
||||
map(0x0000, 0x1fff).rw(FUNC(c64_final_chesscard_device::nvram_r), FUNC(c64_final_chesscard_device::nvram_w)); // A13-A15 = low
|
||||
map(0x7f00, 0x7f00).mirror(0x00ff).r(m_sublatch, FUNC(generic_latch_8_device::read)).w(m_mainlatch, FUNC(generic_latch_8_device::write)); // A8-A14 = high
|
||||
map(0x8000, 0xffff).r(FUNC(c64_final_chesscard_device::rom_r));
|
||||
}
|
||||
|
||||
|
||||
@ -79,6 +41,11 @@ void c64_final_chesscard_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
M65SC02(config, m_maincpu, XTAL(5'000'000));
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &c64_final_chesscard_device::c64_fcc_map);
|
||||
|
||||
config.m_perfect_cpu_quantum = subtag("maincpu");
|
||||
|
||||
GENERIC_LATCH_8(config, m_mainlatch).data_pending_callback().set(FUNC(c64_final_chesscard_device::mainlatch_int));
|
||||
GENERIC_LATCH_8(config, m_sublatch).data_pending_callback().set_inputline(m_maincpu, INPUT_LINE_NMI);
|
||||
}
|
||||
|
||||
|
||||
@ -114,9 +81,11 @@ c64_final_chesscard_device::c64_final_chesscard_device(const machine_config &mco
|
||||
device_t(mconfig, C64_FCC, tag, owner, clock),
|
||||
device_c64_expansion_card_interface(mconfig, *this),
|
||||
device_nvram_interface(mconfig, *this),
|
||||
m_maincpu(*this, G65SC02P4_TAG),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_mainlatch(*this, "mainlatch"),
|
||||
m_sublatch(*this, "sublatch"),
|
||||
m_bank(0),
|
||||
m_ramen(0)
|
||||
m_hidden(0)
|
||||
{
|
||||
}
|
||||
|
||||
@ -127,6 +96,9 @@ c64_final_chesscard_device::c64_final_chesscard_device(const machine_config &mco
|
||||
|
||||
void c64_final_chesscard_device::device_start()
|
||||
{
|
||||
// state saving
|
||||
save_item(NAME(m_bank));
|
||||
save_item(NAME(m_hidden));
|
||||
}
|
||||
|
||||
|
||||
@ -139,7 +111,8 @@ void c64_final_chesscard_device::device_reset()
|
||||
m_maincpu->reset();
|
||||
|
||||
m_bank = 0;
|
||||
m_ramen = 0;
|
||||
m_hidden = 0;
|
||||
m_exrom = 0;
|
||||
m_game = 0;
|
||||
}
|
||||
|
||||
@ -150,21 +123,10 @@ void c64_final_chesscard_device::device_reset()
|
||||
|
||||
uint8_t c64_final_chesscard_device::c64_cd_r(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
|
||||
{
|
||||
if (!roml)
|
||||
{
|
||||
if (m_ramen)
|
||||
{
|
||||
data = m_nvram[offset & 0x1fff];
|
||||
}
|
||||
else
|
||||
{
|
||||
data = m_roml[(m_bank << 14) | (offset & 0x3fff)];
|
||||
}
|
||||
}
|
||||
else if (!romh)
|
||||
{
|
||||
if (!roml || !romh)
|
||||
data = m_roml[(m_bank << 14) | (offset & 0x3fff)];
|
||||
}
|
||||
else if (!io2)
|
||||
data = m_mainlatch->read();
|
||||
|
||||
return data;
|
||||
}
|
||||
@ -176,72 +138,16 @@ uint8_t c64_final_chesscard_device::c64_cd_r(offs_t offset, uint8_t data, int sp
|
||||
|
||||
void c64_final_chesscard_device::c64_cd_w(offs_t offset, uint8_t data, int sphi2, int ba, int roml, int romh, int io1, int io2)
|
||||
{
|
||||
if (!roml)
|
||||
if (!m_hidden && !io1)
|
||||
{
|
||||
if (m_ramen)
|
||||
{
|
||||
m_nvram[offset & 0x1fff] = data;
|
||||
}
|
||||
}
|
||||
else if (!io1)
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0 ?
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
|
||||
*/
|
||||
|
||||
printf("IO1 %04x %02x\n", offset, data);
|
||||
// d0: rom bank
|
||||
// d1: EXROM/GAME
|
||||
// d7: hide register
|
||||
m_bank = BIT(data, 0);
|
||||
m_exrom = BIT(data, 1);
|
||||
m_game = BIT(data, 1);
|
||||
m_hidden = BIT(data, 7);
|
||||
}
|
||||
else if (!io2)
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
0 ?
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
7 ?
|
||||
|
||||
*/
|
||||
|
||||
printf("IO2 %04x %02x\n", offset, data);
|
||||
m_ramen = BIT(data, 0);
|
||||
m_game = BIT(data, 7);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// nvram_r - NVRAM read
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( c64_final_chesscard_device::nvram_r )
|
||||
{
|
||||
return m_nvram[offset & m_nvram.mask()];
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// nvram_w - NVRAM write
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( c64_final_chesscard_device::nvram_w )
|
||||
{
|
||||
m_nvram[offset & m_nvram.mask()] = data;
|
||||
m_sublatch->write(data);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
// copyright-holders:Curt Coder, hap
|
||||
/**********************************************************************
|
||||
|
||||
Tasc Final ChessCard cartridge emulation
|
||||
@ -13,6 +13,7 @@
|
||||
|
||||
#include "exp.h"
|
||||
#include "cpu/m6502/m65sc02.h"
|
||||
#include "machine/gen_latch.h"
|
||||
|
||||
|
||||
|
||||
@ -36,7 +37,6 @@ protected:
|
||||
virtual void device_reset() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
@ -51,12 +51,16 @@ protected:
|
||||
|
||||
private:
|
||||
required_device<m65sc02_device> m_maincpu;
|
||||
required_device<generic_latch_8_device> m_mainlatch;
|
||||
required_device<generic_latch_8_device> m_sublatch;
|
||||
|
||||
uint8_t m_bank;
|
||||
int m_ramen;
|
||||
int m_hidden;
|
||||
|
||||
DECLARE_READ8_MEMBER( nvram_r );
|
||||
DECLARE_WRITE8_MEMBER( nvram_w );
|
||||
DECLARE_WRITE_LINE_MEMBER(mainlatch_int) { m_slot->nmi_w(state); }
|
||||
DECLARE_READ8_MEMBER(rom_r) { return m_romh[offset]; } // cartridge cpu rom
|
||||
DECLARE_READ8_MEMBER(nvram_r) { return m_nvram[offset & m_nvram.mask()]; }
|
||||
DECLARE_WRITE8_MEMBER(nvram_w) { m_nvram[offset & m_nvram.mask()] = data; }
|
||||
|
||||
void c64_fcc_map(address_map &map);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user