--------------------------------------------------------------------------------------
-  NOTE: Be sure to read the section under "Release Notes" for new feature additions. -
--------------------------------------------------------------------------------------

The D-Bug12XZ firmware was designed to run on the LFBDMPGMR hardware, however, the
firmware can be run on other hardware. The LFBDMPGMR design uses the S12XEP100, however,
D-Bug12XZ can also run on the S12XEQ512 or S12XEP768. Please see Appendix C of the D-Bug12XZ
Reference Manual for complete details of D-Bug12XZ's hardware requirements.

*****************
* Release Notes *
*****************

Version 6.0.0b19
----------------

 1.) Fixed a problem in DiMOVBWS12() that caused incorrect disassembly of MOVB/MOVW <indexed>,<extended> and
     MOVB/MOVW <immediate>,<indexed>. In both of these cases, the indexed portion of the operand would either appear blank
     or the indexed operand from a previously disassembled instruction to be displayed.

Version 6.0.0b18
----------------

 1.) Added support for the S12VRP64/48.

Version 6.0.0b17
----------------

1.) Found issue with the calculation of the value of XTIMEd (bit time exit delay) in the InitS12BDMDrivers() and
     InitZBDMDrivers() routines when the target clock was close to the D-Bug12XZ CPU clock. After the calculation of XTd
     (intermediate value of XTIMEd) a check is made to see if XTIMEd is less than 3 or negative. If this is the case,
     XTIMEd was SUPPOSED to have been assigned a minimum value of '1'. However, the check in the 'if' statement was erroneously
     assigning a value of '1' to XTIMEf. This caused the XTIMEd exit delay to be way too long and write commands would not
     work properly most of the time.

 2.) Reworked the "HISTORY" portion of the TRACE command to display addresses in "paged" mode by default. This is more intuitive
     and the displayed branch target addresses match the page window addresses. This "paged" mode display also displays addresses
     in "local" format for the unpaged memory areas.

 3.) Changed the ";b" HISTORY command option to ";g" to allow trace buffer addresses to be displayed as Global addresses.

 4.) The S12ZVMC256 contains a DBG v4 module which has comparator "C" and Trace capability. The enumerated constant, S12ZDBGV4,
     used in the device table and other locations in the code, was being used in tests assuming it only had the capability of
     the S12Z debug module v3 Lite, which does not have comparator "C" and Trace capability. Various locations in the code
     were changed to allow use of comparator "C" and Trace capability.

Version 6.0.0b16
----------------

 1.) Fixed multiple issues with the newly introduced TRACE command. Added a new feature which is described in the D-Bug12XZ 
     Reference Manual.

Version 6.0.0b15
----------------

 1.) Added device names MC9S12Q128, MC9S12Q96, MC9S12Q64, MC3S12Q128, MC3S12Q96 and MC3S12Q64 to the S12C128 device
     names table entry.

 2.) Added device names MC9S12Q32 and MC3S12Q32 to the S12C32 device names table entry.

 3.) Found problem with VERF command. When data in an S-Record didn't match the target data, local variables
     VerifyTargetAddress and SRecAddress were properly incremented. However, when the data did match, these two variables
     were NOT incremented. The result of this was that, for each S-Record, after the first time one or more successive
     locations did not match, if any locations following did match, and then some additional locations did not match within
     the S-Record, the S-Record and target addresses were not properly displayed.

 4.) Found an issue with BDM firmware commands when a slow target clock is present. The firmware commands, like the hardware
     commands, require a delay after the reception of the ACK pulse before the read can be performed (firmware reads) or the
     next BDM command can begin (firmware writes). This 'exit' delay was not included in the low level FirmwareCmdDly() function.
     The FirmwareCmdDly() function now exits through the AckDelay() function at label "RcvdACK" which delays the required
     amount prior to returning to the calling BDM command.

 5.) When support was first added for the S12Z devices (S12ZVM) the S12ZDBG v2 module was assumed for all S12Z devices. However,
     many of the derivatives have the S12ZDBG v3 'Lite' modules which eliminate comparator 'C' (only 3 hardware breakpoints).
     Changes needed to be made to DeviceData.C, DeviceData.h and Breakpoints.c to accommodate the V3 'Lite' debug modules.

 6.) Added the TRACE command to the firmware. This command allows the configuration and display of the DBG module trace data.
     See the updated D-Bug12XZ Reference Manual for a complete explanation and usage examples of this command.

