========================================================================
News (latest changes) for the Palm OS Emulator
Copyright 1998-1999 Palm Computing, Inc.

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.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.

*	(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.

*	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.

*	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]


Changes for 3.0a1 (11/04/99)
-----------------------------
*	Interim internal release dates:
		2.1d29.1	-	08/26/99
		3.0a1e2		-	09/14/99
		3.0a1e3		-	09/15/99
		3.0a1e4		-	09/16/99
		3.0a1e5		-	09/21/99
		3.0a1e6		-	09/24/99
		3.0a1e7		-	09/30/99
		3.0a1e8		-	10/08/99
		3.0a1e9		-	10/14/99
		3.0a1e10	-	10/19/99
		3.0a1e11	-	10/27/99

*	Rolled in Llamagraphics's profiling changes [Catherine White]:

	The motivation for these changes was to fix the crashing problem we
	reported earlier.  Here's what we changed:

	-	We rewrote RecursiveAddressToStrings without recursion, and
		named the new function LinearAddressToStrings.  The old function
		was recursing over both kids and siblings, which was blowing the
		stack on the Macintosh.  Since it doesn't matter what order the
		addresses are converted in, a linear loop is faster and simpler.

	-	Called ProfilerCleanup at the end of ProfilerDump. Since
		calls[i].address is modified during the dump, the calls array
		can't be reused after the dump since it no longer contains valid
		addresses. It seems safer to dispose of it so that it isn't used
		accidentally.

	-	Replaced the two Debugger() calls in ProfilerInit with calls to
		DisposeMemory().  We were encountering these Debugger calls
		while testing our own code, probably because ProfilerInit was
		being called twice somehow.  Calling ProfilerInit twice should
		now be harmless, and should no longer leak memory.

	-	Changed the handling of function names so that they are no
		longer limited to 31 characters.  The new limit is 255
		characters.  This means that most mangled C++ names can now be
		parsed properly by the MW Profiler, which makes interpreting the
		profiles easier.

		In order to accomplish this, we needed to add extra arguments to
		two routines in Miscellaneous.cpp for the buffer capacity.  This
		capacity defaults to 32, which means that callers who don't pass
		in the extra argument will get the same behavior as before.

		We also added code in the profiler so that the stringTable could
		grow dynamically.  This means that it isn't so important to
		allocate enough memory for the stringTable initially.  However,
		the initial size is currently the same as the old size was, so
		reallocation shouldn't occur very often.

*	(Mac) Updated to CodeWarrior Pro 5.

*	Overhauled handling of preferences/properties/settings/options...
	These settings were previously stored as resource-based binary data
	on the Mac, System Registry entries on Window, and an RC text file
	on Unix.  Now the information is saved out as a text file on all
	platforms.  And -- with a common source code base -- all information
	is saved out consistantly (some platforms previously skipped saving
	some information).  Finally, with all information in an accessible
	text file format, it should be easier for users to tweak or fix
	settings (or even specify settings for which there is no UI).

	Note that NO attempt has been made to migrate forward settings from
	the previous formats.

*	In line with that, if the InterceptSysFatalAlert is true (default),
	Poser will intercept calls to SysFatalAlert and display the message
	in its own dialog box.  If this setting is false, Poser will let the
	standard Palm OS function display the message. [Ken Krugler, Scott
	Johnson]

*	If a SysFatalAlert dialog is displayed while a Gremlin is running,
	the Gremlin will no longer be halted if the user clicks on Continue
	(it used to be that the Gremlin was *always* halted). [Roger Flores]

*	(Windows) Ask user if they'd like to have a shortcut to Poser added
	to the Start Menu. [Phil Shoemaker]

*	Better validation of .prc files. [Daniel McCarthy]

*	(Windows) Cancel button in file download progress dialog now works.

*	(Windows) Fixed byteswapping bug in PSF writing code.  Poser should
	now have a better chance of reading Mac-created PSF files on Windows
	and vice-versa.

*	Fixed memory leak bug that would occur when closing a session.  The
	buffers holding the ROM image and auxilliary information weren't
	being deleted. [bullshark (a real person with a real email
	address)].

