Commit Graph

38 Commits

Author SHA1 Message Date
Aaron Giles
7b28233e47 Move address_map array from cpu_config to device_config. Added
MDRV macros in the device for specifying address maps. Changed
the memory system to fetch the maps from the new location.

This is just a small step toward the end goal of getting address
maps into arbitrary devices.
2009-07-08 14:47:35 +00:00
Aaron Giles
1dcd75d039 Removed device types from device queries that use tags, under the
assumption that all device tags are unique. Specifically, the
following no longer need to provide a device type:

   AM_DEVREAD/WRITE
   DEVCB_DEVICE_HANDLER
   devtag_get_device
   devtag_reset
   device_list_find_by_tag

as well as several device interfaces that referenced other devices.

Also fixed assertion due to overflow in the recent sound fix.
2009-03-02 10:59:37 +00:00
Aaron Giles
51b90f0e85 Added the ability for devices to have their own custom inline config management.
This was primarily added to allow for sound routes to be supported in a way that
is compatible with the current driver structure. A device can now define a
DEVICE_CUSTOM_CONFIG callback which is called whenever one of the 
MCONFIG_TOKEN_DEVICE_CONFIG_CUSTOM_* tokens is encountered. A special token
MCONFIG_TOKEN_DEVICE_CONFIG_CUSTOM_FREE is defined to clean up memory allocated
and/or reset the custom configuration, and is called when the device is torn down
to allow for memory cleanup.

Reimplemented the sound routing using this new mechanism.
2009-02-16 18:07:38 +00:00
Aaron Giles
5cb6bf00e9 Ok, this is The Big One.
Please note: regression testing is in progress, but the first round 
of glaring regressions have already been taken care of. That said, 
there is likely to be a host of regressions as a result of this 
change.

Also note: There are still a few rough edges in the interfaces. I
will try to clean them up systematically once the basic system is
working.

All sound chips are now proper devices.

Merged the sound chip interface into the device interface,
removing any differences (such as the whole ALIASing concept).

Modified every sound chip in the following ways:
 * updated to match the device interface
 * reduced read/write handlers down to the minimal number
 * added the use of get_safe_token() for ensuring correctness
 * other minor cleanup

Removed the custom sound device. The additional work to just make
custom sound cases into full devices is minimal, so I just converted
them all over to be actual devices.

Vastly simplified the sound interfaces, removing the ghastly
sndti_* business and moving everyone over to using tags for
sound identity. sndintrf, like cpuintrf, is now just a header
file with no implementation.

Modified each and every driver that references a sound chip:
 * all memory maps explicitly reference the targeted device via
    AM_DEVREAD/AM_DEVWRITE/AM_DEVREADWRITE
 * 16-bit and 32-bit accesses to 8-bit chips no longer use
    trampoline functions but instead use the 8-bit AM_DEVREAD/WRITE
    macros
 * all references to sound chips are now done via tags
 * note that these changes are brute force, not optimal; in many
    cases drivers should grab pointers to devices in MACHINE_START
    and stash them away
2009-02-11 19:48:39 +00:00
Aaron Giles
03af882d87 From: Atari Ace [mailto:atari_ace@verizon.net]
Sent: Monday, December 22, 2008 3:00 PM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Make SOUND_xxx pointers to SND_GET_INFO functions

Hi mamedev,

This patch probably should wait till after 0.129 goes out, but may be
of interest regardless.  It makes the treatment of SOUND_xxx the same
as that of CPU_xxx.  That is, they are function pointers to the
SND_GET_INFO routine for the sound.

The first patch just adds some missing include files and modifies a
few cases where a sound_type was used as an integer.  This could go in
now.  The second patch then adds the needed #defines to all the sound
headers (it assumes the previous patch I sent to add the SND_GET_INFO
declarations was applied), and modifies the sound code accordingly. It
also moves the sound clock to the device object.  Note that the dummy
sound core is removed entirely.  I cheated a bit and made VERIFY_SNDTI
also declare and fill in the sndnum, making this an INLINE function
would probably be more appropriate, but all of this code's days are
numbered.

