========================================================================
News (latest changes) for the Palm OS Emulator
Copyright (c) 1998-2000 Palm Computing, Inc. or its subsidiaries.
All rights reserved.

Please send bug reports, comments, suggestions, etc. to devsupp@palm.com
========================================================================

========================================================================
	REVISION HISTORY

	Starting in 2.1d25 (and backdated to 2.1d24) I'm giving credit
	to the person or people responsible for convincing me to fix a
	bug or add a feature, in some cases even providing the source code
	for the bug or feature.  These people's names appear in []'s.

	See the file Credits.txt for a list of people who have submitted
	actual changes to the project.
========================================================================

Changes for 3.0a4 (1/28/00)
---------------------------
*	Yow...time to start updating those copyright statements...again...
	and this time there's a lot more files!

*	When installing a .prc file, check for duplicate resources.

*	Provide better error messages when something goes awry while
	installing an application or database.

*	Added support for Palm IIIe and Palm Vx:

	- Added as items to Device menu.
	- Added code to save those devices as preferences.
	- Added as -device parameters on command line ("PalmIIIe" and "PalmVx").
	- Added and mapped in appropriate skins.
	- Added new internal type IDs.
	- Corresponding tweaks to Binder application.
	- Made Palm IIIe return same device ID as Palm IIIx.
	- Made Palm Vx return same device ID as Palm V.

*	(Mac) Updated to GUSI 2.0.1.  This has the following benefits:

	- Adds support for socket options.
	- Based on Open Transport instead of Mac TCP.
	- Fixes problem with menus sometimes getting disabled (the
	  old GUSI would eat up "resume" events, so PowerPlant didn't
	  know to re-enable the UI).

*	Fixed problem where Poser's heap walking routines were vulnerable
	to odd master pointers. [Mike Chen]

*	Gremlins wasn't generating and posting hard button events properly.
	[Steve Lemke]

*	(Unix) Fixed problem with trying to delete a skin with a stale
	pointer.  [Ben Darnell]

*	Updated ROM Transfer.mcp to CodeWarrior for Palm OS R6.

*	Support for the gdb debugger has been built-in for quite some time
	(since 2.1d22 or so).  Here, finally, are some instructions for
	interacting with it.  [Ben Thomas]

	- Build your app.  Be sure to compile and link with -g (e.g.,
	  "gcc -g ...")
	- Start Poser.
	- Load your app into Poser.
	- Start gdb, loading your application's symbol table (e.g.,
	  "gdb myApp").
	- Type "target pilot localhost:2000" to gdb.
	- Start your app on Poser.
	- Wait for gdb to see the initial breakpoint and prompt you.
	- Start debugging.

	Note that you no longer need to use gdbpanel or gdbplug if you were
	using those with earlier versions of Poser, Copilot, or xcopilot.

*	Tweaks to the scripting samples: [Flash Sheridan, Steve Haneman]

	- Wait() no long automatically resumes.
	- Added seperate Resume function
	- Since wait no longer resumes, added TapPenSync, and TapButtonSync
	  which automatically call Wait and Resume at the beginning and end.
	- Fixed some warnings that showed up when running Perl -w.
	- Added MemPtrSetOwner, WinDisplayToWindowPt, WinWindowToDisplayPt.
	- In TapButton, call WinWindowToDisplayPt.
	- In EmRPC, added support for Coord type.

*	Internal change: encapsulated all device-specific information in an
	EmDevice class.  This should make it easier to add new devices,
	since all the information is now in one place.

*	Stack overflow checking is back (cf 2.1d27)!  Whenever it looks
	like something is assigning a value to the stack pointer register,
	Poser marks the memory block that pointer is in as a stack.  Then,
	when the stack pointer is decremented for any reason, it is compared
	to the low end of the memory chunk.  If it falls below, Poser
	displays a fatal error dialog.  If the stack pointer is just getting
	close without actually going over, Poser will display a warning.

