home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 Mobile / Chip_Mobile_2001.iso / palm / system / _palmemu / palmemu.exe / Docs / _OldNews.txt < prev    next >
Encoding:
Text File  |  2000-08-14  |  152.1 KB  |  3,744 lines

  1. ========================================================================
  2. News (latest changes) archive for the Palm OS Emulator
  3. Copyright (c) 1998-2000 Palm, Inc. or its subsidiaries.
  4. All rights reserved.
  5.  
  6. Please send bug reports, comments, suggestions, etc. to devsupp@palm.com
  7. ========================================================================
  8.  
  9.  
  10. Changes for 3.0a6 (4/19/00)
  11. ----------------------------
  12. *    (Unix) Support POSER_DIR environment variable. If this variable
  13.     exists, Poser uses it as the root for all files it uses (including
  14.     preferences, Gremlin States, log files, and skin files). Otherwise,
  15.     it uses HOME.
  16.  
  17. *    External skin support. A "skin" is something that defines the
  18.     appearance of an application. Palm OS Emulator uses skins for each
  19.     device that it emulates. Until this release, skins were built into
  20.     Poser and couldn't be changed without recompiling the application. 
  21.     Now, skins are stored in external files that Poser locates and uses.
  22.  
  23.     When starting up, Poser looks for a directory starting with the text
  24.     "Skins" (that is, it may be "Skins", "Skins.Palm", "Skins.Personal",
  25.     etc.). Poser looks for all such directories in its own directory
  26.     (that is, the directory in which it resides on Mac or Windows, or
  27.     POSER_DIR on Unix), as well as that directory's parent and
  28.     grandparent directories.
  29.  
  30.     For each such directory it finds, it scans the contents for files
  31.     ending with ".skin". These files are text files that describe the
  32.     skin. Associated with each .skin file are two graphics files that
  33.     define the appearance of the skin (in single and double size mode).
  34.  
  35.     All of Poser's previously built-in images are now provided
  36.     seperately in a Skin archive available on Poser's Web pages. This
  37.     archive includes a ReadMe.txt file that describes how to create your
  38.     own skins.
  39.  
  40. *    Internal change: as part of the skin implementation, a number of
  41.     file handling and streaming classes were replaced with a new, more
  42.     consistant set. The following classes:
  43.  
  44.         FileReference
  45.         StreamHandle
  46.             BufferHandle
  47.             FileHandle
  48.         PPStream
  49.             ChunkStream
  50.  
  51.     Have been replaced with:
  52.  
  53.         EmDirRef
  54.         EmFileRef
  55.         EmStream
  56.             EmStreamBlock
  57.             EmStreamChunk
  58.             EmStreamFile
  59.  
  60.     Testing note:
  61.  
  62.         All File I/O is affected by this change. The following places
  63.         need to be tested to make sure they're not broken:
  64.  
  65.             Reading
  66.                 AutoLoad, AutoRun, AutoRunAndQuit directories
  67.                 Files specified to be loaded via cmd line.
  68.                 Loading PDB, PRC, and PQA files.
  69.                 Loading skin files (.skin and .jpg files).
  70.                 Loading Preference file
  71.                 Loading PSF files
  72.                 Loading ROM files
  73.  
  74.             Writing/Creating
  75.                 Exporting PRC, PDB, and PQA files (both via the menu
  76.                     item and via HostExportFile).
  77.                 Saving screen shots.
  78.                 Saving PSF files
  79.                 Saving preferences
  80.                 Saving downloaded ROM file.
  81.                 Saving Logging files
  82.                 Saving Profile files.
  83.  
  84. *    Our patch to SndDoCmd now initializes the return value. [David
  85.     Slotter]
  86.  
  87. *    (Unix) AutoLoad, AutoRun, and AutoRunAndQuit directories now
  88.     supported.
  89.  
  90. *    (Windows) Binder utility now merged into Poser directly (see the
  91.     "Save Bound Emulator..." menu item).
  92.  
  93.     "Binding" Poser means to create a new version of Poser based on the
  94.     settings in the currently running Poser. A new executable is
  95.     created that includes a ROM image, configuration settings, skins,
  96.     and optionally a RAM image (the stuff that goes into a .psf file). 
  97.     All of this information is taken from the current settings in the
  98.     running Poser. The result is a new Poser that is self-contained and
  99.     runs stand-alone.
  100.  
  101.     When binding Poser, you'll be presented with two options:
  102.  
  103.         * Create a version that always creates a new session based on
  104.           the current emulator settings
  105.  
  106.         * Create a version that restores the current session
  107.  
  108.     Selecting the first option creates a version of Poser bound with a
  109.     ROM image, configuration settings, and appropriate skins. When
  110.     launched, this version of Poser will always create a new session
  111.     based on those settings.
  112.  
  113.     Selecting the second option creates a version of Poser that is also
  114.     bound with a RAM image. When launched, this version of Poser will
  115.     always restore the state that is stored in that image. This is
  116.     effectively the same as reloading a .psf file.
  117.  
  118.     In both cases, Poser functionality is abbreviated. Because much
  119.     information is now specified by the bound items, menu items used to
  120.     create, save, and load sessions and session files are removed. And
  121.     since bound Posers are intended to be used in demo, kiosk, or other
  122.     closely controlled environments, most developer-related menu items
  123.     are also removed.
  124.  
  125. *    Fixed a problem where NetLibReceivePB could return netErrParamErr
  126.     instead of a more informative error code. [Frank Yellin]
  127.  
  128. *    Fixed a problem where NetLibReceivePB where an in/out parameter
  129.     passed to recvfrom was not initialized first. [Frank Yellin]
  130.  
  131. *    When emulating NetLib calls by turning them into host TCP calls,
  132.     and an error occurs, add a log message (if NetLib logging is turned
  133.     on) that describes how the host error code is translated into a
  134.     NetLib error code.
  135.  
  136. *    Implement the documented -skin and -silkscreen command-line
  137.     options.
  138.  
  139. *    Got rid of problem that prevented Poser from running on Macs with
  140.     more than 256 Meg of RAM (and which could have lead to problems on
  141.     other platforms as well).
  142.  
  143.     Details:
  144.  
  145.     (First, some terminology. In the discussion below, "host address
  146.     space" refers to the memory that any Windows, Mac OS, or Unix
  147.     application sees and manipulates. "Emulated address space" refers
  148.     to the memory that the Palm OS or a Palm OS application sees. It is
  149.     up to Poser to make the host address space look like emulated
  150.     address space.)
  151.  
  152.     Poser emulates memory by allocating some buffers in the host's heap
  153.     to "back" the various memory ranges utilized by the Palm OS. For
  154.     instance, it creates buffers to represent RAM, ROM, and the
  155.     Dragonball registers. Whenever a memory access is performed, Poser
  156.     determines which of these buffers is required, calculates the
  157.     correct offset into that buffer, and fetches or stores as
  158.     appropriate. These buffers are used to create the illusion of the
  159.     emulated address space.
  160.  
  161.     On occassion, it is necessary for Poser to magically make more
  162.     memory "appear" to the emulated process. That is, the emulated
  163.     process needs to be granted access to memory other than that
  164.     normally needed to emulate a true Palm OS environment. A chief
  165.     example of this is when loading a .prc file. Poser performs the
  166.     install process by creating the database, creating the records in
  167.     the database, and then copying the record contents from the .prc
  168.     file to the records in the database it created. This copying is
  169.     done by calling DmWrite. But the source of the DmWrite is a buffer
  170.     that Poser allocated to hold the contents of the .prc file. This
  171.     buffer is not one of the standard buffers Poser uses to emulate the
  172.     any of the standard memory ranges that a Palm OS process can access.
  173.  
  174.     In order -- in this example -- for DmWrite to access the bytes in
  175.     the file buffer Poser allocated, Poser temporarily "maps" arbitrary
  176.     ranges into the emulated address space. Ranges that are mapped in
  177.     can be accessed by Palm OS processes. However, this mapping did not
  178.     undergo any address translation. That is, if the buffer holding the
  179.     .prc file happened to have been allocated at memory location
  180.     0x01234560 by Windows, the Mac OS, Unix, or whatever, then Poser
  181.     would map that buffer into memory location 0x01234560 in the Palm
  182.     address space.
  183.  
  184.     This was OK, except when memory ranges mapped into the emulated
  185.     space overlapped with standard memory ranges in the emulated space.
  186.     For instance, on Macs with lots of RAM (greater than 256 Meg, at
  187.     least), Poser could easily make a memory allocation that return an
  188.     address > 0x10000000. If the buffer that was allocated were actually
  189.     in the range 0x10C00000 - 0x10E00000 (or whatever the ROM range
  190.     was), then when Poser attempted to "map in" that buffer, it would
  191.     fail because of the overlap.
  192.  
  193.     Now, finally, this problem is fixed. Poser now performs memory
  194.     address translation. Segments of memory mapped into the emulated
  195.     address space are now mapped in so that they appear at 0x60000000 -
  196.     0x6FFFFFFF.
  197.  
  198. *    When checking for the validity of calls to shared library
  199.     functions, don't allow a refnum of zero. Also, display a specific
  200.     error message when an invalid library refnum is detected. [Frank
  201.     Yellin]
  202.  
  203. *    (Unix) Fixed problem with crashing on Sparc systems when loading
  204.     .prc files. [Frank Yellin]
  205.  
  206. *    Silently ignore a bug in an internal Palm OS 3.3 function
  207.     (PrvConvertDepth1To2BW) that causes it to walk off the end of an
  208.     allocated memory chunk by a single byte when reading from it.
  209.  
  210. *    Slightly more rigorous PC validation. Previously, I'd just check
  211.     to see if the PC were in a valid address space (RAM, ROM, Dragonball
  212.     register, etc.). Now only RAM or ROM addresses are allowed. [Frank
  213.     Yellin]
  214.  
  215. *    HostFFlush (HostLogFile()) now writes the log file to disk.
  216.  
  217. *    Re-hooked up the "Logging Options..." button in the New Gremlin
  218.     dialog box. In order to do this, utilized some cross-platform
  219.     dialog handling routines that are slowly being phased in. As a
  220.     result of these new routines, the dialog box has been changed from a
  221.     multi-panel dialog on Mac and Windows to a non-panel dialog box (as
  222.     was on Unix).
  223.  
  224. *    (Unix) No longer hide and reshow the main window when establishing
  225.     a new skin (either as part of the Skins dialog, or as part of
  226.     loading/creating a session). This process was an attemp to work-
  227.     around an FLTK problem where the X frame window didn't properly
  228.     resize itself. This workaround didn't work, and another one has
  229.     been put in place, so the old one's taken out.
  230.  
  231. *    (Unix) Change the filter button to use only lower-case suffixes. 
  232.     With both upper and lowercase, the text in the filter button would
  233.     overflow its bounds. [Jon Aslund]
  234.  
  235. *    (Unix) When opening a saved session file while a current session is
  236.     already running, Poser would attempt to close the first session's
  237.     thread twice, and then attempt to start the second session's thread
  238.     twice. This would often lead Poser to hang. Now each of those is
  239.     done just once. [Jon Aslund]
  240.  
  241. *    (Unix) Instead of crashing, report errors that occur while creating
  242.     a new session or loading an old one. [Jon Aslund]
  243.  
  244. *    (Unix) Added BSD/OS 4.1 support. [Bert Driehuis]
  245.  
  246. *    Allow TsmGlueGetFepMode and TsmGlueSetFepMode access to system
  247.     globals.
  248.  
  249. *    (Windows) Fixed bug where creating a new session in Poser, quitting
  250.     without saving, and then starting Poser using the -psf command line
  251.     option would result in a new session being created again instead of
  252.     loading the specified session file.
  253.  
  254. *    ROM Transfer project updated to use SDK 3.5.
  255.  
  256. *    Internal change: previously, when Poser had to manipulate data in
  257.     Palm OS format, it used the structs in the Palm OS headers directly.
  258.     However, that assumed that we could convince all the compilers used
  259.     to build Poser to lay out those structs correctly (that is, with the
  260.     same size and alignment as the 68K compiler used to build the Palm
  261.     OS ROM and Palm OS applications). This assumption is almost true,
  262.     but not quite. Therefore, with this release, a new mechanism for
  263.     manipulating Palm OS structs is used. This mechanism (see the
  264.     EmPalmStructs.xxx files) allows Poser to access structs in a
  265.     platform-, compiler-, and endian-independent fashion.
  266.  
  267.     Currently, this new mechanism is used only in the area of sending
  268.     and receiving packets from external clients (debuggers and scripts).
  269.     Eventually, it will be used in all aspects of Poser operation. Once
  270.     this switchover is complete, we'll be mostly independent of the Palm
  271.     header files, and will probably be able to get rid of most of
  272.     contents of the the Byteswapping.xxx files.
  273.  
  274. *    Fixed problem with our patch to NetLibReceive. The exact problem
  275.     being solved was one where NetLibReceive was called, received some
  276.     data, the application modified that data in the buffer that received
  277.     the data, and then call NetLibReceive again. No bytes were
  278.     available, but the contents of the buffer were updated with the
  279.     contents of the previous receive, thus wiping out the modified
  280.     buffer contents. The application was relying on the buffer not
  281.     changing, and so failed when it actually did.
  282.  
  283. *    Fixed problems with ROM Transfer not running on Palm OS 1.0.
  284.     [Vladimir Amarante]
  285.  
  286. *    Fixed problem with trying to boot a ROM from a Palm V device that
  287.     had originally been installed with Palm OS 3.1 but was lateer
  288.     upgraded to Palm OS 3.3. [Douglas R. Shefsky]
  289.  
  290. *    (Windows) Fixed a problem with not reading the entire preferences
  291.     file.
  292.  
  293. *    (Unix) Fixed problem with clicking in a non-active area of the
  294.     window (that is, outside of any button or LCD area).
  295.  
  296. *    (Unix) Added ROM Transfer project (with prc-tools 2.0 compatible
  297.     Makefile) and pre-built ROM Transfer.prc application that can
  298.     be installed with something like pilot-xfer.
  299.  
  300. *    (Unix) Fixed problem that could lead to unexpected results when
  301.     running certain dialogs after other certain dialogs (FLTK wasn't
  302.     clearing out a reference to a widget in the first dialog,
  303.     causing the second to crash).
  304.  
  305. *    (Unix) Remapped EINPROGRESS (as returned by sockets functions)
  306.     to netErrWouldBlock instead of netErrSocketBusy (as NetMgr.h
  307.     would suggest). This change allows Network HotSync to work
  308.     between a Unix box and a Windows box.
  309.  
  310.  
  311. Changes for 3.0a5 (03/06/00)
  312. ----------------------------
  313. *    Interim internal release dates:
  314.         3.0a5e1        -    02/25/00
  315.         3.0a5e2        -    02/25/00
  316.         3.0a5e3        -    03/01/00
  317.         3.0a5e4        -    03/03/00
  318.  
  319. *    Internal change: major change in the way the Dragonball and
  320.     DragonballEZ registers are handled for different devices. 
  321.     Previously, there were two sub-systems: one that handled Dragonball
  322.     registers, and one that handled DragonballEZ registers. Any device
  323.     differences withing those two categories were handled with a set of
  324.     conditional statements. That mechanism started breaking down (the
  325.     conditionals were getting too twisty), so now device support is
  326.     broken down with a set of classes having the following hierarchy:
  327.  
  328.         EmRegs - fairly abstract base class
  329.             EmRegs328 - mildly abstract base class implementing Dragonball emulation common to all 328 devices
  330.                 EmRegs328Pilot, EmRegs328PalmPilot, etc. - concrete base class filling in the missing, custom pieces for a specific device
  331.             EmRegsEZ - mildly abstract base class implementing Dragonball emulation common to all EZ devices
  332.                 EmRegsEZPalmIIIx, EmRegsPalmV, etc. - concrete base class filling in the missing, custom pieces for a specific device
  333.  
  334. *    Added Symbol 1700 support. Note that Symbol-specific hardware is
  335.     not yet emulated. Attempting to use scanner or Spectrum facilities
  336.     will hang the device. [Ron Kupke, Darren Kropp, John Duhart, Harini
  337.     Bharadvaj]
  338.  
  339. *    Changed the way serial emulation is performed a little bit. 
  340.     Before, I'd look at the UART-enable bit to determine whether or not
  341.     to open or close the host's serial port. However, that would lead
  342.     to problems on Unix when using pseudo-devices. While opening the
  343.     serial port, the Palm OS would enable and disable the UART several
  344.     times as it was configuring the communications. This would lead to
  345.     the host serial port being opened and closed several times. But
  346.     Unix pseudo-devices don't react to that usage very well. So now,
  347.     Poser looks at the serial line driver enable bit. This bit is
  348.     toggled just once at the beginning and end of a serial port session,
  349.     just like we want. [Eskil Heyn Olsen]
  350.  
  351. *    Fixed problem with serial emulation not working on Palm VII EZ.
  352.  
  353. *    Fixed problem where reloading a .psf file that had a Gremlin
  354.     running would not correctly install the Gremlin-specific logging
  355.     options.
  356.  
  357. *    Fixed problem affecting Gremlin reproducability. There was a patch
  358.     on KeyCurrentState to randomly set key bits when a Gremlin was
  359.     running. However, the RNG used to set the bits was in no way
  360.     synchronized with the RNG used to generate Gremlin events, nor was
  361.     it ever reset in any way when a Gremlin was started or restarted.
  362.     The effect was that any application that was sensitive to the
  363.     results of KeyCurrentState would react randomly. One example of
  364.     this was the Address Book, which looked to see if the Address Book
  365.     hard key was pressed in order to see if the user wanted to beam
  366.     his/her business card.
  367.  
  368. *    Fixed problem affecting Gremlin reproducability. Some applications
  369.     are sensitive to time and timing issues. Gremlins now tries to make
  370.     sure that all forms of time (including the DragonBall cycle counter,
  371.     the kernel's tick counter, the Palm OS tick counter, and the
  372.     Dragonball real-time clock) are all set to consistant values when a
  373.     Gremlin is started and restored when a Gremlin-active .psf file is
  374.     reloaded (the cycle and tick counters are set to zero, and the RTC
  375.     is set to 3:00pm). Also, when a Gremlin is running, the real-time
  376.     clock is unhooked from the host's clock (normally, the values read
  377.     from the Dragonball real-time clock are generated from the host's
  378.     clock functions). Instead, the RTC is incremented assuming that the
  379.     average instruction takes 12 cycles, and where the cycle time is
  380.     based on the Dragonball's PLL registers.
  381.  
  382. *    Set the chip and mask IDs. This is set to the 1H58B part for the
  383.     328, and 1J83G for the EZ.
  384.  
  385. *    (Unix) Fixed problem with Logging Options dialog hanging.
  386.  
  387. *    Check PC and stack pointer when doing a TRAP #$F dispatch.
  388.  
  389. *    More up-to-date instructions for Network HotSyncing with Poser.
  390.     [Brian Mathis]
  391.  
  392.         These instructions are intended for developers or other POSE users
  393.         who want to synchronize the Palm OS Emulator with the same PC they
  394.         are running POSE on. Modifications to these directions may be
  395.         needed if a user wishes to synchronize with a PC on an attached
  396.         network. They were written on a Windows machine, and probably have
  397.         Windows specific instructions in them. It should be pretty painless
  398.         to adapt them to other platforms that support hotsyncing.
  399.  
  400.         These are current for version 30a3 and 30a4 of POSE emulating a Palm
  401.         V, OS 3.1, and Hotsync version 3.0.1/3.0.4, Windows 98 & NT.
  402.  
  403.         ----Configure Hotsync on your Desktop PC
  404.  
  405.         1. Right-Click the hotsync icon in the system tray
  406.  
  407.         2. Enable "Network". A check mark will appear next to it if it's
  408.         already enabled.
  409.  
  410.         ----Configure POSE:
  411.  
  412.         1. Right-Click on the POSE window to bring up the Menu. Choose
  413.         "Settings/Properties".
  414.  
  415.         2. Check the box next to "Redirect NetLib Calls to TCP/IP".
  416.  
  417.         3. Click "OK"
  418.  
  419.         ----Configure Hotsync on the Palm
  420.  
  421.         1. Open the "HotSync App".
  422.  
  423.         2. "Menu/Options/Modem Sync Preferences" - set to "Network"
  424.  
  425.         3. "Menu/Options/LANSync Preferences" - set to "LANSync"
  426.  
  427.         4. "Menu/Options/Primary PC Setup" - enter "127.0.0.1" under
  428.         "Primary PC Address" (the middle one)
  429.  
  430.         5. Under the "Modem Sync" icon on the main Hotsync screen, tap
  431.         "Select Service". Then tap "Done". You don't need to change any
  432.         info, you just need to have something selected. You can create a
  433.         new profile if you like.
  434.  
  435.         6. Tap the "Modem Sync" button. Your PC should now kick into
  436.         action, and will probably ask you to choose an account, or create a
  437.         new one. It is highly recommended that you create a new account
  438.         just for POSE.
  439.  
  440.     See also the following KnowledgeBase article:
  441.  
  442.         <http://oasis.palm.com/devzone/knowledgebasearticle.cfm?article_id=1674>
  443.  
  444. *    Information from TRGnet on TRGpro support. [Mike Walter]
  445.  
  446.         TRGpro support for POSE
  447.  
  448.         Version 3.0a4 includes limited support for TRGpro emulation. This
  449.         version emulates the FAT file system API provided on the TRGpro. It
  450.         does not support the lower level CompactFlash API or the enhanced
  451.         audio API on the TRGpro.
  452.  
  453.         In order to emulate the TRGpro Fat file system, do the following:
  454.  
  455.         1.    Obtain a PalmOS 3.3 image from any device. (PalmIIIx, PalmV,
  456.             etc)
  457.  
  458.         2.    Modify file "Palm OS Emulator.ini" in your Windows
  459.             subdirectory. Change to line FfsHome to point to a subdirectory on
  460.             your drive.
  461.  
  462.                 Example   "FfsHome=C:\POSE\
  463.  
  464.         3.    Put desired Palm programs and databases into subdirectory
  465.             specified above.
  466.  
  467.         4.    Run Emulator.exe.
  468.  
  469.         5.    Install the programs ffs_pose.prc and CFPro.prc onto emulator.
  470.  
  471.         6.    Run CFPro to move files back and forth between Emulator and
  472.             PC's subdirectory.
  473.  
  474.         Developers writing code for the FAT file system can now debug using
  475.         POSE.
  476.  
  477.         More documentation will be provided later, specifying exactly what
  478.         is and is not supported with the emulator. For example, card
  479.         insert/remove messages are not supported with this version.
  480.  
  481.         For those of you interested, the files modified/added to the POSE
  482.         software base were, Platform_FfsLibWin.cpp and
  483.         TrapPatches_FfsLib.cpp.
  484.  
  485.         Keep in mind that this is a first beta release, if you have any
  486.         questions or problems, email TRGnet directly.
  487.  
  488.         Zip file containing ffs_pose.prc and CFPro.prc can be downloaded
  489.         from:
  490.  
  491.             http://www.trgnet.com/download/pose/fat.zip
  492.  
  493.         POSE version 3.0a4 or greater can be downloaded from:
  494.  
  495.             http://www.palmos.com/dev/tech/tools/emulator/>
  496.  
  497. *    "Pen" events are essentially created as needed and inserted into
  498.     the Palm OS on demand from mouse events by way of a patch on the
  499.     SysEventGet function. However, until now, there was no
  500.     corresponding patch to EvtSysEventAvail to make that function return
  501.     true if the host mouse was down. Now there is. [Michael Nordstrom]
  502.  
  503. *    Added back long paths for MRU menus. [Chris Antos]
  504.  
  505. *    (Windows) Made F11 minimize the window. [Chris Antos]
  506.  
  507. *    (Windows) Swapped positions of About and Exit menu items. [Carlton
  508.     Craighead]
  509.  
  510. *    Simplified Skins dialog.
  511.  
  512. *    Simplified Gremlins dialog. Instead of entering magic numbers like
  513.     zero and -1, use checkboxes to enable desired features.
  514.  
  515. *    Added Palm IIIc skins. Renamed "Color Device" to Palm IIIc.
  516.  
  517. *    Added UsingPOSE.pdf.
  518.  
  519. *    (Unix) Implemented "File/Save" menu item. [Dan Poirier]
  520.  
  521. *    (Unix) Fixed problem where UART::Initialize would get called twice
  522.     when reloading a .psf file, triggering an assert. [Dan Poirier]
  523.  
  524. *    (Windows) Fixed problem with not setting the skin palette when
  525.     using the generic skin on 8-bit monitors. [Andreas Linke]
  526.  
  527. *    Removed SndInit patch that would set the system volume level to
  528.     zero, mirroring what happens in the simulator. However, this
  529.     caused problems with people not hearing sounds when they expected
  530.     to. So, removed the patch. If you don't want sound, turn it off
  531.     in the Preferences/Properties dialog. [Frederic Paolucci]
  532.  
  533. *    (Unix) Building under Solaris 2.6 (with gcc installed) is now
  534.     possible. It's probable that building under other SunOS environments
  535.     won't work.
  536.  
  537. *    (Unix) The window resizes to match skin selections.
  538.  
  539. *    Export Database dialog now primarily lists the actual database name,
  540.     with the application icon name in parentheses if it differs.
  541.  
  542.  
  543. Changes for 3.0a4 (1/28/00)
  544. ---------------------------
  545. *    Interim internal release dates:
  546.         3.0a4e1        -    12/02/99
  547.         3.0a4e2        -    12/30/99
  548.         3.0a4e3        -    01/07/00
  549.         3.0a4e4        -    01/23/00
  550.         3.0a4e5        -    01/26/00
  551.         3.0a4e6        -    01/27/00
  552.  
  553. *    Yow...time to start updating those copyright statements...again...
  554.     and this time there's a lot more files!
  555.  
  556. *    When installing a .prc file, check for duplicate resources.
  557.  
  558. *    Provide better error messages when something goes awry while
  559.     installing an application or database.
  560.  
  561. *    Added support for Palm IIIe and Palm Vx:
  562.  
  563.     - Added as items to Device menu.
  564.     - Added code to save those devices as preferences.
  565.     - Added as -device parameters on command line ("PalmIIIe" and "PalmVx").
  566.     - Added and mapped in appropriate skins.
  567.     - Added new internal type IDs.
  568.     - Corresponding tweaks to Binder application.
  569.     - Made Palm IIIe return same device ID as Palm IIIx.
  570.     - Made Palm Vx return same device ID as Palm V.
  571.  
  572. *    (Mac) Updated to GUSI 2.0.1. This has the following benefits:
  573.  
  574.     - Adds support for socket options.
  575.     - Based on Open Transport instead of Mac TCP.
  576.     - Fixes problem with menus sometimes getting disabled (the
  577.       old GUSI would eat up "resume" events, so PowerPlant didn't
  578.       know to re-enable the UI).
  579.  
  580. *    Fixed problem where Poser's heap walking routines were vulnerable
  581.     to odd master pointers. [Mike Chen]
  582.  
  583. *    Gremlins wasn't generating and posting hard button events properly.
  584.     [Steve Lemke]
  585.  
  586. *    (Unix) Fixed problem with trying to delete a skin with a stale
  587.     pointer. [Ben Darnell]
  588.  
  589. *    Updated ROM Transfer.mcp to CodeWarrior for Palm OS R6.
  590.  
  591. *    Support for the gdb debugger has been built-in for quite some time
  592.     (since 2.1d22 or so). Here, finally, are some instructions for
  593.     interacting with it. Note that you no longer need to use gdbpanel
  594.     or gdbplug if you were using those with earlier versions of Poser,
  595.     Copilot, or xcopilot. [Ben Thomas]
  596.  
  597.     -    Build your app. Be sure to _both_ compile and link with -g
  598.         (e.g., "gcc -g ..."). On the compile pass, this generates the
  599.         necessary symbol information; on the link pass it forces the
  600.         inclusion of a debug runtime code that results in a breakpoint
  601.         being installed in PilotMain when the app starts.
  602.  
  603.     -    Start Poser.
  604.  
  605.     -    Load your app into Poser.
  606.  
  607.     -    Start gdb, loading your application's symbol table (e.g., "gdb
  608.         myApp"). Note that the file to be loaded is the "myApp" file
  609.         created by the GCC link pass, not "myApp.prc" created by 
  610.         buildprc.
  611.  
  612.     -    Type "target pilot localhost:2000" to gdb. It should respond
  613.         with a message along the lines of "Remote debugging under PalmOS
  614.         using localhost:2000. Waiting... (Press Ctrl-C to connect to
  615.         halted machine)".
  616.  
  617.     -    Start your app on Poser.
  618.  
  619.     -    Wait for gdb to see the initial breakpoint and prompt you.
  620.  
  621.     -    Start debugging.
  622.  
  623. *    Tweaks to the scripting samples: [Flash Sheridan, Steve Haneman]
  624.  
  625.     - Wait() no long automatically resumes.
  626.     - Added seperate Resume function
  627.     - Since wait no longer resumes, added TapPenSync, and TapButtonSync
  628.       which automatically call Wait and Resume at the beginning and end.
  629.     - Fixed some warnings that showed up when running Perl -w.
  630.     - Added MemPtrSetOwner, WinDisplayToWindowPt, WinWindowToDisplayPt.
  631.     - In TapButton, call WinWindowToDisplayPt.
  632.     - In EmRPC, added support for Coord type.
  633.  
  634. *    Internal change: encapsulated all device-specific information in an
  635.     EmDevice class. This should make it easier to add new devices,
  636.     since all the information is now in one place.
  637.  
  638. *    Stack overflow checking is back (cf 2.1d27)!  Whenever it looks
  639.     like something is assigning a value to the stack pointer register,
  640.     Poser marks the memory block that pointer is in as a stack. Then,
  641.     when the stack pointer is decremented for any reason, it is compared
  642.     to the low end of the memory chunk. If it falls below, Poser
  643.     displays a fatal error dialog. If the stack pointer is just getting
  644.     close without actually going over, Poser will display a warning.
  645.  
  646. *    Fixed another case of Gremlins going to sleep on the job. Gremlins
  647.     normally posts new random events when the system calls EvtGetEvent
  648.     and there's nothing to return, resulting in SysDoze being called.
  649.     Most of the times, Gremlins will post an event and return from
  650.     EvtGetEvent. In the cases it doesn't, it forces EvtGetEvent to
  651.     return a nil event. However, if Gremlins was posting a Shakespeare
  652.     quote to a form field, and the form field was full, and there was a
  653.     non-empty selection, there was a 33% chance that neither an event
  654.     would be posted nor a nil event returned. This resulted in the
  655.     application having nothing to do (and so SysDoze was called) and
  656.     Gremlins thinking its job was done for the moment and putting itself
  657.     into a "do nothing" state. [Scott Maxwell]
  658.  
  659. *    (Windows) When reloading a .psf file, fixed a bug that prevent the
  660.     Gremlin Control Window from being reshown if the session file had
  661.     been saved while a Gremlin was running. [Scott Maxwell]
  662.  
  663. *    (Windows) Fixed a problem with relocating the ROM file that a .psf
  664.     file reference when that ROM file wasn't where it was supposed to
  665.     be, but it *was* in the same directory as the .psf file.
  666.  
  667. *    (Unix) Rolled in modifications for FreeBSD. [John Ludwig]
  668.  
  669. *    (Unix) Properly recognise X options such as -display and -geometry.
  670.     [Eric House, John Marshall]
  671.  
  672. *    Reset the Dragonball timer registers to a consistant state before
  673.     starting a Gremlin. This gives more consistant results. HOWEVER,
  674.     any application that is dependent on the time in any fashion may
  675.     still have consistancy problems when running Gremlins (that is,
  676.     starting Gremlin #0 at 3:00pm may give different results than when
  677.     it is started at 5:00pm). This is an issue that we'll try to
  678.     address in a future release.
  679.  
  680. *    Switch from obsolete xxxChr names to new vchrXXX names in logging
  681.     output. Also, if a winExit/EnterEvent is associated with a form,
  682.     print the name of that form in the logging output if event logging
  683.     is turned on.
  684.  
  685. *    (Mac, Windows) Added Tracer support. This is a facility for
  686.     sending logging information to an external logging application. Palm
  687.     applications use the following API for doing this:
  688.     
  689.     (All HostTraceOutput functions take a module identifier as their
  690.     first parameter. This parameter allows filtering out traces
  691.     according to their origin. Recognized modules are listed as error
  692.     classes in SystemMgr.h. Application should specify appErrorClass.)
  693.  
  694.         void HostTraceInit(void);
  695.             Call once at the beginning of your application to
  696.             initialize the logging facility. Initiates a connection
  697.             to the "tracing port" (specified in Poser's Tracing
  698.             Options dialog box).
  699.  
  700.         void HostTraceClose(void);
  701.             Call once at the exit of your application to release
  702.             any host logging resources.
  703.  
  704.         void HostTraceOutputT(unsigned short, const char*, ...);
  705.             Log a string of text to the tracing port via a
  706.             "printf-like" facility.
  707.             
  708.         void HostTraceOutputTL(unsigned short, const char*, ...);
  709.             Same as HostTraceOutputT with an additional line break.
  710.  
  711.         void HostTraceOutputVT(unsigned short, const char*, char* /*va_list*/);
  712.             vprintf-like variant of HostTraceOutputT.
  713.  
  714.         void HostTraceOutputVTL(unsigned short, const char*, char* /*va_list*/);
  715.             vprintf-like variant of HostTraceOutputTL.
  716.  
  717.         void HostTraceOutputB(unsigned short, const unsigned char*, unsigned long/*size_t*/);
  718.             Send binary data to the tracing port.
  719.     
  720.     The functionality for sending the logging information to the
  721.     external application is provided by a shared library (e.g.,
  722.     "PalmTrace.dll" on Windows). The external application can be any
  723.     application that supports the open packet convention. The one we
  724.     provide is "Reporter". At the time of this writing, the shared
  725.     library and external reporting application will be provided in a
  726.     seperate archive. [Patrick Porlan, Regis Nicolas]
  727.  
  728. *    Internal changes: massive movement to make more source code cross
  729.     platform. New classes include:
  730.     
  731.     EmTransport: abstract base class representing a "pipe" between two
  732.     entities.
  733.  
  734.     EmTransportSerial: a pipe based on serial communications. Serial
  735.     port emulation (the facility that allows Palm OS Serial Manager
  736.     calls to pass thru to and from the host serial port) rewritten to
  737.     use EmTransportSerial.
  738.  
  739.     EmHostTransportSerial: class with different implementations on
  740.     different platforms in order to provide platform specific
  741.     functionality.
  742.  
  743.     EmDlg: class to manage dialogs in a cross-platform fashion.
  744.  
  745.     EmROMTransfer: class that implements a rewritten ROM download
  746.     facility, based on the new EmTransport and EmDlg classes. Because
  747.     the new ROM transfer code is based on EmTransport and not
  748.     EmTransportSerial, this means that it may be possible to transfer a
  749.     ROM using something other than the serial port in the future.
  750.  
  751. *    With the help of the previous changes, the ROM Download facility is
  752.     now available on Unix.
  753.  
  754. *    Internal change: rewrote JPEG decompression routines to better
  755.     modularize the source of compressed data and the destination of
  756.     decompressed data. This was done to better support JPEG images on
  757.     disk in addition to those in embedded resources.
  758.  
  759. *    Added back the old generic case graphics. These graphics are now
  760.     used when the user selects "Default" in the Skins menu and dialog. 
  761.     The nicer graphics are now identified with names like "Standard -
  762.     English" and "Standard - Japanese". Eventually, those nicer
  763.     graphics will be moved to external files, reducing the size of Poser
  764.     drastically and reducing download times.
  765.  
  766. *    Internal change: synced up with the latest shared Palm OS files.
  767.     This change also included switching over to the new standardized
  768.     types (UInt32, Int16, etc.) from the old hodgepodge of types (DWord,
  769.     Long, Int, Byte, etc.).
  770.  
  771. *    ROM Transfer now downloads the entire ROM instead of just the "Big
  772.     ROM". It now is also a little more robust in light of some invalid
  773.     fields in Visor ROMs.
  774.  
  775. *    (Windows) Added support for TRGpro devices. This support comes in
  776.     the form of supporting TRGnet's FAT File System library. There is
  777.     no TRGpro menu item in the device menu. Instead, you can
  778.     effectively turn any Palm Computing device into the equivalent of a
  779.     TRGnet device by installing their FFS library -- which is what
  780.     manages access to the CompactFlash slot -- onto the device.
  781.     (Actually, all it needs is a stub library that you can get from
  782.     TRGnet.) Poser will redirect calls from that library to the host
  783.     file system. The root of the emulated FFS directory hierarchy is
  784.     specified by the FfsHome preference in Poser's preference file. It
  785.     can be a path relative to Poser's directory (e.g., "foo") or an
  786.     absolute path (e.g., "c:\temp\foo"). The directory will be created
  787.     if needed. If no preference is specified, or the value is empty, or
  788.     the specified directory could not be created, the root path defaults
  789.     to Poser's directory. There is currently no UI for setting the root
  790.     of the hierarchy; you have to edit the preference file by hand.
  791.     [Mike Walter]
  792.  
  793. *    Added Visor support. Note that no USB support is provided in this
  794.     release. This means that Poser will not download a ROM from a
  795.     device in a USB-connected cradle, nor will USB operations on the
  796.     emulated Visor be redirected to any host facility.
  797.  
  798. *    Fixed problem with a too-small name buffer in profiling routines.
  799.     Removed absolute address from generated function names, as that
  800.     annotation interferes with the CodeWarrior Profiler's ability to
  801.     unmangle C++ names.    [Catherine White]
  802.  
  803. *    (Windows) Removed "Close" menu item from "bound" versions of Poser
  804.     (functionality duplicates "Exit"), and added "Save Screen". [Scott
  805.     Johnson]
  806.  
  807. *    (Unix) Added temporary hack to get Unix menus working (many would
  808.     result in the message that the system was not responding). The
  809.     solution implemented, however, is not optimal, and may lead to other
  810.     problems. Expect this area to receive more attention in the near
  811.     future. [Eric House]
  812.  
  813. *    Added sound emulation. Be sure to enable this in the preferences
  814.     if you want it. [William F. Weiher III]
  815.  
  816. *    Fixed a couple of minor problems in the NetLib redirection code,
  817.     one with accept() and another with the way select() timeouts were
  818.     set up. [bill pitore]
  819.  
  820. *    Fixed a problem with determining the baud rate established by the
  821.     UART, with the result that serial communications on 20MHz devices
  822.     (like the Palm Vx) didn't work. [Alan Finke]
  823.  
  824.  
  825. Changes for 3.0a3 (11/13/99)
  826. ----------------------------
  827. *    Added Q&D PC checking. On JSR, BSR, RTS, and RTE, I check what
  828.     we're attempting to set the PC to. Originally, I had a pretty beefy
  829.     check that made sure the PC was in things like allocated, locked
  830.     chunks. However, that's expensive for now, so I backed off to
  831.     checking that the PC was (a) even, (b) in RAM or ROM, and (c) not in
  832.     low-memory.
  833.  
  834. *    The new UAE 0.8.10 code includes a new way to emulate ROR and ROL
  835.     instructions. Unfortunately, this new way runs afoul of a code
  836.     generation bug in CWCPPC 2.3.1 (from CW 5.2) on the Mac. Reverted
  837.     to the old way of emulating those instructions until Metrowerks
  838.     comes out with a compiler patch. [Catherine White]
  839.  
  840. *    (Unix) Added tweaks for Debian systems. [Ben Darnell]
  841.  
  842. *    (Mac) Changed the way Poser determines whether or not to translate
  843.     extended ASCII characters (those >= 0x80) into standard ASCII
  844.     equivalents. The new method should be more consistant and robust,
  845.     based on whether or not the user is running a Japanese Palm OS and a
  846.     Mac OS with the Japanese Language Kit installed.
  847.  
  848. *    The device could actually go to sleep while running Gremlins!
  849.     Sometimes, Gremlins will input a long series of key events. 
  850.     However, key events don't reset the auto-off counter. Normally, the
  851.     Palm doesn't care, since key events are a side-effect of pen events,
  852.     which *do* reset the auto-off counter. But Poser doesn't enter key
  853.     events that way -- it inserts them directly with EvtEnqueueKey. Now
  854.     Poser calls EvtResetAutoOffTimer when it enters key events. [Steve
  855.     Lemke]
  856.  
  857. *    (Windows) Sped up Gremlin Hordes a little. There were some long
  858.     delays while switching from one Gremlin to another due to trying to
  859.     access the Gremlin Control Window from the wrong thread. There's
  860.     still a mysterious 2 second delay while switching Gremlins, but at
  861.     least one cause of the slow-down is fixed.
  862.  
  863. *    Fixed problem with Gremlins and Palm OS 3.5 systems. Gremlins
  864.     calls WinGetWindowBounds to get the bounds of a window in which to
  865.     generate pen taps. WinGetWindowBounds returns the bounds of the
  866.     window returned by WinGetDrawWindow. On older systems, if the draw
  867.     window were NULL, WinGetDrawWindow would return the display window.
  868.     On 3.5, this has been changed in debug ROMs; WinGetDrawWindow can
  869.     return NULL so as to force applications to make sure there is an
  870.     established draw window. Gremlins ran afoul of that change, and so
  871.     now calls WinSetDrawWindow(WinGetActiveWindow()) before calling
  872.     WinGetWindowBounds(). [Roger Flores, Steve Lemke]
  873.  
  874. *    In the event posting/receiving logging code, support the new Palm
  875.     OS 3.5 events.
  876.  
  877. *    In HostFPrintF, support + and space as flags, and * as a minimum
  878.     width field character. [Patrick Porlan]
  879.  
  880. *    Added Symbol 1700/1740 skin as an option for Palm III's. This is
  881.     *not* to say that Poser emulates symbol devices. It only means that
  882.     you can make a Palm III look like a Symbol device. [Ron Kupke]
  883.  
  884. *    Reformatted Gremlin Hordes log file to make it a little easier to
  885.     find the error messages. [Flash Sheridan, Catherine White]
  886.  
  887. *    Make a stronger effort to get the pen calibrated perfectly. The
  888.     original attempt (cf, 2.1d11) would occassionally only get us very
  889.     close, which could lead to inconsistant Gremlin runs.
  890.  
  891. *    Fixed a bug in the UAE 0.8.10 code where a corrupt status register
  892.     could get pushed onto the stack during an exception/interrupt and
  893.     the previous instruction that had affected the Z CPU flag was a BCHG
  894.     instruction that flipped the highmost bit from off to on (gee, how
  895.     could we have missed *that*). [Catherine White, Stuart Malone]
  896.  
  897.  
  898. Changes for 3.0a2 (11/05/99)
  899. -----------------------------
  900. *    Updated to UAE 0.8.10. We were previously based on 0.8.3. The new
  901.     version fixes a few minor bugs (I never noticed them), perhaps
  902.     speeds things up a little, but most importantly cleans up those 2000
  903.     "unreferenced label" warnings you get when compiling with gcc!  OK,
  904.     so now there are some "unused variable" warnings, but there are a
  905.     lot fewer of them...
  906.  
  907. *    (Windows) The sequence of events involving saving a session when
  908.     creating or opening a new one was completely broken.
  909.  
  910. *    (Windows) Added support from Palm Europe for their tracing tool.
  911.     This tracing tool is a seperate application that receives tracing
  912.     information sent via HostControl functions. The documentation for
  913.     these functions is not yet available. Neither is the external
  914.     application. But they soon will be. I just wanted to at least
  915.     mention them so that people don't ask me about them if they see the
  916.     new functions in HostControl.h.
  917.  
  918. *    (Unix) Modified Perl script that creates ResStrings.cpp. It used
  919.     to add the strings to a map object (so that they can be looked up by
  920.     an ID number) by calling a function with about 2000 calls that
  921.     looked like "map[id] = str;". However, gcc would choke on this with
  922.     optimizations turned on. Now, that map addition is performed in a
  923.     seperate function, and that function is called 2000 times instead.
  924.     [Ben Darnell, Jon Fo]
  925.  
  926.  
  927. Changes for 3.0a1 (11/04/99)
  928. -----------------------------
  929. *    Interim internal release dates:
  930.         2.1d29.1    -    08/26/99
  931.         3.0a1e2        -    09/14/99
  932.         3.0a1e3        -    09/15/99
  933.         3.0a1e4        -    09/16/99
  934.         3.0a1e5        -    09/21/99
  935.         3.0a1e6        -    09/24/99
  936.         3.0a1e7        -    09/30/99
  937.         3.0a1e8        -    10/08/99
  938.         3.0a1e9        -    10/14/99
  939.         3.0a1e10    -    10/19/99
  940.         3.0a1e11    -    10/27/99
  941.  
  942. *    Rolled in Llamagraphics's profiling changes [Catherine White]:
  943.  
  944.     The motivation for these changes was to fix the crashing problem we
  945.     reported earlier. Here's what we changed:
  946.  
  947.     -    We rewrote RecursiveAddressToStrings without recursion, and
  948.         named the new function LinearAddressToStrings. The old function
  949.         was recursing over both kids and siblings, which was blowing the
  950.         stack on the Macintosh. Since it doesn't matter what order the
  951.         addresses are converted in, a linear loop is faster and simpler.
  952.  
  953.     -    Called ProfilerCleanup at the end of ProfilerDump. Since
  954.         calls[i].address is modified during the dump, the calls array
  955.         can't be reused after the dump since it no longer contains valid
  956.         addresses. It seems safer to dispose of it so that it isn't used
  957.         accidentally.
  958.  
  959.     -    Replaced the two Debugger() calls in ProfilerInit with calls to
  960.         DisposeMemory(). We were encountering these Debugger calls
  961.         while testing our own code, probably because ProfilerInit was
  962.         being called twice somehow. Calling ProfilerInit twice should
  963.         now be harmless, and should no longer leak memory.
  964.  
  965.     -    Changed the handling of function names so that they are no
  966.         longer limited to 31 characters. The new limit is 255
  967.         characters. This means that most mangled C++ names can now be
  968.         parsed properly by the MW Profiler, which makes interpreting the
  969.         profiles easier.
  970.  
  971.         In order to accomplish this, we needed to add extra arguments to
  972.         two routines in Miscellaneous.cpp for the buffer capacity. This
  973.         capacity defaults to 32, which means that callers who don't pass
  974.         in the extra argument will get the same behavior as before.
  975.  
  976.         We also added code in the profiler so that the stringTable could
  977.         grow dynamically. This means that it isn't so important to
  978.         allocate enough memory for the stringTable initially. However,
  979.         the initial size is currently the same as the old size was, so
  980.         reallocation shouldn't occur very often.
  981.  
  982. *    (Mac) Updated to CodeWarrior Pro 5.
  983.  
  984. *    Overhauled handling of preferences/properties/settings/options...
  985.     These settings were previously stored as resource-based binary data
  986.     on the Mac, System Registry entries on Window, and an RC text file
  987.     on Unix. Now the information is saved out as a text file on all
  988.     platforms. And -- with a common source code base -- all information
  989.     is saved out consistantly (some platforms previously skipped saving
  990.     some information). Finally, with all information in an accessible
  991.     text file format, it should be easier for users to tweak or fix
  992.     settings (or even specify settings for which there is no UI).
  993.  
  994.     Note that NO attempt has been made to migrate forward settings from
  995.     the previous formats.
  996.  
  997. *    In line with that, if the InterceptSysFatalAlert is true (default),
  998.     Poser will intercept calls to SysFatalAlert and display the message
  999.     in its own dialog box. If this setting is false, Poser will let the
  1000.     standard Palm OS function display the message. [Ken Krugler, Scott
  1001.     Johnson]
  1002.  
  1003. *    If a SysFatalAlert dialog is displayed while a Gremlin is running,
  1004.     the Gremlin will no longer be halted if the user clicks on Continue
  1005.     (it used to be that the Gremlin was *always* halted). [Roger Flores]
  1006.  
  1007. *    (Windows) Ask user if they'd like to have a shortcut to Poser added
  1008.     to the Start Menu. [Phil Shoemaker]
  1009.  
  1010. *    Better validation of .prc files. [Daniel McCarthy]
  1011.  
  1012. *    (Windows) Cancel button in file download progress dialog now works.
  1013.  
  1014. *    (Windows) Fixed byteswapping bug in PSF writing code. Poser should
  1015.     now have a better chance of reading Mac-created PSF files on Windows
  1016.     and vice-versa.
  1017.  
  1018. *    Fixed memory leak bug that would occur when closing a session. The
  1019.     buffers holding the ROM image and auxilliary information weren't
  1020.     being deleted. [bullshark (a real person with a real email
  1021.     address)].
  1022.  
  1023. *    (Windows) Added the Palm OS Emulator Binding tool, an NT-only
  1024.     wizard which can bind a Windows Poser executable with (1) a ROM file
  1025.     and a device configuration, or (2) a ROM file and a session file.
  1026.     This will create a self-contained executable suitable for "kiosk"
  1027.     run.
  1028.  
  1029.     Poser detects when it is bound, and modifies its behavior in the
  1030.     following manner:
  1031.  
  1032.     (1)    ROM + device configuration. Poser always starts by booting
  1033.         into a new session with the selected device configuration and
  1034.         ROM. If the user closes the session and creates a new one, he or
  1035.         she will not be prompted for a device configuration.
  1036.  
  1037.     (2)    ROM + PSF file. Poser always starts right into the state
  1038.         saved in the PSF file. The user interface is abbreviated to
  1039.         include only pertinent functionality (no debugging or logging,
  1040.         for example) that is appropriate to a "kiosk" run. IF the user
  1041.         closes the session, he or she only has the option to restart it
  1042.         in the state saved in the PSF file. Posers bound this way share
  1043.         a separate set of preferences then unbound Posers.
  1044.  
  1045. *    Made the socket port that an external debugger can connect to
  1046.     configurable. The old hard-coded port of 2000 is still support for
  1047.     backward compatibility, but clients should move away from that.
  1048.     Instead, they should use the port specified in the
  1049.     "DebuggerSocketPort" preference. (There is currently no UI for
  1050.     changing this preference. But it can be changed by hand by editting
  1051.     the Poser preferences file, which is in text format.)
  1052.  
  1053. *    Added the following functions to HostControl.h:
  1054.  
  1055.         HostErr        HostProfileDetailFn            (void* addr, HostBool logDetails)
  1056.  
  1057.             Profiles the function containing the given address. If
  1058.             logDetails is true, profiling is performed at a machine-
  1059.             language instruction level (each opcode is treated as
  1060.             its own function).
  1061.  
  1062.         HostErr        HostGremlinNew                (const HostGremlinInfo*);
  1063.  
  1064.             Start a new Gremlin using the given specifications.
  1065.  
  1066.         HostBool    HostGetPreference            (const char*, char*);
  1067.         void        HostSetPreference            (const char*, const char*);
  1068.  
  1069.             Get or set the specified preference. Preferences are
  1070.             identified by name, the set of which can be seen in the Palm
  1071.             OS Emulator Preferences file for your platform ("Palm OS
  1072.             Emulator Preferences" in the Preferences folder on the Mac,
  1073.             "Palm OS Emulator Preferences.ini" in the Windows System
  1074.             directory on Windows, and ".poserrc" in your home directory
  1075.             on Unix). The values are also specified as strings,
  1076.             examples of which can be seen in the preferences file.
  1077.  
  1078.         HostErr        HostSessionCreate            (const char* device, long ramSize, const char* romPath);
  1079.  
  1080.             Create a new session based on the given parameters.
  1081.             Fails if a session is already running.
  1082.  
  1083.             * NOTE: Not yet implemented.
  1084.  
  1085.         HostErr        HostSessionOpen                (const char* psfFileName);
  1086.  
  1087.             Open the given session. Fails if a session is already
  1088.             running.
  1089.  
  1090.             * NOTE: Not yet implemented.
  1091.  
  1092.         HostErr        HostSessionClose            (const char* saveFileName);
  1093.  
  1094.             Close the current session, saving it to the given file.
  1095.             The session is not saved if no file name is specified.
  1096.             This function fails if no session is running.
  1097.  
  1098.         HostErr        HostSessionQuit                (void);
  1099.  
  1100.             Ask Poser to quit. Fails if a session is already
  1101.             running.
  1102.  
  1103.         HostErr        HostSignalSend                (HostSignal signalNumber)
  1104.             
  1105.             Send a signal (identified by an integer) to any scripts
  1106.             with HostSignalWait calls pending. If there are such
  1107.             pending calls, Poser then halts waiting to be restarted
  1108.             with HostSignalResume. If no one was waiting for any
  1109.             signals, then Poser doesn't halt.
  1110.  
  1111.         HostErr        HostSignalWait                (long timeout, HostSignal* signalNumber)
  1112.  
  1113.             Wait for a signal from Poser. Signals can be predefined
  1114.             (hostSignalIdle, hostSignalQuit) or user-defined.
  1115.             HostSignalWait returns the signalled value.
  1116.  
  1117.             hostSignalIdle is issued by Poser when it detects that it's
  1118.             going into an idle state.
  1119.  
  1120.             hostSignalQuit is issued by Poser when it's about to quit.
  1121.  
  1122.         HostErr        HostSignalResume            (void)
  1123.  
  1124.             Restarts Poser after it has issued a signal. By waiting
  1125.             to be restarted, Poser allows external scripts to perform
  1126.             any other operations first.
  1127.  
  1128.  
  1129.     While the following functions are in the HostControl API,
  1130.     they exist for external RPC clients to call and will return
  1131.     errors if called by Palm OS applications:
  1132.  
  1133.         HostSessionCreate
  1134.         HostSessionOpen
  1135.         HostSessionClose
  1136.         HostSessionQuit
  1137.         HostSignalWait
  1138.         HostSignalResume
  1139.  
  1140. *    Opened a socket (on the port specified in "RPCSocketPort"
  1141.     preference) for external applications to make RPC calls. By sending
  1142.     RPC packets, external applications can invoke any function in the
  1143.     Palm OS dispatch table. This set of functions includes the
  1144.     HostControl functions, which can be called even when no session is
  1145.     running (which normally would mean that there isn't really a
  1146.     dispatch table containing functions that can be called).
  1147.  
  1148.     Packets sent to the RPC sub-system use the same format as packets
  1149.     sent to the debugger sub-system, that is, the Serial Link Protocol
  1150.     packet format (also used by HotSync). This format is described in
  1151.     Debugging.html.
  1152.  
  1153.     When sending command packets to the RPC sub-system, you need to set
  1154.     the "dest" field of the packet header to:
  1155.  
  1156.         #define slkSocketRPC            (slkSocketFirstDynamic + 10)
  1157.  
  1158.     as opposed to slkSocketDebugger or slkSocketConsole, as you would
  1159.     when talking with the debugger sub-system.
  1160.  
  1161.     The RPC sub-system can accept one of 4 kinds of command pacets:
  1162.     ReadMem, WriteMem, RPC, and RPC2. The first three packets are the
  1163.     same as those sent to the debugger sub-system and are defined in
  1164.     Debugging.html. RPC2 is an extension of the RPC packet in order to
  1165.     support a wider range of facilities.
  1166.  
  1167.     RPC2 packets are defined as follows:
  1168.  
  1169.         #define sysPktRPC2Cmd    0x20
  1170.         #define sysPktRPC2Rsp    0xA0
  1171.  
  1172.         struct SysPktRPCParamInfo
  1173.         {
  1174.             UInt8    byRef;        // true if param is by reference
  1175.             UInt8    size;        // # of Bytes of paramData    (must be even)            
  1176.             UInt16    data[1];    // variable length array of paramData
  1177.         };
  1178.     
  1179.         struct SysPktRPC2Type
  1180.         {
  1181.             _sysPktBodyCommon;            // Common Body header
  1182.             UInt16    trapWord;            // which trap to execute
  1183.             UInt32    resultD0;            // result from D0 placed here
  1184.             UInt32    resultA0;            // result from A0 placed here
  1185.             UInt16    resultException;    // If an exception occured, it's ID is here
  1186.             UInt8    DRegMask;            // Bitmasks indicating what registers need...
  1187.             UInt8    ARegMask;            // ...to be set on this call.
  1188.             UInt32    Regs[1];            // Variable-length array holding register...
  1189.                                         // ...values to be set on this call.
  1190.             UInt16    numParams;            // how many parameters follow
  1191.  
  1192.             // Following is a variable length array of SlkRPCParamInfo's
  1193.             SysPktRPCParamType    param[1];
  1194.         };
  1195.  
  1196.     Most of this is the same as the RPC packet. It differs with the
  1197.     addition of the following fields:
  1198.  
  1199.     resultException: if the function call failed because a hardware
  1200.     exception occured, the exception ID will be stored here. Otherwise,
  1201.     this field contains zero.
  1202.  
  1203.     DRegMask: a bitmask indicating what D registers need to be set in
  1204.     order to make this call. In particular, some functions require that
  1205.     a "selector" value be placed in register D2. In this case, bit 2 of
  1206.     DRegMask (the 3rd bit from the right) would be set.
  1207.  
  1208.     ARegMask: same comments.
  1209.  
  1210.     Regs[1]: a variable length array containing the values to be placed
  1211.     in the registers to be set. Only the registers that are being
  1212.     changed need to be supplied. Most of the time, DRegMask and ARegMask
  1213.     will be zero and Regs would not appear in the packet. In the example
  1214.     where D2 needs to be set, DRegMask would be 0x04, ARegMask would be
  1215.     0x00, and ARegMask would be followed by a single 32-bit value to be
  1216.     placed in D2. If more than one register needs to be set, then the
  1217.     register values should appear in the following order: D0, D1, ...,
  1218.     D6, D7, A0, A1, ..., A6, A7. Again, only values for the registers
  1219.     specified in DRegMask and ARegMask need to be provided.
  1220.  
  1221. *    Fixed crasher that could occur if "Received Events" logging was
  1222.     turned on and one of three KeyDown events was popped off the stack.
  1223.     [Ken Krugler, Jeff Yasuda]
  1224.  
  1225. *    (Unix) Added serial port emulation, as well as better support for
  1226.     other OS and compiler flavors. [Jerry Kirk, Michael Kedl]
  1227.  
  1228. *    (Unix) Added support for cursor, page up/down keys. [Michael Kedl]
  1229.  
  1230. *    (Unix) Fixed massive memory leak when sessions ended. [Michael Kedl]
  1231.  
  1232. *    More evolution of skin support. Skins are now set on a device-by-
  1233.     device basis from a new "Skins..." dialog box. Other aspects of the
  1234.     device's appearance are also set from this dialog box, such as the
  1235.     scaling factor and the LCD background color.
  1236.  
  1237. *    Look at the chip selects when determining what range of RAM should
  1238.     be protected or not instead of just assuming 128K. [Steve Lemke]
  1239.  
  1240. *    Fixed problems with reloading .psf files what were saved when a
  1241.     Gremlin was running.
  1242.  
  1243.  
  1244. *    Setting "DebuggerSocketPort" or "RPCSocketPort" preferences to zero
  1245.     will disable their respective facilities. This should be handy in
  1246.     cases where merely opening a TCP socket fires up any sort of
  1247.     unwanted Remote Access facilites. [Ken Krugler]
  1248.  
  1249. *    (Mac) Fixed bug in new preferences saving mechanism where the
  1250.     preferences would not get saved if the file didn't already exist.
  1251.     [Mike Puckett]
  1252.  
  1253. *    Allow LCD window to be placed in negative coordinates. [Mike Puckett]
  1254.  
  1255. *    Addition of Gremlin Hordes. A Horde is basically a range of
  1256.     Gremlins to run. You specify the range: the first Gremlin and the
  1257.     last Gremlin in the Horde. Poser will start with the first Gremlin,
  1258.     and generate that Gremlins event stream until one of four things
  1259.     happens:
  1260.  
  1261.     - An error occurs (hardware exception, illegal memory access, etc.),
  1262.     - The maximum number of events have been generated,
  1263.     - A "switch" event occurs. A switch event is when a specified number
  1264.       of the maximum number of events have been generated.
  1265.  
  1266.     When any of these conditions occur, the current Gremlin is either
  1267.     halted or suspended and the next Gremlin in the Horde is selected. 
  1268.     When Poser has cycled through all the Gremlins in the range, it
  1269.     cycles back and restarts any suspended Gremlins one at a time. When
  1270.     all Gremlins have been halted (either because they've encountered an
  1271.     error or they've reached the maximum number of events), the Hordes
  1272.     session is completed.
  1273.  
  1274. *    (Windows) Added the following command-line options [Brian Estes]:
  1275.  
  1276.     -skin <name>:
  1277.             Synonyn for -silkscreen.
  1278.  
  1279.     -ram_size <size in K>:
  1280.             Synonym for -ram.
  1281.  
  1282.     -load_apps <file name list>:
  1283.             A comma-seperated list of files (.prc's, etc.) to load after
  1284.             startup.
  1285.  
  1286.     -run_app <app name>:
  1287.             Application to run after startup. Note that this is the
  1288.             name of the *application*, not the file.
  1289.  
  1290.     -quit_on_exit:
  1291.             If -run_app was specified, quit when that application exits.
  1292.  
  1293.     -log_save_dir <path>:
  1294.             Location for standard log file. Default = Poser's directory.
  1295.  
  1296.     -horde <num>:
  1297.             Gremlin number to run after session is created or loaded. 
  1298.             Equivalent to setting -horde_first and -horde_last to the
  1299.             same number.
  1300.  
  1301.     -horde_first <num>:
  1302.             First Gremlin in a Gremlin Horde to run.
  1303.  
  1304.     -horde_last <num>:
  1305.             Last Gremlin in a Gremlin Horde to run.
  1306.  
  1307.     -horde_apps <app name list>:
  1308.             A comma-seperated list of applications Gremlins is allowed
  1309.             to switch to. Default == entire device (no restrictions).
  1310.  
  1311.     -horde_save_dir <path>:
  1312.             Location for directory that keeps saved session files and
  1313.             logs. Default = Poser's directory.
  1314.  
  1315.     -horde_save_freq <num>:
  1316.             Gremlin snapshot save frequency. Default = don't save
  1317.             snapshots.
  1318.  
  1319.     -horde_depth_max <num>:
  1320.             Total number of Gremlin events to generate for each Gremlin.
  1321.             Default == no upper limit.
  1322.  
  1323.     -horde_depth_switch <num>:
  1324.             Number of Gremlin events to generate before switching to
  1325.             another Gremlin in a Horde. Default == the same number
  1326.             specified for -horde_depth_max.
  1327.  
  1328. *    (Windows) Added support for Alt-F4; made it act like the Exit menu
  1329.     item. [Ryan Robertson]
  1330.  
  1331. *    Fixed a problem with profiling calls to Palm OS function made via
  1332.     the SYSTRAP_FASTER macro. The function entry would be recorded once
  1333.     because it was a system call, and then again because it was made via
  1334.     a JSR. Because the subsequent RTS would pop only one of those off of
  1335.     the profiler's stack, the stack would get out of sync and overflow.
  1336.     [Jameson Quinn]
  1337.  
  1338. *    (Windows, Unix) Now stop the CPU thread on almost any UI action.
  1339.     Previously, the CPU thread would be stopped only in targeted
  1340.     situations. Now, it's stopped whenever the user executed a menu
  1341.     command. This change was made when I found out that the profiling
  1342.     menu items could mess up the CPU thread if it weren't stopped first.
  1343.  
  1344. *    Updated ROM Transfer project to CodeWarrior for Palm OS 5.2 (that
  1345.     is, CodeWarrior for Palm OS Release 5 with Metrowerks' two updates
  1346.     applied).
  1347.  
  1348. *    Fixed the way time spent in the trap dispatcher was recorded when
  1349.     profiling; entries for the same function weren't necessarily being
  1350.     collapsed into a single entry. [Bob Ebert]
  1351.  
  1352. *    (Unix) Added JPEG case graphics.
  1353.  
  1354. *    (Windows) Added taskbar menu with Minimize/Move/Close menu items.
  1355.     Note that there may still be problems with minimizing/maximizing
  1356.     Poser. For instance, Windows NT does not minimize windows without
  1357.     caption bars when you select "Minimize All Windows". Windows 98
  1358.     will hide Poser when selection "Show Desktop", but will restore
  1359.     Poser when restoring another application window. These problems
  1360.     appear to be shortcomings of Windows, but if anyone knows how to
  1361.     accomodate these foibles, please let me know. [Scott Johnson]
  1362.  
  1363. *    More accurate emulation of ROM space. Now the chip-selects are
  1364.     used in conjuction with the ROM image file size. [Steve Lemke,
  1365.     Jesse Donaldson]
  1366.     
  1367.     In general:
  1368.  
  1369.     The size of the ROM image is always rounded up to the next power of
  1370.     two.
  1371.  
  1372.     On Dragonball devices, I assume that the chip-selects are always set
  1373.     to specify a 2 Meg ROM (this appropriate for all ROMs so far). On
  1374.     DragonballEZ devices, I look at csASelect, bits 1-3 (BTW, the reset
  1375.     value for this register is 0x00E0, so there don't seem to be any
  1376.     boot-up issues).
  1377.  
  1378.     If the rounded ROM image size is larger than the size specified by
  1379.     the chip-selects, then it gets truncated; the CPU won't be able to
  1380.     access the far end of it.
  1381.  
  1382.     If the rounded ROM image size is the same as the size specified by
  1383.     the chip-selects, then everything is fine. No truncating, no
  1384.     mirroring.
  1385.  
  1386.     If the rounded ROM image size is smaller than the size specified by
  1387.     the chip-selects, then the ROM image is mirrored for as many times
  1388.     as is necessary to cover the range.
  1389.  
  1390. *    (Mac) Added Power Manager code to keep PowerBooks awake when Poser
  1391.     is doing something and when the PowerBook is plugged in. [Mike
  1392.     Puckett]
  1393.  
  1394. *    Ensure that windows (LCD, Gremlin Control) are onscreen when
  1395.     they're created. Right now, this means that they are brought
  1396.     onscreen if any part of them is offscreen. If this is too strict,
  1397.     we can revisit the algorithm later.
  1398.  
  1399. *    The code to validate the objects on a form has been moved from
  1400.     Gremlins-specific code into a patch on FrmDrawFrom. Now people will
  1401.     get bugged about invalid objects even when not running Gremlins. :-)
  1402.  
  1403.     By the way, some people have reported that they get told about
  1404.     invalid or offscreen form objects, and that they think these reports
  1405.     are in error, as the objects reported have ludicrous positions and
  1406.     sizes and have object IDs that don't exist in the resource
  1407.     description file. If you get such a message, *strongly* suspect
  1408.     that your object list has been trashed, possibly due to the changing
  1409.     of a label or title. Eventually, Poser will be able to detect when
  1410.     form object lists get trashed at the moment it occurs, and not later
  1411.     on down the stream (such as when the form gets drawn).
  1412.  
  1413. *    When dragging files onto the LCD screen, the rules are: you can
  1414.     drag any number and assortment of .prc, .pdb, and .pqa files; you
  1415.     can drag only one .rom file, you can drag only one .psf file; you
  1416.     can't mix files from any of the three just-mentioned categories
  1417.     together. If you broke any of these rules, you'd get an error
  1418.     message. However, this error message was broken in different way on
  1419.     Mac and Windows (the Unix version doesn't support D&D yet -- any
  1420.     takers?). This was fixed by making the majority of the relevent
  1421.     code cross-platform, and then fixing *that*. [Roger Flores, Mike
  1422.     Turcotte]
  1423.  
  1424. *    (Mac) Fixed problem with Japanese text showing up as "Jinglish" on
  1425.     systems with the Japanese Language Kit installed. This was always
  1426.     supposed to be a feature in the New Gremlin dialog (so that you
  1427.     could see the application names correctly), but appears to have been
  1428.     broken for some time. That should be fixed, and the same facility
  1429.     has now been extended to the dialog containing error messages
  1430.     generated by the Palm OS. [Ken Krugler]
  1431.  
  1432. *    Fixed bug in NetLibGetHostByAddr where the address was assumed to be
  1433.     a NetSocketAddrType instead of anything that could be "len" bytes
  1434.     long. [Bill Pittore]
  1435.  
  1436. *    Turned on checking of writes to ROM. This was off for a reason
  1437.     (there's a comment next to the relevent part saying "HACK: We really
  1438.     want it to be true!"), but I don't remember what it is. I was able
  1439.     to run Gremlins on some apps for quite a while without error, so
  1440.     hopefully we can get away with turning this back on. [Scott Johnson]
  1441.  
  1442. *    Take another stab at fixing the problem with FntDefineFont, as first
  1443.     described in the release notes for 2.1d20. FntDefineFont can read
  1444.     off the end of a source buffer, causing Poser to report an invalid
  1445.     read access to memory manager data structures. This bug -- fixed in
  1446.     Palm OS 3.2 -- doesn't need to be alerted by Poser. [Scott Johnson]
  1447.  
  1448. *    If an application executes DbgBreak and no debugger is attached,
  1449.     display a friendly message in a dialog box that includes Continue
  1450.     and Reset buttons. [Ken Krugler]
  1451.  
  1452. *    Added Red Dutta's "Export Database" menu item. This command takes
  1453.     the place of the "posedbexport" Palm OS application, allowing you
  1454.     to export databases and applications from the emulator to your
  1455.     desktop computer as a .pdb or .prc file. [Red Dutta]
  1456.  
  1457. *    Patch SysReset so that Poser no longer complains about normally
  1458.     proscribed actions (like mucking with low-memory) during a reboot.
  1459.  
  1460. *    Bring us in-sync with the Simulator with regards to entering
  1461.     control-chars that map to Palm OS command-chars. The list is:
  1462.  
  1463.         control-A    menuChr
  1464.         control-B    lowBatteryChr
  1465.         control-C    commandChr
  1466.         control-D    confirmChr
  1467.         control-E    launchChr
  1468.         control-F    keyboardChr
  1469.         control-M    linefeedChr
  1470.         control-N    nextFieldChr
  1471.         control-S    autoOffChr
  1472.         control-T    hardContrastChr
  1473.         control-U    backlightChr
  1474.  
  1475.     B, S, T, and U are new in this release.
  1476.  
  1477.  
  1478. Changes for 2.1d29 (7/8/99)
  1479. ---------------------------
  1480. *    Interim internal release dates:
  1481.         2.1d28.1    -    6/4/99
  1482.         2.1d28.2    -    6/4/99
  1483.         2.1d28.3    -    6/11/99
  1484.         2.1d28.4    -    6/11/99
  1485.         2.1d28.5    -    6/11/99
  1486.         2.1d28.6    -    6/15/99
  1487.         2.1d28.7    -    6/16/99
  1488.         2.1d28.8    -    6/23/99
  1489.         2.1d28.9    -    6/25/99
  1490.         2.1d28.10    -    6/30/99
  1491.  
  1492. *    For temporary backward compatibility, "bare" file names on the
  1493.     command lineare treated as paths to .psf files. [Andreas Linke, Mike
  1494.     McCollister]
  1495.  
  1496. *    (Mac) Fixed problem with receiving Error #18 when trying to download
  1497.     ROMs from actual devices over the serial port. [Mark Ordal]
  1498.  
  1499. *    In debugger/sockets communications, allow for recv() returning
  1500.     zero, indicating a closed connection.
  1501.  
  1502. *    Fixed multi-threading bugs. [Andrew Ball, Daniel McCarty, Scott
  1503.     Johnson, Keith Wolcott, Art Dahm, Mark Lussier, Alex Robinson,
  1504.     Patrick Porlan]
  1505.  
  1506. *    (Unix) Fixed some makefile problems. [many]
  1507.  
  1508. *    (Mac, Windows): new case graphics. Note that the edges of the new
  1509.     graphics are a little rough; we'll be working on that for the next
  1510.     release. Also, the Mac version doesn't set up a custom palette in
  1511.     8-bit mode, yet, so for best results, you might want to put your
  1512.     monitor in 16- or 24-bit modes. Finally, the Unix version will get
  1513.     the new graphics in the next release.
  1514.  
  1515. *    Print some logging information using signed instead of unsigned
  1516.     value. [Oliver King-Smith]
  1517.  
  1518. *    Don't go into infinite recursion when the emulated PC is set to an
  1519.     odd memory address. [John Marshall]
  1520.  
  1521. *    Fixed problem in the "NetLib redirected" version of
  1522.     NetLibSocketAccept where the address and address length were not
  1523.     returned. [Bill Pitore]
  1524.  
  1525. *    (Windows) As outlined in the notes for 2.1d28, Poser will look for
  1526.     the last-saved .psf file when starting up. It used to save the
  1527.     reference to this file as a full pathname. Now, if the attempt
  1528.     to locate the file with the full pathname fails, Poser will look
  1529.     for a .psf file with the same name in the same directory as
  1530.     Poser itself. This approach is similar to the way in which
  1531.     Poser looks for .ROM files that are no longer at their last known
  1532.     location. [Michael Hado]
  1533.  
  1534. *    Worked around VC++ 6.0 bug where tabbed dialogs in applications
  1535.     built by it won't show up on systems without IE 4.x installed.
  1536.     [Michael S. Davis]
  1537.  
  1538. *    (Unix) Fixed a minor bug in skin loading code which causes Emulator
  1539.     to crash when it tries to load a skin file from current directory.
  1540.     [Vlad]
  1541.  
  1542. *    Set the command key bit when Gremlins posts an up or down arrow.
  1543.  
  1544.  
  1545. Changes for 2.1d28 (5/21/99)
  1546. ----------------------------
  1547. *    Interim internal release dates:
  1548.         2.1d27.1    -    5/17/99
  1549.  
  1550. *    (Windows) Added command line options:
  1551.  
  1552.     -psf <filename>: emulator loads the specified .psf file on startup.
  1553.  
  1554.     -rom <filename>: specifies the ROM image file to use.
  1555.     -ram <size>: specifies the amount of RAM to emulate (in K). Valid sizes
  1556.             are 128, 256, 512, 1024, 2048, 4096, and 8192.
  1557.     -device <type>: specifies the device to emulate. Valid types are pilot,
  1558.             palmpilot, palmiii, palmiiix, palmv, and palmvii.
  1559.     -silkscreen <type>: specifies the silkscreen to use. Valid types are
  1560.             english and japanese.
  1561.  
  1562.     Case is NOT significant.
  1563.  
  1564.     Examples:
  1565.  
  1566.         Emulator -psf C:\Data\Session.psf
  1567.  
  1568.         Emulator -ROM C:\ROMs\3.0\debug.rom -RAM 1024 -Device PalmIII
  1569.             -Silkscreen English
  1570.  
  1571.     Startup rules are now as follows:
  1572.  
  1573.     1 If the Caps Lock key is toggled in the ON position, always bring
  1574.       up the New/Open/... dialog.
  1575.     2 Scan the command line for startup parameters. If an error occurs
  1576.       trying to scan the command line, the error is reported and the user
  1577.       is presented with the New/Open/... dialog.
  1578.     3 Use the .psf file if one is specified. If an error occurs trying
  1579.       to load the file, the error is reported and the user is presented
  1580.       with the New/Open/... dialog.
  1581.     4 If any of -rom, -ram, -device, or -silkscreen are specified, try
  1582.       to start a new session based on those values. If all are specified,
  1583.       the new session is automatically created. If any of those four
  1584.       values are missing, the "New Configuration" dialog is displayed.
  1585.       If the user cancels the dialog, or if there is an error creating
  1586.       the new session, any error is reported and the user is presented
  1587.       with the New/Open/... dialog.
  1588.     5 If no command line options are specified, try re-opening the last
  1589.       saved .psf file (this step is skipped if the user last created a
  1590.       new session, but did NOT save that session to a file). If an error
  1591.       occurs trying to load the file, the error is reported and the user
  1592.       is presented with the New/Open/... dialog.
  1593.     6 Try creating a new session based on the settings the user last
  1594.       specified when creating a session. If there is an error creating
  1595.       the new session, the error is reported and the user is presented
  1596.       with the New/Open/... dialog.
  1597.     7 Finally, if all else fails, present the user with the New/Open/...
  1598.       dialog.
  1599.  
  1600.     Steps 1, 5, 6, and 7 describe the old startup rules. Steps 2, 3,
  1601.     and 4 are new. [Steve Haneman]
  1602.  
  1603. *    See that problem where I said that saving a session file could take
  1604.     up to 15 seconds or even longer?  And see where I said I didn't know
  1605.     why?  Well, it's because I'm an idiot. Under certain circumstances,
  1606.     Poser could get into a state where it would save the same session
  1607.     file several times in a row. Normally it would take a 1/2 second to
  1608.     save a file. But if it decided to save the same file 30 times in a
  1609.     row, that would take 15 seconds...
  1610.  
  1611. *    Fixed some more synchronization problems on SMP machines.
  1612.  
  1613. *    Force the Log####.txt files to be stored in the Poser directory
  1614.     instead of whatever directory happens to be the current one.
  1615.  
  1616.  
  1617. Changes for 2.1d27 (5/7/99)
  1618. ---------------------------
  1619. *    Interim internal release dates:
  1620.         2.1d26.1    -    ???
  1621.         2.1d26.2    -    ???
  1622.         2.1d26.3    -    ???
  1623.         2.1d26.4    -    3/25/99
  1624.         2.1d26.5    -    4/1/99
  1625.         2.1d26.6    -    ???
  1626.         2.1d26.7    -    ???
  1627.         2.1d26.8    -    4/27/99
  1628.         2.1d26.9    -    4/29/99
  1629.         2.1d26.10    -    5/5/99
  1630.  
  1631. *    Added special messages for accessing NULL and for trying to access
  1632.     the A5 register (in order to access global variables or make inter-
  1633.     segment jumps) when A5 is not set up for the application trying to
  1634.     use it. [Roger Flores, Ken Krugler]
  1635.  
  1636. *    Better tracking of the current application. Now, if errors occur
  1637.     during an "action code" sequence, the application executing is
  1638.     reported, not the "main", "real" application that has the stack, A5,
  1639.     etc. [Roger Flores]
  1640.  
  1641. *    Fixed problem with installed Palm OS files and .psf files not
  1642.     getting added to the MRU lists if the list was empty. [Scott
  1643.     Johnson]
  1644.  
  1645. *    Fixed problem with MRU lists getting too long. [John Kinast]
  1646.  
  1647. *    In our SysUIAppSwitch patch, release any leftover command parameter
  1648.     blocks (if any). [Catherine White]
  1649.  
  1650. *    Fixed problem with the Escape key used to wake up a sleeping device
  1651.     also showing up in the event queue. [Daniel McCarty]
  1652.  
  1653. *    (Mac) Added support for Escape, F1-F4, page up/down.
  1654.  
  1655. *    Added special checks and error messages for SANE Math calling
  1656.     sequences. [Steve Lemke]
  1657.  
  1658. *    Rolled in Adam's fixes to conditional breakpoints. [Adam Dingle]
  1659.  
  1660. *    Fixed problems with NetLibSocketAddr. [Adam Dingle]
  1661.  
  1662. *    Converted to VC++ 6.0.
  1663.  
  1664. *    Fixed problem with getting names of library routines in the
  1665.     profiling system. [Adam Dingle]
  1666.  
  1667. *    Made Profile/Initialize implicit. [Adam Dingle]
  1668.  
  1669. *    Added explicit parent node information to profiling output text
  1670.     file. [Adam Dingle]
  1671.  
  1672. *    Fixed problem with recursive routines recursing too deep in the
  1673.     profile output functions.
  1674.  
  1675. *    The workaround for the old FindSaveFindStr bug didn't always work;
  1676.     it would sometimes still let the bug emerge. Made a small tweak to
  1677.     keep it suppressed.
  1678.  
  1679. *    Turned off stack overflow checking facility. It would occasionally
  1680.     cause the emulator to walk the dynamic heap when the heap was in an
  1681.     inconsistant state, resulting in spurious "...regular checkup..."
  1682.     error messages. [The IBM guys: Paul Silagi, Chunk Bazil, Mike Nagy]
  1683.  
  1684. *    Added support for the contrast button on Palm Vs. The button is on
  1685.     the right-hand side of the display graphic, opposite from the power
  1686.     button. You can't see it, but clicking on it brings up the contrast
  1687.     dialog. The dialog itself has no visual effect yet. [Ron Flax]
  1688.  
  1689. *    Breakpoints are now preserved across reboots. [Steve Lemke]
  1690.  
  1691. *    Totally rewrote the way (a) tailpatches and (b) soft breakpoints
  1692.     are handled. Previously, Poser would get control by handling
  1693.     special opcodes written into emulated memory: TRAP $D for
  1694.     tailpatches and TRAP $0 for soft breakpoints. However, there were
  1695.     problems with this approach. For one thing, what would happen if we
  1696.     needed to write a TRAP $D and TRAP $0 to the same memory location.
  1697.     You couldn't do it. There was no way, for example, to use
  1698.     PalmDebugger to set a breakpoint just after a call to a system
  1699.     function that Poser tailpatched. Also, Adam Dingle pointed out a
  1700.     problem with the actual routines involved: on very rare occasions,
  1701.     if an interrupt occured just after one of those TRAP $Ds or TRAP $0s
  1702.     were executed, then the next opcode executed would be the one that
  1703.     originally resided at that location, an NOT the first opcode in the
  1704.     interrupt routine. Anyway, this whole mess has been replaced with a
  1705.     new mechanism that doesn't alter the emulated RAM or ROM. [Steve
  1706.     Lemke, Adam Dingle and the IBM guys: Paul Silagi, Chunk Bazil, Mike
  1707.     Nagy]
  1708.  
  1709. *    Sped up performance by 20%. But since the previous change slowed
  1710.     things down by 13%, that's not as great as it first sounds.
  1711.  
  1712. *    Poser now ignores soft breakpoints (those installed by
  1713.     PalmDebugger) it encounters when it calls into the ROM for it own,
  1714.     nefarious, "between the cycles" purposes. [Steve Lemke]
  1715.  
  1716. *    Fixed problems trying to re-establish a sockets connection after
  1717.     it's been broken when the external debugger quit. [Ron Marianetti]
  1718.  
  1719. *    When asked for a ROM, .psf, .prc, etc., file, set the initial
  1720.     directory to the last directory used for that file type.
  1721.  
  1722. *    (Windows) Allow multiple .prc file selection in the Open File dialog.
  1723.  
  1724. *    ROMs with invalid header checksums now generate a non-fatal warning
  1725.     instead of a fatal error. [Paul Dugas]
  1726.  
  1727. *    Allow for zero-length objects appearing at the end of .pdb files.
  1728.     [Christopher Hunt]
  1729.  
  1730. *    Massive spring cleaning of sources. Now all major sub-systems have
  1731.     a consistant interface for creating new sessions, resetting
  1732.     sessions, saving sessions, loading sessions, and disposing of
  1733.     sessions. Also, a lot of naming and scoping inconsistancies were
  1734.     taken care of. Also, namespaces were forsaken in favor of classes
  1735.     with static member functions; the CodeWarrior and VC++ browsers
  1736.     didn't handle namespaces too well.
  1737.  
  1738. *    In line with the above, .psf files are now compressed, taking as
  1739.     little as 15K for one that was normally 1 Meg. Note: the time it
  1740.     takes to compress an image can vary wildly, sometimes being nearly
  1741.     instantaneous, and sometimes taking upwards of 15 seconds. I'm not
  1742.     sure why the difference occurs...
  1743.  
  1744. *    Also in line with the source code spring cleaning, the entire
  1745.     emulator state is now saved to the session files. When loaded from
  1746.     the session files, the entire emulator state is restored. This means
  1747.     that you are returned right back to where you were when you created
  1748.     the session file; you do not have to go through the process of
  1749.     rebooting the "device".
  1750.  
  1751. *    Only heed the "Continue Past Warnings" option if a Gremlin is
  1752.     actually running. [Scott Johnson]
  1753.  
  1754. *    Added support for the "dead battery" pin on Port D on EZ devices.
  1755.     This should cut down the number of low-battery warnings on those
  1756.     devices. [Jesse Donaldson]
  1757.  
  1758. *    Don't insert keyboard or mouse events if stopped in the debugger or
  1759.     if the main emulator window is not active.
  1760.  
  1761. *    Added support for 4-bit LCD mode on EZ's. Found and fixed a long-
  1762.     standing bug where the emulated copy of the LCD display might not
  1763.     get updated if the lcdPageWidth register was updated.
  1764.  
  1765. *    If the emulated serial port was open and a reset occured, close the
  1766.     host serial port.
  1767.  
  1768. *    On the Mac, session files contain references to their associated
  1769.     ROM files via aliases. On Windows, the references are stored as
  1770.     full pathnames. This is old news. What's new is that if either of
  1771.     these mechanisms fails to find the ROM file, Poser now looks first
  1772.     in the same directory as the session file for a ROM file with the
  1773.     same name, and if that fails looks in Poser's own directory for a
  1774.     ROM file with the same name.
  1775.  
  1776. *    When reporting a corrupted heap, display also the address of the
  1777.     chunk header. [Adam Dingle]
  1778.  
  1779. *    Implemented Part I of Gremlin Hordes: You can now periodically have
  1780.     the complete emulator state saved while a Gremlin is running. This
  1781.     state can be reloaded, and the Gremlin restarted.
  1782.  
  1783.     This feature is controlled via a new setting in the New Gremlin
  1784.     dialog. There is now an editable item called Snapshot Frequency.
  1785.     The number entered here is the number of events that should occur
  1786.     between the time snapshots are taken. The default value is 10,000
  1787.     events. By setting this value to zero, you turn off the snapshot
  1788.     feature.
  1789.  
  1790.     Snapshots are saved in a single directory in the Poser directory.
  1791.     The name of the directory is "GremlinStates_####", where #### is a
  1792.     value ensuring the directory name's uniqueness.
  1793.  
  1794.     Snapshots are saved in this directory with the name Event##########,
  1795.     where ########## is the event number at which the snapshot was
  1796.     taken. Snapshots are merely session files, so they can be reloaded
  1797.     at any time, just like regular session files.
  1798.  
  1799.     Since snapshots are taken while a Gremlin is running, the Gremlin is
  1800.     automatically turned off when the snapshot is reloaded. However,
  1801.     Poser displays the Gremlin Control window when the snapshot is
  1802.     loaded, allowing you to resume the Gremlin if you want. [Roger
  1803.     Flores]
  1804.  
  1805. *    Fixed a bug in the Gremlins facility that validates forms and form
  1806.     objects before trying to manipulate any of them. A call to
  1807.     FrmGetObjectType would occassionally return garbage, leading the
  1808.     rest of the function astray. [Scott Maxwell]
  1809.  
  1810. *    Added Unix release. [Ben Williamson, David Creemer]
  1811.  
  1812. *    Fixed serial port not working on EZ devices (a pin moved from port
  1813.     F to port D during hardware development, and I missed it). [Florent
  1814.     Pillet]
  1815.  
  1816. *    Don't validate form objects and their sizes on Palm OS 1.0 devices.
  1817.     The built-in applications don't appear to follow the rules. [Andrew
  1818.     Ball]
  1819.  
  1820. *    Rolled in Adam's conditional breakpoint enhancements. [Adam Dingle]
  1821.  
  1822.     "A register reference in a conditional breakpoint expression can
  1823.      use either a direct (i.e. "d5") or indirect (e.g. "12(a6)")
  1824.      addressing mode. Furthermore, a register expression can be
  1825.      suffixed with either ".b", ".w" or ".l" to indicate that the
  1826.      expression to be compared is either a byte, a word or a long. An
  1827.      an example, "12(a6).w == 1000" compares the two bytes at memory
  1828.      location (a6 + 12) to the value 1000. "d4.b == 100" compares the
  1829.      low byte of the d4 register to the value 100.
  1830.  
  1831.     "I have found this enhancement to be extremely useful for breaking
  1832.      into the debugger when a local variable (typically referenced off
  1833.      the a6 register in code built by CodeWarrior) has a certain value."
  1834.  
  1835. *    (Windows) Fixed problem with running on dual-processor boxes. [TBD]
  1836.  
  1837. *    There is now a "white paper" on Poser usage at the following URL:
  1838.  
  1839.         <http://www.palm.com/devzone/docs/pose.htm>
  1840.  
  1841.  
  1842. Changes for 2.1d26 (2/26/99)
  1843. ----------------------------
  1844. *    On the Mac, we were saving the device type to the .psf file twice.
  1845.     On Windows, we weren't saving the country type at all. [Waddah
  1846.     Kudaimi]
  1847.  
  1848. *    System call logging now also gets the names of library functions,
  1849.     and attempts to make a better stab at "dispatch" system functions
  1850.     (where a single dispatch code sub-dispatches to a suite of other
  1851.     functions, as with the Floating Point Manager). [Ken Krugler]
  1852.  
  1853. *    Sped up debugger communications via sockets by 20x. [Ron Marianetti,
  1854.     Mark Corry]
  1855.  
  1856. *    (Windows) Added conditional breakpoints. This is bolted on for now,
  1857.     but should eventually be merged more seamlessly. Changes provided
  1858.     by Adam Dingle of AvantGo. From Adam's release notes:
  1859.  
  1860.     New debugging features
  1861.  
  1862.     I've posted several messages recently to the palm-dev-forum mailing
  1863.     list in which I've pointed out several limitations of the debugger
  1864.     in CodeWarrior for PalmOS: it doesn't support data breakpoints
  1865.     ("watchpoints") and its conditional breakpoint implementation is
  1866.     very slow. To work around these limitations, I've added both data
  1867.     breakpoints and fast conditional breakpoints to the 2.0b3 emulator.
  1868.  
  1869.     A data breakpoint allows you to monitor a range of memory addresses
  1870.     for writes. When any code tries to write to the addresses you've
  1871.     monitored, execution will immediately break into the debugger. This
  1872.     can be extremely useful when you know that a certain data structure
  1873.     is being corrupted somewhere in your program, but you don't know
  1874.     where it is happening.
  1875.  
  1876.     To set a data breakpoint in the modified emulator, first launch the
  1877.     emulator, then start the debugger in CodeWarrior. In the emulator,
  1878.     choose the "Breakpoints" menu item. A dialog window will pop up;
  1879.     select the "Enabled" check box, then enter a start address and a
  1880.     number of bytes to monitor. The address and number of bytes may be
  1881.     either hex ("0x89abc") or decimal ("12345"). As an example, if the
  1882.     start address is 0x10000 and the number of bytes is 8, then any
  1883.     write to addresses 0x10000 through 0x10007 will break into the
  1884.     CodeWarrior debugger.
  1885.  
  1886.     Conditional breakpoints allow you to break when execution reaches a
  1887.     given address, but only when a certain condition is true.
  1888.     CodeWarrior for PalmOS supports conditional breakpoints, but its
  1889.     implementation is so slow as to be practically useless. As I
  1890.     pointed out in an earlier post to the palm-dev-forum list, in the
  1891.     CodeWarrior debugger, each iteration past a conditional breakpoint
  1892.     takes about 0.3 second, so you have to wait for an eternity if you
  1893.     have to iterate hundreds or thousands of times until the break
  1894.     condition is true (as is often the case in debugging).
  1895.  
  1896.     The modified emulator allows you to set conditional breakpoints with
  1897.     virtually zero overhead. To set conditional breakpoints, first
  1898.     launch the emulator, then start the CodeWarrior debugger. When you
  1899.     are stopped in the debugger, choose the "Breakpoints" menu item in
  1900.     the emulator. A dialog window will pop up which will allow you to
  1901.     set up to 6 conditional breakpoints. To set a breakpoint, choose a
  1902.     breakpoint slot and press the "Edit" button. A window will pop up
  1903.     where you can enter an address and a condition. The address can be
  1904.     either hex ("0x2468ace2") or decimal. Typically, you will determine
  1905.     the address where you want to break by selecting the "mixed" view in
  1906.     CodeWarrior to see a mix of source and assembly code. The condition
  1907.     you specify must be of the form "<register> <condition> <constant>",
  1908.     where
  1909.  
  1910.         <register> is one of the 68000 registers D0...D7 or A0...A7
  1911.         <condition> is ==, !=, <, >, <=, or >=. (Important: for now,
  1912.             all comparisons are UNSIGNED. This means that you can't use
  1913.             a condition such as "D0 < 0", which will always be false).
  1914.         <constant> is a hex or decimal constant
  1915.  
  1916.     By choosing the "mixed" view in CodeWarrior, you can see which 68000
  1917.     registers represent which local variables in your program, and so
  1918.     you can construct an appropriate break condition involving a
  1919.     register.
  1920.  
  1921. *    Exposed Palm IIIx and Palm V support.
  1922.  
  1923. *    Fixed problem with ROM Transfer on EZ devices. [Yoshiyuki Kubo]
  1924.  
  1925. *    Relaxed form-object-validation rules to allow for zero-sized
  1926.     gadgets and tables. [Roger Flores]
  1927.  
  1928. *    Fixed bug in AutoRunAndQuit mechanism where Poser would quit when
  1929.     a sub-launched application would quit, not when the application-of-
  1930.     interest would quit. [Steve Haneman]
  1931.  
  1932. *    NetLibDmReceive should really work this time. [Doug Morrison]
  1933.  
  1934.  
  1935. Changes for 2.1d25 (2/16/99)
  1936. ----------------------------
  1937. *    Different method for checking whether or not a library function is
  1938.     implemented. Poser still only checks known (i.e., Palm Computing)
  1939.     libraries, but now instead of using a hardcoded table, it takes
  1940.     advantage of the fact that the "open library" function appears right
  1941.     after the dispatch table. [Tim Wiegman, Adam Hampson]
  1942.  
  1943. *    (Mac) Added WDEF project to Poser project. Changed the way the
  1944.     outline region is calculated (should be more accurate now).
  1945.  
  1946. *    Added support for internal faster trap dispatching mechanism. The
  1947.     major effect of this is that Poser can now support non-debug Palm
  1948.     VII ROMs again. [Bob Ebert]
  1949.  
  1950. *    Added support for Autorun and AutorunAndQuit directories. These
  1951.     directories are like the Autoload directory. Applications in
  1952.     Autorun are loaded, and then one is chosen to be executed (by
  1953.     convention chosen to be the last file in the directory).
  1954.     Applications in AutorunAndQuit are loaded, and then one is chosen to
  1955.     be executed in the same way. When that application quits, Poser
  1956.     quits. If there are files in both Autorun and AutorunAndQuit, the
  1957.     last file in AutorunAndQuit is chosen for execution. The files in
  1958.     those directories can also contain launchable documents such as
  1959.     .PQAs. [Steve Haneman]
  1960.  
  1961. *    (Windows) Centered the LCD. [Scott Johnson]
  1962.  
  1963. *    Better logging facilities. Here's what we've got so far:
  1964.  
  1965.     - Error Messages: undefined and unimplemented.
  1966.  
  1967.     - Warning Messages: If a dialog comes up that can be dismissed by
  1968.         clicking on the Continue button, this option causes the message
  1969.         to be logged. - Misc Gremlin Info: undefined.
  1970.  
  1971.     - Assembly Opcodes: unimplemented. Will eventually log assembly-
  1972.         level trace information (registers, PC, opcodes, etc.)
  1973.  
  1974.     - Posted events: events entered into the system by calls to
  1975.         EvtAddEventToQueue, EvtAddUniqueEventToQueue,
  1976.         EvtEnqueuePenPoint, and EvtEnqueueKey.
  1977.  
  1978.     - Received events: events returned by EvtGetEvent, EvtGetPen, and
  1979.         EvtGetSysEvent,
  1980.  
  1981.     - System calls: calls to Palm OS functions.
  1982.  
  1983.     - Application calls: unimplemented. Calls to functions in your own
  1984.         application. In order for this to work, the name of the function
  1985.         needs to be stored in memory following the function itself.
  1986.         CodeWarrior supports this convention, gcc currently does not.
  1987.  
  1988.     - Serial Activity: serial port being opened and closed, changes in
  1989.         serial port settings.
  1990.  
  1991.     - Serial Data: data being transmitted and sent.
  1992.  
  1993.     - NetLib Activity: calls to NetLib functions, parameter values and
  1994.         return values.
  1995.  
  1996.     - NetLib Data: data being transmitted and sent.
  1997.  
  1998.     - ExgMgr Activity: unimplemented. You get the idea...
  1999.  
  2000.     - ExgMgr Data: You get the idea...
  2001.  
  2002.     - High-level Debugger Activity: messages received from an
  2003.         external debugger and the replies sent back.
  2004.  
  2005.     - High-level Debugger data: details of the messages sent back and
  2006.         forth. Not all packets currently display all their data when
  2007.         this mode is turned on.
  2008.  
  2009.     - Low-Level Debugger Activity: trace of the low-level mechanisms
  2010.         that receive raw data from external debuggers and the raw data
  2011.         being sent back.
  2012.  
  2013.     - Low-Level Debugger Data: dumps of the raw data being sent back and
  2014.         forth.
  2015.  
  2016.     These options are presented in a dialog box with two tabs: Normal
  2017.     and Gremlins. The first tab contains options which are active
  2018.     during normal emulator use. The second tab contains options which
  2019.     are active when using Gremlins.
  2020.  
  2021.     Along with this new dialog, the Debug Options and New Gremlins
  2022.     dialogs have also been changed. The logging checkboxes have been
  2023.     removed from Debug Options (along with some currently unused
  2024.     checkboxes). The logging checkboxes in the New Gremlins dialog have
  2025.     been replaced with a "Logging Options..." button that brings up the
  2026.     Logging Options dialog. A new checkbox ("Continue Past Warnings")
  2027.     has been added to the New Gremlins dialog that controls what happens
  2028.     when a non-fatal error dialog is displayed; if possible, these error
  2029.     dialogs will automatically be dismissed if this option is checked.
  2030.  
  2031.     For performance reasons, all logged information is stored in an
  2032.     internal memory buffer. Additionally, only the most recent
  2033.     information is kept. After a certain threshhold, old information is
  2034.     discarded. The amount of information kept is initially 1Meg, but
  2035.     that can be changed by calling HostSetLogFileSize.
  2036.  
  2037.     The in-memory buffer is flushed on the following occassions:
  2038.  
  2039.         - The application quits.
  2040.         - An error is displayed.
  2041.         - A new Gremlin is started.
  2042.         - An exception occurs.
  2043.  
  2044.     Logged data is written to a file named "Log####.txt", where #### is
  2045.     a number ensuring the file name's uniqueness.
  2046.  
  2047.     Contents of the log file are of the form:
  2048.  
  2049.         <Time>    <Gremlin Event>        <Text>
  2050.  
  2051.     <Time> is the zero-based time in seconds, where the base is the time
  2052.     of the first event logged.
  2053.  
  2054.     <Gremlin Event> is the event sequence number if Gremlins is running.
  2055.     This field is omitted if Gremlins is not running.
  2056.  
  2057.     <Text> is the log text. Output is generally one line long, with the
  2058.     major exception being hex dump information.
  2059.  
  2060. *    Allow more concurrent tailpatches. Previously, there was a fixed
  2061.     number of traps that could be tailpatched at once. Exceeding this
  2062.     limit would cause Poser to abort().
  2063.  
  2064. *    Allow one particular SecurityLib function to access low-memory.
  2065.     [Gavin Peacock]
  2066.  
  2067. *    Implemented HostSetLogFileSize. Increased default log size from
  2068.     128K to 1Meg. [Dan Rowley]
  2069.  
  2070. *    Support netSocketOptSockNonBlocking in NetLib redirection. Also
  2071.     support the UDP calls (NetLib[Send|Receive](PB) with non-NULL
  2072.     address specifications). With these changes, Windows users can now
  2073.     Network HotSync. [Tilo Christ]
  2074.  
  2075.     Here's now (this is for Palm III):
  2076.  
  2077.     - Get the Network HotSync files from:
  2078.  
  2079.         <http://www.palm.com/custsupp/downloads/netsync.html>
  2080.  
  2081.     - Run "nhssetup.exe" to extract "setupex.exe".
  2082.  
  2083.     - Run "setupex.exe" to install Network HotSync.
  2084.  
  2085.     - Fire up Poser.
  2086.  
  2087.     - Install "netsync.prc". There will be one in your ...\Palm
  2088.         Desktop\ <UserName>\Install\ directory or your ...\Palm
  2089.         Desktop\add-on\ directory.
  2090.  
  2091.     - Go to the HotSync application.
  2092.  
  2093.     - Select the "LANSync Prefs..." menu item.
  2094.  
  2095.     - Select the "LANSync" option. Click on "OK".
  2096.  
  2097.     - Select the "Primary PC Setup..." menu item.
  2098.  
  2099.     - Enter your Primay PC's IP address. You can get this from the
  2100.         HotSync Manager (click on the HotSync icon in the TaskBar,
  2101.         select the "Setup..." menu item, click on the "Network" tab, and
  2102.         click on the "TCP/IP Settings..." button). Click on "OK".
  2103.  
  2104.     - Click on the "Select Service" button under the "Modem Sync" icon.
  2105.  
  2106.     - Create a new service or modify an existing one. Either way, the
  2107.         result should be a service with the phone number set to "00".
  2108.         Exit that screen.
  2109.  
  2110.     - Click on the "Modem Sync" icon and sync as usual.
  2111.  
  2112. *    (Mac) Additional note on NetLib redirection: currently, support
  2113.     is implemented with the help of the GUSI library. This library is
  2114.     built on top of MacTCP, which doesn't support the settting or
  2115.     getting of socket options. Any call to NetLibSocketOptionGet or Set
  2116.     will result in an error on the Mac. Eventually, emulation will be
  2117.     performed with direct Open Transport calls, and this limitation will
  2118.     go away.
  2119.  
  2120.     In the meantime, this limitation affects the ability to Network
  2121.     HotSync from Poser runningon the Mac to HotSync running on a PC.
  2122.  
  2123. *    Fixed a long-standing 2.1dx bug where the screen would not always
  2124.     reflect the state of the LCD buffer. One way this could happen is
  2125.     if the screen were modified in a strictly high-memory to low-memory
  2126.     order (as happens when a document is scrolled down).
  2127.  
  2128. *    (Windows) Fixed byteswapping problem in the addresses returned by
  2129.     NetLibGetHostByName. [Pedro Alves]
  2130.  
  2131. *    The text file dumped by the profiler always used to be named
  2132.     "Profile Results.txt" and would be written to the current default
  2133.     directory. Now the file name is based on the file name used for the
  2134.     binary output and is stored in the same directory as it. This is
  2135.     mostly useful if the output file name is specified by
  2136.     HostProfileDump (). [Steve Haneman]
  2137.  
  2138. *    While running Gremlins, validate the sizes of various form objects.
  2139.     [Chris Antos] The rules are:
  2140.  
  2141.     *    frmBitmapObj, frmLineObj, frmFrameObj, frmRectangleObj,
  2142.         frmLabelObj, frmTitleObj, frmPopupObj: Don't care. We don't
  2143.         touch them or look at them.
  2144.     *    frmControlObj: if the style is popupTriggerCtl, allow a
  2145.         zero-width object.
  2146.     *    frmListObj: if the number of items is zero, allow a zero-height
  2147.         object.
  2148.     *    In all other cases, disallow zero-height or zero-width objects,
  2149.         as well as objects completely offscreen.
  2150.  
  2151. *    (Windows) Added mnemonic keys to the menus and dialogs. [Scott
  2152.     Johnson]
  2153.  
  2154. *    Adjusted the internal rectangle indicating the bounds of the hard
  2155.     buttons on the case graphics, now that the case graphics have
  2156.     changed. [Horace Ho]
  2157.  
  2158. *    Enable storage heap write access in our NetLib-redirected version
  2159.     of NetLibDmReceive. [Neil Rhodes]
  2160.  
  2161. *    Turned back on the checks to see if someone accesses the area from
  2162.     0x00018000 to 0x00020000. [Adam Dingle]
  2163.  
  2164. *    Added Japanese color silkscreens (no B&W yet).
  2165.  
  2166.  
  2167. Changes for 2.1d24 (1/25/99)
  2168. ----------------------------
  2169. *    Yow...time to start updating those copyright statements...
  2170.  
  2171. *    Fixed performance problems with logging (this really affected
  2172.     Gremlins performance). [Andrew Ball]
  2173.  
  2174. *    Made small change to heap tracking routines; this change really
  2175.     speeds up overall performance. A lot of performance tuning still
  2176.     needs to be done here. [Scott Johnson]
  2177.  
  2178. *    NetLib redirection. [Phil Shoemaker, Ron Marianetti]
  2179.  
  2180.     Here's the current list of what doesn't yet work:
  2181.  
  2182.         Raw sockets (not on the Mac at all, works on Windows only if
  2183.             your version of WinSock supports it).
  2184.  
  2185.         PalmOS-specified options:
  2186.             netSocketOptSockNonBlocking
  2187.             netSocketOptSockRequireErrClear
  2188.             netSocketOptSockMultiPktAddr
  2189.  
  2190.         BSD sockets options that are not supported by "NetLib redirection"
  2191.         because the underlying WinSock library doesn't support them:
  2192.             netSocketOptTCPMaxSeg
  2193.             netSocketOptIPOptions
  2194.             netSocketOptSockSndLowWater
  2195.             netSocketOptSockRcvLowWater
  2196.             netSocketOptSockSndTimeout
  2197.             netSocketOptSockRcvTimeout
  2198.  
  2199.         Timeouts
  2200.  
  2201.         NetLibGetMailExchangeByName
  2202.  
  2203.         UDP stuff
  2204.  
  2205.         Turning NetLib redirection on and off on the fly. It might be
  2206.         safer to change the setting, then quit and restart Poser (or at
  2207.         least reset the ROM).
  2208.  
  2209.         MacTCP doesn't appear to timeout if it can't make a connection
  2210.         to a socket on a remote machine that isn't listening on that
  2211.         socket. There may be other cases where MacTCP doesn't timeout
  2212.         or return some other error. In those cases, the PalmOS application
  2213.         will hang. You should be able to press Cmd-. to get out of those
  2214.         situations, causing the patched NetLib to return a user-cancelled
  2215.         error number.
  2216.  
  2217.     Comments on how NetLib redirection works:  Poser has the ability
  2218.     to intercept process execution at the points where an OS function
  2219.     is called and where the OS function returns. Poser can then
  2220.     execute additional code at these points, and can even skip
  2221.     calling the ROM version at all if it wants. That's what happens
  2222.     with NetLib redirection. The following calls are intercepted
  2223.     and replaced with versions that make the corresponding host-
  2224.     specific Ethernet calls:
  2225.  
  2226.         NetLibClose                        NetLibConnectionRefresh
  2227.         NetLibDmReceive                    NetLibFinishCloseWait
  2228.         NetLibGetHostByAddr                NetLibGetHostByName
  2229.         NetLibGetMailExchangeByName        NetLibGetServByName
  2230.         NetLibHandlePowerOff            NetLibOpen
  2231.         NetLibOpenConfig                NetLibOpenCount
  2232.         NetLibOpenIfCloseWait            NetLibReceive
  2233.         NetLibReceivePB                    NetLibSelect
  2234.         NetLibSend                        NetLibSendPB
  2235.         NetLibSleep                        NetLibSocketAccept
  2236.         NetLibSocketAddr                NetLibSocketBind
  2237.         NetLibSocketClose                NetLibSocketConnect
  2238.         NetLibSocketListen                NetLibSocketOpen
  2239.         NetLibSocketOptionGet            NetLibSocketOptionSet
  2240.         NetLibSocketShutdown            NetLibWake
  2241.  
  2242.     Because NetLibOpen (and its cousins) is entirely patched out, the
  2243.     Palm OS version of NetLib never actually gets opened. This means
  2244.     that the remaining, unpatched NetLib calls are made in the context
  2245.     of a closed NetLib. I don't know if this differenc will affect
  2246.     anyone, but it might be good for you to know.
  2247.  
  2248.     Comments on Palm VII supprt:  Palm VII files are not yet externally
  2249.     available. But Poser is preparing for that day, so when they *are*
  2250.     available:
  2251.  
  2252.         Download the prerelease Palm VII rom and the required Debug
  2253.         wireless panel which will configure the emulated OS so that
  2254.         it knows you're not on a wireless device.
  2255.  
  2256.         To configure: open the ROM with the Palm OS Emulator, wait
  2257.         until it has completed the boot process, and install the debug
  2258.         wireless panel by dragging the prc onto the running emulator
  2259.         window. Now open the Prefs application and go to the "Wireless"
  2260.         panel.    You'll see a box there entitled "wireline ip".    Tap on
  2261.         it, clear the existing selection, and enter "207.240.80.136".
  2262.         Finally, open the preferences for the Palm OS Emulator itself
  2263.         (right-mouse click under Windows), and turn on the "Redirect
  2264.         Netlib calls to host TCP/IP" option.
  2265.  
  2266.         Now when you use a PQA, it will connect to the web site with
  2267.         your PC's internet connectivity instead of a wireless radio.
  2268.         (Warning: it is much faster that way!  Pages will load much
  2269.         more slowly when transmitted over the air.)     Also, there may
  2270.         be warnings where the Emulator notices possible bugs in the ROM.
  2271.         Usually these are benign (but indicate the prerelease status of
  2272.         the ROM) - pressing "continue" will usually get you by them.
  2273.  
  2274.         You can install PQAs by dragging them onto the Emulator window,
  2275.         or using the Emulator's menu commands.    Just make sure you're
  2276.         neither in the Launcher when installing an application, nor
  2277.         running the app you're upgrading. (Installing software while
  2278.         the device is booting is also a bad idea.)    The Calculator is
  2279.         a convenient, safe app to be in when installing software.
  2280.  
  2281.         Note that if your PC is behind a firewall, you might not be able
  2282.         to connect to our proxy server. Ask your system administrator to
  2283.         enable port 5002 for you.
  2284.  
  2285.         If you get an error message along the lines of "no interfaces
  2286.         found: net - 12", that's an indication that you didn't select
  2287.         "Redirect NetLib" in the preferences panel. Getting the error
  2288.         message "wrong socket type" is an indication that you didn't
  2289.         install the DgbWirelessPnl application.
  2290.  
  2291.  
  2292. *    More fixing of semaphore warnings: duh, changing the text of the
  2293.     warning message doesn't change the test itself! [many...]
  2294.  
  2295. *    Made .prc/.pdb file loading more robust: the contents are now
  2296.     validated before accessing them. This helps against problems
  2297.     like 0x0A's turning into 0x0D's because of network downloading.
  2298.  
  2299. *    (Windows) Fixed byteswapping problem that would occur when gdb
  2300.     tried to set a breakpoint [Ben Thomas].
  2301.  
  2302. *    (Mac) Fixed problem with getting 'Could not save the file ""
  2303.     because the file wasn't found' when trying to save a session.
  2304.     [???]
  2305.  
  2306. *    Palm OS 1.0 support: Gremlins and pen events weren't being
  2307.     inserted into the system because EvtGetSysEvent blocked on
  2308.     SysSemaphoreWait instead of SysEvGroupWait in that version
  2309.     of the OS (we were only patching the later to detect when
  2310.     to insert events into the system).    Now I patch both functions.
  2311.     [Andrew Ball, Ken Hancock]
  2312.  
  2313. *    Set HotSync user name at boot-up. Name specified in preferences.
  2314.     [Richard Ziegelmaier, et al]
  2315.  
  2316. *    Check for and report for out-of-range access to library functions.
  2317.  
  2318. *    The workaround for SysAppExit in d22 was hiding the workaround for
  2319.     FindSaveFindStr from d20. Adjusted the tests so that one no
  2320.     longer hides the other. [Matt Disher]
  2321.  
  2322. *    Exposed Palm VII and Web Clipping support in external release.
  2323.  
  2324. *    (Windows) Fixed a problem in the mechanism for exchanging debugger
  2325.     information with the Metrowerks debugger. This problem could
  2326.     potentially cause debugger packets to be ignored. However, there's
  2327.     no evidence that this is the cause of the "Failed to connect to
  2328.     remote" problem that some people are still reporting with R5.
  2329.     [Ben Sessoms]
  2330.  
  2331. *    When handling SysPktRtnNameCmdType packets, force the given address
  2332.     to be even. Otherwise, we'll generate an internal error as we try
  2333.     to walk the function starting at an odd address. [Ben Sessoms]
  2334.  
  2335. *    Fixed long-standing bug that would crash the New Gremlin dialog if
  2336.     the last item in the list had a ROM-based version and a RAM-based
  2337.     version.
  2338.  
  2339. *    Sort the items in the New Gremlin dialog case-insensitively.
  2340.  
  2341. *    Added support for launching applications with documents. [Gavin
  2342.     Peacock]
  2343.  
  2344. *    Updated bitmaps. [Ken Krugler, Stephen Best]
  2345.  
  2346. *    Fixed problem with getting a "yadda accessed memory manager data
  2347.     structure" while dumping the results of profiling. [Adam Dingle]
  2348.  
  2349. *    Removed most (hopefully all) influences of Poser's memory
  2350.     accessing and ROM function calling from the profiling output.
  2351.  
  2352. *    Fixed the profiler to handle TRAP $F / <dispatch number> sequences
  2353.     where <dispatch number> is not in the range 0xA000-0xAFFF (some
  2354.     development systems leave off the leading "A"). [Adam Dingle]
  2355.  
  2356. *    Bumped the default number of profiled functions from 20000 to 48K.
  2357.     [Steve Haneman]
  2358.  
  2359.  
  2360. Changes for 2.1d23 (12/16/98)
  2361. -----------------------------
  2362. *    (Windows) fixed some byteswapping problems with debugger packets.
  2363.     (Actually, put *back* some bugs that I fixed...)
  2364.  
  2365. *    Re-organized sources.
  2366.  
  2367. *    Added ability to patch libraries. Started patching out NetLib.
  2368.     Note that there is no actual NetLib redirection in this release.
  2369.  
  2370. *    Fixed some serial port emulation problems: mirrored UART settings
  2371.     into the host serial port just after the port has been opened, not
  2372.     after the first call to SerSetSettings (there may *not* be a call
  2373.     to SerSetSettings!).
  2374.  
  2375. *    Generating a profiling report now also produces a text file for
  2376.     use on platforms that can't read the Metrowerks Profile tool
  2377.     file format.
  2378.  
  2379. *    (Windows) Added profiling configuration.
  2380.  
  2381.  
  2382. Changes for 2.1d22 (12/7/98)
  2383. ----------------------------
  2384. *    Only warn about MemSemaphore usage on ROMs that themselves hold the
  2385.     memory semaphore correctly. This time for sure!  Also only warn
  2386.     when the semaphore has been held for 1 minute (previously, the
  2387.     timeout was 10 milliseconds).
  2388.  
  2389. *    Completely overhauled serial port emulation. More of the UART is
  2390.     emulated more faithfully.
  2391.  
  2392. *    If no serial port is selected for emulation pass through and we're
  2393.     not in loopback mode, drop transmitted bytes on the floor.
  2394.  
  2395. *    If IrDA is using the serial port, drop transmitted bytes on the
  2396.     floor (for now).
  2397.  
  2398. *    Re: SysAppExit accessing a deleted stack: SysTaskDelete and a whole
  2399.     host of other functions also access the deleted stack until the
  2400.     kernel has a chance to switch to another stack. Much gnashing of
  2401.     teeth was performed until an appropriate alternate heuristic could
  2402.     be found.
  2403.  
  2404. *    Let PrvCompressedInnerBitBlt access bits outside the allocated
  2405.     buffer.
  2406.  
  2407. *    (Windows) Fixed problems with Cancelling a ROM download.
  2408.  
  2409. *    Another attempt at fixing -192 errors at startup.
  2410.  
  2411. *    (Mac) Fixed problem with opening two windows when starting a session
  2412.     by double-clicking on a ROM file.
  2413.  
  2414. *    (Mac) Goosed debugger messaging. Previously, an asynchronous
  2415.     callback function would get called when Poser received a packet from
  2416.     the debugger. The callback function would set a boolean and then
  2417.     call a Toolbox function to wake up the application. The next time
  2418.     the application's main-event-loop was entered, the packet would be
  2419.     handled. However, the overhead of waking up the app and waiting for
  2420.     the main-event-loop to be entered was way too high. I now handle
  2421.     the debugger packet immediately in the asynchronous callback
  2422.     function. This means that the debugger packet is handled in the
  2423.     context of the calling application (the external debugger). If
  2424.     Poser were to crash at this point, it would crash the debugger, not
  2425.     Poser.    Additionally, we have to be very careful not to allocate any
  2426.     memory from within the callback, as such memory would be allocated
  2427.     from the debugger's heap, not Poser's.
  2428.  
  2429. *    Changed some of the rules for interacting with an external
  2430.     debugger.
  2431.  
  2432.     In order for an external debugger (PalmDebugger, MWDebug, or gdb) to
  2433.     talk with a hardware device, the hardware device has to be
  2434.     listening. There are two things a debugger can talk to: the Debugger
  2435.     socket and the Console socket.    These two sockets correspond to the
  2436.     two windows in the PalmDebugger.
  2437.  
  2438.     To get the ROM to listen on the Console socket, the developer has to
  2439.     execute shortcut-.2. To get the ROM to listen on the Debugger
  2440.     socket, the device has to cause an exception somehow. Doing
  2441.     something wrong (e.g., access invalid memory, divide by zero, etc.)
  2442.     does this. Executing a DbgBreak also does this, which is what
  2443.     happens when the user executes shortcut-.1. After the exception
  2444.     occurs, the ROM goes into a loop where it listens for and responds
  2445.     to debugger commands.
  2446.  
  2447.     Because external debuggers talk directly with Poser and not the ROM
  2448.     when debugging with Poser, there's no need to execute shortcuts or
  2449.     cause exceptions in order to start debugging. Poser is perfectly
  2450.     capable of handling debugger requests, letting the emulated process
  2451.     continue on its merry way.
  2452.  
  2453.     However, when dealing with commands sent to the debugger socket,
  2454.     it's very important that the state of the emulated CPU not change.
  2455.     Often several commands are issued, ultimately ending with some
  2456.     command that restarts the emulated CPU. During these exchanges, the
  2457.     debuggers assume that the state of the CPU has not changed since
  2458.     "debug mode" was entered. For this reason, when commands are sent
  2459.     to the Debugger socket:
  2460.  
  2461.         - Poser needs to be in "debug mode". That means that it has
  2462.           halted any emulation and is just idling.    If commands for
  2463.           the Debugger socket come in and Poser is not in debug mode,
  2464.           the commands are ignored.
  2465.         - The exception to this rule is the "get state" Debugger
  2466.           command.    This command is issued when the user types "att"
  2467.           in the Debug window.    It indicates that the user wants to
  2468.           enter debug mode for the purpose of setting breakpoints,
  2469.           examine memory, etc.    As a courtesey, Poser will enter
  2470.           debug mode when it sees this command.
  2471.  
  2472. *    Install a 'pose' feature so that applications can tell if they are
  2473.     running under Poser or not.
  2474.  
  2475. *    Install a 'gdbS' feature when connected via a socket to an external
  2476.     debugger. The existance of this feature causes programs written
  2477.     with prc tools to enter the debugger when they are launched.
  2478.  
  2479. *    (Windows) Removed a minimum version check that was preventing us
  2480.     from using sockets on Windows '95.
  2481.  
  2482.  
  2483. Changes for 2.1d21 (11/12/98)
  2484. -----------------------------
  2485. *    Allow for NULL access bug in FldDelete.
  2486.  
  2487. *    (Windows) Allow for launching of Emulator by double clicking on
  2488.     .psf or .rom files.
  2489.  
  2490. *    Added back a whole slew of strings accidentally deleted in d20.
  2491.  
  2492.  
  2493. Changes for 2.1d20 (11/10/98)
  2494. -----------------------------
  2495. *    Support full debugger protocol for latest PalmDebugger (with
  2496.     integrated Poser support).
  2497.  
  2498. *    Fixed button mapping problems with EZ hardware.
  2499.  
  2500. *    Added Greg's Ymodem code for downloading ROMs.    This includes his
  2501.     fix for high-baud rate downloads.
  2502.  
  2503. *    Support for higher baud rates.
  2504.  
  2505. *    Re-establish serial port after Preferences/Properties dialog.
  2506.  
  2507. *    Allow for access to deleted stack in SysAppExit.
  2508.  
  2509. *    Allow for bug in NetPrvTaskMain that accesses low-memory.
  2510.  
  2511. *    Allow for bug in NetPrvSettingSet that reads from a random memory
  2512.     location.
  2513.  
  2514. *    Tighten up on some inappropriate memory checks (only let some
  2515.     functions get away with murder in older ROMs).
  2516.  
  2517. *    Removed check for bug in PrvGetBatteryPercent (it's been fixed).
  2518.  
  2519. *    Changed formatting of time displayed in Gremlins window. Was in
  2520.     seconds, now in hh:mm:ss.
  2521.  
  2522. *    Revoked Memory Manager privileges for MemCmp, MemMove, and MemSet;
  2523.     they no longer have free run of RAM like other MemMgr functions.
  2524.  
  2525. *    Allow for bug in FindSaveFindStr which reads off the end of the
  2526.     handle passed to it.
  2527.  
  2528. *    Similar comments for FntDefineFont. When copying the contents of
  2529.     an old, smaller buffer into a new, larger buffer, it copies the
  2530.     size of the new buffer, causing MemMove to walk off the end of the
  2531.     old buffer.
  2532.  
  2533. *    Let ScrInit access unallocate memory for when it copies the splash
  2534.     screen from its temporary location to the real LCD buffer.
  2535.  
  2536. *    Re-enabled code that reports a bug in BackspaceChar, but only for
  2537.     newer ROMs.
  2538.  
  2539. *    Internal change: Better encapsulation of what Palm OS bugs are
  2540.     fixed in what version.
  2541.  
  2542. *    Only warn about MemSemaphore usage on ROMs that themselves hold
  2543.     the memory semaphore correctly.
  2544.  
  2545.  
  2546. Changes for 2.1d19 (10/30/98)
  2547. -----------------------------
  2548. *    (Windows) Fixed problem with trying to auto-reload the previously
  2549.     used .psf file on startup.
  2550.  
  2551. *    (Windows) Allow the user to click on the close box of the Startup
  2552.     dialog (the one saying New/Open/Download/Exit).
  2553.  
  2554. *    Fixed two problems with heap management on 2.0 ROMs. First, I was
  2555.     failing to recognize the fact that zero in the size field of a heap
  2556.     header means that the heap is 64K bytes long. Second, I was
  2557.     attempting to access *all* fields of the terminating sentry chunk.
  2558.     This chunk only has a size field; attempts to access subsequent
  2559.     fields may fail if the sentry is at the end of RAM.
  2560.  
  2561.  
  2562. Changes for 2.1d18 (10/29/98)
  2563. -----------------------------
  2564. *    Disabled Profiling menu items and Transfer ROM menu item until
  2565.     the functionality behind those items can be implemented.
  2566.  
  2567. *    Added "Dragonball EZ" menu item to device list.
  2568.  
  2569. *    (Windows) Fixed problem with stale reference to the LCD window after
  2570.     its been closed.
  2571.  
  2572. *    Fixed problem in MC68EZ328Bank::GetLCDDepth where it would return 4
  2573.     for grayscale mode instead of 2.
  2574.  
  2575. *    (Mac) Fixed problem getting -192 error on startup with a fresh
  2576.     set of preferences.
  2577.  
  2578.  
  2579. Changes for 2.1d17 (10/28/98)
  2580. -----------------------------
  2581. *    Fixed bug in Gremlins when logging information; an internal counter
  2582.     would wrap to be negative after a large number of events have been
  2583.     posted.
  2584.  
  2585. *    Re-laid out Debug Options dialog and hooked up the checkboxes.
  2586.     Disabled the ones that aren't supported yet.
  2587.  
  2588. *    (Windows) Fixed another "Unhandled exception caught in main" bug:
  2589.     this one would occur when the Poser would try to open a .psf file
  2590.     that no longer existed (the previous cause of this bug occured
  2591.     when Poser would try loading a .rom file that no longer existed).
  2592.  
  2593. *    (Windows) Remove old registry entries when found.
  2594.  
  2595. *    When an error occurs accessing a file, consistantly set the
  2596.     %filename parameter for error messages.
  2597.  
  2598. *    Added "Log error messages" checkbox to New Gremlin dialog.
  2599.  
  2600. *    Save Gremlins settings to preferences.
  2601.  
  2602. *    Fixed bug in meta-memory tracking stuff that would trash the
  2603.     emulator's heap if it was emulating a device with 256K of RAM
  2604.     or less.
  2605.  
  2606. *    Clear the serial FIFO queues on reset.    Fixes a problem with their
  2607.     overflowing and serial port emulation is not turned on (that is,
  2608.     "None" is selected in the Preferences/Properties dialog).
  2609.  
  2610. *    Fixed problems with trying to use "&string_object[0]" on empty
  2611.     strings. Apparently, there is not necessarily any memory
  2612.     allocated for empty string objects, so attempting to take the
  2613.     address of the string fails.
  2614.  
  2615.  
  2616. Changes for 2.1d16 (10/22/98)
  2617. -----------------------------
  2618. *    Allow the opening of locked .rom, .psf, .prc, .pdb, and .pqa files.
  2619.  
  2620. *    Updated TextMgr calls to reflect new (long) parameters.
  2621.  
  2622. *    Added Autoload facility.
  2623.  
  2624. *    Fixed problem with trying to wakeup the device (by calling
  2625.     EvtWakeup) when the interrupt level mask was too high.
  2626.  
  2627.     (Backed this modification out temporarily.    Seems that the ROM can
  2628.      spend a large percentage of its time at this interrupt level if
  2629.      it's not doing anything else useful, preventing the user from
  2630.      clicking on the LCD screen.)
  2631.  
  2632. *    Conditionalized the code so that Palm VII, Palm V, and Palm IIIx
  2633.     could be included or excluded separately.
  2634.  
  2635. *    Conditionalized *this* file so that secret stuff can be stripped for
  2636.     external releases.
  2637.  
  2638. *    Fixed the "Save Screen" functions (I'd commented them out while
  2639.     adding support for lcdPageWidth and lcdPanningOffset registers and
  2640.     forgot to go back and clean up).
  2641.  
  2642.  
  2643. Changes for 2.1d15 (10/15/98)
  2644. ----------------------------
  2645. *    Bug fix: my wrapper function for TxtGetCharBounds was accidentally
  2646.     calling TxtGetNextChar (copy & paste error).
  2647.  
  2648. *    Bug fix: the routine that maps a range of "host" memory into
  2649.     "emulated" memory would round the base address down to the nearest
  2650.     multiple of four, but the routine that would reverse the process
  2651.     didn't do the same rounding. This meant that the routine that
  2652.     unmapped would be unable to find the address recorded by the routine
  2653.     that did the mapping, and entries would never get unmapped.
  2654.  
  2655. *    Bug fix: if Poser reads in a preference setting for a Japanese
  2656.     silkscreen and that version of Poser doesn't support Japanese
  2657.     silkscreens, change the setting. Otherwise we'd get a -192
  2658.     (resource not found) error.
  2659.  
  2660. *    Relaxed MemSemaphoreReserve/Release testing. Now only track time
  2661.     when "write" parameter is true.
  2662.  
  2663. *    Bug fix: allow debuggers access to reserved parts of Dragonball
  2664.     memory.
  2665.  
  2666. *    (Mac) Show errors in a movable modal dialog, allowing the user
  2667.     to switch to the Finder, possibly for the purpose of launching a
  2668.     debugger.
  2669.  
  2670. *    Allow selection of multiple items in New Gremlins dialog. These
  2671.     items are also reselected when the dialog is re-opened.
  2672.  
  2673. *    Added HostGremlinNumber, HostGremlinCounter, HostGremlinLimit.
  2674.  
  2675.     "The reason I'm asking is that I'd like to log info to figure out
  2676.      what's going wrong with a specific gremlin test case, but since
  2677.      it's pretty far along (e.g. 100000 steps) I only want to start
  2678.      logging when I'm getting close to where I think the problem will
  2679.      occur. The problem occurs after a different number of steps
  2680.      depending on the gremlin seed value, thus I'd like to set my
  2681.      'start recording' value based on which gremlin is running."
  2682.  
  2683. *    Added HostLogFile.    This function returns a special HostFILE* that
  2684.     can be used by Palm OS applications that want to write to the same
  2685.     file that any Poser facility is writing to. This HostFILE* is
  2686.     special in that it is only open when Poser wants it to be, and is
  2687.     write-only; any HostFxxx functions that attempt to read from
  2688.     HostFILE's will fail when fed this HostFILE*.
  2689.  
  2690.     Output occurs only when Poser has turned on logging. If the
  2691.     Palm OS application calls something like HostFPrintF(hostLogFile,
  2692.     "...", ...) and logging is not turned on, the output is discarded.
  2693.  
  2694. *    Added HostSetLogFileSize. This function sets the maximum amount of
  2695.     text written to the file created by Poser's logging facilities.
  2696.  
  2697. *    If Gremlins is running and a message needs to be displayed that can
  2698.     be handled by clicking on a Continue button, write that message to
  2699.     a log file instead and implicitly click on the Continue button.
  2700.  
  2701. *    If Gremlins is running, turn off the facility that causes the user
  2702.     to be warned only once of certain kinds of errors (that is, the
  2703.     error will be logged to the file every time).
  2704.  
  2705. *    In the logging output file, add a comment that only the last xxxK
  2706.     of information is recorded.
  2707.  
  2708.  
  2709. Changes for 2.1d14 (10/1/98)
  2710. ----------------------------
  2711. *    Added Japanese silkscreens, and support for selecting them.
  2712.  
  2713. *    (Mac) Added "None" menu item to serial port menu.
  2714.  
  2715. *    Added support for lcdPageWidth and lcdPanningOffset registers.
  2716.  
  2717. *    Fixed bug with power-off (I wasn't allowing HwrSleep to change some
  2718.     low-memory vectors, resulting in a warning dialog).
  2719.  
  2720. *    Check for and report heap corruptions.    Poser walks the heap
  2721.     regularly, usually to sync up its notion of where things are with
  2722.     the Palm OS Memory Manager's. These walks used to be vulnerable to
  2723.     corrupted heaps. Now they should be more robust.
  2724.  
  2725. *    (Mac) Updated to CodeWarrior Pro 4.
  2726.  
  2727. *    Instead of patching ErrDisplayFileLineMsg and showing its text in
  2728.     our own dialog, let the ROM version execute. It will eventually
  2729.     call SysFatalAlert, which we patch for the same reason (to show the
  2730.     text in our own dialog with our own buttons).
  2731.  
  2732. *    Added stack overflow checking.    On all opcodes changing the stack
  2733.     pointer (PEA, MOVE, MOVEM, JSR, and any opcode operating on a
  2734.     register with pre-decrement mode), I check the stack pointer to see
  2735.     if it's (a) close to the end of the stack or (b) past the end of the
  2736.     stack. The former gets a warning, the latter gets an error.
  2737.  
  2738. *    Initialize new RAM to 0xFF (make it look like new flash RAM).
  2739.  
  2740. *    (Windows) Fixed "Unhandled exception caught in main()" error message.
  2741.     This would show up when the previously-used ROM file could not be
  2742.     found. Now, the (slightly) less enigmatic message "Could not start
  2743.     a new session because the file could not be found" is displayed.
  2744.     More importantly, Poser no longer quits after displaying the message.
  2745.  
  2746. *    Added check for how long the Memory Manager semaphore was held.
  2747.     Show a warning if held for more than 10 milliseconds.
  2748.  
  2749. *    Fixed problem with multiple Gremlin Control windows appearing in
  2750.     the windows version. Doh!
  2751.  
  2752. *    Made the "Release" target an "External Release" target, and added
  2753.     an "Internal Release" target.
  2754.  
  2755. *    Added support for loading clippings.
  2756.  
  2757. *    Made a change that should take care of accesses to invalid memory
  2758.     from an external debugger.
  2759.  
  2760.  
  2761. Changes for 2.1d13 (9/15/98)
  2762. ---------------------------
  2763. *    Fixed bug in heap validation functions; when I extract the *signed*
  2764.     hOffset value, I have to sign extend it from 24-bits to 32-bits.
  2765.  
  2766. *    Mark more parts of memory as memory manager data structures.
  2767.  
  2768. *    Support hardware sub-ID for EZ devices.
  2769.  
  2770. *    Support HwrIdentifyFeatures for 68328 devices.
  2771.  
  2772. *    Enable flash for Palm V and Palm IIIx.
  2773.  
  2774. *    Fixed long-standing Gremlins bug that would cause event pushing to
  2775.     stop after a while (the Gremlin mechanism would enqueue and event
  2776.     and then wait for it to be handled; however, in some cases, the
  2777.     event would fail to be enqueued, and the Gremlin mechanism would
  2778.     wait forever for that event to be handled).
  2779.  
  2780. *    Allow for a bug in SysBinarySearch in pre-3.0 systems that would
  2781.     cause it to pass an invalid pointer to the search callback.
  2782.  
  2783. *    Added Gremlins Control window (displays gremlin number, current
  2784.     event number, and elapsed time; also contains Stop, Resume, and Step
  2785.     buttons).
  2786.  
  2787. *    Tweaked Gremlins engine so that doing a Step doesn't reset the
  2788.     "until" value.
  2789.  
  2790. *    Performance enhancements:
  2791.  
  2792.     - Changing some functions to return "int" instead of "bool"
  2793.       resulted in better code generation, leading to a 7% performance
  2794.       boost in my canonical Gremlins test (Gremlin #0, 10000 events
  2795.       on the Memo Pad). (Actually, this was only a win in VC++;
  2796.       CodeWarrior worked better with "bool". Therefore, all of the
  2797.       sources were changed to use "Bool", which is typedeffed to
  2798.       "bool" or "int" depending on the compiler being used.)
  2799.  
  2800.     - Putting back an enhancement from Craig's Mac Copilot lead to a
  2801.       27% performance boost. The idea is to update only the scanlines
  2802.       that are changed since the last screen refresh. Craig did it by
  2803.       carefully comparing the current LCD buffer with a saved version
  2804.       of it. I now do it instead by noting when the LCD buffer is
  2805.       being written to (this is done fairly efficiently via the
  2806.       MetaMemory tracking routines) and remembering the first and last
  2807.       bytes in the LCD buffer that were written to.
  2808.  
  2809. *    Fixed trap number used in HostControl.h.
  2810.  
  2811. *    Updated to latest CharEncodingType values from TextMgr.h.
  2812.  
  2813.  
  2814. Changes for 2.1d12 (9/2/98)
  2815. ---------------------------
  2816. *    EmuTraps -> HostControl.
  2817.  
  2818. *    Let PrvFindMemoryLeaks walk the heap.
  2819.  
  2820. *    Added HostGetEnv.
  2821.  
  2822.  
  2823. Changes for 2.1d11 (8/31/98)
  2824. ----------------------------
  2825. *    Added support for AMD flash RAM.
  2826.  
  2827. *    (Windows) Fixed support for external debugging.
  2828.  
  2829. *    (Windows) Display dialog if an exception is caught in WinMain.
  2830.  
  2831. *    (Windows) Fixed the way the Dragonball(EZ) registers were
  2832.     initialized. After things got going, the registers were OK, but the
  2833.     initial values on little-endian machines was completely bogus.
  2834.  
  2835. *    (Mac) Updated creator resource text.
  2836.  
  2837. *    Totally revamped the way memory access checking is performed. In
  2838.     addition to detecting access to low-memory, system globals, the
  2839.     screen buffer and Dragonball(EZ) registers, I validate access to the
  2840.     dynamic heap. Now, only the Memory Manager can fiddle with chunk
  2841.     headers and trailers, free chunks, and unlocked chunks. For the time
  2842.     being, low-stack access is no longer detected, though this feature
  2843.     will return. Eventually, we should also be able to detect access to
  2844.     uninitialized memory.
  2845.  
  2846. *    Updated to latest sysFtrNumXXX values.
  2847.  
  2848. *    Fixed test for Intl Mgr in gremlins.
  2849.  
  2850. *    Test for NULL in stub Intl Mgr functions.
  2851.  
  2852. *    I now calibrate the pen before running a gremlin. This is
  2853.     necessary for consistant results between different runs across
  2854.     boots.
  2855.  
  2856. *    Fixed error reporting problem where previous messages reported in
  2857.     dialogs would inhibit other messages from appearing (that is, the
  2858.     attempt to display a second message would end up showing the first
  2859.     error message again).
  2860.  
  2861. *    Handle errant accesses to Dragonball space past the end of the last
  2862.     defined register.
  2863.  
  2864. *    Check for and report unimplemented traps. This check detects
  2865.     attempts to call functions that are off the end of the trap table as
  2866.     well as calls to SysUnimplemented.
  2867.  
  2868. *    Internal change: consolidated more error handling in the Errors
  2869.     class.    Cleaned up the Errors interface a little bit.
  2870.  
  2871. *    Added temp hack to let PrvGetBatteryPercent read off the end of an
  2872.     allocated chunk of memory.
  2873.  
  2874.  
  2875. Changes for 2.1d10 (8/18/98)
  2876. ----------------------------
  2877. *    Display correct error message if a low-stack access is performed (I
  2878.     was previously re-using the "screen buffer access" message).
  2879.  
  2880. *    Low-memory access by the ROM was previously allowed up until
  2881.     UIInitialize was called. That's been changed to TimInit.
  2882.  
  2883. *    Consolidated some "device" menu items in the New Session dialog,
  2884.     and added a new device.
  2885.  
  2886. *    Per Steve and Roger, changed some function names in EmuTraps.h.
  2887.  
  2888. *    Added Control Panels to the list of applications in the New Gremlin
  2889.     dialog box.
  2890.  
  2891. *    Added support for DbgMessage.
  2892.  
  2893. *    Internal change: Roger Flores Memorial Constant Eradication. Got
  2894.     rid of a lot of constants in EmuTraps.cpp and TrapPatches.cpp. These
  2895.     constants were used to fetch parameters from the emulated stack
  2896.     pushed on there by emulated code. I now define structs that
  2897.     describe the stack contents and use those (with the offsetof macro)
  2898.     to get the values.    In addition to the obvious one, another
  2899.     advantage is that the macros can now determine the _size_ of the
  2900.     parameters and call get_long, get_word, or get_byte accordingly.
  2901.  
  2902. *    Rolled in more IK/Gremlin changes for Ken.
  2903.  
  2904. *    Double-clicking on an app in the New Gremlin dialog will implicitly
  2905.     click on the OK button.
  2906.  
  2907. *    (Mac) Support Cmd-D in the "Save this file?" dialog (you guys owe
  2908.     me!)
  2909.  
  2910. *    Mapped some internal error numbers to error strings.
  2911.  
  2912. *    Re-establish the interrupt state of any pressed buttons after a
  2913.     reset.    This allows you to press the Power key and Cmd/Ctrl-R,
  2914.     resulting in a Hard Reset.
  2915.  
  2916. *    Asking for the 'irda' ROM token will now always fail (at least,
  2917.     until we can get some IrDA support implemented). NOTE: the ROM
  2918.     calls HwrGetROMToken directly, which means that it will not see the
  2919.     effect of this patch.
  2920.  
  2921. *    Internal change: Platform::DisposeMemory now takes a reference to a
  2922.     pointer so that it can set that pointer to NULL.
  2923.  
  2924. *    Use Platform::AllocateMemory and Platform::DisposeMemory in the
  2925.     profiling code, so that it can use temp memory on the Mac.
  2926.  
  2927. *    EmuProfileDump now uses the name passed in to it. If NULL is
  2928.     passed in, a default name ("Profile Results") is used.
  2929.  
  2930. *    Started on checking memory accesses to the dynamic heap that are
  2931.     outside of allocated memory chunks. Not activated yet because (a)
  2932.     it's too slow and (b) the hueristics aren't quite right.
  2933.  
  2934. *    (Windows) Fixed bug with not reporting errors that occurred
  2935.     while initializing the emulator. Now you're notified if the serial
  2936.     port you've specified in the Properties dialog is busy.
  2937.  
  2938. *    (Windows) Made the example in the previous bullet a warning,
  2939.     not a fatal error.
  2940.  
  2941.  
  2942. Changes for 2.1d9 (8/4/98)
  2943. --------------------------
  2944. *    (Mac) Fixed problem where the emulator would attempt to save the RAM
  2945.     file with no name if "Save Always" were selected, the user chose
  2946.     Quit from the File menu, and the RAM file was new (i.e., had never
  2947.     been saved before).
  2948.  
  2949. *    Prevent the system from _reading_ low-memory if it's (a) not
  2950.     sleeping or dozing, (b) fully booted, and (c) not handling an
  2951.     interrupt.
  2952.  
  2953. *    Hooked up "Fill New Blocks" and "Fill Disposed Blocks".
  2954.  
  2955. *    Minor optimizations to DRAM_Bank accessors.
  2956.  
  2957. *    Rolled in Ron's changes for finding a function's name.
  2958.  
  2959. *    Detect and report accesses to the space below the stack pointer and
  2960.     above the low-end of the stack. Note that there is no checkbox in
  2961.     "Debug Options" for this, but performance timing shows that there is
  2962.     very low overhead for this check (less than .1%).
  2963.  
  2964.     IMPLEMENTATION NOTE: detecting accesses to the unused parts of the
  2965.     stack obviously entail knowing where the stack is.    This information
  2966.     is gleaned from the SysAppInfoType block when the application is
  2967.     launched. However, there's no really good way to hook into the
  2968.     launch process. There are advantages and disadvantages to every
  2969.     approach, but the one used here is to hook into SysAppStartup and
  2970.     SysAppExit. This works for applications that use the standard
  2971.     runtime startup code, but applications are not guaranteed to use
  2972.     that standard code. Hopefully, the percentage of such applications
  2973.     is low.
  2974.  
  2975.     Additionally, SysAppStartup and SysAppExit are called under
  2976.     circumstances other than starting up the application. For instance,
  2977.     they are called when action codes are sent to each application. To
  2978.     differentiate the two, we ignore all calls to SysAppStartup that
  2979.     don't contain sysAppLaunchCmdNormalLaunch in the cmd field of the
  2980.     SysAppInfoType block.
  2981.  
  2982. *    Hooked up "Clean Stack" check box.    This option was originally
  2983.     defined to overwrite the parts of the stack that were freed up by an
  2984.     UNLK or RTS opcode in an attempt to detect accesses to those ranges
  2985.     of memory. Since that's now handled by the previous "*", "Clean
  2986.     Stack" now means that we initialize the part of the stack reserved
  2987.     by LINK opcodes, thus initializing local variables to well-defined
  2988.     bad values.
  2989.  
  2990. *    Fixed bug that occured when setting a breakpoint on an opcode just
  2991.     after a call to a system function that was tailpatched by the
  2992.     emulator.
  2993.  
  2994.  
  2995. Changes for 2.1d8 (7/29/98)
  2996. ---------------------------
  2997. *    EmuGrmIsRunning (and SysGremlins) FINALLY returns a correct value
  2998.     instead of just returning "true" all the time.
  2999.  
  3000. *    Implemented EmuDmLoadFile and EmuDmSaveFile.
  3001.  
  3002. *    EmuDmSaveFile now takes a card number as the second parameter.
  3003.  
  3004. *    Added parameter checking to all EmuXXX functions. Functions that
  3005.     return EmuErrs will return emuErrInvalidParameter.    StdIO functions
  3006.     return error values according to the ANSI/ISO standard, and will set
  3007.     errno to emuErrInvalidParameter (note that functions that alter the
  3008.     return values of ferror and/or feof will NOT affect those value,
  3009.     which is DIFFERENT from the standard).
  3010.  
  3011. *    Fixed bug when setting the current time on startup. This bug would
  3012.     cause a crash on new Palm V ROMs.
  3013.  
  3014. *    Fixed bug with new Palm V ROMs when they tried to identify how much
  3015.     memory was on the "device".
  3016.  
  3017. *    (Windows) Fixed problem where clicking OK in the Properties dialog
  3018.     would crash the emulator under Windows 95 (and could possibly crash
  3019.     Windows 95, too!).
  3020.  
  3021. *    (Mac) Fixed problem where the serial port name would get lost,
  3022.     prohibiting the emulator from being able to open the serial port.
  3023.  
  3024.  
  3025. Changes for 2.1d7 (7/27/98)
  3026. ---------------------------
  3027. *    (Mac) Don't feed the ROM mouse/pen events if we've turned off
  3028.     emulator execution at idle time. This prevents problems if a dialog
  3029.     comes up while tracking the mouse/pen.
  3030.  
  3031. *    Fixed long-standing bug from Mac Copilot 1.3 days.    The functions
  3032.     GetRegisters and SetRegisters can be used to save and restore the
  3033.     CPU registers.    The emulator used those functions for just that
  3034.     purpose when it would call ROM functions as subroutines. However,
  3035.     the status register was not faithfully saved, which meant that it
  3036.     was not always put back the way it was found. Since status bits
  3037.     would then occassionally change spontaneously out from under the
  3038.     emulated process, things would occassionally go "haywire" (that's a
  3039.     technical term).
  3040.  
  3041. *    Value returned by EmuHostGetVersion is now based on the
  3042.     application's version resource instead of being hard-coded.
  3043.  
  3044. *    (Mac) Save window position.
  3045.  
  3046. *    Implemented EmuHostIsSelectorImplemented.
  3047.  
  3048. *    Holding down the Ctrl key while booting/resetting will stop the ROM
  3049.     at the start of the Big ROM by using a temporary breakpoint.
  3050.  
  3051.  
  3052. Changes for 2.1d6 (7/23/98)
  3053. ---------------------------
  3054. *    Changed way emulated apps called host functions. Those functions
  3055.     used to be called by invoking TRAP $E. Now we latch onto the
  3056.     SysGremlins trap number.
  3057.  
  3058. *    Extended set of host functions.
  3059.  
  3060. *    Zap some card header fields to say that we don't emulate flash RAM.
  3061.  
  3062. *    Fixed problem with profiling.
  3063.  
  3064. *    (Mac) Fixed an execution path where an untyped ROM file wasn't
  3065.     getting its type set.
  3066.  
  3067. *    Fixed problem with stopping on A-Trap breaks.
  3068.  
  3069.  
  3070. Changes for 2.1d5 (7/21/98)
  3071. ---------------------------
  3072. *    (Mac) added version that does profiling.
  3073.  
  3074. *    Fixed loading of "whole" ROMs (those with Big ROMs and Small ROMs).
  3075.  
  3076. *    Fixed loading of .pdb files that have an AppInfo block but no
  3077.     records.
  3078.  
  3079.  
  3080. Changes for 2.1d4 (7/20/98)
  3081. ---------------------------
  3082. *    (Mac) turned Open and Install menu items into hierarchical menus.
  3083.  
  3084. *    Fixed bugs with saving and loading session files.
  3085.  
  3086. *    (Mac) turned Appearance Manager classes back on when running on a
  3087.     sufficient machine (I'd accidentally left the application using the
  3088.     GA classes even when AM was available).
  3089.  
  3090. *    (Mac) create the Debug Options window invisibly; reduces flickering
  3091.     when opened.
  3092.  
  3093. *    Converted over to using the cross-platform classes FileReference
  3094.     (reference to and unopened file) and FileHandle (reference to an
  3095.     opened file). These classes allow more platform-independent code
  3096.     (such as the preferences code, which used to deal with Aliases on
  3097.     the Mac and file paths on Windows).
  3098.  
  3099. *    Overhauled error/exception handling/reporting.    I now use a
  3100.     consistant approach to detecting, handling, and reporting errors.
  3101.  
  3102. *    Rewrote the ROM image loading function. ROM images consist of two
  3103.     parts: a Big ROM and a Small ROM. The ROM image file always
  3104.     contains a Big ROM part, but not always a Small ROM part. However,
  3105.     the Small ROM part is optional and can be dummied up if necessary.
  3106.     The original version of the ROM image loader needed to load in the
  3107.     ROM image file once, determine if the Small ROM was included, and
  3108.     start over if it wasn't. The new ROM image loader is smarter,
  3109.     reading in just the parts it needs to determine if the Small ROM is
  3110.     there or not. Only after that does read in the full ROM file.
  3111.  
  3112. *    Put more strings in resources.    Most, but not all, are now done.
  3113.  
  3114. *    Added StdIO wrappers (see EmuTraps.h).
  3115.  
  3116.  
  3117. Changes for 2.1d3 (7/7/98)
  3118. --------------------------
  3119. *    Added progress bars when loading .prc and .pdb files.
  3120.  
  3121. *    Added support for drag and drop.
  3122.  
  3123. *    Now close previous session before opening the next.
  3124.  
  3125. *    (Mac) Added StandardGetFile file filter to allow files that start
  3126.     with "rom." or end with ".rom" or " rom", but that don't have the
  3127.     right file type.
  3128.  
  3129. *    Updated to latest EZ ROM header files (as of 7/6/98).
  3130.  
  3131. *    Update the low-memory checksum if low-memory is altered by an
  3132.     external debugger.
  3133.  
  3134. *    Fixed long-standing bug that would corrupt ROMs when switching from
  3135.     one to another. Since you couldn't do this on Windows in 2.0, you'd
  3136.     only see it in the Mac 2.0 version.
  3137.  
  3138. *    When creating the preferences for the first time, set the amount of
  3139.     RAM displayed in the New Configuration dialog to 1Meg.
  3140.  
  3141. *    (Mac) Allocate large chunks of memory from temp mem.
  3142.  
  3143.  
  3144. Changes for 2.1d2 (7/2/98)
  3145. --------------------------
  3146. *    Revamped startup sequence. From the ERS:
  3147.  
  3148.     If the application is started by double-clicking on its icon, it
  3149.     will attempt to perform some appropriate startup action.
  3150.  
  3151.     * If the user had saved a session document the previous time the
  3152.       emulator had been run, the emulator will attempt to reload that
  3153.       document.
  3154.  
  3155.     * If the user created a new session document during the previous
  3156.       session but didn't save that document, the emulator will create
  3157.       a document with the same settings.
  3158.  
  3159.     * If either of those attempts fails (for instance, the previously
  3160.       used session document or ROM file cannot be found), or this is the
  3161.       first time the user has used the emulator, or the user holds down
  3162.       the Caps Lock key while starting the emulator, the user is
  3163.       presented with a "New Configuration" dialog box. The user uses
  3164.       this dialog box to specify a new hardware/RAM/ROM configuration
  3165.       from which a new document is created.
  3166.  
  3167.     If the user double-clicks on an emulator document icon, the emulator
  3168.     attempts to restore the session recorded in that file. This attempt
  3169.     may fail if the ROM image for the session can no longer be found. In
  3170.     that case, the session document can no longer be used; session
  3171.     documents can only be used in conjunction with the exact same ROM
  3172.     image that created them.
  3173.  
  3174.     If the user double-clicks on a ROM image icon, the emulator
  3175.     presents the user with the "New Configuration" dialog box with the
  3176.     selected ROM file entered into the ROM File text slot.
  3177.  
  3178. *    Brought Mac and Windows versions in sync with each other.
  3179.  
  3180. *    IMPORTANT NOTE: "RAM" files created by previous versions of the
  3181.     emulator are no longer supported. There are two reasons for this.
  3182.     First, they didn't contain enough information that today's session
  3183.     files need (such as the associated ROM file name, or the device type
  3184.     to emulate). Second, ".ram" is the extension for Real Audio Media
  3185.     files. Therefore, the emulator now reads and writes ".psf" (Palm
  3186.     Session File) files.
  3187.  
  3188. *    Added Registry information so that Emulator files have the right
  3189.     description next to their names.
  3190.  
  3191.  
  3192. Changes for 2.1d1 (6/22/98)
  3193. ---------------------------
  3194. *    Updated to latest UAE.
  3195.  
  3196. *    (Mac) Updated to CodeWarrior Pro 3. (Requires "MW C/C++ PPC"
  3197.     from May 19th or later.)
  3198.  
  3199. *    Removed 68K and FAT versions.
  3200.  
  3201. *    New menu organization.
  3202.  
  3203. *    More emphasis on documents, rather than ROM image files.
  3204.  
  3205. *    Lots of internal changes:
  3206.  
  3207.     - RAM_ROM broken out into many smaller files.
  3208.  
  3209.     - Lots of small performance tweaks.
  3210.  
  3211.     - More strings moved to resources.
  3212.  
  3213.     - Names of system functions are fetched directly from the ROM
  3214.       instead of being hardcoded in StringData.cpp.
  3215.  
  3216. *    Added DragonballEZ support.
  3217.  
  3218. *    (Mac) Added white screen.
  3219.  
  3220. *    New Preferences/Properties... and Debug Options... dialogs.
  3221.  
  3222. *    New startup dialog for Windows (for when it needs help starting
  3223.     up).
  3224.  
  3225. *    Fixed the bug where you couldn't enter typed characters if there
  3226.     wasn't a blinking insertion point.
  3227.  
  3228.  
  3229. Changes for 2.0b3 (6/2/98)
  3230. --------------------------
  3231. *    Windows only: Added Greg's nifty Hyperlink controls to the About box.
  3232.  
  3233. *    Added Keith's Palm OS Emulator article from HHSJ.
  3234.  
  3235. *    Windows only: Added Greg's fixes to the serial emulation routines.
  3236.  
  3237. *    Fixed Headpatch::SysGremlins bug where it would read garbage from
  3238.     the stack when trying to get the selector parameter.
  3239.  
  3240. *    Got A-Trap breaks working ("atb" from the PalmDebugger).
  3241.  
  3242. *    Windows only: bumped number of recently loaded application from
  3243.     five to nine.
  3244.  
  3245. *    Fixed 1.0 ROM compatibility problem: the emulator was trying to call
  3246.     a function introduced in Palm OS 2.0 (PrefSetPreference).
  3247.  
  3248.  
  3249. Changes for 2.0b2 (5/25/98)
  3250. ---------------------------
  3251. *    Windows only: Fixed bug that would zap the version number in the
  3252.     system preferences when attempting to set the timeout value to be
  3253.     infinite.
  3254.  
  3255. *    Fixed bug that would cause the emulator try to access invalid memory
  3256.     if the emulated app tries to access invalid memory.
  3257.  
  3258. *    If an exception occurs that an external debugger should handle and
  3259.     there is no external debugger, instead show a dialog that reports
  3260.     the problem and forces the user to reset.
  3261.  
  3262. *    When getting application version string, look for ID's 1 and 1000.
  3263.  
  3264. *    Windows only: Fixed bug that would leave a debugger-related messaging
  3265.     event object signalled if there were no external debugger.
  3266.  
  3267.  
  3268. Changes for 2.0b1 (5/??/98)
  3269. ---------------------------
  3270. *    Prevent the device from ever going to sleep. Letting it go to sleep
  3271.     is only annoying, and doesn't accomplish anything. You can make the
  3272.     device go to sleep by setting the timeout value in the General
  3273.     Preference panel, but that setting will get reset back to "never" on
  3274.     any reset.
  3275.  
  3276. *    Mac only: Fixed problem that would cause the emulator to hang if
  3277.     you tried to open a console window from within MWDebug.
  3278.  
  3279. *    Got alarms working.
  3280.  
  3281. *    Mac only: Wasn't doing a "weak import" of AppearanceLib in non-debug
  3282.     version.
  3283.  
  3284. *    With regards to a change in 2.0d8, it's OK to load an application that
  3285.     already exists in ROM. The RAM-based version will override the one
  3286.     that's in ROM.
  3287.  
  3288.  
  3289. Changes for 2.0d9 (5/13/98)
  3290. ---------------------------
  3291. *    The handling of DbgBreak was broken.
  3292.  
  3293. *    Allow application to resume after ErrDisplayFileLineMessage. This
  3294.     is handy in cases where you're using ErrNonFatalDisplayIf to display
  3295.     warning messages and it's OK for the application to continue
  3296.     execution.
  3297.  
  3298. *    Accidentally turned off checksumming of post-2.0 ROMs; turned it
  3299.     back on.
  3300.  
  3301. *    Windows only: there was supposed to be a feature whereby holding
  3302.     down the caps-lock key when starting the emulator would cause it to
  3303.     bring up a Download/Browse/Quit dialog box. However, the dialog box
  3304.     would actually come up if the caps-lock key had ever been toggled
  3305.     since the last time the emulator had been executed. Fixed.
  3306.  
  3307. *    Selecting "Gremlin/New..." while a gremlin is currently running
  3308.     will now switch to the new gremlin.
  3309.  
  3310. *    Fixed error message to say RAM instead of ROM when saving a RAM
  3311.     image file, and added an exception handler to deal with the ensuing
  3312.     thrown exception.
  3313.  
  3314.  
  3315. Changes for 2.0d8 (5/27/98)
  3316. --------------------------
  3317. *    Added Greg's Copilot article from HHSJ.
  3318.  
  3319. *    Added updates to Guide.html from Roger.
  3320.  
  3321. *    Removed support for the 2.0 Debug ROM that offset the low-memory
  3322.     globals byte four bytes. There were problems with that ROM that
  3323.     would cause it to crash.
  3324.  
  3325. *    Gremlins now latches into KeyCurrentState in order to randomly set
  3326.     the bits so that applications can respond to them.
  3327.  
  3328. *    The patched versions of SysFatalAlert and ErrDisplayFileLineMsg now
  3329.     display dialogs containing "Debug" and "Reset" buttons. Clicking on
  3330.     "Debug" will simulate a bus error, which an external debugger will
  3331.     catch. Clicking on "Reset" is the same as selecting the Reset menu
  3332.     item.
  3333.  
  3334.     NOTE: currently, clicking on the "Debug" button when there's no external
  3335.     debugger running will result in the ROM attempting to handle the
  3336.     simulated bus error. If the ROM is a Debug ROM, it will attempt to
  3337.     contact a debugger over the seial port. Since there is probably no
  3338.     such debugger listening on the serial port, the emulator will appear
  3339.     to hang with a blank screen. Selecting the Reset menu item will
  3340.     restart the ROM.
  3341.  
  3342. *    Failures reported via SysFatalAlert and ErrDisplayFileLineMsg
  3343.     during application execution have more info for users to report. 
  3344.     The dialog has text along the lines of:
  3345.  
  3346.         SubHunt 2.0 has failed while running Gremlin 2 at 20,000 events.
  3347.         SubHunt complains "SubHunt.c: Line 100: Score too good." If
  3348.         this is the latest version of SubHunt, please report this to the
  3349.         application author.
  3350.  
  3351.     or:
  3352.  
  3353.         SubHunt 2.0 has failed. PalmOS complains "Window.c: Line 100:
  3354.         Invalid Window."  If this is the latest version of SubHunt,
  3355.         please report this to the application author.
  3356.  
  3357.     NOTE: currently no effort is made to determine if the application or
  3358.     the PalmOS is generating the message. This shortcoming will be
  3359.     addressed in a future version.
  3360.  
  3361. *    Use application name from 'tAIN' resource when generating the list
  3362.     of applications for the New Gremlin dialog box.
  3363.  
  3364. *    Reduced the 10% random pen tap chance in Gremlins to 2% (per
  3365.     Roger's recommendation).
  3366.  
  3367. *    Internal change: added "TrapIndex" inline function for converting a
  3368.     trap number (0xA000) to an index that can be used with the trap
  3369.     table. Standardized on its use all over. This function converts by
  3370.     merely masking off the upper byte (which mirrors what the ROM does)
  3371.     instead of subtracting "sysTrapBase" from trap numbers (which fails
  3372.     because some applications appear to use trap numbers that don't have
  3373.     "A" in their upper nybble).
  3374.  
  3375. *    Internal change: we patch ROM system functions. We also call ROM
  3376.     system functions. Now, whenever we call a ROM system function, any
  3377.     trap patches made to that function are called (they didn't used to
  3378.     be).
  3379.  
  3380. *    Fixed emulator/debugger communications bug that occured when one
  3381.     would quit and then restart (needed to refresh -- not just flush --
  3382.     the handle to the other guy's window). (Windows only)
  3383.  
  3384. *    After the UI has been initialized, prevent even the ROM from
  3385.     writing to low-memory (except from HwrSleep, which patches out the
  3386.     exception vectors).
  3387.  
  3388. *    When trying to load an application that's already in ROM, warn with
  3389.     a specific error message instead of a generic one.
  3390.  
  3391.  
  3392. Changes for 2.0d7 (4/27/98)
  3393. ---------------------------
  3394. *    Gremlins now works better with "ill-formed" forms (forms with no
  3395.     "live" objects in them). Gremlins will also now generate random
  3396.     taps 10% of the time instead of always trying to target form
  3397.     objects.
  3398.  
  3399. *    Turn off Gremlins on a reset or fatal system error.
  3400.  
  3401. *    Only the last 128K of Gremlins logging text will now be written to
  3402.     the logging file.
  3403.  
  3404. *    Added "Debug" button to the "Application so-and-so just made an
  3405.     invalid memory access" dialog. Clicking on this button emulates a
  3406.     bus error. If an external debugger is running, it will be notified
  3407.     of this bus error. If not, the emulated ROM will take over,
  3408.     displaying a Fatal Error dialog.
  3409.  
  3410. *    Fixed a bug where the emulator itself would cause a "The current
  3411.     application just accessed Palm OS Globals ..." to appear after
  3412.     downloading an application via MWDebug.
  3413.  
  3414.  
  3415. Changes for 2.0d6 (4/22/98)
  3416. ---------------------------
  3417. *    Added ROM Transfer project (for Mac).
  3418.  
  3419. *    Added Docs folder.
  3420.  
  3421. *    Added Plugins folder containing MWDebug plugins.
  3422.  
  3423. *    Tweaks to PCH file generation for CW Pro 3.
  3424.  
  3425. *    Added HotSync to Mac side.
  3426.  
  3427.     IMPORTANT: For both versions of the Emulator, HotSyncing has only
  3428.     been tested between two machines (in both cases, between a Mac and a
  3429.     PC). I don't know what performance is like when both the emulator
  3430.     and HotSync are running on the same machine.
  3431.  
  3432. *    Now enable and disable Gremlins menu items in WinEmulator.
  3433.  
  3434. *    Fixed bug in ROM Transfer.prc which would cause it to crash on Palm
  3435.     III's.
  3436.  
  3437. *    Fixed some bugs in RAM file management in Mac version.
  3438.  
  3439.  
  3440. Changes for 2.0d5 (4/??/98)
  3441. --------------------------
  3442. *    Checksum the ROMs when they're loaded. This checksum is used to (a)
  3443.     validate the ROM contents (for pre-3.0 ROMs, the checksum is checked
  3444.     against a hard-coded list of ROM checksums, for 3.0 ROMs and later,
  3445.     the checksum is checked against the checksum in the ROM header) and
  3446.     (b) determine if we're running the 2.0 debug ROM, which needs
  3447.     special hacks activated in order to run.
  3448.  
  3449. *    Allow *.* patterns when loading ROM and application files.
  3450.  
  3451. *    Support serial port emulation in WinEmulator (not in Mac, yet).
  3452.  
  3453. *    Added method for applications to call the emulator (see
  3454.     EmuTraps.h). Note that there currently is no method to see at
  3455.     runtime if an application is running under the emulator or not.
  3456.  
  3457. *    Tweaks to get Mac version to build under CWP R2 with CW4POS R4
  3458.     installed in it.
  3459.  
  3460. *    Backed out checksumming of pre-3.0 ROMs until I get get an accurate
  3461.     set of checksum numbers.
  3462.  
  3463.  
  3464. Changes for 2.0d4 (4/9/98)
  3465. --------------------------
  3466. *    Reset auto-off timer when processing debugger packets.
  3467.  
  3468. *    Changed way tailpatches are implemented. I used to set the return
  3469.     address of a system function I was tailpatching to point to a TRAP
  3470.     $E opcode (saving the original return address in an array in the
  3471.     emulator). This approach has the advantage of not modifying any
  3472.     opcodes in memory, and handles recursive system functions very well.
  3473.     Sadly, the critical flaw in this approach is that some operations
  3474.     need the real return address to be on the stack. For instance, the
  3475.     TRAP $F handler (TrapDispatcher) in the ROM looks at the return
  3476.     address so that it can look up the $Axxx function selector.
  3477.     Therefore, the approach I now take is to write a TRAP $E into memory
  3478.     after the TRAP $F / $Axxx sequence, saving the overwritten opcode in
  3479.     a table. Recursive functions are handled by incrementing and
  3480.     decrementing a counter associated with that memory location. When
  3481.     the counter gets back down to zero, the opcode is restored.
  3482.  
  3483. *    Added preliminary profiling stuff. Still disabled at this point.
  3484.  
  3485. *    Don't let the user enter pen and keyboard events if the CPU is
  3486.     stopped (for example, when it's in the debugger).
  3487.  
  3488. *    Don't run RPC commands from the debugger in TRACE mode (that is,
  3489.     run the commands, but turn trace mode off, first).
  3490.  
  3491. *    Respond better to a SysReset message from the debugger.
  3492.  
  3493. *    Remove tailpatch opcode when the CPU is reset.
  3494.  
  3495. *    In WinEmulator, restart the CPU after a screenshot only if it was
  3496.     running before we took the screenshot.
  3497.  
  3498. *    Fixed problems with synchronization between the UI thread and the
  3499.     CPU thread. One way to trip up over the bug was to run Gremlins and
  3500.     at the same time click like crazy on the screen or hardware buttons.
  3501.     After a while, you'd get the dreaded "ATrap::DoCall returned and
  3502.     exception" dialog box.
  3503.  
  3504. *    Fixed Gremlins bug that would put it into an infinite loop if the
  3505.     top form had only frmBitmapObj, frmLineObj, frmFrameObj,
  3506.     frmRectangleObj, frmLabelObj, frmTitleObj, and/or frmPopupObj
  3507.     objects in it. Games like SubHunt, HardBall, and Reptoids are
  3508.     examples of programs with such forms.
  3509.  
  3510. *    Changed the low-level mechanism for handling exceptions and
  3511.     entering the debugger. With the old way, an exception would cause
  3512.     the main CPU loop to exit before the debugger was notified about the
  3513.     exception. But if there were no external debugger to notify, there
  3514.     was no way to cleanly restart the CPU loop in order to have the
  3515.     emulated ROM handle the exception (either by trying to connect to a
  3516.     serial debugger, or by showing a fatal error dialog). Now, the
  3517.     attempt to contact an external debugger is made before exiting the
  3518.     CPU loop. If the attempt succeeds, the CPU loop is exited. If the
  3519.     attempt fails, the normal exception handling process takes over
  3520.     (i.e., the appropriate vector from the low- memory exception table
  3521.     is loaded into the PC and execution continues).
  3522.  
  3523. *    Added support for 2.0.2 Debug ROMs (added minimal support for 68681
  3524.     serial access and account for different low-memory variable
  3525.     locations).
  3526.  
  3527. *    Removed support for ROM files with the pattern "ROM *". This
  3528.     pattern also matches the "ROM Transfer.prc" application, causing the
  3529.     emulator to try loading it if there are no other candicates.
  3530.  
  3531. *    For MacEmulator, save RAM files with the type '(Pi)RAM' and ROM
  3532.     files with the type '(Pi)ROM'. Also, if untyped files are accessed
  3533.     as RAM or ROM files, they are changed to have the appropriate type.
  3534.  
  3535. *    Restarting and stepping of Gremlins in WinEmulator more reliable.
  3536.  
  3537. *    Better warning messages for applications that:
  3538.  
  3539.     -    Access low-memory directly
  3540.     -    Access system global variables directly
  3541.     -    Access the screen directly
  3542.     -    Access Dragonball registers directly
  3543.  
  3544.  
  3545. Changes for 2.0d3
  3546. -----------------
  3547. *    Lots of internal changes:
  3548.  
  3549.     -    Names changed from Foo_Bar format to Foo::Bar format (where Bar
  3550.         is a static member function of the Foo class). This change
  3551.         makes it easier to look things up in a class browser.
  3552.  
  3553.     -    Handling of memory access errors codified. All accesses are
  3554.         checked; any errors are reported through bottleneck functions;
  3555.         all accesses can be turned on/off with compile-time and/or
  3556.         runtime switches; added CEnableFullAccess class that allows
  3557.         internal functions full access to memory (i.e., turns off memory
  3558.         access checking) so that we can do things like set breakpoints
  3559.         in ROM.
  3560.  
  3561.     -    Added Palm copyrights to all files.
  3562.  
  3563.     -    Standardized on PowerPlant-style function header comments.
  3564.  
  3565.     -    Removed all mention of Pilot and Pilot-derivatives.
  3566.  
  3567.     -    Untemplatized some functions in UAE_Utils that didn't need to
  3568.         be templates.
  3569.  
  3570.     -    Sped up uae_memset by using long-word access.
  3571.  
  3572.     -    Changed way tail patches are implemented. Previously, I'd write
  3573.         a TRAP $E opcode into memory after the TRAP $F/Axxx instruction
  3574.         sequence that would invoke the trap. The problems with this
  3575.         approach is that (a) this wouldn't break on all returns from the
  3576.         function if it called itself recursively, and (b) it modified
  3577.         memory in a way that would need to be reversed on selected
  3578.         occassions (e.g., when we entered the debugger, or when RAM was
  3579.         saved to disk. Instead, when a trap function is called that I
  3580.         wish to tail patch, I modify the return address from the
  3581.         function in such a way that I get control when the function
  3582.         exits (I save the old return address and replace it with a
  3583.         pointer to a TRAP $E opcode, which leads to a CPU exception
  3584.         which I catch in Software::ProcessException).
  3585.  
  3586.     -    Patched calls to SysDoze and SysSleep so we better know the
  3587.         state of the ROM/CPU. We don't actually use this information,
  3588.         yet.
  3589.  
  3590.     -    Centralized all compile-time pre-processor symbols into
  3591.         Switches.h.
  3592.  
  3593.     -    Centralized all byteswapping into Byteswapping.h/.cpp. Used a
  3594.         templatized Canonical() function on the Mac so that Canonical is
  3595.         zero-overhead no matter what type it's called with.
  3596.  
  3597.     -    Added internal diagnostic logging functions.
  3598.  
  3599.     -    Lots of timing tests to optimize memory access and core CPU
  3600.         emulation loop.
  3601.  
  3602.     -    Committed to "word-swapped" memory layout in x86-compatible
  3603.         systems. Removed experimental alternative memory layout code.
  3604.         Look for WORDSWAP_MEMORY symbol for areas that are byte-order
  3605.         sensitive.
  3606.  
  3607. *    Fixed some bugs with external debugger hooks.
  3608.  
  3609.     -    Now support the same notion of "sockets" as the SerialLinkMgr.
  3610.  
  3611.     -    On some entries into the debugger, the PC would incorrectly be
  3612.         adjusted to point 2 bytes before the instruction causing the
  3613.         debugger entry instead of pointing right at the instruction.
  3614.  
  3615.     -    Finally added debugger hooks to WinEmulator (missing
  3616.         functionality's considered a "bug", right?).
  3617.  
  3618. *    Fixed bug where UAE would allocate a significant chunk of memory and
  3619.     then try using it without first checking that the allocation attempt
  3620.     succeeded. This would result in the Mac emulator freezing on startup
  3621.     when emulator a 4Meg device.
  3622.  
  3623. *    Fixed ROM Transfer.prc to download Palm III ROMs. Updated Mac
  3624.     "Download ROM" command to work with larger ROMs. Added "Download
  3625.     ROM" to Windows emulator.
  3626.  
  3627. *    On startup, if WinEmulator can't find a ROM, it will ask you to
  3628.     find one or download one.
  3629.  
  3630. *    On startup, if the capslock key is down, WinEmulator will _always_
  3631.     bring up the dialog asking you to find a ROM file or download one.
  3632.  
  3633. *    Removed "Backlight" and "Enter debugger on startup" properties from
  3634.     WinEmulator.
  3635.  
  3636. *    When looking for a ROM file, Emulator use the following search
  3637.     order:
  3638.  
  3639.     - The file you've explicitly specified in Properties (WinEmulator only).
  3640.     - The first file in the Emulator directory ending with ".ROM"
  3641.     - The first file in the Emulator directory ending with " ROM"
  3642.     - The first file in the Emulator directory starting with "ROM."
  3643.     - The first file in the Emulator directory starting with "ROM "
  3644.  
  3645. *    Fixed problem where mouse clicking wasn't working with 1.0 ROMs. I'm
  3646.     still not sure what the root of the problem is, but I've added a
  3647.     check for 1.0 ROMs and implemented a workaround.
  3648.  
  3649. *    In WinEmulator, RAM image is automatically saved to and read from a
  3650.     file based on the name of the ROM being used and the RAM size
  3651.     requested. The name of the RAM file is "<ROM file>.<RAM size>.RAM".
  3652.     In other words, the old Windows Copilot functionality is back (it
  3653.     was temporarily removed during the Grand Code Unification).
  3654.  
  3655.     The format of this RAM image file is a little different, however.
  3656.     There are chunks of data in this file, each tagged with an ID and a
  3657.     chunk size. For now, the only defined chunk is 'ram '. In the
  3658.     future, there will be chunks for register state, associated ROM
  3659.     version, etc.
  3660.     
  3661.     In MacEmulator, the file saving operation remains the same as in Mac
  3662.     Copilot, but the file format is the same as in WinEmulator.
  3663.  
  3664. *    Switched to new case graphics.
  3665.  
  3666.  
  3667. Changes for 2.0d2
  3668. -----------------
  3669. *    Fixed MacEmulator bug when switching between 1x and 2x screen
  3670.     sizes.
  3671.  
  3672. *    Fixed bug where loading an application would smash 4 random bytes
  3673.     of memory.
  3674.  
  3675. *    Sped up emulation on the Mac by 20% by streamlining some
  3676.     Mac-specific operations.
  3677.  
  3678. *    Sped up core emulation loop on both platforms by moving some
  3679.     not-oft-used functionality into some subroutines, thus simplifying
  3680.     the core loop.
  3681.  
  3682. *    Added hooks for external debugger.
  3683.  
  3684. *    Made Gremlins deterministic.
  3685.  
  3686. *    Ensured Gremlins did the same thing on both Mac and Windows.
  3687.  
  3688.  
  3689. Changes for 2.0d1
  3690. -----------------
  3691. *    Support for Palm OS 3.0:
  3692.  
  3693.     -    memChunk headers changed, so reliance on their format when
  3694.         loading applications has been removed.
  3695.  
  3696.     -    More complete support for Dragonball registers.
  3697.  
  3698.     -    Allow for 96K and 128K dynamic heaps.
  3699.  
  3700. *    Common source code base.
  3701.  
  3702. *    Refitted with latest UAE sources.
  3703.  
  3704. *    Can load .prc files larger than 64K.
  3705.  
  3706. *    Windows version is much smaller.
  3707.  
  3708. *    Mac version is much bigger (it's a FAT binary).
  3709.  
  3710. *    Removed built-in debugger.
  3711.  
  3712. *    Support grayscale mode.
  3713.  
  3714. *    Now emulates hardware method for turning on backlighting (holding
  3715.     down the power key). Properties option is no longer needed.
  3716.  
  3717. *    Added screen shot command.
  3718.  
  3719. *    Added Gremlins. (Note that user input (typing, mousing) is disabled
  3720.     while Gremlins is running due to the incompatible ways in which they
  3721.     enter their events.)
  3722.  
  3723. *    Set the Palm OS date on startup.
  3724.  
  3725. *    Trap dispatcher is now run as native code instead of being
  3726.     emulated. This results in about a 10 - 12% speedup.
  3727.  
  3728. *    Auto-calibrate the pen on startup; no more digitizer screen.
  3729.  
  3730. *    InternetConfig-savvy About box on the Mac. Panel-savvy About box on
  3731.     Windows.
  3732.  
  3733. *    Gremlins can now confine itself to a single application.
  3734.  
  3735. *    Emulate MemSet, MemMove, and RctPtInRectangle with native code for
  3736.     15% performance increase.
  3737.  
  3738. *    While Gremlins is running, can optionally log to a text file:
  3739.  
  3740.     -    posted events
  3741.     -    received events
  3742.     -    system functions called
  3743.     -    time of execution.
  3744.