Version 6.0.0b14
----------------

 1.) In function WriteMemS1218() when preforming bounds checking on EEPROM addresses, the checked ending address was
     the start address plus 'NumBytes'. The checked end address should be 'NumBytes - 1'. This caused an error message
     to be issued if an S-Record contained data that would be written to the last byte of the EEPROM array.

 2.) Added support for the MC9S12ZVMB(A)64/48. This is the production version of the Toledo test vehicle (S12ZVB128).

 3.) Updated the S12ZVL128 device names list to include the 96K and 64K phantom names.

Version 6.0.0b12
----------------

 1.) When making the changes in item 1 of v6.0.0b11, the 'S12I32' MCUType was not added to the case statement in
     EraseAndUnsecureTarget(). Therefore, when attempting to erase & unsecure an 'I32' target device, an error of
     "Invalid Command For Target Device" was returned and the device remained secured. This issue was corrected.

Version 6.0.0b11
---------------

 1.) The S12I32 (MM912F634) device table entry had the MCUType set to 'S12' because it is based on 0.25u Flash technology.
     However, it uses the S12S CPU and the same Global memory map as the S12P and S12G devices. Having the MCUType set
     to 'S12' caused the target read and write routines in Target.c to use the S12 routines rather than the S12 0.18u
     routines. An 'S12I32' MCUType was added to the _MCUType enum and the S12I32 device table entry was updated to use this
     'new' MCU type. A number of changes needed to be made throughout the code where the target MCUType is checked for
     various features and functions.

Version 6.0.0b10
---------------

 1.) When adding the feature described in item 2 of v6.0.0b8, In the case where the bonding option bits did
     not match a device table entry for S12Z devices OR the target device was not found in the device table (regardless
     of target architecture), a misplaced return() statement caused the AutoSelectDevice() function to return before
     initializing the global variable MaxTargetGlobalAddress (default value 0). This caused any command line entered
     address, other than 0, to be rejected as an invalid address.

Version 6.0.0b9
---------------

 1.) Made changes to GetFCLKDIVValue() to accept an "MCUType" parameter to indicate the target device type. This was necessary
     for the case where the "Erase and Unsecure" commands were called to obtain an FCLKDIV value before the target device
     table was initialized. This case occurs from the "Erase and Unsecure" option in the "Can't Communicate..." menu when
     the target device is not found in the device table.

 2.) The EraseAndUnsecureTarget() function was modified so that if a target device's PARTID cannot be found in the device
     table, a menu choice is given to choose the target device family type. This is required to determine the correct
     FCLKDIV register value and the correct (Global) address for the security byte phrase.

Version 6.0.0b8
---------------

 1.) In the logic added to AutoSelectDevice() in v6.0.0b3 (see item 6 below) an incorrect constant (S12Z instead of S12ZCPU)
     was used in the test for the currently selected CPU architecture, so the feature described in v6.0.0b3 item 6
     did not work. This was fixed.

 2.) Added code to AutoSelectDevice() so that if the upper 16-bits of the PARTID for an S12Z device match a Device Table 
     entry, but the lower 3 bits (bonding option) of the lower 16-bits of the PARTID don't match any table entries
     the first table entry where the upper 16-bits of the PARTID match is used. This allows support for 'first silicon'
     devices where the bonding option bits, which are loaded from the device IFR, may not have a correct value.

Version 6.0.0b7
---------------

 1.) Added code to PARTDF command to clear the ACCERR bit after resetting the target and before attempting to
     partition the target device. This is required in case the EEE/DFlash formatting is corrupted in which case
     the ACCERR bit and the MGSTAT0 and MGSTAT1 bits in the FSTAT register are set after a reset.

 2.) The changes made in Item 5 of v6.0.0b3 do not apply to the S12ZI128. Changed the code in FLoadS12Z(), FBulkS12Z()
     and BulkS12Z() to only check for the first mask set of the MC9S12ZVM and S12ZVH128/64.

 3.) Added support for the following MagniV devices: S12ZVB128 (ToledoTV), S12ZVC192 (Hearst), S12VR32 (Tomarino),
     S12ZVM32 (Obidos),S12ZVL128, S12ZVMC256.

 4.) When adding support for all of the new devices, noticed that the "Erase & Uncecure" and "SECURE" command were
     never implemented for the S12Z family of devices. This was added.

 5.) Added the target PARTID to data displayed when the DEVICE command is entered.

 6.) Made changes to S12BDMStatus() and ZBDMStatus() so instead of returning the value of the BDM (BDC) status
     register (upper byte only for Z12Z), the functions now return an enumerated TStatType data type. This required a
     number of changes in Target.c, but now allows for both functions to check for a secured target device and return
     the value TSecured which can be reported at the "Can't communicate..." menu.

