home *** CD-ROM | disk | FTP | other *** search
Text File | 2000-08-14 | 152.1 KB | 3,744 lines |
- ========================================================================
- News (latest changes) archive for the Palm OS Emulator
- Copyright (c) 1998-2000 Palm, Inc. or its subsidiaries.
- All rights reserved.
-
- Please send bug reports, comments, suggestions, etc. to devsupp@palm.com
- ========================================================================
-
-
- Changes for 3.0a6 (4/19/00)
- ----------------------------
- * (Unix) Support POSER_DIR environment variable. If this variable
- exists, Poser uses it as the root for all files it uses (including
- preferences, Gremlin States, log files, and skin files). Otherwise,
- it uses HOME.
-
- * External skin support. A "skin" is something that defines the
- appearance of an application. Palm OS Emulator uses skins for each
- device that it emulates. Until this release, skins were built into
- Poser and couldn't be changed without recompiling the application.
- Now, skins are stored in external files that Poser locates and uses.
-
- When starting up, Poser looks for a directory starting with the text
- "Skins" (that is, it may be "Skins", "Skins.Palm", "Skins.Personal",
- etc.). Poser looks for all such directories in its own directory
- (that is, the directory in which it resides on Mac or Windows, or
- POSER_DIR on Unix), as well as that directory's parent and
- grandparent directories.
-
- For each such directory it finds, it scans the contents for files
- ending with ".skin". These files are text files that describe the
- skin. Associated with each .skin file are two graphics files that
- define the appearance of the skin (in single and double size mode).
-
- All of Poser's previously built-in images are now provided
- seperately in a Skin archive available on Poser's Web pages. This
- archive includes a ReadMe.txt file that describes how to create your
- own skins.
-
- * Internal change: as part of the skin implementation, a number of
- file handling and streaming classes were replaced with a new, more
- consistant set. The following classes:
-
- FileReference
- StreamHandle
- BufferHandle
- FileHandle
- PPStream
- ChunkStream
-
- Have been replaced with:
-
- EmDirRef
- EmFileRef
- EmStream
- EmStreamBlock
- EmStreamChunk
- EmStreamFile
-
- Testing note:
-
- All File I/O is affected by this change. The following places
- need to be tested to make sure they're not broken:
-
- Reading
- AutoLoad, AutoRun, AutoRunAndQuit directories
- Files specified to be loaded via cmd line.
- Loading PDB, PRC, and PQA files.
- Loading skin files (.skin and .jpg files).
- Loading Preference file
- Loading PSF files
- Loading ROM files
-
- Writing/Creating
- Exporting PRC, PDB, and PQA files (both via the menu
- item and via HostExportFile).
- Saving screen shots.
- Saving PSF files
- Saving preferences
- Saving downloaded ROM file.
- Saving Logging files
- Saving Profile files.
-
- * Our patch to SndDoCmd now initializes the return value. [David
- Slotter]
-
- * (Unix) AutoLoad, AutoRun, and AutoRunAndQuit directories now
- supported.
-
- * (Windows) Binder utility now merged into Poser directly (see the
- "Save Bound Emulator..." menu item).
-
- "Binding" Poser means to create a new version of Poser based on the
- settings in the currently running Poser. A new executable is
- created that includes a ROM image, configuration settings, skins,
- and optionally a RAM image (the stuff that goes into a .psf file).
- All of this information is taken from the current settings in the
- running Poser. The result is a new Poser that is self-contained and
- runs stand-alone.
-
- When binding Poser, you'll be presented with two options:
-
- * Create a version that always creates a new session based on
- the current emulator settings
-
- * Create a version that restores the current session
-
- Selecting the first option creates a version of Poser bound with a
- ROM image, configuration settings, and appropriate skins. When
- launched, this version of Poser will always create a new session
- based on those settings.
-
- Selecting the second option creates a version of Poser that is also
- bound with a RAM image. When launched, this version of Poser will
- always restore the state that is stored in that image. This is
- effectively the same as reloading a .psf file.
-
- In both cases, Poser functionality is abbreviated. Because much
- information is now specified by the bound items, menu items used to
- create, save, and load sessions and session files are removed. And
- since bound Posers are intended to be used in demo, kiosk, or other
- closely controlled environments, most developer-related menu items
- are also removed.
-
- * Fixed a problem where NetLibReceivePB could return netErrParamErr
- instead of a more informative error code. [Frank Yellin]
-
- * Fixed a problem where NetLibReceivePB where an in/out parameter
- passed to recvfrom was not initialized first. [Frank Yellin]
-
- * When emulating NetLib calls by turning them into host TCP calls,
- and an error occurs, add a log message (if NetLib logging is turned
- on) that describes how the host error code is translated into a
- NetLib error code.
-
- * Implement the documented -skin and -silkscreen command-line
- options.
-
- * Got rid of problem that prevented Poser from running on Macs with
- more than 256 Meg of RAM (and which could have lead to problems on
- other platforms as well).
-
- Details:
-
- (First, some terminology. In the discussion below, "host address
- space" refers to the memory that any Windows, Mac OS, or Unix
- application sees and manipulates. "Emulated address space" refers
- to the memory that the Palm OS or a Palm OS application sees. It is
- up to Poser to make the host address space look like emulated
- address space.)
-
- Poser emulates memory by allocating some buffers in the host's heap
- to "back" the various memory ranges utilized by the Palm OS. For
- instance, it creates buffers to represent RAM, ROM, and the
- Dragonball registers. Whenever a memory access is performed, Poser
- determines which of these buffers is required, calculates the
- correct offset into that buffer, and fetches or stores as
- appropriate. These buffers are used to create the illusion of the
- emulated address space.
-
- On occassion, it is necessary for Poser to magically make more
- memory "appear" to the emulated process. That is, the emulated
- process needs to be granted access to memory other than that
- normally needed to emulate a true Palm OS environment. A chief
- example of this is when loading a .prc file. Poser performs the
- install process by creating the database, creating the records in
- the database, and then copying the record contents from the .prc
- file to the records in the database it created. This copying is
- done by calling DmWrite. But the source of the DmWrite is a buffer
- that Poser allocated to hold the contents of the .prc file. This
- buffer is not one of the standard buffers Poser uses to emulate the
- any of the standard memory ranges that a Palm OS process can access.
-
- In order -- in this example -- for DmWrite to access the bytes in
- the file buffer Poser allocated, Poser temporarily "maps" arbitrary
- ranges into the emulated address space. Ranges that are mapped in
- can be accessed by Palm OS processes. However, this mapping did not
- undergo any address translation. That is, if the buffer holding the
- .prc file happened to have been allocated at memory location
- 0x01234560 by Windows, the Mac OS, Unix, or whatever, then Poser
- would map that buffer into memory location 0x01234560 in the Palm
- address space.
-
- This was OK, except when memory ranges mapped into the emulated
- space overlapped with standard memory ranges in the emulated space.
- For instance, on Macs with lots of RAM (greater than 256 Meg, at
- least), Poser could easily make a memory allocation that return an
- address > 0x10000000. If the buffer that was allocated were actually
- in the range 0x10C00000 - 0x10E00000 (or whatever the ROM range
- was), then when Poser attempted to "map in" that buffer, it would
- fail because of the overlap.
-
- Now, finally, this problem is fixed. Poser now performs memory
- address translation. Segments of memory mapped into the emulated
- address space are now mapped in so that they appear at 0x60000000 -
- 0x6FFFFFFF.
-
- * When checking for the validity of calls to shared library
- functions, don't allow a refnum of zero. Also, display a specific
- error message when an invalid library refnum is detected. [Frank
- Yellin]
-
- * (Unix) Fixed problem with crashing on Sparc systems when loading
- .prc files. [Frank Yellin]
-
- * Silently ignore a bug in an internal Palm OS 3.3 function
- (PrvConvertDepth1To2BW) that causes it to walk off the end of an
- allocated memory chunk by a single byte when reading from it.
-
- * Slightly more rigorous PC validation. Previously, I'd just check
- to see if the PC were in a valid address space (RAM, ROM, Dragonball
- register, etc.). Now only RAM or ROM addresses are allowed. [Frank
- Yellin]
-
- * HostFFlush (HostLogFile()) now writes the log file to disk.
-
- * Re-hooked up the "Logging Options..." button in the New Gremlin
- dialog box. In order to do this, utilized some cross-platform
- dialog handling routines that are slowly being phased in. As a
- result of these new routines, the dialog box has been changed from a
- multi-panel dialog on Mac and Windows to a non-panel dialog box (as
- was on Unix).
-
- * (Unix) No longer hide and reshow the main window when establishing
- a new skin (either as part of the Skins dialog, or as part of
- loading/creating a session). This process was an attemp to work-
- around an FLTK problem where the X frame window didn't properly
- resize itself. This workaround didn't work, and another one has
- been put in place, so the old one's taken out.
-
- * (Unix) Change the filter button to use only lower-case suffixes.
- With both upper and lowercase, the text in the filter button would
- overflow its bounds. [Jon Aslund]
-
- * (Unix) When opening a saved session file while a current session is
- already running, Poser would attempt to close the first session's
- thread twice, and then attempt to start the second session's thread
- twice. This would often lead Poser to hang. Now each of those is
- done just once. [Jon Aslund]
-
- * (Unix) Instead of crashing, report errors that occur while creating
- a new session or loading an old one. [Jon Aslund]
-
- * (Unix) Added BSD/OS 4.1 support. [Bert Driehuis]
-
- * Allow TsmGlueGetFepMode and TsmGlueSetFepMode access to system
- globals.
-
- * (Windows) Fixed bug where creating a new session in Poser, quitting
- without saving, and then starting Poser using the -psf command line
- option would result in a new session being created again instead of
- loading the specified session file.
-
- * ROM Transfer project updated to use SDK 3.5.
-
- * Internal change: previously, when Poser had to manipulate data in
- Palm OS format, it used the structs in the Palm OS headers directly.
- However, that assumed that we could convince all the compilers used
- to build Poser to lay out those structs correctly (that is, with the
- same size and alignment as the 68K compiler used to build the Palm
- OS ROM and Palm OS applications). This assumption is almost true,
- but not quite. Therefore, with this release, a new mechanism for
- manipulating Palm OS structs is used. This mechanism (see the
- EmPalmStructs.xxx files) allows Poser to access structs in a
- platform-, compiler-, and endian-independent fashion.
-
- Currently, this new mechanism is used only in the area of sending
- and receiving packets from external clients (debuggers and scripts).
- Eventually, it will be used in all aspects of Poser operation. Once
- this switchover is complete, we'll be mostly independent of the Palm
- header files, and will probably be able to get rid of most of
- contents of the the Byteswapping.xxx files.
-
- * Fixed problem with our patch to NetLibReceive. The exact problem
- being solved was one where NetLibReceive was called, received some
- data, the application modified that data in the buffer that received
- the data, and then call NetLibReceive again. No bytes were
- available, but the contents of the buffer were updated with the
- contents of the previous receive, thus wiping out the modified
- buffer contents. The application was relying on the buffer not
- changing, and so failed when it actually did.
-
- * Fixed problems with ROM Transfer not running on Palm OS 1.0.
- [Vladimir Amarante]
-
- * Fixed problem with trying to boot a ROM from a Palm V device that
- had originally been installed with Palm OS 3.1 but was lateer
- upgraded to Palm OS 3.3. [Douglas R. Shefsky]
-
- * (Windows) Fixed a problem with not reading the entire preferences
- file.
-
- * (Unix) Fixed problem with clicking in a non-active area of the
- window (that is, outside of any button or LCD area).
-
- * (Unix) Added ROM Transfer project (with prc-tools 2.0 compatible
- Makefile) and pre-built ROM Transfer.prc application that can
- be installed with something like pilot-xfer.
-
- * (Unix) Fixed problem that could lead to unexpected results when
- running certain dialogs after other certain dialogs (FLTK wasn't
- clearing out a reference to a widget in the first dialog,
- causing the second to crash).
-
- * (Unix) Remapped EINPROGRESS (as returned by sockets functions)
- to netErrWouldBlock instead of netErrSocketBusy (as NetMgr.h
- would suggest). This change allows Network HotSync to work
- between a Unix box and a Windows box.
-
-
- Changes for 3.0a5 (03/06/00)
- ----------------------------
- * Interim internal release dates:
- 3.0a5e1 - 02/25/00
- 3.0a5e2 - 02/25/00
- 3.0a5e3 - 03/01/00
- 3.0a5e4 - 03/03/00
-
- * Internal change: major change in the way the Dragonball and
- DragonballEZ registers are handled for different devices.
- Previously, there were two sub-systems: one that handled Dragonball
- registers, and one that handled DragonballEZ registers. Any device
- differences withing those two categories were handled with a set of
- conditional statements. That mechanism started breaking down (the
- conditionals were getting too twisty), so now device support is
- broken down with a set of classes having the following hierarchy:
-
- EmRegs - fairly abstract base class
- EmRegs328 - mildly abstract base class implementing Dragonball emulation common to all 328 devices
- EmRegs328Pilot, EmRegs328PalmPilot, etc. - concrete base class filling in the missing, custom pieces for a specific device
- EmRegsEZ - mildly abstract base class implementing Dragonball emulation common to all EZ devices
- EmRegsEZPalmIIIx, EmRegsPalmV, etc. - concrete base class filling in the missing, custom pieces for a specific device
-
- * Added Symbol 1700 support. Note that Symbol-specific hardware is
- not yet emulated. Attempting to use scanner or Spectrum facilities
- will hang the device. [Ron Kupke, Darren Kropp, John Duhart, Harini
- Bharadvaj]
-
- * Changed the way serial emulation is performed a little bit.
- Before, I'd look at the UART-enable bit to determine whether or not
- to open or close the host's serial port. However, that would lead
- to problems on Unix when using pseudo-devices. While opening the
- serial port, the Palm OS would enable and disable the UART several
- times as it was configuring the communications. This would lead to
- the host serial port being opened and closed several times. But
- Unix pseudo-devices don't react to that usage very well. So now,
- Poser looks at the serial line driver enable bit. This bit is
- toggled just once at the beginning and end of a serial port session,
- just like we want. [Eskil Heyn Olsen]
-
- * Fixed problem with serial emulation not working on Palm VII EZ.
-
- * Fixed problem where reloading a .psf file that had a Gremlin
- running would not correctly install the Gremlin-specific logging
- options.
-
- * Fixed problem affecting Gremlin reproducability. There was a patch
- on KeyCurrentState to randomly set key bits when a Gremlin was
- running. However, the RNG used to set the bits was in no way
- synchronized with the RNG used to generate Gremlin events, nor was
- it ever reset in any way when a Gremlin was started or restarted.
- The effect was that any application that was sensitive to the
- results of KeyCurrentState would react randomly. One example of
- this was the Address Book, which looked to see if the Address Book
- hard key was pressed in order to see if the user wanted to beam
- his/her business card.
-
- * Fixed problem affecting Gremlin reproducability. Some applications
- are sensitive to time and timing issues. Gremlins now tries to make
- sure that all forms of time (including the DragonBall cycle counter,
- the kernel's tick counter, the Palm OS tick counter, and the
- Dragonball real-time clock) are all set to consistant values when a
- Gremlin is started and restored when a Gremlin-active .psf file is
- reloaded (the cycle and tick counters are set to zero, and the RTC
- is set to 3:00pm). Also, when a Gremlin is running, the real-time
- clock is unhooked from the host's clock (normally, the values read
- from the Dragonball real-time clock are generated from the host's
- clock functions). Instead, the RTC is incremented assuming that the
- average instruction takes 12 cycles, and where the cycle time is
- based on the Dragonball's PLL registers.
-
- * Set the chip and mask IDs. This is set to the 1H58B part for the
- 328, and 1J83G for the EZ.
-
- * (Unix) Fixed problem with Logging Options dialog hanging.
-
- * Check PC and stack pointer when doing a TRAP #$F dispatch.
-
- * More up-to-date instructions for Network HotSyncing with Poser.
- [Brian Mathis]
-
- These instructions are intended for developers or other POSE users
- who want to synchronize the Palm OS Emulator with the same PC they
- are running POSE on. Modifications to these directions may be
- needed if a user wishes to synchronize with a PC on an attached
- network. They were written on a Windows machine, and probably have
- Windows specific instructions in them. It should be pretty painless
- to adapt them to other platforms that support hotsyncing.
-
- These are current for version 30a3 and 30a4 of POSE emulating a Palm
- V, OS 3.1, and Hotsync version 3.0.1/3.0.4, Windows 98 & NT.
-
- ----Configure Hotsync on your Desktop PC
-
- 1. Right-Click the hotsync icon in the system tray
-
- 2. Enable "Network". A check mark will appear next to it if it's
- already enabled.
-
- ----Configure POSE:
-
- 1. Right-Click on the POSE window to bring up the Menu. Choose
- "Settings/Properties".
-
- 2. Check the box next to "Redirect NetLib Calls to TCP/IP".
-
- 3. Click "OK"
-
- ----Configure Hotsync on the Palm
-
- 1. Open the "HotSync App".
-
- 2. "Menu/Options/Modem Sync Preferences" - set to "Network"
-
- 3. "Menu/Options/LANSync Preferences" - set to "LANSync"
-
- 4. "Menu/Options/Primary PC Setup" - enter "127.0.0.1" under
- "Primary PC Address" (the middle one)
-
- 5. Under the "Modem Sync" icon on the main Hotsync screen, tap
- "Select Service". Then tap "Done". You don't need to change any
- info, you just need to have something selected. You can create a
- new profile if you like.
-
- 6. Tap the "Modem Sync" button. Your PC should now kick into
- action, and will probably ask you to choose an account, or create a
- new one. It is highly recommended that you create a new account
- just for POSE.
-
- See also the following KnowledgeBase article:
-
- <http://oasis.palm.com/devzone/knowledgebasearticle.cfm?article_id=1674>
-
- * Information from TRGnet on TRGpro support. [Mike Walter]
-
- TRGpro support for POSE
-
- Version 3.0a4 includes limited support for TRGpro emulation. This
- version emulates the FAT file system API provided on the TRGpro. It
- does not support the lower level CompactFlash API or the enhanced
- audio API on the TRGpro.
-
- In order to emulate the TRGpro Fat file system, do the following:
-
- 1. Obtain a PalmOS 3.3 image from any device. (PalmIIIx, PalmV,
- etc)
-
- 2. Modify file "Palm OS Emulator.ini" in your Windows
- subdirectory. Change to line FfsHome to point to a subdirectory on
- your drive.
-
- Example "FfsHome=C:\POSE\
-
- 3. Put desired Palm programs and databases into subdirectory
- specified above.
-
- 4. Run Emulator.exe.
-
- 5. Install the programs ffs_pose.prc and CFPro.prc onto emulator.
-
- 6. Run CFPro to move files back and forth between Emulator and
- PC's subdirectory.
-
- Developers writing code for the FAT file system can now debug using
- POSE.
-
- More documentation will be provided later, specifying exactly what
- is and is not supported with the emulator. For example, card
- insert/remove messages are not supported with this version.
-
- For those of you interested, the files modified/added to the POSE
- software base were, Platform_FfsLibWin.cpp and
- TrapPatches_FfsLib.cpp.
-
- Keep in mind that this is a first beta release, if you have any
- questions or problems, email TRGnet directly.
-
- Zip file containing ffs_pose.prc and CFPro.prc can be downloaded
- from:
-
- http://www.trgnet.com/download/pose/fat.zip
-
- POSE version 3.0a4 or greater can be downloaded from:
-
- http://www.palmos.com/dev/tech/tools/emulator/>
-
- * "Pen" events are essentially created as needed and inserted into
- the Palm OS on demand from mouse events by way of a patch on the
- SysEventGet function. However, until now, there was no
- corresponding patch to EvtSysEventAvail to make that function return
- true if the host mouse was down. Now there is. [Michael Nordstrom]
-
- * Added back long paths for MRU menus. [Chris Antos]
-
- * (Windows) Made F11 minimize the window. [Chris Antos]
-
- * (Windows) Swapped positions of About and Exit menu items. [Carlton
- Craighead]
-
- * Simplified Skins dialog.
-
- * Simplified Gremlins dialog. Instead of entering magic numbers like
- zero and -1, use checkboxes to enable desired features.
-
- * Added Palm IIIc skins. Renamed "Color Device" to Palm IIIc.
-
- * Added UsingPOSE.pdf.
-
- * (Unix) Implemented "File/Save" menu item. [Dan Poirier]
-
- * (Unix) Fixed problem where UART::Initialize would get called twice
- when reloading a .psf file, triggering an assert. [Dan Poirier]
-
- * (Windows) Fixed problem with not setting the skin palette when
- using the generic skin on 8-bit monitors. [Andreas Linke]
-
- * Removed SndInit patch that would set the system volume level to
- zero, mirroring what happens in the simulator. However, this
- caused problems with people not hearing sounds when they expected
- to. So, removed the patch. If you don't want sound, turn it off
- in the Preferences/Properties dialog. [Frederic Paolucci]
-
- * (Unix) Building under Solaris 2.6 (with gcc installed) is now
- possible. It's probable that building under other SunOS environments
- won't work.
-
- * (Unix) The window resizes to match skin selections.
-
- * Export Database dialog now primarily lists the actual database name,
- with the application icon name in parentheses if it differs.
-
-
- Changes for 3.0a4 (1/28/00)
- ---------------------------
- * Interim internal release dates:
- 3.0a4e1 - 12/02/99
- 3.0a4e2 - 12/30/99
- 3.0a4e3 - 01/07/00
- 3.0a4e4 - 01/23/00
- 3.0a4e5 - 01/26/00
- 3.0a4e6 - 01/27/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. Note that you no longer need to use gdbpanel
- or gdbplug if you were using those with earlier versions of Poser,
- Copilot, or xcopilot. [Ben Thomas]
-
- - Build your app. Be sure to _both_ compile and link with -g
- (e.g., "gcc -g ..."). On the compile pass, this generates the
- necessary symbol information; on the link pass it forces the
- inclusion of a debug runtime code that results in a breakpoint
- being installed in PilotMain when the app starts.
-
- - Start Poser.
-
- - Load your app into Poser.
-
- - Start gdb, loading your application's symbol table (e.g., "gdb
- myApp"). Note that the file to be loaded is the "myApp" file
- created by the GCC link pass, not "myApp.prc" created by
- buildprc.
-
- - Type "target pilot localhost:2000" to gdb. It should respond
- with a message along the lines of "Remote debugging under PalmOS
- using localhost:2000. Waiting... (Press Ctrl-C to connect to
- halted machine)".
-
- - Start your app on Poser.
-
- - Wait for gdb to see the initial breakpoint and prompt you.
-
- - Start debugging.
-
- * 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]
-
-
- 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.
-
-
- Changes for 2.1d29 (7/8/99)
- ---------------------------
- * Interim internal release dates:
- 2.1d28.1 - 6/4/99
- 2.1d28.2 - 6/4/99
- 2.1d28.3 - 6/11/99
- 2.1d28.4 - 6/11/99
- 2.1d28.5 - 6/11/99
- 2.1d28.6 - 6/15/99
- 2.1d28.7 - 6/16/99
- 2.1d28.8 - 6/23/99
- 2.1d28.9 - 6/25/99
- 2.1d28.10 - 6/30/99
-
- * For temporary backward compatibility, "bare" file names on the
- command lineare treated as paths to .psf files. [Andreas Linke, Mike
- McCollister]
-
- * (Mac) Fixed problem with receiving Error #18 when trying to download
- ROMs from actual devices over the serial port. [Mark Ordal]
-
- * In debugger/sockets communications, allow for recv() returning
- zero, indicating a closed connection.
-
- * Fixed multi-threading bugs. [Andrew Ball, Daniel McCarty, Scott
- Johnson, Keith Wolcott, Art Dahm, Mark Lussier, Alex Robinson,
- Patrick Porlan]
-
- * (Unix) Fixed some makefile problems. [many]
-
- * (Mac, Windows): new case graphics. Note that the edges of the new
- graphics are a little rough; we'll be working on that for the next
- release. Also, the Mac version doesn't set up a custom palette in
- 8-bit mode, yet, so for best results, you might want to put your
- monitor in 16- or 24-bit modes. Finally, the Unix version will get
- the new graphics in the next release.
-
- * Print some logging information using signed instead of unsigned
- value. [Oliver King-Smith]
-
- * Don't go into infinite recursion when the emulated PC is set to an
- odd memory address. [John Marshall]
-
- * Fixed problem in the "NetLib redirected" version of
- NetLibSocketAccept where the address and address length were not
- returned. [Bill Pitore]
-
- * (Windows) As outlined in the notes for 2.1d28, Poser will look for
- the last-saved .psf file when starting up. It used to save the
- reference to this file as a full pathname. Now, if the attempt
- to locate the file with the full pathname fails, Poser will look
- for a .psf file with the same name in the same directory as
- Poser itself. This approach is similar to the way in which
- Poser looks for .ROM files that are no longer at their last known
- location. [Michael Hado]
-
- * Worked around VC++ 6.0 bug where tabbed dialogs in applications
- built by it won't show up on systems without IE 4.x installed.
- [Michael S. Davis]
-
- * (Unix) Fixed a minor bug in skin loading code which causes Emulator
- to crash when it tries to load a skin file from current directory.
- [Vlad]
-
- * Set the command key bit when Gremlins posts an up or down arrow.
-
-
- Changes for 2.1d28 (5/21/99)
- ----------------------------
- * Interim internal release dates:
- 2.1d27.1 - 5/17/99
-
- * (Windows) Added command line options:
-
- -psf <filename>: emulator loads the specified .psf file on startup.
-
- -rom <filename>: specifies the ROM image file to use.
- -ram <size>: specifies the amount of RAM to emulate (in K). Valid sizes
- are 128, 256, 512, 1024, 2048, 4096, and 8192.
- -device <type>: specifies the device to emulate. Valid types are pilot,
- palmpilot, palmiii, palmiiix, palmv, and palmvii.
- -silkscreen <type>: specifies the silkscreen to use. Valid types are
- english and japanese.
-
- Case is NOT significant.
-
- Examples:
-
- Emulator -psf C:\Data\Session.psf
-
- Emulator -ROM C:\ROMs\3.0\debug.rom -RAM 1024 -Device PalmIII
- -Silkscreen English
-
- Startup rules are now as follows:
-
- 1 If the Caps Lock key is toggled in the ON position, always bring
- up the New/Open/... dialog.
- 2 Scan the command line for startup parameters. If an error occurs
- trying to scan the command line, the error is reported and the user
- is presented with the New/Open/... dialog.
- 3 Use the .psf file if one is specified. If an error occurs trying
- to load the file, the error is reported and the user is presented
- with the New/Open/... dialog.
- 4 If any of -rom, -ram, -device, or -silkscreen are specified, try
- to start a new session based on those values. If all are specified,
- the new session is automatically created. If any of those four
- values are missing, the "New Configuration" dialog is displayed.
- If the user cancels the dialog, or if there is an error creating
- the new session, any error is reported and the user is presented
- with the New/Open/... dialog.
- 5 If no command line options are specified, try re-opening the last
- saved .psf file (this step is skipped if the user last created a
- new session, but did NOT save that session to a file). If an error
- occurs trying to load the file, the error is reported and the user
- is presented with the New/Open/... dialog.
- 6 Try creating a new session based on the settings the user last
- specified when creating a session. If there is an error creating
- the new session, the error is reported and the user is presented
- with the New/Open/... dialog.
- 7 Finally, if all else fails, present the user with the New/Open/...
- dialog.
-
- Steps 1, 5, 6, and 7 describe the old startup rules. Steps 2, 3,
- and 4 are new. [Steve Haneman]
-
- * See that problem where I said that saving a session file could take
- up to 15 seconds or even longer? And see where I said I didn't know
- why? Well, it's because I'm an idiot. Under certain circumstances,
- Poser could get into a state where it would save the same session
- file several times in a row. Normally it would take a 1/2 second to
- save a file. But if it decided to save the same file 30 times in a
- row, that would take 15 seconds...
-
- * Fixed some more synchronization problems on SMP machines.
-
- * Force the Log####.txt files to be stored in the Poser directory
- instead of whatever directory happens to be the current one.
-
-
- Changes for 2.1d27 (5/7/99)
- ---------------------------
- * Interim internal release dates:
- 2.1d26.1 - ???
- 2.1d26.2 - ???
- 2.1d26.3 - ???
- 2.1d26.4 - 3/25/99
- 2.1d26.5 - 4/1/99
- 2.1d26.6 - ???
- 2.1d26.7 - ???
- 2.1d26.8 - 4/27/99
- 2.1d26.9 - 4/29/99
- 2.1d26.10 - 5/5/99
-
- * Added special messages for accessing NULL and for trying to access
- the A5 register (in order to access global variables or make inter-
- segment jumps) when A5 is not set up for the application trying to
- use it. [Roger Flores, Ken Krugler]
-
- * Better tracking of the current application. Now, if errors occur
- during an "action code" sequence, the application executing is
- reported, not the "main", "real" application that has the stack, A5,
- etc. [Roger Flores]
-
- * Fixed problem with installed Palm OS files and .psf files not
- getting added to the MRU lists if the list was empty. [Scott
- Johnson]
-
- * Fixed problem with MRU lists getting too long. [John Kinast]
-
- * In our SysUIAppSwitch patch, release any leftover command parameter
- blocks (if any). [Catherine White]
-
- * Fixed problem with the Escape key used to wake up a sleeping device
- also showing up in the event queue. [Daniel McCarty]
-
- * (Mac) Added support for Escape, F1-F4, page up/down.
-
- * Added special checks and error messages for SANE Math calling
- sequences. [Steve Lemke]
-
- * Rolled in Adam's fixes to conditional breakpoints. [Adam Dingle]
-
- * Fixed problems with NetLibSocketAddr. [Adam Dingle]
-
- * Converted to VC++ 6.0.
-
- * Fixed problem with getting names of library routines in the
- profiling system. [Adam Dingle]
-
- * Made Profile/Initialize implicit. [Adam Dingle]
-
- * Added explicit parent node information to profiling output text
- file. [Adam Dingle]
-
- * Fixed problem with recursive routines recursing too deep in the
- profile output functions.
-
- * The workaround for the old FindSaveFindStr bug didn't always work;
- it would sometimes still let the bug emerge. Made a small tweak to
- keep it suppressed.
-
- * Turned off stack overflow checking facility. It would occasionally
- cause the emulator to walk the dynamic heap when the heap was in an
- inconsistant state, resulting in spurious "...regular checkup..."
- error messages. [The IBM guys: Paul Silagi, Chunk Bazil, Mike Nagy]
-
- * Added support for the contrast button on Palm Vs. The button is on
- the right-hand side of the display graphic, opposite from the power
- button. You can't see it, but clicking on it brings up the contrast
- dialog. The dialog itself has no visual effect yet. [Ron Flax]
-
- * Breakpoints are now preserved across reboots. [Steve Lemke]
-
- * Totally rewrote the way (a) tailpatches and (b) soft breakpoints
- are handled. Previously, Poser would get control by handling
- special opcodes written into emulated memory: TRAP $D for
- tailpatches and TRAP $0 for soft breakpoints. However, there were
- problems with this approach. For one thing, what would happen if we
- needed to write a TRAP $D and TRAP $0 to the same memory location.
- You couldn't do it. There was no way, for example, to use
- PalmDebugger to set a breakpoint just after a call to a system
- function that Poser tailpatched. Also, Adam Dingle pointed out a
- problem with the actual routines involved: on very rare occasions,
- if an interrupt occured just after one of those TRAP $Ds or TRAP $0s
- were executed, then the next opcode executed would be the one that
- originally resided at that location, an NOT the first opcode in the
- interrupt routine. Anyway, this whole mess has been replaced with a
- new mechanism that doesn't alter the emulated RAM or ROM. [Steve
- Lemke, Adam Dingle and the IBM guys: Paul Silagi, Chunk Bazil, Mike
- Nagy]
-
- * Sped up performance by 20%. But since the previous change slowed
- things down by 13%, that's not as great as it first sounds.
-
- * Poser now ignores soft breakpoints (those installed by
- PalmDebugger) it encounters when it calls into the ROM for it own,
- nefarious, "between the cycles" purposes. [Steve Lemke]
-
- * Fixed problems trying to re-establish a sockets connection after
- it's been broken when the external debugger quit. [Ron Marianetti]
-
- * When asked for a ROM, .psf, .prc, etc., file, set the initial
- directory to the last directory used for that file type.
-
- * (Windows) Allow multiple .prc file selection in the Open File dialog.
-
- * ROMs with invalid header checksums now generate a non-fatal warning
- instead of a fatal error. [Paul Dugas]
-
- * Allow for zero-length objects appearing at the end of .pdb files.
- [Christopher Hunt]
-
- * Massive spring cleaning of sources. Now all major sub-systems have
- a consistant interface for creating new sessions, resetting
- sessions, saving sessions, loading sessions, and disposing of
- sessions. Also, a lot of naming and scoping inconsistancies were
- taken care of. Also, namespaces were forsaken in favor of classes
- with static member functions; the CodeWarrior and VC++ browsers
- didn't handle namespaces too well.
-
- * In line with the above, .psf files are now compressed, taking as
- little as 15K for one that was normally 1 Meg. Note: the time it
- takes to compress an image can vary wildly, sometimes being nearly
- instantaneous, and sometimes taking upwards of 15 seconds. I'm not
- sure why the difference occurs...
-
- * Also in line with the source code spring cleaning, the entire
- emulator state is now saved to the session files. When loaded from
- the session files, the entire emulator state is restored. This means
- that you are returned right back to where you were when you created
- the session file; you do not have to go through the process of
- rebooting the "device".
-
- * Only heed the "Continue Past Warnings" option if a Gremlin is
- actually running. [Scott Johnson]
-
- * Added support for the "dead battery" pin on Port D on EZ devices.
- This should cut down the number of low-battery warnings on those
- devices. [Jesse Donaldson]
-
- * Don't insert keyboard or mouse events if stopped in the debugger or
- if the main emulator window is not active.
-
- * Added support for 4-bit LCD mode on EZ's. Found and fixed a long-
- standing bug where the emulated copy of the LCD display might not
- get updated if the lcdPageWidth register was updated.
-
- * If the emulated serial port was open and a reset occured, close the
- host serial port.
-
- * On the Mac, session files contain references to their associated
- ROM files via aliases. On Windows, the references are stored as
- full pathnames. This is old news. What's new is that if either of
- these mechanisms fails to find the ROM file, Poser now looks first
- in the same directory as the session file for a ROM file with the
- same name, and if that fails looks in Poser's own directory for a
- ROM file with the same name.
-
- * When reporting a corrupted heap, display also the address of the
- chunk header. [Adam Dingle]
-
- * Implemented Part I of Gremlin Hordes: You can now periodically have
- the complete emulator state saved while a Gremlin is running. This
- state can be reloaded, and the Gremlin restarted.
-
- This feature is controlled via a new setting in the New Gremlin
- dialog. There is now an editable item called Snapshot Frequency.
- The number entered here is the number of events that should occur
- between the time snapshots are taken. The default value is 10,000
- events. By setting this value to zero, you turn off the snapshot
- feature.
-
- Snapshots are saved in a single directory in the Poser directory.
- The name of the directory is "GremlinStates_####", where #### is a
- value ensuring the directory name's uniqueness.
-
- Snapshots are saved in this directory with the name Event##########,
- where ########## is the event number at which the snapshot was
- taken. Snapshots are merely session files, so they can be reloaded
- at any time, just like regular session files.
-
- Since snapshots are taken while a Gremlin is running, the Gremlin is
- automatically turned off when the snapshot is reloaded. However,
- Poser displays the Gremlin Control window when the snapshot is
- loaded, allowing you to resume the Gremlin if you want. [Roger
- Flores]
-
- * Fixed a bug in the Gremlins facility that validates forms and form
- objects before trying to manipulate any of them. A call to
- FrmGetObjectType would occassionally return garbage, leading the
- rest of the function astray. [Scott Maxwell]
-
- * Added Unix release. [Ben Williamson, David Creemer]
-
- * Fixed serial port not working on EZ devices (a pin moved from port
- F to port D during hardware development, and I missed it). [Florent
- Pillet]
-
- * Don't validate form objects and their sizes on Palm OS 1.0 devices.
- The built-in applications don't appear to follow the rules. [Andrew
- Ball]
-
- * Rolled in Adam's conditional breakpoint enhancements. [Adam Dingle]
-
- "A register reference in a conditional breakpoint expression can
- use either a direct (i.e. "d5") or indirect (e.g. "12(a6)")
- addressing mode. Furthermore, a register expression can be
- suffixed with either ".b", ".w" or ".l" to indicate that the
- expression to be compared is either a byte, a word or a long. An
- an example, "12(a6).w == 1000" compares the two bytes at memory
- location (a6 + 12) to the value 1000. "d4.b == 100" compares the
- low byte of the d4 register to the value 100.
-
- "I have found this enhancement to be extremely useful for breaking
- into the debugger when a local variable (typically referenced off
- the a6 register in code built by CodeWarrior) has a certain value."
-
- * (Windows) Fixed problem with running on dual-processor boxes. [TBD]
-
- * There is now a "white paper" on Poser usage at the following URL:
-
- <http://www.palm.com/devzone/docs/pose.htm>
-
-
- Changes for 2.1d26 (2/26/99)
- ----------------------------
- * On the Mac, we were saving the device type to the .psf file twice.
- On Windows, we weren't saving the country type at all. [Waddah
- Kudaimi]
-
- * System call logging now also gets the names of library functions,
- and attempts to make a better stab at "dispatch" system functions
- (where a single dispatch code sub-dispatches to a suite of other
- functions, as with the Floating Point Manager). [Ken Krugler]
-
- * Sped up debugger communications via sockets by 20x. [Ron Marianetti,
- Mark Corry]
-
- * (Windows) Added conditional breakpoints. This is bolted on for now,
- but should eventually be merged more seamlessly. Changes provided
- by Adam Dingle of AvantGo. From Adam's release notes:
-
- New debugging features
-
- I've posted several messages recently to the palm-dev-forum mailing
- list in which I've pointed out several limitations of the debugger
- in CodeWarrior for PalmOS: it doesn't support data breakpoints
- ("watchpoints") and its conditional breakpoint implementation is
- very slow. To work around these limitations, I've added both data
- breakpoints and fast conditional breakpoints to the 2.0b3 emulator.
-
- A data breakpoint allows you to monitor a range of memory addresses
- for writes. When any code tries to write to the addresses you've
- monitored, execution will immediately break into the debugger. This
- can be extremely useful when you know that a certain data structure
- is being corrupted somewhere in your program, but you don't know
- where it is happening.
-
- To set a data breakpoint in the modified emulator, first launch the
- emulator, then start the debugger in CodeWarrior. In the emulator,
- choose the "Breakpoints" menu item. A dialog window will pop up;
- select the "Enabled" check box, then enter a start address and a
- number of bytes to monitor. The address and number of bytes may be
- either hex ("0x89abc") or decimal ("12345"). As an example, if the
- start address is 0x10000 and the number of bytes is 8, then any
- write to addresses 0x10000 through 0x10007 will break into the
- CodeWarrior debugger.
-
- Conditional breakpoints allow you to break when execution reaches a
- given address, but only when a certain condition is true.
- CodeWarrior for PalmOS supports conditional breakpoints, but its
- implementation is so slow as to be practically useless. As I
- pointed out in an earlier post to the palm-dev-forum list, in the
- CodeWarrior debugger, each iteration past a conditional breakpoint
- takes about 0.3 second, so you have to wait for an eternity if you
- have to iterate hundreds or thousands of times until the break
- condition is true (as is often the case in debugging).
-
- The modified emulator allows you to set conditional breakpoints with
- virtually zero overhead. To set conditional breakpoints, first
- launch the emulator, then start the CodeWarrior debugger. When you
- are stopped in the debugger, choose the "Breakpoints" menu item in
- the emulator. A dialog window will pop up which will allow you to
- set up to 6 conditional breakpoints. To set a breakpoint, choose a
- breakpoint slot and press the "Edit" button. A window will pop up
- where you can enter an address and a condition. The address can be
- either hex ("0x2468ace2") or decimal. Typically, you will determine
- the address where you want to break by selecting the "mixed" view in
- CodeWarrior to see a mix of source and assembly code. The condition
- you specify must be of the form "<register> <condition> <constant>",
- where
-
- <register> is one of the 68000 registers D0...D7 or A0...A7
- <condition> is ==, !=, <, >, <=, or >=. (Important: for now,
- all comparisons are UNSIGNED. This means that you can't use
- a condition such as "D0 < 0", which will always be false).
- <constant> is a hex or decimal constant
-
- By choosing the "mixed" view in CodeWarrior, you can see which 68000
- registers represent which local variables in your program, and so
- you can construct an appropriate break condition involving a
- register.
-
- * Exposed Palm IIIx and Palm V support.
-
- * Fixed problem with ROM Transfer on EZ devices. [Yoshiyuki Kubo]
-
- * Relaxed form-object-validation rules to allow for zero-sized
- gadgets and tables. [Roger Flores]
-
- * Fixed bug in AutoRunAndQuit mechanism where Poser would quit when
- a sub-launched application would quit, not when the application-of-
- interest would quit. [Steve Haneman]
-
- * NetLibDmReceive should really work this time. [Doug Morrison]
-
-
- Changes for 2.1d25 (2/16/99)
- ----------------------------
- * Different method for checking whether or not a library function is
- implemented. Poser still only checks known (i.e., Palm Computing)
- libraries, but now instead of using a hardcoded table, it takes
- advantage of the fact that the "open library" function appears right
- after the dispatch table. [Tim Wiegman, Adam Hampson]
-
- * (Mac) Added WDEF project to Poser project. Changed the way the
- outline region is calculated (should be more accurate now).
-
- * Added support for internal faster trap dispatching mechanism. The
- major effect of this is that Poser can now support non-debug Palm
- VII ROMs again. [Bob Ebert]
-
- * Added support for Autorun and AutorunAndQuit directories. These
- directories are like the Autoload directory. Applications in
- Autorun are loaded, and then one is chosen to be executed (by
- convention chosen to be the last file in the directory).
- Applications in AutorunAndQuit are loaded, and then one is chosen to
- be executed in the same way. When that application quits, Poser
- quits. If there are files in both Autorun and AutorunAndQuit, the
- last file in AutorunAndQuit is chosen for execution. The files in
- those directories can also contain launchable documents such as
- .PQAs. [Steve Haneman]
-
- * (Windows) Centered the LCD. [Scott Johnson]
-
- * Better logging facilities. Here's what we've got so far:
-
- - Error Messages: undefined and unimplemented.
-
- - Warning Messages: If a dialog comes up that can be dismissed by
- clicking on the Continue button, this option causes the message
- to be logged. - Misc Gremlin Info: undefined.
-
- - Assembly Opcodes: unimplemented. Will eventually log assembly-
- level trace information (registers, PC, opcodes, etc.)
-
- - Posted events: events entered into the system by calls to
- EvtAddEventToQueue, EvtAddUniqueEventToQueue,
- EvtEnqueuePenPoint, and EvtEnqueueKey.
-
- - Received events: events returned by EvtGetEvent, EvtGetPen, and
- EvtGetSysEvent,
-
- - System calls: calls to Palm OS functions.
-
- - Application calls: unimplemented. Calls to functions in your own
- application. In order for this to work, the name of the function
- needs to be stored in memory following the function itself.
- CodeWarrior supports this convention, gcc currently does not.
-
- - Serial Activity: serial port being opened and closed, changes in
- serial port settings.
-
- - Serial Data: data being transmitted and sent.
-
- - NetLib Activity: calls to NetLib functions, parameter values and
- return values.
-
- - NetLib Data: data being transmitted and sent.
-
- - ExgMgr Activity: unimplemented. You get the idea...
-
- - ExgMgr Data: You get the idea...
-
- - High-level Debugger Activity: messages received from an
- external debugger and the replies sent back.
-
- - High-level Debugger data: details of the messages sent back and
- forth. Not all packets currently display all their data when
- this mode is turned on.
-
- - Low-Level Debugger Activity: trace of the low-level mechanisms
- that receive raw data from external debuggers and the raw data
- being sent back.
-
- - Low-Level Debugger Data: dumps of the raw data being sent back and
- forth.
-
- These options are presented in a dialog box with two tabs: Normal
- and Gremlins. The first tab contains options which are active
- during normal emulator use. The second tab contains options which
- are active when using Gremlins.
-
- Along with this new dialog, the Debug Options and New Gremlins
- dialogs have also been changed. The logging checkboxes have been
- removed from Debug Options (along with some currently unused
- checkboxes). The logging checkboxes in the New Gremlins dialog have
- been replaced with a "Logging Options..." button that brings up the
- Logging Options dialog. A new checkbox ("Continue Past Warnings")
- has been added to the New Gremlins dialog that controls what happens
- when a non-fatal error dialog is displayed; if possible, these error
- dialogs will automatically be dismissed if this option is checked.
-
- For performance reasons, all logged information is stored in an
- internal memory buffer. Additionally, only the most recent
- information is kept. After a certain threshhold, old information is
- discarded. The amount of information kept is initially 1Meg, but
- that can be changed by calling HostSetLogFileSize.
-
- The in-memory buffer is flushed on the following occassions:
-
- - The application quits.
- - An error is displayed.
- - A new Gremlin is started.
- - An exception occurs.
-
- Logged data is written to a file named "Log####.txt", where #### is
- a number ensuring the file name's uniqueness.
-
- Contents of the log file are of the form:
-
- <Time> <Gremlin Event> <Text>
-
- <Time> is the zero-based time in seconds, where the base is the time
- of the first event logged.
-
- <Gremlin Event> is the event sequence number if Gremlins is running.
- This field is omitted if Gremlins is not running.
-
- <Text> is the log text. Output is generally one line long, with the
- major exception being hex dump information.
-
- * Allow more concurrent tailpatches. Previously, there was a fixed
- number of traps that could be tailpatched at once. Exceeding this
- limit would cause Poser to abort().
-
- * Allow one particular SecurityLib function to access low-memory.
- [Gavin Peacock]
-
- * Implemented HostSetLogFileSize. Increased default log size from
- 128K to 1Meg. [Dan Rowley]
-
- * Support netSocketOptSockNonBlocking in NetLib redirection. Also
- support the UDP calls (NetLib[Send|Receive](PB) with non-NULL
- address specifications). With these changes, Windows users can now
- Network HotSync. [Tilo Christ]
-
- Here's now (this is for Palm III):
-
- - Get the Network HotSync files from:
-
- <http://www.palm.com/custsupp/downloads/netsync.html>
-
- - Run "nhssetup.exe" to extract "setupex.exe".
-
- - Run "setupex.exe" to install Network HotSync.
-
- - Fire up Poser.
-
- - Install "netsync.prc". There will be one in your ...\Palm
- Desktop\ <UserName>\Install\ directory or your ...\Palm
- Desktop\add-on\ directory.
-
- - Go to the HotSync application.
-
- - Select the "LANSync Prefs..." menu item.
-
- - Select the "LANSync" option. Click on "OK".
-
- - Select the "Primary PC Setup..." menu item.
-
- - Enter your Primay PC's IP address. You can get this from the
- HotSync Manager (click on the HotSync icon in the TaskBar,
- select the "Setup..." menu item, click on the "Network" tab, and
- click on the "TCP/IP Settings..." button). Click on "OK".
-
- - Click on the "Select Service" button under the "Modem Sync" icon.
-
- - Create a new service or modify an existing one. Either way, the
- result should be a service with the phone number set to "00".
- Exit that screen.
-
- - Click on the "Modem Sync" icon and sync as usual.
-
- * (Mac) Additional note on NetLib redirection: currently, support
- is implemented with the help of the GUSI library. This library is
- built on top of MacTCP, which doesn't support the settting or
- getting of socket options. Any call to NetLibSocketOptionGet or Set
- will result in an error on the Mac. Eventually, emulation will be
- performed with direct Open Transport calls, and this limitation will
- go away.
-
- In the meantime, this limitation affects the ability to Network
- HotSync from Poser runningon the Mac to HotSync running on a PC.
-
- * Fixed a long-standing 2.1dx bug where the screen would not always
- reflect the state of the LCD buffer. One way this could happen is
- if the screen were modified in a strictly high-memory to low-memory
- order (as happens when a document is scrolled down).
-
- * (Windows) Fixed byteswapping problem in the addresses returned by
- NetLibGetHostByName. [Pedro Alves]
-
- * The text file dumped by the profiler always used to be named
- "Profile Results.txt" and would be written to the current default
- directory. Now the file name is based on the file name used for the
- binary output and is stored in the same directory as it. This is
- mostly useful if the output file name is specified by
- HostProfileDump (). [Steve Haneman]
-
- * While running Gremlins, validate the sizes of various form objects.
- [Chris Antos] The rules are:
-
- * frmBitmapObj, frmLineObj, frmFrameObj, frmRectangleObj,
- frmLabelObj, frmTitleObj, frmPopupObj: Don't care. We don't
- touch them or look at them.
- * frmControlObj: if the style is popupTriggerCtl, allow a
- zero-width object.
- * frmListObj: if the number of items is zero, allow a zero-height
- object.
- * In all other cases, disallow zero-height or zero-width objects,
- as well as objects completely offscreen.
-
- * (Windows) Added mnemonic keys to the menus and dialogs. [Scott
- Johnson]
-
- * Adjusted the internal rectangle indicating the bounds of the hard
- buttons on the case graphics, now that the case graphics have
- changed. [Horace Ho]
-
- * Enable storage heap write access in our NetLib-redirected version
- of NetLibDmReceive. [Neil Rhodes]
-
- * Turned back on the checks to see if someone accesses the area from
- 0x00018000 to 0x00020000. [Adam Dingle]
-
- * Added Japanese color silkscreens (no B&W yet).
-
-
- Changes for 2.1d24 (1/25/99)
- ----------------------------
- * Yow...time to start updating those copyright statements...
-
- * Fixed performance problems with logging (this really affected
- Gremlins performance). [Andrew Ball]
-
- * Made small change to heap tracking routines; this change really
- speeds up overall performance. A lot of performance tuning still
- needs to be done here. [Scott Johnson]
-
- * NetLib redirection. [Phil Shoemaker, Ron Marianetti]
-
- Here's the current list of what doesn't yet work:
-
- Raw sockets (not on the Mac at all, works on Windows only if
- your version of WinSock supports it).
-
- PalmOS-specified options:
- netSocketOptSockNonBlocking
- netSocketOptSockRequireErrClear
- netSocketOptSockMultiPktAddr
-
- BSD sockets options that are not supported by "NetLib redirection"
- because the underlying WinSock library doesn't support them:
- netSocketOptTCPMaxSeg
- netSocketOptIPOptions
- netSocketOptSockSndLowWater
- netSocketOptSockRcvLowWater
- netSocketOptSockSndTimeout
- netSocketOptSockRcvTimeout
-
- Timeouts
-
- NetLibGetMailExchangeByName
-
- UDP stuff
-
- Turning NetLib redirection on and off on the fly. It might be
- safer to change the setting, then quit and restart Poser (or at
- least reset the ROM).
-
- MacTCP doesn't appear to timeout if it can't make a connection
- to a socket on a remote machine that isn't listening on that
- socket. There may be other cases where MacTCP doesn't timeout
- or return some other error. In those cases, the PalmOS application
- will hang. You should be able to press Cmd-. to get out of those
- situations, causing the patched NetLib to return a user-cancelled
- error number.
-
- Comments on how NetLib redirection works: Poser has the ability
- to intercept process execution at the points where an OS function
- is called and where the OS function returns. Poser can then
- execute additional code at these points, and can even skip
- calling the ROM version at all if it wants. That's what happens
- with NetLib redirection. The following calls are intercepted
- and replaced with versions that make the corresponding host-
- specific Ethernet calls:
-
- NetLibClose NetLibConnectionRefresh
- NetLibDmReceive NetLibFinishCloseWait
- NetLibGetHostByAddr NetLibGetHostByName
- NetLibGetMailExchangeByName NetLibGetServByName
- NetLibHandlePowerOff NetLibOpen
- NetLibOpenConfig NetLibOpenCount
- NetLibOpenIfCloseWait NetLibReceive
- NetLibReceivePB NetLibSelect
- NetLibSend NetLibSendPB
- NetLibSleep NetLibSocketAccept
- NetLibSocketAddr NetLibSocketBind
- NetLibSocketClose NetLibSocketConnect
- NetLibSocketListen NetLibSocketOpen
- NetLibSocketOptionGet NetLibSocketOptionSet
- NetLibSocketShutdown NetLibWake
-
- Because NetLibOpen (and its cousins) is entirely patched out, the
- Palm OS version of NetLib never actually gets opened. This means
- that the remaining, unpatched NetLib calls are made in the context
- of a closed NetLib. I don't know if this differenc will affect
- anyone, but it might be good for you to know.
-
- Comments on Palm VII supprt: Palm VII files are not yet externally
- available. But Poser is preparing for that day, so when they *are*
- available:
-
- Download the prerelease Palm VII rom and the required Debug
- wireless panel which will configure the emulated OS so that
- it knows you're not on a wireless device.
-
- To configure: open the ROM with the Palm OS Emulator, wait
- until it has completed the boot process, and install the debug
- wireless panel by dragging the prc onto the running emulator
- window. Now open the Prefs application and go to the "Wireless"
- panel. You'll see a box there entitled "wireline ip". Tap on
- it, clear the existing selection, and enter "207.240.80.136".
- Finally, open the preferences for the Palm OS Emulator itself
- (right-mouse click under Windows), and turn on the "Redirect
- Netlib calls to host TCP/IP" option.
-
- Now when you use a PQA, it will connect to the web site with
- your PC's internet connectivity instead of a wireless radio.
- (Warning: it is much faster that way! Pages will load much
- more slowly when transmitted over the air.) Also, there may
- be warnings where the Emulator notices possible bugs in the ROM.
- Usually these are benign (but indicate the prerelease status of
- the ROM) - pressing "continue" will usually get you by them.
-
- You can install PQAs by dragging them onto the Emulator window,
- or using the Emulator's menu commands. Just make sure you're
- neither in the Launcher when installing an application, nor
- running the app you're upgrading. (Installing software while
- the device is booting is also a bad idea.) The Calculator is
- a convenient, safe app to be in when installing software.
-
- Note that if your PC is behind a firewall, you might not be able
- to connect to our proxy server. Ask your system administrator to
- enable port 5002 for you.
-
- If you get an error message along the lines of "no interfaces
- found: net - 12", that's an indication that you didn't select
- "Redirect NetLib" in the preferences panel. Getting the error
- message "wrong socket type" is an indication that you didn't
- install the DgbWirelessPnl application.
-
-
- * More fixing of semaphore warnings: duh, changing the text of the
- warning message doesn't change the test itself! [many...]
-
- * Made .prc/.pdb file loading more robust: the contents are now
- validated before accessing them. This helps against problems
- like 0x0A's turning into 0x0D's because of network downloading.
-
- * (Windows) Fixed byteswapping problem that would occur when gdb
- tried to set a breakpoint [Ben Thomas].
-
- * (Mac) Fixed problem with getting 'Could not save the file ""
- because the file wasn't found' when trying to save a session.
- [???]
-
- * Palm OS 1.0 support: Gremlins and pen events weren't being
- inserted into the system because EvtGetSysEvent blocked on
- SysSemaphoreWait instead of SysEvGroupWait in that version
- of the OS (we were only patching the later to detect when
- to insert events into the system). Now I patch both functions.
- [Andrew Ball, Ken Hancock]
-
- * Set HotSync user name at boot-up. Name specified in preferences.
- [Richard Ziegelmaier, et al]
-
- * Check for and report for out-of-range access to library functions.
-
- * The workaround for SysAppExit in d22 was hiding the workaround for
- FindSaveFindStr from d20. Adjusted the tests so that one no
- longer hides the other. [Matt Disher]
-
- * Exposed Palm VII and Web Clipping support in external release.
-
- * (Windows) Fixed a problem in the mechanism for exchanging debugger
- information with the Metrowerks debugger. This problem could
- potentially cause debugger packets to be ignored. However, there's
- no evidence that this is the cause of the "Failed to connect to
- remote" problem that some people are still reporting with R5.
- [Ben Sessoms]
-
- * When handling SysPktRtnNameCmdType packets, force the given address
- to be even. Otherwise, we'll generate an internal error as we try
- to walk the function starting at an odd address. [Ben Sessoms]
-
- * Fixed long-standing bug that would crash the New Gremlin dialog if
- the last item in the list had a ROM-based version and a RAM-based
- version.
-
- * Sort the items in the New Gremlin dialog case-insensitively.
-
- * Added support for launching applications with documents. [Gavin
- Peacock]
-
- * Updated bitmaps. [Ken Krugler, Stephen Best]
-
- * Fixed problem with getting a "yadda accessed memory manager data
- structure" while dumping the results of profiling. [Adam Dingle]
-
- * Removed most (hopefully all) influences of Poser's memory
- accessing and ROM function calling from the profiling output.
-
- * Fixed the profiler to handle TRAP $F / <dispatch number> sequences
- where <dispatch number> is not in the range 0xA000-0xAFFF (some
- development systems leave off the leading "A"). [Adam Dingle]
-
- * Bumped the default number of profiled functions from 20000 to 48K.
- [Steve Haneman]
-
-
- Changes for 2.1d23 (12/16/98)
- -----------------------------
- * (Windows) fixed some byteswapping problems with debugger packets.
- (Actually, put *back* some bugs that I fixed...)
-
- * Re-organized sources.
-
- * Added ability to patch libraries. Started patching out NetLib.
- Note that there is no actual NetLib redirection in this release.
-
- * Fixed some serial port emulation problems: mirrored UART settings
- into the host serial port just after the port has been opened, not
- after the first call to SerSetSettings (there may *not* be a call
- to SerSetSettings!).
-
- * Generating a profiling report now also produces a text file for
- use on platforms that can't read the Metrowerks Profile tool
- file format.
-
- * (Windows) Added profiling configuration.
-
-
- Changes for 2.1d22 (12/7/98)
- ----------------------------
- * Only warn about MemSemaphore usage on ROMs that themselves hold the
- memory semaphore correctly. This time for sure! Also only warn
- when the semaphore has been held for 1 minute (previously, the
- timeout was 10 milliseconds).
-
- * Completely overhauled serial port emulation. More of the UART is
- emulated more faithfully.
-
- * If no serial port is selected for emulation pass through and we're
- not in loopback mode, drop transmitted bytes on the floor.
-
- * If IrDA is using the serial port, drop transmitted bytes on the
- floor (for now).
-
- * Re: SysAppExit accessing a deleted stack: SysTaskDelete and a whole
- host of other functions also access the deleted stack until the
- kernel has a chance to switch to another stack. Much gnashing of
- teeth was performed until an appropriate alternate heuristic could
- be found.
-
- * Let PrvCompressedInnerBitBlt access bits outside the allocated
- buffer.
-
- * (Windows) Fixed problems with Cancelling a ROM download.
-
- * Another attempt at fixing -192 errors at startup.
-
- * (Mac) Fixed problem with opening two windows when starting a session
- by double-clicking on a ROM file.
-
- * (Mac) Goosed debugger messaging. Previously, an asynchronous
- callback function would get called when Poser received a packet from
- the debugger. The callback function would set a boolean and then
- call a Toolbox function to wake up the application. The next time
- the application's main-event-loop was entered, the packet would be
- handled. However, the overhead of waking up the app and waiting for
- the main-event-loop to be entered was way too high. I now handle
- the debugger packet immediately in the asynchronous callback
- function. This means that the debugger packet is handled in the
- context of the calling application (the external debugger). If
- Poser were to crash at this point, it would crash the debugger, not
- Poser. Additionally, we have to be very careful not to allocate any
- memory from within the callback, as such memory would be allocated
- from the debugger's heap, not Poser's.
-
- * Changed some of the rules for interacting with an external
- debugger.
-
- In order for an external debugger (PalmDebugger, MWDebug, or gdb) to
- talk with a hardware device, the hardware device has to be
- listening. There are two things a debugger can talk to: the Debugger
- socket and the Console socket. These two sockets correspond to the
- two windows in the PalmDebugger.
-
- To get the ROM to listen on the Console socket, the developer has to
- execute shortcut-.2. To get the ROM to listen on the Debugger
- socket, the device has to cause an exception somehow. Doing
- something wrong (e.g., access invalid memory, divide by zero, etc.)
- does this. Executing a DbgBreak also does this, which is what
- happens when the user executes shortcut-.1. After the exception
- occurs, the ROM goes into a loop where it listens for and responds
- to debugger commands.
-
- Because external debuggers talk directly with Poser and not the ROM
- when debugging with Poser, there's no need to execute shortcuts or
- cause exceptions in order to start debugging. Poser is perfectly
- capable of handling debugger requests, letting the emulated process
- continue on its merry way.
-
- However, when dealing with commands sent to the debugger socket,
- it's very important that the state of the emulated CPU not change.
- Often several commands are issued, ultimately ending with some
- command that restarts the emulated CPU. During these exchanges, the
- debuggers assume that the state of the CPU has not changed since
- "debug mode" was entered. For this reason, when commands are sent
- to the Debugger socket:
-
- - Poser needs to be in "debug mode". That means that it has
- halted any emulation and is just idling. If commands for
- the Debugger socket come in and Poser is not in debug mode,
- the commands are ignored.
- - The exception to this rule is the "get state" Debugger
- command. This command is issued when the user types "att"
- in the Debug window. It indicates that the user wants to
- enter debug mode for the purpose of setting breakpoints,
- examine memory, etc. As a courtesey, Poser will enter
- debug mode when it sees this command.
-
- * Install a 'pose' feature so that applications can tell if they are
- running under Poser or not.
-
- * Install a 'gdbS' feature when connected via a socket to an external
- debugger. The existance of this feature causes programs written
- with prc tools to enter the debugger when they are launched.
-
- * (Windows) Removed a minimum version check that was preventing us
- from using sockets on Windows '95.
-
-
- Changes for 2.1d21 (11/12/98)
- -----------------------------
- * Allow for NULL access bug in FldDelete.
-
- * (Windows) Allow for launching of Emulator by double clicking on
- .psf or .rom files.
-
- * Added back a whole slew of strings accidentally deleted in d20.
-
-
- Changes for 2.1d20 (11/10/98)
- -----------------------------
- * Support full debugger protocol for latest PalmDebugger (with
- integrated Poser support).
-
- * Fixed button mapping problems with EZ hardware.
-
- * Added Greg's Ymodem code for downloading ROMs. This includes his
- fix for high-baud rate downloads.
-
- * Support for higher baud rates.
-
- * Re-establish serial port after Preferences/Properties dialog.
-
- * Allow for access to deleted stack in SysAppExit.
-
- * Allow for bug in NetPrvTaskMain that accesses low-memory.
-
- * Allow for bug in NetPrvSettingSet that reads from a random memory
- location.
-
- * Tighten up on some inappropriate memory checks (only let some
- functions get away with murder in older ROMs).
-
- * Removed check for bug in PrvGetBatteryPercent (it's been fixed).
-
- * Changed formatting of time displayed in Gremlins window. Was in
- seconds, now in hh:mm:ss.
-
- * Revoked Memory Manager privileges for MemCmp, MemMove, and MemSet;
- they no longer have free run of RAM like other MemMgr functions.
-
- * Allow for bug in FindSaveFindStr which reads off the end of the
- handle passed to it.
-
- * Similar comments for FntDefineFont. When copying the contents of
- an old, smaller buffer into a new, larger buffer, it copies the
- size of the new buffer, causing MemMove to walk off the end of the
- old buffer.
-
- * Let ScrInit access unallocate memory for when it copies the splash
- screen from its temporary location to the real LCD buffer.
-
- * Re-enabled code that reports a bug in BackspaceChar, but only for
- newer ROMs.
-
- * Internal change: Better encapsulation of what Palm OS bugs are
- fixed in what version.
-
- * Only warn about MemSemaphore usage on ROMs that themselves hold
- the memory semaphore correctly.
-
-
- Changes for 2.1d19 (10/30/98)
- -----------------------------
- * (Windows) Fixed problem with trying to auto-reload the previously
- used .psf file on startup.
-
- * (Windows) Allow the user to click on the close box of the Startup
- dialog (the one saying New/Open/Download/Exit).
-
- * Fixed two problems with heap management on 2.0 ROMs. First, I was
- failing to recognize the fact that zero in the size field of a heap
- header means that the heap is 64K bytes long. Second, I was
- attempting to access *all* fields of the terminating sentry chunk.
- This chunk only has a size field; attempts to access subsequent
- fields may fail if the sentry is at the end of RAM.
-
-
- Changes for 2.1d18 (10/29/98)
- -----------------------------
- * Disabled Profiling menu items and Transfer ROM menu item until
- the functionality behind those items can be implemented.
-
- * Added "Dragonball EZ" menu item to device list.
-
- * (Windows) Fixed problem with stale reference to the LCD window after
- its been closed.
-
- * Fixed problem in MC68EZ328Bank::GetLCDDepth where it would return 4
- for grayscale mode instead of 2.
-
- * (Mac) Fixed problem getting -192 error on startup with a fresh
- set of preferences.
-
-
- Changes for 2.1d17 (10/28/98)
- -----------------------------
- * Fixed bug in Gremlins when logging information; an internal counter
- would wrap to be negative after a large number of events have been
- posted.
-
- * Re-laid out Debug Options dialog and hooked up the checkboxes.
- Disabled the ones that aren't supported yet.
-
- * (Windows) Fixed another "Unhandled exception caught in main" bug:
- this one would occur when the Poser would try to open a .psf file
- that no longer existed (the previous cause of this bug occured
- when Poser would try loading a .rom file that no longer existed).
-
- * (Windows) Remove old registry entries when found.
-
- * When an error occurs accessing a file, consistantly set the
- %filename parameter for error messages.
-
- * Added "Log error messages" checkbox to New Gremlin dialog.
-
- * Save Gremlins settings to preferences.
-
- * Fixed bug in meta-memory tracking stuff that would trash the
- emulator's heap if it was emulating a device with 256K of RAM
- or less.
-
- * Clear the serial FIFO queues on reset. Fixes a problem with their
- overflowing and serial port emulation is not turned on (that is,
- "None" is selected in the Preferences/Properties dialog).
-
- * Fixed problems with trying to use "&string_object[0]" on empty
- strings. Apparently, there is not necessarily any memory
- allocated for empty string objects, so attempting to take the
- address of the string fails.
-
-
- Changes for 2.1d16 (10/22/98)
- -----------------------------
- * Allow the opening of locked .rom, .psf, .prc, .pdb, and .pqa files.
-
- * Updated TextMgr calls to reflect new (long) parameters.
-
- * Added Autoload facility.
-
- * Fixed problem with trying to wakeup the device (by calling
- EvtWakeup) when the interrupt level mask was too high.
-
- (Backed this modification out temporarily. Seems that the ROM can
- spend a large percentage of its time at this interrupt level if
- it's not doing anything else useful, preventing the user from
- clicking on the LCD screen.)
-
- * Conditionalized the code so that Palm VII, Palm V, and Palm IIIx
- could be included or excluded separately.
-
- * Conditionalized *this* file so that secret stuff can be stripped for
- external releases.
-
- * Fixed the "Save Screen" functions (I'd commented them out while
- adding support for lcdPageWidth and lcdPanningOffset registers and
- forgot to go back and clean up).
-
-
- Changes for 2.1d15 (10/15/98)
- ----------------------------
- * Bug fix: my wrapper function for TxtGetCharBounds was accidentally
- calling TxtGetNextChar (copy & paste error).
-
- * Bug fix: the routine that maps a range of "host" memory into
- "emulated" memory would round the base address down to the nearest
- multiple of four, but the routine that would reverse the process
- didn't do the same rounding. This meant that the routine that
- unmapped would be unable to find the address recorded by the routine
- that did the mapping, and entries would never get unmapped.
-
- * Bug fix: if Poser reads in a preference setting for a Japanese
- silkscreen and that version of Poser doesn't support Japanese
- silkscreens, change the setting. Otherwise we'd get a -192
- (resource not found) error.
-
- * Relaxed MemSemaphoreReserve/Release testing. Now only track time
- when "write" parameter is true.
-
- * Bug fix: allow debuggers access to reserved parts of Dragonball
- memory.
-
- * (Mac) Show errors in a movable modal dialog, allowing the user
- to switch to the Finder, possibly for the purpose of launching a
- debugger.
-
- * Allow selection of multiple items in New Gremlins dialog. These
- items are also reselected when the dialog is re-opened.
-
- * Added HostGremlinNumber, HostGremlinCounter, HostGremlinLimit.
-
- "The reason I'm asking is that I'd like to log info to figure out
- what's going wrong with a specific gremlin test case, but since
- it's pretty far along (e.g. 100000 steps) I only want to start
- logging when I'm getting close to where I think the problem will
- occur. The problem occurs after a different number of steps
- depending on the gremlin seed value, thus I'd like to set my
- 'start recording' value based on which gremlin is running."
-
- * Added HostLogFile. This function returns a special HostFILE* that
- can be used by Palm OS applications that want to write to the same
- file that any Poser facility is writing to. This HostFILE* is
- special in that it is only open when Poser wants it to be, and is
- write-only; any HostFxxx functions that attempt to read from
- HostFILE's will fail when fed this HostFILE*.
-
- Output occurs only when Poser has turned on logging. If the
- Palm OS application calls something like HostFPrintF(hostLogFile,
- "...", ...) and logging is not turned on, the output is discarded.
-
- * Added HostSetLogFileSize. This function sets the maximum amount of
- text written to the file created by Poser's logging facilities.
-
- * If Gremlins is running and a message needs to be displayed that can
- be handled by clicking on a Continue button, write that message to
- a log file instead and implicitly click on the Continue button.
-
- * If Gremlins is running, turn off the facility that causes the user
- to be warned only once of certain kinds of errors (that is, the
- error will be logged to the file every time).
-
- * In the logging output file, add a comment that only the last xxxK
- of information is recorded.
-
-
- Changes for 2.1d14 (10/1/98)
- ----------------------------
- * Added Japanese silkscreens, and support for selecting them.
-
- * (Mac) Added "None" menu item to serial port menu.
-
- * Added support for lcdPageWidth and lcdPanningOffset registers.
-
- * Fixed bug with power-off (I wasn't allowing HwrSleep to change some
- low-memory vectors, resulting in a warning dialog).
-
- * Check for and report heap corruptions. Poser walks the heap
- regularly, usually to sync up its notion of where things are with
- the Palm OS Memory Manager's. These walks used to be vulnerable to
- corrupted heaps. Now they should be more robust.
-
- * (Mac) Updated to CodeWarrior Pro 4.
-
- * Instead of patching ErrDisplayFileLineMsg and showing its text in
- our own dialog, let the ROM version execute. It will eventually
- call SysFatalAlert, which we patch for the same reason (to show the
- text in our own dialog with our own buttons).
-
- * Added stack overflow checking. On all opcodes changing the stack
- pointer (PEA, MOVE, MOVEM, JSR, and any opcode operating on a
- register with pre-decrement mode), I check the stack pointer to see
- if it's (a) close to the end of the stack or (b) past the end of the
- stack. The former gets a warning, the latter gets an error.
-
- * Initialize new RAM to 0xFF (make it look like new flash RAM).
-
- * (Windows) Fixed "Unhandled exception caught in main()" error message.
- This would show up when the previously-used ROM file could not be
- found. Now, the (slightly) less enigmatic message "Could not start
- a new session because the file could not be found" is displayed.
- More importantly, Poser no longer quits after displaying the message.
-
- * Added check for how long the Memory Manager semaphore was held.
- Show a warning if held for more than 10 milliseconds.
-
- * Fixed problem with multiple Gremlin Control windows appearing in
- the windows version. Doh!
-
- * Made the "Release" target an "External Release" target, and added
- an "Internal Release" target.
-
- * Added support for loading clippings.
-
- * Made a change that should take care of accesses to invalid memory
- from an external debugger.
-
-
- Changes for 2.1d13 (9/15/98)
- ---------------------------
- * Fixed bug in heap validation functions; when I extract the *signed*
- hOffset value, I have to sign extend it from 24-bits to 32-bits.
-
- * Mark more parts of memory as memory manager data structures.
-
- * Support hardware sub-ID for EZ devices.
-
- * Support HwrIdentifyFeatures for 68328 devices.
-
- * Enable flash for Palm V and Palm IIIx.
-
- * Fixed long-standing Gremlins bug that would cause event pushing to
- stop after a while (the Gremlin mechanism would enqueue and event
- and then wait for it to be handled; however, in some cases, the
- event would fail to be enqueued, and the Gremlin mechanism would
- wait forever for that event to be handled).
-
- * Allow for a bug in SysBinarySearch in pre-3.0 systems that would
- cause it to pass an invalid pointer to the search callback.
-
- * Added Gremlins Control window (displays gremlin number, current
- event number, and elapsed time; also contains Stop, Resume, and Step
- buttons).
-
- * Tweaked Gremlins engine so that doing a Step doesn't reset the
- "until" value.
-
- * Performance enhancements:
-
- - Changing some functions to return "int" instead of "bool"
- resulted in better code generation, leading to a 7% performance
- boost in my canonical Gremlins test (Gremlin #0, 10000 events
- on the Memo Pad). (Actually, this was only a win in VC++;
- CodeWarrior worked better with "bool". Therefore, all of the
- sources were changed to use "Bool", which is typedeffed to
- "bool" or "int" depending on the compiler being used.)
-
- - Putting back an enhancement from Craig's Mac Copilot lead to a
- 27% performance boost. The idea is to update only the scanlines
- that are changed since the last screen refresh. Craig did it by
- carefully comparing the current LCD buffer with a saved version
- of it. I now do it instead by noting when the LCD buffer is
- being written to (this is done fairly efficiently via the
- MetaMemory tracking routines) and remembering the first and last
- bytes in the LCD buffer that were written to.
-
- * Fixed trap number used in HostControl.h.
-
- * Updated to latest CharEncodingType values from TextMgr.h.
-
-
- Changes for 2.1d12 (9/2/98)
- ---------------------------
- * EmuTraps -> HostControl.
-
- * Let PrvFindMemoryLeaks walk the heap.
-
- * Added HostGetEnv.
-
-
- Changes for 2.1d11 (8/31/98)
- ----------------------------
- * Added support for AMD flash RAM.
-
- * (Windows) Fixed support for external debugging.
-
- * (Windows) Display dialog if an exception is caught in WinMain.
-
- * (Windows) Fixed the way the Dragonball(EZ) registers were
- initialized. After things got going, the registers were OK, but the
- initial values on little-endian machines was completely bogus.
-
- * (Mac) Updated creator resource text.
-
- * Totally revamped the way memory access checking is performed. In
- addition to detecting access to low-memory, system globals, the
- screen buffer and Dragonball(EZ) registers, I validate access to the
- dynamic heap. Now, only the Memory Manager can fiddle with chunk
- headers and trailers, free chunks, and unlocked chunks. For the time
- being, low-stack access is no longer detected, though this feature
- will return. Eventually, we should also be able to detect access to
- uninitialized memory.
-
- * Updated to latest sysFtrNumXXX values.
-
- * Fixed test for Intl Mgr in gremlins.
-
- * Test for NULL in stub Intl Mgr functions.
-
- * I now calibrate the pen before running a gremlin. This is
- necessary for consistant results between different runs across
- boots.
-
- * Fixed error reporting problem where previous messages reported in
- dialogs would inhibit other messages from appearing (that is, the
- attempt to display a second message would end up showing the first
- error message again).
-
- * Handle errant accesses to Dragonball space past the end of the last
- defined register.
-
- * Check for and report unimplemented traps. This check detects
- attempts to call functions that are off the end of the trap table as
- well as calls to SysUnimplemented.
-
- * Internal change: consolidated more error handling in the Errors
- class. Cleaned up the Errors interface a little bit.
-
- * Added temp hack to let PrvGetBatteryPercent read off the end of an
- allocated chunk of memory.
-
-
- Changes for 2.1d10 (8/18/98)
- ----------------------------
- * Display correct error message if a low-stack access is performed (I
- was previously re-using the "screen buffer access" message).
-
- * Low-memory access by the ROM was previously allowed up until
- UIInitialize was called. That's been changed to TimInit.
-
- * Consolidated some "device" menu items in the New Session dialog,
- and added a new device.
-
- * Per Steve and Roger, changed some function names in EmuTraps.h.
-
- * Added Control Panels to the list of applications in the New Gremlin
- dialog box.
-
- * Added support for DbgMessage.
-
- * Internal change: Roger Flores Memorial Constant Eradication. Got
- rid of a lot of constants in EmuTraps.cpp and TrapPatches.cpp. These
- constants were used to fetch parameters from the emulated stack
- pushed on there by emulated code. I now define structs that
- describe the stack contents and use those (with the offsetof macro)
- to get the values. In addition to the obvious one, another
- advantage is that the macros can now determine the _size_ of the
- parameters and call get_long, get_word, or get_byte accordingly.
-
- * Rolled in more IK/Gremlin changes for Ken.
-
- * Double-clicking on an app in the New Gremlin dialog will implicitly
- click on the OK button.
-
- * (Mac) Support Cmd-D in the "Save this file?" dialog (you guys owe
- me!)
-
- * Mapped some internal error numbers to error strings.
-
- * Re-establish the interrupt state of any pressed buttons after a
- reset. This allows you to press the Power key and Cmd/Ctrl-R,
- resulting in a Hard Reset.
-
- * Asking for the 'irda' ROM token will now always fail (at least,
- until we can get some IrDA support implemented). NOTE: the ROM
- calls HwrGetROMToken directly, which means that it will not see the
- effect of this patch.
-
- * Internal change: Platform::DisposeMemory now takes a reference to a
- pointer so that it can set that pointer to NULL.
-
- * Use Platform::AllocateMemory and Platform::DisposeMemory in the
- profiling code, so that it can use temp memory on the Mac.
-
- * EmuProfileDump now uses the name passed in to it. If NULL is
- passed in, a default name ("Profile Results") is used.
-
- * Started on checking memory accesses to the dynamic heap that are
- outside of allocated memory chunks. Not activated yet because (a)
- it's too slow and (b) the hueristics aren't quite right.
-
- * (Windows) Fixed bug with not reporting errors that occurred
- while initializing the emulator. Now you're notified if the serial
- port you've specified in the Properties dialog is busy.
-
- * (Windows) Made the example in the previous bullet a warning,
- not a fatal error.
-
-
- Changes for 2.1d9 (8/4/98)
- --------------------------
- * (Mac) Fixed problem where the emulator would attempt to save the RAM
- file with no name if "Save Always" were selected, the user chose
- Quit from the File menu, and the RAM file was new (i.e., had never
- been saved before).
-
- * Prevent the system from _reading_ low-memory if it's (a) not
- sleeping or dozing, (b) fully booted, and (c) not handling an
- interrupt.
-
- * Hooked up "Fill New Blocks" and "Fill Disposed Blocks".
-
- * Minor optimizations to DRAM_Bank accessors.
-
- * Rolled in Ron's changes for finding a function's name.
-
- * Detect and report accesses to the space below the stack pointer and
- above the low-end of the stack. Note that there is no checkbox in
- "Debug Options" for this, but performance timing shows that there is
- very low overhead for this check (less than .1%).
-
- IMPLEMENTATION NOTE: detecting accesses to the unused parts of the
- stack obviously entail knowing where the stack is. This information
- is gleaned from the SysAppInfoType block when the application is
- launched. However, there's no really good way to hook into the
- launch process. There are advantages and disadvantages to every
- approach, but the one used here is to hook into SysAppStartup and
- SysAppExit. This works for applications that use the standard
- runtime startup code, but applications are not guaranteed to use
- that standard code. Hopefully, the percentage of such applications
- is low.
-
- Additionally, SysAppStartup and SysAppExit are called under
- circumstances other than starting up the application. For instance,
- they are called when action codes are sent to each application. To
- differentiate the two, we ignore all calls to SysAppStartup that
- don't contain sysAppLaunchCmdNormalLaunch in the cmd field of the
- SysAppInfoType block.
-
- * Hooked up "Clean Stack" check box. This option was originally
- defined to overwrite the parts of the stack that were freed up by an
- UNLK or RTS opcode in an attempt to detect accesses to those ranges
- of memory. Since that's now handled by the previous "*", "Clean
- Stack" now means that we initialize the part of the stack reserved
- by LINK opcodes, thus initializing local variables to well-defined
- bad values.
-
- * Fixed bug that occured when setting a breakpoint on an opcode just
- after a call to a system function that was tailpatched by the
- emulator.
-
-
- Changes for 2.1d8 (7/29/98)
- ---------------------------
- * EmuGrmIsRunning (and SysGremlins) FINALLY returns a correct value
- instead of just returning "true" all the time.
-
- * Implemented EmuDmLoadFile and EmuDmSaveFile.
-
- * EmuDmSaveFile now takes a card number as the second parameter.
-
- * Added parameter checking to all EmuXXX functions. Functions that
- return EmuErrs will return emuErrInvalidParameter. StdIO functions
- return error values according to the ANSI/ISO standard, and will set
- errno to emuErrInvalidParameter (note that functions that alter the
- return values of ferror and/or feof will NOT affect those value,
- which is DIFFERENT from the standard).
-
- * Fixed bug when setting the current time on startup. This bug would
- cause a crash on new Palm V ROMs.
-
- * Fixed bug with new Palm V ROMs when they tried to identify how much
- memory was on the "device".
-
- * (Windows) Fixed problem where clicking OK in the Properties dialog
- would crash the emulator under Windows 95 (and could possibly crash
- Windows 95, too!).
-
- * (Mac) Fixed problem where the serial port name would get lost,
- prohibiting the emulator from being able to open the serial port.
-
-
- Changes for 2.1d7 (7/27/98)
- ---------------------------
- * (Mac) Don't feed the ROM mouse/pen events if we've turned off
- emulator execution at idle time. This prevents problems if a dialog
- comes up while tracking the mouse/pen.
-
- * Fixed long-standing bug from Mac Copilot 1.3 days. The functions
- GetRegisters and SetRegisters can be used to save and restore the
- CPU registers. The emulator used those functions for just that
- purpose when it would call ROM functions as subroutines. However,
- the status register was not faithfully saved, which meant that it
- was not always put back the way it was found. Since status bits
- would then occassionally change spontaneously out from under the
- emulated process, things would occassionally go "haywire" (that's a
- technical term).
-
- * Value returned by EmuHostGetVersion is now based on the
- application's version resource instead of being hard-coded.
-
- * (Mac) Save window position.
-
- * Implemented EmuHostIsSelectorImplemented.
-
- * Holding down the Ctrl key while booting/resetting will stop the ROM
- at the start of the Big ROM by using a temporary breakpoint.
-
-
- Changes for 2.1d6 (7/23/98)
- ---------------------------
- * Changed way emulated apps called host functions. Those functions
- used to be called by invoking TRAP $E. Now we latch onto the
- SysGremlins trap number.
-
- * Extended set of host functions.
-
- * Zap some card header fields to say that we don't emulate flash RAM.
-
- * Fixed problem with profiling.
-
- * (Mac) Fixed an execution path where an untyped ROM file wasn't
- getting its type set.
-
- * Fixed problem with stopping on A-Trap breaks.
-
-
- Changes for 2.1d5 (7/21/98)
- ---------------------------
- * (Mac) added version that does profiling.
-
- * Fixed loading of "whole" ROMs (those with Big ROMs and Small ROMs).
-
- * Fixed loading of .pdb files that have an AppInfo block but no
- records.
-
-
- Changes for 2.1d4 (7/20/98)
- ---------------------------
- * (Mac) turned Open and Install menu items into hierarchical menus.
-
- * Fixed bugs with saving and loading session files.
-
- * (Mac) turned Appearance Manager classes back on when running on a
- sufficient machine (I'd accidentally left the application using the
- GA classes even when AM was available).
-
- * (Mac) create the Debug Options window invisibly; reduces flickering
- when opened.
-
- * Converted over to using the cross-platform classes FileReference
- (reference to and unopened file) and FileHandle (reference to an
- opened file). These classes allow more platform-independent code
- (such as the preferences code, which used to deal with Aliases on
- the Mac and file paths on Windows).
-
- * Overhauled error/exception handling/reporting. I now use a
- consistant approach to detecting, handling, and reporting errors.
-
- * Rewrote the ROM image loading function. ROM images consist of two
- parts: a Big ROM and a Small ROM. The ROM image file always
- contains a Big ROM part, but not always a Small ROM part. However,
- the Small ROM part is optional and can be dummied up if necessary.
- The original version of the ROM image loader needed to load in the
- ROM image file once, determine if the Small ROM was included, and
- start over if it wasn't. The new ROM image loader is smarter,
- reading in just the parts it needs to determine if the Small ROM is
- there or not. Only after that does read in the full ROM file.
-
- * Put more strings in resources. Most, but not all, are now done.
-
- * Added StdIO wrappers (see EmuTraps.h).
-
-
- Changes for 2.1d3 (7/7/98)
- --------------------------
- * Added progress bars when loading .prc and .pdb files.
-
- * Added support for drag and drop.
-
- * Now close previous session before opening the next.
-
- * (Mac) Added StandardGetFile file filter to allow files that start
- with "rom." or end with ".rom" or " rom", but that don't have the
- right file type.
-
- * Updated to latest EZ ROM header files (as of 7/6/98).
-
- * Update the low-memory checksum if low-memory is altered by an
- external debugger.
-
- * Fixed long-standing bug that would corrupt ROMs when switching from
- one to another. Since you couldn't do this on Windows in 2.0, you'd
- only see it in the Mac 2.0 version.
-
- * When creating the preferences for the first time, set the amount of
- RAM displayed in the New Configuration dialog to 1Meg.
-
- * (Mac) Allocate large chunks of memory from temp mem.
-
-
- Changes for 2.1d2 (7/2/98)
- --------------------------
- * Revamped startup sequence. From the ERS:
-
- If the application is started by double-clicking on its icon, it
- will attempt to perform some appropriate startup action.
-
- * If the user had saved a session document the previous time the
- emulator had been run, the emulator will attempt to reload that
- document.
-
- * If the user created a new session document during the previous
- session but didn't save that document, the emulator will create
- a document with the same settings.
-
- * If either of those attempts fails (for instance, the previously
- used session document or ROM file cannot be found), or this is the
- first time the user has used the emulator, or the user holds down
- the Caps Lock key while starting the emulator, the user is
- presented with a "New Configuration" dialog box. The user uses
- this dialog box to specify a new hardware/RAM/ROM configuration
- from which a new document is created.
-
- If the user double-clicks on an emulator document icon, the emulator
- attempts to restore the session recorded in that file. This attempt
- may fail if the ROM image for the session can no longer be found. In
- that case, the session document can no longer be used; session
- documents can only be used in conjunction with the exact same ROM
- image that created them.
-
- If the user double-clicks on a ROM image icon, the emulator
- presents the user with the "New Configuration" dialog box with the
- selected ROM file entered into the ROM File text slot.
-
- * Brought Mac and Windows versions in sync with each other.
-
- * IMPORTANT NOTE: "RAM" files created by previous versions of the
- emulator are no longer supported. There are two reasons for this.
- First, they didn't contain enough information that today's session
- files need (such as the associated ROM file name, or the device type
- to emulate). Second, ".ram" is the extension for Real Audio Media
- files. Therefore, the emulator now reads and writes ".psf" (Palm
- Session File) files.
-
- * Added Registry information so that Emulator files have the right
- description next to their names.
-
-
- Changes for 2.1d1 (6/22/98)
- ---------------------------
- * Updated to latest UAE.
-
- * (Mac) Updated to CodeWarrior Pro 3. (Requires "MW C/C++ PPC"
- from May 19th or later.)
-
- * Removed 68K and FAT versions.
-
- * New menu organization.
-
- * More emphasis on documents, rather than ROM image files.
-
- * Lots of internal changes:
-
- - RAM_ROM broken out into many smaller files.
-
- - Lots of small performance tweaks.
-
- - More strings moved to resources.
-
- - Names of system functions are fetched directly from the ROM
- instead of being hardcoded in StringData.cpp.
-
- * Added DragonballEZ support.
-
- * (Mac) Added white screen.
-
- * New Preferences/Properties... and Debug Options... dialogs.
-
- * New startup dialog for Windows (for when it needs help starting
- up).
-
- * Fixed the bug where you couldn't enter typed characters if there
- wasn't a blinking insertion point.
-
-
- Changes for 2.0b3 (6/2/98)
- --------------------------
- * Windows only: Added Greg's nifty Hyperlink controls to the About box.
-
- * Added Keith's Palm OS Emulator article from HHSJ.
-
- * Windows only: Added Greg's fixes to the serial emulation routines.
-
- * Fixed Headpatch::SysGremlins bug where it would read garbage from
- the stack when trying to get the selector parameter.
-
- * Got A-Trap breaks working ("atb" from the PalmDebugger).
-
- * Windows only: bumped number of recently loaded application from
- five to nine.
-
- * Fixed 1.0 ROM compatibility problem: the emulator was trying to call
- a function introduced in Palm OS 2.0 (PrefSetPreference).
-
-
- Changes for 2.0b2 (5/25/98)
- ---------------------------
- * Windows only: Fixed bug that would zap the version number in the
- system preferences when attempting to set the timeout value to be
- infinite.
-
- * Fixed bug that would cause the emulator try to access invalid memory
- if the emulated app tries to access invalid memory.
-
- * If an exception occurs that an external debugger should handle and
- there is no external debugger, instead show a dialog that reports
- the problem and forces the user to reset.
-
- * When getting application version string, look for ID's 1 and 1000.
-
- * Windows only: Fixed bug that would leave a debugger-related messaging
- event object signalled if there were no external debugger.
-
-
- Changes for 2.0b1 (5/??/98)
- ---------------------------
- * Prevent the device from ever going to sleep. Letting it go to sleep
- is only annoying, and doesn't accomplish anything. You can make the
- device go to sleep by setting the timeout value in the General
- Preference panel, but that setting will get reset back to "never" on
- any reset.
-
- * Mac only: Fixed problem that would cause the emulator to hang if
- you tried to open a console window from within MWDebug.
-
- * Got alarms working.
-
- * Mac only: Wasn't doing a "weak import" of AppearanceLib in non-debug
- version.
-
- * With regards to a change in 2.0d8, it's OK to load an application that
- already exists in ROM. The RAM-based version will override the one
- that's in ROM.
-
-
- Changes for 2.0d9 (5/13/98)
- ---------------------------
- * The handling of DbgBreak was broken.
-
- * Allow application to resume after ErrDisplayFileLineMessage. This
- is handy in cases where you're using ErrNonFatalDisplayIf to display
- warning messages and it's OK for the application to continue
- execution.
-
- * Accidentally turned off checksumming of post-2.0 ROMs; turned it
- back on.
-
- * Windows only: there was supposed to be a feature whereby holding
- down the caps-lock key when starting the emulator would cause it to
- bring up a Download/Browse/Quit dialog box. However, the dialog box
- would actually come up if the caps-lock key had ever been toggled
- since the last time the emulator had been executed. Fixed.
-
- * Selecting "Gremlin/New..." while a gremlin is currently running
- will now switch to the new gremlin.
-
- * Fixed error message to say RAM instead of ROM when saving a RAM
- image file, and added an exception handler to deal with the ensuing
- thrown exception.
-
-
- Changes for 2.0d8 (5/27/98)
- --------------------------
- * Added Greg's Copilot article from HHSJ.
-
- * Added updates to Guide.html from Roger.
-
- * Removed support for the 2.0 Debug ROM that offset the low-memory
- globals byte four bytes. There were problems with that ROM that
- would cause it to crash.
-
- * Gremlins now latches into KeyCurrentState in order to randomly set
- the bits so that applications can respond to them.
-
- * The patched versions of SysFatalAlert and ErrDisplayFileLineMsg now
- display dialogs containing "Debug" and "Reset" buttons. Clicking on
- "Debug" will simulate a bus error, which an external debugger will
- catch. Clicking on "Reset" is the same as selecting the Reset menu
- item.
-
- NOTE: currently, clicking on the "Debug" button when there's no external
- debugger running will result in the ROM attempting to handle the
- simulated bus error. If the ROM is a Debug ROM, it will attempt to
- contact a debugger over the seial port. Since there is probably no
- such debugger listening on the serial port, the emulator will appear
- to hang with a blank screen. Selecting the Reset menu item will
- restart the ROM.
-
- * Failures reported via SysFatalAlert and ErrDisplayFileLineMsg
- during application execution have more info for users to report.
- The dialog has text along the lines of:
-
- SubHunt 2.0 has failed while running Gremlin 2 at 20,000 events.
- SubHunt complains "SubHunt.c: Line 100: Score too good." If
- this is the latest version of SubHunt, please report this to the
- application author.
-
- or:
-
- SubHunt 2.0 has failed. PalmOS complains "Window.c: Line 100:
- Invalid Window." If this is the latest version of SubHunt,
- please report this to the application author.
-
- NOTE: currently no effort is made to determine if the application or
- the PalmOS is generating the message. This shortcoming will be
- addressed in a future version.
-
- * Use application name from 'tAIN' resource when generating the list
- of applications for the New Gremlin dialog box.
-
- * Reduced the 10% random pen tap chance in Gremlins to 2% (per
- Roger's recommendation).
-
- * Internal change: added "TrapIndex" inline function for converting a
- trap number (0xA000) to an index that can be used with the trap
- table. Standardized on its use all over. This function converts by
- merely masking off the upper byte (which mirrors what the ROM does)
- instead of subtracting "sysTrapBase" from trap numbers (which fails
- because some applications appear to use trap numbers that don't have
- "A" in their upper nybble).
-
- * Internal change: we patch ROM system functions. We also call ROM
- system functions. Now, whenever we call a ROM system function, any
- trap patches made to that function are called (they didn't used to
- be).
-
- * Fixed emulator/debugger communications bug that occured when one
- would quit and then restart (needed to refresh -- not just flush --
- the handle to the other guy's window). (Windows only)
-
- * After the UI has been initialized, prevent even the ROM from
- writing to low-memory (except from HwrSleep, which patches out the
- exception vectors).
-
- * When trying to load an application that's already in ROM, warn with
- a specific error message instead of a generic one.
-
-
- Changes for 2.0d7 (4/27/98)
- ---------------------------
- * Gremlins now works better with "ill-formed" forms (forms with no
- "live" objects in them). Gremlins will also now generate random
- taps 10% of the time instead of always trying to target form
- objects.
-
- * Turn off Gremlins on a reset or fatal system error.
-
- * Only the last 128K of Gremlins logging text will now be written to
- the logging file.
-
- * Added "Debug" button to the "Application so-and-so just made an
- invalid memory access" dialog. Clicking on this button emulates a
- bus error. If an external debugger is running, it will be notified
- of this bus error. If not, the emulated ROM will take over,
- displaying a Fatal Error dialog.
-
- * Fixed a bug where the emulator itself would cause a "The current
- application just accessed Palm OS Globals ..." to appear after
- downloading an application via MWDebug.
-
-
- Changes for 2.0d6 (4/22/98)
- ---------------------------
- * Added ROM Transfer project (for Mac).
-
- * Added Docs folder.
-
- * Added Plugins folder containing MWDebug plugins.
-
- * Tweaks to PCH file generation for CW Pro 3.
-
- * Added HotSync to Mac side.
-
- IMPORTANT: For both versions of the Emulator, HotSyncing has only
- been tested between two machines (in both cases, between a Mac and a
- PC). I don't know what performance is like when both the emulator
- and HotSync are running on the same machine.
-
- * Now enable and disable Gremlins menu items in WinEmulator.
-
- * Fixed bug in ROM Transfer.prc which would cause it to crash on Palm
- III's.
-
- * Fixed some bugs in RAM file management in Mac version.
-
-
- Changes for 2.0d5 (4/??/98)
- --------------------------
- * Checksum the ROMs when they're loaded. This checksum is used to (a)
- validate the ROM contents (for pre-3.0 ROMs, the checksum is checked
- against a hard-coded list of ROM checksums, for 3.0 ROMs and later,
- the checksum is checked against the checksum in the ROM header) and
- (b) determine if we're running the 2.0 debug ROM, which needs
- special hacks activated in order to run.
-
- * Allow *.* patterns when loading ROM and application files.
-
- * Support serial port emulation in WinEmulator (not in Mac, yet).
-
- * Added method for applications to call the emulator (see
- EmuTraps.h). Note that there currently is no method to see at
- runtime if an application is running under the emulator or not.
-
- * Tweaks to get Mac version to build under CWP R2 with CW4POS R4
- installed in it.
-
- * Backed out checksumming of pre-3.0 ROMs until I get get an accurate
- set of checksum numbers.
-
-
- Changes for 2.0d4 (4/9/98)
- --------------------------
- * Reset auto-off timer when processing debugger packets.
-
- * Changed way tailpatches are implemented. I used to set the return
- address of a system function I was tailpatching to point to a TRAP
- $E opcode (saving the original return address in an array in the
- emulator). This approach has the advantage of not modifying any
- opcodes in memory, and handles recursive system functions very well.
- Sadly, the critical flaw in this approach is that some operations
- need the real return address to be on the stack. For instance, the
- TRAP $F handler (TrapDispatcher) in the ROM looks at the return
- address so that it can look up the $Axxx function selector.
- Therefore, the approach I now take is to write a TRAP $E into memory
- after the TRAP $F / $Axxx sequence, saving the overwritten opcode in
- a table. Recursive functions are handled by incrementing and
- decrementing a counter associated with that memory location. When
- the counter gets back down to zero, the opcode is restored.
-
- * Added preliminary profiling stuff. Still disabled at this point.
-
- * Don't let the user enter pen and keyboard events if the CPU is
- stopped (for example, when it's in the debugger).
-
- * Don't run RPC commands from the debugger in TRACE mode (that is,
- run the commands, but turn trace mode off, first).
-
- * Respond better to a SysReset message from the debugger.
-
- * Remove tailpatch opcode when the CPU is reset.
-
- * In WinEmulator, restart the CPU after a screenshot only if it was
- running before we took the screenshot.
-
- * Fixed problems with synchronization between the UI thread and the
- CPU thread. One way to trip up over the bug was to run Gremlins and
- at the same time click like crazy on the screen or hardware buttons.
- After a while, you'd get the dreaded "ATrap::DoCall returned and
- exception" dialog box.
-
- * Fixed Gremlins bug that would put it into an infinite loop if the
- top form had only frmBitmapObj, frmLineObj, frmFrameObj,
- frmRectangleObj, frmLabelObj, frmTitleObj, and/or frmPopupObj
- objects in it. Games like SubHunt, HardBall, and Reptoids are
- examples of programs with such forms.
-
- * Changed the low-level mechanism for handling exceptions and
- entering the debugger. With the old way, an exception would cause
- the main CPU loop to exit before the debugger was notified about the
- exception. But if there were no external debugger to notify, there
- was no way to cleanly restart the CPU loop in order to have the
- emulated ROM handle the exception (either by trying to connect to a
- serial debugger, or by showing a fatal error dialog). Now, the
- attempt to contact an external debugger is made before exiting the
- CPU loop. If the attempt succeeds, the CPU loop is exited. If the
- attempt fails, the normal exception handling process takes over
- (i.e., the appropriate vector from the low- memory exception table
- is loaded into the PC and execution continues).
-
- * Added support for 2.0.2 Debug ROMs (added minimal support for 68681
- serial access and account for different low-memory variable
- locations).
-
- * Removed support for ROM files with the pattern "ROM *". This
- pattern also matches the "ROM Transfer.prc" application, causing the
- emulator to try loading it if there are no other candicates.
-
- * For MacEmulator, save RAM files with the type '(Pi)RAM' and ROM
- files with the type '(Pi)ROM'. Also, if untyped files are accessed
- as RAM or ROM files, they are changed to have the appropriate type.
-
- * Restarting and stepping of Gremlins in WinEmulator more reliable.
-
- * Better warning messages for applications that:
-
- - Access low-memory directly
- - Access system global variables directly
- - Access the screen directly
- - Access Dragonball registers directly
-
-
- Changes for 2.0d3
- -----------------
- * Lots of internal changes:
-
- - Names changed from Foo_Bar format to Foo::Bar format (where Bar
- is a static member function of the Foo class). This change
- makes it easier to look things up in a class browser.
-
- - Handling of memory access errors codified. All accesses are
- checked; any errors are reported through bottleneck functions;
- all accesses can be turned on/off with compile-time and/or
- runtime switches; added CEnableFullAccess class that allows
- internal functions full access to memory (i.e., turns off memory
- access checking) so that we can do things like set breakpoints
- in ROM.
-
- - Added Palm copyrights to all files.
-
- - Standardized on PowerPlant-style function header comments.
-
- - Removed all mention of Pilot and Pilot-derivatives.
-
- - Untemplatized some functions in UAE_Utils that didn't need to
- be templates.
-
- - Sped up uae_memset by using long-word access.
-
- - Changed way tail patches are implemented. Previously, I'd write
- a TRAP $E opcode into memory after the TRAP $F/Axxx instruction
- sequence that would invoke the trap. The problems with this
- approach is that (a) this wouldn't break on all returns from the
- function if it called itself recursively, and (b) it modified
- memory in a way that would need to be reversed on selected
- occassions (e.g., when we entered the debugger, or when RAM was
- saved to disk. Instead, when a trap function is called that I
- wish to tail patch, I modify the return address from the
- function in such a way that I get control when the function
- exits (I save the old return address and replace it with a
- pointer to a TRAP $E opcode, which leads to a CPU exception
- which I catch in Software::ProcessException).
-
- - Patched calls to SysDoze and SysSleep so we better know the
- state of the ROM/CPU. We don't actually use this information,
- yet.
-
- - Centralized all compile-time pre-processor symbols into
- Switches.h.
-
- - Centralized all byteswapping into Byteswapping.h/.cpp. Used a
- templatized Canonical() function on the Mac so that Canonical is
- zero-overhead no matter what type it's called with.
-
- - Added internal diagnostic logging functions.
-
- - Lots of timing tests to optimize memory access and core CPU
- emulation loop.
-
- - Committed to "word-swapped" memory layout in x86-compatible
- systems. Removed experimental alternative memory layout code.
- Look for WORDSWAP_MEMORY symbol for areas that are byte-order
- sensitive.
-
- * Fixed some bugs with external debugger hooks.
-
- - Now support the same notion of "sockets" as the SerialLinkMgr.
-
- - On some entries into the debugger, the PC would incorrectly be
- adjusted to point 2 bytes before the instruction causing the
- debugger entry instead of pointing right at the instruction.
-
- - Finally added debugger hooks to WinEmulator (missing
- functionality's considered a "bug", right?).
-
- * Fixed bug where UAE would allocate a significant chunk of memory and
- then try using it without first checking that the allocation attempt
- succeeded. This would result in the Mac emulator freezing on startup
- when emulator a 4Meg device.
-
- * Fixed ROM Transfer.prc to download Palm III ROMs. Updated Mac
- "Download ROM" command to work with larger ROMs. Added "Download
- ROM" to Windows emulator.
-
- * On startup, if WinEmulator can't find a ROM, it will ask you to
- find one or download one.
-
- * On startup, if the capslock key is down, WinEmulator will _always_
- bring up the dialog asking you to find a ROM file or download one.
-
- * Removed "Backlight" and "Enter debugger on startup" properties from
- WinEmulator.
-
- * When looking for a ROM file, Emulator use the following search
- order:
-
- - The file you've explicitly specified in Properties (WinEmulator only).
- - The first file in the Emulator directory ending with ".ROM"
- - The first file in the Emulator directory ending with " ROM"
- - The first file in the Emulator directory starting with "ROM."
- - The first file in the Emulator directory starting with "ROM "
-
- * Fixed problem where mouse clicking wasn't working with 1.0 ROMs. I'm
- still not sure what the root of the problem is, but I've added a
- check for 1.0 ROMs and implemented a workaround.
-
- * In WinEmulator, RAM image is automatically saved to and read from a
- file based on the name of the ROM being used and the RAM size
- requested. The name of the RAM file is "<ROM file>.<RAM size>.RAM".
- In other words, the old Windows Copilot functionality is back (it
- was temporarily removed during the Grand Code Unification).
-
- The format of this RAM image file is a little different, however.
- There are chunks of data in this file, each tagged with an ID and a
- chunk size. For now, the only defined chunk is 'ram '. In the
- future, there will be chunks for register state, associated ROM
- version, etc.
-
- In MacEmulator, the file saving operation remains the same as in Mac
- Copilot, but the file format is the same as in WinEmulator.
-
- * Switched to new case graphics.
-
-
- Changes for 2.0d2
- -----------------
- * Fixed MacEmulator bug when switching between 1x and 2x screen
- sizes.
-
- * Fixed bug where loading an application would smash 4 random bytes
- of memory.
-
- * Sped up emulation on the Mac by 20% by streamlining some
- Mac-specific operations.
-
- * Sped up core emulation loop on both platforms by moving some
- not-oft-used functionality into some subroutines, thus simplifying
- the core loop.
-
- * Added hooks for external debugger.
-
- * Made Gremlins deterministic.
-
- * Ensured Gremlins did the same thing on both Mac and Windows.
-
-
- Changes for 2.0d1
- -----------------
- * Support for Palm OS 3.0:
-
- - memChunk headers changed, so reliance on their format when
- loading applications has been removed.
-
- - More complete support for Dragonball registers.
-
- - Allow for 96K and 128K dynamic heaps.
-
- * Common source code base.
-
- * Refitted with latest UAE sources.
-
- * Can load .prc files larger than 64K.
-
- * Windows version is much smaller.
-
- * Mac version is much bigger (it's a FAT binary).
-
- * Removed built-in debugger.
-
- * Support grayscale mode.
-
- * Now emulates hardware method for turning on backlighting (holding
- down the power key). Properties option is no longer needed.
-
- * Added screen shot command.
-
- * Added Gremlins. (Note that user input (typing, mousing) is disabled
- while Gremlins is running due to the incompatible ways in which they
- enter their events.)
-
- * Set the Palm OS date on startup.
-
- * Trap dispatcher is now run as native code instead of being
- emulated. This results in about a 10 - 12% speedup.
-
- * Auto-calibrate the pen on startup; no more digitizer screen.
-
- * InternetConfig-savvy About box on the Mac. Panel-savvy About box on
- Windows.
-
- * Gremlins can now confine itself to a single application.
-
- * Emulate MemSet, MemMove, and RctPtInRectangle with native code for
- 15% performance increase.
-
- * While Gremlins is running, can optionally log to a text file:
-
- - posted events
- - received events
- - system functions called
- - time of execution.
-