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

Please send bug reports, comments, suggestions, etc. to
<mailto:bug.reports@corp.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.3 (xx/xx/01)
--------------------------
*	Added Visor Edge support.  [James Phillips]

*	Added HandEra 330 support.  [Dan Fahrion]

*	Better checking for invalid database names as .prc, .pdb, and .pqa
	files are installed.  Error message now also includes more text
	describing why the name is invalid.

*	When reporting invalid database dates when installing a file, now
	include the name of the file containing the database.  [David A.
	Desrosiers]

*	Better error message when reporting that a .prc, .pdb, and .pqa
	file cannot be installed because one of its resources or records is
	too large.

*	Removed feature of Gremlins which would turn the device off and on
	every once and a while.  The mechanism used to perform this could
	alter the emulated hardware timers and clocks, such that two runs of
	the same Gremlin number would result in different outcomes.

*	NOTE: the following new feature was added to this release and then
	disabled.  "Beaming" over TCP or serial worked only intermittently. 
	We'll try to get this working in a future release.  Until then, Mac
	and Windows users will see a disabled IR option in the Preferences
	dialog.  Original release note was as follows: Limited IR emulation.
	The user can choose to redirect IR data out the serial port or to
	another instance of Poser running on the same computer. Note that
	although TCP is used to exchange data between the to instances of
	Poser, exchanging data between Posers running on different computers
	is not supported.  The network latency and transmission times is
	greater than the timeout values used in IR communications, leading
	to broken connections.

*	Include preliminary plug-in support.  Current support extends to
	letting external plug-ins patch traps and access memory.  [Anthony
	Fishbeck]

*	Internal change: continuing work to remove Dragonball-specific
	assumptions from the source code in preparation for adding ARM
	support.

*	Added support for downloading ROMs over USB on Mac and Windows.

	On Windows, you must have Palm Desktop 4.0.1 installed in order to
	get the USB driver.  You must then make the library for the driver
	("USBPort.dll") available to Poser.  Either copy this library from
	Palm Desktop's directory to Poser's directory, or move it into the
	Windows system directory (thus making it available to all
	applications).

	On the Mac, you must have Palm Desktop 2.6.3 installed in order to
	get the USB driver.

	Note that the ROM Transfer application fails to work on Handspring
	devices, so unless someone figures out why, you can't download those
	ROMs.  And though you can download Sony CLIE ROMs, Palm's version of
	Poser doesn't emulate those devices, so performing that exercise is
	not very useful.  Which means that the addition of this feature is
	of most benefit to those with Palm m500s and m505s.

*	Support backlighting (two levels of brightness) for m505.

*	Report direct access to BitmapType data structures.

*	Report calls to functions that will no longer be available on
	future versions of Palm OS.  This list appears at the end of this
	note.

*	Corrected minimum RAM sizes for Palm m500 and m505 (was 2MB, now
	8MB).

*	(Mac) Added better support for transliterating characters exchanged
	between the host and Palm OS emulated clipboard.

*	(Windows) The popup menu would always appear on the primary monitor
	on a multi-monitor system.  [David Vaportrails]

*	Palm m500/m505 alarm LED is green, not red.

*	(Unix) GCC 3.0 support: added <ctype.h> where needed; no longer
	assume vector<T>::iterator is a pointer type; add exception
	specifications where needed; recognize that "map" is in the std
	namespace.  [John Marshall]

*	(Windows) Added "Stay On Top" checkbox to Skins dialog. [Jonathan
	Cox]

*	(Unix) Re-established X Windows window class (missing from Poser
	3.2).  [Chris Ridd]

*	(Unix) Link with OpenGL if it is installed (required by FLTK).
	[Holger Klawitter]

*	(Unix) SuSE 7.1 is rather pedantic and refuses to compile source
	code containing calls to tmpnam in it.  Therefore, on Unix, if
	mkstemp is available, use that instead.  Note that this mean that if
	you call HostTmpNam to get a temp file name, be warned that the file
	will already exist (but will still need to be opened).  [Holger
	Klawitter]