*	Fixed another case of Gremlins going to sleep on the job.  Gremlins
	normally posts new random events when the system calls EvtGetEvent
	and there's nothing to return, resulting in SysDoze being called.
	Most of the times, Gremlins will post an event and return from
	EvtGetEvent.  In the cases it doesn't, it forces EvtGetEvent to
	return a nil event.  However, if Gremlins was posting a Shakespeare
	quote to a form field, and the form field was full, and there was a
	non-empty selection, there was a 33% chance that neither an event
	would be posted nor a nil event returned.  This resulted in the
	application having nothing to do (and so SysDoze was called) and
	Gremlins thinking its job was done for the moment and putting itself
	into a "do nothing" state. [Scott Maxwell]

*	(Windows) When reloading a .psf file, fixed a bug that prevent the
	Gremlin Control Window from being reshown if the session file had
	been saved while a Gremlin was running. [Scott Maxwell]

*	(Windows) Fixed a problem with relocating the ROM file that a .psf
	file reference when that ROM file wasn't where it was supposed to
	be, but it *was* in the same directory as the .psf file.

*	(Unix) Rolled in modifications for FreeBSD. [John Ludwig]

*	(Unix) Properly recognise X options such as -display and -geometry.
	[Eric House, John Marshall]

*	Reset the Dragonball timer registers to a consistant state before
	starting a Gremlin.  This gives more consistant results.  HOWEVER,
	any application that is dependent on the time in any fashion may
	still have consistancy problems when running Gremlins (that is,
	starting Gremlin #0 at 3:00pm may give different results than when
	it is started at 5:00pm).  This is an issue that we'll try to
	address in a future release.

*	Switch from obsolete xxxChr names to new vchrXXX names in logging
	output.  Also, if a winExit/EnterEvent is associated with a form,
	print the name of that form in the logging output if event logging
	is turned on.

*	(Mac, Windows) Added Tracer support.  This is a facility for
	sending logging information to an external logging application. Palm
	applications use the following API for doing this:
	
	(All HostTraceOutput functions take a module identifier as their
	first parameter.  This parameter allows filtering out traces
	according to their origin.  Recognized modules are listed as error
	classes in SystemMgr.h.  Application should specify appErrorClass.)

		void HostTraceInit(void);
			Call once at the beginning of your application to
			initialize the logging facility.  Initiates a connection
			to the "tracing port" (specified in Poser's Tracing
			Options dialog box).

		void HostTraceClose(void);
			Call once at the exit of your application to release
			any host logging resources.

		void HostTraceOutputT(unsigned short, const char*, ...);
			Log a string of text to the tracing port via a
			"printf-like" facility.
			
		void HostTraceOutputTL(unsigned short, const char*, ...);
			Same as HostTraceOutputT with an additional line break.

		void HostTraceOutputVT(unsigned short, const char*, char* /*va_list*/);
			vprintf-like variant of HostTraceOutputT.

		void HostTraceOutputVTL(unsigned short, const char*, char* /*va_list*/);
			vprintf-like variant of HostTraceOutputTL.

		void HostTraceOutputB(unsigned short, const unsigned char*, unsigned long/*size_t*/);
			Send binary data to the tracing port.
	
	The functionality for sending the logging information to the
	external application is provided by a shared library (e.g.,
	"PalmTrace.dll" on Windows).  The external application can be any
	application that supports the open packet convention.  The one we
	provide is "Reporter". At the time of this writing, the shared
	library and external reporting application will be provided in a
	seperate archive. [Patrick Porlan, Regis Nicolas]

*	Internal changes: massive movement to make more source code cross
	platform.  New classes include:
	
	EmTransport: abstract base class representing a "pipe" between two
	entities.

	EmTransportSerial: a pipe based on serial communications.  Serial
	port emulation (the facility that allows Palm OS Serial Manager
	calls to pass thru to and from the host serial port) rewritten to
	use EmTransportSerial.

	EmHostTransportSerial: class with different implementations on
	different platforms in order to provide platform specific
	functionality.

	EmDlg: class to manage dialogs in a cross-platform fashion.

	EmROMTransfer: class that implements a rewritten ROM download
	facility, based on the new EmTransport and EmDlg classes.  Because
	the new ROM transfer code is based on EmTransport and not
	EmTransportSerial, this means that it may be possible to transfer a
	ROM using something other than the serial port in the future.

