Virtual TI v2.0 alpha 4
Written by Rusty Wagner

Requirements
* A Pentium or better running Windows 95 or higher, or Windows NT 4.0
  or higher

This emulator will run ROMs from the TI-82, TI-83, TI-85, TI-86,
TI-89, TI-92, TI-92 II, and/or TI-92 Plus calculators.

Notes:
* If anyone knows how to use Win32 API calls to drive a parallel link,
  help would be greatly appreciated.  I don't have a parallel link myself,
  so I haven't been able to test anything.

A menu containing the functions of the emulator can be obtained by right
clicking on the LCD.

Features:
* ROM versions are automatically detected
* Switch between ROM versions without restarting the emulator
* Archive memory support for TI-89 and TI-92 Plus
* Send files to the calculator
* Receive files from the virtual calculator
* Use a TI Graph-link cable to connect to a real calculator
* Connect two instances of the emulator with a virtual link
* Save and load the state of the calculator.  Any changes to the Flash
  ROM (i.e. archived variables) will be included in the state.
* 4-level and 7-level grayscale support
* Bitmap of the calculator with clickable buttons
* Screenshot feature which saves to a BMP or to the clipboard
* Option to emulate at either the true speed of the calculator or the
  fastest the computer can handle.
* The letter keys are aliased to produce their respective letters.
  No need to press the Alpha key, just type.
* A full-featured graphical debugger
        * Code disassembly pane.  ROM call addresses are replaced by the
          name of the ROM function (86, 89, and 92+ only).
        * Code breakpoints.  Does not modify memory, so they are completely
          transparent.
        * Data breakpoints can be set on a single byte, word, or dword, or
          a range of addresses.
        * Set a breakpoint on entry to an assembly program automatically
          (86, 89, and 92+ only)
        * View and change the value of the registers
        * Hexadecimal memory view/edit pane with search capability
        * On the 89/92(+), a handle pane which lists all allocated handles.
          Allows user to jump directly to the start of the handle within
          either the disassembly pane or the memory pane.
        * On the 82-86, a variable pane which lists all variables and their
          types.  Allows user to jump directly to the start of the variable
          within either the dissassembly pane or the memory pane.
        * Real time updates to the LCD, even with grayscale
        * Log reads/writes to memory or changes to individual bits

Limitations of this alpha version:
* ROM dumper is still restricted to the TI-89 and TI-92+
* 8-level grayscale on the TI-86 doesn't work properly yet
* Breakpoint on program entry works only on the TI-86, TI-89, and TI-92+
* Key redefinition is not yet implemented, although the program should now
  work on international keyboards without it
* Receiving of backups from the virtual calculator is not implemented
* Log link port send/receive is not implemented
* Both virtual link and real calculator link are very slow

This emulator requires a ROM image from your real calculator.  I will
not send you any ROMs.  If you have a TI-89 or TI-92 Plus, you can
use the built-in ROM dumper.  If you have anything else, several dumping
programs are available at www.ticalc.org.

Once you obtain a ROM dump, place it in the same directory as VTI.EXE
(this is done automatically if you use the built-in dumper).  Make sure
it has the extension .rom, .bin, or .dmp.  The file name may be anything
(the calculator and version number are automatically detected).  Any .tib
Flash ROM upgrades will also be recognized if placed in the same directory
as VTI.EXE.  The latest version will be used by default, but you may
revert to an earlier version from the emulation mode dialog.

On the TI-92, these are the PC key equivilents that are not obvious:
F9 - Apps
; - Theta
Tab - Store
Left ctrl - Diamond
Left alt - 2nd
[ - (
] - )
Caps lock - Hand/Lock
` - Mode
\ - Ln
Ins - Sin
Home - Cos
PgUp - Tan
Del - Clear
Scroll lock - On
Num Pad Enter - Enter below cursor pad

On the TI-89:
F6 - Catalog
F9 - Apps
Tab - Store
Left ctrl - Diamond
Left alt - 2nd
[ - (
] - )
Caps lock - Alpha
` - Mode
\ - |
Ins - EE
Del - Clear
Scroll lock - On