*	In Poser's implementations of NetLibSend, NetLibSendPB,
	NetLibReceive, NetLibReceivePB, and NetLibDmReceive (used when
	NetLib redirection is turned on), no longer try to be clever about
	when to call send vs. sendto or recv vs recvfrom.  Instead, always
	call sendto and recvfrom. That should provide the same
	characteristics as the Palm OS NetLib calls. [Gary Gorsline]

*	In order to support the various options in the Reset dialog, Poser
	emulates the pressing of the appropriate hard keys.  Pressing the
	key down worked fine, but Poser's determination of when to release
	the key wasn't always correct, and the Palm OS would sometimes fail
	to notice that the key was ever down.  Poser now tries a different
	approach that should be more definitive. [Mike McCollister]

*	Fixed profiling bug.  The memory cycles incurred fetching the
	opcodes were not being counted.

*	Fixed profiling bug.  Poser performs a lot of processing when
	system functions are called.  Some of this processing would access
	emulated memory, causing the cycles to do so to be counted against
	the running application.  This was incorrect.  Poser's operations
	should as transparent as possible and not show up on profiling data.

*	Added two HostControl functions:

		HostErr HostDbgSetDataBreak (UInt32 addr, UInt32 size)
		
			Configure Poser to enter an external debugger or display a
			message if the bytes starting at the given address and
			continuing for the given number of bytes are accessed in any
			way (either written two or read from).  The functionality
			here is the same that is provided in the Data Breakpoint
			section of the Breakpoints dialog.

		HostErr HostDbgClearDataBreak (void)

			Configure Poser to no longer enter an external debugger or
			display a message when the memory range specified in
			HostDbgDataBreak is accessed.

*	Added Gremlin Horde logging information: ROM version, ROM file
	name, RAM size, device name; statistics regarding the number of
	events each Gremlin was run for before generating an error; and
	error frequency and type statistics.

*	Rearranged New Horde dialog, and added Select All / Deselect
	capability for the Applications list, and a menu from which the
	application to be launched first can be selected.

*	Changed behavior of application switching -- SysUIAppSwitch is
	called on a random application from the list of applications
	selected in the New Horde dialog, rather than having a random button
	pressed.

*	Resuming a Horde run from a .psf file now terminates correctly, at
	the maximum depth originally specified, rather than at the next
	switching boundary, as before.

*	International Strict Checks (for checking multi-byte character
	display routines) is now a debugging option.

*	Stepping a halted Gremlin now behaves identically when running a
	single Gremlin or a Horde.

*	Files generated during Profiling now have unique names.

*	New warning displayed if comm port could not be opened on the host.

*	Added -pref command line option (-preference or -d can by used as
	synonyms).  This option changes preferences as stored in the
	preference file.  Its parameter has the form "key=value", and is
	treated the same way as the "key=value" lines found in the
	preference file.

*	Enabled the long-stillborn Logging Options for Warnings and Errors.
	Checking these options will log the text of message dialogs just
	before they are displayed.  You can then use this text in bug
	reports (or you can just use Ctrl-C or your platform's equivalent to
	copy the text from the dialog to the clipboard, as mentioned in a
	previous release note).

*	Added "ContinueOnWarnings" and "ExitOnErrors" preferences (along
	with UI for them in the Debug Options dialog).  If logging for
	warnings is enabled and ContinueOnWarnings is true, warning dialogs
	will be dismissed as if the user had pressed the Continue button. If
	logging for errors is enabled and ExitOnErrors is true, fatal error
	dialogs result in Poser exiting.

*	Added "SilentRunning" preference.  Setting this value to non-zero
	has the same effect as enabling the following separately controlled
	preferences: LogErrorMessages, LogWarningMessages,
	ContinueOnWarnings, and ExitOnErrors.
	
	Since it is not a good idea to set this option and forget it, Poser
	resets this preference to zero every time it starts up.  It resets
	the value *before* parsing the command line options, so using the
	-pref option to set it will work.