There may be some performance loss in drivers that expect sndti_xxx
routines to be fast, since sound_matrix has been removed.  The
performance however should be similar to looking up items in a
devicelist, so those drivers will have to adjust eventually.

~aa
2009-01-13 03:08:03 +00:00
Aaron Giles
5279595eee Removed MDRV_INTERLEAVE(x), which specified the minimum scheduling
quantum in terms of "frames" (a dubious concept now with multiple
screens and changing refresh rates). Replaced it with a new
MDRV_QUANTUM_TIME(x) which specifies the minimum scheduling quantum
as a time value. Time can be specified as HZ(x), NSEC(x), USEC(x),
etc. Updated all drivers to use this, assuming 60 was the frame
rate (this is not perfect but should work for almost all cases).

Changed MDRV_WATCHDOG_INIT_TIME(x) to automatically prepend
UINT64_ATTOTIME_IN_ to the parameter, ensuring there is no
improper use of this macro and bringing it in line with the
MDRV_QUANTUM_TIME() macro. Updated all callers.

Added new MDRV_QUANTUM_PERFECT_CPU(x) to specify that the minimum
quantum should be enough to ensure that the specified CPU tag
only ever executes a single instruction at a time. This can be
used to explicitly require "perfect" synchronization for drivers
that have multiple CPUs with shared memory. Turned this on for
the arknoid2 driver for now as a test (the interleave on that
driver was already very close to perfect anyway).
2008-12-20 21:17:53 +00:00
Aaron Giles
cf9fc58618 Made the concept of a "clock" native to devices. The clock is now
specified when the device is added, and the clock is available in
the device_config directly via device->clock. Updated all devices
that have a clock to specify it when adding the device, rather than
as part of their configuration. As part of this work, also created
device-specific _ADD and _REMOVE macros to simplify configuration.

Dfined a generic device execute function callback, though it
is not used yet. The long term plan is that any device with an 
execute callback will be scheduled along with the CPUs. Now that
CPUs are devices, their scheduling will be moved over to this
logic eventually.

Changed various NVRAM devices to fetch their default memory region
from the device->region rather than specifying it in the 
configuration.

Moved a number of CPUINFO_PTR_* constants to CPUINFO_FCT_*.

Fixed several drivers that manually created their own gfx_elements
to fill in the machine object, so they no longer crash.

Fixed incorrect CPU display on info screen (recently broken).

Moved device startup to *before* the DRIVER_INIT is called. This
is to allow the DRIVER_INIT to configure devices that have been
properly allocated. So far I don't see any negative effects, but
be on the lookout if something weird shows up.

Rewrote the device iteration logic to make use of the typenext
field and the newly-introduced classnext field for iterating more
efficiently through devices of a given type or class.

Fixed behavior of MDRV_CPU_REPLACE so it does not delete and then
re-add a CPU (causing the order to change).
2008-12-18 08:28:50 +00:00
Aaron Giles
98c40f06db Made CPUs into proper devices. CPUs are now added in the
machine configuration just as any other device, and the
standard CPU configuration is performed via the inline
configuration macros.

Change cpu_type from an enumeration into a pointer to the
CPU's get_info function, very similar to device behavior.
For now all CPUs are declared in cpuintrf.h, but 
eventually they should be declared in the CPU's header
file, and the driver should #include that header.

Added function cpu_get_type() to return the CPU type.

Changed several cpu_* functions into macros that call
through to the equivalent device_* function.

The device system now maintains a parallel list of devices
based on type, for faster iteration through all devices
of a given type.

Cleaned up code that looped over CPUs via the machine->cpu
array to now loop using the type-based device list.

Removed start/stop/reset/nvram functions from the 
device_config in favor of grabbing them as needed.

Cleaned up the generic interrupt_enable code to work with
CPU devices instead of numbers.