*	(Windows) Added the Palm OS Emulator Binding tool, an NT-only
	wizard which can bind a Windows Poser executable with (1) a ROM file
	and a device configuration, or (2) a ROM file and a session file.
	This will create a self-contained executable suitable for "kiosk"
	run.

	Poser detects when it is bound, and modifies its behavior in the
	following manner:

	(1)	ROM + device configuration. Poser always starts by booting
		into a new session with the selected device configuration and
		ROM. If the user closes the session and creates a new one, he or
		she will not be prompted for a device configuration.

	(2)	ROM + PSF file. Poser always starts right into the state
		saved in the PSF file. The user interface is abbreviated to
		include only pertinent functionality (no debugging or logging,
		for example) that is appropriate to a "kiosk" run. IF the user
		closes the session, he or she only has the option to restart it
		in the state saved in the PSF file. Posers bound this way share
		a separate set of preferences then unbound Posers.

*	Made the socket port that an external debugger can connect to
	configurable.  The old hard-coded port of 2000 is still support for
	backward compatibility, but clients should move away from that.
	Instead, they should use the port specified in the
	"DebuggerSocketPort" preference.  (There is currently no UI for
	changing this preference.  But it can be changed by hand by editting
	the Poser preferences file, which is in text format.)

*	Added the following functions to HostControl.h:

		HostErr		HostProfileDetailFn			(void* addr, HostBool logDetails)

			Profiles the function containing the given address.  If
			logDetails is true, profiling is performed at a machine-
			language instruction level (each opcode is treated as
			its own function).

		HostErr		HostGremlinNew				(const HostGremlinInfo*);

			Start a new Gremlin using the given specifications.

		HostBool	HostGetPreference			(const char*, char*);
		void		HostSetPreference			(const char*, const char*);

			Get or set the specified preference.  Preferences are
			identified by name, the set of which can be seen in the Palm
			OS Emulator Preferences file for your platform ("Palm OS
			Emulator Preferences" in the Preferences folder on the Mac,
			"Palm OS Emulator Preferences.ini" in the Windows System
			directory on Windows, and ".poserrc" in your home directory
			on Unix).  The values are also specified as strings,
			examples of which can be seen in the preferences file.

		HostErr		HostSessionCreate			(const char* device, long ramSize, const char* romPath);

			Create a new session based on the given parameters.
			Fails if a session is already running.

			* NOTE: Not yet implemented.

		HostErr		HostSessionOpen				(const char* psfFileName);

			Open the given session.  Fails if a session is already
			running.

			* NOTE: Not yet implemented.

		HostErr		HostSessionClose			(const char* saveFileName);

			Close the current session, saving it to the given file.
			The session is not saved if no file name is specified.
			This function fails if no session is running.

		HostErr		HostSessionQuit				(void);

			Ask Poser to quit.  Fails if a session is already
			running.

		HostErr		HostSignalSend				(HostSignal signalNumber)
			
			Send a signal (identified by an integer) to any scripts
			with HostSignalWait calls pending.  If there are such
			pending calls, Poser then halts waiting to be restarted
			with HostSignalResume.  If no one was waiting for any
			signals, then Poser doesn't halt.

		HostErr		HostSignalWait				(long timeout, HostSignal* signalNumber)

			Wait for a signal from Poser.  Signals can be predefined
			(hostSignalIdle, hostSignalQuit) or user-defined.
			HostSignalWait returns the signalled value.

			hostSignalIdle is issued by Poser when it detects that it's
			going into an idle state.

			hostSignalQuit is issued by Poser when it's about to quit.

		HostErr		HostSignalResume			(void)

			Restarts Poser after it has issued a signal.  By waiting
			to be restarted, Poser allows external scripts to perform
			any other operations first.


	While the following functions are in the HostControl API,
	they exist for external RPC clients to call and will return
	errors if called by Palm OS applications:

		HostSessionCreate
		HostSessionOpen
		HostSessionClose
		HostSessionQuit
		HostSignalWait
		HostSignalResume