*	With the help of the previous changes, the ROM Download facility is
	now available on Unix.

*	Internal change: rewrote JPEG decompression routines to better
	modularize the source of compressed data and the destination of
	decompressed data.  This was done to better support JPEG images on
	disk in addition to those in embedded resources.

*	Added back the old generic case graphics.  These graphics are now
	used when the user selects "Default" in the Skins menu and dialog. 
	The nicer graphics are now identified with names like "Standard -
	English" and "Standard - Japanese".  Eventually, those nicer
	graphics will be moved to external files, reducing the size of Poser
	drastically and reducing download times.

*	Internal change: synced up with the latest shared Palm OS files.
	This change also included switching over to the new standardized
	types (UInt32, Int16, etc.) from the old hodgepodge of types (DWord,
	Long, Int, Byte, etc.).

*	ROM Transfer now downloads the entire ROM instead of just the "Big
	ROM".  It now is also a little more robust in light of some invalid
	fields in Visor ROMs.

*	(Windows) Added support for TRGpro devices.  This support comes in
	the form of supporting TRGnet's FAT File System library.  There is
	no TRGpro menu item in the device menu.  Instead, you can
	effectively turn any Palm Computing device into the equivalent of a
	TRGnet device by installing their FFS library -- which is what
	manages access to the CompactFlash slot -- onto the device.
	(Actually, all it needs is a stub library that you can get from
	TRGnet.) Poser will redirect calls from that library to the host
	file system.  The root of the emulated FFS directory hierarchy is
	specified by the FfsHome preference in Poser's preference file.  It
	can be a path relative to Poser's directory (e.g., "foo") or an
	absolute path (e.g., "c:\temp\foo").  The directory will be created
	if needed.  If no preference is specified, or the value is empty, or
	the specified directory could not be created, the root path defaults
	to Poser's directory.  There is currently no UI for setting the root
	of the hierarchy; you have to edit the preference file by hand.
	[Mike Walter]

*	Added Visor support.  Note that no USB support is provided in this
	release.  This means that Poser will not download a ROM from a
	device in a USB-connected cradle, nor will USB operations on the
	emulated Visor be redirected to any host facility.

*	Fixed problem with a too-small name buffer in profiling routines.
	Removed absolute address from generated function names, as that
	annotation interferes with the CodeWarrior Profiler's ability to
	unmangle C++ names.	[Catherine White]

*	(Windows) Removed "Close" menu item from "bound" versions of Poser
	(functionality duplicates "Exit"), and added "Save Screen". [Scott
	Johnson]

*	(Unix) Added temporary hack to get Unix menus working (many would
	result in the message that the system was not responding).  The
	solution implemented, however, is not optimal, and may lead to other
	problems.  Expect this area to receive more attention in the near
	future.  [Eric House]

*	Added sound emulation.  Be sure to enable this in the preferences
	if you want it.  [William F. Weiher III]

*	Fixed a couple of minor problems in the NetLib redirection code,
	one with accept() and another with the way select() timeouts were
	set up.  [bill pitore]

*	Fixed a problem with determining the baud rate established by the
	UART, with the result that serial communications on 20MHz devices
	(like the Palm Vx) didn't work.  [Alan Finke]


Changes for 3.0a3 (11/13/99)
----------------------------
*	Added Q&D PC checking.  On JSR, BSR, RTS, and RTE, I check what
	we're attempting to set the PC to.  Originally, I had a pretty beefy
	check that made sure the PC was in things like allocated, locked
	chunks.  However, that's expensive for now, so I backed off to
	checking that the PC was (a) even, (b) in RAM or ROM, and (c) not in
	low-memory.

*	The new UAE 0.8.10 code includes a new way to emulate ROR and ROL
	instructions.  Unfortunately, this new way runs afoul of a code
	generation bug in CWCPPC 2.3.1 (from CW 5.2) on the Mac.  Reverted
	to the old way of emulating those instructions until Metrowerks
	comes out with a compiler patch. [Catherine White]

*	(Unix) Added tweaks for Debian systems.  [Ben Darnell]

