summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-04-05 09:23:11 -0400
committer AJR <ajrhacker@users.noreply.github.com>2020-04-05 09:23:25 -0400
commit9980e80b75c6f0ecf7da288698777ef3c0a52000 (patch)
tree4869eca70bf5b13691f66bdcda2a44bca9f50fb0
parent16a744f99d7ad0b358dcf1bfc0bc031a3588558f (diff)
pasopia7.cpp: Simplify handler signatures; start cleaning up memory usage (nw)
-rw-r--r--src/mame/drivers/pasopia7.cpp205
1 files changed, 98 insertions, 107 deletions
diff --git a/src/mame/drivers/pasopia7.cpp b/src/mame/drivers/pasopia7.cpp
index b89f1628813..87f1bb02094 100644
--- a/src/mame/drivers/pasopia7.cpp
+++ b/src/mame/drivers/pasopia7.cpp
@@ -75,31 +75,34 @@ public:
void init_p7_lcd();
void init_p7_raster();
+protected:
+ virtual void machine_start() override;
+
private:
- DECLARE_READ8_MEMBER(vram_r);
- DECLARE_WRITE8_MEMBER(vram_w);
- DECLARE_WRITE8_MEMBER(pasopia7_memory_ctrl_w);
- DECLARE_WRITE8_MEMBER(pac2_w);
- DECLARE_READ8_MEMBER(pac2_r);
- DECLARE_WRITE8_MEMBER(ram_bank_w);
- DECLARE_WRITE8_MEMBER(pasopia7_6845_w);
- DECLARE_READ8_MEMBER(pasopia7_io_r);
- DECLARE_WRITE8_MEMBER(pasopia7_io_w);
- DECLARE_READ8_MEMBER(pasopia7_fdc_r);
- DECLARE_WRITE8_MEMBER(pasopia7_fdc_w);
+ uint8_t vram_r(offs_t offset);
+ void vram_w(offs_t offset, uint8_t data);
+ void memory_ctrl_w(uint8_t data);
+ void pac2_w(offs_t offset, uint8_t data);
+ uint8_t pac2_r(offs_t offset);
+ void ram_bank_w(offs_t offset, uint8_t data);
+ void pasopia7_6845_w(offs_t offset, uint8_t data);
+ uint8_t io_r(offs_t offset);
+ void io_w(offs_t offset, uint8_t data);
+ uint8_t fdc_r(offs_t offset);
+ void fdc_w(offs_t offset, uint8_t data);
uint8_t keyb_r();
- DECLARE_WRITE8_MEMBER(mux_w);
- DECLARE_READ8_MEMBER(crtc_portb_r);
- DECLARE_WRITE8_MEMBER(screen_mode_w);
- DECLARE_WRITE8_MEMBER(plane_reg_w);
- DECLARE_WRITE8_MEMBER(video_attr_w);
- DECLARE_WRITE8_MEMBER(video_misc_w);
- DECLARE_WRITE8_MEMBER(nmi_mask_w);
- DECLARE_READ8_MEMBER(unk_r);
- DECLARE_READ8_MEMBER(nmi_reg_r);
- DECLARE_WRITE8_MEMBER(nmi_reg_w);
- DECLARE_READ8_MEMBER(nmi_porta_r);
- DECLARE_READ8_MEMBER(nmi_portb_r);
+ void mux_w(uint8_t data);
+ uint8_t crtc_portb_r();
+ void screen_mode_w(uint8_t data);
+ void plane_reg_w(uint8_t data);
+ void video_attr_w(uint8_t data);
+ void video_misc_w(uint8_t data);
+ void nmi_mask_w(uint8_t data);
+ uint8_t unk_r();
+ uint8_t nmi_reg_r();
+ void nmi_reg_w(uint8_t data);
+ uint8_t nmi_porta_r();
+ uint8_t nmi_portb_r();
DECLARE_WRITE_LINE_MEMBER(speaker_w);
TIMER_CALLBACK_MEMBER(pio_timer);
DECLARE_VIDEO_START(pasopia7);
@@ -109,6 +112,8 @@ private:
void pasopia7_io(address_map &map);
void pasopia7_mem(address_map &map);
+ std::unique_ptr<uint8_t[]> m_work_ram;
+ std::unique_ptr<uint8_t[]> m_vram;
uint8_t m_vram_sel;
uint8_t m_mio_sel;
std::unique_ptr<uint8_t[]> m_p7_pal;
@@ -164,6 +169,14 @@ private:
#define VDP_CLOCK 14.318181_MHz_XTAL / 16
#define LCD_CLOCK VDP_CLOCK/10
+void pasopia7_state::machine_start()
+{
+ m_work_ram = std::make_unique<uint8_t[]>(0x10000);
+ std::fill(&m_work_ram[0], &m_work_ram[0x10000], 0xff);
+
+ m_vram = make_unique_clear<uint8_t[]>(0x10000);
+}
+
// needed to scan the keyboard, as the pio emulation doesn't do it.
TIMER_CALLBACK_MEMBER( pasopia7_state::pio_timer )
{
@@ -177,7 +190,6 @@ VIDEO_START_MEMBER(pasopia7_state,pasopia7)
void pasopia7_state::draw_cg4_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int width)
{
- uint8_t *vram = memregion("vram")->base();
int x,y,xi,yi;
int count;
@@ -192,8 +204,8 @@ void pasopia7_state::draw_cg4_screen(bitmap_ind16 &bitmap,const rectangle &clipr
{
int pen_b,pen_r,pen_g,color;
- pen_b = (vram[count+0x0000]>>(7-xi)) & 1;
- pen_r = (vram[count+0x4000]>>(7-xi)) & 1;
+ pen_b = (m_vram[count+0x0000]>>(7-xi)) & 1;
+ pen_r = (m_vram[count+0x4000]>>(7-xi)) & 1;
pen_g = 0;//(p7_vram[count+0x8000]>>(7-xi)) & 1;
color = pen_g<<2 | pen_r<<1 | pen_b<<0;
@@ -208,7 +220,6 @@ void pasopia7_state::draw_cg4_screen(bitmap_ind16 &bitmap,const rectangle &clipr
void pasopia7_state::draw_tv_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int width)
{
- uint8_t *vram = memregion("vram")->base();
uint8_t *gfx_data = memregion("font")->base();
int x,y,xi,yi;
int count;
@@ -219,8 +230,8 @@ void pasopia7_state::draw_tv_screen(bitmap_ind16 &bitmap,const rectangle &clipre
{
for(x=0;x<width;x++)
{
- int tile = vram[count+0x8000];
- int attr = vram[count+0xc000];
+ int tile = m_vram[count+0x8000];
+ int attr = m_vram[count+0xc000];
int color = attr & 7;
for(yi=0;yi<8;yi++)
@@ -266,7 +277,6 @@ void pasopia7_state::draw_tv_screen(bitmap_ind16 &bitmap,const rectangle &clipre
void pasopia7_state::draw_mixed_screen(bitmap_ind16 &bitmap,const rectangle &cliprect,int width)
{
- uint8_t *vram = memregion("vram")->base();
uint8_t *gfx_data = memregion("font")->base();
int x,y,xi,yi;
int count;
@@ -277,11 +287,11 @@ void pasopia7_state::draw_mixed_screen(bitmap_ind16 &bitmap,const rectangle &cli
{
for(x=0;x<width;x++)
{
- int tile = vram[count+0x8000];
+ int tile = m_vram[count+0x8000];
for(yi=0;yi<8;yi++)
{
- int attr = vram[count+0xc000+yi];
+ int attr = m_vram[count+0xc000+yi];
if(attr & 0x80)
{
@@ -289,9 +299,9 @@ void pasopia7_state::draw_mixed_screen(bitmap_ind16 &bitmap,const rectangle &cli
{
int pen,pen_b,pen_r,pen_g;
- pen_b = (vram[count+yi+0x0000]>>(7-xi)) & 1;
- pen_r = (vram[count+yi+0x4000]>>(7-xi)) & 1;
- pen_g = (vram[count+yi+0x8000]>>(7-xi)) & 1;
+ pen_b = (m_vram[count+yi+0x0000]>>(7-xi)) & 1;
+ pen_r = (m_vram[count+yi+0x4000]>>(7-xi)) & 1;
+ pen_g = (m_vram[count+yi+0x8000]>>(7-xi)) & 1;
pen = pen_g<<2 | pen_r<<1 | pen_b<<0;
@@ -362,16 +372,13 @@ uint32_t pasopia7_state::screen_update_pasopia7(screen_device &screen, bitmap_in
return 0;
}
-READ8_MEMBER( pasopia7_state::vram_r )
+uint8_t pasopia7_state::vram_r(offs_t offset)
{
- uint8_t *vram = memregion("vram")->base();
uint8_t res;
if (m_vram_sel == 0)
{
- uint8_t *work_ram = memregion("maincpu")->base();
-
- return work_ram[offset+0x8000];
+ return m_work_ram[offset+0x8000];
}
if (m_pal_sel && (m_plane_reg & 0x70) == 0x00)
@@ -380,22 +387,20 @@ READ8_MEMBER( pasopia7_state::vram_r )
res = 0xff;
if ((m_plane_reg & 0x11) == 0x11)
- res &= vram[offset | 0x0000];
+ res &= m_vram[offset | 0x0000];
if ((m_plane_reg & 0x22) == 0x22)
- res &= vram[offset | 0x4000];
+ res &= m_vram[offset | 0x4000];
if ((m_plane_reg & 0x44) == 0x44)
{
- res &= vram[offset | 0x8000];
- m_attr_latch = vram[offset | 0xc000] & 0x87;
+ res &= m_vram[offset | 0x8000];
+ m_attr_latch = m_vram[offset | 0xc000] & 0x87;
}
return res;
}
-WRITE8_MEMBER( pasopia7_state::vram_w )
+void pasopia7_state::vram_w(offs_t offset, uint8_t data)
{
- uint8_t *vram = memregion("vram")->base();
-
if (m_vram_sel)
{
if (m_pal_sel && (m_plane_reg & 0x70) == 0x00)
@@ -405,28 +410,27 @@ WRITE8_MEMBER( pasopia7_state::vram_w )
}
if (m_plane_reg & 0x10)
- vram[(offset & 0x3fff) | 0x0000] = (m_plane_reg & 1) ? data : 0xff;
+ m_vram[(offset & 0x3fff) | 0x0000] = (m_plane_reg & 1) ? data : 0xff;
if (m_plane_reg & 0x20)
- vram[(offset & 0x3fff) | 0x4000] = (m_plane_reg & 2) ? data : 0xff;
+ m_vram[(offset & 0x3fff) | 0x4000] = (m_plane_reg & 2) ? data : 0xff;
if (m_plane_reg & 0x40)
{
- vram[(offset & 0x3fff) | 0x8000] = (m_plane_reg & 4) ? data : 0xff;
+ m_vram[(offset & 0x3fff) | 0x8000] = (m_plane_reg & 4) ? data : 0xff;
m_attr_latch = m_attr_wrap ? m_attr_latch : m_attr_data;
- vram[(offset & 0x3fff) | 0xc000] = m_attr_latch;
+ m_vram[(offset & 0x3fff) | 0xc000] = m_attr_latch;
}
}
else
{
- uint8_t *work_ram = memregion("maincpu")->base();
-
- work_ram[offset+0x8000] = data;
+ m_work_ram[offset+0x8000] = data;
}
}
-WRITE8_MEMBER( pasopia7_state::pasopia7_memory_ctrl_w )
+void pasopia7_state::memory_ctrl_w(uint8_t data)
{
- uint8_t *work_ram = memregion("maincpu")->base();
+ uint8_t *work_ram = m_work_ram.get();
uint8_t *basic = memregion("basic")->base();
+ uint8_t *bios = memregion("bios")->base();
switch(data & 3)
{
@@ -437,7 +441,7 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_memory_ctrl_w )
break;
case 1: //select Basic ROM + BIOS ROM
membank("bank1")->set_base(basic + 0x00000);
- membank("bank2")->set_base(work_ram + 0x10000);
+ membank("bank2")->set_base(bios + 0x00000);
break;
case 2: //select Work RAM
membank("bank1")->set_base(work_ram + 0x00000);
@@ -454,15 +458,8 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_memory_ctrl_w )
// printf("%02x\n",m_vram_sel);
}
-#if 0
-READ8_MEMBER( pasopia7_state::fdc_r )
-{
- return machine().rand();
-}
-#endif
-
-WRITE8_MEMBER( pasopia7_state::pac2_w )
+void pasopia7_state::pac2_w(offs_t offset, uint8_t data)
{
/*
select register:
@@ -510,7 +507,7 @@ WRITE8_MEMBER( pasopia7_state::pac2_w )
}
}
-READ8_MEMBER( pasopia7_state::pac2_r )
+uint8_t pasopia7_state::pac2_r(offs_t offset)
{
if(offset == 2)
{
@@ -538,14 +535,12 @@ READ8_MEMBER( pasopia7_state::pac2_r )
}
/* writes always occurs to the RAM banks, even if the ROMs are selected. */
-WRITE8_MEMBER( pasopia7_state::ram_bank_w )
+void pasopia7_state::ram_bank_w(offs_t offset, uint8_t data)
{
- uint8_t *work_ram = memregion("maincpu")->base();
-
- work_ram[offset] = data;
+ m_work_ram[offset] = data;
}
-WRITE8_MEMBER( pasopia7_state::pasopia7_6845_w )
+void pasopia7_state::pasopia7_6845_w(offs_t offset, uint8_t data)
{
if(offset == 0)
{
@@ -583,7 +578,7 @@ void pasopia7_state::pasopia_nmi_trap()
}
}
-READ8_MEMBER( pasopia7_state::pasopia7_fdc_r )
+uint8_t pasopia7_state::fdc_r(offs_t offset)
{
switch(offset)
{
@@ -595,7 +590,7 @@ READ8_MEMBER( pasopia7_state::pasopia7_fdc_r )
return 0xff;
}
-WRITE8_MEMBER( pasopia7_state::pasopia7_fdc_w )
+void pasopia7_state::fdc_w(offs_t offset, uint8_t data)
{
switch(offset)
{
@@ -612,7 +607,7 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_fdc_w )
}
-READ8_MEMBER( pasopia7_state::pasopia7_io_r )
+uint8_t pasopia7_state::io_r(offs_t offset)
{
if(m_mio_sel)
{
@@ -638,7 +633,7 @@ READ8_MEMBER( pasopia7_state::pasopia7_io_r )
return m_crtc->register_r();
else
if(io_port >= 0x18 && io_port <= 0x1b)
- return pac2_r(space, io_port & 3);
+ return pac2_r(io_port & 3);
else
if(io_port >= 0x20 && io_port <= 0x23)
{
@@ -656,7 +651,7 @@ READ8_MEMBER( pasopia7_state::pasopia7_io_r )
// else if(io_port == 0x3c) { bankswitch }
else
// if(io_port >= 0xe0 && io_port <= 0xe6)
-// return pasopia7_fdc_r(space, offset & 7);
+// return fdc_r(offset & 7);
// else
{
logerror("(PC=%06x) Read i/o address %02x\n",m_maincpu->pc(),io_port);
@@ -665,7 +660,7 @@ READ8_MEMBER( pasopia7_state::pasopia7_io_r )
return 0xff;
}
-WRITE8_MEMBER( pasopia7_state::pasopia7_io_w )
+void pasopia7_state::io_w(offs_t offset, uint8_t data)
{
if(m_mio_sel)
{
@@ -684,10 +679,10 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_io_w )
m_ppi1->write(io_port & 3, data);
else
if(io_port >= 0x10 && io_port <= 0x11)
- pasopia7_6845_w(space, io_port-0x10, data);
+ pasopia7_6845_w(io_port-0x10, data);
else
if(io_port >= 0x18 && io_port <= 0x1b)
- pac2_w(space, io_port & 3, data);
+ pac2_w(io_port & 3, data);
else
if(io_port >= 0x20 && io_port <= 0x23)
{
@@ -708,10 +703,10 @@ WRITE8_MEMBER( pasopia7_state::pasopia7_io_w )
m_sn2->write(data);
else
if(io_port == 0x3c)
- pasopia7_memory_ctrl_w(space,0, data);
+ memory_ctrl_w(data);
else
if(io_port >= 0xe0 && io_port <= 0xe6)
- pasopia7_fdc_w(space, offset & 7, data);
+ fdc_w(offset & 7, data);
else
{
logerror("(PC=%06x) Write i/o address %02x = %02x\n",m_maincpu->pc(),offset,data);
@@ -731,7 +726,7 @@ void pasopia7_state::pasopia7_mem(address_map &map)
void pasopia7_state::pasopia7_io(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0xffff).rw(FUNC(pasopia7_state::pasopia7_io_r), FUNC(pasopia7_state::pasopia7_io_w));
+ map(0x0000, 0xffff).rw(FUNC(pasopia7_state::io_r), FUNC(pasopia7_state::io_w));
}
static INPUT_PORTS_START( pasopia7 )
@@ -801,7 +796,7 @@ uint8_t pasopia7_state::keyb_r()
return data;
}
-WRITE8_MEMBER( pasopia7_state::mux_w )
+void pasopia7_state::mux_w(uint8_t data)
{
m_mux_data = data;
}
@@ -814,7 +809,7 @@ static const z80_daisy_config p7_daisy[] =
{ nullptr }
};
-READ8_MEMBER( pasopia7_state::crtc_portb_r )
+uint8_t pasopia7_state::crtc_portb_r()
{
// --x- ---- vsync bit
// ---x ---- hardcoded bit, defines if the system screen is raster (1) or LCD (0)
@@ -825,7 +820,7 @@ READ8_MEMBER( pasopia7_state::crtc_portb_r )
return 0x40 | (m_attr_latch & 0x87) | vsync | vdisp | (m_screen_type << 4);
}
-WRITE8_MEMBER( pasopia7_state::screen_mode_w )
+void pasopia7_state::screen_mode_w(uint8_t data)
{
if(data & 0x5f)
printf("GFX MODE %02x\n",data);
@@ -836,14 +831,14 @@ WRITE8_MEMBER( pasopia7_state::screen_mode_w )
// printf("%02x\n",m_gfx_mode);
}
-WRITE8_MEMBER( pasopia7_state::plane_reg_w )
+void pasopia7_state::plane_reg_w(uint8_t data)
{
//if(data & 0x11)
//printf("PLANE %02x\n",data);
m_plane_reg = data;
}
-WRITE8_MEMBER( pasopia7_state::video_attr_w )
+void pasopia7_state::video_attr_w(uint8_t data)
{
//printf("VIDEO ATTR %02x | TEXT_PAGE %02x\n",data & 0xf,data & 0x70);
m_attr_data = (data & 0x7) | ((data & 0x8)<<4);
@@ -851,7 +846,7 @@ WRITE8_MEMBER( pasopia7_state::video_attr_w )
//#include "debugger.h"
-WRITE8_MEMBER( pasopia7_state::video_misc_w )
+void pasopia7_state::video_misc_w(uint8_t data)
{
/*
--x- ---- blinking
@@ -869,7 +864,7 @@ WRITE8_MEMBER( pasopia7_state::video_misc_w )
//m_pal_sel = data & 0x02;
}
-WRITE8_MEMBER( pasopia7_state::nmi_mask_w )
+void pasopia7_state::nmi_mask_w(uint8_t data)
{
/*
--x- ---- tape motor
@@ -893,18 +888,18 @@ WRITE8_MEMBER( pasopia7_state::nmi_mask_w )
}
/* TODO: investigate on these. */
-READ8_MEMBER( pasopia7_state::unk_r )
+uint8_t pasopia7_state::unk_r()
{
return 0xff;//machine().rand();
}
-READ8_MEMBER( pasopia7_state::nmi_reg_r )
+uint8_t pasopia7_state::nmi_reg_r()
{
//printf("C\n");
return 0xfc | m_bank_reg;//machine().rand();
}
-WRITE8_MEMBER( pasopia7_state::nmi_reg_w )
+void pasopia7_state::nmi_reg_w(uint8_t data)
{
/*
x--- ---- NMI mask
@@ -914,12 +909,12 @@ WRITE8_MEMBER( pasopia7_state::nmi_reg_w )
m_nmi_enable_reg = data & 0x40;
}
-READ8_MEMBER( pasopia7_state::nmi_porta_r )
+uint8_t pasopia7_state::nmi_porta_r()
{
return 0xff;
}
-READ8_MEMBER( pasopia7_state::nmi_portb_r )
+uint8_t pasopia7_state::nmi_portb_r()
{
u8 data = (m_cass->input() > +0.04) ? 0x20 : 0;
return 0xd9 | data | m_nmi_trap | m_nmi_reset;
@@ -937,12 +932,12 @@ WRITE_LINE_MEMBER( pasopia7_state::speaker_w )
void pasopia7_state::machine_reset()
{
- uint8_t *bios = memregion("maincpu")->base();
+ uint8_t *bios = memregion("bios")->base();
- membank("bank1")->set_base(bios + 0x10000);
- membank("bank2")->set_base(bios + 0x10000);
-// membank("bank3")->set_base(bios + 0x10000);
-// membank("bank4")->set_base(bios + 0x10000);
+ membank("bank1")->set_base(bios);
+ membank("bank2")->set_base(bios);
+// membank("bank3")->set_base(bios);
+// membank("bank4")->set_base(bios);
m_nmi_reset |= 4;
m_porta_2 = 0xFF;
@@ -1071,8 +1066,8 @@ void pasopia7_state::p7_lcd(machine_config &config)
/* ROM definition */
ROM_START( pasopia7 )
- ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "bios.rom", 0x10000, 0x4000, CRC(b8111407) SHA1(ac93ae62db4c67de815f45de98c79cfa1313857d))
+ ROM_REGION( 0x4000, "bios", ROMREGION_ERASEFF )
+ ROM_LOAD( "bios.rom", 0x0000, 0x4000, CRC(b8111407) SHA1(ac93ae62db4c67de815f45de98c79cfa1313857d))
ROM_REGION( 0x8000, "basic", ROMREGION_ERASEFF )
ROM_LOAD( "basic.rom", 0x0000, 0x8000, CRC(8a58fab6) SHA1(5e1a91dfb293bca5cf145b0a0c63217f04003ed1))
@@ -1088,14 +1083,12 @@ ROM_START( pasopia7 )
ROM_REGION( 0x8000, "rampac2", ROMREGION_ERASEFF )
// ROM_LOAD( "rampac2.bin", 0x0000, 0x8000, CRC(0e4f09bd) SHA1(4088906d57e4f6085a75b249a6139a0e2eb531a1) )
-
- ROM_REGION( 0x10000, "vram", ROMREGION_ERASE00 )
ROM_END
/* using an identical ROMset from now, but the screen type is different */
ROM_START( pasopia7lcd )
- ROM_REGION( 0x14000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "bios.rom", 0x10000, 0x4000, CRC(b8111407) SHA1(ac93ae62db4c67de815f45de98c79cfa1313857d))
+ ROM_REGION( 0x4000, "bios", ROMREGION_ERASEFF )
+ ROM_LOAD( "bios.rom", 0x0000, 0x4000, CRC(b8111407) SHA1(ac93ae62db4c67de815f45de98c79cfa1313857d))
ROM_REGION( 0x8000, "basic", ROMREGION_ERASEFF )
ROM_LOAD( "basic.rom", 0x0000, 0x8000, CRC(8a58fab6) SHA1(5e1a91dfb293bca5cf145b0a0c63217f04003ed1))
@@ -1111,8 +1104,6 @@ ROM_START( pasopia7lcd )
ROM_REGION( 0x8000, "rampac2", ROMREGION_ERASEFF )
// ROM_LOAD( "rampac2.bin", 0x0000, 0x8000, CRC(0e4f09bd) SHA1(4088906d57e4f6085a75b249a6139a0e2eb531a1) )
-
- ROM_REGION( 0x10000, "vram", ROMREGION_ERASE00 )
ROM_END