*	Added "DialogBeep" preference (along with UI for it in the Debug
	Options dialog).  Setting this value to non-zero causes Poser to
	beep every 2 seconds that a message dialog is displayed.  So as to
	not annoy your co-workers if you're not around to hear it, Poser
	will stop the beeping after 1 minute.

*	(Windows) If ExitOnErrors or SilentRunning is turned on, Poser
	exits with a status code of 2 if a fatal error had occurred at any
	time during execution, a status code of 1 if a warning had occurred
	any time during execution, and a status code of 0 if no errors or
	warnings occurred.

*	Changed the behavior of error handling when running a single
	Gremlin vs. running a Horde.  Originally, when there was only the
	ability to run a single Gremlin, Poser would display all warnings
	and errors as they occurred.  Later, when Hordes was added, it was
	felt that running multiple Gremlins was more of a "batch" operation,
	and so the user should not be bothered with error messages. Instead,
	if a Gremlin range was specified in the New Horde dialog, warnings
	and errors were logged to a file, the Gremlin resulting in the
	message was terminated, and Poser would switch to the next Gremlin.
	But if the user specified to run only a single Gremlin in the New
	Horde dialog, they'd get the original behavior of seeing error
	dialogs as they occurred.  Now, that behavior has been made
	consistent with the original behavior: by default, the user will see
	warnings and errors in dialogs as they occur.  If this is not
	desired, they can use the "ContinueOnWarnings" and "ExitOnErrors"
	preferences to log the messages instead.

*	Gremlins used to implicitly log error and warning messages.  Now
	that there is a UI for specifying whether or not to log messages,
	Gremlins no long automatically does that.  To support the change,
	Poser 3.3 will automatically turns on error and warning message
	logging for Gremlins the first time you run it.

*	(Mac, Windows) When loading or saving preferences, Poser now first
	looks for a preferences file in the same directory as itself.  If it
	finds that, it uses that as the preferences file.  Otherwise, it
	uses the old behavior of using the system's designated location for
	preference files.

*	Profiling fix: when converting cycle counts into time, make use of
	the actual CPU speed instead of assuming 16MHz.

*	(Windows) Fixed problem where a user could click on the Logging
	Options of the New Gremlin dialog multiple times, bringing up
	multiple Logging dialog boxes.

*	Indicate the active/inactive state of the Emulator's window by
	lightening it if it's inactive.

*	(Mac) Fixed many problems with calling HostGetFile, HostPutFile,
	etc.  Calling these functions would crash, and even if they worked,
	they wouldn't display any files, just folders.  [Hal Mueller]

*	Check for screen access in the storage heap.  The screen is not
	normally stored in the storage heap, but the hardware supports it
	and SuperWaba 2.0b3 puts it there. [Guilherme C. Hazan]

*	Fixed memory leak that could occur if an application running under
	Gremlins attempted to call SysUIAppSwitch in order to launch another
	application, that application took a command parameter block, and
	that application was not on the list of applications that could be
	run under Gremlins.  The command parameter block was leaked.

*	Added two new UI-less preferences: LogFileSize and LogDefaultDir.
	The former specifies the number of bytes that can be written to the
	log file before old bytes are discarded.  HostSetLogFileSize is
	still supported, but calling HostSetPreference will now do the same
	thing.  LogDefaultDir specifies where you want log files stored. If
	a Gremlin is running, log files will be stored in the Gremlin output
	file, as before.  But you can use LogDefaultDir to specify a
	directory for log files generated while not running Gremlins.  If
	this preference is not specified, log files are written to the
	Emulator directory, as before.  The existence of this preference and
	the -pref command-line option makes the old never-implemented
	-log_save_dir command-line option obsolete.

========================================================================

The following is a list of Palm OS traps that are not supported on future
OSes.  The list is broken into a number of different groups (which more or
less explains why the trap was not implemented).

