Apple2ix Android

Available on the Google Play Store as (A2IX).

Hey there, you really should try out the beta version!

Please help! I am actively looking for translations of the menus into your native language so I can release the emulator in your country! Please get in touch with me through the GitHub development page.

Reporting bugs and crashes

Apple2ix itself may detect that a previous session crashed and it will ask you whether you would like to email a crash report to me. I encourage you to do this as it helps me improve the sofware. I use this information according to the privacy policy.

You may also report bugs or request new features on the GitHub development page.

Getting new disk images

Apple2ix will read any .dsk, .do, .po, and .nib format disks, even ones with a .gz extension. You can find software that has been preserved for posterity [at various locations on tEh Intarwebs, but including] :

Copying disk images to Apple2ix

Apple2ix will read disk images from your primary storage (/sdcard/ path) and from extra SD card storage (for devices running Android 4.4 KitKat or better).

Saving and restoring emulator state

Apple2ix has a feature to quickly save and restore emulator state to a file in internal storage (/sdcard/apple2ix/emulator.a2state ). While Apple2ix only supports saving to the emulator.a2state file via the quick save feature, you can actually choose and load any file with extension .a2state.

You can therefore use an Android file manager app to backup/rename emulator.a2state for important save points, (e.g. when progressing through a difficult arcade game). Then at a later point you can choose to reload that state through Apple2ix’ file chooser.

Touch joystick operation

Apple2ix has a configurable emulated touch joystick that generates virtual joystick movement axis and button events for consumption by the emulated software.

This is meant to feel as if you are using a gamepad, with the movement axis on the left side of the touch screen, and the two buttons are on the right side. (This is re-configurable in the joystick settings menu).

Touching down on the axis side of the touch screen zeros the joystick axis; dragging your finger moves the joystick in the direction of your drag. Releasing your finger zeros the joystick axis again.

Tap and swipe gestures on button side of the touch screen may configured to fire a particular joystick button, both, or none.

The default button settings are:

  • Tap : fire button 0
  • Swipe down : fire button 1
  • Swipe up : fire both buttons

Note that if a particular emulated game only uses button 0, you can change the behavior to always fire that button.

Keypad joystick customization

Back in the early 1980s, many Apple ][ games were designed to work better or solely with keyboard input. This is obviously not a viable option today on your Android phone with a software keyboard. Apple2ix provides a configurable “emulated keypad touch joystick” that works the same at the touch joystick, but generates keystrokes rather than joystick axis/button events.

Most early games would usually use well known keys for the movement axes, such as A, Z, , (the left and right arrows), or I, J, K, M. Often the “fire button” was mapped to the spacebar. Note that you often need to use a bit of trial-and-error to determine what the inputs are for a particular game.

The keypad configuration menu contains a list of well-known default settings as well as the ability to create a custom configuration.

NOTE: keypad touch joystick support is still preliminary. The timing for some games is buggy, and fixing this is slated for a later revision of the emulator…

Hardware Keyboard Support

Apple2ix on Android is designed to work with a physical keyboard and has been verified working with both Bluetooth keyboards and Chromebook keyboards.

Software Keyboard Support

For most Android devices without an attached physical keyboard, Apple2ix provides a custom on-screen soft touch keyboard. This keyboard is rendered as an overlay on top of the emulated screen and should hopefully be self-explanatory in its use.

The ctrl key is the only “sticky” key that stays engaged while you type other keys. If you are typing and not getting what you expected, make sure the ctrl key is not still highlighted.

Current limitations of the software keyboard:

  • Key repeat not implemented (keep tapping)
  • No way to generate Ctrl/AppleKey/Reset sequences. Instead you can generate these resets from the main popup menu.

Custom Keyboard Layouts

The emulator exposes alternate keyboard layouts as files with the .kbd.json extension in the apple2ix folder in your primary storage (/sdcard/apple2ix). Use your favorite text editor to modify these keyboard layouts. Hopefully the JSON format is fairly self-explanatory. 😉

You may wish to edit the keyboard layout if you are playing an RPG-style game where some key input is required. A custom layout allows you to have a keyboard optimized for a particular game that does not obscure important underlying visuals.

A few alternate formats are supplied in the emulator. (And now you know what my favorite old-school RPGs are! =)

Audio tuning

Low-latency streaming audio has historically been problematic on Android, especially with older 2.3.3 “Gingerbread” devices. If you hear excessive audio glitching, you should increase the “Audio latency in secs” setting.

The source of the audio system is largely inspired by Applewin’s implementation. In particular I am indebted to their project for the Mockingboard implementation.

Battery conservation

If you are concerned about maximizing battery life, you may wish to experiment with the following settings:

  • Turn off Mockingboard emulation in the audio settings. If you are not using disk images that require Mockingboard, this is a safe adjustment.
  • Turn the video display mode to Monochrome, Color, or Interpolated modes. This may give you some modest savings over the Color Monitor and TV modes.
  • Enabling airplane mode on your device will also substantially save battery

A bit of experimentation is required for your particular device. Apple2ix has been designed to run efficiently, so you may not need to make any adjustments.

Performance tuning

Low-end Android devices may have difficulty running the emulator. If the emulator feels laggy or the audio is “glitchy”, you may try to adjust various device and emulator settings.

Adjust these in general device settinsg:

  • Turn ON airplane mode (disable all networking)
  • Kill all other background apps

Adjust these features in the Apple2ix settings menus:

  • Disable Mockingboard audio
  • Increase the “Audio latency in secs” setting
  • Change the Video display mode to Monochrome, Color, or Interpolated
  • Disable the touch menu buttons in the top screen corners
  • Turn off joystick axis/buttons visibility
  • Turn keyboard-visibility-when-inactive to zero
  • Turn off keyboard click sound
  • Turn off keyboard 2x (or larger) glyph scaling

Building the emulator from source

You will need Android Studio and the Android NDK version r13b to build and run the source.

  • Pull requests should be made against the android_develop branch
  • Pull requests should be minimalist and conform to the coding style of the file(s) changed
  • Pull requests that are major refactors are not likely to be accepted
  • Pull requests should include tests if possible
  • Pull requests should not break existing tests
  • Pull requests should work on older API 14 Android 4.0 “ICS” devices, both ARM and x86 architectures
  • Pull requests should be resilient on devices without external storage (or without permission to external storage)
  • If you would like to iterate on more than simple bug fixes, language translations, or simple feature improvements, please coordinate with me through GitHub first, thanks!