summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/osdmini/minimain.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/osdmini/minimain.c')
-rw-r--r--src/osd/osdmini/minimain.c223
1 files changed, 223 insertions, 0 deletions
diff --git a/src/osd/osdmini/minimain.c b/src/osd/osdmini/minimain.c
new file mode 100644
index 00000000000..c3fac86f2e2
--- /dev/null
+++ b/src/osd/osdmini/minimain.c
@@ -0,0 +1,223 @@
+//============================================================
+//
+// minimain.c - Main function for mini OSD
+//
+//============================================================
+//
+// Copyright Aaron Giles
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or
+// without modification, are permitted provided that the
+// following conditions are met:
+//
+// * Redistributions of source code must retain the above
+// copyright notice, this list of conditions and the
+// following disclaimer.
+// * Redistributions in binary form must reproduce the
+// above copyright notice, this list of conditions and
+// the following disclaimer in the documentation and/or
+// other materials provided with the distribution.
+// * Neither the name 'MAME' nor the names of its
+// contributors may be used to endorse or promote
+// products derived from this software without specific
+// prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND
+// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+// EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
+// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGE (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+//============================================================
+
+#include "osdepend.h"
+#include "render.h"
+#include "clifront.h"
+#include "mame.h"
+
+
+//============================================================
+// CONSTANTS
+//============================================================
+
+// we fake a keyboard with the following keys
+enum
+{
+ KEY_ESCAPE,
+ KEY_P1_START,
+ KEY_BUTTON_1,
+ KEY_BUTTON_2,
+ KEY_BUTTON_3,
+ KEY_JOYSTICK_U,
+ KEY_JOYSTICK_D,
+ KEY_JOYSTICK_L,
+ KEY_JOYSTICK_R,
+ KEY_TOTAL
+};
+
+
+//============================================================
+// GLOBALS
+//============================================================
+
+// a single rendering target
+static render_target *our_target;
+
+// a single input device
+static input_device *keyboard_device;
+
+// the state of each key
+static UINT8 keyboard_state[KEY_TOTAL];
+
+
+//============================================================
+// FUNCTION PROTOTYPES
+//============================================================
+
+static INT32 keyboard_get_state(void *device_internal, void *item_internal);
+
+
+//============================================================
+// main
+//============================================================
+
+int main(int argc, char *argv[])
+{
+ // cli_execute does the heavy lifting; if we have osd-specific options, we
+ // would pass them as the third parameter here
+ return cli_execute(argc, argv, NULL);
+}
+
+
+//============================================================
+// osd_init
+//============================================================
+
+void osd_init(running_machine *machine)
+{
+ // initialize the video system by allocating a rendering target
+ our_target = render_target_alloc(machine, NULL, 0);
+ if (our_target == NULL)
+ fatalerror("Error creating render target");
+
+ // nothing yet to do to initialize sound, since we don't have any
+ // sound updates are handled by osd_update_audio_stream() below
+
+ // initialize the input system by adding devices
+ // let's pretend like we have a keyboard device
+ keyboard_device = input_device_add(machine, DEVICE_CLASS_KEYBOARD, "Keyboard", NULL);
+ if (keyboard_device == NULL)
+ fatalerror("Error creating keyboard device");
+
+ // our faux keyboard only has a couple of keys (corresponding to the
+ // common defaults)
+ input_device_item_add(keyboard_device, "Esc", &keyboard_state[KEY_ESCAPE], ITEM_ID_ESC, keyboard_get_state);
+ input_device_item_add(keyboard_device, "P1", &keyboard_state[KEY_P1_START], ITEM_ID_1, keyboard_get_state);
+ input_device_item_add(keyboard_device, "B1", &keyboard_state[KEY_BUTTON_1], ITEM_ID_LCONTROL, keyboard_get_state);
+ input_device_item_add(keyboard_device, "B2", &keyboard_state[KEY_BUTTON_2], ITEM_ID_LALT, keyboard_get_state);
+ input_device_item_add(keyboard_device, "B3", &keyboard_state[KEY_BUTTON_3], ITEM_ID_SPACE, keyboard_get_state);
+ input_device_item_add(keyboard_device, "JoyU", &keyboard_state[KEY_JOYSTICK_U], ITEM_ID_UP, keyboard_get_state);
+ input_device_item_add(keyboard_device, "JoyD", &keyboard_state[KEY_JOYSTICK_D], ITEM_ID_DOWN, keyboard_get_state);
+ input_device_item_add(keyboard_device, "JoyL", &keyboard_state[KEY_JOYSTICK_L], ITEM_ID_LEFT, keyboard_get_state);
+ input_device_item_add(keyboard_device, "JoyR", &keyboard_state[KEY_JOYSTICK_R], ITEM_ID_RIGHT, keyboard_get_state);
+
+ // hook up the debugger log
+// add_logerror_callback(machine, output_oslog);
+}
+
+
+//============================================================
+// osd_wait_for_debugger
+//============================================================
+
+void osd_wait_for_debugger(const device_config *device, int firststop)
+{
+ // we don't have a debugger, so we just return here
+}
+
+
+//============================================================
+// osd_update
+//============================================================
+
+void osd_update(running_machine *machine, int skip_redraw)
+{
+ const render_primitive_list *primlist;
+ int minwidth, minheight;
+
+ // get the minimum width/height for the current layout
+ render_target_get_minimum_size(our_target, &minwidth, &minheight);
+
+ // make that the size of our target
+ render_target_set_bounds(our_target, minwidth, minheight, 0);
+
+ // get the list of primitives for the target at the current size
+ primlist = render_target_get_primitives(our_target);
+
+ // lock them, and then render them
+ osd_lock_acquire(primlist->lock);
+ // do the drawing here
+ osd_lock_release(primlist->lock);
+
+ // after 5 seconds, exit
+ if (attotime_compare(timer_get_time(machine), attotime_make(5, 0)) > 0)
+ mame_schedule_exit(machine);
+}
+
+
+//============================================================
+// osd_update_audio_stream
+//============================================================
+
+void osd_update_audio_stream(running_machine *machine, INT16 *buffer, int samples_this_frame)
+{
+ // if we had actual sound output, we would copy the
+ // interleaved stereo samples to our sound stream
+}
+
+
+//============================================================
+// osd_set_mastervolume
+//============================================================
+
+void osd_set_mastervolume(int attenuation)
+{
+ // if we had actual sound output, we would adjust the global
+ // volume in response to this function
+}
+
+
+//============================================================
+// osd_customize_input_type_list
+//============================================================
+
+void osd_customize_input_type_list(input_type_desc *typelist)
+{
+ // This function is called on startup, before reading the
+ // configuration from disk. Scan the list, and change the
+ // default control mappings you want. It is quite possible
+ // you won't need to change a thing.
+}
+
+
+//============================================================
+// keyboard_get_state
+//============================================================
+
+static INT32 keyboard_get_state(void *device_internal, void *item_internal)
+{
+ // this function is called by the input system to get the current key
+ // state; it is specified as a callback when adding items to input
+ // devices
+ UINT8 *keystate = (UINT8 *)item_internal;
+ return *keystate;
+}