Mapped the devtag_* functions to device_* functions via
macros instead of parallel implementations.
2008-12-16 15:02:15 +00:00
Curt Coder
4094a61f7a Added macros to access ROM and MACHINE_DRIVER by name. 2008-11-26 20:45:18 +00:00
Aaron Giles
63d10ee9bf Massive API cleanup/change. The primary goal is that all CPU-
related APIs now take a device pointer instead of an index.
All functions that take a CPU device are prefixed with cpu_*
All functions that are globally related to cpu execution
are prefixed with cpuexec_*. Below is a list of some of the 
mappings:

  cpu_boost_interleave     -> cpuexec_boost_interleave
  cpunum_suspend           -> cpu_suspend
  cpunum_resume            -> cpu_resume
  cpunum_is_suspended      -> cpu_is_suspended
  cpunum_get_clock         -> cpu_get_clock
  cpunum_set_clock         -> cpu_set_clock
  cpunum_get_clockscale    -> cpu_get_clockscale
  cpunum_set_clockscale    -> cpu_set_clockscale
  cpunum_get_localtime     -> cpu_get_local_time
  cpunum_gettotalcycles    -> cpu_get_total_cycles
  activecpu_eat_cycles     -> cpu_eat_cycles
  activecpu_adjust_icount  -> cpu_adjust_icount
  cpu_trigger              -> cpuexec_trigger
  cpu_triggertime          -> cpuexec_triggertime
  cpunum_set_input_line    -> cpu_set_input_line
  cpunum_set_irq_callback  -> cpu_set_irq_callback

In addition, a number of functions retain the same name but
now require a specific CPU parameter to be passed in:

  cpu_yield
  cpu_spin
  cpu_spinuntil_time
  cpu_spinuntil_int
  cpu_spinuntil_trigger
  cpu_triggerint

Merged cpuint.c into cpuexec.c. One side-effect of this
change is that driver reset callbacks are called AFTER the
CPUs and devices are reset. This means that if you make
changes to the CPU state and expect the reset vectors to
recognize the changes in your reset routine, you will need
to manually reset the CPU after making the change (since it
has already been reset).

Added a number of inline helper functions to cpuintrf.h for
managing addresses

Removed cpu_gettotalcpu(). This information is rarely needed
outside of the core and can be obtained by looking at the
machine->cpu[] array.

Changed CPU interrupt acknowledge callbacks to pass a CPU 
device instead of machine/cpunum pair.

Changed VBLANK and periodic timer callbacks to pass a CPU
device instead of machine/cpunum pair.

Renamed all information getters from cpu_* to cpu_get_* and
from cputype_* to cputype_get_*.
2008-11-13 06:59:57 +00:00
Aaron Giles
92f3053105 Major cpuintrf changes:
* added a set of cpu_* calls which accept a CPU device object;
  these are now the preferred means of manipulating a CPU

* removed the cpunum_* calls; added an array of cpu[] to the
  running_machine object; converted all existing cpunum_* calls
  to cpu_* calls, pulling the CPU device object from the new
  array in the running_machine

* removed the activecpu_* calls; added an activecpu member to
  the running_machine object; converted all existing activecpu_*
  calls to cpu_* calls, pulling the active CPU device object
  from the running_machine

* changed cpuintrf_push_context() to cpu_push_context(), taking
  a CPU object pointer; changed cpuintrf_pop_context() to
  cpu_pop_context(); eventually these will go away

* many other similar changes moving toward a model where all CPU
  references are done by the CPU object and not by index
2008-11-10 07:42:09 +00:00
Aaron Giles
096529d2d8 From: Atari Ace [mailto:atari_ace@verizon.net]
Sent: Wednesday, November 05, 2008 8:22 AM
To: submit@mamedev.org
Cc: atariace@hotmail.com
Subject: [patch] Add ADDRESS_MAP_NAME macro

Hi mamedev,

In theory, MAME's interface macros should completely hide the naming
conventions from the drivers and sound/cpu cores.  So as an
experiment, I renamed all the core apis and looked to see what broke.
The most common api coupling was with address maps in the CPU cores,
which this patch addresses by introducing a new macro,
ADDRESS_MAP_NAME (mimicing what is done in devintrf.h).  There were a
handful of related problems in some drivers which this patch also
fixes.  Some remaining issues I left alone (laserdisk apis reference
rom, video_update, machine_config, ksys573 use of nvram_handler,
megadriv use of ipt), in principle all the apis need _NAME variants to
encode the conventions.

