Aaron's To-Do List
From MAMEDEV Wiki
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
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
Video
- (done 0.113u1)
move throttling and frameskipping code into the core - (done 0.115u1)
add support for separate visible versus blanking rects - 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
- (done: 0.118u1)
add OSD-specified max frame rate and do intelligent frameskipping to not go above it - (done: 0.119)
add code to not throttle if the video doesn't change? (maybe only for 1 frame) - (done)
change some page-flipping drivers to return UPDATE_HAS_NOT_CHANGED if no front buffer access and no page flip since last frame - 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?
- (done: 0.112u1)
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
- change OSD sound interface so it creates sound "targets" much like render targets
- (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
- (done: 0.118u5)
add generic palette object - 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
- (done)
finish work on 64-bit DRC engine - (done)
write 64-bit MIPS3 DRC - investigate and fix TMS32031 calculation bug
- (done: 0.121u1)
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
- 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)
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 - (done: 0.114)
move cleanup tool into tools - (done: 0.114u2)
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
- (done: 0.115u1)
astrocde.c - (done by Zsolt)
vicdual.c - write tests to figure out 3dfx mipmapping algorithm
- cliffhgr.c:
- add proper latching/buffering to ensure no dropouts
- fix 9928a emulation to match screenshot
- Cubo CD32 (Amiga AGA-based)
- 3DO-based systems
Documentation
- write description for how to compute crosshair parameters
mamedev.org
- (done)
source code browsing (a la MAWS but with proper spacing)
Other Stuff
- (done 0.113)
add regression testing tools to the tools directory - look into inpout32.dll for hooking up ZVG to WinMAME