mirror of
https://github.com/holub/mame
synced 2025-05-12 17:14:19 +03:00
Various fixes to Aristocrat MK-V HW [Palindrome]
- Fixed NVRAM & random crashes - Set default mode to game mode - Added watchdog timer - Dram emulator error fixed - External Video Crystal Error fixed - Fixed 2khz timer (There was also ... "Fixed IOC timers 1 & 2 in Archimedes emulation" But I'm not really going to add bullshit to the AA emulation and tramutate that to another Aristocrap MK-4, hell fucking no)
This commit is contained in:
parent
e355eb25de
commit
b1351ea8c2
@ -71,27 +71,113 @@ public:
|
||||
: driver_device(mconfig, type, tag) { }
|
||||
|
||||
emu_timer *m_mk5_2KHz_timer;
|
||||
emu_timer *m_mk5_VSYNC_timer;
|
||||
UINT8 m_ext_latch;
|
||||
UINT8 m_flyback;
|
||||
};
|
||||
|
||||
|
||||
|
||||
static WRITE32_HANDLER( mk5_ext_latch_w )
|
||||
static TIMER_CALLBACK( mk5_VSYNC_callback )
|
||||
{
|
||||
aristmk5_state *state = space->machine().driver_data<aristmk5_state>();
|
||||
/* this banks "something" */
|
||||
state->m_ext_latch = data & 1;
|
||||
aristmk5_state *state = machine.driver_data<aristmk5_state>();
|
||||
ioc_regs[IRQ_STATUS_A] |= 0x08; //turn vsync bit on
|
||||
state->m_mk5_VSYNC_timer->adjust(attotime::never);
|
||||
}
|
||||
|
||||
static READ32_HANDLER( ext_timer_latch_r )
|
||||
static WRITE32_HANDLER(Ns5w48)
|
||||
{
|
||||
aristmk5_state *state = space->machine().driver_data<aristmk5_state>();
|
||||
/* reset 2KHz timer */
|
||||
ioc_regs[IRQ_STATUS_A] &= 0xfe;
|
||||
state->m_mk5_2KHz_timer->adjust(attotime::from_hz(1953.125)); // 8MHz / 4096
|
||||
|
||||
|
||||
/*
|
||||
There is one writeable register which is written with the Ns5w48 strobe. It contains four bits which are
|
||||
taken from bits 16 to 19 of the word being written. The register is cleared whenever the chip is reset. The
|
||||
register controls part of the video system. Bit 3(from data bus bit 19) controls the eorv output. If the bit is
|
||||
one, eorv outputs the NV/CSYNC signal from VIDC. If the bit is zero, eorv outputs inverted NV/CSYNC. Bit 2 of
|
||||
the register controls the eorh output. If the bit is zero, eorh is the NHSYNC output of VIDC. If the bit is one,
|
||||
eorh is inverted NHSYNC. Bits 1 and 0 control what is fed to the vidclk output as follows:
|
||||
|
||||
Bit1 Bit0 vidclk
|
||||
0 0 24 Mhz clock
|
||||
0 1 25 Mhz clock ;// external video crystal
|
||||
1 0 36 Mhz clock
|
||||
1 1 24 Mhz clock
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
Golden Pyramids disassembly
|
||||
|
||||
MOV R0, #0x3200000
|
||||
ROM:03400948 MOV R1, #8
|
||||
ROM:0340094C STRB R1, [R0,#0x14] ; clear vsync
|
||||
ROM:03400950 LDR R2, =0xC350 ; 50000
|
||||
ROM:03400954
|
||||
ROM:03400954 loc_3400954 ; CODE XREF: sub_3400944+18j
|
||||
ROM:03400954 NOP
|
||||
ROM:03400958 SUBS R2, R2, #1
|
||||
ROM:0340095C BNE loc_3400954 ; does this 50000 times, presumably to wait for vsync
|
||||
ROM:03400960 MOV R0, #0x3200000
|
||||
ROM:03400964 LDRB R1, [R0,#0x10] ; reads the irq status a
|
||||
ROM:03400968 TST R1, #8 ; test vsync
|
||||
*/
|
||||
|
||||
aristmk5_state *state = space->machine().driver_data<aristmk5_state>();
|
||||
ioc_regs[IRQ_STATUS_A] &= ~0x08;
|
||||
|
||||
/* bit 1 bit 0 */
|
||||
if((data &~(0x02)) && (data & (0x01))) // external video crystal is enabled. 25 mhz
|
||||
{
|
||||
state->m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure but see above
|
||||
}
|
||||
if((data &~(0x02)) && (data &~(0x01))) // video clock is enabled. 24 mhz
|
||||
{
|
||||
state->m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure
|
||||
}
|
||||
if((data & (0x02)) && (data &~(0x01))) // video clock is enabled. 36 mhz
|
||||
{
|
||||
state->m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure
|
||||
}
|
||||
if((data &(0x02)) && (data &(0x01))) // video clock is enabled. 24 mhz
|
||||
{
|
||||
state->m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // not sure
|
||||
}
|
||||
}
|
||||
|
||||
return 0xffffffff; //value doesn't matter apparently
|
||||
static TIMER_CALLBACK( mk5_2KHz_callback )
|
||||
{
|
||||
aristmk5_state *state = machine.driver_data<aristmk5_state>();
|
||||
ioc_regs[IRQ_STATUS_A] |= 0x01;
|
||||
state->m_mk5_2KHz_timer->adjust(attotime::never);
|
||||
|
||||
}
|
||||
|
||||
static READ32_HANDLER(Ns5x58)
|
||||
{
|
||||
/*
|
||||
1953.125 Hz for the operating system timer interrupt
|
||||
|
||||
The pintr pin ( printer interrupt ) is connected to an interrupt latch in IOEB.
|
||||
A rising edge on pintr causes an interrupt to be latched in IOEB. The latch output
|
||||
is connected to the NIL[6] interrupt input on IOC and goes low when the rising edge is detected.
|
||||
The interrupt is cleared (NIL[6] is set high) by resetting the chip or by the NS5x58
|
||||
strobe.
|
||||
|
||||
NIL[6] IOEB/1pintr - Interrupt Input ( OS Tick Interrput )
|
||||
|
||||
Rising edge signal
|
||||
010101010101 .-------. logic 0 .-------------.
|
||||
------------->|pint |---1pintr------>|NIL[6] |
|
||||
| IOEB | | IOC |
|
||||
`-------' `-------------'
|
||||
*/
|
||||
|
||||
aristmk5_state *state = space->machine().driver_data<aristmk5_state>();
|
||||
// reset 2KHz timer
|
||||
state->m_mk5_2KHz_timer->adjust(attotime::from_hz(1953.125));
|
||||
ioc_regs[IRQ_STATUS_A] &= ~0x01;
|
||||
cputag_set_input_line(space->machine(), "maincpu", ARM_IRQ_LINE, CLEAR_LINE);
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
/* same as plain AA but with the I2C unconnected */
|
||||
@ -140,7 +226,7 @@ static WRITE32_HANDLER( mk5_ioc_w )
|
||||
}
|
||||
}
|
||||
|
||||
static READ32_HANDLER( mk5_unk_r )
|
||||
static READ32_HANDLER( Ns5r50 )
|
||||
{
|
||||
return 0xf5; // checked inside the CPU check, unknown meaning
|
||||
}
|
||||
@ -184,11 +270,27 @@ static WRITE32_HANDLER( sram_banksel_w )
|
||||
write: 03010420 C0 ...
|
||||
read: 3220000 03 ...
|
||||
write: 03010420 00 select bank 0
|
||||
|
||||
|
||||
Bit 0 - Page 1
|
||||
Bit 1 - Page 2
|
||||
Bit 2 - Page 3
|
||||
NC
|
||||
NC
|
||||
NC
|
||||
Bit 6 - SRAM 1
|
||||
Bit 7 - SRAM 2
|
||||
|
||||
Bit 1 and 2 on select Page 4.
|
||||
Bit 6 and 7 on select SRAM 3.
|
||||
|
||||
4 pages of 32k for each sram chip.
|
||||
*/
|
||||
|
||||
memory_set_bank(space->machine(),"sram_bank", (data & 0xc0) >> 6);
|
||||
memory_set_bank(space->machine(),"sram_bank_nz", (data & 0xc0) >> 6);
|
||||
}
|
||||
|
||||
/* U.S games have no dram emulator enabled */
|
||||
static ADDRESS_MAP_START( aristmk5_map, AS_PROGRAM, 32 )
|
||||
AM_RANGE(0x00000000, 0x01ffffff) AM_READWRITE(archimedes_memc_logical_r, archimedes_memc_logical_w)
|
||||
AM_RANGE(0x02000000, 0x02ffffff) AM_RAM AM_BASE(&archimedes_memc_physmem) /* physical RAM - 16 MB for now, should be 512k for the A310 */
|
||||
@ -198,16 +300,44 @@ static ADDRESS_MAP_START( aristmk5_map, AS_PROGRAM, 32 )
|
||||
|
||||
// AM_RANGE(0x0301049c, 0x0301051f) AM_DEVREADWRITE("eeprom", eeprom_r, eeprom_w) // eeprom ???
|
||||
|
||||
AM_RANGE(0x03010810, 0x03010813) AM_READNOP //MK-5 specific, watchdog
|
||||
AM_RANGE(0x03010810, 0x03010813) AM_READWRITE(watchdog_reset32_r,watchdog_reset32_w) //MK-5 specific, watchdog
|
||||
// System Startup Code Enabled protection appears to be located at 0x3010400 - 0x30104ff
|
||||
AM_RANGE(0x03220000, 0x03227fff) AM_RAMBANK("sram_bank") //AM_BASE_SIZE_GENERIC(nvram) // nvram 32kbytes x 3
|
||||
|
||||
AM_RANGE(0x03250048, 0x0325004b) AM_WRITE(mk5_ext_latch_w)
|
||||
AM_RANGE(0x03250050, 0x03250053) AM_READ(mk5_unk_r)
|
||||
AM_RANGE(0x03250058, 0x0325005b) AM_READ(ext_timer_latch_r)
|
||||
AM_RANGE(0x03220000, 0x0323ffff) AM_RAMBANK("sram_bank") //AM_BASE_SIZE_GENERIC(nvram) // nvram 32kbytes x 3
|
||||
|
||||
// bank5 slow
|
||||
AM_RANGE(0x03250048, 0x0325004b) AM_WRITE(Ns5w48) //IOEB control register
|
||||
AM_RANGE(0x03250050, 0x03250053) AM_READ(Ns5r50) //IOEB ID register
|
||||
AM_RANGE(0x03250058, 0x0325005b) AM_READ(Ns5x58) //IOEB Interupt Latch
|
||||
|
||||
AM_RANGE(0x03000000, 0x0331ffff) AM_READWRITE(mk5_ioc_r, mk5_ioc_w)
|
||||
AM_RANGE(0x03320000, 0x03327fff) AM_RAMBANK("sram_bank") // AM_BASE_SIZE_GENERIC(nvram) // nvram 32kbytes x 3 NZ
|
||||
AM_RANGE(0x03320000, 0x0333ffff) AM_RAMBANK("sram_bank_nz") // AM_BASE_SIZE_GENERIC(nvram) // nvram 32kbytes x 3 NZ
|
||||
AM_RANGE(0x03400000, 0x035fffff) AM_ROM AM_REGION("maincpu", 0) AM_WRITE(archimedes_vidc_w)
|
||||
AM_RANGE(0x03600000, 0x037fffff) AM_READWRITE(archimedes_memc_r, archimedes_memc_w)
|
||||
AM_RANGE(0x03800000, 0x039fffff) AM_WRITE(archimedes_memc_page_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* with dram emulator enabled */
|
||||
static ADDRESS_MAP_START( aristmk5_drame_map, AS_PROGRAM, 32 )
|
||||
AM_RANGE(0x00000000, 0x01ffffff) AM_READWRITE(aristmk5_drame_memc_logical_r, archimedes_memc_logical_w)
|
||||
AM_RANGE(0x02000000, 0x02ffffff) AM_RAM AM_BASE(&archimedes_memc_physmem) /* physical RAM - 16 MB for now, should be 512k for the A310 */
|
||||
|
||||
/* MK-5 overrides */
|
||||
AM_RANGE(0x03010420, 0x03010423) AM_WRITE(sram_banksel_w) // SRAM bank select write
|
||||
|
||||
// AM_RANGE(0x0301049c, 0x0301051f) AM_DEVREADWRITE("eeprom", eeprom_r, eeprom_w) // eeprom ???
|
||||
|
||||
AM_RANGE(0x03010810, 0x03010813) AM_READWRITE(watchdog_reset32_r,watchdog_reset32_w) //MK-5 specific, watchdog
|
||||
// System Startup Code Enabled protection appears to be located at 0x3010400 - 0x30104ff
|
||||
AM_RANGE(0x03220000, 0x0323ffff) AM_RAMBANK("sram_bank") //AM_BASE_SIZE_GENERIC(nvram) // nvram 32kbytes x 3
|
||||
|
||||
// bank5 slow
|
||||
AM_RANGE(0x03250048, 0x0325004b) AM_WRITE(Ns5w48) //IOEB control register
|
||||
AM_RANGE(0x03250050, 0x03250053) AM_READ(Ns5r50) //IOEB ID register
|
||||
AM_RANGE(0x03250058, 0x0325005b) AM_READ(Ns5x58) //IOEB Interupt Latch
|
||||
|
||||
|
||||
AM_RANGE(0x03000000, 0x0331ffff) AM_READWRITE(mk5_ioc_r, mk5_ioc_w)
|
||||
AM_RANGE(0x03320000, 0x0333ffff) AM_RAMBANK("sram_bank_nz") // AM_BASE_SIZE_GENERIC(nvram) // nvram 32kbytes x 3 NZ
|
||||
AM_RANGE(0x03400000, 0x035fffff) AM_ROM AM_REGION("maincpu", 0) AM_WRITE(archimedes_vidc_w)
|
||||
AM_RANGE(0x03600000, 0x037fffff) AM_READWRITE(archimedes_memc_r, archimedes_memc_w)
|
||||
AM_RANGE(0x03800000, 0x039fffff) AM_WRITE(archimedes_memc_page_w)
|
||||
@ -217,7 +347,7 @@ ADDRESS_MAP_END
|
||||
static INPUT_PORTS_START( aristmk5 )
|
||||
/* This simulates the ROM swap */
|
||||
PORT_START("ROM_LOAD")
|
||||
PORT_CONFNAME( 0x03, 0x00, "System Mode" )
|
||||
PORT_CONFNAME( 0x03, 0x03, "System Mode" )
|
||||
PORT_CONFSETTING( 0x00, "Set Chip v4.04 Mode" )
|
||||
PORT_CONFSETTING( 0x01, "Set Chip v4.4 Mode" )
|
||||
PORT_CONFSETTING( 0x02, "Clear Chip Mode" )
|
||||
@ -226,19 +356,15 @@ INPUT_PORTS_END
|
||||
|
||||
static DRIVER_INIT( aristmk5 )
|
||||
{
|
||||
UINT8 *SRAM = machine.region("sram")->base();
|
||||
UINT8 *SRAM = machine.region("sram")->base();
|
||||
UINT8 *SRAM_NZ = machine.region("sram")->base();
|
||||
|
||||
archimedes_driver_init(machine);
|
||||
|
||||
memory_configure_bank(machine, "sram_bank", 0, 4, &SRAM[0], 0x8000);
|
||||
memory_configure_bank(machine, "sram_bank", 0, 4, &SRAM[0], 0x20000);
|
||||
memory_configure_bank(machine, "sram_bank_nz", 0, 4, &SRAM_NZ[0], 0x20000);
|
||||
}
|
||||
|
||||
static TIMER_CALLBACK( mk5_2KHz_callback )
|
||||
{
|
||||
aristmk5_state *state = machine.driver_data<aristmk5_state>();
|
||||
ioc_regs[IRQ_STATUS_A] |= 1;
|
||||
|
||||
state->m_mk5_2KHz_timer->adjust(attotime::never);
|
||||
}
|
||||
|
||||
static MACHINE_START( aristmk5 )
|
||||
{
|
||||
@ -249,6 +375,7 @@ static MACHINE_START( aristmk5 )
|
||||
//dac_signed_data_w(machine.device("dac"), 0x80);
|
||||
|
||||
state->m_mk5_2KHz_timer = machine.scheduler().timer_alloc(FUNC(mk5_2KHz_callback));
|
||||
state->m_mk5_VSYNC_timer = machine.scheduler().timer_alloc(FUNC(mk5_VSYNC_callback));
|
||||
}
|
||||
|
||||
static MACHINE_RESET( aristmk5 )
|
||||
@ -256,6 +383,7 @@ static MACHINE_RESET( aristmk5 )
|
||||
aristmk5_state *state = machine.driver_data<aristmk5_state>();
|
||||
archimedes_reset(machine);
|
||||
state->m_mk5_2KHz_timer->adjust(attotime::from_hz(1953.125)); // 8MHz / 4096
|
||||
state->m_mk5_VSYNC_timer->adjust(attotime::from_hz(50000)); // default bit 1 & bit 2 == 0
|
||||
|
||||
ioc_regs[IRQ_STATUS_B] |= 0x40; //hack, set keyboard irq empty to be ON
|
||||
|
||||
@ -290,8 +418,55 @@ static const i2cmem_interface i2cmem_interface =
|
||||
|
||||
static MACHINE_CONFIG_START( aristmk5, aristmk5_state )
|
||||
MCFG_CPU_ADD("maincpu", ARM, 12000000)
|
||||
MCFG_CPU_PROGRAM_MAP(aristmk5_map)
|
||||
MCFG_CPU_PROGRAM_MAP(aristmk5_drame_map)
|
||||
MCFG_WATCHDOG_TIME_INIT(attotime::from_seconds(2)) /* 1.6 - 2 seconds */
|
||||
MCFG_MACHINE_START( aristmk5 )
|
||||
MCFG_MACHINE_RESET( aristmk5 )
|
||||
|
||||
// MCFG_I2CMEM_ADD("i2cmem",i2cmem_interface)
|
||||
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
|
||||
MCFG_SCREEN_SIZE(640, 400)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 400-1)
|
||||
|
||||
MCFG_PALETTE_LENGTH(0x200)
|
||||
|
||||
MCFG_VIDEO_START(archimds_vidc)
|
||||
MCFG_SCREEN_UPDATE(archimds_vidc)
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD("dac0", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.10)
|
||||
|
||||
MCFG_SOUND_ADD("dac1", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.10)
|
||||
|
||||
MCFG_SOUND_ADD("dac2", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.10)
|
||||
|
||||
MCFG_SOUND_ADD("dac3", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.10)
|
||||
|
||||
MCFG_SOUND_ADD("dac4", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.10)
|
||||
|
||||
MCFG_SOUND_ADD("dac5", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.10)
|
||||
|
||||
MCFG_SOUND_ADD("dac6", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.10)
|
||||
|
||||
MCFG_SOUND_ADD("dac7", DAC, 0)
|
||||
MCFG_SOUND_ROUTE(0, "mono", 0.10)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( aristmk5_usa, aristmk5_state )
|
||||
MCFG_CPU_ADD("maincpu", ARM, 12000000)
|
||||
MCFG_CPU_PROGRAM_MAP(aristmk5_map)
|
||||
MCFG_WATCHDOG_TIME_INIT(attotime::from_seconds(2)) /* 1.6 - 2 seconds */
|
||||
MCFG_MACHINE_START( aristmk5 )
|
||||
MCFG_MACHINE_RESET( aristmk5 )
|
||||
|
||||
@ -358,7 +533,7 @@ ROM_START( aristmk5 )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( reelrock )
|
||||
@ -372,7 +547,7 @@ ROM_START( reelrock )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( indiandr )
|
||||
@ -386,7 +561,7 @@ ROM_START( indiandr )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( dolphntr )
|
||||
@ -398,7 +573,7 @@ ROM_START( dolphntr )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( dolphtra )
|
||||
@ -412,7 +587,7 @@ ROM_START( dolphtra )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( qotn )
|
||||
@ -426,7 +601,7 @@ ROM_START( qotn )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( swthrt2v )
|
||||
@ -438,7 +613,7 @@ ROM_START( swthrt2v )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( enchfrst )
|
||||
@ -450,7 +625,7 @@ ROM_START( enchfrst )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( margmgc )
|
||||
@ -466,7 +641,7 @@ ROM_START( margmgc )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( adonis )
|
||||
@ -480,7 +655,7 @@ ROM_START( adonis )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( wtiger )
|
||||
@ -492,7 +667,7 @@ ROM_START( wtiger )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
/****************** Touchscreen games and New Zealand games ******************/
|
||||
@ -508,7 +683,7 @@ ROM_START( dmdtouch )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASEFF )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASEFF )
|
||||
ROM_END
|
||||
|
||||
ROM_START( geishanz )
|
||||
@ -524,7 +699,7 @@ ROM_START( geishanz )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
/*********************** US games (requires set chips) ***********************/
|
||||
@ -541,7 +716,7 @@ ROM_START( goldprmd )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
ROM_START( magicmsk )
|
||||
@ -556,7 +731,7 @@ ROM_START( magicmsk )
|
||||
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
|
||||
ROM_REGION( 0x8000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
ROM_END
|
||||
|
||||
GAME( 1995, aristmk5, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "MKV Set/Clear Chips (USA)", GAME_NOT_WORKING|GAME_IS_BIOS_ROOT )
|
||||
@ -566,13 +741,13 @@ GAME( 1995, enchfrst, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat
|
||||
GAME( 1995, swthrt2v, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Sweet Hearts II (01J01986, Venezuela)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // 577/1, C - 07/09/95
|
||||
GAME( 1996, dolphntr, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Dolphin Treasure (0200424V, NSW/ACT)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // 602/1, B - 06/12/96
|
||||
GAME( 1996, dolphtra, dolphntr, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Dolphin Treasure (0100424V, NSW/ACT)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // 602/1, B - 06/12/96
|
||||
GAME( 1997, goldprmd, aristmk5, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Golden Pyramids (MV4091, USA)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // MV4091, B - 13/05/97
|
||||
GAME( 1997, goldprmd, aristmk5, aristmk5_usa, aristmk5, aristmk5, ROT0, "Aristocrat", "Golden Pyramids (MV4091, USA)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // MV4091, B - 13/05/97
|
||||
GAME( 1997, qotn, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Queen of the Nile (0200439V, NSW/ACT)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // 602/4, B - 13/05/97
|
||||
GAME( 1997, dmdtouch, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Diamond Touch (0400433V, Local)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // 604, E - 30/06/97
|
||||
GAME( 1998, adonis, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Adonis (0200751V, NSW/ACT)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // 602/9, A - 25/05/98
|
||||
GAME( 1998, reelrock, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Reelin-n-Rockin (0100779V, Local)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // 628, A - 13/07/98
|
||||
GAME( 1998, indiandr, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Indian Dreaming (0100845V, Local)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // 628/1, B - 15/12/98
|
||||
GAME( 1999, wtiger, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "White Tiger Classic (0200954V, NSW/ACT)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // 638/1, B - 08/07/99
|
||||
GAME( 2000, magicmsk, aristmk5, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Magic Mask (MV4115, Export)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // MV4115, A - 09/05/2000
|
||||
GAME( 2000, magicmsk, aristmk5, aristmk5_usa, aristmk5, aristmk5, ROT0, "Aristocrat", "Magic Mask (MV4115, Export)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // MV4115, A - 09/05/2000
|
||||
GAME( 2000, margmgc, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Margarita Magic (01J00101, NSW/ACT)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // JB005, A - 07/07/2000
|
||||
GAME( 2001, geishanz, 0, aristmk5, aristmk5, aristmk5, ROT0, "Aristocrat", "Geisha (0101408V, New Zealand)", GAME_NOT_WORKING|GAME_IMPERFECT_SOUND ) // MV4127, A - 05/03/01
|
||||
|
@ -49,6 +49,7 @@ void archimedes_clear_irq_a(running_machine &machine, int mask);
|
||||
void archimedes_clear_irq_b(running_machine &machine, int mask);
|
||||
void archimedes_clear_fiq(running_machine &machine, int mask);
|
||||
|
||||
extern READ32_HANDLER(aristmk5_drame_memc_logical_r);
|
||||
extern READ32_HANDLER(archimedes_memc_logical_r);
|
||||
extern WRITE32_HANDLER(archimedes_memc_logical_w);
|
||||
extern READ32_HANDLER(archimedes_memc_r);
|
||||
|
@ -212,7 +212,7 @@ static void a310_set_timer(int tmr)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
timer[tmr]->adjust(attotime::from_usec(ioc_timercnt[tmr]/8), tmr); // TODO: ARM timings are quite off there, it should be latch and not latch/8
|
||||
timer[tmr]->adjust(attotime::from_usec(ioc_timercnt[tmr]/8), tmr); // TODO: ARM timings are quite off there, it should be latch and not latch/8
|
||||
break;
|
||||
case 2:
|
||||
freq = 1000000.0 / (double)(ioc_timercnt[tmr]+1);
|
||||
@ -318,6 +318,8 @@ READ32_HANDLER(archimedes_memc_logical_r)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
WRITE32_HANDLER(archimedes_memc_logical_w)
|
||||
{
|
||||
UINT32 page, poffs;
|
||||
@ -346,6 +348,55 @@ WRITE32_HANDLER(archimedes_memc_logical_w)
|
||||
}
|
||||
}
|
||||
|
||||
/* Aristocrat Mark 5 - same as normal AA except with Dram emulator */
|
||||
READ32_HANDLER(aristmk5_drame_memc_logical_r)
|
||||
{
|
||||
UINT32 page, poffs;
|
||||
|
||||
// are we mapping in the boot ROM?
|
||||
if (memc_latchrom)
|
||||
{
|
||||
UINT32 *rom;
|
||||
|
||||
rom = (UINT32 *)space->machine().region("maincpu")->base();
|
||||
|
||||
return rom[offset & 0x1fffff];
|
||||
}
|
||||
else
|
||||
{
|
||||
// figure out the page number and offset in the page
|
||||
page = (offset<<2) / page_sizes[memc_pagesize];
|
||||
poffs = (offset<<2) % page_sizes[memc_pagesize];
|
||||
|
||||
|
||||
|
||||
if (memc_pages[page] != -1)
|
||||
{
|
||||
/******************* DRAM Emulator - gal20v - Aristocrat Mark 5 ************************
|
||||
A Dynamic RAM emulator is provided which avoids the need to execute code
|
||||
in DRAM in those regulatory environments where it is not needed.
|
||||
|
||||
When pin 5 of U36 ( gal20v ) is low, the pin 25 output is high and enables the
|
||||
logic buffer inputs and provides a fixed jmp address to a plurality
|
||||
of rom addresses ( 0xEAD0000A shown on logic buffer arrangement in schematics )
|
||||
|
||||
In this state, DRAM memory space is disabled.
|
||||
|
||||
****************************************************************************************/
|
||||
if(!(memc_pages[page] & 0x10) && (offset <= 0x3ff))
|
||||
return 0xEAD0000A;
|
||||
return archimedes_memc_physmem[((memc_pages[page] * page_sizes[memc_pagesize]) + poffs)>>2];
|
||||
}
|
||||
else
|
||||
{
|
||||
//printf("ARCHIMEDES_MEMC: Reading unmapped page %02x\n",page);
|
||||
return 0xdeadbeef;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
DIRECT_UPDATE_HANDLER( a310_setopbase )
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user