On the TI-82 and TI-83:
F1 - Y=
F2 - Window
F3 - Zoom
F4 - Trace
F5 - Graph
Esc - Mode
Caps lock - Alpha
` - X,T,theta
= - Stat
F6 - Math
F7 - Matrx
F8 - Prgm
F9 - Vars
PgDn - Clear
End - x^-1
Insert - sin
Home - cos
PgUp - tan
Num lock - ^
; - x^2
[ - (
] - )
' - log
\ - ln
Tab - Store
Scroll lock - On

On the TI-85 and TI-86:
Esc - Exit
` - More
Caps lock - Alpha
Ctrl - x-var
F6 - Graph
F7 - Table
F8 - Prgm
F9 - Custom
PgDn - Clear
' - log
Insert - sin
Home - cos
PgUp - tan
Num lock - ^
\ - ln
End - EE
[ - (
] - )
; - x^2
Tab - Store
Scroll lock - On


To send a file to the calculator, press F10.
To enter the debugger, press F11.
To bring up the emulation ROM version screen, press F12.


The debugger is for the most part the same as any other graphical debugger.
One thing to note is the color of the lines in the disassembly pane.  Red
means breakpoint, green means current PC, and blue means currently selected.
If a line is in more than one state at the same time, the colors will be
combined.  For example, a breakpoint that is selected will combine red and
blue, making magenta.  Also, pressing G in either the disassembly or memory
pane will allow you to jump to a specific address.  Registers can be changed
by clicking on them.


The source code to the emulator can be found on the Virtual TI web page at
http://89emu.acz.org, and requires C++Builder 3 to compile.  You may use the
68K and Z80 emulation core and disassembler as long as you mention its
original source, the Multiple Arcade Machine Emulator, and provide the
address where one can obtain the entire distribution (its web address is
listed below).  Any of the other code can be used as long as you state that
it came from this program.

You may not sell the binaries or source to this program.  They are free and
will always be free.  This program cannot be distributed with any copyrighted
ROM images (independently developed replacement operating systems are OK).


Questions?  Comments?  Bugged?  E-mail me at river@gte.net

For updates, visit the Virtual TI web page at http://89emu.acz.org
Visit the Assembly Coders Zenith web page at http://www.acz.org

The 68K and Z80 emulation cores are from the Multiple Arcade Machine Emulator.
The source and binaries of the entire M.A.M.E emulator can be found at
http://mame.retrogames.com/


Special thanks to:
Nick Caldwell for his scan of the TI-83, TI-85, and TI-86
Matt Johnson for his information on the TI-86
Alan Bailey for his information on the TI-86 ports
Pascal Bouron for his information on the TI-85 link protocol
Tim Singer for his information on the TI-86 link protocol
Per Finander for his information on the TI-82/85 link protocol
David Ellsworth for his information on the TI-92


History:
May 1, 1999:        Released version 2.0 alpha 4
                    Fixed bug in file sending
                    Added images for the 83 and 85, updated 86 image
                    Fixed bug in 89/92(+) exception handling
                    Fixed bugs in keyboard handling
April 18, 1999:     Released version 2.0 alpha 3
                    Faster than previous version
                    Added screen shot support
                    Added the ability to recieve from the virtual calculator
                    Added virtual linking
                    Fixed bugs when Windows is set to use "large fonts"
February 19, 1999:  Released version 2.0 alpha (restricted release)
                    Added support for TI-82, TI-83, TI-85, and TI-86
                    No longer uses DirectInput (now Windows NT 4 compatible)
January 10, 1999:   Released version 1.01 beta
                    Fixed ROM dump problem with COM ports other than 1
                    Added support for multiselection in send dialog box
                    Restriction to actual speed is now an option
                    Added ability to redefine keys for non-US keyboards
December 24, 1998:  Initial public release (version 1.0 beta)