~aa
2008-11-08 21:06:35 +00:00
Aaron Giles
ae2d1ed21a Ok, I submit. Maximum tag length is 15. Be good. 2008-09-11 16:04:35 +00:00
Aaron Giles
a9b7f2d1a4 Further reduced the maximum tag length to 10 characters, since
there were only a few cases where longer tags were in use.
2008-09-10 06:29:24 +00:00
Aaron Giles
f5d90dac56 CPUs, sound chips, devices, and ROM-regions which are specified by devices
now have their tags auto-prefixed with the device's tag. This allows for
multiple instances to be present. For example, the PR-8210 laserdisc player
has a CPU with a tag of "pr8210". When it is included as a device by a
driver, the driver may tag the device "laserdisc". The resulting final
CPU tag name will be "laserdisc:pr8210". Also updated the debugger
expression engine to support names with embedded colons.

Added warnings to ensure that tags used for CPUs, sound chips, regions, and
devices follow some basic rules: they should be less than 12 characters long,
be all lower-case, and only contain letters, numbers, underscores, or dots
(no spaces). This is to ensure that they can be used properly in debugger
expressions and don't get too long or unwieldy to type (even 12 chars is a
bit long).
2008-09-08 03:05:09 +00:00
Aaron Giles
8c9f7cbc76 Added new device interface selector: DEVINFO_PTR_ROM_REGION. This allows a
device to provide a set of ROM regions to be loaded along with the game
ROMs. It is expected that most regions defined for devices will use the
ROMREGION_LOADBYNAME flag to enable the ROMs to live in a central location.

Added new device interface selector: DEVINFO_PTR_MACHINE_CONFIG. This allows
a device to specify a partial machine driver which is appended to the end of
the machine driver for any game using that device. The intention for this is
to allow devices which have their own BIOS logic to specify CPUs and other
characteristics common to all systems using the device.

Added new ROMREGION flag: ROMREGION_LOADBYNAME, which means that if the ROMs
in that region are not found in the usual driver files, then the name of the
region will be used as a driver filename for loading.

Extended the ldcore interface structure to allow each player type to provide
its own ROM region and partial machine driver.

Moved preliminary PR-8210 emulation code from ldplayer.c to ldpr8210.c. It
is currently disabled behind the EMULATE_PR8210_ROM compile time flag.
2008-09-06 06:36:32 +00:00
Aaron Giles
4db67471be MSVC fixes. MSVC cannot handle offsetof(struct, member[index]); once an
array is involved, it seems to think it is not a constant expression.

Added MDRV_DEVICE_CONFIG_DATA32_EXPLICIT() macro which takes an explicit
size and offset. Changed MDRV_DEVICE_CONFIG_DATA32() to be built off of
this macro. Added MDRV_DEVICE_CONFIG_DATA32_ARRAY() and
MDRV_DEVICE_CONFIG_DATA32_ARRAY_MEMBER() which do explicit computations
of the offset to work around MSVC's problems.

Replicated these changes for DATA64 and DATAPTR macros. Updated latch8.h
to use the new macros.
2008-08-25 15:13:48 +00:00
Aaron Giles
5bb72fa08e Changed MDRV_CPU_ADD to require a tag. Removed MDRV_CPU_ADD_TAG.
Tagged all CPUs. Now I will take a break until my fingers stop
cramping. :)
2008-07-19 05:26:09 +00:00
Aaron Giles
023423726f Removed MDRV_SOUND_ADD. Renamed MDRV_SOUND_ADD_TAG to
MDRV_SOUND_ADD. All sound chips must now include a tag.

Laboriously changed all existing drivers to define a
unique tag for each sound chip.

