mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
tasman: reinstated CCU again, added preliminary irq masking, added some better gfxdecoding, nw
This commit is contained in:
parent
e3f5b403ec
commit
6d9def2293
@ -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)
|
||||
|
@ -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 )
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user