Documented 'System Use Only' Traps
----------------------------------
AlmAlarmCallback
AlmCancelAll
AlmDisplayAlarm
AlmEnableNotification
AlmInit
AlmTimeChange
DmInit
EvtDequeueKeyEvent
EvtGetSysEvent
EvtInitialize
EvtSetKeyQueuePtr
EvtSetPenQueuePtr
EvtSysInit
ExgInit
FrmAddSpaceForObject
FtrInit
GrfFree
GrfInit
InsPtCheckBlink
InsPtInitialize
MemCardFormat
MemHandleFlags
MemHandleOwner
MemHandleResetLock
MemHeapFreeByOwnerID
MemHeapInit
MemInit
MemInitHeapTable
MemKernelInit
MemPtrFlags
MemPtrOwner
MemPtrResetLock
MemStoreInit
MemStoreSetInfo
PenClose
PenGetRawPen
PenOpen
PenRawToScreen
PenScreenToRaw
ScrCompressScanLine
ScrCopyRectangle
ScrDeCompressScanLine
ScrDrawChars
ScrDrawNotify
ScrLineRoutine
ScrRectangleRoutine
ScrScreenInfo
ScrSendUpdateArea
SlkProcessRPC
SlkSysPktDefaultResponse
SndInit
SysBatteryDialog
SysColdBoot
SysDoze
SysInit
SysLaunchConsole
SysNewOwnerID
SysReserved10Trap1
SysReserved31Trap1
SysSemaphoreSet
SysUILaunch
SysWantEvent
TimInit
UIInitialize
UIReset
WinAddWindow
WinRemoveWindow

Undocumented 'System Use Only' or 'HAL Use Only' Traps
------------------------------------------------------
These traps are routines in the HAL, documented in headers to be called by
Palm OS only, or I have spoken with the authors of those traps who
identified them as internal traps.

AttnAllowClose
AttnDoEmergencySpecialEffects
AttnEffectOfEvent
AttnEnableNotification
AttnHandleEvent
AttnIndicatorAllow
AttnIndicatorAllowed
AttnIndicatorCheckBlink
AttnIndicatorGetBlinkPattern
AttnIndicatorSetBlinkPattern
AttnIndicatorTicksTillNextBlink
AttnInitialize
BltCopyRectangle
BltDrawChars
BltFindIndexes
BltGetPixel
BltLineRoutine
BltPaintPixel
BltPaintPixels
BltRectangleRoutine
BltRoundedRectangle
BltRoundedRectangleFill
DayHandleEvent
DbgControl
DbgSerDrvClose
DbgSerDrvControl
DbgSerDrvOpen
DbgSerDrvReadChar
DbgSerDrvStatus
DbgSerDrvWriteChar
FlashInit
FntPrvGetFontList
HwrBacklightV33
HwrBattery
HwrBatteryLevel
HwrCalcDynamicHeapSize
HwrCursorV33
HwrCustom
HwrDebuggerEnter
HwrDebuggerExit
HwrDebugSelect
HwrDisplayDoze
HwrDisplayDrawBootScreen
HwrDisplayInit
HwrDisplayPalette
HwrDisplaySleep
HwrDisplayWake
HwrDockSignals
HwrDockStatus
HwrDoze
HwrFlashWrite
HwrGetRAMMapping
HwrGetSilkscreenID
HwrIdentifyFeatures
HwrInterruptsInit
HwrIRQ1Handler
HwrIRQ2Handler
HwrIRQ3Handler
HwrIRQ4Handler
HwrIRQ5Handler
HwrIRQ6Handler
HwrLCDBaseAddrV33
HwrLCDContrastV33
HwrLCDGetDepthV33
HwrModelInitStage2
HwrModelInitStage3
HwrModelSpecificInit
HwrNVPrefGet
HwrNVPrefSet
HwrPluggedIn
HwrPostDebugInit
HwrPreDebugInit
HwrResetNMI
HwrResetPWM
HwrSetCPUDutyCycle
HwrSetSystemClock
HwrSleep
HwrSoundOff
HwrSoundOn
HwrTimerInit
HwrWake
KeyBootKeys
KeyHandleInterrupt
KeyInit
MemHeapPtr
MemStoreSearch
OEMDispatch2
PalmPrivate3
ScrCompress
ScrDecompress
ScrGetColortable
ScrGetGrayPat
ScrPalette
ScrScreenInit
ScrScreenLock
ScrScreenUnlock
ScrUpdateScreenBitmap
SndInterruptSmfIrregardless
SndPlaySmfIrregardless
SndPlaySmfResourceIrregardless
SysFatalAlertInit
SysKernelClockTick
SysNotifyBroadcastFromInterrupt
SysNotifyInit
SysReserved30Trap1
SysReserved30Trap2
SysUnimplemented
TimGetAlarm
TimSetAlarm
UIColorInit
WinGetFirstWindow
WinMoveWindowAddr
WinPrvInitCanvas
WinScreenInit