CPUs are next, but will require a more hands-on manual
process to produce reasonable tags.
2008-07-18 17:08:58 +00:00
Aaron Giles
356d5dd812 Fixes 01659: stereo balancing is wrong
Apparently if you cast a negative number to a UINT32 at compile-time,
gcc does the "right thing" and saturates it to 0.
2008-04-04 14:17:56 +00:00
Zsolt Vasvari
3512bc695d Changes MDRV_TIMER_DURATION to MDRV_TIMER_START_DELAY
Renames duration to start_delay in timer_adjust_periodic() as well
Moves MDRV_ macros into proper header files
2008-03-15 03:13:57 +00:00
Zsolt Vasvari
d4893e2535 Makes suggested changes to MDRV_TIMER macros. Hasn't moved them yet. 2008-03-14 15:13:46 +00:00
Zsolt Vasvari
e4a07ea688 Implements scanline based timer devices.
Converted Centipede, as an example.

To define a scanline timer, use something like this:

MDRV_TIMER_ADD("32V", SCANLINE, generate_interrupt)
MDRV_TIMER_SCANLINE("main", 0, 16)

The first number is the first scanline the timer will fire on, the 2nd number is the increment.
So in this case, the timer will fire on 0, 16, 32, ..., 224, 240, then wrap around
because the screen is defined as 256 lines high.
The current scanline is passed to the callback in its 'param' argument
2008-03-14 11:15:31 +00:00
Zsolt Vasvari
c0ca716e62 Added skeletion device interface for timers. Just wanted to get feedback.
- Where applicable, added a parallel set of timer functions that take a device_config instead of emu_timer:
	void timer_device_adjust_oneshot(const device_config *timer, attotime duration, INT32 param);
	void timer_device_adjust_periodic(const device_config *timer, attotime duration, INT32 param, attotime period);
	void timer_device_reset(const device_config *timer, attotime duration);
	int timer_device_enable(const device_config *timer, int enable);
	int timer_device_enabled(const device_config *timer);
	int timer_device_get_param(const device_config *timer);
	void *timer_device_get_param_ptr(const device_config *timer);
	attotime timer_device_timeelapsed(const device_config *timer);
	attotime timer_device_timeleft(const device_config *timer);
	attotime timer_device_starttime(const device_config *timer);
	attotime timer_device_firetime(const device_config *timer);

- Added MACHINE_CONFIG macros:
	MDRV_TIMER_ADD(_tag, _type, _callback)	/* type can only be PERIODIC right now (can scanline based later, or even NE555) */
	MDRV_TIMER_REMOVE(_tag)
	MDRV_TIMER_MODIFY(_tag)
	MDRV_TIMER_TYPE(_type)
	MDRV_TIMER_CALLBACK(_callback) 
	MDRV_TIMER_DURATION(_duration)
	MDRV_TIMER_PERIOD(_period)
	MDRV_TIMER_PARAM(_param)
	MDRV_TIMER_PTR(_ptr)

- Modified Space Encounters to create two timers and use those:

	MDRV_TIMER_ADD("STROBE_ON", PERIODIC, spcenctr_strobe_timer_callback)
	MDRV_TIMER_PARAM(TRUE)	/* indicates strobe ON */
	MDRV_TIMER_PERIOD(UINT64_ATTOTIME_IN_HZ(SPCENCTR_STROBE_FREQ))

	MDRV_TIMER_ADD("STROBE_OFF", PERIODIC, spcenctr_strobe_timer_callback)
	MDRV_TIMER_PARAM(FALSE)	/* indicates strobe OFF */
	MDRV_TIMER_DURATION(UINT64_ATTOTIME_IN_HZ(SPCENCTR_STROBE_FREQ * 100 / SPCENCTR_DUTY_CYCLE))
	MDRV_TIMER_PERIOD(UINT64_ATTOTIME_IN_HZ(SPCENCTR_STROBE_FREQ))
2008-03-14 00:27:07 +00:00
Aaron Giles
ddfc0c3259 WIP check-in. Things work now, but I'm still working on the code.
Converted address maps to tokens. Changed the address_map structure
to house global map-wide information and hung a list of entries off
of it corresponding to each address range. Introduced new functions
address_map_alloc() and address_map_free() to build/destroy these
structures. Updated all code as necessary.

Fixed several instances of porttagtohandler*() in the address maps.
Drivers should use AM_READ_PORT() macros instead.