*	Opened a socket (on the port specified in "RPCSocketPort"
	preference) for external applications to make RPC calls.  By sending
	RPC packets, external applications can invoke any function in the
	Palm OS dispatch table.  This set of functions includes the
	HostControl functions, which can be called even when no session is
	running (which normally would mean that there isn't really a
	dispatch table containing functions that can be called).

	Packets sent to the RPC sub-system use the same format as packets
	sent to the debugger sub-system, that is, the Serial Link Protocol
	packet format (also used by HotSync).  This format is described in
	Debugging.html.

	When sending command packets to the RPC sub-system, you need to set
	the "dest" field of the packet header to:

		#define slkSocketRPC			(slkSocketFirstDynamic + 10)

	as opposed to slkSocketDebugger or slkSocketConsole, as you would
	when talking with the debugger sub-system.

	The RPC sub-system can accept one of 4 kinds of command pacets:
	ReadMem, WriteMem, RPC, and RPC2.  The first three packets are the
	same as those sent to the debugger sub-system and are defined in
	Debugging.html.  RPC2 is an extension of the RPC packet in order to
	support a wider range of facilities.

	RPC2 packets are defined as follows:

		#define sysPktRPC2Cmd	0x20
		#define sysPktRPC2Rsp	0xA0

		struct SysPktRPCParamInfo
		{
			UInt8	byRef;		// true if param is by reference
			UInt8	size;		// # of Bytes of paramData	(must be even)			
			UInt16	data[1];	// variable length array of paramData
		};
	
		struct SysPktRPC2Type
		{
			_sysPktBodyCommon;			// Common Body header
			UInt16	trapWord;			// which trap to execute
			UInt32	resultD0;			// result from D0 placed here
			UInt32	resultA0;			// result from A0 placed here
			UInt16	resultException;	// If an exception occured, it's ID is here
			UInt8	DRegMask;			// Bitmasks indicating what registers need...
			UInt8	ARegMask;			// ...to be set on this call.
			UInt32	Regs[1];			// Variable-length array holding register...
										// ...values to be set on this call.
			UInt16	numParams;			// how many parameters follow

			// Following is a variable length array of SlkRPCParamInfo's
			SysPktRPCParamType	param[1];
		};

	Most of this is the same as the RPC packet.  It differs with the
	addition of the following fields:

	resultException: if the function call failed because a hardware
	exception occured, the exception ID will be stored here. Otherwise,
	this field contains zero.

	DRegMask: a bitmask indicating what D registers need to be set in
	order to make this call. In particular, some functions require that
	a "selector" value be placed in register D2. In this case, bit 2 of
	DRegMask (the 3rd bit from the right) would be set.

	ARegMask: same comments.

	Regs[1]: a variable length array containing the values to be placed
	in the registers to be set. Only the registers that are being
	changed need to be supplied. Most of the time, DRegMask and ARegMask
	will be zero and Regs would not appear in the packet. In the example
	where D2 needs to be set, DRegMask would be 0x04, ARegMask would be
	0x00, and ARegMask would be followed by a single 32-bit value to be
	placed in D2. If more than one register needs to be set, then the
	register values should appear in the following order: D0, D1, ...,
	D6, D7, A0, A1, ..., A6, A7. Again, only values for the registers
	specified in DRegMask and ARegMask need to be provided.

*	Fixed crasher that could occur if "Received Events" logging was
	turned on and one of three KeyDown events was popped off the stack.
	[Ken Krugler, Jeff Yasuda]

*	(Unix) Added serial port emulation, as well as better support for
	other OS and compiler flavors. [Jerry Kirk, Michael Kedl]

*	(Unix) Added support for cursor, page up/down keys. [Michael Kedl]

*	(Unix) Fixed massive memory leak when sessions ended. [Michael Kedl]

*	More evolution of skin support.  Skins are now set on a device-by-
	device basis from a new "Skins..." dialog box.  Other aspects of the
	device's appearance are also set from this dialog box, such as the
	scaling factor and the LCD background color.

*	Look at the chip selects when determining what range of RAM should
	be protected or not instead of just assuming 128K. [Steve Lemke]

*	Fixed problems with reloading .psf files what were saved when a
	Gremlin was running.


*	Setting "DebuggerSocketPort" or "RPCSocketPort" preferences to zero
	will disable their respective facilities.  This should be handy in
	cases where merely opening a TCP socket fires up any sort of
	unwanted Remote Access facilites. [Ken Krugler]

*	(Mac) Fixed bug in new preferences saving mechanism where the
	preferences would not get saved if the file didn't already exist.
	[Mike Puckett]

*	Allow LCD window to be placed in negative coordinates. [Mike Puckett]

