Menu

Tree [4ab6ef] v0.16 /
 History

HTTPS access


File Date Author Commit
 .settings 2014-01-13 Arno Puder Arno Puder [f4b608] Begin to migrate to sdltrs
 assets 2014-07-04 Arno Puder Arno Puder [58d405] Added Another Man's Treasure fonts for Model I ...
 doc 2014-06-12 Arno Puder Arno Puder [11dedf] Update screenshots
 etc 2014-11-22 Arno Puder Arno Puder [3c482d] Emit sound on native layer via OpenSL
 jni 2014-12-01 Arno Puder Arno Puder [4ab6ef] Flush audio queue when unmuting
 libs 2014-08-13 Sascha Haeberling Sascha Haeberling [74613e] Adding foundation for audio support.
 res 2014-11-16 Arno Puder Arno Puder [03d252] Use AlertDialogUtil for creating alert dialogs
 src 2014-12-01 Arno Puder Arno Puder [aaa257] Disable Cast
 var 2014-11-15 Arno Puder Arno Puder [bc0773] Remove space
 .classpath 2014-08-13 Sascha Haeberling Sascha Haeberling [74613e] Adding foundation for audio support.
 .cproject 2014-11-22 Arno Puder Arno Puder [3c482d] Emit sound on native layer via OpenSL
 .gitignore 2014-11-08 Sascha Sascha [6b7f4b] Add .externalToolBuilders to .gitignore.
 .project 2013-02-28 Arno Puder Arno Puder [68736f] Initial version
 AndroidManifest.xml 2014-11-22 Arno Puder Arno Puder [3c482d] Emit sound on native layer via OpenSL
 LICENSE 2013-04-11 Arno Puder Arno Puder [458f51] Add Apache 2 License
 README.md 2014-11-05 Arno Puder Arno Puder [fcbba3] Update setup instructions
 proguard-project.txt 2013-02-28 Arno Puder Arno Puder [68736f] Initial version
 project.properties 2014-06-30 Sascha Haeberling Sascha Haeberling [c4642d] Add basic chromecast functionality, including a...

Read Me

TRS-80 Emulator for Android

This is the first version of a TRS-80 Emulator for Android.
It is based on sdltrs that is itself derived from the popular xtrs
emulator originally written for X-Windows. This port adds a layer for Android.

Compiling from Source

It is recommended to use Eclipse for compiling the sources. You will
need to install the Android SDK and NDK. You should also install the
accompanying ADT plugin for Eclipse (be sure to check "NDK" when
installing the ADT for Android in Eclipse).

Next clone the TRS-80 Emulator sources via git:

git clone git clone git://git.code.sf.net/p/trs80/code trs80

The TRS-80 emulator depends on two Support Libraries
(v7 appcompat and media router libraries) as well as the
Google Play Services.
In order to make the project independent of user-specific directory layouts,
those Libraries need to be copied to the parent directory where the emulator
sources were cloned:

cp -r <android-sdk-root>/extras/android/support/v7/appcompat/*
      <parent-dir-of-git-repo>/android-support-v7-appcompat/
cp -r <android-sdk-root>/extras/android/support/v7/mediarouter/*
      <parent-dir-of-git-repo>/android-support-v7-mediarouter/
cp -r <android-sdk-root>/extras/google/google_play_services/libproject/*
      <parent-dir-of-git-repo>/google-play-services_lib/

Note that these libraries need to be imported as Android Library projects in
Eclipse, otherwise there will be compile errors with the TRS-80 emulator
sources.

At this point you should be able to compile the sources. Note that running
the TRS-80 emulator inside the Android emulator is very slow and Chromecast
is also not supported by the Android emulator. It is recommended to use a real
device for testing and debugging.

Quick Overview

The original C sources of sdltrs reside in the 'jni' folder. The Android
layer uses JNI (Java Native Interface) to access the C sources from
Java. Whenever I made a change to the original sdltrs sources, I used
#ifdef ANDROID to annotate my changes. This should make it easy to see
what was changed.

Some of the key files:

  • MainActivity.java: main entry point of the Android app.
  • EmulatorActivity.java: this is the Android activity that
    runs the emulator.
  • XTRS: this class is the gateway to the C sources of xtrs/sdltrs.
    All down-calls and up-calls to the C code will go through
    this class. The native methods declared in XTRS are implemented
    in jni/native.c. Folder jni/SDL contains a SDL emulation to
    facilitate integration of the sdltrs sources.
  • Hardware: defines the hardware characteristics of the TRS machine
    (e.g., TRS Model, disks to be mounted, etc). An instance of class
    Hardware is passed to XTRS.init() to initialize the native layer.
  • keyboard_original.xml: Android XML layout that defines the
    original Model 3 keyboard layout.
  • Key.java: the accompanying Android custom widget that implements
    the behavior of one key of the keyboard.

Details of the keyboard

The emulator features different keyboard layouts (original, compact, etc).
The XML layout resources can be found in res/layout/keyboard_*.xml. Class Key
implements the behavior of one key of the keyboard. Class Key is a custom
Android widget that is referenced from the aforementioned XML layout files.
Whenever the user 'clicks' on a key, class Key uses the KeyboardManager to
add a key event which will eventually be delivered to xtrs via SDL_PollEvent.
File res/values/attrs.xml defines an enum for all the keys available on a TRS
machine. The TK_* constants in class Key mirror the definitions in attrs.xml.
When a user presses a key, the TK_* ID needs to be mapped to a
SDL_KeyboardEvent. Specifically, the SDL virtual key code and the unicode
character are needed to populate SDL_KeyboardEvent. This mapping is achieved
with file res/xml/keymap_us.xml. Once the virtual key code and unicode
character are determined, KeyboardManager uses XTRS.addKeyEvent() to fill a
key buffer in the native layer.

External Resources

The following resources have been used for this project:

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.