Aaron's To-Do List: Difference between revisions

From MAMEDEV Wiki
mNo edit summary
No edit summary
Line 1: Line 1:
Note that nothing here is a promise. This all just represents ideas in my head. Who knows if I'll get to it all!
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==
==General==
* (done: 0.112u2) <strike>add back font size reduction</strike>
* Integrate proper localization (work with MAMEPlus!)
* Compile with UNICODE=1 for all builds (will deprecate Windows 9x support)
* define & implement more general pipe-like interface for external communication
* change OSD sound interface so it creates sound "targets" much like render targets
* allow setting of realtime clock to fixed value from command line for regression testing
 
==CPUs/Timing==
* universal DRC backend
** define common IR that all DRCs compile to
** write backends for x86/x64
** also write canonical "C" interpreted backend, designed to be run in parallel
** update MIPS3 DRC to the new backend
** look into TMS32031 and/or ADSP support
* add CPUINFO_INT_CLOCK_MULTIPLIER
* automatically respect CPUINFO_INT_CLOCK_DIVIDER/MULTIPLIER and fix all drivers
* investigate and fix TMS32031 calculation bug
* replace cpuexec.c and timer.c with more generic scheduler
* add MDRV_SCANLINE interrupt generators
* change MDRV_CPU_VBLANK_INT to specify a screen number
* change MDRV_INTERLEAVE to specify interleave as per-second, not per-frame
* 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.
 
==Debugger==
* convert to using pipes
* separate debugger from core application
* add timer window
* add CHD viewer window


==Devices==
==Devices==
* create new generic device model based off of sndintrf
* create new generic device model based off of sndintrf
* devices are specified in machine driver with tags, just like sound cores (except tags are required)
** devices are specified in machine driver with tags, just like sound cores (except tags are required)
* generic device I/O handlers that can be referenced via new memory map primitives
** generic device I/O handlers that can be referenced via new memory map primitives
* convert sound cores into generic devices
* convert sound cores into generic devices
** how does routing work?
** how does routing work?
** fix routing anyways
** fix routing anyways
==3D==
* Add texture management to poly.c
** Accepts array of 8 32-bit parameters
** Hashes those parameters and performs lookups
** Automatically manages via LRU
* Pre-compute textures in voodoo at upload time and remove on-the-fly format conversion for a bit more speed


==Video==
==Video==
* (done 0.113u1) <strike>move throttling and frameskipping code into the core</strike>
* fix drawgfx/palette global palette-ness
* (done 0.115u1) <strike>add support for separate visible versus blanking rects</strike>
* render crosshairs in UI layer not in game containers
* render crosshairs in UI layer not in game containers
* game-specific crosshair bitmaps and sizes
* game-specific crosshair bitmaps and sizes
** user selectable?
** user selectable?
* fix crosshair rendering to understand scale and offset factors
* fix crosshair rendering to understand scale and offset factors
* (done: 0.118u1) <strike>add OSD-specified max frame rate and do intelligent frameskipping to not go above it</strike>
* (done: 0.119) <strike>add code to not throttle if the video doesn't change? (maybe only for 1 frame)</strike>
* (done) <strike>change some page-flipping drivers to return UPDATE_HAS_NOT_CHANGED if no front buffer access and no page flip since last frame</strike>
* font improvements:
* font improvements:
** (done: 0.112u1) <strike>change UI logic to allow for minimum font sizes</strike>
** (done: 0.113u1) <strike>built-in font that is smaller, proportional</strike>
** start with built-in font, then load others
** start with built-in font, then load others
** standardize on BDC as the font format, provide BDF2BDC converter
** standardize on BDC as the font format, provide BDF2BDC converter
** find a good unicode font
** find a good unicode font
** user-selectable at runtime via menu?
** user-selectable at runtime via menu?
* add laserdisc video viewer in F4 menu if A/V CHD is attached
** support straight playback with frame info
** single step forward/back


