summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/nes.xml44
-rw-r--r--src/devices/bus/nes/subor.cpp6
-rw-r--r--src/devices/bus/nes/waixing.cpp81
-rw-r--r--src/devices/bus/nes/waixing.h2
-rw-r--r--src/devices/bus/nes_ctrl/suborkey.cpp6
5 files changed, 102 insertions, 37 deletions
diff --git a/hash/nes.xml b/hash/nes.xml
index b48c8558be4..ca40567aa5a 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -47108,9 +47108,8 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<dataarea name="prg" size="131072">
<rom name="ds-f301 prg.u3" size="131072" crc="710e3cf9" sha1="45e82bec4a0d4685be20feaacb4c57b4bea09575" offset="00000" />
</dataarea>
- <!-- 8k WRAM on cartridge, battery backed up -->
- <dataarea name="bwram" size="8192">
- <rom value="0x00" size="8192" offset="0" loadflag="fill" />
+ <!-- 8k WRAM on cartridge -->
+ <dataarea name="wram" size="8192">
</dataarea>
</part>
</software>
@@ -52930,13 +52929,14 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
</software>
<!-- Alt. Title: Adan y Eva (on the cart label) -->
- <!--software name="adanyeva">
+ <software name="adanyeva">
<description>Adam &amp; Eve (Spa)</description>
<year>1991</year>
<publisher>Gluk Video</publisher>
<info name="serial" value="CN-11"/>
<info name="release" value="19910101"/>
<part name="cart" interface="nes_cart">
+ <feature name="slot" value="cnrom" />
<feature name="pcb" value="NTDEC-N715062" />
<feature name="mirroring" value="vertical" />
<dataarea name="prg" size="32768">
@@ -52946,7 +52946,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<rom name="0.chr" size="32768" crc="0a7307d9" sha1="de1ef6c5c390947aab477afe7d61e37b6c4d2e32" offset="00000" />
</dataarea>
</part>
- </software-->
+ </software>
<software name="destroyr">
<description>Destroyer (Spa)</description>
@@ -58153,6 +58153,25 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
</part>
</software>
+<!-- Frank Cifaldi's dump -->
+ <software name="avsrpchi">
+ <description>AV Super Real Pachinko (Jpn)</description>
+ <year>1991</year>
+ <publisher>Hacker International</publisher>
+ <info name="serial" value="HKI-07"/>
+ <info name="alt_title" value="AVスーパーリアルパチンコ"/>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="gxrom" />
+ <feature name="pcb" value="2209-A" />
+ <dataarea name="chr" size="65536">
+ <rom name="0.chr" size="65536" crc="be68914b" sha1="c77697cfc97464cec7517f72d0824aba2e1e43e7" offset="00000" />
+ </dataarea>
+ <dataarea name="prg" size="65536">
+ <rom name="0.prg" size="65536" crc="b66ff0f1" sha1="c11d158465475bfe8fdd950fb39180df2ef597f0" offset="00000" />
+ </dataarea>
+ </part>
+ </software>
+
<!-- nointro -->
<software name="hanafuda">
<description>Hanafuda Yuukyou Den - Nagarebana Oryuu (Jpn)</description>
@@ -61360,6 +61379,7 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
<description>Dance 2000 - 12 in 1 (Chi)</description>
<year>2000?</year>
<publisher>Benli</publisher>
+ <info name="alt_title" value="奔力跳舞天使动感2000 12 IN 1"/>
<part name="cart" interface="nes_cart">
<feature name="slot" value="subor2" />
<feature name="pcb" value="UNL-DANCE2000" />
@@ -69137,11 +69157,13 @@ Also notice that VRAM & WRAM are probably incorrect for some of these sets, at t
<!-- Russian & Chinese pirate educational computers / famiclones
-Also notice that VRAM, WRAM & mirror are probably incorrect for some of these sets, at the moment... -->
+Take note that some of these carts require a mouse, which is why some carts that have software that do
+not work without a mouse of some sort are marked as partial due to the lack of mouse emulation.
-<!-- TODO: waixing_sgzlz based carts either need a new board, or they are not being handled right!
-The wrong PRG/CHR can be selected on some carts (Karaoke returns to Solitaire on edu2k48), or some games
-simply will not work at all! (Most selections in magistr2 just crash!) -->
+However, some carts that do have mouse support like edu2k48 are fully navigatable without a mouse... Hence
+they are marked as fully working.
+
+Also notice that VRAM, WRAM & mirror are probably incorrect for some of these sets, at the moment... -->
<software name="liko3in1">
<description>LIKO Study Cartridge 3 in 1 (Rus)</description>
@@ -69225,7 +69247,7 @@ simply will not work at all! (Most selections in magistr2 just crash!) -->
</part>
</software>
- <software name="edu2k48" supported="partial">
+ <software name="edu2k48">
<description>Education Computer 2000 48 in 1 (Asia?, Fixed)</description>
<!-- 'Shenzhen Brave' references and a copyright from 2004 are in the ROM -->
<!-- However, the cart itself probably had many different publishers -->
@@ -69286,6 +69308,7 @@ simply will not work at all! (Most selections in magistr2 just crash!) -->
</part>
</software>
+ <!-- Does battery-backed WRAM actually work here? Trying to save files on WORD does nothing -->
<software name="glk48" supported="partial">
<description>GLK Book 48 in 1 (Asia?)</description>
<year>19??</year>
@@ -69351,6 +69374,7 @@ simply will not work at all! (Most selections in magistr2 just crash!) -->
</software>
<!-- This has an additional (and currently unemulated) sound chip, possibly an ADPCM! -->
+<!-- TODO: New board -->
<software name="magistr2" supported="partial">
<description>Magistr-Genie 2 (Rus)</description>
<year>19??</year>
diff --git a/src/devices/bus/nes/subor.cpp b/src/devices/bus/nes/subor.cpp
index 581c9ce5acd..7d32104456a 100644
--- a/src/devices/bus/nes/subor.cpp
+++ b/src/devices/bus/nes/subor.cpp
@@ -7,7 +7,8 @@
TODO:
- Implement Type 2 variant for Subor Karaoke.
(Subor Karaoke updates banks differently.)
- - Check and verify CHR banking in Type 2 boards
+ - Type 2 boards work correct with the current CHR banking scheme, but proper emulation for this
+ (and Oeka Kids) will require aditional PPU code
- Investigate connection with DANCE 2000 board; likely made by ex-Subor staff!
***********************************************************************************************************/
@@ -163,7 +164,8 @@ void nes_subor2_device::pcb_reset()
void nes_subor2_device::ppu_latch(offs_t offset)
{
/* CHR banks are conditionally changed midframe */
- /* If this is split off onto the external PPU latch, every edge case works */
+ /* This is not the correct way to do it... But if this is split
+ off onto the external PPU latch, every edge case works */
if (m_chr_banking)
{
if ( (m_page == 2) || (m_page == 1 && m_switch_reg == 2) )
diff --git a/src/devices/bus/nes/waixing.cpp b/src/devices/bus/nes/waixing.cpp
index 14dad5f7144..62b6a7d7b98 100644
--- a/src/devices/bus/nes/waixing.cpp
+++ b/src/devices/bus/nes/waixing.cpp
@@ -142,7 +142,7 @@ nes_waixing_sgz_device::nes_waixing_sgz_device(const machine_config &mconfig, co
}
nes_waixing_sgzlz_device::nes_waixing_sgzlz_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : nes_nrom_device(mconfig, NES_WAIXING_SGZLZ, "NES Cart Waixing San Guo Zhong Lie Zhuan PCB", tag, owner, clock, "nes_waixing_sgzlz", __FILE__), m_latch(0)
+ : nes_nrom_device(mconfig, NES_WAIXING_SGZLZ, "NES Cart Waixing San Guo Zhong Lie Zhuan PCB", tag, owner, clock, "nes_waixing_sgzlz", __FILE__), m_reg{}
{
}
@@ -183,7 +183,7 @@ void nes_waixing_a_device::pcb_reset()
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
mmc3_common_initialize(0xff, 0xff, 0);
- memset(mapper_ram, 0, sizeof(mapper_ram));
+ std::fill(std::begin(mapper_ram), std::end(mapper_ram), 0x00);
}
void nes_waixing_f_device::pcb_reset()
@@ -191,7 +191,7 @@ void nes_waixing_f_device::pcb_reset()
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
mmc3_common_initialize(0xff, 0xff, 0);
- memset(mapper_ram, 0, sizeof(mapper_ram));
+ std::fill(std::begin(mapper_ram), std::end(mapper_ram), 0x00);
m_mmc_prg_bank[0] = 0x00;
m_mmc_prg_bank[1] = 0x01;
m_mmc_prg_bank[2] = 0x4e;
@@ -204,7 +204,7 @@ void nes_waixing_g_device::pcb_reset()
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
mmc3_common_initialize(0xff, 0xff, 0);
- memset(mapper_ram, 0, sizeof(mapper_ram));
+ std::fill(std::begin(mapper_ram), std::end(mapper_ram), 0x00);
m_mmc_prg_bank[0] = 0x00;
m_mmc_prg_bank[1] = 0x01;
m_mmc_prg_bank[2] = 0x3e;
@@ -289,13 +289,13 @@ void nes_waixing_sgz_device::pcb_reset()
m_irq_count = 0;
m_irq_count_latch = 0;
- memset(m_mmc_vrom_bank, 0, sizeof(m_mmc_vrom_bank));
+ std::fill(std::begin(m_mmc_vrom_bank), std::end(m_mmc_vrom_bank), 0x00);
}
void nes_waixing_sgzlz_device::device_start()
{
common_start();
- save_item(NAME(m_latch));
+ save_item(NAME(m_reg));
}
void nes_waixing_sgzlz_device::pcb_reset()
@@ -304,7 +304,7 @@ void nes_waixing_sgzlz_device::pcb_reset()
prg32(0);
chr8(0, m_chr_source);
- m_latch = 0;
+ std::fill(std::begin(m_reg), std::end(m_reg), 0x00);
}
void nes_waixing_ffv_device::device_start()
@@ -372,7 +372,7 @@ void nes_waixing_fs304_device::pcb_reset()
prg32(0);
chr8(0, m_chr_source);
- memset(m_reg, 0x00, sizeof(m_reg));
+ std::fill(std::begin(m_reg), std::end(m_reg), 0x00);
}
@@ -1035,30 +1035,69 @@ WRITE8_MEMBER(nes_waixing_sgz_device::write_h)
Waixing San Guo Zhong Lie Zhuan Board
Games: Fan Kong Jing Ying, San Guo Zhong Lie Zhuan, Xing
- Ji Zheng Ba
+ Ji Zheng Ba, Chong Wu Da Jia Zu Bu Luo Fen Zheng
iNES: mapper 178
In MESS: Supported.
+
+ Implementations wildly vary between emulators, but
+ Cah4e3's implementation boots up both the games and
+ the educational carts that assumedly use this board.
+
+ TODO: Is this even correct compared to real hardware?
-------------------------------------------------*/
WRITE8_MEMBER(nes_waixing_sgzlz_device::write_l)
{
LOG_MMC(("waixing_sgzlz write_l, offset: %04x, data: %02x\n", offset, data));
-
- switch (offset)
+ if (offset >= 0x700 && offset <= 0xEFF)
{
- case 0x700:
- set_nt_mirroring(data ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
- break;
- case 0x701:
- m_latch = (m_latch & 0x0c) | ((data >> 1) & 0x03);
- prg32(m_latch);
- break;
- case 0x702:
- m_latch = (m_latch & 0x03) | ((data << 2) & 0x0c);
- break;
+ m_reg[offset & 0x03] = data;
+ const uint8_t hbank = m_reg[1] & 0x7;
+ const uint8_t lbank = m_reg[2];
+ const uint8_t bank = (lbank << 3) | hbank;
+
+ // NESDev docs do it like this:
+ // case 0x700:
+ // set_nt_mirroring(data ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
+ // case 0x701:
+ // reg1 = (value >> 1);
+ // bank = reg1 + (reg2 << 2);
+ // prg32(bank);
+ // break;
+ // case 0x702:
+ // reg2 = value;
+ // break;
+
+ if (BIT(m_reg[0], 1))
+ {
+ // UNROM-ish mode
+ prg16_89ab(bank);
+ if (BIT(m_reg[0], 3))
+ {
+ prg16_cdef((lbank << 3) | 6 | BIT(m_reg[1], 0));
+ }
+ else
+ {
+ prg16_cdef((lbank << 3) | 7);
+ }
+ }
+ else
+ { // NROM mode
+ if (BIT(m_reg[0], 3))
+ {
+ prg16_89ab(bank);
+ prg16_cdef(bank);
+ }
+ else
+ {
+ prg32(bank >> 1);
+ }
+ }
+
+ set_nt_mirroring(BIT(m_reg[0], 0) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
}
diff --git a/src/devices/bus/nes/waixing.h b/src/devices/bus/nes/waixing.h
index 98d03b725b7..dd53d109e73 100644
--- a/src/devices/bus/nes/waixing.h
+++ b/src/devices/bus/nes/waixing.h
@@ -276,7 +276,7 @@ public:
virtual void pcb_reset() override;
protected:
- uint8_t m_latch;
+ uint8_t m_reg[4];
};
diff --git a/src/devices/bus/nes_ctrl/suborkey.cpp b/src/devices/bus/nes_ctrl/suborkey.cpp
index 2f4c0969742..a19b215bb85 100644
--- a/src/devices/bus/nes_ctrl/suborkey.cpp
+++ b/src/devices/bus/nes_ctrl/suborkey.cpp
@@ -2,7 +2,7 @@
// copyright-holders:Fabio Priuli
/**********************************************************************
- Nintendo Family Computer Subor Keyboard (used by some Famiclones)
+ Xiao Ba Wang/Subor Keyboard (used by most Subor machines and other keyboard Famiclones)
**********************************************************************/
@@ -40,10 +40,10 @@ static INPUT_PORTS_START( fc_suborkey )
PORT_START("SUBOR.2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NEXT")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NEXT") PORT_CODE(KEYCODE_PGDN) PORT_CHAR(UCHAR_MAMEKEY(PGDN))
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))
- PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PRIOR")
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PRIOR") PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL))
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))