mirror of
https://github.com/holub/mame
synced 2025-05-01 04:06:58 +03:00
added 32bit rom accesses to generic slot and converted pockstat and
casloopy to use the slot code. nw.
This commit is contained in:
parent
b6e9d10294
commit
6ce39d0260
@ -10,7 +10,6 @@
|
||||
|
||||
TODO:
|
||||
- possibly support linear mapping when non-power of 2 ROMs are mapped
|
||||
- add support for 32bit ROM access
|
||||
|
||||
***********************************************************************************************************/
|
||||
|
||||
@ -64,6 +63,15 @@ READ16_MEMBER(generic_rom_plain_device::read16_rom)
|
||||
return 0xffff;
|
||||
}
|
||||
|
||||
READ32_MEMBER(generic_rom_plain_device::read32_rom)
|
||||
{
|
||||
UINT32 *ROM = (UINT32 *)m_rom;
|
||||
if (offset < m_rom_size/4)
|
||||
return ROM[offset];
|
||||
else
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(generic_rom_linear_device::read_rom)
|
||||
{
|
||||
@ -76,3 +84,9 @@ READ16_MEMBER(generic_rom_linear_device::read16_rom)
|
||||
return ROM[offset % (m_rom_size/2)];
|
||||
}
|
||||
|
||||
READ32_MEMBER(generic_rom_linear_device::read32_rom)
|
||||
{
|
||||
UINT32 *ROM = (UINT32 *)m_rom;
|
||||
return ROM[offset % (m_rom_size/4)];
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,7 @@ public:
|
||||
// reading and writing
|
||||
virtual DECLARE_READ8_MEMBER(read_rom);
|
||||
virtual DECLARE_READ16_MEMBER(read16_rom);
|
||||
virtual DECLARE_READ32_MEMBER(read32_rom);
|
||||
};
|
||||
|
||||
|
||||
@ -43,6 +44,7 @@ public:
|
||||
// reading and writing
|
||||
virtual DECLARE_READ8_MEMBER(read_rom);
|
||||
virtual DECLARE_READ16_MEMBER(read16_rom);
|
||||
virtual DECLARE_READ32_MEMBER(read32_rom);
|
||||
};
|
||||
|
||||
|
||||
|
@ -245,6 +245,18 @@ READ16_MEMBER(generic_slot_device::read16_rom)
|
||||
return 0xffff;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
read32_rom
|
||||
-------------------------------------------------*/
|
||||
|
||||
READ32_MEMBER(generic_slot_device::read32_rom)
|
||||
{
|
||||
if (m_cart)
|
||||
return m_cart->read32_rom(space, offset, mem_mask);
|
||||
else
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
read_ram
|
||||
-------------------------------------------------*/
|
||||
|
@ -18,6 +18,7 @@ public:
|
||||
// reading and writing
|
||||
virtual DECLARE_READ8_MEMBER(read_rom) { return 0xff; }
|
||||
virtual DECLARE_READ16_MEMBER(read16_rom) { return 0xffff; }
|
||||
virtual DECLARE_READ32_MEMBER(read32_rom) { return 0xffffffff; }
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_ram) { return 0xff; }
|
||||
virtual DECLARE_WRITE8_MEMBER(write_ram) {};
|
||||
@ -41,7 +42,8 @@ public:
|
||||
enum
|
||||
{
|
||||
GENERIC_ROM8_WIDTH = 1,
|
||||
GENERIC_ROM16_WIDTH
|
||||
GENERIC_ROM16_WIDTH = 2,
|
||||
GENERIC_ROM32_WIDTH = 4
|
||||
};
|
||||
|
||||
#define GENERIC_ROM_REGION_TAG ":cart:rom"
|
||||
@ -120,6 +122,7 @@ public:
|
||||
// reading and writing
|
||||
virtual DECLARE_READ8_MEMBER(read_rom);
|
||||
virtual DECLARE_READ16_MEMBER(read16_rom);
|
||||
virtual DECLARE_READ32_MEMBER(read32_rom);
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(read_ram);
|
||||
virtual DECLARE_WRITE8_MEMBER(write_ram);
|
||||
|
@ -150,7 +150,8 @@ PCB 'Z545-1 A240570-1'
|
||||
#include "emu.h"
|
||||
#include "cpu/sh2/sh2.h"
|
||||
//#include "cpu/v60/v60.h"
|
||||
#include "imagedev/cartslot.h"
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
|
||||
|
||||
class casloopy_state : public driver_device
|
||||
@ -161,11 +162,17 @@ public:
|
||||
m_bios_rom(*this, "bios_rom"),
|
||||
m_vregs(*this, "vregs"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_cart(*this, "cartslot"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
|
||||
required_shared_ptr<UINT32> m_bios_rom;
|
||||
required_shared_ptr<UINT32> m_vregs;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<generic_slot_device> m_cart;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
UINT16 *m_paletteram;
|
||||
UINT8 *m_vram;
|
||||
UINT8 *m_bitmap_vram;
|
||||
@ -176,19 +183,18 @@ public:
|
||||
virtual void machine_reset();
|
||||
virtual void video_start();
|
||||
UINT32 screen_update_casloopy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
DECLARE_READ16_MEMBER(casloopy_vregs_r);
|
||||
DECLARE_WRITE16_MEMBER(casloopy_vregs_w);
|
||||
DECLARE_READ16_MEMBER(casloopy_pal_r);
|
||||
DECLARE_WRITE16_MEMBER(casloopy_pal_w);
|
||||
DECLARE_READ8_MEMBER(casloopy_vram_r);
|
||||
DECLARE_WRITE8_MEMBER(casloopy_vram_w);
|
||||
DECLARE_READ16_MEMBER(vregs_r);
|
||||
DECLARE_WRITE16_MEMBER(vregs_w);
|
||||
DECLARE_READ16_MEMBER(pal_r);
|
||||
DECLARE_WRITE16_MEMBER(pal_w);
|
||||
DECLARE_READ8_MEMBER(vram_r);
|
||||
DECLARE_WRITE8_MEMBER(vram_w);
|
||||
DECLARE_READ32_MEMBER(cart_r);
|
||||
DECLARE_READ16_MEMBER(sh7021_r);
|
||||
DECLARE_WRITE16_MEMBER(sh7021_w);
|
||||
DECLARE_READ8_MEMBER(casloopy_bitmap_r);
|
||||
DECLARE_WRITE8_MEMBER(casloopy_bitmap_w);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
DECLARE_READ8_MEMBER(bitmap_r);
|
||||
DECLARE_WRITE8_MEMBER(bitmap_w);
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(loopy_cart);
|
||||
};
|
||||
|
||||
|
||||
@ -292,7 +298,7 @@ UINT32 casloopy_state::screen_update_casloopy(screen_device &screen, bitmap_ind1
|
||||
return 0;
|
||||
}
|
||||
|
||||
READ16_MEMBER(casloopy_state::casloopy_vregs_r)
|
||||
READ16_MEMBER(casloopy_state::vregs_r)
|
||||
{
|
||||
if(offset == 4/2)
|
||||
{
|
||||
@ -310,18 +316,18 @@ READ16_MEMBER(casloopy_state::casloopy_vregs_r)
|
||||
return 0xffff;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(casloopy_state::casloopy_vregs_w)
|
||||
WRITE16_MEMBER(casloopy_state::vregs_w)
|
||||
{
|
||||
if(offset != 6/2)
|
||||
printf("%08x %08x\n",offset*2,data);
|
||||
}
|
||||
|
||||
READ16_MEMBER(casloopy_state::casloopy_pal_r)
|
||||
READ16_MEMBER(casloopy_state::pal_r)
|
||||
{
|
||||
return m_paletteram[offset];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(casloopy_state::casloopy_pal_w)
|
||||
WRITE16_MEMBER(casloopy_state::pal_w)
|
||||
{
|
||||
int r,g,b;
|
||||
COMBINE_DATA(&m_paletteram[offset]);
|
||||
@ -333,12 +339,12 @@ WRITE16_MEMBER(casloopy_state::casloopy_pal_w)
|
||||
m_palette->set_pen_color(offset, pal5bit(r), pal5bit(g), pal5bit(b));
|
||||
}
|
||||
|
||||
READ8_MEMBER(casloopy_state::casloopy_vram_r)
|
||||
READ8_MEMBER(casloopy_state::vram_r)
|
||||
{
|
||||
return m_vram[offset];
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(casloopy_state::casloopy_vram_w)
|
||||
WRITE8_MEMBER(casloopy_state::vram_w)
|
||||
{
|
||||
m_vram[offset] = data;
|
||||
|
||||
@ -387,31 +393,37 @@ WRITE16_MEMBER(casloopy_state::sh7021_w)
|
||||
// printf("%08x %04x\n",sh7021_regs[offset],0x05ffff00+offset*2);
|
||||
}
|
||||
|
||||
READ8_MEMBER(casloopy_state::casloopy_bitmap_r)
|
||||
READ8_MEMBER(casloopy_state::bitmap_r)
|
||||
{
|
||||
return m_bitmap_vram[offset];
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(casloopy_state::casloopy_bitmap_w)
|
||||
WRITE8_MEMBER(casloopy_state::bitmap_w)
|
||||
{
|
||||
m_bitmap_vram[offset] = data;
|
||||
}
|
||||
|
||||
READ32_MEMBER(casloopy_state::cart_r)
|
||||
{
|
||||
return m_cart->read32_rom(space, offset, mem_mask);
|
||||
}
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( casloopy_map, AS_PROGRAM, 32, casloopy_state )
|
||||
AM_RANGE(0x00000000, 0x00007fff) AM_RAM AM_SHARE("bios_rom")
|
||||
AM_RANGE(0x01000000, 0x0107ffff) AM_RAM AM_SHARE("wram")// stack pointer points here
|
||||
AM_RANGE(0x04000000, 0x0401ffff) AM_READWRITE8(casloopy_bitmap_r,casloopy_bitmap_w,0xffffffff)
|
||||
AM_RANGE(0x04040000, 0x0404ffff) AM_READWRITE8(casloopy_vram_r,casloopy_vram_w,0xffffffff) // tilemap + PCG
|
||||
AM_RANGE(0x04000000, 0x0401ffff) AM_READWRITE8(bitmap_r, bitmap_w, 0xffffffff)
|
||||
AM_RANGE(0x04040000, 0x0404ffff) AM_READWRITE8(vram_r, vram_w, 0xffffffff) // tilemap + PCG
|
||||
AM_RANGE(0x04050000, 0x040503ff) AM_RAM // ???
|
||||
AM_RANGE(0x04051000, 0x040511ff) AM_READWRITE16(casloopy_pal_r,casloopy_pal_w,0xffffffff)
|
||||
AM_RANGE(0x04058000, 0x04058007) AM_READWRITE16(casloopy_vregs_r,casloopy_vregs_w,0xffffffff)
|
||||
AM_RANGE(0x04051000, 0x040511ff) AM_READWRITE16(pal_r, pal_w, 0xffffffff)
|
||||
AM_RANGE(0x04058000, 0x04058007) AM_READWRITE16(vregs_r, vregs_w, 0xffffffff)
|
||||
AM_RANGE(0x0405b000, 0x0405b00f) AM_RAM AM_SHARE("vregs") // RGB555 brightness control plus scrolling
|
||||
AM_RANGE(0x05ffff00, 0x05ffffff) AM_READWRITE16(sh7021_r,sh7021_w,0xffffffff)
|
||||
AM_RANGE(0x05ffff00, 0x05ffffff) AM_READWRITE16(sh7021_r, sh7021_w, 0xffffffff)
|
||||
// AM_RANGE(0x05ffff00, 0x05ffffff) - SH7021 internal i/o
|
||||
AM_RANGE(0x06000000, 0x061fffff) AM_ROM AM_REGION("rom_cart",0)
|
||||
AM_RANGE(0x06000000, 0x061fffff) AM_READ(cart_r)
|
||||
AM_RANGE(0x07000000, 0x070003ff) AM_RAM AM_SHARE("oram")// on-chip RAM, actually at 0xf000000 (1 kb)
|
||||
AM_RANGE(0x09000000, 0x0907ffff) AM_RAM AM_SHARE("wram")
|
||||
AM_RANGE(0x0e000000, 0x0e1fffff) AM_ROM AM_REGION("rom_cart",0)
|
||||
AM_RANGE(0x0e000000, 0x0e1fffff) AM_READ(cart_r)
|
||||
AM_RANGE(0x0f000000, 0x0f0003ff) AM_RAM AM_SHARE("oram")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -424,22 +436,8 @@ ADDRESS_MAP_END
|
||||
static INPUT_PORTS_START( casloopy )
|
||||
INPUT_PORTS_END
|
||||
|
||||
/* TODO: move this into DEVICE_IMAGE_LOAD_MEMBER */
|
||||
void casloopy_state::machine_start()
|
||||
{
|
||||
UINT8 *SRC = memregion("cart")->base();
|
||||
UINT8 *DST = memregion("rom_cart")->base();
|
||||
|
||||
// fix endianness
|
||||
for (int i=0;i<0x200000;i+=4)
|
||||
{
|
||||
UINT8 tempa = SRC[i+0];
|
||||
UINT8 tempb = SRC[i+1];
|
||||
DST[i+0] = SRC[i+2];
|
||||
DST[i+1] = SRC[i+3];
|
||||
DST[i+2] = tempa;
|
||||
DST[i+3] = tempb;
|
||||
}
|
||||
}
|
||||
|
||||
void casloopy_state::machine_reset()
|
||||
@ -474,7 +472,32 @@ static const gfx_layout casloopy_8bpp_layoutROM =
|
||||
#endif
|
||||
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER( casloopy_state, loopy_cart )
|
||||
{
|
||||
UINT32 size = m_cart->common_get_size("rom");
|
||||
UINT8 *SRC, *DST;
|
||||
dynamic_buffer temp;
|
||||
temp.resize(0x200000);
|
||||
|
||||
m_cart->rom_alloc(size, GENERIC_ROM32_WIDTH);
|
||||
|
||||
SRC = temp;
|
||||
DST = m_cart->get_rom_base();
|
||||
m_cart->common_load_rom(temp, size, "rom");
|
||||
|
||||
// fix endianness
|
||||
for (int i = 0; i < 0x200000; i += 4)
|
||||
{
|
||||
UINT8 tempa = SRC[i + 0];
|
||||
UINT8 tempb = SRC[i + 1];
|
||||
DST[i + 0] = SRC[i + 2];
|
||||
DST[i + 1] = SRC[i + 3];
|
||||
DST[i + 2] = tempa;
|
||||
DST[i + 3] = tempb;
|
||||
}
|
||||
|
||||
return IMAGE_INIT_PASS;
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( casloopy, casloopy_state )
|
||||
|
||||
@ -500,10 +523,10 @@ static MACHINE_CONFIG_START( casloopy, casloopy_state )
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", empty)
|
||||
|
||||
MCFG_CARTSLOT_ADD("cart")
|
||||
MCFG_CARTSLOT_EXTENSION_LIST("ic1,bin")
|
||||
MCFG_CARTSLOT_MANDATORY
|
||||
MCFG_CARTSLOT_INTERFACE("loopy_cart")
|
||||
MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM32_WIDTH, generic_plain_slot, "loopy_cart")
|
||||
MCFG_GENERIC_EXTENSIONS("bin,ic1")
|
||||
MCFG_GENERIC_MANDATORY
|
||||
MCFG_GENERIC_LOAD(casloopy_state, loopy_cart)
|
||||
|
||||
/* software lists */
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list","casloopy")
|
||||
@ -524,11 +547,6 @@ ROM_START( casloopy )
|
||||
|
||||
ROM_REGION( 0x80000, "subcpu", 0) //NEC CDT-109
|
||||
ROM_LOAD( "bios2.lsi352", 0x0000, 0x80000, CRC(8f51fa17) SHA1(99f50be06b083fdb07e08f30b0b26d9037afc869) )
|
||||
|
||||
ROM_REGION( 0x200000, "cart", 0 )
|
||||
ROM_CART_LOAD("cart", 0x00000, 0x200000, ROM_NOMIRROR)
|
||||
|
||||
ROM_REGION( 0x200000, "rom_cart", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(casloopy_state,casloopy)
|
||||
|
@ -41,9 +41,11 @@ If you do nothing for about 20 secs, it turns itself off (screen goes white).
|
||||
#include "emu.h"
|
||||
#include "cpu/arm7/arm7.h"
|
||||
#include "cpu/arm7/arm7core.h"
|
||||
#include "imagedev/cartslot.h"
|
||||
#include "sound/dac.h"
|
||||
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
|
||||
#define MAX_PS_TIMERS 3
|
||||
|
||||
struct ps_ftlb_regs_t
|
||||
@ -104,9 +106,16 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_lcd_buffer(*this, "lcd_buffer"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_dac(*this, "dac") { }
|
||||
m_dac(*this, "dac"),
|
||||
m_cart(*this, "cartslot")
|
||||
{ }
|
||||
|
||||
required_shared_ptr<UINT32> m_lcd_buffer;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<dac_device> m_dac;
|
||||
required_device<generic_slot_device> m_cart;
|
||||
memory_region *m_cart_rom;
|
||||
|
||||
ps_ftlb_regs_t m_ftlb_regs;
|
||||
ps_intc_regs_t m_intc_regs;
|
||||
ps_timer_regs_t m_timer_regs;
|
||||
@ -128,6 +137,7 @@ public:
|
||||
DECLARE_READ32_MEMBER(ps_lcd_r);
|
||||
DECLARE_WRITE32_MEMBER(ps_lcd_w);
|
||||
DECLARE_READ32_MEMBER(ps_rombank_r);
|
||||
DECLARE_READ32_MEMBER(ps_flash_r);
|
||||
DECLARE_WRITE32_MEMBER(ps_flash_w);
|
||||
DECLARE_READ32_MEMBER(ps_audio_r);
|
||||
DECLARE_WRITE32_MEMBER(ps_audio_w);
|
||||
@ -143,8 +153,6 @@ public:
|
||||
UINT32 ps_intc_get_interrupt_line(UINT32 line);
|
||||
void ps_intc_set_interrupt_line(UINT32 line, int state);
|
||||
void ps_timer_start(int index);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<dac_device> m_dac;
|
||||
};
|
||||
|
||||
|
||||
@ -773,19 +781,18 @@ INPUT_CHANGED_MEMBER(pockstat_state::input_update)
|
||||
READ32_MEMBER(pockstat_state::ps_rombank_r)
|
||||
{
|
||||
INT32 bank = (offset >> 11) & 0x0f;
|
||||
int index = 0;
|
||||
for(index = 0; index < 32; index++)
|
||||
for (int index = 0; index < 32; index++)
|
||||
{
|
||||
if(m_ftlb_regs.valid & (1 << index))
|
||||
if (m_ftlb_regs.valid & (1 << index))
|
||||
{
|
||||
if(m_ftlb_regs.entry[index] == bank)
|
||||
if (m_ftlb_regs.entry[index] == bank)
|
||||
{
|
||||
//printf( "Address %08x is assigned to %08x in entry %d\n", 0x02000000 + (offset << 2), index * 0x2000 + ((offset << 2) & 0x1fff), index );
|
||||
return memregion("flash")->u32(index * (0x2000/4) + (offset & (0x1fff/4)));
|
||||
return m_cart->read32_rom(space, index * (0x2000/4) + (offset & (0x1fff/4)), mem_mask);
|
||||
}
|
||||
}
|
||||
}
|
||||
return memregion("flash")->u32(offset & 0x7fff);
|
||||
return m_cart->read32_rom(space, offset & 0x7fff, mem_mask);
|
||||
}
|
||||
|
||||
|
||||
@ -811,10 +818,15 @@ WRITE32_MEMBER(pockstat_state::ps_flash_w)
|
||||
if(m_ps_flash_write_count)
|
||||
{
|
||||
m_ps_flash_write_count--;
|
||||
COMBINE_DATA(&((UINT32*)(*memregion("flash")))[offset]);
|
||||
COMBINE_DATA(&((UINT32*)(m_cart_rom->base()))[offset]);
|
||||
}
|
||||
}
|
||||
|
||||
READ32_MEMBER(pockstat_state::ps_flash_r)
|
||||
{
|
||||
return m_cart->read32_rom(space, offset, mem_mask);
|
||||
}
|
||||
|
||||
READ32_MEMBER(pockstat_state::ps_audio_r)
|
||||
{
|
||||
verboselog(0, "ps_audio_r: Unknown Read: %08x = %08x & %08x\n", 0xd800000 + (offset << 2), 0x10, mem_mask);
|
||||
@ -836,7 +848,7 @@ static ADDRESS_MAP_START(pockstat_mem, AS_PROGRAM, 32, pockstat_state )
|
||||
AM_RANGE(0x02000000, 0x02ffffff) AM_READ(ps_rombank_r)
|
||||
AM_RANGE(0x04000000, 0x04003fff) AM_ROM AM_REGION("maincpu", 0)
|
||||
AM_RANGE(0x06000000, 0x06000307) AM_READWRITE(ps_ftlb_r, ps_ftlb_w)
|
||||
AM_RANGE(0x08000000, 0x0801ffff) AM_ROM AM_WRITE(ps_flash_w) AM_REGION("flash", 0)
|
||||
AM_RANGE(0x08000000, 0x0801ffff) AM_READWRITE(ps_flash_r, ps_flash_w)
|
||||
AM_RANGE(0x0a000000, 0x0a000013) AM_READWRITE(ps_intc_r, ps_intc_w)
|
||||
AM_RANGE(0x0a800000, 0x0a80002b) AM_READWRITE(ps_timer_r, ps_timer_w)
|
||||
AM_RANGE(0x0b000000, 0x0b000007) AM_READWRITE(ps_clock_r, ps_clock_w)
|
||||
@ -861,7 +873,7 @@ INPUT_PORTS_END
|
||||
void pockstat_state::machine_start()
|
||||
{
|
||||
int index = 0;
|
||||
for(index = 0; index < 3; index++)
|
||||
for (index = 0; index < 3; index++)
|
||||
{
|
||||
m_timer_regs.timer[index].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pockstat_state::timer_tick),this));
|
||||
m_timer_regs.timer[index].timer->adjust(attotime::never, index);
|
||||
@ -873,6 +885,9 @@ void pockstat_state::machine_start()
|
||||
m_rtc_regs.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(pockstat_state::rtc_tick),this));
|
||||
m_rtc_regs.timer->adjust(attotime::from_hz(1), index);
|
||||
|
||||
astring region_tag;
|
||||
m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
|
||||
|
||||
save_item(NAME(m_ftlb_regs.control));
|
||||
save_item(NAME(m_ftlb_regs.stat));
|
||||
save_item(NAME(m_ftlb_regs.valid));
|
||||
@ -919,28 +934,20 @@ void pockstat_state::machine_reset()
|
||||
|
||||
UINT32 pockstat_state::screen_update_pockstat(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
for(y = 0; y < 32; y++)
|
||||
for (int y = 0; y < 32; y++)
|
||||
{
|
||||
UINT32 *scanline = &bitmap.pix32(y);
|
||||
for(x = 0; x < 32; x++)
|
||||
for (int x = 0; x < 32; x++)
|
||||
{
|
||||
if(m_lcd_control != 0) // Hack
|
||||
if (m_lcd_control != 0) // Hack
|
||||
{
|
||||
if(m_lcd_buffer[y] & (1 << x))
|
||||
{
|
||||
if (m_lcd_buffer[y] & (1 << x))
|
||||
scanline[x] = 0x00000000;
|
||||
}
|
||||
else
|
||||
{
|
||||
scanline[x] = 0x00ffffff;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
scanline[x] = 0x00ffffff;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -948,26 +955,23 @@ UINT32 pockstat_state::screen_update_pockstat(screen_device &screen, bitmap_rgb3
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER( pockstat_state, pockstat_flash )
|
||||
{
|
||||
int i, length;
|
||||
UINT8 *cart = memregion("flash")->base();
|
||||
static const char *gme_id = "123-456-STD";
|
||||
char cart_id[0xf40];
|
||||
UINT32 size = image.length();
|
||||
|
||||
length = image.fread( cart, 0x20f40);
|
||||
|
||||
if(length != 0x20f40)
|
||||
{
|
||||
if (size != 0x20f40)
|
||||
return IMAGE_INIT_FAIL;
|
||||
}
|
||||
|
||||
image.fread(cart_id, 0xf40);
|
||||
|
||||
for(i = 0; i < strlen(gme_id); i++)
|
||||
for (int i = 0; i < strlen(gme_id); i++)
|
||||
{
|
||||
if(cart[i] != gme_id[i])
|
||||
{
|
||||
if (cart_id[i] != gme_id[i])
|
||||
return IMAGE_INIT_FAIL;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(cart, cart + 0xf40, 0x20000);
|
||||
m_cart->rom_alloc(0x20000, GENERIC_ROM32_WIDTH);
|
||||
image.fread(m_cart->get_rom_base(), 0x20000);
|
||||
|
||||
return IMAGE_INIT_PASS;
|
||||
}
|
||||
@ -977,7 +981,6 @@ static MACHINE_CONFIG_START( pockstat, pockstat_state )
|
||||
MCFG_CPU_ADD("maincpu", ARM7, DEFAULT_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(pockstat_mem)
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", LCD)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
@ -993,18 +996,15 @@ static MACHINE_CONFIG_START( pockstat, pockstat_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
/* cartridge */
|
||||
MCFG_CARTSLOT_ADD("cart")
|
||||
MCFG_CARTSLOT_EXTENSION_LIST("gme")
|
||||
MCFG_CARTSLOT_NOT_MANDATORY
|
||||
MCFG_CARTSLOT_LOAD(pockstat_state, pockstat_flash)
|
||||
MCFG_GENERIC_CARTSLOT_ADD("cartslot", GENERIC_ROM32_WIDTH, generic_plain_slot, "pockstat_cart")
|
||||
MCFG_GENERIC_EXTENSIONS("gme")
|
||||
MCFG_GENERIC_LOAD(pockstat_state, pockstat_flash)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/* ROM definition */
|
||||
ROM_START( pockstat )
|
||||
ROM_REGION( 0x4000, "maincpu", 0 )
|
||||
ROM_LOAD( "kernel.bin", 0x0000, 0x4000, CRC(5fb47dd8) SHA1(6ae880493ddde880827d1e9f08e9cb2c38f9f2ec) )
|
||||
|
||||
ROM_REGION( 0x20f40, "flash", ROMREGION_ERASEFF )
|
||||
ROM_END
|
||||
|
||||
/* Driver */
|
||||
|
Loading…
Reference in New Issue
Block a user