ADDRESS_MAP_EXTERN() now is required to specify the number of 
databits, just like ADDRESS_MAP_START.

Removed ADDRESS_MAP_FLAGS() grossness. There are now three new macros
which replace its former usage. ADDRESS_MAP_GLOBAL_MASK(mask)
specifies a global address-space-wide mask on all addresses. Useful
for cases where one or more address lines simply are not used at
all. And ADDRESS_MAP_UNMAP_LOW/HIGH specifies the behavior of
unmapped reads (do they come back as 0 or ~0).

Changed internal memory mapping behavior to keep only a single
address map and store the byte-adjusted values next in the address
map entries rather than maintaining two separate maps. Many other
small internal changes/cleanups.
2008-03-09 21:59:57 +00:00
Zsolt Vasvari
48f7d189e6 Changes VIDEO_UPDATE signature to
typedef UINT32 (*video_update_func)(const device_config *screen, int scrnum, bitmap_t *bitmap, const rectangle *cliprect);

Adds const device_config *primary_screen to running_machine (not yet used)
2008-03-08 15:57:43 +00:00
Zsolt Vasvari
d0f5196025 - the public screen_state is made to only contain items that are currently accessed by drivers
- populating screen_state is moved from mame.c to video.c
- defstate is gone -- the default screen parameters live in screen_config directly
2008-03-07 12:53:00 +00:00
Couriersud
7e15b2ff6f * MACHINE_DRIVER_EXTERN now requires a semicolon
* removed a number of extra semicolons
2008-03-01 00:17:58 +00:00
Zsolt Vasvari
f126c9fc26 Most of this descriptions taken directly from an e-mail by Aaron:
- Define a new MDRV_CPU_VBLANK_INT_HACK() (ZV: defined in deprecat.h) which is a copy of the current MDRV_CPU_VBLANK_INT()
- Find all the places where VBLANK_INT is used with something other than 1 interrupt per frame and change it to the new macro
- Remove the "# per frame" parameter from the MDRV_SCREEN_VBLANK_INT() and add a screen tag in its place; updated all callers appropriately.
- ZV: Added some validation of the interrupt setup to validate.c 

The idea behind this is that using a VBLANK interrupt with more than one interrupt per frame in conceptually wrong.
The screen tag will allow us to move the interrupt timing code from cpuexec.c to video.c, where it really belongs.
2008-02-29 15:09:04 +00:00
Zsolt Vasvari
f8cbcafd5e Replaces mame_bitmap with bitmap_t
Removes mame_bitmap
2008-02-29 04:01:09 +00:00
Aaron Giles
b96aa2fb5c Spacing and version bump. 2008-02-28 06:20:19 +00:00
Aaron Giles
adcdfd3e5b Converted MACHINE_DRIVER definitions from function
constructors to tokenized lists. For the most part
this is a non-invasive change, except for those drivers
using MDRV_WATCHDOG_TIME_INIT. In order to allow for
tokenization of attotimes, a set of new macros is
provided called UINT64_ATTOTIME_IN_x() which follows the
same pattern as ATTOTIME_IN_x() but packs the attotime
down into a single 64-bit value for easier tokenization.

Separated MDRV_DEVICE_CONFIG_DATA into 32-bit and 64-bit
versions. Added floating-point versions with configurable
resolutions.

Fixed several errors in the machine drivers which were
caught by the additional checks now done in the machine
config detokenization code.

Converted speakers into devices. Machine->config no
longer houses an array of speakers; instead they are
iterated through using the new macros (defined in sound.h)
speaker_output_first() and speaker_output_next(). Updated
all relevant code to do this.

Improved game info display with multiple screens. Fixed
bug which caused all screens to display equally.

Added typedefs for all the machine config callback 
functions at the top of driver.h.
2008-02-26 06:31:28 +00:00
Aaron Giles
8436bec1e3 Cleanups and version bump for 0.123u2. 2008-02-21 17:43:00 +00:00
Aaron Giles
b7c4a537cd Most important thing to note about this change:
ALL DRIVERS MUST NOW EXPLICITLY DECLARE THEIR SCREENS.

Read on for more detail....