==Timing/Interrupts==
==Outputs==
* (done: 0.112u1) <strike>add asserts to ensure proper PULSE_LINE/HOLD_LINE usage</strike>
* convert output system to use pipes
* (in progress, thanks Zsolt!) add MDRV_SCANLINE interrupt generators
* add ability to get XML description of current game
* change MDRV_CPU_VBLANK_INT to specify a screen number
* change MDRV_INTERLEAVE to specify interleave as per-second, not per-frame
* 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==
==Drivers==
* change OSD sound interface so it creates sound "targets" much like render targets
* write tests to figure out 3dfx mipmapping algorithm
* (done: 0.112u4) <strike>fix all sound cores to be independent of Machine->sample_rate</strike>
* remove use of MDRV_VBLANK_INT(count) where count > 1
* (done: 0.112u4) <strike>fix all custom sound generators to be independent of Machine->sample_rate</strike>
* cliffhgr.c:
* (done: 0.112u3) <strike>remove OSD hack that allows changing of sample rates on the fly</strike>
** add proper latching/buffering to ensure no dropouts
** fix 9928a emulation to match [http://www.sventech.com/~dereks/gallery2/main.php?g2_view=core:ShowItem&g2_itemId=2499 screenshot]
* 3DO-based systems


==Graphics==
==Documentation==
* (done: 0.118u5) <strike>add generic palette object</strike>
* write debugger documentation
* fix drawgfx/palette global palette-ness
** Debugger basics (covers the main window, the keyboard shortcuts, and a couple of very basic commands)
* add laserdisc video viewer in F4 menu if A/V CHD is attached
** Viewing memory (covers disasm/dump, memory and disassembly windows)
** support straight playback with frame info
** Breakpoints and watchpoints (covers basic breakpoints and watchpoint usage)
** single step forward/back
** Expressions (covers using expressions to change values and the whole expression syntax)
** Advanced breakpoints and watchpoints (covers conditionals, actions, etc)
** Other techniques (covers tracing and other things)
* write description for how to compute crosshair parameters


==CPUs==
==Other Stuff==
* automatically respect CPUINFO_INT_CLOCK_DIVIDER
* look into inpout32.dll for hooking up ZVG to WinMAME
* (done) <strike>finish work on 64-bit DRC engine</strike>
* (done) <strike>write 64-bit MIPS3 DRC</strike>
* investigate and fix TMS32031 calculation bug
* (done: 0.121u1) <strike>optimize hyperstone core</strike>
* (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==
==Scheduler==
Line 85: Line 111:
* Scheduler keeps track of real time spent executing (debug only?)
* Scheduler keeps track of real time spent executing (debug only?)
  osd_ticks_t scheduler_client_get_real_time(scheduler_client *client);
  osd_ticks_t scheduler_client_get_real_time(scheduler_client *client);
==Misc==
* Allow setting of realtime clock to fixed value for regression testing
* 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
==Sources==
* (done: 0.112u3) <strike>add laserdisc VANC extraction and generation tool to tools</strike>
* (done: 0.112u1) <strike>break core fileio.c into fileio.c and corefile.c</strike>
* (done: 0.112u1) <strike>make util directory with corefile.c and all other utilities with light dependencies</strike>
* (done: 0.113u2) <strike>push more options into the code to reduce OSD burden</strike>
* (done: 0.113u2) <strike>change auto_bitmap to not use allocator</strike>
* (done: 0.114) <strike>move cleanup tool into tools</strike>
* (done: 0.114u2) <strike>move fronthlp.c into common code</strike>
==Outputs==
* (done: 0.112u2 by Bob Seidel) <strike>add pause notifications</strike>
* 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==
* (done: 0.115u1) <strike>astrocde.c</strike>
* (done by Zsolt) <strike>vicdual.c</strike>
* write tests to figure out 3dfx mipmapping algorithm
* cliffhgr.c:
** add proper latching/buffering to ensure no dropouts
** fix 9928a emulation to match [http://www.sventech.com/~dereks/gallery2/main.php?g2_view=core:ShowItem&g2_itemId=2499 screenshot]
* Cubo CD32 (Amiga AGA-based)
* 3DO-based systems
==Documentation==
* write description for how to compute crosshair parameters
==mamedev.org==
* (done) <strike>source code browsing (a la MAWS but with proper spacing)</strike>
==Other Stuff==
* (done 0.113) <strike>add regression testing tools to the tools directory</strike>
* look into inpout32.dll for hooking up ZVG to WinMAME

Revision as of 21:30, 10 January 2008

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

General

  • Integrate proper localization (work with MAMEPlus!)
  • Compile with UNICODE=1 for all builds (will deprecate Windows 9x support)
  • define & implement more general pipe-like interface for external communication
  • change OSD sound interface so it creates sound "targets" much like render targets
  • allow setting of realtime clock to fixed value from command line for regression testing

CPUs/Timing

  • universal DRC backend
    • define common IR that all DRCs compile to
    • write backends for x86/x64
    • also write canonical "C" interpreted backend, designed to be run in parallel
    • update MIPS3 DRC to the new backend
    • look into TMS32031 and/or ADSP support
  • add CPUINFO_INT_CLOCK_MULTIPLIER
  • automatically respect CPUINFO_INT_CLOCK_DIVIDER/MULTIPLIER and fix all drivers
  • investigate and fix TMS32031 calculation bug
  • replace cpuexec.c and timer.c with more generic scheduler
  • add MDRV_SCANLINE interrupt generators
  • change MDRV_CPU_VBLANK_INT to specify a screen number
  • change MDRV_INTERLEAVE to specify interleave as per-second, not per-frame
  • 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.

Debugger

  • convert to using pipes
  • separate debugger from core application
  • add timer window
  • add CHD viewer window

Devices

  • create new generic device model based off of sndintrf
    • devices are specified in machine driver with tags, just like sound cores (except tags are required)
    • generic device I/O handlers that can be referenced via new memory map primitives
  • convert sound cores into generic devices
    • how does routing work?
    • fix routing anyways

3D

  • Add texture management to poly.c
    • Accepts array of 8 32-bit parameters
    • Hashes those parameters and performs lookups
    • Automatically manages via LRU
  • Pre-compute textures in voodoo at upload time and remove on-the-fly format conversion for a bit more speed

Video

  • fix drawgfx/palette global palette-ness
  • render crosshairs in UI layer not in game containers
  • game-specific crosshair bitmaps and sizes
    • user selectable?
  • fix crosshair rendering to understand scale and offset factors
  • font improvements:
    • 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?
  • add laserdisc video viewer in F4 menu if A/V CHD is attached
    • support straight playback with frame info
    • single step forward/back

Outputs

  • convert output system to use pipes
  • add ability to get XML description of current game

Drivers

  • write tests to figure out 3dfx mipmapping algorithm
  • remove use of MDRV_VBLANK_INT(count) where count > 1
  • cliffhgr.c:
    • add proper latching/buffering to ensure no dropouts
    • fix 9928a emulation to match screenshot
  • 3DO-based systems

Documentation

  • write debugger documentation
    • Debugger basics (covers the main window, the keyboard shortcuts, and a couple of very basic commands)
    • Viewing memory (covers disasm/dump, memory and disassembly windows)
    • Breakpoints and watchpoints (covers basic breakpoints and watchpoint usage)
    • Expressions (covers using expressions to change values and the whole expression syntax)
    • Advanced breakpoints and watchpoints (covers conditionals, actions, etc)
    • Other techniques (covers tracing and other things)
  • write description for how to compute crosshair parameters

Other Stuff

  • look into inpout32.dll for hooking up ZVG to WinMAME

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);