Aaron's To-Do List

From MAMEDEV Wiki
Revision as of 03:22, 14 March 2007 by Aaron (talk | contribs) (→‎Sources)

Note that nothing here is a promise. This all just represents ideas in my head. Who knows if I'll get to it all!

Immediate Bugs

  • (done: 0.112u2) add back font size reduction
  • add warning/error about wacky performance counter results
  • identify and fix up 64-bit specific errors
  • add 64-bit debugging code to force allocations above 4GB

Video

  • (done 0.113u1) move throttling and frameskipping code into the core
  • add OSD-specified max frame rate and do intelligent frameskipping to not go above it
  • add code to not throttle if the video doesn't change? (maybe only for 1 frame)
  • change some page-flipping drivers to return UPDATE_HAS_NOT_CHANGED if no front buffer access and no page flip since last frame
  • add support for separate visible versus blanking rects
  • game-specific crosshair bitmaps and sizes
    • user selectable?
  • font improvements:
    • (done: 0.112u1) change UI logic to allow for minimum font sizes
    • (done: 0.113u1) built-in font that is smaller, proportional
    • start with built-in font, then load others
    • standardize on BDC as the font format, provide BDF2BDC converter
    • find a good unicode font
    • user-selectable at runtime via menu?

Interrupts

  • (done: 0.112u1) add asserts to ensure proper PULSE_LINE/HOLD_LINE usage
  • (in progress, thanks Zsolt!) add MDRV_SCANLINE interrupt generators
  • change MDRV_CPU_VBLANK_INT to specify a screen number
  • add timed interrupt generator: cpunum_toggle_input_line_timed(cpu, input, time). This will ASSERT_LINE immediately and then CLEAR_LINE after the specified time. 'time' can be zero, which is equivalent to PULSE_LINE, though perhaps we should discourage such usage since it's not realistic. If you've asserted the line via this function, and another cpunum_assert_input_line_timed() call is made, it will override the previous CLEAR_LINE time with the new time. Note that this is not a proper wire-OR, so we could alternatively reschedule the CLEAR_LINE to the maximum of the new time and the previously pending time.

Sound

  • (done: 0.112u4) fix all sound cores to be independent of Machine->sample_rate
  • (done: 0.112u4) fix all custom sound generators to be independent of Machine->sample_rate
  • (done: 0.112u3) remove OSD hack that allows changing of sample rates on the fly

Graphics

  • add generic palette object
    • shared, so it must be refcounted
    • can be attached to a bitmap
    • can have clients register to get notified of changes (clients have to request changelists)
    • can be any size
    • support global brightness
    • support automatic shadows?
    • always have white/black pens
  • fix drawgfx/palette global palette-ness
  • add laserdisc video viewer in F4 menu if A/V CHD is attached
    • support straight playback with frame info
    • single step forward/back

CPUs

  • automatically respect CPUINFO_INT_CLOCK_DIVIDER
  • finish work on 64-bit DRC engine
  • write 64-bit MIPS3 DRC
  • investigate and fix TMS32031 calculation bug
  • optimize hyperstone core
  • (in progress, thanks Zsolt!) move video timing crap out of cpuexec.c and into video.c
  • replace cpuexec.c with more generic schedule.c

Scheduler

  • Clients register with two callbacks (CPUs and sound cores are clients; video as well)
typedef mame_time (*scheduler_execute_callback)(void *parameter, mame_time curtime, mame_time target);
typedef void (*scheduler_abort_callback)(void *parameter, mame_time abort_time);

scheduler_client *scheduler_client_register(scheduler_execute_callback execute, scheduler_abort_callback abort, void *parameter);
  • Events can be requested, and can cause synchronization between limited groups of clients
typedef void (*scheduler_event_fire_callback)(mame_time curtime, void *parameter);

scheduler_event *scheduler_event_register(mame_time event_time, scheduler_event_fire_callback callback, void *parameter, const scheduler_client **sync_list);
  • The current execution can be aborted (this is implicitly done if an event is registered that times out in the middle of the current execution):
void scheduler_abort_execution(void);
  • Clients can be suspended/resumed:
void scheduler_client_suspend(scheduler_client *client, UINT32 reason_mask);
void scheduler_client_resume(scheduler_client *client, UINT32 reason_mask);
  • Scheduler owns global time and local time for each client:
mame_time scheduler_get_global_time(void);
mame_time scheduler_client_get_current_time(scheduler_client *client);
mame_time scheduler_event_get_fire_time(scheduler_event *event);
  • Scheduler keeps track of real time spent executing (debug only?)
osd_ticks_t scheduler_client_get_real_time(scheduler_client *client);

Misc

  • Allow setting of realtime clock to fixed value for regression testing

Sources

  • (done: 0.112u3) add laserdisc VANC extraction and generation tool to tools
  • (done: 0.112u1) break core fileio.c into fileio.c and corefile.c
  • (done: 0.112u1) make util directory with corefile.c and all other utilities with light dependencies
  • (done: 0.113u2) push more options into the code to reduce OSD burden
  • (done: 0.113u2) change auto_bitmap to not use allocator
  • move cleanup tool into tools
  • move fronthlp.c into common code

Outputs

  • (done: 0.112u2 by Bob Seidel) add pause notifications
  • add ability to get XML description of current game
  • add lamp output to afterburner driver

Debugger

  • clean up APIs
  • add timer window
  • add CHD viewer window

Driver cleanups/To do

  • cliffhgr.c:
    • add proper latching/buffering to ensure no dropouts
    • fix 9928a emulation to match screenshot
  • astrocde.c
  • vicdual.c
  • Cubo CD32 (Amiga AGA-based)
  • 3DO-based systems

Documentation

  • write description for how to compute crosshair parameters

mamedev.org

Other Stuff

  • (done 0.113) add regression testing tools to the tools directory
  • look into inpout32.dll for hooking up ZVG to WinMAME