Kernel Traps
------------
These traps are not implemented because 68K applications do not have access
to the kernel APIs.

SysEvGroupCreate
SysEvGroupRead
SysEvGroupSignal
SysEvGroupWait
SysKernelInfo
SysMailboxCreate
SysMailboxDelete
SysMailboxFlush
SysMailboxSend
SysMailboxWait
SysResSemaphoreCreate
SysResSemaphoreDelete
SysResSemaphoreRelease
SysResSemaphoreReserve
SysSemaphoreCreate
SysSemaphoreDelete
SysSemaphoreSignal
SysSemaphoreWait
SysTaskCreate
SysTaskDelete
SysTaskID
SysTaskResume
SysTaskSetTermProc
SysTaskSuspend
SysTaskSwitching
SysTaskTrigger
SysTaskUserInfoPtr
SysTaskWait
SysTaskWaitClr
SysTaskWake
SysTimerCreate
SysTimerDelete
SysTimerRead
SysTimerWrite
SysTranslateKernelErr

Obsolete Traps
--------------
These traps are not implemented because they are obsolete Palm OS 1.0 traps
(or an esoteric obsolete trap such as WiCmdV32).

FplAdd
FplAToF
FplBase10Info
FplDiv
FplFloatToLong
FplFloatToULong
FplFToA
FplLongToFloat
FplMul
FplSub
WiCmdV32

Ghost Traps
-----------
These traps were never implemented in Palm OS (although they appear in
CoreTraps.h), but they are listed for completeness.

ClipboardCheckIfItemExist
CtlValidatePointer
FrmSetCategoryTrigger
FrmSetLabel
MenuEraseMenu
SysUICleanup
WinDrawArc
WinDrawPolygon
WinEraseArc
WinErasePolygon
WinFillArc
WinFillPolygon
WinInvertArc
WinInvertPolygon
WinPaintArc
WinPaintPolygon

Unimplemented NOP Traps
-----------------------
These traps should not be called by applications.  Some third-party
applications call these traps and it is safer to treat them as NOPs for
backwards compatibility.

FplFree
FplInit
HwrTimerSleep
HwrTimerWake
PenSleep
PenWake
SerReceiveISP
SrmSleep
SrmWake
SysDisableInts
SysRestoreStatus
TimHandleInterrupt
TimSleep
TimWake
WinDisableWindow
WinEnableWindow
WinInitializeWindow

Unimplemented Rare Traps
------------------------
These traps all seem like traps that are only used internally by Palm OS or
by serial drivers or by OEM extensions, etc.  In other words, these are
traps that an application would not use.

ConGetS
ConPutS
DayDrawDays
DayDrawDaySelector
DbgCommSettings
DbgGetMessage
DlkControl
DlkDispatchRequest
DlkStartServer
DmMoveOpenDBContext
DmOpenDBWithLocale
FlashCompress
FlashErase
FlashProgram
IntlGetRoutineAddress
MemGetRomNVParams
MemNVParams
OEMDispatch
ResLoadForm
SerPrimeWakeupHandler
SerReceiveWindowClose
SerReceiveWindowOpen
SerSetWakeupHandler
SlkSetSocketListener
SrmOpenBackground
SrmPrimeWakeupHandler
SrmReceiveWindowClose
SrmReceiveWindowOpen
SrmSetWakeupHandler
SysNotifyBroadcast
SysNotifyBroadcastDeferred
SysNotifyDatabaseAdded
SysNotifyDatabaseRemoved
SysSetTrapAddress
