diff options
author | 2017-04-04 23:36:10 -0400 | |
---|---|---|
committer | 2017-04-06 11:36:10 +1000 | |
commit | ee19701c2cd582c17c8a3b855386cd1b79856560 (patch) | |
tree | c5ec81932e523750d51d52cc6aaec2a723209999 | |
parent | 357b5778a56e0efc7cfd5c0b8098af8478bf7b0a (diff) |
nes.xml: new dumps
Adan y Eva [hashes were known, but ROMs surfaced on No-Intro]
AV Super Real Pachinko [Frank Cifaldi]
nes.xml: Marked edu2k48 as working, added notes about mouse titles.
Made koko not use battery-backed WRAM as evidenced on PCB picture. (nw)
bus/nes/waixing.cpp: Slight modernizations. waixing_sgzlz_device is now
implemented the way CaH4e3 does it, also gets some titles mostly working
in full. (nw)
fc_suborkey_device: Make PgUp and PgDown keys actually work (nw)
-rw-r--r-- | hash/nes.xml | 44 | ||||
-rw-r--r-- | src/devices/bus/nes/subor.cpp | 6 | ||||
-rw-r--r-- | src/devices/bus/nes/waixing.cpp | 81 | ||||
-rw-r--r-- | src/devices/bus/nes/waixing.h | 2 | ||||
-rw-r--r-- | src/devices/bus/nes_ctrl/suborkey.cpp | 6 |
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 & 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)) |