mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
Merge remote-tracking branch 'upstream/master' into fix_mm1_video
This commit is contained in:
commit
f5e84eeca0
6
3rdparty/lzma/C/CpuArch.c
vendored
6
3rdparty/lzma/C/CpuArch.c
vendored
@ -82,7 +82,7 @@ static void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d)
|
||||
"=c" (*c) ,
|
||||
"=d" (*d)
|
||||
: "0" (function)) ;
|
||||
#else // __PIC__
|
||||
#else /* __PIC__ */
|
||||
__asm__ __volatile__ (
|
||||
"cpuid"
|
||||
: "=a" (*a) ,
|
||||
@ -90,8 +90,8 @@ static void MyCPUID(UInt32 function, UInt32 *a, UInt32 *b, UInt32 *c, UInt32 *d)
|
||||
"=c" (*c) ,
|
||||
"=d" (*d)
|
||||
: "0" (function)) ;
|
||||
#endif // __PIC__
|
||||
|
||||
#endif /* __PIC__ */
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
2
3rdparty/lzma/C/LzmaDec.c
vendored
2
3rdparty/lzma/C/LzmaDec.c
vendored
@ -967,7 +967,7 @@ SRes LzmaDec_Allocate(CLzmaDec *p, const Byte *props, unsigned propsSize, ISzAll
|
||||
return SZ_OK;
|
||||
}
|
||||
|
||||
// why isn't there an interface to pass in the properties directly????
|
||||
/* why isn't there an interface to pass in the properties directly???? */
|
||||
SRes LzmaDec_Allocate_MAME(CLzmaDec *p, const CLzmaProps *propNew, ISzAlloc *alloc)
|
||||
{
|
||||
SizeT dicBufSize;
|
||||
|
9384
3rdparty/sqlite3/sqlite3.c
vendored
9384
3rdparty/sqlite3/sqlite3.c
vendored
File diff suppressed because it is too large
Load Diff
8
makefile
8
makefile
@ -90,7 +90,7 @@
|
||||
|
||||
# QT_HOME = /usr/lib64/qt48/
|
||||
|
||||
# DRIVERS = src/mame/drivers/1942.c,src/mame/drivers/cops.c
|
||||
# SOURCES = src/mame/drivers/asteroid.c,src/mame/audio/llander.c
|
||||
|
||||
# FORCE_VERSION_COMPILE = 1
|
||||
|
||||
@ -628,8 +628,8 @@ ifdef QT_HOME
|
||||
PARAMS += --QT_HOME='$(QT_HOME)'
|
||||
endif
|
||||
|
||||
ifdef DRIVERS
|
||||
PARAMS += --DRIVERS='$(DRIVERS)'
|
||||
ifdef SOURCES
|
||||
PARAMS += --SOURCES='$(SOURCES)'
|
||||
endif
|
||||
|
||||
ifdef FORCE_VERSION_COMPILE
|
||||
@ -661,7 +661,7 @@ SCRIPTS = scripts/genie.lua \
|
||||
$(wildcard src/osd/$(OSD)/$(OSD).mak) \
|
||||
$(wildcard src/$(TARGET)/$(SUBTARGET).mak)
|
||||
|
||||
ifndef DRIVERS
|
||||
ifndef SOURCES
|
||||
SCRIPTS += scripts/target/$(TARGET)/$(SUBTARGET).lua
|
||||
endif
|
||||
|
||||
|
@ -370,8 +370,8 @@ newoption {
|
||||
}
|
||||
|
||||
newoption {
|
||||
trigger = "DRIVERS",
|
||||
description = "List of drivers to compile.",
|
||||
trigger = "SOURCES",
|
||||
description = "List of sources to compile.",
|
||||
}
|
||||
|
||||
newoption {
|
||||
@ -516,15 +516,15 @@ msgarchiving ("Archiving $(notdir $@)...")
|
||||
|
||||
messageskip { "SkipCreatingMessage", "SkipBuildingMessage", "SkipCleaningMessage" }
|
||||
|
||||
if (_OPTIONS["DRIVERS"] == nil) then
|
||||
if (_OPTIONS["SOURCES"] == nil) then
|
||||
if (not os.isfile(path.join("target", _OPTIONS["target"],_OPTIONS["subtarget"] .. ".lua"))) then
|
||||
error("File definition for TARGET=" .. _OPTIONS["target"] .. " SUBTARGET=" .. _OPTIONS["subtarget"] .. " does not exist")
|
||||
end
|
||||
dofile (path.join("target", _OPTIONS["target"],_OPTIONS["subtarget"] .. ".lua"))
|
||||
else
|
||||
OUT_STR = os.outputof( PYTHON .. " " .. MAME_DIR .. "scripts/build/makedep.py " .. MAME_DIR .. " " .. _OPTIONS["DRIVERS"] .. " target " .. _OPTIONS["subtarget"])
|
||||
OUT_STR = os.outputof( PYTHON .. " " .. MAME_DIR .. "scripts/build/makedep.py " .. MAME_DIR .. " " .. _OPTIONS["SOURCES"] .. " target " .. _OPTIONS["subtarget"])
|
||||
load(OUT_STR)()
|
||||
os.outputof( PYTHON .. " " .. MAME_DIR .. "scripts/build/makedep.py " .. MAME_DIR .. " " .. _OPTIONS["DRIVERS"] .. " drivers " .. _OPTIONS["subtarget"] .. " > ".. GEN_DIR .. _OPTIONS["target"] .. "/" .. _OPTIONS["subtarget"].."/drivlist.c")
|
||||
os.outputof( PYTHON .. " " .. MAME_DIR .. "scripts/build/makedep.py " .. MAME_DIR .. " " .. _OPTIONS["SOURCES"] .. " drivers " .. _OPTIONS["subtarget"] .. " > ".. GEN_DIR .. _OPTIONS["target"] .. "/" .. _OPTIONS["subtarget"].."/drivlist.c")
|
||||
end
|
||||
configuration { "gmake" }
|
||||
flags {
|
||||
|
@ -47,7 +47,7 @@ function devicesProject(_target, _subtarget)
|
||||
|
||||
dofile(path.join("src", "machine.lua"))
|
||||
|
||||
if (_OPTIONS["DRIVERS"] == nil) then
|
||||
if (_OPTIONS["SOURCES"] == nil) then
|
||||
project ("bus")
|
||||
uuid ("5d782c89-cf7e-4cfe-8f9f-0d4bfc16c91d")
|
||||
kind (LIBTYPE)
|
||||
@ -85,6 +85,7 @@ else
|
||||
dofile(path.join("src", "bus.lua"))
|
||||
end
|
||||
|
||||
if #disasm_files > 0 then
|
||||
project ("dasm")
|
||||
uuid ("f2d28b0a-6da5-4f78-b629-d834aa00429d")
|
||||
kind (LIBTYPE)
|
||||
@ -129,3 +130,5 @@ end
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
@ -2,7 +2,7 @@
|
||||
-- copyright-holders:MAMEdev Team
|
||||
|
||||
function mainProject(_target, _subtarget)
|
||||
if (_OPTIONS["DRIVERS"] == nil) then
|
||||
if (_OPTIONS["SOURCES"] == nil) then
|
||||
if (_target == _subtarget) then
|
||||
project (_target)
|
||||
else
|
||||
@ -38,7 +38,7 @@ end
|
||||
flags {
|
||||
"Unicode",
|
||||
}
|
||||
if (_OPTIONS["DRIVERS"] == nil) then
|
||||
if (_OPTIONS["SOURCES"] == nil) then
|
||||
configuration { "x64", "Release" }
|
||||
targetsuffix "64"
|
||||
if _OPTIONS["PROFILE"] then
|
||||
@ -91,7 +91,7 @@ end
|
||||
links {
|
||||
"osd_" .. _OPTIONS["osd"],
|
||||
}
|
||||
if (_OPTIONS["DRIVERS"] == nil) then
|
||||
if (_OPTIONS["SOURCES"] == nil) then
|
||||
links {
|
||||
"bus",
|
||||
}
|
||||
@ -101,7 +101,13 @@ end
|
||||
"optional",
|
||||
"emu",
|
||||
"formats",
|
||||
}
|
||||
if #disasm_files > 0 then
|
||||
links {
|
||||
"dasm",
|
||||
}
|
||||
end
|
||||
links {
|
||||
"utils",
|
||||
"expat",
|
||||
"softfloat",
|
||||
@ -226,7 +232,7 @@ end
|
||||
GEN_DIR .. _target .. "/" .. _subtarget .."/drivlist.c",
|
||||
}
|
||||
|
||||
if (_OPTIONS["DRIVERS"] == nil) then
|
||||
if (_OPTIONS["SOURCES"] == nil) then
|
||||
dependency {
|
||||
{ "../../../../generated/mame/mame/drivlist.c", MAME_DIR .. "src/mame/mess.lst", true },
|
||||
{ "../../../../generated/mame/mame/drivlist.c" , MAME_DIR .. "src/mame/arcade.lst", true},
|
||||
|
@ -109,9 +109,9 @@ void pit68230_device::execute_run ()
|
||||
} while (m_icount > 0);
|
||||
}
|
||||
|
||||
LOG (static INT32 ow_cnt = 0);
|
||||
LOG (static INT32 ow_data = 0);
|
||||
LOG (static INT32 ow_ofs = 0);
|
||||
LOG (static INT32 ow_cnt = 0)
|
||||
LOG (static INT32 ow_data = 0)
|
||||
LOG (static INT32 ow_ofs = 0)
|
||||
|
||||
WRITE8_MEMBER (pit68230_device::write){
|
||||
switch (offset) {
|
||||
@ -185,9 +185,9 @@ WRITE8_MEMBER (pit68230_device::write){
|
||||
ow_cnt++; )
|
||||
}
|
||||
|
||||
LOG (static INT32 or_cnt = 0);
|
||||
LOG (static INT32 or_data = 0);
|
||||
LOG (static INT32 or_ofs = 0);
|
||||
LOG (static INT32 or_cnt = 0)
|
||||
LOG (static INT32 or_data = 0)
|
||||
LOG (static INT32 or_ofs = 0)
|
||||
|
||||
READ8_MEMBER (pit68230_device::read){
|
||||
UINT8 data = 0;
|
||||
|
@ -451,7 +451,7 @@ protected:
|
||||
WR11_TRXSRC_SRC_XTAL = 0x00, // 0 0
|
||||
WR11_TRXSRC_SRC_TRA = 0x01, // 0 1
|
||||
WR11_TRXSRC_SRC_BR = 0x02, // 1 0
|
||||
WR11_TRXSRC_SRC_DPLL = 0x03, // 1 1
|
||||
WR11_TRXSRC_SRC_DPLL = 0x03 // 1 1
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -208,7 +208,7 @@ protected:
|
||||
{
|
||||
REG_RR0_STATUS = 0,
|
||||
REG_RR1_SPEC_RCV_COND = 1,
|
||||
REG_RR2_INTERRUPT_VECT = 2,
|
||||
REG_RR2_INTERRUPT_VECT = 2
|
||||
};
|
||||
|
||||
// Write registers
|
||||
@ -221,7 +221,7 @@ protected:
|
||||
REG_WR4_RX_TX_MODES = 4,
|
||||
REG_WR5_TX_CONTROL = 5,
|
||||
REG_WR6_SYNC_OR_SDLC_A = 6,
|
||||
REG_WR7_SYNC_OR_SDLC_F = 7,
|
||||
REG_WR7_SYNC_OR_SDLC_F = 7
|
||||
};
|
||||
|
||||
enum
|
||||
@ -486,7 +486,7 @@ protected:
|
||||
|
||||
enum
|
||||
{
|
||||
TYPE_Z80SIO,
|
||||
TYPE_Z80SIO
|
||||
};
|
||||
|
||||
enum
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "emuopts.h"
|
||||
#include "png.h"
|
||||
#include "rendutil.h"
|
||||
#include "validity.h"
|
||||
|
||||
|
||||
|
||||
@ -55,6 +56,7 @@ screen_device::screen_device(const machine_config &mconfig, const char *tag, dev
|
||||
m_yscale(1.0f),
|
||||
m_palette(*this),
|
||||
m_video_attributes(0),
|
||||
m_orientation(0),
|
||||
m_container(NULL),
|
||||
m_width(100),
|
||||
m_height(100),
|
||||
@ -238,6 +240,16 @@ void screen_device::static_set_video_attributes(device_t &device, UINT32 flags)
|
||||
screen_device &screen = downcast<screen_device &>(device);
|
||||
screen.m_video_attributes = flags;
|
||||
}
|
||||
//-------------------------------------------------
|
||||
// static_set_orientation - set the screen orientation
|
||||
//-------------------------------------------------
|
||||
|
||||
void screen_device::static_set_orientation(device_t &device, UINT32 orientation)
|
||||
{
|
||||
screen_device &screen = downcast<screen_device &>(device);
|
||||
screen.m_orientation = orientation;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_validity_check - verify device
|
||||
// configuration
|
||||
@ -269,6 +281,9 @@ void screen_device::device_validity_check(validity_checker &valid) const
|
||||
osd_printf_error("Screen does not have palette defined\n");
|
||||
if (m_palette != NULL && texformat == TEXFORMAT_RGB32)
|
||||
osd_printf_warning("Screen does not need palette defined\n");
|
||||
|
||||
// if (m_orientation != (valid.driver()->flags & ORIENTATION_MASK))
|
||||
// osd_printf_error("Screen orientation does not match\n");
|
||||
}
|
||||
|
||||
|
||||
|
@ -181,11 +181,13 @@ public:
|
||||
static void static_set_screen_vblank(device_t &device, screen_vblank_delegate callback);
|
||||
static void static_set_palette(device_t &device, const char *tag);
|
||||
static void static_set_video_attributes(device_t &device, UINT32 flags);
|
||||
static void static_set_orientation(device_t &device, UINT32 orientation);
|
||||
|
||||
// information getters
|
||||
render_container &container() const { assert(m_container != NULL); return *m_container; }
|
||||
bitmap_ind8 &priority() { return m_priority; }
|
||||
palette_device *palette() { return m_palette; }
|
||||
UINT32 orientation() { return m_orientation; }
|
||||
|
||||
// dynamic configuration
|
||||
void configure(int width, int height, const rectangle &visarea, attoseconds_t frame_period);
|
||||
@ -266,6 +268,7 @@ private:
|
||||
screen_vblank_delegate m_screen_vblank; // screen vblank callback
|
||||
optional_device<palette_device> m_palette; // our palette
|
||||
UINT32 m_video_attributes; // flags describing the video system
|
||||
UINT32 m_orientation; // screen orientation
|
||||
|
||||
// internal state
|
||||
render_container * m_container; // pointer to our container
|
||||
@ -429,6 +432,8 @@ typedef device_type_iterator<&device_creator<screen_device>, screen_device> scre
|
||||
screen_device::static_set_palette(*device, FINDER_DUMMY_TAG);
|
||||
#define MCFG_SCREEN_VIDEO_ATTRIBUTES(_flags) \
|
||||
screen_device::static_set_video_attributes(*device, _flags);
|
||||
#define MCFG_SCREEN_ORIENTATION(_orientation) \
|
||||
screen_device::static_set_orientation(*device, _orientation);
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
|
@ -39,6 +39,7 @@ public:
|
||||
// getters
|
||||
int errors() const { return m_errors; }
|
||||
int warnings() const { return m_warnings; }
|
||||
const game_driver *driver() const { return m_current_driver; }
|
||||
|
||||
// operations
|
||||
void check_driver(const game_driver &driver);
|
||||
|
@ -1826,6 +1826,7 @@ rtypej // (c) 1987 (Japan)
|
||||
rtypejp // (c) 1987 (Japan)
|
||||
rtypeu // (c) 1987 + Nintendo USA license (US)
|
||||
rtypeb // bootleg
|
||||
rtypem82b // bootleg
|
||||
bchopper // (c) 1987
|
||||
mrheli // (c) 1987 (Japan)
|
||||
nspirit // (c) 1988
|
||||
@ -1843,6 +1844,7 @@ dbreedm72 // (c) 1989
|
||||
rtype2 // (c) 1989
|
||||
rtype2j // (c) 1989 (Japan)
|
||||
rtype2jc // (c) 1989 (Japan)
|
||||
rtype2m82b // bootleg
|
||||
majtitle // (c) 1990 (World)
|
||||
majtitlej // (c) 1990 (Japan)
|
||||
hharry // (c) 1990 (World)
|
||||
|
@ -250,6 +250,7 @@ static MACHINE_CONFIG_START( battlex, battlex_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(battlex_state, screen_update_battlex)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", battlex)
|
||||
MCFG_PALETTE_ADD("palette", 64)
|
||||
|
@ -490,6 +490,7 @@ static MACHINE_CONFIG_START( changela, changela_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 4*8, 32*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(changela_state, screen_update_changela)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 0x40)
|
||||
|
||||
|
@ -4401,6 +4401,7 @@ static MACHINE_CONFIG_START( htengoku, ddenlovr_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(ddenlovr_state, screen_update_htengoku)
|
||||
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 16*256)
|
||||
|
||||
|
@ -1800,6 +1800,7 @@ static MACHINE_CONFIG_DERIVED( pestplce, dkongjr )
|
||||
MCFG_PALETTE_INIT_OWNER(dkong_state,dkong2b) /* wrong! */
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dkong_state, screen_update_pestplce)
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( dkong3b, dkongjr )
|
||||
@ -1831,6 +1832,12 @@ static MACHINE_CONFIG_DERIVED( s2650, dkong2b )
|
||||
MCFG_MACHINE_START_OVERRIDE(dkong_state,s2650)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( shootgal, s2650 )
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( spclforc, s2650 )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -3319,7 +3326,7 @@ GAME( 1984, herodk, hero, s2650, herodk, dkong_state, herodk, R
|
||||
GAME( 1984, herodku, hero, s2650, herodk, driver_device, 0, ROT90, "Seatongrove Ltd (Crown license)", "Hero in the Castle of Doom (DK conversion not encrypted)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, 8ballact, 0, s2650, 8ballact, driver_device, 0, ROT90, "Seatongrove Ltd (Magic Electronics USA license)", "Eight Ball Action (DK conversion)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, 8ballact2, 8ballact, s2650, 8ballact, driver_device, 0, ROT90, "Seatongrove Ltd (Magic Electronics USA license)", "Eight Ball Action (DKJr conversion)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, shootgal, 0, s2650, shootgal, driver_device, 0, ROT180, "Seatongrove Ltd (Zaccaria license)", "Shooting Gallery", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1984, shootgal, 0, shootgal, shootgal, driver_device, 0, ROT180, "Seatongrove Ltd (Zaccaria license)", "Shooting Gallery", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, spclforc, 0, spclforc, spclforc, driver_device, 0, ROT90, "Senko Industries (Magic Electronics Inc. license)", "Special Forces", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1985, spcfrcii, 0, spclforc, spclforc, driver_device, 0, ROT90, "Senko Industries (Magic Electronics Inc. license)", "Special Forces II", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
|
@ -4405,6 +4405,7 @@ static MACHINE_CONFIG_START( hanamai, dynax_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1-4, 16+8, 255-8)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dynax_state, screen_update_hanamai)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 512)
|
||||
|
||||
@ -4459,6 +4460,7 @@ static MACHINE_CONFIG_START( hnoridur, dynax_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1-4, 16, 256-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dynax_state, screen_update_hnoridur)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 16*256)
|
||||
|
||||
@ -4506,6 +4508,7 @@ static MACHINE_CONFIG_START( hjingi, dynax_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 512-1-4, 16, 256-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dynax_state, screen_update_hnoridur)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 16*256)
|
||||
|
||||
@ -4598,6 +4601,7 @@ static MACHINE_CONFIG_START( mjfriday, dynax_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 16, 256-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dynax_state, screen_update_mjdialq2)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 512)
|
||||
|
||||
@ -5003,6 +5007,7 @@ static MACHINE_CONFIG_START( gekisha, dynax_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(2, 256-1, 16, 256-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(dynax_state, screen_update_mjdialq2)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 512)
|
||||
MCFG_PALETTE_INIT_OWNER(dynax_state,sprtmtch) // static palette
|
||||
|
@ -1,21 +1,40 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/*
|
||||
// copyright-holders:Curt Coder, Robbbert
|
||||
/*****************************************************************************************
|
||||
|
||||
ETI project 660, featured in the Australian magazine Electronics Today International.
|
||||
|
||||
Commands:
|
||||
R - Reset (use this before any other instruction)
|
||||
S - Step
|
||||
0 - Enter modify memory mode
|
||||
2 - Save memory to cassette
|
||||
4 - Load memory from cassette
|
||||
6 - start binary program
|
||||
8 - start chip-8 program.
|
||||
|
||||
To modify memory, press R, 0, enter 4-digit address, S, enter data, S, continue on.
|
||||
R to escape.
|
||||
|
||||
To save a tape, enter the start address into 0400,0401 (big endian), and the end
|
||||
address into 0402,0403. Press R. Press record on the tape, press 2.
|
||||
|
||||
To load a tape, enter the start and end addresses as above. Press R, 4. Screen goes
|
||||
black. Press play on tape. If the screen is still black after the tape ends, press R.
|
||||
|
||||
All chip-8 programs start at 0600. The manual says the max end address is 7FF (gives
|
||||
512 bytes), but you can fill up all of memory (gives 2560 bytes).
|
||||
|
||||
TODO:
|
||||
- sometimes there's no sound when started. You may need to hard reset until it beeps.
|
||||
- don't know why, but the expected behaviour of our 6821 pia isn't what this machine
|
||||
expects, so had to add a couple of hacks.
|
||||
- doesn't run programs for other chip-8 computers (this might be normal?)
|
||||
- we support BIN files, but have none to test with.
|
||||
- in Invaders, can't shoot them
|
||||
- in Maze, the result is rubbish (works in Emma02 emulator)
|
||||
|
||||
- does not boot!
|
||||
- reset key
|
||||
- allocate color ram
|
||||
- quickload
|
||||
- color on
|
||||
|
||||
- keyboard not working
|
||||
- foreground is black, according to the construction article it should be white.
|
||||
- it is supposed to reset itself at boot, but that isn't working. You must press R.
|
||||
- Pressing F3 causes it to jump into the weeds.
|
||||
|
||||
*/
|
||||
**************************************************************************************************/
|
||||
|
||||
#include "includes/eti660.h"
|
||||
|
||||
@ -23,25 +42,37 @@
|
||||
|
||||
READ8_MEMBER( eti660_state::pia_r )
|
||||
{
|
||||
int pia_offset = m_maincpu->get_memory_address() & 0x03;
|
||||
UINT8 pia_offset = m_maincpu->get_memory_address() & 0x03;
|
||||
|
||||
return m_pia->read(space, pia_offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( eti660_state::pia_w )
|
||||
{
|
||||
int pia_offset = m_maincpu->get_memory_address() & 0x03;
|
||||
UINT8 pia_offset = m_maincpu->get_memory_address() & 0x03;
|
||||
|
||||
// Some PIA hacks here, as mentioned in the ToDo.
|
||||
if (pia_offset == 1)
|
||||
{
|
||||
// switch color on when requested (test with Wipeout game)
|
||||
if (data == 0x2c)
|
||||
m_color_on = 1;
|
||||
// enable keyboard
|
||||
if (data == 0x20)
|
||||
data = 0x24;
|
||||
}
|
||||
|
||||
m_pia->write(space, pia_offset, data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( eti660_state::colorram_w )
|
||||
{
|
||||
int colorram_offset = m_maincpu->get_memory_address() & 0xff;
|
||||
offset = m_maincpu->get_memory_address() - 0xc80;
|
||||
|
||||
colorram_offset = ((colorram_offset & 0xf8) >> 1) || (colorram_offset & 0x03);
|
||||
UINT8 colorram_offset = (((offset & 0x1f0) >> 1) | (offset & 0x07));
|
||||
|
||||
m_color_ram[colorram_offset] = data;
|
||||
if (colorram_offset < 0xc0)
|
||||
m_color_ram[colorram_offset] = data;
|
||||
}
|
||||
|
||||
/* Memory Maps */
|
||||
@ -49,7 +80,9 @@ WRITE8_MEMBER( eti660_state::colorram_w )
|
||||
static ADDRESS_MAP_START( eti660_map, AS_PROGRAM, 8, eti660_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xfff)
|
||||
AM_RANGE(0x0000, 0x03ff) AM_ROM
|
||||
AM_RANGE(0x0400, 0x0fff) AM_RAM
|
||||
AM_RANGE(0x0400, 0x047f) AM_RAM
|
||||
AM_RANGE(0x0480, 0x05ff) AM_RAM AM_SHARE("videoram")
|
||||
AM_RANGE(0x0600, 0x0fff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( eti660_io_map, AS_IO, 8, eti660_state )
|
||||
@ -60,31 +93,34 @@ static ADDRESS_MAP_START( eti660_io_map, AS_IO, 8, eti660_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* Input Ports */
|
||||
|
||||
static INPUT_PORTS_START( eti660 )
|
||||
PORT_START("PA0")
|
||||
PORT_START("KEY.0")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("PA1")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
|
||||
|
||||
PORT_START("PA2")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5')
|
||||
|
||||
PORT_START("PA3")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
|
||||
PORT_START("KEY.1")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4')
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("KEY.2")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("KEY.3")
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("SPECIAL")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RESET") PORT_CODE(KEYCODE_R)
|
||||
@ -112,7 +148,13 @@ READ_LINE_MEMBER( eti660_state::gdata_r )
|
||||
|
||||
READ_LINE_MEMBER( eti660_state::clear_r )
|
||||
{
|
||||
return BIT(m_special->read(), 0);
|
||||
// A hack to make the machine reset itself on
|
||||
// boot, like the real one does.
|
||||
if (m_resetcnt < 0xffff)
|
||||
m_resetcnt++;
|
||||
if (m_resetcnt == 0xff00)
|
||||
return 0;
|
||||
return BIT(m_special->read(), 0); // R key
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER( eti660_state::ef2_r )
|
||||
@ -122,7 +164,7 @@ READ_LINE_MEMBER( eti660_state::ef2_r )
|
||||
|
||||
READ_LINE_MEMBER( eti660_state::ef4_r )
|
||||
{
|
||||
return BIT(m_special->read(), 1);
|
||||
return BIT(m_special->read(), 1); // S key
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( eti660_state::q_w )
|
||||
@ -139,9 +181,19 @@ WRITE_LINE_MEMBER( eti660_state::q_w )
|
||||
|
||||
WRITE8_MEMBER( eti660_state::dma_w )
|
||||
{
|
||||
UINT8 colorram_offset = ((offset & 0xf8) >> 1) | (offset & 0x03);
|
||||
offset -= 0x480;
|
||||
|
||||
m_color = m_color_ram[colorram_offset];
|
||||
m_color = 7;
|
||||
|
||||
if (m_color_on)
|
||||
{
|
||||
UINT8 colorram_offset = ((offset & 0x1f0) >> 1) | (offset & 0x07);
|
||||
|
||||
if (colorram_offset < 0xc0)
|
||||
m_color = m_color_ram[colorram_offset];
|
||||
}
|
||||
else
|
||||
m_color = m_p_videoram[offset] ? 7 : 0;
|
||||
|
||||
m_cti->con_w(0); // HACK
|
||||
m_cti->dma_w(space, offset, data);
|
||||
@ -166,14 +218,13 @@ READ8_MEMBER( eti660_state::pia_pa_r )
|
||||
|
||||
*/
|
||||
|
||||
UINT8 data = 0xf0;
|
||||
UINT8 i, data = 0xff;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
if BIT(m_keylatch, i)
|
||||
return m_io_keyboard[i]->read();
|
||||
|
||||
if (!BIT(m_keylatch, 0)) data &= m_pa0->read();
|
||||
if (!BIT(m_keylatch, 1)) data &= m_pa1->read();
|
||||
if (!BIT(m_keylatch, 2)) data &= m_pa2->read();
|
||||
if (!BIT(m_keylatch, 3)) data &= m_pa3->read();
|
||||
|
||||
return data | m_keylatch;
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( eti660_state::pia_pa_w )
|
||||
@ -193,7 +244,57 @@ WRITE8_MEMBER( eti660_state::pia_pa_w )
|
||||
|
||||
*/
|
||||
|
||||
m_keylatch = data & 0x0f;
|
||||
m_keylatch = data ^ 0xff;
|
||||
}
|
||||
|
||||
void eti660_state::machine_reset()
|
||||
{
|
||||
m_resetcnt = 0;
|
||||
m_color_on = 0;
|
||||
// fix for F3 soft reboot
|
||||
m_maincpu->set_state_int(COSMAC_R0, 0); // set R0 to start of rom
|
||||
m_maincpu->set_state_int(COSMAC_P, 0); // set R0 as the PC register
|
||||
}
|
||||
|
||||
void eti660_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_color_ram));
|
||||
}
|
||||
|
||||
QUICKLOAD_LOAD_MEMBER( eti660_state, eti660 )
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
int i;
|
||||
int quick_addr = 0x600;
|
||||
int quick_length;
|
||||
dynamic_buffer quick_data;
|
||||
int read_;
|
||||
int result = IMAGE_INIT_FAIL;
|
||||
|
||||
quick_length = image.length();
|
||||
quick_data.resize(quick_length);
|
||||
read_ = image.fread( &quick_data[0], quick_length);
|
||||
if (read_ != quick_length)
|
||||
{
|
||||
image.seterror(IMAGE_ERROR_INVALIDIMAGE, "Cannot read the file");
|
||||
image.message(" Cannot read the file");
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < quick_length; i++)
|
||||
if ((quick_addr + i) < 0x1000)
|
||||
space.write_byte(i + quick_addr, quick_data[i]);
|
||||
|
||||
/* display a message about the loaded quickload */
|
||||
if (strcmp(image.filetype(), "bin") == 0)
|
||||
image.message(" Quickload: size=%04X : start=%04X : end=%04X : Press 6 to start",quick_length,quick_addr,quick_addr+quick_length);
|
||||
else
|
||||
image.message(" Quickload: size=%04X : start=%04X : end=%04X : Press 8 to start",quick_length,quick_addr,quick_addr+quick_length);
|
||||
|
||||
result = IMAGE_INIT_PASS;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Machine Drivers */
|
||||
@ -224,6 +325,8 @@ static MACHINE_CONFIG_START( eti660, eti660_state )
|
||||
MCFG_DEVICE_ADD(MC6821_TAG, PIA6821, 0)
|
||||
MCFG_PIA_READPA_HANDLER(READ8(eti660_state, pia_pa_r))
|
||||
MCFG_PIA_WRITEPA_HANDLER(WRITE8(eti660_state, pia_pa_w))
|
||||
MCFG_PIA_IRQA_HANDLER(DEVWRITELINE(CDP1802_TAG, cosmac_device, int_w)) MCFG_DEVCB_INVERT
|
||||
MCFG_PIA_IRQB_HANDLER(DEVWRITELINE(CDP1802_TAG, cosmac_device, int_w)) MCFG_DEVCB_INVERT
|
||||
|
||||
MCFG_CASSETTE_ADD("cassette")
|
||||
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_MUTED)
|
||||
@ -231,6 +334,9 @@ static MACHINE_CONFIG_START( eti660, eti660_state )
|
||||
/* internal ram */
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("3K")
|
||||
|
||||
/* quickload */
|
||||
MCFG_QUICKLOAD_ADD("quickload", eti660_state, eti660, "bin,c8,ch8", 2)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/* ROMs */
|
||||
@ -240,5 +346,5 @@ ROM_START( eti660 )
|
||||
ROM_LOAD( "eti660.bin", 0x0000, 0x0400, CRC(811dfa62) SHA1(c0c4951e02f873f15560bdc3f35cdf3f99653922) )
|
||||
ROM_END
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1981, eti660, 0, 0, eti660, eti660, driver_device, 0, "Electronics Today International", "ETI-660", MACHINE_NOT_WORKING )
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1981, eti660, 0, 0, eti660, eti660, driver_device, 0, "Electronics Today International", "ETI-660", 0 )
|
||||
|
@ -1068,6 +1068,7 @@ static MACHINE_CONFIG_START( flstory, flstory_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(flstory_state, screen_update_flstory)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", flstory)
|
||||
MCFG_PALETTE_ADD("palette", 512)
|
||||
|
@ -2640,6 +2640,7 @@ static MACHINE_CONFIG_DERIVED( rockclim, galaxian )
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_SIZE(64*8, 32*8)
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -638,6 +638,7 @@ static MACHINE_CONFIG_START( looping, looping_state )
|
||||
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(looping_state, screen_update_looping)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT90)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", looping)
|
||||
|
||||
|
@ -769,6 +769,7 @@ static MACHINE_CONFIG_START( m63, m63_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(m63_state, screen_update_m63)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", m63)
|
||||
MCFG_PALETTE_ADD("palette", 256+4)
|
||||
|
@ -96,7 +96,7 @@ M84 - 2 PCB stack
|
||||
|
||||
M85 - Pound for Pound uses this, possibly just M84 with
|
||||
a modified sound section?
|
||||
- not Jamma, trackball input only
|
||||
- most Jamma inputs not connected, trackball only
|
||||
|
||||
|
||||
Year Board Protected?
|
||||
@ -105,28 +105,31 @@ Battle Chopper / Mr. Heli 1987 M72 Y
|
||||
Ninja Spirit 1988 M72 Y
|
||||
Image Fight 1988 M72 Y
|
||||
Legend of Hero Tonma 1989 M72 Y
|
||||
X Multiply 1989 M81 N
|
||||
X Multiply 1989 M72(1) Y
|
||||
Dragon Breed 1989 M81 N
|
||||
Dragon Breed 1989 M72 Y
|
||||
X Multiply (World) 1989 M81-A-B + M81-B-B N
|
||||
X Multiply (Japan) 1989 M72 Y
|
||||
Dragon Breed 1989 M81-A-B + M81-B-B N
|
||||
Dragon Breed (Japan?) 1989 M72 Y
|
||||
R-Type II 1989 M84-A-A + M84-B-A N
|
||||
Major Title 1990 M82-A-A + M82-B-A N
|
||||
Hammerin' Harry (World ver) 1990 M81? N
|
||||
Hammerin' Harry (World ver) 1990 M81-A-B + M81-B-B N
|
||||
Hammerin' H..(US)/ Daiku no Gensan 1990 M84-A-A + M84-C-A N
|
||||
Daiku no Gensan 1990 M72(3) Y
|
||||
Pound for Pound 1990 MM85-A-B + M85-B N
|
||||
Air Duel (World) 1990 M82 N
|
||||
Air Duel (Japan) 1990 M72? Y
|
||||
Cosmic Cop / 1991 M84 N
|
||||
Daiku no Gensan 1990 M72 Y
|
||||
Pound for Pound 1990 M85-A-B + M85-B N
|
||||
Air Duel (World) 1990 M82-A-A + M82-B-A N
|
||||
Air Duel (Japan) 1990 M72 Y
|
||||
Cosmic Cop / 1991 M84-D-B + M84-B-B N
|
||||
Gallop - Armed Police Unit 1991 M72 Y (sample playback only)
|
||||
Ken-Go / Lightning Swords 1991 M84-A-A + M84-B-B Encrypted
|
||||
Ken-Go / Lightning Swords 1991 M84-D-B + M84-B-B Encrypted
|
||||
|
||||
(1) different addressing PALs, so different memory map
|
||||
(3) normal M72 memory map, but IRQ vectors and sprite control as in X-Multiply
|
||||
|
||||
rtype2 has also been reported as running on M82, is it an official
|
||||
conversion or not? we've only seen originals verified as M84, same for
|
||||
Hammering Harry
|
||||
Rtype / Rtype 2 are often misreported as being M82 games, this is mostly
|
||||
due to the unofficial conversions that have become widespread, see:
|
||||
http://www.paulswan.me/arcade/m82-m72.htm (Rtype on M82, extensive wiremods)
|
||||
http://www.paulswan.me/arcade/m82-m84.htm (Rtype 2 on M82)
|
||||
these are supported as 'rtypem82b' and 'rtype2m82b' although the former
|
||||
still needs work because the wiremods change same of the behavior to be
|
||||
more like an M72 PCB than an M82
|
||||
|
||||
|
||||
TODO:
|
||||
- m82_gfx_ctrl_w is unknown, it seems to be used to disable rowscroll,
|
||||
@ -197,6 +200,38 @@ other supported games as well.
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
// bchopper doesn't like the proper IRQ controller hookup, title screen jumps around, as does ingame at times
|
||||
// like m92.c I think this is because we don't clear things at the right time.
|
||||
#define USE_HACKED_IRQS
|
||||
|
||||
#ifdef USE_HACKED_IRQS
|
||||
|
||||
#define M72_TRIGGER_IRQ0 m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_upd71059c->HACK_get_base_vector()+0 ); /* VBL interrupt */
|
||||
#define M72_TRIGGER_IRQ1 m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_upd71059c->HACK_get_base_vector()+1 ); /* Sprite buffer complete interrupt */
|
||||
#define M72_TRIGGER_IRQ2 m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_upd71059c->HACK_get_base_vector()+2 ); /* Raster interrupt */
|
||||
#define M72_TRIGGER_IRQ3 m_maincpu->set_input_line_and_vector(0, HOLD_LINE, m_upd71059c->HACK_get_base_vector()+3 ); /* Sound cpu->Main cpu interrupt */
|
||||
// not used due to HOLD LINE logic
|
||||
#define M72_CLEAR_IRQ0 ;
|
||||
#define M72_CLEAR_IRQ1 ;
|
||||
#define M72_CLEAR_IRQ2 ;
|
||||
#define M72_CLEAR_IRQ3 ;
|
||||
|
||||
#else
|
||||
|
||||
#define M72_TRIGGER_IRQ0 m_upd71059c->ir0_w(1);
|
||||
#define M72_TRIGGER_IRQ1 m_upd71059c->ir1_w(1);
|
||||
#define M72_TRIGGER_IRQ2 m_upd71059c->ir2_w(1);
|
||||
#define M72_TRIGGER_IRQ3 m_upd71059c->ir3_w(1);
|
||||
// not sure when these should happen, probably the source of our issues
|
||||
#define M72_CLEAR_IRQ0 m_upd71059c->ir0_w(0);
|
||||
#define M72_CLEAR_IRQ1 m_upd71059c->ir1_w(0);
|
||||
#define M72_CLEAR_IRQ2 m_upd71059c->ir2_w(0);
|
||||
#define M72_CLEAR_IRQ3 m_upd71059c->ir3_w(0);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
void m72_state::machine_start()
|
||||
{
|
||||
m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(m72_state::scanline_interrupt),this));
|
||||
@ -234,20 +269,22 @@ TIMER_CALLBACK_MEMBER(m72_state::scanline_interrupt)
|
||||
/* raster interrupt - visible area only? */
|
||||
if (scanline < 256 && scanline == m_raster_irq_position - 128)
|
||||
{
|
||||
m_screen->update_partial(scanline);
|
||||
m_upd71059c->ir2_w(1);
|
||||
M72_TRIGGER_IRQ2
|
||||
}
|
||||
else
|
||||
m_upd71059c->ir2_w(0);
|
||||
{
|
||||
M72_CLEAR_IRQ2
|
||||
}
|
||||
|
||||
/* VBLANK interrupt */
|
||||
if (scanline == 256)
|
||||
{
|
||||
m_screen->update_partial(scanline);
|
||||
m_upd71059c->ir0_w(1);
|
||||
M72_TRIGGER_IRQ0
|
||||
}
|
||||
else
|
||||
m_upd71059c->ir0_w(0);
|
||||
{
|
||||
M72_CLEAR_IRQ0
|
||||
}
|
||||
|
||||
/* adjust for next scanline */
|
||||
if (++scanline >= m_screen->height())
|
||||
@ -1854,8 +1891,9 @@ static MACHINE_CONFIG_START( m72_base, m72_state )
|
||||
MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
|
||||
MCFG_CPU_PROGRAM_MAP(m72_map)
|
||||
MCFG_CPU_IO_MAP(m72_portmap)
|
||||
#ifndef USE_HACKED_IRQS
|
||||
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb)
|
||||
|
||||
#endif
|
||||
MCFG_CPU_ADD("soundcpu",Z80, SOUND_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(sound_ram_map)
|
||||
MCFG_CPU_IO_MAP(sound_portmap)
|
||||
@ -1965,7 +2003,9 @@ static MACHINE_CONFIG_START( rtype2, m72_state )
|
||||
MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
|
||||
MCFG_CPU_PROGRAM_MAP(rtype2_map)
|
||||
MCFG_CPU_IO_MAP(m84_portmap)
|
||||
#ifndef USE_HACKED_IRQS
|
||||
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb)
|
||||
#endif
|
||||
|
||||
MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(sound_rom_map)
|
||||
@ -2008,7 +2048,9 @@ static MACHINE_CONFIG_START( cosmccop, m72_state )
|
||||
MCFG_CPU_ADD("maincpu", V35,MASTER_CLOCK/2)
|
||||
MCFG_CPU_PROGRAM_MAP(kengo_map)
|
||||
MCFG_CPU_IO_MAP(m84_v33_portmap)
|
||||
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb)
|
||||
//#ifndef USE_HACKED_IRQS
|
||||
// MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb)
|
||||
//#endif
|
||||
|
||||
MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(sound_rom_map)
|
||||
@ -2016,7 +2058,7 @@ static MACHINE_CONFIG_START( cosmccop, m72_state )
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(m72_state, nmi_line_pulse, 128*55) /* clocked by V1? (Vigilante) */
|
||||
/* IRQs are generated by main Z80 and YM2151 */
|
||||
|
||||
MCFG_PIC8259_ADD( "upd71059c", INPUTLINE("maincpu", 0), VCC, NULL)
|
||||
// MCFG_PIC8259_ADD( "upd71059c", INPUTLINE("maincpu", 0), VCC, NULL)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(m72_state,kengo)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(m72_state,kengo)
|
||||
@ -2055,8 +2097,9 @@ static MACHINE_CONFIG_START( m82, m72_state )
|
||||
MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
|
||||
MCFG_CPU_PROGRAM_MAP(m82_map)
|
||||
MCFG_CPU_IO_MAP(m82_portmap)
|
||||
#ifndef USE_HACKED_IRQS
|
||||
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb)
|
||||
|
||||
#endif
|
||||
MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(sound_rom_map)
|
||||
MCFG_CPU_IO_MAP(rtype2_sound_portmap)
|
||||
@ -2090,8 +2133,9 @@ static MACHINE_CONFIG_START( poundfor, m72_state )
|
||||
MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */
|
||||
MCFG_CPU_PROGRAM_MAP(rtype2_map)
|
||||
MCFG_CPU_IO_MAP(poundfor_portmap)
|
||||
#ifndef USE_HACKED_IRQS
|
||||
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("upd71059c", pic8259_device, inta_cb)
|
||||
|
||||
#endif
|
||||
MCFG_CPU_ADD("soundcpu", Z80, SOUND_CLOCK)
|
||||
MCFG_CPU_PROGRAM_MAP(sound_rom_map)
|
||||
MCFG_CPU_IO_MAP(poundfor_sound_portmap)
|
||||
@ -3291,6 +3335,76 @@ ROM_START( airduel )
|
||||
ROM_LOAD( "AD_(M82)_A-V0-D.IC12", 0x00000, 0x20000, CRC(339f474d) SHA1(a81bb52598a0e31b2ed6a538755237c5d14d1844) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( rtypem82b )
|
||||
ROM_REGION( 0x100000, "maincpu", 0 )
|
||||
ROM_LOAD16_BYTE( "rt_h0.bin", 0x00001, 0x20000, CRC(5fa5068b) SHA1(b33891d2e0ca7e52226c1318ad657ac6bc7d6df4) )
|
||||
ROM_LOAD16_BYTE( "rt_l0.bin", 0x00000, 0x20000, CRC(aee6fae8) SHA1(22645da3bfeb3a7517bdbf0829fd9d689ddc5368) )
|
||||
ROM_LOAD16_BYTE( "rt_h1.bin", 0x40001, 0x20000, CRC(76389df4) SHA1(20004dd1d058589bdd8ea93a66a6cdf93382c7cc) )
|
||||
ROM_RELOAD( 0xc0001, 0x20000 )
|
||||
ROM_LOAD16_BYTE( "rt_l1.bin", 0x40000, 0x20000, CRC(6af66a05) SHA1(3c686b4559e4e223e3b03533fe2b2fc4758f4e02) )
|
||||
ROM_RELOAD( 0xc0000, 0x20000 )
|
||||
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "rt_sp.bin", 0x00000, 0x10000, CRC(24fded65) SHA1(34e085ebfc6415a60b7440ac53c8ae7130b5e9d4) )
|
||||
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD( "rt_n0.bin", 0x00000, 0x20000, CRC(236e93ad) SHA1(a168c2f007a7469d8c1d834dc5247d99d13fd36d) ) /* sprites #1 */
|
||||
ROM_LOAD( "rt_n1.bin", 0x20000, 0x20000, CRC(94e0da50) SHA1(0e8aef07b2a4a60bb6faa9ea3d02869d30dff84c) )
|
||||
ROM_LOAD( "rt_n2.bin", 0x40000, 0x20000, CRC(6310dd0e) SHA1(4e4a50ef64cdfddea10d415a4b2d2490c1364074) )
|
||||
ROM_LOAD( "rt_n3.bin", 0x60000, 0x20000, CRC(dd9674fb) SHA1(925bbd64015ec9109a74ce80747bea2bfdb0cde6) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx2", 0 )
|
||||
ROM_LOAD( "rt_c0.bin", 0x00000, 0x40000, CRC(c2511272) SHA1(138dd131f827215f13ba0761cacc0f383b5e5a48) ) /* tiles */
|
||||
ROM_LOAD( "rt_c1.bin", 0x40000, 0x40000, CRC(6da33dae) SHA1(2b5f686c5c8e45a896ab115818066d03af767cb5) )
|
||||
ROM_LOAD( "rt_c2.bin", 0x80000, 0x40000, CRC(29322d6e) SHA1(b553d46f1270dcc4754800e65c21b5e418994fcd) )
|
||||
ROM_LOAD( "rt_c3.bin", 0xc0000, 0x40000, CRC(0ab3a8db) SHA1(7f4f5c18b5df0f5fdcb471db4e87c1be393aca92) )
|
||||
|
||||
ROM_REGION( 0x080000, "sprites2", 0 ) // leftover from Major Title
|
||||
ROM_LOAD( "mt_f0.bin", 0x00000, 0x20000, CRC(2d5e05d5) SHA1(18bdc9c561dbf0f91642161ca985d2154bd58b5d) ) /* sprites #2 */
|
||||
ROM_LOAD( "mt_f1.bin", 0x20000, 0x20000, CRC(c68cd65f) SHA1(8999b558b4af0f453ada9e4ef705163df96844e6) )
|
||||
ROM_LOAD( "mt_f2.bin", 0x40000, 0x20000, CRC(a71feb2d) SHA1(47e366b422772bed08ee4d1c338970687d6c3b4c) )
|
||||
ROM_LOAD( "mt_f3.bin", 0x60000, 0x20000, CRC(179f7562) SHA1(6d28b199daffc62e8fa9009878ac0bb976ccbb2a) )
|
||||
|
||||
ROM_REGION( 0x20000, "samples", 0 ) /* samples */ // leftover from Major Title
|
||||
ROM_LOAD( "mt_vo.bin", 0x00000, 0x20000, CRC(eb24bb2c) SHA1(9fca04fba0249e8213dd164eb6829e1a5acbee65) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( rtype2m82b )
|
||||
ROM_REGION( 0x100000, "maincpu", 0 )
|
||||
ROM_LOAD16_BYTE( "rt2_h0.bin", 0x00001, 0x20000, CRC(47639a78) SHA1(d7dd851fed96d46c850e5c8f24d9d1a081f6b297) )
|
||||
ROM_LOAD16_BYTE( "rt2_l0.bin", 0x00000, 0x20000, CRC(a1661cdf) SHA1(d209328d678fc2fc405bd20f5134bd85b4cd4802) )
|
||||
ROM_LOAD16_BYTE( "rt2_h1.bin", 0x40001, 0x20000, CRC(4b79840c) SHA1(6cf8c8cf4bcf5e2acdaa05b8dca2f2a969edc2c5) )
|
||||
ROM_RELOAD( 0xc0001, 0x20000 )
|
||||
ROM_LOAD16_BYTE( "rt2_l1.bin", 0x40000, 0x20000, CRC(6ab3ae42) SHA1(d3d7c35e1583b55cc668aa011471c3bf04a541af) )
|
||||
ROM_RELOAD( 0xc0000, 0x20000 )
|
||||
|
||||
ROM_REGION( 0x10000, "soundcpu", 0 )
|
||||
ROM_LOAD( "rt2_sp.bin", 0x00000, 0x10000, CRC(73ffecb4) SHA1(4795bf0d6263060c3d3759b659bdb189a4087600) )
|
||||
|
||||
ROM_REGION( 0x80000, "sprites", 0 )
|
||||
ROM_LOAD( "rt2_n0.bin", 0x00000, 0x20000, CRC(2cd8f913) SHA1(a53752b35da95b420dd29a09176d265d292b3938) ) /* sprites #1 */
|
||||
ROM_LOAD( "rt2_n1.bin", 0x20000, 0x20000, CRC(5033066d) SHA1(e125127f0610c63f9e59a585db547be5d49ed863) )
|
||||
ROM_LOAD( "rt2_n2.bin", 0x40000, 0x20000, CRC(ec3a0450) SHA1(632bdd397f1bc67f6970faf7d09ab8d911e105fe) )
|
||||
ROM_LOAD( "rt2_n3.bin", 0x60000, 0x20000, CRC(db6176fc) SHA1(1eaf72af0322490c98461aded202288e387caac1) )
|
||||
|
||||
ROM_REGION( 0x100000, "gfx2", 0 )
|
||||
ROM_LOAD( "rt2_c0.bin", 0x00000, 0x40000, CRC(f5bad5f2) SHA1(dc86b93f62e8947e3551f07e393e740e5dc43f5e)) /* tiles */
|
||||
ROM_LOAD( "rt2_c1.bin", 0x40000, 0x40000, CRC(71451778) SHA1(52ca7aa8522b988a19556313041450c767dad054) )
|
||||
ROM_LOAD( "rt2_c2.bin", 0x80000, 0x40000, CRC(c6b0c352) SHA1(eec4fa88c27815960106881e7ccb23e62556bf1c) )
|
||||
ROM_LOAD( "rt2_c3.bin", 0xc0000, 0x40000, CRC(6d530a32) SHA1(4e4100e5e5d88e65fb5494474d3692ecd8f44343) )
|
||||
|
||||
ROM_REGION( 0x080000, "sprites2", 0 ) // leftover from Major Title
|
||||
ROM_LOAD( "mt_f0.bin", 0x00000, 0x20000, CRC(2d5e05d5) SHA1(18bdc9c561dbf0f91642161ca985d2154bd58b5d) ) /* sprites #2 */
|
||||
ROM_LOAD( "mt_f1.bin", 0x20000, 0x20000, CRC(c68cd65f) SHA1(8999b558b4af0f453ada9e4ef705163df96844e6) )
|
||||
ROM_LOAD( "mt_f2.bin", 0x40000, 0x20000, CRC(a71feb2d) SHA1(47e366b422772bed08ee4d1c338970687d6c3b4c) )
|
||||
ROM_LOAD( "mt_f3.bin", 0x60000, 0x20000, CRC(179f7562) SHA1(6d28b199daffc62e8fa9009878ac0bb976ccbb2a) )
|
||||
|
||||
ROM_REGION( 0x20000, "samples", 0 ) /* samples */
|
||||
ROM_LOAD( "rt2_vo.bin", 0x00000, 0x20000, CRC(637172d5) SHA1(9dd0dc409306287238826bf301e2a7a12d6cd9ce) )
|
||||
ROM_END
|
||||
|
||||
|
||||
/*****************************
|
||||
M84 sets
|
||||
******************************/
|
||||
@ -3660,6 +3774,8 @@ ROM_END
|
||||
// the program roms failing their tests. This is why we still have simulation code for many games
|
||||
// despite having Japanese version MCU roms for several of them. See notes next to the sets
|
||||
|
||||
/* M72 */
|
||||
|
||||
GAME( 1987, rtype, 0, rtype, rtype, driver_device, 0, ROT0, "Irem", "R-Type (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, rtypej, rtype, rtype, rtype, driver_device, 0, ROT0, "Irem", "R-Type (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1987, rtypejp, rtype, rtype, rtypep, driver_device, 0, ROT0, "Irem", "R-Type (Japan prototype)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
@ -3678,37 +3794,52 @@ GAME( 1988, imgfightj, imgfight, m72_8751, imgfight, m72_state, m72_875
|
||||
GAME( 1989, loht, 0, m72, loht, m72_state, loht, ROT0, "Irem", "Legend of Hero Tonma", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // fails rom check if used with Japan MCU rom (World version?)
|
||||
GAME( 1989, lohtj, loht, m72_8751, loht, m72_state, m72_8751, ROT0, "Irem", "Legend of Hero Tonma (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // waits for japan warning screen, works with our mcu dump (Japan Version)
|
||||
GAME( 1989, lohtb2, loht, m72_8751, loht, m72_state, m72_8751, ROT0, "bootleg", "Legend of Hero Tonma (Japan, bootleg with i8751)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // works like above, mcu code is the same as the real code, probably just an alt revision on a bootleg board
|
||||
GAME( 1989, lohtb, loht, m72, loht, driver_device, 0, ROT0, "bootleg", "Legend of Hero Tonma (unprotected bootleg)", MACHINE_NOT_WORKING| MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1989, xmultipl, 0, m81_xmultipl,m81_xmultipl,driver_device,0, ROT0, "Irem", "X Multiply (World, M81)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1989, xmultiplm72, xmultipl, m72_xmultipl,xmultipl, m72_state, m72_8751, ROT0, "Irem", "X Multiply (Japan, M72)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1989, dbreed, 0, m81_dbreed, m81_dbreed,driver_device,0, ROT0, "Irem", "Dragon Breed (M81 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1989, dbreedm72, dbreed, m72_dbreed, dbreed, m72_state, dbreedm72, ROT0, "Irem", "Dragon Breed (M72 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // probably Japan version
|
||||
|
||||
GAME( 1991, gallop, cosmccop, m72, gallop, m72_state, gallop, ROT0, "Irem", "Gallop - Armed Police Unit (Japan, M72)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1990, airduelm72, airduel, m72, airduel, m72_state, airduelm72, ROT270, "Irem", "Air Duel (Japan, M72)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1990, dkgensanm72, hharry, m72, hharry, m72_state, dkgenm72, ROT0, "Irem", "Daiku no Gensan (Japan, M72)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
/* M81 */
|
||||
GAME( 1989, xmultipl, 0, m81_xmultipl,m81_xmultipl,driver_device,0, ROT0, "Irem", "X Multiply (World, M81)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1989, dbreed, 0, m81_dbreed, m81_dbreed,driver_device,0, ROT0, "Irem", "Dragon Breed (M81 PCB version)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1990, hharry, 0, m81_hharry, m81_hharry,driver_device,0, ROT0, "Irem", "Hammerin' Harry (World, M81)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
/* M82 */
|
||||
GAME( 1990, majtitle, 0, m82, rtype2, driver_device, 0, ROT0, "Irem", "Major Title (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // M82-A-A + M82-B-A
|
||||
GAME( 1990, majtitlej, majtitle, m82, rtype2, driver_device, 0, ROT0, "Irem", "Major Title (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // ^
|
||||
|
||||
GAME( 1990, airduel, 0, m82, airduel, driver_device, 0, ROT270, "Irem", "Air Duel (World, M82-A-A + M82-B-A)", MACHINE_SUPPORTS_SAVE ) // Major Title conversion
|
||||
|
||||
GAME( 2009, rtypem82b, rtype, m82, rtype, driver_device, 0, ROT0, "bootleg", "R-Type (Japan, bootleg Major Title conversion, M82)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // unofficial conversion of Major Title, extensive wiremods, made in 2009 by Paul Swan
|
||||
|
||||
GAME( 1997, rtype2m82b, rtype2, m82, rtype2, driver_device, 0, ROT0, "bootleg", "R-Type II (Japan, bootleg Major Title conversion, M82)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // made in 1997 by Chris Hardy
|
||||
|
||||
/* M84 */
|
||||
|
||||
GAME( 1990, hharryu, hharry, hharryu, hharry, driver_device, 0, ROT0, "Irem America", "Hammerin' Harry (US, M84)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1990, dkgensan, hharry, hharryu, hharry, driver_device, 0, ROT0, "Irem", "Daiku no Gensan (Japan, M84)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1989, rtype2, 0, rtype2, rtype2, driver_device, 0, ROT0, "Irem", "R-Type II", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1989, rtype2j, rtype2, rtype2, rtype2, driver_device, 0, ROT0, "Irem", "R-Type II (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1989, rtype2jc, rtype2, rtype2, rtype2, driver_device, 0, ROT0, "Irem", "R-Type II (Japan, revision C)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1990, majtitle, 0, m82, rtype2, driver_device, 0, ROT0, "Irem", "Major Title (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // M82-A-A + M82-B-A
|
||||
GAME( 1990, majtitlej, majtitle, m82, rtype2, driver_device, 0, ROT0, "Irem", "Major Title (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // ^
|
||||
GAME( 1991, cosmccop, 0, cosmccop, gallop, driver_device, 0, ROT0, "Irem", "Cosmic Cop (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1990, hharry, 0, m81_hharry, m81_hharry,driver_device,0, ROT0, "Irem", "Hammerin' Harry (World, M81)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1990, hharryu, hharry, hharryu, hharry, driver_device, 0, ROT0, "Irem America", "Hammerin' Harry (US, M84)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1990, dkgensan, hharry, hharryu, hharry, driver_device, 0, ROT0, "Irem", "Daiku no Gensan (Japan, M84)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1990, dkgensanm72, hharry, m72, hharry, m72_state, dkgenm72, ROT0, "Irem", "Daiku no Gensan (Japan, M72)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1991, ltswords, 0, kengo, kengo, driver_device, 0, ROT0, "Irem", "Lightning Swords", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1991, kengo, ltswords, kengo, kengo, driver_device, 0, ROT0, "Irem", "Ken-Go (set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1991, kengoa, ltswords, kengo, kengo, driver_device, 0, ROT0, "Irem", "Ken-Go (set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // has 'for use in Japan' message, above set doesn't
|
||||
|
||||
/* M85 */
|
||||
|
||||
GAME( 1990, poundfor, 0, poundfor, poundfor, driver_device, 0, ROT270, "Irem", "Pound for Pound (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // M85-A-B / M85-B
|
||||
GAME( 1990, poundforj, poundfor, poundfor, poundfor, driver_device, 0, ROT270, "Irem", "Pound for Pound (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // ^
|
||||
GAME( 1990, poundforu, poundfor, poundfor, poundfor, driver_device, 0, ROT270, "Irem America", "Pound for Pound (US)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // ^
|
||||
|
||||
GAME( 1990, airduel, 0, m82, airduel, driver_device, 0, ROT270, "Irem", "Air Duel (World, M82-A-A + M82-B-A)", MACHINE_SUPPORTS_SAVE ) // Major Title conversion
|
||||
GAME( 1990, airduelm72, airduel, m72, airduel, m72_state, airduelm72, ROT270, "Irem", "Air Duel (Japan, M72)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1991, cosmccop, 0, cosmccop, gallop, driver_device, 0, ROT0, "Irem", "Cosmic Cop (World)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1991, gallop, cosmccop, m72, gallop, m72_state, gallop, ROT0, "Irem", "Gallop - Armed Police Unit (Japan, M72)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1991, ltswords, 0, kengo, kengo, driver_device, 0, ROT0, "Irem", "Lightning Swords", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1991, kengo, ltswords, kengo, kengo, driver_device, 0, ROT0, "Irem", "Ken-Go (set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) // M84-B-B ?
|
||||
GAME( 1991, kengoa, ltswords, kengo, kengo, driver_device, 0, ROT0, "Irem", "Ken-Go (set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
/* bootlegs, unique hw */
|
||||
GAME( 1989, lohtb, loht, m72, loht, driver_device, 0, ROT0, "bootleg", "Legend of Hero Tonma (unprotected bootleg)", MACHINE_NOT_WORKING| MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -578,6 +578,8 @@ static MACHINE_CONFIG_START( mariobl, mario_state )
|
||||
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(mario_state, screen_update_mariobl)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", mariobl)
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
MCFG_PALETTE_INIT_OWNER(mario_state, mario)
|
||||
|
@ -1086,6 +1086,11 @@ static MACHINE_CONFIG_START( hopmappy, namcos86_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( skykiddx, hopmappy )
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( roishtar, hopmappy )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -1666,7 +1671,7 @@ DRIVER_INIT_MEMBER(namcos86_state,namco86)
|
||||
|
||||
|
||||
GAME( 1986, skykiddx, 0, hopmappy, skykiddx, namcos86_state, namco86, ROT180, "Namco", "Sky Kid Deluxe (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, skykiddxo,skykiddx, hopmappy, skykiddx, namcos86_state, namco86, ROT180, "Namco", "Sky Kid Deluxe (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1986, skykiddxo,skykiddx, skykiddx, skykiddx, namcos86_state, namco86, ROT180, "Namco", "Sky Kid Deluxe (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1986, hopmappy, 0, hopmappy, hopmappy, namcos86_state, namco86, ROT0, "Namco", "Hopping Mappy", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
|
@ -2894,6 +2894,9 @@ static MACHINE_CONFIG_DERIVED( barline, mbmj_h12bit )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35)
|
||||
|
||||
MCFG_DEVICE_REMOVE("dac")
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( mbmj_p16bit, NBMJDRV_65536 )
|
||||
|
@ -2747,6 +2747,9 @@ static MACHINE_CONFIG_DERIVED( hnxmasev, maiko )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(hnxmasev_map)
|
||||
MCFG_CPU_IO_MAP(maiko_io_map)
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( hnageman, maiko )
|
||||
@ -2755,6 +2758,9 @@ static MACHINE_CONFIG_DERIVED( hnageman, maiko )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(hnageman_map)
|
||||
MCFG_CPU_IO_MAP(maiko_io_map)
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( scandal, hanamomo )
|
||||
|
@ -1389,6 +1389,7 @@ static MACHINE_CONFIG_START( nbmjdrv1, nbmj8991_state ) // galkoku
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 240-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(nbmj8991_state, screen_update_type1)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
|
||||
@ -1425,6 +1426,7 @@ static MACHINE_CONFIG_START( nbmjdrv2, nbmj8991_state ) // pstadium
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 240-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(nbmj8991_state, screen_update_type2)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_PALETTE_ADD("palette", 256)
|
||||
|
||||
@ -1625,6 +1627,9 @@ static MACHINE_CONFIG_DERIVED( av2mj1bb, nbmjdrv2 )
|
||||
|
||||
MCFG_DEVICE_MODIFY("nb1413m3")
|
||||
MCFG_NB1413M3_TYPE( NB1413M3_AV2MJ1BB )
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -1637,6 +1642,9 @@ static MACHINE_CONFIG_DERIVED( av2mj2rg, nbmjdrv2 )
|
||||
|
||||
MCFG_DEVICE_MODIFY("nb1413m3")
|
||||
MCFG_NB1413M3_TYPE( NB1413M3_AV2MJ2RG )
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -913,6 +913,9 @@ static MACHINE_CONFIG_DERIVED( darkplnt, type2 )
|
||||
|
||||
MCFG_PALETTE_INIT_OWNER(scobra_state,darkplnt)
|
||||
MCFG_VIDEO_START_OVERRIDE(scobra_state,darkplnt)
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -454,6 +454,7 @@ static MACHINE_CONFIG_START( skykid, skykid_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 0*8, 28*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(skykid_state, screen_update_skykid)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", skykid)
|
||||
MCFG_PALETTE_ADD("palette", 64*4+128*4+64*8)
|
||||
|
@ -293,6 +293,7 @@ static MACHINE_CONFIG_START( speedspn, speedspn_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(8*8, 56*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(speedspn_state, screen_update)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", speedspn)
|
||||
MCFG_PALETTE_ADD("palette", 0x400)
|
||||
|
@ -412,6 +412,7 @@ static MACHINE_CONFIG_START( sprint4, sprint4_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(sprint4_state, screen_update_sprint4)
|
||||
MCFG_SCREEN_VBLANK_DRIVER(sprint4_state, screen_eof_sprint4)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", sprint4)
|
||||
MCFG_PALETTE_ADD("palette", 10)
|
||||
|
@ -433,6 +433,7 @@ static MACHINE_CONFIG_START( supertnk, supertnk_state )
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
MCFG_SCREEN_UPDATE_DRIVER(supertnk_state, screen_update_supertnk)
|
||||
MCFG_SCREEN_ORIENTATION(ROT90)
|
||||
|
||||
/* audio hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
@ -960,6 +960,7 @@ static MACHINE_CONFIG_START( ballbros, taitox_state )
|
||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1)
|
||||
MCFG_SCREEN_UPDATE_DRIVER(taitox_state, screen_update_seta_no_layers)
|
||||
MCFG_SCREEN_PALETTE("palette")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
|
||||
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ballbros)
|
||||
MCFG_PALETTE_ADD("palette", 2048)
|
||||
|
@ -1797,6 +1797,10 @@ static MACHINE_CONFIG_START( nomcu, taitosj_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( nomcu180, nomcu )
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/* same as above, but with additional 68705 MCU */
|
||||
static MACHINE_CONFIG_DERIVED( mcu, nomcu )
|
||||
@ -2754,13 +2758,13 @@ DRIVER_INIT_MEMBER(taitosj_state,junglhbr)
|
||||
|
||||
GAME( 1981, spaceskr, 0, nomcu, spaceskr, taitosj_state, taitosj, ROT0, "Taito Corporation", "Space Seeker", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, spacecr, 0, nomcu, spacecr, taitosj_state, spacecr, ROT90, "Taito Corporation", "Space Cruiser", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, junglek, 0, nomcu, junglek, taitosj_state, taitosj, ROT180, "Taito Corporation", "Jungle King (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, junglekas,junglek, nomcu, junglek, taitosj_state, taitosj, ROT180, "Taito Corporation", "Jungle King (alternate sound)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, junglekj2,junglek, nomcu, junglek, taitosj_state, taitosj, ROT180, "Taito Corporation", "Jungle King (Japan, earlier)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, jungleh, junglek, nomcu, junglek, taitosj_state, taitosj, ROT180, "Taito America Corporation", "Jungle Hunt (US)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1983, junglehbr,junglek, nomcu, junglek, taitosj_state, junglhbr,ROT180, "Taito do Brasil", "Jungle Hunt (Brazil)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, piratpet, junglek, nomcu, piratpet, taitosj_state, taitosj, ROT180, "Taito America Corporation", "Pirate Pete", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, jungleby, junglek, nomcu, junglek, taitosj_state, taitosj, ROT180, "bootleg", "Jungle Boy (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, junglek, 0, nomcu180, junglek, taitosj_state, taitosj, ROT180, "Taito Corporation", "Jungle King (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, junglekas,junglek, nomcu180, junglek, taitosj_state, taitosj, ROT180, "Taito Corporation", "Jungle King (alternate sound)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, junglekj2,junglek, nomcu180, junglek, taitosj_state, taitosj, ROT180, "Taito Corporation", "Jungle King (Japan, earlier)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, jungleh, junglek, nomcu180, junglek, taitosj_state, taitosj, ROT180, "Taito America Corporation", "Jungle Hunt (US)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1983, junglehbr,junglek, nomcu180, junglek, taitosj_state, junglhbr,ROT180, "Taito do Brasil", "Jungle Hunt (Brazil)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, piratpet, junglek, nomcu180, piratpet, taitosj_state, taitosj, ROT180, "Taito America Corporation", "Pirate Pete", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, jungleby, junglek, nomcu180, junglek, taitosj_state, taitosj, ROT180, "bootleg", "Jungle Boy (bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, alpine, 0, nomcu, alpine, taitosj_state, alpine, ROT270, "Taito Corporation", "Alpine Ski (set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, alpinea, alpine, nomcu, alpinea, taitosj_state, alpinea, ROT270, "Taito Corporation", "Alpine Ski (set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, timetunl, 0, nomcu, timetunl, taitosj_state, taitosj, ROT0, "Taito Corporation", "Time Tunnel", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -30,67 +30,55 @@
|
||||
|
||||
/* Memory Banking */
|
||||
|
||||
READ8_MEMBER( tiki100_state::gfxram_r )
|
||||
READ8_MEMBER( tiki100_state::read )
|
||||
{
|
||||
UINT16 addr = (offset + (m_scroll << 7)) & TIKI100_VIDEORAM_MASK;
|
||||
int mdis = 1;
|
||||
offs_t prom_addr = mdis << 5 | m_vire << 4 | m_rome << 3 | (offset >> 13);
|
||||
UINT8 prom = m_prom->base()[prom_addr] ^ 0xff;
|
||||
|
||||
return m_video_ram[addr];
|
||||
}
|
||||
UINT8 data = 0xff;
|
||||
|
||||
WRITE8_MEMBER( tiki100_state::gfxram_w )
|
||||
{
|
||||
UINT16 addr = (offset + (m_scroll << 7)) & TIKI100_VIDEORAM_MASK;
|
||||
|
||||
m_video_ram[addr] = data;
|
||||
}
|
||||
|
||||
void tiki100_state::bankswitch()
|
||||
{
|
||||
address_space &program = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
if (m_vire)
|
||||
if (prom & ROM0)
|
||||
{
|
||||
if (!m_rome)
|
||||
{
|
||||
/* reserved */
|
||||
program.unmap_readwrite(0x0000, 0xffff);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* GFXRAM, GFXRAM, RAM */
|
||||
program.install_readwrite_handler(0x0000, 0x7fff, READ8_DELEGATE(tiki100_state, gfxram_r), WRITE8_DELEGATE(tiki100_state, gfxram_w));
|
||||
program.install_readwrite_bank(0x8000, 0xffff, "bank3");
|
||||
|
||||
membank("bank1")->set_entry(BANK_VIDEO_RAM);
|
||||
membank("bank2")->set_entry(BANK_VIDEO_RAM);
|
||||
membank("bank3")->set_entry(BANK_RAM);
|
||||
}
|
||||
data = m_rom->base()[offset & 0x3fff];
|
||||
}
|
||||
else
|
||||
|
||||
if (prom & ROM1)
|
||||
{
|
||||
if (!m_rome)
|
||||
{
|
||||
/* ROM, RAM, RAM */
|
||||
program.install_read_bank(0x0000, 0x3fff, "bank1");
|
||||
program.unmap_write(0x0000, 0x3fff);
|
||||
program.install_readwrite_bank(0x4000, 0x7fff, "bank2");
|
||||
program.install_readwrite_bank(0x8000, 0xffff, "bank3");
|
||||
data = m_rom->base()[0x2000 | (offset & 0x3fff)];
|
||||
}
|
||||
|
||||
membank("bank1")->set_entry(BANK_ROM);
|
||||
membank("bank2")->set_entry(BANK_RAM);
|
||||
membank("bank3")->set_entry(BANK_RAM);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* RAM, RAM, RAM */
|
||||
program.install_readwrite_bank(0x0000, 0x3fff, "bank1");
|
||||
program.install_readwrite_bank(0x4000, 0x7fff, "bank2");
|
||||
program.install_readwrite_bank(0x8000, 0xffff, "bank3");
|
||||
if (prom & VIR)
|
||||
{
|
||||
UINT16 addr = (offset + (m_scroll << 7)) & TIKI100_VIDEORAM_MASK;
|
||||
|
||||
membank("bank1")->set_entry(BANK_RAM);
|
||||
membank("bank2")->set_entry(BANK_RAM);
|
||||
membank("bank3")->set_entry(BANK_RAM);
|
||||
}
|
||||
data = m_video_ram[addr];
|
||||
}
|
||||
|
||||
if (prom & RAM)
|
||||
{
|
||||
data = m_ram->pointer()[offset];
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( tiki100_state::write )
|
||||
{
|
||||
int mdis = 1;
|
||||
offs_t prom_addr = mdis << 5 | m_vire << 4 | m_rome << 3 | (offset >> 13);
|
||||
UINT8 prom = m_prom->base()[prom_addr] ^ 0xff;
|
||||
|
||||
if (prom & VIR)
|
||||
{
|
||||
UINT16 addr = (offset + (m_scroll << 7)) & TIKI100_VIDEORAM_MASK;
|
||||
|
||||
m_video_ram[addr] = data;
|
||||
}
|
||||
|
||||
if (prom & RAM)
|
||||
{
|
||||
m_ram->pointer()[offset] = data;
|
||||
}
|
||||
}
|
||||
|
||||
@ -215,17 +203,13 @@ WRITE8_MEMBER( tiki100_state::system_w )
|
||||
/* bankswitch */
|
||||
m_rome = BIT(data, 2);
|
||||
m_vire = BIT(data, 3);
|
||||
|
||||
bankswitch();
|
||||
}
|
||||
|
||||
/* Memory Maps */
|
||||
|
||||
static ADDRESS_MAP_START( tiki100_mem, AS_PROGRAM, 8, tiki100_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x3fff) AM_RAMBANK("bank1")
|
||||
AM_RANGE(0x4000, 0x7fff) AM_RAMBANK("bank2")
|
||||
AM_RANGE(0x8000, 0xffff) AM_RAMBANK("bank3")
|
||||
AM_RANGE(0x0000, 0xffff) AM_READWRITE(read, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( tiki100_io, AS_IO, 8, tiki100_state )
|
||||
@ -601,20 +585,6 @@ void tiki100_state::machine_start()
|
||||
/* allocate video RAM */
|
||||
m_video_ram.allocate(TIKI100_VIDEORAM_SIZE);
|
||||
|
||||
/* setup memory banking */
|
||||
UINT8 *ram = m_ram->pointer();
|
||||
|
||||
membank("bank1")->configure_entry(BANK_ROM, m_rom->base());
|
||||
membank("bank1")->configure_entry(BANK_RAM, ram);
|
||||
membank("bank1")->configure_entry(BANK_VIDEO_RAM, m_video_ram);
|
||||
|
||||
membank("bank2")->configure_entry(BANK_RAM, ram + 0x4000);
|
||||
membank("bank2")->configure_entry(BANK_VIDEO_RAM, m_video_ram + 0x4000);
|
||||
|
||||
membank("bank3")->configure_entry(BANK_RAM, ram + 0x8000);
|
||||
|
||||
bankswitch();
|
||||
|
||||
/* register for state saving */
|
||||
save_item(NAME(m_rome));
|
||||
save_item(NAME(m_vire));
|
||||
@ -718,15 +688,15 @@ MACHINE_CONFIG_END
|
||||
/* ROMs */
|
||||
|
||||
ROM_START( kontiki )
|
||||
ROM_REGION( 0x10000, Z80_TAG, ROMREGION_ERASEFF )
|
||||
ROM_REGION( 0x4000, Z80_TAG, ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "tikirom-1.30.u10", 0x0000, 0x2000, CRC(c482dcaf) SHA1(d140706bb7fc8b1fbb37180d98921f5bdda73cf9) )
|
||||
|
||||
ROM_REGION( 0x100, "proms", 0 )
|
||||
ROM_LOAD( "63ls140.u4", 0x000, 0x100, NO_DUMP )
|
||||
ROM_REGION( 0x100, "u4", 0 )
|
||||
ROM_LOAD( "53ls140.u4", 0x000, 0x100, CRC(894b756f) SHA1(429e10de0e0e749246895801b18186ff514c12bc) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( tiki100 )
|
||||
ROM_REGION( 0x10000, Z80_TAG, ROMREGION_ERASEFF )
|
||||
ROM_REGION( 0x4000, Z80_TAG, ROMREGION_ERASEFF )
|
||||
ROM_DEFAULT_BIOS( "v203w" )
|
||||
|
||||
ROM_SYSTEM_BIOS( 0, "v135", "TIKI ROM v1.35" )
|
||||
@ -734,8 +704,14 @@ ROM_START( tiki100 )
|
||||
ROM_SYSTEM_BIOS( 1, "v203w", "TIKI ROM v2.03 W" )
|
||||
ROMX_LOAD( "tikirom-2.03w.u10", 0x0000, 0x2000, CRC(79662476) SHA1(96336633ecaf1b2190c36c43295ac9f785d1f83a), ROM_BIOS(2) )
|
||||
|
||||
ROM_REGION( 0x100, "proms", 0 )
|
||||
ROM_LOAD( "63ls140.u4", 0x000, 0x100, NO_DUMP )
|
||||
ROM_REGION( 0x100, "u4", 0 )
|
||||
ROM_LOAD( "53ls140.u4", 0x000, 0x100, CRC(894b756f) SHA1(429e10de0e0e749246895801b18186ff514c12bc) )
|
||||
|
||||
ROM_REGION( 0x1000, "8088", 0 )
|
||||
ROM_LOAD( "boot 1.0.u3", 0x0000, 0x1000, CRC(436974aa) SHA1(837087b3ab982d047e4f15799fef3daa37dd6c01) )
|
||||
|
||||
ROM_REGION( 0x100, "8088_proms", 0 )
|
||||
ROM_LOAD( "53ls140.u26", 0x000, 0x100, CRC(fc5902e1) SHA1(afb9cb54ab6fc449e7544ddb3cbebc3770c4f937) )
|
||||
ROM_END
|
||||
|
||||
/* System Drivers */
|
||||
|
@ -409,6 +409,8 @@ MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( tokic, toki )
|
||||
SEIBU_SOUND_SYSTEM_ENCRYPTED_CUSTOM()
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_START( tokib, toki_state )
|
||||
|
@ -589,6 +589,10 @@ static MACHINE_CONFIG_START( zodiack, zodiack_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( bounty, zodiack )
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_ORIENTATION(ROT180)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
@ -711,4 +715,4 @@ GAME( 1983, zodiack, 0, zodiack, zodiack, zodiack_state, zodiack, ROT270, "Orc
|
||||
GAME( 1983, dogfight, 0, zodiack, dogfight, zodiack_state, zodiack, ROT270, "Orca / Thunderbolt", "Dog Fight (Thunderbolt)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE ) /* bullet color needs to be verified */
|
||||
GAME( 1982, moguchan, 0, zodiack, moguchan, zodiack_state, percuss, ROT270, "Orca (Eastern Commerce Inc. license)", "Mogu Chan (bootleg?)", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE ) /* license copyright taken from ROM string at $0b5c */
|
||||
GAME( 1981, percuss, 0, zodiack, percuss, zodiack_state, percuss, ROT270, "Orca", "The Percussor", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bounty, 0, zodiack, bounty, zodiack_state, percuss, ROT180, "Orca", "The Bounty", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1982, bounty, 0, bounty, bounty, zodiack_state, percuss, ROT180, "Orca", "The Bounty", MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -669,6 +669,6 @@ public:
|
||||
NV2A_COLOR_FORMAT_X1A7R8G8B8 = 0x0007,
|
||||
NV2A_COLOR_FORMAT_A8R8G8B8 = 0x0008,
|
||||
NV2A_COLOR_FORMAT_B8 = 0x0009,
|
||||
NV2A_COLOR_FORMAT_G8B8 = 0x000a,
|
||||
NV2A_COLOR_FORMAT_G8B8 = 0x000a
|
||||
};
|
||||
};
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "emu.h"
|
||||
#include "cpu/cosmac/cosmac.h"
|
||||
#include "imagedev/cassette.h"
|
||||
#include "imagedev/snapquik.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/6821pia.h"
|
||||
#include "machine/rescap.h"
|
||||
@ -28,28 +29,16 @@ class eti660_state : public driver_device
|
||||
{
|
||||
public:
|
||||
eti660_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, CDP1802_TAG),
|
||||
m_cti(*this, CDP1864_TAG),
|
||||
m_pia(*this, MC6821_TAG),
|
||||
m_cassette(*this, "cassette"),
|
||||
m_pa0(*this, "PA0"),
|
||||
m_pa1(*this, "PA1"),
|
||||
m_pa2(*this, "PA2"),
|
||||
m_pa3(*this, "PA3"),
|
||||
m_special(*this, "SPECIAL")
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_p_videoram(*this, "videoram")
|
||||
, m_maincpu(*this, CDP1802_TAG)
|
||||
, m_cti(*this, CDP1864_TAG)
|
||||
, m_pia(*this, MC6821_TAG)
|
||||
, m_cassette(*this, "cassette")
|
||||
, m_io_keyboard(*this, "KEY")
|
||||
, m_special(*this, "SPECIAL")
|
||||
{ }
|
||||
|
||||
required_device<cosmac_device> m_maincpu;
|
||||
required_device<cdp1864_device> m_cti;
|
||||
required_device<pia6821_device> m_pia;
|
||||
required_device<cassette_image_device> m_cassette;
|
||||
required_ioport m_pa0;
|
||||
required_ioport m_pa1;
|
||||
required_ioport m_pa2;
|
||||
required_ioport m_pa3;
|
||||
required_ioport m_special;
|
||||
|
||||
DECLARE_READ8_MEMBER( pia_r );
|
||||
DECLARE_WRITE8_MEMBER( pia_w );
|
||||
DECLARE_WRITE8_MEMBER( colorram_w );
|
||||
@ -63,13 +52,28 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( dma_w );
|
||||
DECLARE_READ8_MEMBER( pia_pa_r );
|
||||
DECLARE_WRITE8_MEMBER( pia_pa_w );
|
||||
DECLARE_QUICKLOAD_LOAD_MEMBER( eti660 );
|
||||
required_shared_ptr<UINT8> m_p_videoram;
|
||||
|
||||
private:
|
||||
required_device<cosmac_device> m_maincpu;
|
||||
required_device<cdp1864_device> m_cti;
|
||||
required_device<pia6821_device> m_pia;
|
||||
required_device<cassette_image_device> m_cassette;
|
||||
required_ioport_array<4> m_io_keyboard;
|
||||
required_ioport m_special;
|
||||
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
UINT16 m_resetcnt;
|
||||
|
||||
/* keyboard state */
|
||||
UINT8 m_keylatch;
|
||||
|
||||
/* video state */
|
||||
UINT8 m_color_ram[0x100];
|
||||
UINT8 m_color_ram[0xc0];
|
||||
UINT8 m_color;
|
||||
bool m_color_on;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -41,8 +41,8 @@
|
||||
class tiki100_state : public driver_device
|
||||
{
|
||||
public:
|
||||
tiki100_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
tiki100_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, Z80_TAG),
|
||||
m_ctc(*this, Z80CTC_TAG),
|
||||
m_fdc(*this, FD1797_TAG),
|
||||
@ -54,6 +54,7 @@ public:
|
||||
m_cassette(*this, CASSETTE_TAG),
|
||||
m_centronics(*this, CENTRONICS_TAG),
|
||||
m_rom(*this, Z80_TAG),
|
||||
m_prom(*this, "u4"),
|
||||
m_video_ram(*this, "video_ram"),
|
||||
m_y1(*this, "Y1"),
|
||||
m_y2(*this, "Y2"),
|
||||
@ -67,7 +68,9 @@ public:
|
||||
m_y10(*this, "Y10"),
|
||||
m_y11(*this, "Y11"),
|
||||
m_y12(*this, "Y12"),
|
||||
m_palette(*this, "palette")
|
||||
m_palette(*this, "palette"),
|
||||
m_rome(1),
|
||||
m_vire(1)
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
@ -81,6 +84,7 @@ public:
|
||||
required_device<cassette_image_device> m_cassette;
|
||||
required_device<centronics_device> m_centronics;
|
||||
required_memory_region m_rom;
|
||||
required_memory_region m_prom;
|
||||
optional_shared_ptr<UINT8> m_video_ram;
|
||||
required_ioport m_y1;
|
||||
required_ioport m_y2;
|
||||
@ -101,8 +105,9 @@ public:
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
DECLARE_READ8_MEMBER( gfxram_r );
|
||||
DECLARE_WRITE8_MEMBER( gfxram_w );
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
DECLARE_READ8_MEMBER( keyboard_r );
|
||||
DECLARE_WRITE8_MEMBER( keyboard_w );
|
||||
DECLARE_WRITE8_MEMBER( video_mode_w );
|
||||
@ -117,7 +122,13 @@ public:
|
||||
|
||||
DECLARE_FLOPPY_FORMATS( floppy_formats );
|
||||
|
||||
void bankswitch();
|
||||
enum
|
||||
{
|
||||
ROM0 = 0x01,
|
||||
ROM1 = 0x02,
|
||||
VIR = 0x04,
|
||||
RAM = 0x08
|
||||
};
|
||||
|
||||
/* memory state */
|
||||
int m_rome;
|
||||
|
@ -345,25 +345,30 @@ WRITE16_MEMBER(m72_state::videoram2_w)
|
||||
WRITE16_MEMBER(m72_state::irq_line_w)
|
||||
{
|
||||
COMBINE_DATA(&m_raster_irq_position);
|
||||
// printf("m_raster_irq_position %04x\n", m_raster_irq_position);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(m72_state::scrollx1_w)
|
||||
{
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
COMBINE_DATA(&m_scrollx1);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(m72_state::scrollx2_w)
|
||||
{
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
COMBINE_DATA(&m_scrollx2);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(m72_state::scrolly1_w)
|
||||
{
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
COMBINE_DATA(&m_scrolly1);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(m72_state::scrolly2_w)
|
||||
{
|
||||
m_screen->update_partial(m_screen->vpos());
|
||||
COMBINE_DATA(&m_scrolly2);
|
||||
}
|
||||
|
||||
@ -437,7 +442,7 @@ WRITE16_MEMBER(m72_state::m82_gfx_ctrl_w)
|
||||
WRITE16_MEMBER(m72_state::m82_tm_ctrl_w)
|
||||
{
|
||||
COMBINE_DATA(&m_m82_tmcontrol);
|
||||
printf("tmcontrol %04x\n", m_m82_tmcontrol);
|
||||
// printf("tmcontrol %04x\n", m_m82_tmcontrol);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user