- Move touch-handling code for "regular" touch joystick into separate file
- Add new touch-handling code for "keypad" touch joystick. This is a somewhat complex state-machine to determine
which key to press depending on a full keypad rosette.
- Adds a callback to vm.c to hook into keyboard read callback. Allows us to immediately queue the next key if the
keypad touch joystick is long-pressed for either axis or button keys.
- Now signals TD thread on each touch event that resulted in a change to the buttons.trackingIndex or a change to
the chosen button (buttons.touchDownButton, buttons.northButton, or buttons.southButton)
- Uses mutex (un)locking to avoid races around buttons.trackingIndex and chosen button
- Adds an equal delay on TD thread loop finish to ensure the touchDown/touchUp or touchDown/move/touchUp event
sequence is the same basic duration as received
- Previously a touch down event would trigger a joystick button, but now this slight delay in processing allows us
to discard this if the user really issued a tap-move combo
- Ensures various shutdown codepaths (interface, cpu/audio, main/video, ...) run on proper thread(s)
- Actually now runs the CloseAL() code
- Try to ensure all detached threads exit ... seems to help keep Valgrind happy =)
- Enables choosing touch keyboard or touch joystick
- Enables increasing/decreasing speed
- Enables opening main popup menu
- Also migrates all gesture responsibility away from Java side of things
- 'animation' was too constrained a name to what these do, so switch to the overloaded term 'node' ;-)
- Touch handling is no longer the sole purview of the touchjoy, (in prep for touchable HUD elements)
- menu/HUD creation functions moved to better location and renamed
- CPU change animation now default displays on desktop Linux (exercise common HUD codepaths with mobile)
CPU speed animation touch-ups, and enable building for desktop
Rename/shuffle animation declarations and code
Refactor backend video system to be a dynamically initialized module
Basic CPU speed texture animation works on desktop Linux and Android
Use static pixel buffers to avoid malloc/free churn
Improve CPU animations
First cut at CPU speed message animation
Refactor some of the classic interface functions to be potentially reusable elsewhere
Squashed commit of the following:
REFACTOR : fix comments, logging, and rename some variables
REFACTOR : fix up some commentary, clean deadc0de
REFACTOR : mostly fix all the audio glitches
- amplitudes of samples are gradually shifted to zero when speaker has fallen silent
- simplifies speaker state machine
- fullspeed mode only enqueues quiet samples
REFACTOR : fix up a number of other functions and comments
REFACTOR : clean up code to submit normal speed wave buffer to OpenAL
Move some initializations to the cpu_thread()
REFACTOR : properly reset the speaker cycles access counter so we don't underflow and assert
REFACTOR : should never get a split buffer from our soundcore implementation
Fix warning from gcc ... static array size needs to be computed from integer values
REFACTOR : gcc (but not clang) complains about these, so just make them preprocessor defines
REFACTOR : use unsigned long long because we don't actually care that this counter is 64bit
REFACTOR : remainder_buffer and miscellaneous tweaks
- Adds implementation commentary to document remainder_buffer purpose
- Also adds sample average for square wave boundary in case where remainder_buffer not used (whole-sample boundary)
- Variable renaming and code shuffling
REFACTOR : do not dynamically alloc remainder buffer
- Never attribute to cache-coherancy bugs what is a simple thread race =P
REFACTOR : comments and whitespace
REFACTOR : rename public speaker API functions
REFACTOR : clean up public speaker API
REFACTOR : tabs to spaces
REFACTOR : moar deadc0de clean up and renaming
REFACTOR : remove deadc0de paths from soundcore
REFACTOR : fully excise soundtype stuff now that we only support soundcard output
Move a file static to function scope
REFACTOR : rename more variables and remove deadc0de
REFACTOR : samples_buffer naming and change to explict int16_t
REFACTOR : removed deadc0de and shuffled code locations
REFACTOR : remainder buffer naming and clarify type
REFACTOR : move joystick timing to VM module and remove header visibility
REFACTOR : clarify speaker variable name
REFACTOR : clarify cycle counting codepaths
REFACTOR : VBL/timing interfaces
- eliminates passing around a common global
REFACTOR : names and comments
HACK around volume issue
REFACTOR : rename speaker feedback variable
REFACTOR : rename global total cycle count
REFACTOR : rename a constant
Fix test builds
REFACTOR: rename to is_fullspeed
REFACTOR : local variable naming changes
REFACTOR : migrate cycle timing variables to correct location and remove header visibility
Allow fullspeed codepath to update speaker
REFACTOR : remove deadc0de paths in prep for cleanup
REFACTOR : speaker now manages its own VM entry point
- automatically adjusts cpu timing to fastest if drive motor accessed recently and no audio/video
- TODO: audio output clipping issue when (un)pausing audio outpu
* Removes Linux-specific joystick handling
* Adds cross-platform GLUT joystick handling; Caveats:
- GLUT is not robust to joystick hot plugging like my old Linux-specific code was. (Fix should be made in the
GLUT driver and pushed upstream if we really care)
- Deprecated X11 renderer now can only use keypad joystick
* Based on NSOpenGLView and Apple's GLEssentials sample code
* CVDisplayLink- or NSTimer-driven rendering
* Works in window or fullscreen mode on Mac OSX Lion or later
TODO FIXME:
* Breaks Linux/Posix build
* Cocoa menu interfaces
* Key/mouse/joystick/gamepad handling
* GLUT sends the raw ascii ctrl-values, so we merely send them along in a "cooked" mode
+ It may be that some strange ctrl combinations (saw CTRL-~ or CTRL-ESC) are not properly handled this way, but
... not sure what can be done about this (doesn't seem to be a way to force glut to send us the non-cooked keys)
* Legacy X11 input continues to be sent as raw values (which arguably is a better way)
* TIL GLUT constants for certain special keys map to ascii (for example GLUT_KEY_ALT_L == 116/'t') ... of course
this was playing hell with the emulator's key input handling
* Now we directly convert regular keys rather than pushing them down the special path
* Also separateds CAPS_LOCK hack into its own inline function
* Added an option to set caps lock (basing it off X11's value is not working well)
* Added a reboot emulator option (because Ctrl-Alt-End is potentially mapped by the X11 WM. ahem, Xfce...