*	Addition of Gremlin Hordes.  A Horde is basically a range of
	Gremlins to run.  You specify the range: the first Gremlin and the
	last Gremlin in the Horde.  Poser will start with the first Gremlin,
	and generate that Gremlins event stream until one of four things
	happens:

	- An error occurs (hardware exception, illegal memory access, etc.),
	- The maximum number of events have been generated,
	- A "switch" event occurs.  A switch event is when a specified number
	  of the maximum number of events have been generated.

	When any of these conditions occur, the current Gremlin is either
	halted or suspended and the next Gremlin in the Horde is selected. 
	When Poser has cycled through all the Gremlins in the range, it
	cycles back and restarts any suspended Gremlins one at a time.  When
	all Gremlins have been halted (either because they've encountered an
	error or they've reached the maximum number of events), the Hordes
	session is completed.

*	(Windows) Added the following command-line options [Brian Estes]:

	-skin <name>:
			Synonyn for -silkscreen.

	-ram_size <size in K>:
			Synonym for -ram.

	-load_apps <file name list>:
			A comma-seperated list of files (.prc's, etc.) to load after
			startup.

	-run_app <app name>:
			Application to run after startup.  Note that this is the
			name of the *application*, not the file.

	-quit_on_exit:
			If -run_app was specified, quit when that application exits.

	-log_save_dir <path>:
			Location for standard log file. Default = Poser's directory.

	-horde <num>:
			Gremlin number to run after session is created or loaded. 
			Equivalent to setting -horde_first and -horde_last to the
			same number.

	-horde_first <num>:
			First Gremlin in a Gremlin Horde to run.

	-horde_last <num>:
			Last Gremlin in a Gremlin Horde to run.

	-horde_apps <app name list>:
			A comma-seperated list of applications Gremlins is allowed
			to switch to.  Default == entire device (no restrictions).

	-horde_save_dir <path>:
			Location for directory that keeps saved session files and
			logs.  Default = Poser's directory.

	-horde_save_freq <num>:
			Gremlin snapshot save frequency.  Default = don't save
			snapshots.

	-horde_depth_max <num>:
			Total number of Gremlin events to generate for each Gremlin.
			Default == no upper limit.

	-horde_depth_switch <num>:
			Number of Gremlin events to generate before switching to
			another Gremlin in a Horde.  Default == the same number
			specified for -horde_depth_max.

*	(Windows) Added support for Alt-F4; made it act like the Exit menu
	item. [Ryan Robertson]

*	Fixed a problem with profiling calls to Palm OS function made via
	the SYSTRAP_FASTER macro.  The function entry would be recorded once
	because it was a system call, and then again because it was made via
	a JSR. Because the subsequent RTS would pop only one of those off of
	the profiler's stack, the stack would get out of sync and overflow.
	[Jameson Quinn]

*	(Windows, Unix) Now stop the CPU thread on almost any UI action.
	Previously, the CPU thread would be stopped only in targeted
	situations.  Now, it's stopped whenever the user executed a menu
	command.  This change was made when I found out that the profiling
	menu items could mess up the CPU thread if it weren't stopped first.

*	Updated ROM Transfer project to CodeWarrior for Palm OS 5.2 (that
	is, CodeWarrior for Palm OS Release 5 with Metrowerks' two updates
	applied).

*	Fixed the way time spent in the trap dispatcher was recorded when
	profiling; entries for the same function weren't necessarily being
	collapsed into a single entry. [Bob Ebert]

*	(Unix) Added JPEG case graphics.

*	(Windows) Added taskbar menu with Minimize/Move/Close menu items.
	Note that there may still be problems with minimizing/maximizing
	Poser.  For instance, Windows NT does not minimize windows without
	caption bars when you select "Minimize All Windows".  Windows 98
	will hide Poser when selection "Show Desktop", but will restore
	Poser when restoring another application window.  These problems
	appear to be shortcomings of Windows, but if anyone knows how to
	accomodate these foibles, please let me know.  [Scott Johnson]

*	More accurate emulation of ROM space.  Now the chip-selects are
	used in conjuction with the ROM image file size.  [Steve Lemke,
	Jesse Donaldson]
	
	In general:

	The size of the ROM image is always rounded up to the next power of
	two.

	On Dragonball devices, I assume that the chip-selects are always set
	to specify a 2 Meg ROM (this appropriate for all ROMs so far). On
	DragonballEZ devices, I look at csASelect, bits 1-3 (BTW, the reset
	value for this register is 0x00E0, so there don't seem to be any
	boot-up issues).

	If the rounded ROM image size is larger than the size specified by
	the chip-selects, then it gets truncated; the CPU won't be able to
	access the far end of it.

	If the rounded ROM image size is the same as the size specified by
	the chip-selects, then everything is fine. No truncating, no
	mirroring.

	If the rounded ROM image size is smaller than the size specified by
	the chip-selects, then the ROM image is mirrored for as many times
	as is necessary to cover the range.

*	(Mac) Added Power Manager code to keep PowerBooks awake when Poser
	is doing something and when the PowerBook is plugged in. [Mike
	Puckett]

*	Ensure that windows (LCD, Gremlin Control) are onscreen when
	they're created.  Right now, this means that they are brought
	onscreen if any part of them is offscreen.  If this is too strict,
	we can revisit the algorithm later.

*	The code to validate the objects on a form has been moved from
	Gremlins-specific code into a patch on FrmDrawFrom.  Now people will
	get bugged about invalid objects even when not running Gremlins. :-)

	By the way, some people have reported that they get told about
	invalid or offscreen form objects, and that they think these reports
	are in error, as the objects reported have ludicrous positions and
	sizes and have object IDs that don't exist in the resource
	description file.  If you get such a message, *strongly* suspect
	that your object list has been trashed, possibly due to the changing
	of a label or title.  Eventually, Poser will be able to detect when
	form object lists get trashed at the moment it occurs, and not later
	on down the stream (such as when the form gets drawn).

*	When dragging files onto the LCD screen, the rules are: you can
	drag any number and assortment of .prc, .pdb, and .pqa files; you
	can drag only one .rom file, you can drag only one .psf file; you
	can't mix files from any of the three just-mentioned categories
	together. If you broke any of these rules, you'd get an error
	message.  However, this error message was broken in different way on
	Mac and Windows (the Unix version doesn't support D&D yet -- any
	takers?).  This was fixed by making the majority of the relevent
	code cross-platform, and then fixing *that*. [Roger Flores, Mike
	Turcotte]

*	(Mac) Fixed problem with Japanese text showing up as "Jinglish" on
	systems with the Japanese Language Kit installed.  This was always
	supposed to be a feature in the New Gremlin dialog (so that you
	could see the application names correctly), but appears to have been
	broken for some time.  That should be fixed, and the same facility
	has now been extended to the dialog containing error messages
	generated by the Palm OS. [Ken Krugler]

*	Fixed bug in NetLibGetHostByAddr where the address was assumed to be
	a NetSocketAddrType instead of anything that could be "len" bytes
	long. [Bill Pittore]

*	Turned on checking of writes to ROM.  This was off for a reason
	(there's a comment next to the relevent part saying "HACK: We really
	want it to be true!"), but I don't remember what it is.  I was able
	to run Gremlins on some apps for quite a while without error, so
	hopefully we can get away with turning this back on.  [Scott Johnson]

*	Take another stab at fixing the problem with FntDefineFont, as first
	described in the release notes for 2.1d20.  FntDefineFont can read
	off the end of a source buffer, causing Poser to report an invalid
	read access to memory manager data structures.  This bug -- fixed in
	Palm OS 3.2 -- doesn't need to be alerted by Poser.  [Scott Johnson]

*	If an application executes DbgBreak and no debugger is attached,
	display a friendly message in a dialog box that includes Continue
	and Reset buttons. [Ken Krugler]

*	Added Red Dutta's "Export Database" menu item.  This command takes
	the place of the "posedbexport" Palm OS application, allowing you
	to export databases and applications from the emulator to your
	desktop computer as a .pdb or .prc file.  [Red Dutta]

*	Patch SysReset so that Poser no longer complains about normally
	proscribed actions (like mucking with low-memory) during a reboot.

*	Bring us in-sync with the Simulator with regards to entering
	control-chars that map to Palm OS command-chars.  The list is:

		control-A	menuChr
		control-B	lowBatteryChr
		control-C	commandChr
		control-D	confirmChr
		control-E	launchChr
		control-F	keyboardChr
		control-M	linefeedChr
		control-N	nextFieldChr
		control-S	autoOffChr
		control-T	hardContrastChr
		control-U	backlightChr

	B, S, T, and U are new in this release.
