tasman: reinstated CCU again, added preliminary irq masking, added some better gfxdecoding, nw

This commit is contained in:
angelosa 2015-12-15 22:54:51 +01:00
parent e3f5b403ec
commit 6d9def2293
3 changed files with 67 additions and 33 deletions

View File

@ -1624,8 +1624,8 @@ static MACHINE_CONFIG_START( konamigx, konamigx_state )
tbyahhoo attract mode desync is caused by another matter. */
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(600))
MCFG_SCREEN_SIZE(64*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(24, 24+288-1, 16, 16+224-1)
//MCFG_SCREEN_SIZE(64*8, 32*8)
//MCFG_SCREEN_VISIBLE_AREA(24, 24+288-1, 16, 16+224-1)
MCFG_SCREEN_UPDATE_DRIVER(konamigx_state, screen_update_konamigx)
MCFG_PALETTE_ADD("palette", 8192)

View File

@ -14,6 +14,10 @@
Thanks to palindrome for PCB scans.
0x38606
TODO:
- dual port sound RAM;
- interrupt sources / irq masking;
*/
#include "emu.h"
@ -34,12 +38,15 @@ public:
optional_shared_ptr<UINT32> m_vram;
DECLARE_READ32_MEMBER(eeprom_r);
DECLARE_WRITE32_MEMBER(eeprom_w);
DECLARE_WRITE8_MEMBER(eeprom_w);
DECLARE_WRITE8_MEMBER(kongambl_ff_w);
DECLARE_READ32_MEMBER(test_r);
// DECLARE_READ32_MEMBER(rng_r);
DECLARE_DRIVER_INIT(kingtut);
DECLARE_VIDEO_START(kongambl);
UINT8 m_irq_mask;
virtual void machine_reset() override { m_irq_mask = 0; };
UINT32 screen_update_kongambl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(kongambl_vblank);
K056832_CB_MEMBER(tile_callback);
@ -131,12 +138,21 @@ READ32_MEMBER(kongambl_state::eeprom_r)
return retval;
}
WRITE32_MEMBER(kongambl_state::eeprom_w)
WRITE8_MEMBER(kongambl_state::eeprom_w)
{
if (ACCESSING_BITS_8_15)
// offset == 3 seems mux writes (active low)
if (offset == 2)
{
ioport("EEPROMOUT")->write((data>>8)&0xf, 0xff);
ioport("EEPROMOUT")->write(data&0x7, 0xff);
if(data & 0xf8)
printf("Unused EEPROM bits %02x %02x\n",offset,data);
}
else
printf("%02x %02x\n",offset,data);
if(offset == 0)
m_irq_mask = data;
}
READ32_MEMBER(kongambl_state::test_r)
@ -171,7 +187,7 @@ static ADDRESS_MAP_START( kongambl_map, AS_PROGRAM, 32, kongambl_state )
// override konami chips with custom areas until that code is removed
AM_RANGE(0x400000, 0x401fff) AM_ROM AM_REGION("gfx1",0)
AM_RANGE(0x420000, 0x43ffff) AM_RAM AM_SHARE("vram")
AM_RANGE(0x480000, 0x48003f) AM_RAM // vregs
//AM_RANGE(0x480000, 0x48003f) AM_RAM // vregs
//0x400000 0x400001 "13M" even addresses
//0x400002,0x400003 "13J" odd addresses
@ -185,13 +201,13 @@ static ADDRESS_MAP_START( kongambl_map, AS_PROGRAM, 32, kongambl_state )
AM_RANGE(0x460000, 0x47ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x4b001c, 0x4b001f) AM_WRITENOP
AM_RANGE(0x4b0000, 0x4b001f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0xff00ff00)
AM_RANGE(0x4c0000, 0x4c0007) AM_DEVWRITE16("k055673", k055673_device, k053246_word_w, 0xffffffff)
AM_RANGE(0x4c4000, 0x4c4003) AM_WRITENOP
AM_RANGE(0x4c4004, 0x4c4007) AM_WRITENOP
AM_RANGE(0x4c801c, 0x4c801f) AM_WRITENOP
AM_RANGE(0x4cc01c, 0x4cc01f) AM_WRITENOP
//AM_RANGE(0x4c4000, 0x4c4003) AM_WRITENOP
//AM_RANGE(0x4c4004, 0x4c4007) AM_WRITENOP
//AM_RANGE(0x4c801c, 0x4c801f) AM_WRITENOP
//AM_RANGE(0x4cc01c, 0x4cc01f) AM_WRITENOP
AM_RANGE(0x4cc000, 0x4cc00f) AM_DEVREAD16("k055673", k055673_device, k055673_rom_word_r, 0xffffffff)
@ -199,9 +215,9 @@ static ADDRESS_MAP_START( kongambl_map, AS_PROGRAM, 32, kongambl_state )
AM_RANGE(0x500380, 0x500383) AM_READ(test_r)
AM_RANGE(0x500000, 0x5007ff) AM_RAM
// AM_RANGE(0x500400, 0x500403) AM_NOP //dual port?
// AM_RANGE(0x500420, 0x500423) AM_NOP //dual port?
// AM_RANGE(0x500500, 0x500503) AM_NOP // reads sound ROM in here, polled from m68k?
AM_RANGE(0x500400, 0x500403) AM_NOP //dual port?
AM_RANGE(0x500420, 0x500423) AM_NOP //dual port?
AM_RANGE(0x500500, 0x500503) AM_NOP // reads sound ROM in here, polled from m68k?
AM_RANGE(0x580000, 0x580007) AM_READ(test_r)
AM_RANGE(0x600000, 0x60000f) AM_READ(test_r)
@ -209,8 +225,8 @@ static ADDRESS_MAP_START( kongambl_map, AS_PROGRAM, 32, kongambl_state )
AM_RANGE(0x700000, 0x700003) AM_READ(eeprom_r)
AM_RANGE(0x700004, 0x700007) AM_READ_PORT("IN1")
AM_RANGE(0x700008, 0x70000b) AM_READ_PORT("IN3")
AM_RANGE(0x780000, 0x780003) AM_WRITE(eeprom_w)
AM_RANGE(0x780004, 0x780007) AM_WRITENOP
AM_RANGE(0x780000, 0x780003) AM_WRITE8(eeprom_w,0xffffffff)
//AM_RANGE(0x780004, 0x780007) AM_WRITENOP
ADDRESS_MAP_END
static ADDRESS_MAP_START( kongamaud_map, AS_PROGRAM, 16, kongambl_state )
@ -548,14 +564,22 @@ static const gfx_layout charlayout8_tasman =
8,8,
RGN_FRAC(1,1),
8,
{ 0,8,16,24,32,40,48,56 },
// 0,8,16,24,32,40,48,56
// 0 = 1
// 8 = n
// 16 = 4
// 24 = unused
// 32 = 2
// 40 = nn
// 48 = 8?
{ 56,24,40,8,48,16,32,0 },
{ 0,1,2,3,4,5,6,7 }, // bit order probably not exact - note ramp in first 16 tiles
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64},
8*64
};
static GFXDECODE_START( tasman )
GFXDECODE_ENTRY( "gfx1", 0, charlayout8_tasman, 0, 0x8000/256 )
GFXDECODE_ENTRY( "gfx1", 0, charlayout8_tasman, 0, 0x8000/(1 << 8) )
GFXDECODE_END
@ -564,11 +588,18 @@ TIMER_DEVICE_CALLBACK_MEMBER(kongambl_state::kongambl_vblank)
int scanline = param;
// disabled for now since it interferes with the ROM tests
// if(scanline == 512)
// m_maincpu->set_input_line(1, HOLD_LINE); // vblank?
if(scanline == 384 && m_irq_mask & 1)
m_maincpu->set_input_line(1, HOLD_LINE); // vblank?
if(scanline == 0)
//if(scanline == 256 && m_irq_mask & 2)
// m_maincpu->set_input_line(2, HOLD_LINE); // unknown (jumps to work RAM via a branch or returns lv 2 exception error, extension board?)
if(scanline == 0 && m_irq_mask & 4)
m_maincpu->set_input_line(3, HOLD_LINE); // sprite irq?
if(scanline == 128 && m_irq_mask & 8)
m_maincpu->set_input_line(4, HOLD_LINE); // sound irq
}
static MACHINE_CONFIG_START( kongambl, kongambl_state )
@ -579,14 +610,17 @@ static MACHINE_CONFIG_START( kongambl, kongambl_state )
MCFG_CPU_ADD("sndcpu", M68000, 16000000)
MCFG_CPU_PROGRAM_MAP(kongamaud_map)
MCFG_CPU_PERIODIC_INT_DRIVER(kongambl_state, irq2_line_hold, 480)
MCFG_DEVICE_ADD("k053252", K053252, 25000000)
MCFG_K053252_OFFSETS(0, 16) // TBD
MCFG_K053252_INT1_ACK_CB(WRITELINE(konamigx_state, vblank_irq_ack_w))
MCFG_K053252_INT2_ACK_CB(WRITELINE(konamigx_state, hblank_irq_ack_w))
MCFG_VIDEO_SET_SCREEN("screen")
MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
MCFG_SCREEN_SIZE(96*8, 64*8+16)
MCFG_SCREEN_VISIBLE_AREA(0*8, 80*8-1, 0*8, 64*8-1)
MCFG_SCREEN_RAW_PARAMS(25000000, 288+16+32+48, 0, 287, 224+16+8+16, 0, 223) // fake, they'll be changed by CCU anyway, TBD
MCFG_SCREEN_UPDATE_DRIVER(kongambl_state, screen_update_kongambl)
MCFG_SCREEN_PALETTE("palette")
@ -743,12 +777,12 @@ ROM_END
DRIVER_INIT_MEMBER(kongambl_state,kingtut)
{
UINT32 *rom = (UINT32*)memregion("maincpu")->base();
//UINT32 *rom = (UINT32*)memregion("maincpu")->base();
// rom[0x3986c/4] = (rom[0x3986c/4] & 0xffff0000) | 0x600e; // patch ROM check
// rom[0x2bfc8/4] = (rom[0x2bfc8/4] & 0xffff0000) | 0x6612; // patch VRAM ROM checks
// rom[0x2acd0/4] = (rom[0x2acd0/4] & 0xffff) | 0x6612<<16; // patch OBJ ROM checks
rom[0x55e40/4] = (rom[0x55e40/4] & 0xffff0000) | 0x4e71; // goes away from the POST
//rom[0x3986c/4] = (rom[0x3986c/4] & 0xffff0000) | 0x600e; // patch ROM check
//rom[0x2bfc8/4] = (rom[0x2bfc8/4] & 0xffff0000) | 0x6612; // patch VRAM ROM checks
//rom[0x2acd0/4] = (rom[0x2acd0/4] & 0xffff) | 0x6612<<16; // patch OBJ ROM checks
//rom[0x55e40/4] = (rom[0x55e40/4] & 0xffff0000) | 0x4e71; // goes away from the POST
}
GAME( 199?, kingtut, 0, kongambl, kongambl, kongambl_state, kingtut, ROT0, "Konami", "King Tut (NSW, Australia)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )

View File

@ -52,7 +52,7 @@ public:
required_device<cpu_device> m_maincpu;
optional_device<cpu_device> m_soundcpu;
optional_device<tms57002_device> m_dasp;
optional_device<k053252_device> m_k053252; // not hooked up in tasman.cpp yet (does it even have it?)
required_device<k053252_device> m_k053252; // not hooked up in tasman.cpp yet (does it even have it?)
required_device<k055673_device> m_k055673;
required_device<k055555_device> m_k055555;
required_device<k056832_device> m_k056832;