From c17e4d8ca814148f6a1dd7350d32982f9a7a19be Mon Sep 17 00:00:00 2001 From: David Haywood Date: Fri, 14 Jul 2017 02:43:13 +0100 Subject: new NOT WORKING - VG Pocket (VG-2000) [BeckieRGB] (#2433) * new NOT WORKING - VG Pocket (VG-2000) [BeckieRGB] * new NOT WORKING VG Pocket Mini (VG-1500) [BeckieRGB] mostly needs the nametable mirroring registers emulated, and proper palettes for this extended mode --- src/mame/drivers/nes_vt.cpp | 47 ++++++++++++++++++++++++++++++++++++++++----- src/mame/mame.lst | 2 ++ 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/mame/drivers/nes_vt.cpp b/src/mame/drivers/nes_vt.cpp index 535183db8a2..f1a77791f7a 100644 --- a/src/mame/drivers/nes_vt.cpp +++ b/src/mame/drivers/nes_vt.cpp @@ -15,8 +15,8 @@ VT03 - above + 4bpp sprite / bg modes, enhanced palette VT08 - ? - - VT09 - 8bpp or direct colour modes? + + VT09 - alt 4bpp modes? VT16 - ? VT18 - ? @@ -46,6 +46,9 @@ Add more Famiclone roms here, there should be plenty more dumps of VTxx based systems floating about. + Make sure that none of the unenhanced sets were actually sold as cartridges + instead, there is a lack of information for some of the older dumps and + still some dumps in nes.xml that might belong here. NON-bugs (same happens on real hardware) @@ -67,6 +70,7 @@ class nes_vt_state : public nes_base_state public: nes_vt_state(const machine_config &mconfig, device_type type, const char *tag) : nes_base_state(mconfig, type, tag) + , m_ntram(nullptr) , m_ppu(*this, "ppu") , m_apu(*this, "apu") , m_prg(*this, "prg") @@ -100,6 +104,12 @@ public: DECLARE_READ8_MEMBER(chr_r); private: + + /* expansion nametable - todo, see if we can refactor NES code to be reusable without having to add full NES bus etc. */ + std::unique_ptr m_ntram; + DECLARE_READ8_MEMBER(nt_r); + DECLARE_WRITE8_MEMBER(nt_w); + void scanline_irq(int scanline, int vblank, int blanked); uint8_t m_410x[0xc]; @@ -321,7 +331,16 @@ void nes_vt_state::scanline_irq(int scanline, int vblank, int blanked) m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); } +/* todo, handle custom VT nametable stuff here */ +READ8_MEMBER(nes_vt_state::nt_r) +{ + return m_ntram[offset]; +} +WRITE8_MEMBER(nes_vt_state::nt_w) +{ + m_ntram[offset] = data; +} void nes_vt_state::machine_start() { @@ -342,8 +361,13 @@ void nes_vt_state::machine_start() save_item(NAME(m_timer_running)); save_item(NAME(m_timer_val)); + m_ntram = std::make_unique(0x2000); + save_pointer(NAME(m_ntram.get()), 0x2000); + m_ppu->set_scanline_callback(ppu2c0x_device::scanline_delegate(FUNC(nes_vt_state::scanline_irq),this)); // m_ppu->set_hblank_callback(ppu2c0x_device::hblank_delegate(FUNC(device_nes_cart_interface::hblank_irq),m_cartslot->m_cart)); +// m_ppu->space(AS_PROGRAM).install_readwrite_handler(0, 0x1fff, read8_delegate(FUNC(device_nes_cart_interface::chr_r),m_cartslot->m_cart), write8_delegate(FUNC(device_nes_cart_interface::chr_w),m_cartslot->m_cart)); + m_ppu->space(AS_PROGRAM).install_readwrite_handler(0x2000, 0x3eff, read8_delegate(FUNC(nes_vt_state::nt_r),this), write8_delegate(FUNC(nes_vt_state::nt_w),this)); } void nes_vt_state::machine_reset() @@ -371,7 +395,7 @@ void nes_vt_state::machine_reset() int nes_vt_state::calculate_real_video_address(int addr, int extended, int readtype) { - // might be a VT09 only feature (8bpp?) but where are the other 4 bits? + // might be a VT09 only feature (alt 4bpp mode?) int alt_order = m_ppu->get_201x_reg(0x0) & 0x40; if (readtype == 0) @@ -521,7 +545,7 @@ int nes_vt_state::calculate_real_video_address(int addr, int extended, int readt } else { - finaladdr = (finaladdr << 1) | (va34 << 4); + finaladdr = (finaladdr << 1) | va34; } } } @@ -569,7 +593,7 @@ int nes_vt_state::calculate_real_video_address(int addr, int extended, int readt } else { - finaladdr = (finaladdr << 1) | (va34 << 4); + finaladdr = (finaladdr << 1) | va34; } } @@ -1007,6 +1031,17 @@ ROM_START( gprnrs16 ) ROM_LOAD( "gprnrs16.bin", 0x00000, 0x2000000, CRC(bdffa40a) SHA1(3d01907211f18e8415171dfc6c1d23cf5952e7bb) ) ROM_END +ROM_START( vgpocket ) + ROM_REGION( 0x400000, "mainrom", 0 ) + ROM_LOAD( "vgpocket.bin", 0x00000, 0x400000, CRC(843634c6) SHA1(c59dab0e43d364f59eb3a138abb585bc54e5d674) ) + // there was a dump of a 'secure' area with this, but it was just the top 0x10000 bytes of the existing rom. +ROM_END + +ROM_START( vgpmini ) + ROM_REGION( 0x400000, "mainrom", 0 ) + ROM_LOAD( "vgpmini.bin", 0x00000, 0x400000, CRC(a1121843) SHA1(c96013ae6cf2f8173e65a167d45685cb61536d36) ) + // there was a dump of a 'secure' area with this, but it was just the bottom 0x10000 bytes of the existing rom. +ROM_END // earlier version of vdogdemo CONS( 200?, vdogdeme, 0, 0, nes_vt, nes_vt, nes_vt_state, 0, "VRT", "V-Dog (prototype, earlier)", MACHINE_NOT_WORKING ) @@ -1023,6 +1058,8 @@ CONS( 200?, vgtablet, 0, 0, nes_vt, nes_vt, nes_vt_state, 0, "", "VG Pocket (VG-2000)", MACHINE_NOT_WORKING ) +CONS( 200?, vgpmini, 0, 0, nes_vt_xx, nes_vt, nes_vt_state, 0, "", "VG Pocket Mini (VG-1500)", MACHINE_NOT_WORKING ) // these are NOT VT03, but something newer but based around the same basic designs // (no visible tiles in ROM using standard decodes tho, might need moving out of here) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 41171d4a86d..de98224acd5 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -29407,6 +29407,8 @@ mc_sam60 vgtablet gprnrs1 gprnrs16 +vgpocket +vgpmini @source:newbrain.cpp newbrain // -- cgit v1.2.3