Added device tag as a parameter to the start function for devices.
Updated MC6845 to accept this tag.

Added new functions for iterating through the device list and 
counting devices of a given type. Updated search and iteration
functions to accept DEVICE_TYPE_WILDCARD to work across all
devices.

Added new macro MDRV_DEVICE_CONFIG_DATA() which is used to set a
single item in an inline data structure.

Removed the per-screen palette_base. This was an idea that never
really worked out, nor have we really needed it.

Defined a new device type VIDEO_SCREEN. Currently this has no
live functionality, but merely serves as a placeholder/identifier
for video screens. Eventually some of the screen management code
may move into the start/stop/reset functions.

Changed MDRV_SCREEN_* macros to build up VIDEO_SCREEN devices
rather than storing values in the screen[] array.

Changed MDRV_SCREEN_ADD to specify a screen type (RASTER, VECTOR,
LCD for the moment).

Removed the older VIDEO_TYPE_RASTER and VIDEO_TYPE_VECTOR; this
information is now determined by walking the screen list.

Removed the screen[] array from machine_config. Modified all code 
referencing Machine->config->screen[] and changed it to iterate 
over the devices using the new video_screen_first() and 
video_screen_next() functions.

(The next step will be to add video_* functions that accept a tag
instead of screen index, and then move systems over to always
referencing screens by tag instead of index.)

Removed implicit screen #0. This means that ALL DRIVERS MUST
EXPLICITLY DECLARE THEIR SCREENS. Updated all drivers to do
so. While there, grouped all MDRV_SCREEN_* parameters together.
Also removed unnecessary VIDEO_TYPE_RASTER and VIDEO_TYPE_VECTOR.
Also removed VBLANK and bitmap format information from vector
games. This was painful and very tedious.

Changed game information to display info about all screens.
2008-02-21 08:50:36 +00:00
Aaron Giles
85112f6f1c Removed clock and flags as fundamental device parameters. 2008-02-20 06:08:30 +00:00
Aaron Giles
99675196a8 Added support for inline device configuration. 2008-02-20 06:06:13 +00:00
Aaron Giles
aad4c81ac4 Pulled remaining vestiges of old-style colortables:
* PALETTE_INIT no longer has a colortable parameter
 * removed game_colortable and remapped_colortable from machine_config
 * updated a few stragglers that still referenced these fields
 * removed tile_draw_colortable from tilemap.c

(From Zsolt): Added support for the new colortable object in the palette viewer

Changed the input port tokens to use a union instead of casting everything to FPTR.
In the future, C99-enabled compilers will be able to achieve type safety with
designated initializers.
2008-02-19 17:52:21 +00:00
Aaron Giles
3accee936b New module: devintrf.c/.h. Implements a generic device interface similar
to the sound and CPU interfaces. This is still a bit WIP, but works at
a fundamental level. Currently the only example of usage is in qix.c for
the MC6845 CRTC.

New module: mconfig.c/.h. Moved all machine_config and MDRV_* macros here, 
out of driver.c/.h. Added MDRV macros for adding/removing/configuring
devices.

qix.c: Moved video part of machine driver to video/qix.c. Added MC6845
as a device in the machine driver. Removed explicit MC6845 initialization
from VIDEO_START in favor of simply retrieving the token from the device
interface code.

mc6845.c: Updated all callbacks to pass the mc6845_t * object. Updated
all drivers accordingly. Added a minimal device interface.

Deprecated the following constants because global constants that pretend
to document things but which are only guesses are dumb:

  - DEFAULT_60HZ_VBLANK_DURATION
  - DEFAULT_30HZ_VBLANK_DURATION
  - DEFAULT_REAL_60HZ_VBLANK_DURATION
  - DEFAULT_REAL_30HZ_VBLANK_DURATION
  - DEFAULT_60HZ_3S_VBLANK_WATCHDOG
  - DEFAULT_30HZ_3S_VBLANK_WATCHDOG

Updated all drivers to explicitly specify the equivalent bogus times.
Added comments for the "REAL" VBLANK durations to indicate that they are
not accurate.
2008-02-19 08:49:59 +00:00