Version 6.0.0b6
---------------

 1.) In ZBDMEnableFirmware() the modified value of BDCCSRH (i.e. setting ENBDC) was being written back to BDCCSRL.
     resulting in ENBDC not being set. This prevented hot connects to S12Z targets that had been reset in Normal
     Single-chip.

Version 6.0.0b5
---------------

 1.) Added code to CheckResourceMapping() and TAddress2Global() to handle the situation for the S12XE devices
     where RAM can be mapped to the 0x4000 - 0x7fff area. The changes to these two functions allow breakpoints
     to operate properly when code is run from RAM in the 0x2000 - 0x7fff range.

Version 6.0.0b4
---------------

 1.) Fixed an issue in the MemoryDisplay() function where if an S12 was the selected target device, and
     the target was running (i.e. hot connect), issuing the MD command with the "IO" command line parameter
     would cause the error message "Can't Read/Write Paged Memory While Target Is Running" to be returned
     IF a local memory address space had not previously been displayed using the MD command.

 2.) Fixed an issue when the "Erase and Unsecure" option In EstablishTargetCom() was chosen and the attached
     target device was an S12 without an enhanced BDM (i.e. S12Dx128 & S12DP256). The code in ProbeInit(),
     called by TargetReset(), attempts to establish BDM communications first at the 'standard' BDM clock
     frequency and if communication fails, at the 'alternate' clock frequency. This is a workaround for a
     BDM errata on the S12Dx128 & S12DP256 devices. This left the BDM drivers in an initialized state using
     the "Alternate BDM clock" (default value of 48 MHz) and hence communication could not be established.
     In EstablishTargetCom(), a call to SetAltTClock() was added so that both the entered BDM clock and the
     'alternate' BDM clock are the same. This allows the "Erase and Unsecure" option to operate properly for
     these two devices, and for the BDM errata workaround code to remain in place.

3.)  When investigating the issue in item #2 above, it was discovered that the ALTCLK command is not present
     any prior D-Bug12XZ versions. This was added to the code and documentation.

4.) If the S12/S12X BDM Debugger was entered from the "Can't Communicate" menu without first attempting to
    either reset or hot connect to the target, the low-level BDM drivers would not have been initialized.
    If any of the low-level BDM debugger commands were executed without first issuing the SYNC or BSPEED
    commands (which both initialize the low-level BDM drivers), the BDM debugger would crash due to the
    fact that function pointers in the low-level BDM drivers had not been initialized. Static initialization
    of the function pointers was added to eliminate this issue.

Version 6.0.0b3
---------------

 1.) Added support for the S12ZVHY64.

 2.) Added support for the S12ZVL32/16/8.

 3.) Added support for the S12I64 based devices (i.e. MM912G634, MM912H634).

 4.) Added the ability to add 'comments' to command lines. Any text following the C++ comment token '//'
     on a command line is ignored. This allows documentation to be placed in command 'script' files without
     causing D-Bug12XZ to report "Bad Command" errors.

 5.) Needed to make changes to FLoadS12Z(), FBulkS12Z() and BulkS12Z() related to the measured BDC frequency
     used to determine the FCLKDIV value. The N06E (first) mask set of the MC9S12ZVM, the S12ZI128 and the
     S12ZVH128/64 use the 'core' clock as the BDC 'fast' clock. The core clock is 2X the bus clock. Hence
     the measured BDC 'fast' clock for these devices had to be divided by 2 to get the bus clock. All
     succeeding MC9S12ZVM mask sets and all other MagniV S12Z devices (except S12ZI128 & S12ZVH128/64)
     use the bus clock for the BDC 'fast' clock.

 6.) Made changes to AutoSelectDevice() in Device.c to account for the situation where the S12Z is the
     currently selected architecture, D-Bug12XZ connects to an S12Z target device, but the target device
     is not currently supported. Previous default behavior, when a target device was not found in the
     device table, was to select the first device in the table (the S12XEP100). This was changed to
     scan the table for the first S12Z device and make it the 'default' device.

Version 6.0.0b2
---------------

 1.) Added support for the S12VR64/48

Version 6.0.0b1
---------------

 1.) Original release.