*	(Mac) Changed the way Poser determines whether or not to translate
	extended ASCII characters (those >= 0x80) into standard ASCII
	equivalents.  The new method should be more consistant and robust,
	based on whether or not the user is running a Japanese Palm OS and a
	Mac OS with the Japanese Language Kit installed.

*	The device could actually go to sleep while running Gremlins!
	Sometimes, Gremlins will input a long series of key events. 
	However, key events don't reset the auto-off counter.  Normally, the
	Palm doesn't care, since key events are a side-effect of pen events,
	which *do* reset the auto-off counter.  But Poser doesn't enter key
	events that way -- it inserts them directly with EvtEnqueueKey.  Now
	Poser calls EvtResetAutoOffTimer when it enters key events. [Steve
	Lemke]

*	(Windows) Sped up Gremlin Hordes a little.  There were some long
	delays while switching from one Gremlin to another due to trying to
	access the Gremlin Control Window from the wrong thread.  There's
	still a mysterious 2 second delay while switching Gremlins, but at
	least one cause of the slow-down is fixed.

*	Fixed problem with Gremlins and Palm OS 3.5 systems.  Gremlins
	calls WinGetWindowBounds to get the bounds of a window in which to
	generate pen taps.  WinGetWindowBounds returns the bounds of the
	window returned by WinGetDrawWindow.  On older systems, if the draw
	window were NULL, WinGetDrawWindow would return the display window.
	On 3.5, this has been changed in debug ROMs; WinGetDrawWindow can
	return NULL so as to force applications to make sure there is an
	established draw window.  Gremlins ran afoul of that change, and so
	now calls WinSetDrawWindow(WinGetActiveWindow()) before calling
	WinGetWindowBounds(). [Roger Flores, Steve Lemke]

*	In the event posting/receiving logging code, support the new Palm
	OS 3.5 events.

*	In HostFPrintF, support + and space as flags, and * as a minimum
	width field character. [Patrick Porlan]

*	Added Symbol 1700/1740 skin as an option for Palm III's.  This is
	*not* to say that Poser emulates symbol devices.  It only means that
	you can make a Palm III look like a Symbol device. [Ron Kupke]

*	Reformatted Gremlin Hordes log file to make it a little easier to
	find the error messages.  [Flash Sheridan, Catherine White]

*	Make a stronger effort to get the pen calibrated perfectly.  The
	original attempt (cf, 2.1d11) would occassionally only get us very
	close, which could lead to inconsistant Gremlin runs.

*	Fixed a bug in the UAE 0.8.10 code where a corrupt status register
	could get pushed onto the stack during an exception/interrupt and
	the previous instruction that had affected the Z CPU flag was a BCHG
	instruction that flipped the highmost bit from off to on (gee, how
	could we have missed *that*). [Catherine White, Stuart Malone]


Changes for 3.0a2 (11/05/99)
-----------------------------
*	Updated to UAE 0.8.10.  We were previously based on 0.8.3.  The new
	version fixes a few minor bugs (I never noticed them), perhaps
	speeds things up a little, but most importantly cleans up those 2000
	"unreferenced label" warnings you get when compiling with gcc!  OK,
	so now there are some "unused variable" warnings, but there are a
	lot fewer of them...

*	(Windows) The sequence of events involving saving a session when
	creating or opening a new one was completely broken.

*	(Windows) Added support from Palm Europe for their tracing tool.
	This tracing tool is a seperate application that receives tracing
	information sent via HostControl functions.  The documentation for
	these functions is not yet available.  Neither is the external
	application.  But they soon will be.  I just wanted to at least
	mention them so that people don't ask me about them if they see the
	new functions in HostControl.h.

*	(Unix) Modified Perl script that creates ResStrings.cpp.  It used
	to add the strings to a map object (so that they can be looked up by
	an ID number) by calling a function with about 2000 calls that
	looked like "map[id] = str;".  However, gcc would choke on this with
	optimizations turned on.  Now, that map addition is performed in a
	seperate function, and that function is called 2000 times instead.
	[Ben Darnell, Jon Fo]
