mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
bus/nes: Eliminate remaining machine().device usage the ugly way (nw)
This commit is contained in:
parent
9c7f1303b2
commit
ddddc30810
@ -48,6 +48,12 @@ nes_exrom_device::nes_exrom_device(const machine_config &mconfig, const char *ta
|
||||
, m_irq_status(0), m_irq_enable(0), m_mult1(0), m_mult2(0), m_mmc5_scanline(0), m_vrom_page_a(0), m_vrom_page_b(0), m_floodtile(0), m_floodattr(0)
|
||||
, m_prg_mode(0), m_chr_mode(0), m_wram_protect_1(0), m_wram_protect_2(0), m_exram_control(0), m_wram_base(0), m_last_chr(0), m_ex1_chr(0)
|
||||
, m_split_chr(0), m_ex1_bank(0), m_high_chr(0), m_split_scr(0), m_split_rev(0), m_split_ctrl(0), m_split_yst(0), m_split_bank(0), m_vcount(0)
|
||||
, m_ppu(*this, ":ppu") // FIXME: this dependency should not exist
|
||||
, m_sound(*this, ":maincpu:nesapu") // FIXME: this is a hack, it should have extra channels, not pass to the existing APU!!!
|
||||
{
|
||||
}
|
||||
|
||||
nes_exrom_device::~nes_exrom_device()
|
||||
{
|
||||
}
|
||||
|
||||
@ -272,8 +278,7 @@ void nes_exrom_device::set_mirror(int page, int src)
|
||||
|
||||
inline bool nes_exrom_device::in_split()
|
||||
{
|
||||
ppu2c0x_device *ppu = machine().device<ppu2c0x_device>("ppu");
|
||||
int tile = ppu->get_tilenum();
|
||||
int tile = m_ppu->get_tilenum();
|
||||
|
||||
if (tile < 34)
|
||||
{
|
||||
@ -309,8 +314,7 @@ READ8_MEMBER(nes_exrom_device::nt_r)
|
||||
// but it does not work yet
|
||||
if (m_split_scr && !(m_exram_control & 0x02) && in_split())
|
||||
{
|
||||
ppu2c0x_device *ppu = machine().device<ppu2c0x_device>("ppu");
|
||||
int tile = ppu->get_tilenum();
|
||||
int tile = m_ppu->get_tilenum();
|
||||
|
||||
if ((offset & 0x3ff) >= 0x3c0)
|
||||
{
|
||||
@ -399,22 +403,21 @@ inline uint8_t nes_exrom_device::bg_ex1_chr_r(uint32_t offset)
|
||||
READ8_MEMBER(nes_exrom_device::chr_r)
|
||||
{
|
||||
int bank = offset >> 10;
|
||||
ppu2c0x_device *ppu = machine().device<ppu2c0x_device>("ppu");
|
||||
|
||||
// Extended Attribute Mode (Ex1) does affect BG drawing even for 8x16 sprites (JustBreed uses it extensively!)
|
||||
// However, if a game enables Ex1 but does not write a new m_ex1_bank, I'm not sure here we get the correct behavior
|
||||
if (m_exram_control == 1 && ppu->get_draw_phase() == PPU_DRAW_BG && m_ex1_chr)
|
||||
if (m_exram_control == 1 && m_ppu->get_draw_phase() == PPU_DRAW_BG && m_ex1_chr)
|
||||
return bg_ex1_chr_r(offset & 0xfff);
|
||||
|
||||
if (m_split_scr && !(m_exram_control & 0x02) && in_split() && ppu->get_draw_phase() == PPU_DRAW_BG && m_split_chr)
|
||||
if (m_split_scr && !(m_exram_control & 0x02) && in_split() && m_ppu->get_draw_phase() == PPU_DRAW_BG && m_split_chr)
|
||||
return split_chr_r(offset & 0xfff);
|
||||
|
||||
if (ppu->is_sprite_8x16())
|
||||
if (m_ppu->is_sprite_8x16())
|
||||
{
|
||||
if (ppu->get_draw_phase() == PPU_DRAW_OAM)
|
||||
if (m_ppu->get_draw_phase() == PPU_DRAW_OAM)
|
||||
return base_chr_r(bank & 7, offset & 0x1fff);
|
||||
|
||||
if (ppu->get_draw_phase() == PPU_DRAW_BG)
|
||||
if (m_ppu->get_draw_phase() == PPU_DRAW_BG)
|
||||
return base_chr_r((bank & 3) + 8, offset & 0x1fff);
|
||||
}
|
||||
|
||||
@ -467,8 +470,6 @@ WRITE8_MEMBER(nes_exrom_device::write_l)
|
||||
|
||||
if ((offset >= 0x1000) && (offset <= 0x1015))
|
||||
{
|
||||
// SOUND (this is a hack, it should have extra channels, not pass to the existing APU!!!)
|
||||
nesapu_device *m_sound = machine().device<nesapu_device>("maincpu:nesapu");
|
||||
m_sound->write(space, offset & 0x1f, data);
|
||||
return;
|
||||
}
|
||||
|
@ -8,6 +8,9 @@
|
||||
#include "nxrom.h"
|
||||
|
||||
|
||||
class ppu2c0x_device;
|
||||
class nesapu_device;
|
||||
|
||||
// ======================> nes_exrom_device
|
||||
|
||||
class nes_exrom_device : public nes_nrom_device
|
||||
@ -15,6 +18,7 @@ class nes_exrom_device : public nes_nrom_device
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_exrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
~nes_exrom_device();
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_l) override;
|
||||
virtual DECLARE_READ8_MEMBER(read_m) override;
|
||||
@ -86,6 +90,9 @@ protected:
|
||||
uint8_t m_ram_hi_banks[4];
|
||||
|
||||
// int m_nes_vram_sprite[8];
|
||||
|
||||
required_device<ppu2c0x_device> m_ppu;
|
||||
required_device<nesapu_device> m_sound;
|
||||
};
|
||||
|
||||
|
||||
|
@ -38,6 +38,11 @@ nes_nanjing_device::nes_nanjing_device(const machine_config &mconfig, const char
|
||||
, m_count(0)
|
||||
, m_latch1(0)
|
||||
, m_latch2(0)
|
||||
, m_ppu(*this, ":ppu") // FIXME: this dependency should not exist
|
||||
{
|
||||
}
|
||||
|
||||
nes_nanjing_device::~nes_nanjing_device()
|
||||
{
|
||||
}
|
||||
|
||||
@ -138,7 +143,7 @@ WRITE8_MEMBER(nes_nanjing_device::write_l)
|
||||
case 0x000:
|
||||
case 0x200:
|
||||
m_reg[BIT(offset, 9)] = data;
|
||||
if (!BIT(m_reg[0], 7) && machine().device<ppu2c0x_device>("ppu")->get_current_scanline() <= 127)
|
||||
if (!BIT(m_reg[0], 7) && m_ppu->get_current_scanline() <= 127)
|
||||
chr8(0, CHRRAM);
|
||||
break;
|
||||
case 0x300:
|
||||
|
@ -8,6 +8,8 @@
|
||||
#include "nxrom.h"
|
||||
|
||||
|
||||
class ppu2c0x_device;
|
||||
|
||||
// ======================> nes_nanjing_device
|
||||
|
||||
class nes_nanjing_device : public nes_nrom_device
|
||||
@ -15,6 +17,7 @@ class nes_nanjing_device : public nes_nrom_device
|
||||
public:
|
||||
// construction/destruction
|
||||
nes_nanjing_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
~nes_nanjing_device();
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_l) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_l) override;
|
||||
@ -30,6 +33,8 @@ private:
|
||||
uint8_t m_count;
|
||||
uint8_t m_reg[2];
|
||||
uint8_t m_latch1, m_latch2;
|
||||
|
||||
required_device<ppu2c0x_device> m_ppu;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user