Version 1.02.371
================
(Made by Dennis 04/04/2002)
1) TimBa
1) Fix for BAD-58CDM4: Locale change has no effect on contact filtering.
2) ChrisM
1) Fix for MOS-58EJ8V (Integrator calibration doesn't work properly)
Removed the "patches" from the Y coordinate digitizertoscreen calculation and
changed the Y calibration constants to work with this.
2) Fix for CAR-57RETM (WINSCW UDEB Emulator crashes when launched in console mode)
3) Fix for TAR-58LEUV (Emulator title - variant indication) CR ref MTAR-58LDG2
4) Fix for SHY-58GGR5 (Test case that leads to unhandled exception
in DThread::GetDesMaxLength)
3) Nicolas
1) Fixed defect THY-588MLT (Integrator board with ARM926
core module does not boot). The ARM920 clock setting
code can not be reused as-is for ARM926. Modified
bootstrap to figure out which core is being used and
branch to the appropriate code. A software reset is
necessary halfway through the ARM926 clock
configuration. See comments in HwInitialise for more
details. For ARM926, the clocks are set to:
CPU: 125mhz
system bus: 25mhz
local bus: 31.25mhz (CPU clock / 4)
4) AndrewJ
1) Fixed defect JON-58DHHP where Assabet lffs media driver has an error in
suspend resume operation.
5) MarkCa
1) Fixed CAN-58GG5E (MEDMMC is not leave-safe.) Used non-leaving new in
D_MEDMMC.CPP.
6) PeteS
1) Added Lubbock Base port.
Version 1.02.370
================
(Made by CarlosF, 12/03/2002)
1) JonathanM
1) Fix for defect MET-57ZHTH - "TDblQueBase has incorrect copy constructor
and operator ="
2) Nicolas
1) Fixed defect MET-57YN7A (Power Sequence at EmergencyStandby).
Migrated 6.1 fix: In DPowerModel::PowerEmergencyStandbyDfc(),
PowerEmergencyStandby() is now called for all power handlers
*before* switching off the machine.
2) Fixed defect MET-57YMU7 (Template Port requires 'EARLY
DEBUG' examples in the template code).
3) Modified template port to use the same UART API as
recent ports, e.g. Uart1Data() and Uart2Data()
replaced with UartData(TUint32 aUartBase).
4) Fixed defect THY-585N22 (OOM during process creation
can crash the kernel). Now uses HBufC::New() instead
of NewL() in svProcessCreate() to allocate the
command-line buffer.
3) Markdo
1) Fixed defect DON-585LNV "Media door open does not work on WINS with
Mmc card controller". Removed call from PcCard Controller to set up a
media change callback in WINS. Only MmcCard Controller sets this callback
now.
4) ChrisM
1) Fixed defect MOS-586BWV (integrator had digitizer and mouse driver loaded
in e32 text shell roms). Removed mouse driver from rom.
2) Fixed defect MOS-55DJN4 (New integrator video driver should use constants
rather than magic numbers)
3) Tidied up integrator digitizer calibration.
4) Fixed defect OMC-586LJF assabet rom size
5) Fixed defect OMC-586K5Z mainline warnings
5) Pete
1) Change to the WINS local drive mappings.
The entire local drive mapping for WINS is now as follows:-
Local drive 0: Internal RAM drive (EFixedMedia0) - Y:
Local drive 1: MMC Card on MMC socket 0 (ERemovableMedia0) - X:
Local drive 2: MMC Card on MMC socket 1 - Partition1 (ERemovableMedia1)
Local drive 3: MMC Card on MMC socket 1 - Partition2 (ERemovableMedia1)
Local drive 4: PC Card on PC Card socket 0 (ERemovableMedia2)
Local drive 5: PC Card on PC Card socket 1 (ERemovableMedia3)
Local drive 6: Not currently assigned
Local drive 7: Not currently assigned
Local drive 8: Internal LFFS drive (EFixedMedia1) - W:
2) Implemented CR PHAR-54RJMT 'We should be able to simulate password
protected disks on the emulator'.
1) The method of mapping drive letter to local drive number on the WINS
emulator has been changed from being a fixed mapping, to one that uses
enviroment variables to specify the mapping. When the system starts up
it sets environment variables to reconstuct the same mapping as before:
Y:-LocDrv 0, X:-LocDrv 1, W:-LocDrv8. (This is done in SetupEmulatorPaths()
in \e32\euser\emul\win32\up_path.cpp). However, these default mappings can
overidden or new mappings created in EPOC.INI using the following syntax:
_EPOC_LocDrv_<locDrvNum> <drvLetter>: <FileSystemID string>
The FileSystem ID indicates which file system should be mounted on the
local drive in question. The following file system IDs are defined:
'Fat' and 'Lffs'.
For example, to map X: to local drive 1 specifying the FAT file system:
'_EPOC_LocDrv_1 X: Fat'
The file system ID is read by the text shell as it starts up and mounts the
appropriate file system on any local drive that it finds a mapping for.
2) A start-up media password can now be assigned to any MMC card - again
using environment variables to store the password. Passwords are set in
EPOC.INI using the syntax:
EPOC_LocDrv_<locDrvNum>_PWord_<cardNum> <password>
'locDrvNum' is the number of the local drive and 'cardNum' is the number of
the MMC card on that drive. The latter is only relevant on local drive 1 where
two virtual MMC cards are emulated (with the user hot swapping between cards
by hitting F4 while F5 is down). For example, to set Card0 on local drive 1:
'EPOC_LocDrv_1_PWord_0 aaa1'
3) The start-up state of the MMC card in local drive 1 can be configured to be
any one of the following: No MMC card, MMC Card0 or MMC Card1. The user
subsequently toggles between each of these states each time they hit the F4 key
while F5 is down. The start-up state is set in EPOC.INI using the syntax:
_EPOC_Active_LocDrv_1 <StartUpState>
'StartUpState' can be one of the following values: -1 - card present,
0 - MMC Card0, 1 - MMC Card1. For example, to set the start up state to MMC Card1:
'EPOC_Active_LocDrv_1 1'
6) MarkCa
1) Removed SD specific parts of MMC controller. EPBUSM no longer built for MEIG.
7) TimBa
1) Fix for COY-56DEYY: "MatchesPartial function uses undocumented
feature of CompareC". TDesC16::HasPrefix function added.
Version 1.02.369
================
(Made by ChrisM, 06/03/2002)
0) ArunsakhS
1) Fix for defect BAD-57HF3Y - "Locale persistence broken"
A new HAL atrribute was added to TAttribute in Hal_data.h for the
defect fix above. The new attribute is "ELocaleLoaded".
Made the required changes to "config.hcf" and "values.hda" in HAL
and all the reference platform components. Added the test for
ELocaleLoaded in the test "T_newhal" in HAL.
1) RobertJ
1) Silenced some warnings in:
\e32\drivers\medmmc\epoc\d_medmmc.cpp
\e32\drivers\medmmc\epoc\d_medsdp.cpp
2) Correction of comms header file to correct KCapsBpsxxxx constants
\e32\include\d32comm.h
JAN-57WL3N "Comm port capability constants same, missing"
(was SAS-554K4P in GT6.1)
3) Fixed JAN-57WL8G "Possible access violations in e32 drivers under OOM?"
was HAR-56DPLW in GT6.1
\e32\drivers\dfir\d_fir.cpp
\e32\drivers\ecomm\d_comm.cpp
\e32\drivers\ecommdce\epoc\d_commdce.cpp
2) CarlosF
1) Fixed defect MOS-579LUN powering down digitiser causes machine to hang
when screen is tapped.
2) Changes to Serial Port: the existing power-down timeout after finishing
transmitting has been made configurable through the introduction of a new
member to the comms config structure (this is now TCommConfigV02).
Changes to d_comm.cpp (ARM and WIN32 emulator) to support this. Also when
it powers down as a consequence of having timed out it now completes the
requests with KErrTimedOut instead of KErrAbort.
3) Further changes to the digitiser extension on Assabet and Brutus in order to
fix problems with Silent Running.
4) Fixed defect THE-57LHGD Unable to use the Profiler tool on Assabet.
3) MichaelP
1) Added data member access function TInt BytesToBeTransfered() to class
THwaDataTfReq (k32hwa.[h|inl]).
2) In T_HWA (\f32test\DEVICE\t_hwa.cpp) changed test of "HWA device specific
function (2)": the address that is now used lies within the DSP bridge
shared memory area.
3) Fixed address and size of reserved RAM area in \Helen\Bootstrap\Helen.s.
4) MarkCa
1) Fixed CAN-579MLN MultiMediaCard controller does not pre-check current
password.
5) Nicolas
1) Fixed defect THY-57QNYA (incorrect default debug port
on assabet). The default port is now UART3
everywhere.
7) ChrisM
1) Fix for DON-57RNLR (Screen is not switched on when coming back from digitiser
power-down)
2) Fix for defect PEN-57XBRV ("EPOC Emulator" should be replaced)
Changed the emulator name from EPOC Emulator to Symbian OS Emulator by default.
Name can be specified in epoc.ini with the keyword EmulatorName.
Version 1.02.368
================
(Made by RobertJ, 11/02/2002)
1) ChrisM
1) Fix for defect ROS-55CGCR - "EPOC.EXE logo fails to conform to Corporate ID guidelines"
3) JonathanM
1) Fix for defect MET-572N7U - "Destroying FixedContiguous TransferBuffers causes
memory to be 'lost' to the free pool"
4) Pete
1) Further extended the local drive caps class (TLocalDriveCapsV3)
by adding the following member:-
TUint iExtraInfo;
2) Modified the MMC Media driver to supply the above information as part of
the Media Driver Caps() function.
3) Fixed a defect where the 'iHiddenSectors' field in
the disk caps. info was not being initialised if a default boot
partition wasn't detected in the MBR.
Version 1.02.367
================
(Made by PeterS, 02/02/2002)
1) RobertJ
1) CR CLCT-55JENG. Modified \e32\include\d32usbc.h & \e32\include\d32usbc.inl
argument TInt& aLen for RDevUsbcClient::Write and
RDevUsbcClient::WriteEndpointZero changed to TInt aLen
2) JonathanM
1) Fix for defect FID-563G8A - "TPckgBuf cannot return a const reference"
2) Fix for defect PAR-56MGEB - "Generic EDISP driver lives in the wrong place."
3) Removed last vestiges of Cogent from E32
4) Fix for defect THY-4XPH4C - "T_CURRENCYFORMAT fails from time to time"
5) Fix for defect MET-56UJ35 - "Unhandled Leave in Kernel Server"
6) Fix for defect MET-56VJY6 - "Session creation can crash machine under OOM conditions"
3) MarkCa
1) Added caps buffer zeroing to MEDMMC and MEDLFS on MINT and MINK.
4) Nicolas
1) CR JPAR-54XMZD: ROM building and run time configuration of debug port
- On selected targets the current debug port can be
viewed and changed at run-time thanks to a new eshell
command (debugport). See rombuild release notes for details
about ROM building time configuration.
- Debug port setting applies everywhere (i.e. bootstrap
traces, early debug mode, non early debug mode (variant)
and debug monitor) *but* run-time port switching is not
supported in early debug mode as in this case the port
initialisation is done by the bootstrap.
- The bootstrap fetches the debug port from the ROM
header and copy it to a new field in the the super page.
- A new HAL attribute (EDebugPort) has been added and
a default implementation based on userhal has been provided.
- Assabet port modified. The accepted debug port
values are 1 (UART1) and 3 (UART3). The default is 3.
- Brutus port always uses UART3.
- Integrator (MINT) port modified. The accepted debug
port values are 0 (UART0), 1 (UART1) and 42 (JTAG DCC). The
default is 0.
- KHARDWAREASSIST flag removed. Ports supporting JTAG
DCC output should use the new scheme.
- Modified accordingly the template port
2) Modified bootvariant.mke in MINT port so that a symbol
file for bootromv1.bin is generated.
3) Fixed long standing bug in MISA variants: BOOTMISA.LIB was
not suffixed by a variant-specific identifier. This was
not discovered before as the libraries were identical on
assabet and brutus. The libraries are now called
BOOTMISAAB.LIB and BOOTMISABA.LIB.
4) "abld clean bootmisa" now removes symbol files for both
assabet and brutus.
5) ChrisM
1) Euser source reorg for ipr categorisation CR GBON-567RCZ
- created new directory base\e32\euser\utils
- moved us_array.cpp, us_func.cpp, us_lex8.cpp, us_lex16.cpp, us_heap.cpp
and us_que.cpp into the new dir which has a cat D ipr file.
- created new file us_desx.cpp which contains all the exported constructors
from us_des8.cpp and us_des16.cpp
- created a new header file in utils which contains some inline funcs which
are needed in us_desx.cpp and the old us_des8.cpp and us_des16.cpp files
- + some panic numbers and a few other shared bits.
- removed the exported constructors from us_des8.cpp and us_des16.cpp
Version 1.02.366
================
(Made by MarkCa, 15/01/2002)
1) MarkCa
1) Modified MEDMMC to support partial reads, write-through caching and
multi-block writes. Multi-block writes are a compile-time option
that is not compiled in by default.
2) Removed packed struct optimization from PS_MMC.CPP.
3) Changed debug print statements in D_MEDSDP.CPP so can distinguish
from D_MEDMMC.CPP.
4) Fixed FID-54YK2B (MEDMMC buffer not DMA-safe.) Pages of physically
contiguous RAM are allocated by the EPBUS controller at bootup and
the media driver uses a virtual function to find out where they are.
Note this is a convenience for the principal EPBUS client, i.e.,
MEDMMC / MEDSDU. If other drivers want to be clients of EPBUS, they
should still allocate their own internal buffers.
5) Fixed MBR.H header file to use include guards and #include <e32std.h>.
6) Fixed FID-54VENJ (MMC: Same debug trace used for different functions.)
Changed debug text for DMMCStack::SchedGroundDown().
2) Peter
1) Added support on MMC Card Controller for mechanical write protect switch.
2) Extended the local drive caps class (now extended to TLocalDriveCapsV3)
by adding two extra members:-
TUint iMediaSubType;
TInt64 iTotalDiskCapacity;
3) Added support for multiple Peripheral Bus Controllers.
For all platforms other than WINS, these are now loaded as kernel
extensions which then register themselves with the kernel from
the extension DLL entry-point. Each Controllers register once for
each socket that it controls and the kernel supports up to
KMaxPBusSockets(4) sockets (i.e. the system could support four different
Controllers each managing a single socket, two different Controllers
each managing a pair of sockets etc). The Peripheral Bus Controller
DLLs have been renamed. All used to be build as EPBUS.DLL. Now PC Card
Controllers are built as EPBUSP.DLL and MMC Controllers are built as
EPBUSM.DLL. For non-WINS platforms, the kernel no longer links with the
Peripheral Bus object and a platform can be configured with multiple
Controllers, a single Controller or no Controllers simply by the inclusion
(or non-inclusion) of the Controller extension DLL in the rom OBY file. The
WINS and MEIG platforms now support dual Controllers, both a PC Card
Controller and an MMC Controller. (Note, to achieve this in WINS, the kernel
now links to EPBUSP.DLL and EPBUSM.DLL). Changes to support this include:-
a) Added the function:-
void Kern::RegisterPBusController(TPBusNum aMachineBusNum,
DPeriphBusController* aController,TPBusNum aControllerBusNum)
which should be called from the Controller extension DLL entry-point for
each bus that the Controller manages in order to register that Controller
for that bus. 'aControllerBus' is the number of the bus relative to that
particular Controller as opposed to 'aMachineBus' which is the bus number
relative to the entire machine (e.g. on a machine configured with two
Controllers each managing two buses, then when the 2nd controller registers
for it's 2nd bus, the machine bus number of this is 3, but the number relative
to the 2nd Controller is 1).
b) With there now being potentially multiple Controllers,
the function to retrieve the pointer to the Controller now takes a bus
number as a parameter and becomes:-
DPeriphBusController* Kern::PBusController(TPBusNum aMachineBusNum)
c) Added the function
TPBusNum Kern::PBusControllerBusNum(TPBusNum aMachineBusNum)
which returns the bus number relative to its owning Controller for a given
machine bus number.
d) The kernel now keeps a count of Controller registered. This means the
platform specific HAL function ImpHal::TotalSupportedBuses() is now
redundant and has been removed.
e) Modified the extension DLL entry-point function for the generic
Peripheral Bus Controller to allocate the Controller object and perform
secondary initialisation before registering the Controller with the kernel.
This makes the function P::InitialiseLocalDrives() redundant and it has
therefore been removed. Also, the function DPeriphBusController::NewL() is
no longer exported. (Still exported from WINS Controllers which aren't
extensions and therefore still need to to initialised directly by the kernel).
f) Removed the function DPeriphBusController::TotalSupportedDrives() and
replaced this with a straight call to the variant of the same name:
Custom::TotalSupportedDrives().
Following on from this, removed the data member iTotalSupportedDrives
from the classes TPcCardMachineInfo and TMmcCardMachineInfo.
g) Added the pure virtual function:
TPBusNum DPeriphBusController::BaseBusNumber()
to the generic Peripheral Bus Controller class which returns the
machine bus number of the first bus under the control of this Peripheral
bus Controller. Provided implementations of this in the DPcCardController
and DMMCController classes. These read the required information from the
corresponding TPcCardMachineInfo and TMmcCardMachineInfo classes. Added the
corresponding data member iBaseBusNumber to each of these classes which
is supplied from the variant.
h) Constructors for TPBusCallBack made inline rather than being exported
from the Peripheral Bus Controller so that the kernel no longer needs to
link with EPBUS.LIB.
i) Moved the function:
DPBusMediaDriver::SetCurrentConsumptionInMilliAmps()
to the Media Driver base class - DMediaDriver and removed the function
DMediaDriver::DeltaCurrentConsumptionInMilliAmps() which was now redundant.
Also added a destructor to the DMediaDriver class to reset the current
consumption when the object is destroyed. This again required in order that
the kernel need no longer link with EPBUS.LIB (as this needs to reset
the media driver current consumption on a media change - with object
destruction not occuring until the next mount).
j) Change to the WINS local drive mappings to include emulation of PC Card
drives as well as MMC drives.
The entire local drive mapping for WINS is now as follows:-
Local drive 0: Internal RAM drive (EFixedMedia0) - Y:
Local drive 1: 1st special MMC Card on MMC socket 0 (ERemovableMedia0) - X:
Local drive 2: 2nd special MMC Card on MMC socket 0 (ERemovableMedia0) - V:
Local drive 3: MMC Card on MMC socket 1 (ERemovableMedia1)
Local drive 4: PC Card on PC Card socket 0 (ERemovableMedia2)
Local drive 5: PC Card on PC Card socket 1 (ERemovableMedia3)
Local drive 6: Not currently assigned
Local drive 7: Not currently assigned
Local drive 8: Internal LFFS drive (EFixedMedia1) - W:
k) For MEIG, MISA and MTEMPLATE platforms, the Peripheral Bus variant interface has
been removed from the variant DLL and is instead built as a separate kernel extension - either
as EPBUSPV.DLL for PC Card Controller variants or EPBUSMV.DLL for MMC Controller variants.
For these platforms, registration of the Controller with the kernel takes place via a call
from the Controller variant extension DLL entry point rather than from the Controller extension
DLL entry point. For all other platforms, the Controller variant remains as part of the main
variant DLL. These platforms therefore have no separate Controller variant DLL.
As a result of this change, the Controller DLL entry
point has been moved out of the generic layer of the Peripheral Bus
Controller (PS_PBUS.CPP) into the ASSP layer.
Splitting the Controller variant out of the main
variant DLL is necesssary where there are multiple
Peripheral Bus Controllers on a platform - otherwise the variant DLL has to contain
multiple Controller variants.
l) Deleted V32PCCD.H, and V32PCCDI which were being used as a general definition of the
PC Card Controller variant interface for all platforms. Each peripheral bus ASSP layer
should define its own variant interface as required for that impelementation. This
should be defined in the header file \e32\epbus\epoc\<assp>\v32pccdv.h (or v32mmcv.h
for MMC Controllers). Implemented this for all supported platforms.
NOTE: The power model extension - EPOWER.DLL must be loaded before any Peripheral
Bus Controller extensions - EPBUS?.DLL or EPBUS?V.DLL (i.e. in the OBY file, the
lines that specify the inclusion of EPBUS??.DLL must occur after the line which
specifies the inclusion of EPOWER.DLL).
3) RobertJ
1) Changed string descriptor text in pa_usbc.cpp to remove reference
to EPOC and ER6.2
2) Removed function CopyMaxToClient in d_usbc.cpp, this was in effect a
duplicate of CopyToClient. Code now uses CopyToClient in all cases.
3) In usbdma.cpp & k32usbc.h changed interface to
TDmaBuf::RxCopyPacketToClient & TDmaBuf::RxCopyDataToClient to take
an explicit length argument. This removes the need to modify the
TEndpointTransferInfo
Modified d_usbc.cpp to reflect change in the calling interface to
TDmaBuf::RxCopyPacketToClient & TDmaBuf::RxCopyDataToClient
4) MichaelP
1) Fixed compile time error in /e32/drivers/ehwa/d_hwa.cpp which only occurred
when GETPUTDATA_ARE_KERNELSERVERCALLS had been #defined.
2) Added parameter 'TInt aNumWindows' to functions DHwaTask::Init() and
THwaTaskHwInterface::Init(), which are declared in k32hwa.h.
3) Introduction of boolean flag iInUse to class THwaDataTfReq: used to identify
transfer requests which are currently being processed by the PDD.
4) HWA bogus PDDs: changed order of calls to DHwaTask::GetNextRequest to account
for change no. 3).
5) Moved HWA device state member iStatus from class DHwaDevice to class
DHwaDevicePdd; maintaining its correct value is now up to the PDD.
Version 1.02.365
================
(Made by AndrewJ, 12/12/2001)
1) Morgan
1) Integrated DPassiveDebugger enhancements from \tools\debugger_stub\...
into Helen variant: \helen\debugger\...
2) ChrisM
1) Fixed MET-54HLQA (T_NEWHAL tests fail)
2) Fixed MET-555GLS (On WINS HAL function EDisplayMemoryAddress should return the Window Handle)
3) Dennis
1) Fixed HEY-54JJ9Y (DPlatLibrary not filled in for some loads)
4) JonathanM
1) Fix for 6.1 defect MOS-54NLHX - "__PROFILE_DISPLAY macro in e32def.h has error"
5) WilliamRo
1) Fixed ROS-54MGXX "WINSCW builds enable C++ exceptions and RTTI" by adding
appropriate #pragmas to the __CW32__ section of e32def.h
6) Nicolas
1) Fixed MOS-54QM2W (Building bootstrap MMU layer &
special bit patterns in permissions): The MMU
permissions are now global variables defined in the
variant part of the bootstrap and used by the generic
ones.
2) Removed the write-through version of the generic
bootstrap MMU library. This was used only by the
Helen port which now uses the same code as everything
else and selects write-through behaviour by changing
the MMU permissions in the variant (see previous
entry). See commented out code at the top of helen.s
and helenc.cpp to switch between write-back and
write-through.
3) Fixed THY-54XJFZ (When fast RAM used, cache should be
disabled for kernel stacks, data and heap). When
those entities are in DRAM, they are always cacheable.
When they are in FRAM, they are mapped using the map
flags specified in the FRAM bank. This allows to
enable/disable the cache on a per-bank basis.
7) RobertJ
1) Fixed HEY-54JME9. Removed mini-loader
"Drive specifier missing on libraries loaded with the mini-loader"
8) MichaelP
1) Removed /e32/drivers/ subdirectories ecommdma and emcbsp. These two drivers were
introduced by the Helen port and are actually TI-specific. Since they are not even
used by the current Helen port, we can safely get rid of them.
9) PeterH
1) Integrated changes to DEF files from the mainline.
Frozen exports are now marked with the R3UNUSED flag where appropriate.
This is to support the thumb stub optimisation where the R3 register is
use to generate a smaller import stub for a function if it isn't used to
receive parameters.
10) MarkCa
1) Updated MLNK EPBUS port to detect all events in ISR.
2) Reduced EPBUS by c1.2k by using packed TMMCCommandSpec structure.
Version 1.02.364
================
(Made by MichaelP, 20/11/2001)
1) MarkCa
1) Changed DFlashDevice::SetupWrite() in \integratorap\lffs\flashfile.cpp
to use wrapper class for testing if write buffer available instead of
testing bits in 32bit value.
2) Fixed CAN-547HD3 (Controller panics when no events to handle.)
2) RobertJ
1) Corrected coding comments in d_usbc.cpp & minor clarification in pa_usbc.cpp
2) Implemented new USB VID.
3) Further cleanup work following deconfiguration on USB client SIN-535KPU
4) Propagated fix for PBN-4TKJ7J "Bluetooth panics with HCI error 23".
In \brutusa\vi_com2.cpp, reordered ISR rx now done first
then tx, removed uart tx busy spin.
3) Nicolas
1) Fixed FID-53YD58 (Bootstrap doesn't dump all MMU
pages): off-by-one error.
2) Enabled cache for exception vector page when it is in
DRAM (cache still disabled if the page is in fast RAM
as TC RAM and cache are not compatible).
4) ChrisM
1) Fixed ALM-53LHP4 (Fixed Calibration settings are not saved). Assabet only defect,
problem was in the variant vi_xyin.cpp in DDigitiserSA1100::DigitiserToScreen.
2) Fixed FOD-54MET2 (Display bytesPerLine calculated as bits not bytes). Fixed the problem in template port + integrator.
5) AndrewJ
1) Fixed DOM-4XWC5P (Medlfs driver is not reliable) This problem was concerned with
flash devices not erasing properly when suspended, on assabet boards. This was
fixed by not suspending an erase unless both chips have gone into suspend mode
properly.
2) Fixed FID-53YDJC (Error LFFS driver SetupWrite() function) Semi implemented
suggestion in defect report though still need to issue dummy command after
correct register has been read, otherwise command issued does not work.
6) JonM
1) Implemented change request JMET-544FUM - "Change RTransferWindow::MapInBuffer() to
return error code and not panic"
7) CarlosF
1) Fixed MOU-543FVR HAL attribute ECaseSwitch returns wrong value for Assabet.
The following files were modified:
\assabetb\hal\config.hcf
\assabetb\hal\values.hda
\assabetb\lffs\loadlffs.cpp
\assabetb\vi_hal.cpp
\hal\inc\hal_data.cpp
\hal\tsrc\t_new_hal.cpp.
Fixed FRS-534EWW T_SERIAL fails on Assabet. The following files were
modified:
\assabetb\bmisa\visaabu.def
\assabetb\v32scpld1111.h
\assabetb\vi_com1.cpp
\assabetb\vi_com3.cpp
\assabetb\vi_cpld1111.h
\assabetb\vi_hw.cpp
\assabetb\vi_power.cpp.
8) MichaelP
1) HWA API implementation now corresponds to API document version 0.15:
a) Removed enum TTaskPriority from d32hwa.h (was not used).
b) Two new functions in class RHwaTask:
TInt PutData(RTransferBuffer& aBuf, TInt aBytesToBeTransfered,
TInt* aBytesTransfered=NULL, TInt TransferId=KTfBufIdNull);
and
TInt PutData(RTransferBuffer& aBuf, TRequestStatus& aStat,
TInt aBytesToBeTransfered, TInt* aBytesTransfered=NULL,
TInt aTransferId=KTfBufIdNull);
which allow the user to specify the number of bytes to be transferred to the
DSP (rather than the whole buffer).
c) New member in class TTaskDataTfInfo (d32hwa.h): TInt iBytesToBeTransfered;
d) Renamed THwaPanic enums from EHwaXxx to EHwaPanicXxx (k32hwa.h).
e) Added virtual destructor for class THwaTaskHwInterface to prevent resource
leaking in derived classes.
f) Removed function TInt DHwaTask::Priority() (was not used).
g) New member in class THwaDataTfReq (k32hwa.h): TInt iBytesToBeTransfered;
h) Removed data member iPriority from class DHwaTask: moved to class
THwaTaskHwInterface; thus the task priority is now managed entirely by the PDD.
i) Added three additional arguments to TInt THwaTaskHwInterface::DoInputFrom(const
DHwaTask& /*aTask*/, TInt /*aOutputIndex*/, TInt /*aInputIndex*/,
TInt /*aConnectionId*/) to pass the task index and connection ID information to
the PDD.
j) Made function void DHwaDevice::SetStatus(THwaDeviceStatus aStatus) public
(was: protected).
k) Merged two functions of class DHwaDevice
TInt TaskCallPutData(DHwaTask* aTask, const TAny* aArg);
TInt TaskCallGetData(DHwaTask* aTask, const TAny* aArg);
into one function
TInt TaskCallTransferData(DHwaTask* aTask, const TAny* aArg, THwaDataTfDir aDir);
l) Fixed kernel heap memory leak caused by incorrect call to S::TransferWindowClose()
in destructor DHwaTask::~DHwaTask().
2) USB client implementation:
a) Added "#define SET_DESCRIPTOR_REQUEST_SUPPORTED" to k32usbc.h (in commented-out
form).
b) Added "const TUint16 KUsbVendorId_Symbian = 0x0E22;" to usb.h (USB-IF assigned
Vendor ID).
Version 1.02.363
================
(Made by Dennis 26/10/2001)
1) MarkCa
1) Updated Linkup MMC port with event checking asserts.
2) Modified P32MMC.H to allow per-platform configuration. The file
can only be included into ASSP-specific builds. It reads a header
file MMC_CFG.H from \epoc32\include\kernel\ASSP.
3) Fixed FID-4ZKEKQ (Inefficient memfill in MMC driver.) Use Mem::Fill()
instead of loops to fill buffers with 0xff in DoFormat() for
DMmcMediaDriverFlash.
2) Nicolas
1) Fixed THY-52WJTE (DLL static data support doesn't
allow for DLLs which only have BSS): The "$DAT" chunk
which holds the initial content of the DATA section is
not created when there is no DATA section.
Additionally it is not created for ROM-based DLLs as
the initial content is fetched from ROM in that case.
2) Fixed generic bootstrap defect FID-53BKSD (920T
MMU_Invalidate is wrong): The ARM920T version of that
function now only invalidates TLB and I-cache.
3) Fixed kernel defect THY-53FE32 (Confusion between
TheKernelPage and TKernelPage ctor)
4) Fixed generic bootstrap defect THY-53LC9Y (crash when
only exception handlers and supervisor stack/heap in
IRAM). Reversed exception code and supervisor
heap/stack allocation order in fast RAM to ensure that
stack/heap always at top of bank where the bootstrap
stack is. Otherwise the adjusted stack value after
enabling MMU is wrong.
5) Fixed generic bootstrap defect FID-53LKTG (Bootstrap
test code: heap test is useless, author should be
shot). Kernel data is now really checked.
6) Modified bootstrap tests to take into account possible
exception vectors relocation to highmem.
7) Removed deprecated "screensize" keyword from bootstrap
test obey files.
3) ChrisM
1) Fixed WIR-53FANN (RArrayBase::HeapSort makes assumption about max iEntrySize value)
Changed temp buffer in HeapSort functions to use the const KSimpleArrayMaxEntrySize
2) Fixed MOS-53FLUF (HAL attribute ordering incorrect). Moved EPenState from
before EKeyboardState to after ESystemDrive.
3) Fixed MOS-53RHP3v(Screen width and height returned by HAL are constant). Added func
to hal\src\emul.cpp to return the current sizes defined in epoc.ini.
4) Carlosf
1) Changes to Assabet Variant to fix a problem with the External Interrupts
dispatching. Modified \assabetb\vi_hw.cpp.
2) Fixed BAN-52BKKC Physical device driver for serial port have a defect and
can cause loss of data.
5) Pete
Migrated the fixes for the following 6.1 defects:
1) Fixed PAS-4WRMQS: "Requeing a read() after PowerOn Panics the Driver/Kernel".
Problem caused by driver registering for PC Card IREQ events twice without
de-registering in between. This causes a panic in the PC Card Controller.
- Modified the Brutus and Assabet PC Card serial PDDs
(DITXBA4.PDD/DITXAB4.PDD) so that rather than registering and de-registering
for notification of PC Card IREQ events whenever they need to disable serial
interrupts, the drivers keep the notification request registered - and simply
enable and disable IREQ events on that socket.
- Changed the PC Card Controller so that registering a TPBusCallBack object
for event notification (with DPcCardController::RegisterEvent()) which is
already registered returns an error rather than causing a kernel panic.
- Modified the PC Card Controller by adding support for a new configuration
request flag: KPccdConfigOverrideNormalPwrEvents. If a configuration is
requested (via DPcCardController::RequestConfig()) which contains this flag
setting then normal machine power handling by the Controller for the socket
in question will be disabled - leaving the PC Card Controller client to
implement its own power handling policy. This only applies to machine power
on/ power off events. The Controller will continue to handle emergency power
down and media change events. The power handling override will remain in
force as long as the configuration is applied (i.e. this condition is removed
following a call of DPcCardController::ReleaseConfig(),
DPcCardController::DeregisterClient(), a media change event etc). This
feature is required to support PC Card serial cards in order to support the
'idle off' power policy which serial ports now implement. Without this, even
though the PC Card serial driver will ignore a machine power down call when
it still has a write request in progress, the PC Card Controller will still
turn off the VCC supply to the card and thus power it down.
2) Fixed SCE-534GAE: "Problems with Serial Comms LDD power handling"
- Modification to the serial port LDDs, ECOMM.LDD (including the WINS version)
and ECOMMDCE.LDD to fix a problem with the way it implements the 'idle off'
power policy. Although it currently ignores Power-Off notifications, it does
not ignore Power-On notifications and instead completes any outstanding request
with KErrAbort. Hence, if the machine happens to be powered off and then back
on again before the serial port has had an inactivity timeout, any outstanding
requests will wrongly be completed with KErrAbort as the machine turns back on.
- Another problem fixed is associated with the fact that the
current comms driver power handler doesn't actually power the
device down on a normal power down event. However, the driver
itself uses the power model at other times to control power
to the device (e.g. when closing the driver). Hence,
DChannelComm::DoPowerDown() is never called and the driver
closes leaving the comms h/w powered up. This is now fixed,
with the driver calling DoPowerDown directly when required.
3) Fixed SCE-52YHQE: "Serial change notifier problems".
6) WilliamR
1) Fix defect ROS-53TDGG "Access Violation in CreateFirstDllRefTable" by allowing for
GetModuleHandleA to return 0. This is essentially the same code as used in
CreateDllRefTable() which handles dynamically loaded DLLs.
Version 1.02.362
================
(Made by ChrisM, 05/10/2001)
1) CarlosF
1) Port defect fix for defect ALM-4VQB5V Ditizer freezes (was: The Brutus
board freezes after entering 50-60 characters with HWR) from 6.1.
Modified \assabetb\vi_xyin.cpp and \brutusa\vi_xyin.cpp.
2) MarkCa
1) Fixed FID-4ZWDMZ (MMC program poll is too slow to be useful.)
Use TMilliSecondCallBack instead of TTickLink. Pure virtual DMMCStack
function ProgramPollPeriod() replaced with pure virtual DMMCController
function ProgramPeriodInMilliSeconds().
2) Moved Integrator LFFS drive to k:. ImpHal::TotalSupportedDrives() now
returns 9 instead of 2, as does unused Variant::PeriphBusMachineInfo().
MEDLFS changed to use 22MB of flash across three pairs of chips.
The memory range is a contiguous block, which can be specified at
compile time in \integratorap\lffs\ffs_config.h.
3) JonM
1) Fixed defect FER-4XDK9G - "Assabet timers go off at strange intervals."
2) Fixed defect MET-52AF29 - "Power off/on may freeze Assabet/Brutus"
3) Fixed defect in TSa1100::SetRtcData. This needed to wait longer for the new value to take effect.
4) Moved HELEN's exported headers from E32 to the HELEN variant.
This helps fix defect MAY-4XWM9Q - "e32 does not build in an IPR-E OCK".
It also moves what should probably be IPR category B stuff from a cat E directory.
4) MichaelP
1) HWA API implementation now corresponds to API doc version 0.14
a) THwaTaskHwInterface::DoCloseTask() now has a parameter TBool
aCallbackRequest which indicates whether or not the PDD should
finally call DHwaTask::CloseComplete()
b) RHwaTask::Logon() now has a second parameter TUint aFlagsWord which
can be used to make a logon request more specific
c) RHwaTask functions Start(), Suspend(), Resume(), and SetPriority()
are now asynchronous; however this is transparent to the user as the
asynchronousness is wrapped up in the d32hwa.inl inline header file
d) Renamed DHwaTask::DoLogonComplete() to LogonComplete()
2) USB PIL: Endpoint Data Toggles are now correctly reset after Set_Interface and
Set_Configuration requests.
5) AndrewT
1) Fixed BAN-52BKTN (CAsyncCallBack ctor TCallBack& could be const). Made
the TCallBack parameters to the constructor and Set() const.
2) Fixed BAN-52BKV2 (Should inline TInt RSubSessionBase::SubSessionHandle() be
const?). Added const to this member.
3) Fixed THE-52WJR6 (Equality operators for TThreadId and TProcessId should be
const). Made the accessor and comparison operators const on these classes.
6) RobertJ
1) Incorrect behaviour in usb client after getting deconfigured then
configured, without an intervening reset.
Data toggles were not getting reset,
ldd wasn't cancelling user requests,
PIL layer wasn't cancelling ldd requests and
psl layer was trying to drain fifo because RPE bit was set.
RPE will get reset on next read when RPC gets cleared and fifo is
automatically emptied.
2) Fixed FID-52HBTA: USB driver not leave safe
3) Fixed ROS-534EAV: usbdma.cpp mixes new[] and delete
7) ChrisM
1) Fixed PAR-52CLSB (920T bootstrap code is Cat D it should be Cat E). Changed
categorisation to E after source code recategorisation CR - CMOS-52WJ5V
8) Pete
1) Removed Cogent source
2) Removed Windermere source
3) Removed MEDCRM and MEDCRR media driver source.
Version 1.02.361
================
(Made by AndrewT, 31/08/2001)
1) AndrewT
1) Fixed EDNATHE-4QQKZM (RThread().Suspend() deadlocks the emulator) again.
The original fix was incomplete.
2) Fixed HEY-4XHGD5 (Remove \e32\include\K32DBGDD.H)
3) Fixed MET-4YSM3M (Text shell DIR command problems)
2) Nicolas
1) Fixed FID-4VHGDK (Debug should show current thread
after exception). When a thread or process panics or
takes an unhandled exception, the name and ID of the
thread/process is displayed in the kernel traces (only
if KPANIC is set).
2) Replaced void GetExceptionVectorsInfo(addr, size) with
TUint32 ExcVectorsAddr() in generic bootstrap because
vector table size not used anymore. Documented that
in bootstrap doc version 1.2.
3) Small changes following RHR 113.2 (exception code in
fast RAM) review.
4) Exception vectors are now moved to highmem on assabet.
5) Updated makefiles used to build bootstrap tests for
MLNK, MINT and VTEMPLATE now that the generic test
code is contained in libraries.
3) Chris
1) Fixed problem with cirrus not turning display on introduced with LCD changes for GT111
2) finished implementation of mapping video chunk from more than one physical region
3) Updates to video driver code from code review. Split video driver up into bit which needs porting and the interface.
4) Changes to video driver for CR LROS-4Z7E7Z to allow scdv get all display modes
5) updated video test code to include tests for palette when not in palettized video mode and updated assabet and brutus
to report if backlight is supported via HAL and fixed inconsistency between assabet,brutus and the template reporting
different error value if palette functions called on a none palettized video mode.
6) Fixed FID-4ZGJ2L WINS/WINC doesn't handle command line args correctly. If executable command path
has spaces it will be quoted. If a quote is found it skips until the next one.
7) Fixed MOS-4Y4D9K Two taps on screen required to turn on display.
4) AndrewJ
1) Fixed THY-4YCP96 stopped Null pointer from being derefrenced in LFFS media driver
5) JonM
1) Fixed defect FID-4WUGL4 - "MMU secondary config is annoying"
The MMU secondary config is now obtained from a constant (KMmuSecondaryConfig) contained
in the bootstrap's variant library.
2) Fixed defect FID-4XTC27 - "Bank width corrupted in BDB"
3) Fixed defect FID-4Y3CP3 - "Should fill unused Rom config blocks"
4) TransferBuffer performance greatly improved.
5) API CHANGE: DTransferWindow::MapInBufferL is now non-leaving and has been
renamed to MapInBuffer.
6) Fixed bug in DPlatProcess::RemoveChunk, this no longer flushed the data chache
when removing EFixedAddress chunks.
7) Extended T_HWA test to include a benchmark test for PutData. Also made this
work on Integrator.
8) Fix for defect PAR-4VMKV7 - "WD_VT100 has lost its basic nature and now depends on the Comms drivers!!"
WD_VT100.CPP Has now reverted being output only, via the debug port.
The implementation using the ECOMM driver has been added as WD_VT100_ECOMM.CPP
9) Fix for defect FID-4YTET9 - "Manufacturer in HAL should be a UID"
(Made TManufacturer definition obviousely extendable by using UIDs.)
10) Fixed defect SAS-4ZTD5D - "Missing l7200a t_trace.cpp file for bootstrap tests"
Also fixed build failure with Integrator bootstrap test code.
11) Fixed defect SAS-4ZSGBU - "Exports inconsistent. v32isaab.h includes not exported"
12) Fixed defect FER-4XGDVT - "Integrator can't cope with time being set randomly"
13) Removed #include <e32transbuf.h> from e32std.h
6) MarkCa
1) Implemented MEDLFS driver for Integrator. Mounts on local drive 1
and provides access to 2 * 4Mb flash chips. ELFFS is not mounted
by default.
7) CarlosF
1) Changes to Assabet bootstrap and Variant to make Assabet's CPU and Memory
bus clock speed configurable. Also includes an option to always format the
C:\ drive on start-up if LFFS filesystem is mounted on this media.
2) Changes to SA1100 ASSP to enable WAIT signal detection on Assabet PCCard
IO accesses. This is required as the Assabet controller needs to be
configured to detect the assertion of this signal on accesses to IO space
contrary to Brutus which has this detection enabled by default.
8) TimBa
1) Folding now folds 0xA0 (non-breaking space) to normal space (0x20)
9) Andy Curran (Uikon)
1) Fix for (PER-4Z5DW6) Switch On/Off Control Panel Dialog case closed option does not work.
Really just correcting a few typos. Fix tested with success. Fix accepetd by Nicolas T.
10) MichaelP
1) Updated Helen port (mhelen target) to 6.1 port sources from 30 July
2001 (Perforce revision 10426). Many changes, among them items 2) - 6).
2) Added directory stdarmWT (containing some files) under /bootstrap/mmu/:
"Bootstrap MMU Write-Through Mode."
3) Added directory ecommdma (also containing some files) under
/e32/drivers/: "Implements the Logical device driver for a serial port
using DMA transfers." This driver is used by the mhelen target.
4) New kernel exports for mhelen:
THelen::ReadIntMask(unsigned int);
THelen::SetMcBspReg(unsigned int, unsigned int, unsigned int);
THelen::SetComBSPStatus(int);
5) Re-activated #define __EARLY_DEBUG__ in
\e32\ekern\epoc\arm\Helen\KA_UTL.CPP.
6) Added file \e32\rombuild\HelenTests.oby.
7) HWA API: RHwaTask functions GetData / PutData are now kernel exec calls
(as opposed to kernel server calls) --> significant performance
increase.
The previous behaviour (i.e. server calls) can be had by uncommenting
//#define GETPUTDATA_ARE_KERNELSERVERCALLS in d32hwa.h.
8) HWA API: Constant value changed: KTfBufIdNull = 0x0 (was: 0xf0000000).
9) Added overloaded function
DTransferWindow* Kern::TransferWindowFromHandle(TInt aHandle, DThread* aThread);
to \e32\include\k32std.h, exported and frozen for all targets. Function
is implemented in \e32\ekern\ks_transbuf.cpp. This function is used
where the current thread is not the same as the one that created the
window handle.
10) T_HWA has now integrated profiling support, activated by calling "t_hwa
profile".
11) RobertJ
1) Added a new constructor each for RArray and RArrayPointer. This enables
the sort/find to be used with an existing array with memory allocated
outside of these classes.
Version 1.02.360
================
(Made by Peter, 06/08/2001)
1) MarkCa
1) Fixed FID-4X8JKB (TMMCCommandDesc::Direction() should be const.)
2) Fixed MMC controller defect in ExecCommandSM() / EStDeselectEndCheck
where cmd was not reset after the stack was popped.
3) Optimized DMMCcontroller::PowerUpBus() to initialize stack once for
all drives. Check if initialized successfully and still powered up.
If so, complete immediately. Retain ability to power down and power
up again if failed because of unknown password (CMD3 RTO.)
2) Chris
1) Changed brutusa\video.mmp to use visaba.lib not visaab.lib and cixyba.lib not cixyab.lib
2) Updated headers and removed dead code from files changed for LCD driver improvements.
3) Removed "screensize" keyword from header.iby files
3) AndrewT
1) Fixed NEO-4X8CFY (TTime::WeekNoInYear() function returns wrong
week number if week start day is not monday). Rewrote the
second half of the offending function to do the right calculations.
4) Michael
1) Commented out #define __EARLY_DEBUG__ in
\e32\ekern\epoc\arm\Helen\KA_UTL.CPP.
2) Deleted line "screensize=320x240x12" from
\e32\rombuild\mhelen\header.iby.
3) Added to \hal\inc\hal_data.h enum TManufacturer
"EManufacturer_TexasInstruments" and enum TMachineUid
"EMachineUid_Helen=0x101F3EE3".
4) HWA API:
a) Introduction of concept of input and output index for tasks with
multiple I/Os. These indices are additional (& optional) arguments for
RHwaTask functions InputFrom(), DisConnectInput(), InputConnection(),
and OutputConnection(), and are also part of class TTaskConnectInfo.
b) New RHwaTask querying functions: GetTaskProperties() and
GetTaskStatus().
c) With these come two new classes: TTaskPropertyInfo (this not new but
updated), and TTaskStatusInfo.
d) RHwaDevice::Tasks() now returns a find-handle -- the handle is no
longer a component of the filled TTaskPropertyInfo structure.
e) RHwaDevice::CreateTask() has an additional parameter aNumWindows (#
of transfer windows for DHwaTask object).
f) RHwaTask functions Logon() and LogonCancel() are now void.
g) RHwaTask::SetOwningDevice() is now a protected class member and no
longer documented in the API doc.
h) Class RHwaDevice is now a friend of class RHwaTask.
i) Removed RHwaTask functions GetStatus() and GetTaskID().
j) Removed RHwaTask default constructor (was empty).
k) Removed enum THwaTaskLogon (was not used).
5) Nicolas
1) Modified MCOY bootstrap to take into account the super
and CPU pages layout changes introduced in E32 359.
2) MCOY ASSP layer now contains static arrays for the
various stacks and initialises the PP::* and Arm::*
stack "top" pointers. Note that it would be possible
to perform the stack allocation in the bootstrap
instead.
3) Fixed MAY-4V4E5V (Breakpoints don't work on ARM
architecture 5 processors). Now two opcodes in the
undefined space are used: a 16 bit one for THUMB and a
32 bit one for ARM (previously a unique 16 bit pattern
was used). RDebug::SetBreakPoint() has now a new
overload which allows to specify what kind of
breakpoint is excepted. The old overload is
deprecated (it returns KErrGeneral systematically).
4) Cosmetic changes to bootstrap and kernel following
code review.
5) Removed dubious assert from bootstrap which crashed
Brutus when warm-booting: MarkRamImageInBank() can
actually be called with a BDB containing
KBdbBankTypeRamAsRom in that case because the BDB
initialised during cold boot is reused. This allows
to skip bank size/width detection.
6) William
1) Add CleanupArrayDelete template to E32BASE.H, and remove the __EPOC_CLEANUP_SUPPORT__
include guards to complete Epoc32 Proposal SW1-87 (See STORE 0049 notes from 1998)
2) Export EKDATA.DEF so that ASSPs can get it from a published place, rather than
referring to ..\e32\bmarm\ekdata.def. Modified various MMP files to get this file
from \epoc32\release\marm\ekdata.def instead.
7) Pete
1) Fixed FID-4XEE3C "Remount of fixed media broken". Change to the function
DPrimaryMediaBase::NotifyMediaStatusChange() which is called on media
change, but more significantly when forcing a remount on a drive. The change
involves only attempting to reset media driver current consumption if the
media is removable (since only drivers for removable media track current
consumption). This fixes a problem where the kernel heap became corrupt when
forcing a remount on a fixed drive.
2) Added the following functions to the TBusLocalDrive class:-
a) TInt SetMountInfo(const TDesC8* aMountInfo,TInt aMountInfoThreadHandle);
The SetMountInfo() function allows a descriptor to be associated with
a local drive - which is passed down to the corresponding media driver for the
drive as that driver is opened. This therefore provides a means of supplying
additional information to the driver at creation time. In the case of 'secure'
drives, a driver may not open successfully unless the correct mount information
is supplied at creation time. Mount information, once passed into the drive, is
stored in the correspnding DPrimaryMedia object for the drive and is therefore
available for subsequent remounts of the drive following media change or machine
power down events. Mount information can be cleared by passing in a NULL mount
info descriptor.
b) TInt ForceRemount(TUint aFlags);
This forces a local drive to be remounted. This is a replacement for the
function UserSvr::ForceRemountMedia(TMediaDevice aDevice) since the latter
requires knowlege of the h/w platform in quesion in order to select the
appropraite TMediaDevice value for a particular drive.
3) Added SetMountInfo() function to TLocDrv class and modified TLocDrv::Open()
so this no longer takes a 'const TDesC* aMountInfo' parameter. Corresponding
change to DMedia::Open() function which also no longer has a
'const TDesC* aMountInfo' a parameter. The mount info is intead stored in the
DPrimaryMedia class which has two new functions:-
TInt SetMountInfo(TLocalDriveMessageData &aMountInfo,TInt aMediaNum);
TMediaDrvDescData* MountInfo(TInt aMediaNum);
4) Change to DMediaDriver class which now supplies the DoCreate() function and instead
requires a derived driver class to supply the pure virtual function:-
Int Open(TMediaDevice aMediaDevice).
In most cases, convertion of existing non-removable drivers will require the existing
DoCreate() function to be renamed Open().
Version 1.02.359
================
(Made by JonathanM, 18/07/2001)
1) Morgan
1) Implemented CR MHEY-4XHN9D "Move DPassiveDebugger implementation out
of the core kernel"
Exported the following functions and K32DBG.H
ImpMmu::AllocatePageTable(unsigned long, unsigned long, int)
DPlatProcess::DataSectionBase(DPlatChunk *) const
ImpMmu::FreePageTable(int, int)
Moved ka_edbg.cpp from all ASSPs and
\e32\ekern\epoc\arm\kc_edbg.cpp into a device-driver/extention in
\tools\debugger_stub\passivestub\...
2) Removed DDebugger initialisation calls from boot.
A DDebugger implementation should load itself as an extension or a
device driver, and install using Plat::SetDebugger(debugger);
3) Added __ENABLE_NOTIFY_DEBUGGER__ macro to enable/disable debug support
in the kernel. Currently on in UREL and UDEB builds by default.
4) Cogent passive debugger now lives in \tools\debugger_stub\passivestub
and is built as EDEBUG.LDD. Include this as an extension to get
Lauterbach OS aware debug. Or load it as an LDD with DEBUGGER.EXE
"DEBUGGER load" from the command line
5) Helen debugger now lives in \helen\debugger and built as EDEBUG.LDD
See 4) for usage.
2) Nicolas
1) The kernel data/bss section can be relocated to any fast
RAM bank by setting KBdbFlagKernelData in the
appropriate BDB bank descriptor (generic bootstrap
only).
2) The supervisor stack/heap can be relocated to any fast
RAM bank by setting KBdbFlagSvStackHeap in the
appropriate BDB bank descriptor (generic bootstrap
only).
3) The kernel stacks (reentrant, null, irq, fiq, exception)
can be relocated to any fast RAM bank by setting the
relevant bit (KBdbFlagStack*) in the appropriate BDB
bank descriptor (generic bootstrap only).
4) The kernel stacks are now allocated by the generic
bootstrap (either in DRAM or fast RAM). Super and CPU
pages layout modified to pass stack info to the kernel.
Each variant using the generic bootstrap calls
Arm::Init1Stacks() from ImpHal::Init1() to initialise
the stacks.
5) For the windermere port which does not use the generic
bootstrap, the stacks are statically allocated in the
ASSP layer and ImpHal::Init1() initialises the
Arm::*StackTop and PP::*StackTop pointers.
6) The exception vectors, handler and dispatch table can
be relocated to any fast RAM bank by setting
KBdbExcCode4k in the appropriate bank descriptor
(generic bootstrap only). There also exist
KBdbExcCode8k and KBdbExcCode12k in case the exception
handlers get bigger in the future.
7) The exception vectors are now located at 0xFFFF0000 on
platforms which support this. Grep for
__CPU_EXC_VECTORS_MOVABLE in u32std.h for a
comprehensive list. As a consequence dereferencing
NULL pointers in privileged mode now enters the debug
monitor.
8) Fix defect CLE-4Y4EMG (Bootstrap doesn't fill in Rom
config section completely): ROM type fields now
correctly initialised in the super page.
9) Bootstrap test code added for assabet.
10) Bootstrap documentation updated.
11) Template port updated.
3) Michael
1) Fixed Helen crashing (exc id 26) at boot-up time: ImpHal::Idle() in
\e32\ekern\epoc\arm\Helen\KA_UTL.CPP
2) Modified macro test() in e32test.h such that it now also displays the
respective source filename when an RTest test fails. Added the necessary
overloaded operator() and constructor to class RTest in us_test.cpp.
An occasional stack overflow problem has been fixed: we now pass the filename
string as a const TText* rather than a const TDesc& (_S() vs. _L()).
3) Fixed DPlatChunk::SetContiguousRamL() and DPlatChunk::SetHardwareL() in
\e32\ekern\epoc\kp_chk.cpp: too much memory was reserved upon creation of a
transfer buffer, too little freed after closing it.
4) Fixed CBitMapAllocator::ExtractRamPages() in \e32\euser\cbase\ub_bma.cpp:
eliminated a condition when the do/while loop would never be left.
5) added two exported static kernel functions: DThread* Kern::SvThread() and
DProcess* Kern::SvProcess(), frozen for mawd, mcga, mcoy, meig, mhelen, mint,
misa, mlnk, mtemplate, wins
6) HWA API:
- changed task parameter TaskID from type TInt to TUid
- RHwaTask::Close() and RHwaDevice::CloseTask() now return an TInt error code
from the kernel (actually from the PDD), rather than being void
- T_HWA: creating a contiguous transfer buffer from the user side now works,
added test of task messaging functions, misc. fixes.
4) Tim Band and Arun Sachamuneewongse
1) Added three 'next favourite' language specifiers to TLocale and
SLocaleData, and setters and getters for them in TLocale.
5) JonathanM
LCD Driver Portability Enhancements
Moved all display related code into new kernel extension (VIDEODRIVEREX)
New LDD stub (VIDEODRIVERLDD) provides access to this implementation.
Added HAL attributes
EDisplayIsMono, // Display is monochrome
EDisplayIsPalettized, // True if display is in a paletized mode
EDisplayBitsPerPixel, // Number of bits per pixel for current display mode
EDisplayMaxBitsPerPixel, // Max color resolution display mode
EDisplayMemoryAddress, // Start of video memory
EDisplayOffsetToFirstPixel, // Offset of first displayed pixel from EDisplayMemoryAddress
EDisplayOffsetBetweenLines, // Number of bytes between the first pixel in successive lines
EDisplayPaletteEntry, // To get, pass entry number (Color returned as 0x00bbggrr)
// To set, pass entry in bits 31-24, color in bits 23-0
EDisplayIsPixelOrderRGB, // True if physical pixel layout is RGB, false for BGR
EDisplayIsPixelOrderLandscape, // True if physical pixel layout is landcape, false for portrait
Added new exports to EKERN
DPlatChunkHw::DoCreateL(class TPhysAddrs* aAddr,TInt aCount,TChunkType aChunkType)
TBool Plat::CheckInWservThread() // Returns true if current thread is the registerd WSERV thread
void Hal::SetDisplaySizeInPixels(const TSize& aSize) // Inform kernel of display size in pixels
void Hal::SetPhysicalScreenSize(const TSize& aSize) // Inform kernel of display size in twips
void Hal::SetMaximumDisplayColors(TInt aMaxColors) // Inform kernel of number of phsysical colors
Removed the following methods
ImpHal::DisplaySizeInPixels()
ImpHal::PhysicalScreenSize()
ImpHal::MaximumDisplayColors()
Hal::DisplaySizeInPixels()
Hal::PhysicalScreenSize()
ImpPsu::DisplayOn()
Custom::DisplaySize();
Custom::PhysicalScreenSize();
Custom::DisplayOn();
Custom::DisplayOff();
Custom::MaximumDisplayColors()=0;
P::ClearScreen()
6) JonathanM
Fixes for base release.
1) Updated E32 and F32 version numbers.
2) Added IPR Policy files to base\assabetb\bootstrap\test (Category E)
and base\helen\debugger (Category B).
3) Fixed WINS EDISP build warning.
4) Changed T_VIDEO so that it doesn't build for WINS.
5) Modified OBY files for varients which now use the new VideoDriverExtension.
These now have "#define USE_VIDEODRIVEREXTENSION"
6) Removed spuriours Kern::Printfs.
7) Renamed Integrator VideoDriverExtension to match romkit name pattern.
8) Fixed bug in MISA videodriver GetPaletteEntry function.
9) Removed always on tracing from brutus screen driver code.
10) Fixed Integrator ROM building (needed to include video driver by correct name
and exclude the old Neon250 kernel extension.
Version 1.02.358
================
(Made by Michael, 19/06/2001)
1) MichaelP
1) Added (many) and modified (some) files for the MHELEN ASSP base port.
2) Modified macro test() in e32test.h such that it now also displays the
respective source filename when an RTest test fails. Added the necessary
overloaded operator() and constructor to class RTest in us_test.cpp.
3) Reverted the change of the test() macro mentioned under 2) because of stack
overflow problems with some programs which were detected during the link
stage. This needs to be further investigated. For the time being we use the
old version of test().
4) Updated HWA driver (LDD + WINS PDD) and API code. Added (bogus) PDD for Helen.
2) Nicolas
1) rom.cfg: suppressed no-header option for integrator.
2) Fixed defect FER-4XDH9P (Switch On messages not
received) on WINS by calling Power::SwitchOn() when
waking up following normal or emergency standby.
3) Deleted Eiger custom bootstrap because the port
actually uses the generic one.
3) MarkCa
1) Fixed EDNHLJT-4WZGTD (Secure mmc - "Invalid" after cancelling pw change
& FM panic) and related EDNHAAO-4WZFYR (Secure MMC: Note "Invalid" shown
after updating the file system.) New media attribute KMediaAttHasPassword
shadows PWD_LEN != 0 in card, and controller backs up store before
password operation, recovering on failure.
2) Fixed CAN-4WJHJN (6.0) and EDNMCAN-4VYKTY (6.1) ("File server must accept
new MultiMediaCard password encoding scheme".) Password notifier
changed to encode passwords as Unicode.
3) Enabled debug password notifier for F32 fix EDNPCHY-4VWP5B
(problems with secure mmc implementation.) This completes after
a user specified period and is used to debug using F32 when a
notifier is raised.
4) Implemented CR PSCE-4VMP3K to set hard limit for RAM drive. New HAL
attribute EMaxRAMDriveSize must be set to size in bytes, where value
includes FAT.
4) TimBa Fixed bug in MatchF: if argument was an empty descriptor, it always
returned null. Now if the candidate is nonempty it returns KErrNotFound.
Version 1.02.357
================
(Made by Carlos, 31/05/2001)
1) William
1) Change DebugThreadPanic to use a struct for the debugger-friendly values, so that
a simple autoexp.dat change will display the panic details properly.
2) Dennis
1) Fixed defect HAR-4WSGJ5 (RArray::FindInUnsignedKeyOrder not returning KErrNotFound).
This was due to problems with the special case handling of 4 byte entries in the ARM
assembler version.
2) Fixed problem with MCOY failing to boot when image was loaded using RedBoot
instead of RT bootloader.
There were two problems - a spurious CIU interrupt and the fact that the RTC correction
and LastSetTime were uninitialised.
3) Nicolas (RHR 113.1 completly implemented)
1) 5mx: Set LCD contrast to its default level every time
the screen is switched on. This works around the
regression introduced while cleaning up the Hal class (p4 changelist
(the screen was completely black and unusable).
2) Fixed typo in ImpMmu::UnmapPage(): confusion between pde and pte.
3) Added support for TC RAM banks in generic bootstrap.
Hardware-specific initialisation is left as an
exercise to the system integrator. It should be done
in HWInitialise().
4) Added new consistency checks in generic bootstrap
(ROM/RAM bank ordering, bank overlap in
physical/linear space). Enabled for UDEB only.
5) Partially implemented scheme allowing to fake IRAM on
assabet (disabled).
6) Reorganised bootstrap test code: generic code moved
from brutusa to bootstrap.
7) Ported bootstrap test code on assabet.
4) JonathanM
1) Added a new export to the BLD.INF files for BRUTUSA and ASSABETB.
VI_POWER.H is now exported to KERNEL\SA1100\ to enable the sound drivers to
set their power requirements.
5) AndrewCu
1) Small changes to the RNotifier class in e32 (for Uikon 6.2 Dialog Server work).
6) Tim Band
1) Changed TChar functions that query the type of the character so that
they do not make an Exec call
2) Made Private Use Area characters graphical and printable according
to their meaning
3) New folding code that respects Unicode
4) Removed Uzbek, Tajik and Azerbaijani from language list, added
Tagalog in place of Azerbaijani
7) CarlosF
1) Several changes to Assabet Variant to get LFFS to mount on C:\ drive. This ended up
being made configurable, Switch 4 of the switch-pack on the Companion Chip Card
is used to decide wheter to Mount FAT or LFFS on drive C:\.
1) Nicolas (RHR 113.1 completly implemented)
1) 5mx: Set LCD contrast to its default level every time
the screen is switched on. This works around the
regression introduced while cleaning up the Hal class (p4 changelist
(the screen was completely black and unusable).
2) Fixed typo in ImpMmu::UnmapPage(): confusion between pde and pte.
3) Added support for TC RAM banks in generic bootstrap.
Hardware-specific initialisation is left as an
exercise to the system integrator. It should be done
in HWInitialise().
4) Added new consistency checks in generic bootstrap
(ROM/RAM bank ordering, bank overlap in
physical/linear space). Enabled for UDEB only.
5) Partially implemented scheme allowing to fake IRAM on
assabet (disabled).
6) Reorganised bootstrap test code: generic code moved
from brutusa to bootstrap.
7) Ported bootstrap test code on assabet.
Version 1.02.356
================
(Made by Pete, 10/05/2001)
1) MarkCa
1) Added base support for store LFFS optimization. KDriveAttTransaction
bit added to \e32\include\e32std.h.
2) Dennis
1) Added mouse driver and VGA video driver for Integrator.
2) Renamed the text window server DServer object to "TextWindowServer".
3) Morgan
1) Implemented Silent Running on Assabet
4) Pete
Further changes to MMC Controller:-
1) Renamed the function
DMMCSession::FillCommandDesc(TMMCArgumentTUint32,TUint8*,TUint32) to
FillCommandArgs() since it doesn't actually result in the command descriptor
array being updated.
3) Removed check from DMMCStack::IssueCommandCheckResponseSM() whether
a multiblock read/write command has been selected with a total length less than
a block. This is redundant.
4) Modified DMMCStack::CIMReadWriteBlocksSM(). This
function no longer sets up the command descriptor array for special block transfer
commands (but expects this to have been already done before the function is called).
8) Further change to the WINS local drive mappings. The entire local drive mapping for
WINS is now as follows:-
Local drive 0: Internal RAM drive (EFixedMedia0) - Y:
Local drive 1: 1st special MMC Card on MMC socket 0 (ERemovableMedia0) - X:
Local drive 2: 2nd special MMC Card on MMC socket 0 (ERemovableMedia0)
Local drive 3: MMC Card on MMC socket 1 (ERemovableMedia1)
Local drive 4: Not currently assigned
Local drive 5: Not currently assigned
Local drive 6: Not currently assigned
Local drive 7: Not currently assigned
Local drive 8: Internal LFFS drive (EFixedMedia1) - W:
5) Pete
1) Modified bootstrap for Cirrus7211a so that this now runs at 36MHz.
6) Nicolas
1) Added fixed size internal RAM banks in generic
bootstrap.
2) Introduced support for area relocation in generic
bootstrap. Every kind of file (including the primary)
can be relocated to an internal RAM bank.
3) Updated generic bootstrap version number to 2.1.
4) Submitted Richard's bootstrap test files.
5) Removed MCORE stuff from generic bootstrap.
6) Inversed order of "static" and "const" in _LIT()
definition to avoid lint warning.
7) Added assabet.mbc (metabuild script).
8) Implemented RProcess::GetMemoryInfo(). This allows to
extend GDB so it can attach itself to running threads.
7) Michael
1) Added overloaded function:
DTransferBuffer* TransferBufferFromHandle(TInt aHandle, DThread *aThread)
to \e32\include\k32std.h, exported and frozen for all BUILDS. Function
implemented in \e32\ekern\ks_transbuf.cpp. This function is used where the
current thread is not the same as the one that created the handle.
2) Changed behaviour of DPlatTransferBuffer::~DPlatTransferBuffer() and
DPlatTransferBuffer::DoClose() in \e32\ekern\emul\win32\kp_transbuf.cpp and
\e32\ekern\epoc\kp_transbuf.cpp: iChunk gets only deleted if it actually exists,
i.e. is non-NULL
3) Numerous changes to HWA implementation (User API, LDD and WINS PDD), work
still ongoing.
Version 1.02.355
================
(Made by Nicolas, 04/05/2001)
1) William
1) Changed the WINC-only KernelStarted semaphore to be anonymous, to prevent
problems with concurrent WINC execution on a multiple processor build machine.
This will not re-open defect EDNGBON-4JYNU6 "Inaccessibility of request
semaphores breaks EPOC connect" because this isn't a request semaphore.
2) Fixed TGlobalAlloc to use User::AllocL rather than new[], and User::Free instead of
the mismatched delete. This will now work even if new[] plays funny tricks (which
is the case with CodeWarrior) and makes the User::ReAllocL call legitimate.
2) Nicolas
1) Merged 6.1 release branch back into the mainline.
Version 1.02.354
================
(Made by Dennis, 20/04/2001)
1) AndrewJ
1) Changed the misa kernel.iby file to detect whether the build is for
Assabet varient. If it is for assabet an alternative estart is
included in the rom which automatically loads the LFFS on to K: drive
as well as other tasks performed by estart. This should not take place
on any other platform.
2) The generic estart is only loaded (in f32) for non Assabet platform as
added a definition call CUSTOM_ROM that is only defined for assabet.
3) Added estart.cpp /assabetb/ and loadlffs.cpp to /assabetb/lffs/ for
new estart.exe component loaded only fopr Assabet.
4) removed /test/ subdirectory in /assabetb/lffs/ as nothing it it is or
should be used.
5) removed obsolete definition of BASE_ROM from F32tests.oby,
E32tests.Oby and Alltests.oby
2) Morgan
1) Deleted \e32\bmarm\EXYIN.DEF
2) Added EPenState attribute to HAL to get/set state of the digitiser.
3) Added EKeyboardState.
4) Added pen/display get/set functionality to BRUTUS HAL DLL and driver.
5) Added Enable() and Disable() functions to digitiser driver on Brutus.
6) Tweeked Brutus digitiser driver to send switch on events when coming
out of standby or hibernation (disabled) mode.
7) Removed LCD switch on from LCD power handler.
8) Generic kernel now doesn't call DisplayOn().
9) Added Power::SwitchOn() that can be called from device drivers to
send a ESwitchOn event if the KPowerUserCpu bit is not set. Does the
same thing as a call to SetRequirement(KPowerUserCpu | ...) but is
easier to understand.
Added variant that takes a TRawEvent to specify which event is sent
for switch on.
Call Power::SwitchOn() from your device driver to cause full UI switch
on.
10) Tidied Brutus HAL DLL startup code.
11) Made text window server take responsibility for turning on the screen
at switch on.
12) Tidied Assabet HAL DLL startup code and removed spurious panicking
code.
13) Updated HAL\DOC\HAL.DOC boilerplate startup code.
14) Made display on imply switch on, and send events as appropriate
15) assabetb, cirrus7211a, series5mx1 variant updates to maintain current
behaviour.
16) Changed the prototype of DPowerModel::PowerStandby() to return an error
value.
3) Dennis
1) Fixed a problem with creation of fixed address chunks with initial
size zero.
4) Jonathan
1) Removed redundant Hal and UserHal functions from kernel and ASSPs.
2) Refroze kernel exports for all platforms other than WINS/WINC.
3) Removed associated variant functions and, where necessary to implement
the HAL API, re-implemented them via a HAL driver on the mainstream
platforms Brutus, Assabet and VTemplate. Other variant DLLs still
contain some redundant functions and may not have implementations for
all appropriate HAL attributes.
5) Carlos
1) Several changes to Assabet Variant to get PC Card working
2) Assabet builds its own ATA driver (vi_medata.cpp). The generic ATA
driver is not used. Changed the MISA kernel.iby to allow Brutus to use
the generic ATA driver and Assabet to use its Variant-specific one.
6) Dennis
1) Added integrator port. No screen or serial drivers yet.
7) Pete
4) Fixed SCE-4V7S6C "MMC Controller card init. function is in-efficient
and unnecessarily complex". This entailed:-
- Add new TMmcCardArray class to replace the DMMCStack::iCxNewAcqArray[]
and DMMCStack::iCards[] arrays and their associated functionality.
- Removal of ASSP layer function DMMCStack::PhysicalCardSlots()
function as this was duplicating information already returned in the
ASSP layer function DMMCController::SetMachineInfo() function.
- Addition of generic layer DMMCStack::Init() function to determine
the max. number of cards for the platform once - at Controller
init. time rather than every time a card stack is initialized.
- Modification to DMMCStack::PowerDownStack() function to add an extra
argument to this function (TBool aMediaChange) indicating whether
the power down is required due to media change or not.
- Removal of the 'update stack' implementation in the generic layer of
the Controller. This was intended to re-scan for new cards after a
media change. This is now redundant since all cards are always
powered down on media change.
- Various comments added throughout PS_MMC.CPP to aid clarity.
5) Fixed FID-4UZLFG "Increase number of supported local drives"
8) Nicolas
1) Added \brutusa\brutusa.mbc
2) Cogent: Moved call to ImpHal::EnableIrqs() from ImpPic::Init3() to
beginning of ImpHal::Init3() to avoid the board hanging forever while
initialising the PCI base module.
9) William
1) Removed temporary WINSCW workaround in up_i64.cpp, now that the CodeWarrior
compiler supports the BT instruction.
2) Added WINSCW-specific variation of the path constants in up_path.cpp
3) Rearranged win32/up_trp.cpp version of TTrap::Trap() so that the register
saving happens before the C++ code to manipulate iResult and aResult. This
avoids a problem where the CodeWarrior compiler was saving EBX on the stack and
and using it as a temporary during the iResult/aResult mangling, causing the
wrong EBX value to be restored during Leave.
Version 1.02.353
================
(Made by RobertJ, 26/03/2001)
1) Carlos
1) Several Changes in Assabet Bootstrap and vi_power.cpp in order to get
the Power Management/Sleep Mode working properly.
2) Changes to Assabet Keyboard driver/controller
3) Removed #define __USE_LEDS_FOR_SYSTEM_DEBUG. User software can now use
those LEDs if they wish.
4) Had to implement a function in the Assabet Variant to allow enabling
RTC Interrupts. Surprisingly the SA1100 ASSP does not have these
functions!
5) Some changes to the SA1100 Interrupt controller (only affect Assabet
as they were changes in the way External Interrupts are handled).
6) Needed to export the Kernel function ImpMmu::LinearToPhysical as this
will be called from the Assabet Variant (vi_power.cpp).
7) Got rid of the debug message printed every time the Variant is called:
after waking up, a call to re-enable the Debug Port would attempt to
print this out and crash!
2) Alastair
1) Added initial transfer buffer functionality. Chief classes are
RTransferBuffer and RTransferWindow user-side, described in
E32TransBuf.h, and DTransferBuffer and DTransferWindow
kernel-side, described in K32Std.h. Test program is built from
e32test\mmu\t_transbuf.cpp, though the test isn't fully
complete yet. Also, the scheme doesn't yet cater for transfer
buffer access via transfer windows for "fixed" processes, though
it will shortly.
3) Nicolas
1) Introduced example metabuild script for MCGA (see
\cogent1\cogent1.mbc).
4) MarkCa
1) Fixed CAN-4TXKZQ (Using a PC Card can wrongly produce password
notifier)
2) Fixed CAN-4TWM6E (L7200 MMC Controller takes control of second UART)
Fix affects t_atadrv, so changed \l7200a\va_hw.cpp to use non-zero
machine uid.
3) Fixed CAN-4TYFHS (Reading to the end of a MultiMediaCard can produce
an out-of-range error)
4) Fixed EDNTDAS-4L4JZ8 (Thread leakage using emulators)
5) Fixed TOD-4RXJSS (Race condition causing accessing of already delete
pointer when deleting DChannelComm)
6) Fixed CAN-4UBJU2 (Controller does not process all error conditions)
7) Changed l7200\pa_mmc.cpp to return KMMCErrNotSupported because pre 2.1
controller.
8) Added __MLNK__ case to cpu defines in u32std.h.
9) Fixed CAN-4UNE8D (MMC Controller access violation after emergency power
down)
10) Removed KPBUS1 | KPBUS2 | KPBUSDRV tracing from mlnk\header.iby.
5) AndrewJ
1) Enabled LFFS on assabet.
2) Edited vi_hw.cpp and vi_pbus.cpp to enable LFFS on K: with PC Card
disabled.
3) put in fixes from 6.1 Numbers: SCE-4TVQ78
TOD-4RWEHL
6) Dennis
1) Fixed XScale RTC rounding problem
2) Added check for imprecise aborts on XScale - fault the kernel if they
occur.
3) iExtraData=FSR for both data and prefetch aborts.
*** Release note for XScale delivery ***
This release supports the Intel IQ80310 evaluation board based on the
XScale 80200 processor (Coyanosa). Code for this board can be built by
specifying platform MCOY on the build command line.
The following property definitions are used to specify the CPU type (in
\e32\include\u32std.h):
__CPU_XSCALE__
Means that the CPU is based on the XScale microarchitecture
__CPU_ARMV5TE
Means that the CPU supports the ARMv5TE instruction set
__CPU_ARM_ABORT_MODEL_RESTORED
Means that the base register is unaltered if a load/store with base
register writeback is aborted.
__CPU_SPLIT_CACHE
Means that the CPU uses separate instruction and data caches
__CPU_SPLIT_TLB
Means that the CPU uses separate instruction and data TLBs
__CPU_WRITE_BUFFER
Means that the CPU uses a write buffer
__CPU_WRITE_BACK_CACHE
Means that the CPU (data) cache supports write-back operation and that
the OS uses this mode for normal RAM allocations.
__CPU_CACHE_WRITE_ALLOCATE
Means that the CPU (data) cache supports line allocation on writes and
that the OS uses this mode for normal RAM allocations.
__CPU_CACHE_FLUSH_BY_LINE_ALLOC
Means that the (data) cache is cleaned/flushed by using an explicit
line allocate instruction.
__CPU_CACHE_POLICY_IN_PTE
Means that the (data) cache policy can be changed between writethrough
and writeback on a page-by-page basis using flags in the page table
entries.
__CPU_HAS_CACHE_TYPE_REGISTER
Means that the CPU possesses the cache type register as specified in
the ARM architecture reference manual (CP15 CRn=CRm=0, opc2=1)
__CPU_HAS_SINGLE_ENTRY_ITLB_FLUSH
Means that the CPU supports the 'Flush single ITLB entry by MVA'
instruction (MCR P15, 0, Rn, C8, C5, 1)
__CPU_HAS_SINGLE_ENTRY_ICACHE_FLUSH
Means that the CPU supports the 'Flush single ICache line by MVA'
instruction (MCR P15, 0, Rn, C7, C5, 1)
__CPU_HAS_BTB
Means that the CPU has a branch target buffer which needs to be
flushed explicitly in conjunction with partial ICache flushes.
__CPU_USE_MMU_TEX_FIELD
Means that the CPU supports the extended page table permissions (TEX)
field.
__CPU_EXC_VECTORS_MOVABLE
Means that the CPU allows the exception vectors to be relocated to
FFFF0000.
All E32 and F32 automatic tests pass on this release, with the exception
of:
T_PCCD1, T_PCCD2 - because the board does not support PCMCIA
T_DEBUGGER - because the debugger uses a bit pattern for breakpoints
which is defined in ARM Arch 5 (was undefined on ARM Arch 4). This
is being handled as a defect (defect number MAY-4V4E5V).
The branch target buffer is not enabled by this release. This is due to a
known problem when executing THUMB code with the BTB enabled.
7) Pete
1) First release of Hardware Accelerator (HWA) LDD and a crude emulation
of a HWA PDD on WINS.
2) Changes to MMC Controller to support SD Memory card initialisation.
3) Added TMMCCardArray class and various other minor changes to the MMC
Controller such (e.g. more comments).
4) Improved the WINS MMC emulation. Two cards are now emulated rather
than one as before. Also, better account of the current card status is
taken when deciding how to respond to an MMC command.
5) Change to the WINS local drive mapping. Local drive 2
is now the primary partition on the second emulated MMC card rather
than a secondry partition on the first emulated MMC card.
6) Temporarily disabled PC Card Peripheral bus (EPBUS.DLL) on Cirrus Logic
board and replaced this with MMC Peripheral bus to facilitate development
of SD Memory card development. (PC Card support will be restored once
the multiple peripheral bus Controllers are supported).
8) William
1) Added exported destructor to CAsyncCallBack, to solve a problem with
the CodeWarrior compiler.
Version 1.02.352
================
(Made by Morgan, 08/03/2001)
0) Requires E32TOOLS(173), E32TOOLP(226), F32(260)
from \\epoc\development\base\ongoing\...
1) Morgan
1) Split functions in UP_DLL.CPP into separate source files. This
allows the linker to discard unused functions.
Functions are grouped by functional area. up_dll_file.cpp,
up_dll_global.cpp, up_dll_static, up_dll_tls.cpp.
2) Split EDLL.LIB into EDLL.LIB containing the entrypoint and
EDLLSTUB.LIB containing the class Dll stub functions.
3) Removed strange .idata$3 padding from UP_DLL.CPP since (we think) it
is a hack for a defunct version of GCC
4) Moved thumb gcc helper functions into up_gcc.cpp in EGCC.LIB
5) Removed thumb gcc helper functions from uc_exe.cpp. These are now in
EGCC.LIB that should be included in the link of a GCC EXE or GCC DLL.
6) Moved float gcc helper functions into up_gcc_float.cpp in EGCC.LIB
7) Removed null definition of atexit() from up_dll.cpp
8) Deleted \e32\euser\epoc\arm\uc_dll.cpp since it is not used anywhere
9) Integrated MAWD DDebugger bug fix (again)
10) Added default cpu definition for __MTEMPLATE__ in U32STD.H to make it
compile
2) Carlos
1) Disabled the Pc Card on Assabet as it is not fully working and causes
problems when using the CF loader to download an image.
3) Dennis
1) Added basic port to Intel XScale 80200 CPU on IQ80310 board.
2) Fixed defect HAS-4U7N92 (T_WWINS hangs on Brutus). This is due to the
smaller screen size compared with the Series 5.
Modified notifier stuff to take account of the screen size.
4) RobertJ
1) Added notification of clear stall to USB Client
2) Fixed dma handling code for USB Client.
5) Alastair
1) Added initial transfer buffer functionality. Chief classes are
RTransferBuffer and RTransferWindow user-side, described in
E32TransBuf.h, and DTransferBuffer and DTransferWindow
kernel-side, described in K32Std.h. Test program is built from
e32test\mmu\t_transbuf.cpp, though the test isn't fully
complete yet. Also, the scheme doesn't yet cater for transfer
buffer access via transfer windows for "fixed" processes, though
it will shortly.
6) Nicolas
1) Introduced example metabuild script for MCGA (see
\cogent1\cogent1.mbc).
7) MarkCa
1) Fixed CAN-4TXKZQ (Using a PC Card can wrongly produce password notifier)
2) Fixed CAN-4TWM6E (L7200 MMC Controller takes control of second UART)
Fix affects t_atadrv, so changed \l7200a\va_hw.cpp to use non-zero
machine uid.
3) Fixed CAN-4TYFHS (Reading to the end of a MultiMediaCard can produce an
out-of-range error)
4) Fixed EDNTDAS-4L4JZ8 (Thread leakage using emulators)
5) Fixed TOD-4RXJSS (Race condition causing accessing of already delete
pointer when deleting DChannelComm)
6) Fixed CAN-4UBJU2 (Controller does not process all error conditions)
7) Changed l7200\pa_mmc.cpp to return KMMCErrNotSupported because pre 2.1
controller.
8) Added __MLNK__ case to cpu defines in u32std.h.
9) Fixed CAN-4UNE8D (MMC Controller access vilation after emergency power
down)
10) Removed KPBUS1 | KPBUS2 | KPBUSDRV tracing from mlnk\header.iby.
Version 1.02.351
================
(Made by Carlos, 20/02/2001)
1) Carlos
1) Added Assabet Variant (\Assabetb). This is an interim release
(see Release_Notes.txt)
2) Debug Monitor on SA1100 ASSP: now gets the serial port number to
be used as debug port from the variant TInt Variant::DebugInit().
3) Interrupt Controller on SA1100 ASSP: expanded the Interrupt controller
to work with Conceptual Interrupts (IRQ11-27) and external interrupts.
Also disabled the watchdog to free-up the OST Timer3 as an auxillary
timed interrupt source for LFFS.
4) Several changes to Brutus' Variant according to what's decribed above.
5) FIR Driver: Assabet allows setting the IR range. Therefore a new
Synchronous Request was introduced to deal with this.
6) ecomm driver - as above, passes the setting for the range on
iSIRSettings member of the Config structure.
7) Implemented EARLY DEBUG on SA1100 ASSP.
8) A few changes on the SA1100 ASSP implementation of PC Card Controller.
9) SA1100 Text shell: changed Background/foreground colours to improve
visibility on Assabet.
10) Text Shell (generic): now traps EKeyIncBrightness and
EKeyDecBrightness.
11) HAL: added Machine ID for Assabet on hal_data.h.
12) HAL: changed hal.iby file to include an HAL##VARIANT##.DLL to get
round the problem of having two Variants coming off the same ASSP but
not sharing the same HAL. Changed the hal.mmp on \assabetb, \brutus,
\cirrus721, \cogent1, \l7200, \series5mx1 and \vtemplate.
NOTE: Had to change \romkit\base.iby to allow overnight builds to
build correctly.
13) MISA EKERN def file (e32\bmisa\ekernu.def) - includes a new export
Plat::BindExtInterrupt(..) to allow binding to external interrupts
on Assabet.
14) Some changes on MISA .IBY files. LFFS is excluded for the time being,
even on Brutus. It will be put back when Assabet's LFFS is ready. The
bootstrap is now passed with the Variant extension to its name. Now
includes a Hal LDD in kernel.iby.
15) MISA Variants allowed (\e32\rombuild\rom.cfg): now allows 3 variants,
Brutus (BA), Assabet-only (A0) and Assabet+Companion Card (AB).
2) MarkCa
1) UART media change must now be explicitly compiled in for linkup
MMC port.
2) t_atadrv will now not run media change tests on linkup. Machine
UID modified in va_hw.cpp to avoid clash with Cogent.
3) William
1) Introduce __CW32__ defines for CodeWarrior, and adjust various
compiler-related definitions accordingly.
2) Workaround bugs in the CW inline assembler
3) Remove spurious WINBASEAPI decorations in euniw.h, which upset
CodeWarrior.
4) RobertJ
1) Fixed problem with FIR reads in D_FIR.CPP, the LDD. When read
completes to LDD from the PDD it was possible for another read to
complete the same user request.
2) Added first release of USB client for SA-1100. Components are
EUSBC.LDD, which is a generic LDD, and EUSBCC.DLL. \EUSBCC is the USB
Client Controller and loads as a KERNEL extension.
Version 1.02.350
================
(Made by Dennis, 05/02/2001)
1) William
1) Adjust the x86 inline assember in euser\emul\win32 so that it is
acceptable to the CodeWarrior compiler: change the 8000h style
constants to 0x8000, and change "_asm SomeLabel:" into "SomeLabel:".
2) Dennis
1) Added APIs to support execution of data as code, for use by just in
time compilers for Java and also for the ARM JBit extension. New APIs
are:
TInt RChunk::CreateLocalCode(TInt aSize, TInt aMaxSize, TOwnerType);
This creates a data chunk with a globally unique virtual address which
is allocated from the top of virtual address space (as for EXE and DLL
code chunks). The chunk is accessible only by the current process
(unlike DLL code chunks) and is marked by the kernel as containing
code. This means that on a split-TLB machine the ITLB will be flushed
when a reschedule occurs to or from a process with a chunk of this
type mapped into it and also when pages are decommitted from such a
chunk. The globally unique virtual address means that the ICache need
not be flushed on a reschedule.
RHeap* UserHeap::ChunkHeap(RChunk& aChunk, TInt aMinLength, TInt aGrowBy=KMinHeapGrowBy);
This creates a heap in an already existing chunk. It is intended to
allow a heap to be created in a local code chunk; this heap can then
be used to hold code fragments from a JIT compiler.
void User::IMB_Range(TAny* aStart, TAny* aEnd);
This performs whatever cache cleaning/flushing operations are
necessary in order to guarantee correct execution of code in the
specified address range (from aStart inclusive to aEnd exclusive),
under the assumption that this code has been loaded/modified by user
code. Typically this will involve cleaning the data cache for the area
concerned, draining the write buffer and flushing the instruction
cache and branch target buffer for the area concerned.
2) Added a new chunk type EUserSelfModCode to TChunkType to represent the
new chunks. Added a new attribute DPlatChunk::ECode to the DPlatChunk
iAttributes field to signify any chunk containing code.
3) Added code to notify the ARM ETM of reschedules if the PROCID register
exists (conditioned on __CPU_HAS_ETM_PROCID_REG).
4) Added support for kernel trace via the JTAG port on ARM720 and ARM920.
The KHARDWAREASSIST bit in the debug mask controls whether tracing is
directed to the JTAG port or to a UART.
5) Modified perl script halcfg.pl so that the output file is not opened
until the inputs have been parsed - this prevents strange error
messages due to a zero length file being generated.
Version 1.02.310
================
(Made by Morgan, 09/04/2001)
1) Jonathan
1) Move notes for releases prior to creation of 6.1 release branch to
releases_old.txt.
2) Pete
1) Fixed SCE-4V7S6C "MMC Controller card init. function is in-efficient and
unnecessarily complex". This entailed:-
- Add new TMmcCardArray class to replace the DMMCStack::iCxNewAcqArray[]
and DMMCStack::iCards[] arrays and their associated functionality.
- Removal of ASSP layer function DMMCStack::PhysicalCardSlots() function as
this was duplicating information already returned in the ASSP layer function
DMMCController::SetMachineInfo() function.
- Addition of generic layer DMMCStack::Init() function to determine the max.
number of cards for the platform once - at Controller init. time rather than
every time a card stack is initialized.
- Modification to DMMCStack::PowerDownStack() function to add an extra
argument to this function (TBool aMediaChange) indicating whether the power
down is required due to media change or not.
- Removal of the 'update stack' implementation in the generic layer of the
Controller. This was intended to re-scan for new cards after a media change.
This is now redundant since all cards are always powered down on media
change.
- Various comments added throughout PS_MMC.CPP to aid clarity.
2) Fixed FID-4UZLFG "Increase number of supported local drives"
Version 1.02.309
================
(Made by Will Ramsay, 03/04/2001)
1) Requires E32TOOLP(226), F32(237)
from \\epoc\development\base\ongoing\...
2) Backported Morgan's 6.2 changes to remove import stubs:
1) Split functions in UP_DLL.CPP into separate source files. This
allows the linker to discard unused functions.
Functions are grouped by functional area. up_dll_file.cpp,
up_dll_global.cpp, up_dll_static, up_dll_tls.cpp.
2) Split EDLL.LIB into EDLL.LIB containing the entrypoint and
EDLLSTUB.LIB containing the class Dll stub functions.
3) Removed strange .idata$3 padding from UP_DLL.CPP since (we think) it
is a hack for a defunct version of GCC
4) Moved thumb gcc helper functions into up_gcc.cpp in EGCC.LIB
5) Removed thumb gcc helper functions from uc_exe.cpp. These are now in
EGCC.LIB that should be included in the link of a GCC EXE or GCC DLL.
6) Moved float gcc helper functions into up_gcc_float.cpp in EGCC.LIB
7) Removed null definition of atexit() from up_dll.cpp
Version 1.02.308
================
(Made by MarkCa, 20/03/2001)
1) Morgan/AndrewF
1) Fixed FOD-4TAH7A "DMA double buffering will not work on Halla".
This is an interface change and it is not source compatable.
Added extra buffer fill during transfer initialisation for double
buffered HW. Added explicitly named enums and new imp functions
in ASSP to make writing ImpDMA easier.
2) Changed all ASSPs, and added implementation details to template
port.
Detail of changes required to \e32\ekern\epoc\arm\<assp>\KA_DMA.CPP:
a) Remove ImpDma::NextBlock()
b) Add the following functions:
/**
* No more DMA blocks for this transfer
*
* TO DO: (mandatory)
*
* Modify to suit your hardware. The code below is just an example
*
* If your DMA hardware has multiple buffers this function should be
* used to disable the empty buffer
*/
void ImpDma::FinalBlock(TInt aChannel);
/**
* Get the reason for the DMA interrupt.
* Called from TDmaInterrupt::Service()
*
* TO DO: (mandatory)
*
* Modify to suit your hardware. The code below is just an example
*
* EBufferEmpty indicates that one buffer is empty
* EStall indicates the entire transfer is complete, ie both buffers
* empty, FinalBlock() has been called.
* EError indicates a transfer error
* (ELastBuffer indicates that one buffer is empty and FinalBlock()
* has been called. On most hardware it is sufficient to return
* EBufferEmpty in this case)
*
*/
Dma::TDmaState ImpDma::GetState(TInt aChannel);
//
// Return ESingleBuffer or EDoubleBuffer
//
Dma::TDmaBufferMode ImpDma::BufferMode();
2) Nicolas
1) Fixed STE-4UEQC2 "The case off event and possibly some other events
do not get through WSERV correctly". EPOC doesn't any more send
two ESwitchOn notifications instead of one when starting up. The
emulator now sends only one ESwitchOn notification when being
switched back on after an emergency power off. The emulator sends
ECaseOpen or ECaseClose notifications when F11 is pressed while not
in standby mode. And finally the emulator doesn't any more switch
off automatically when the case is closed (this is up to the
user-side event consumer).
2) Fixed STE-4UJPEC "Some of the HAL attributes are not supported".
The following attributes are now supported on WINS: EPenDisplayOn,
ECaseSwitch, ECaseSwitchDisplayOn, ECaseSwitchDisplayOff.
3) T_NEWHAL TestGetAll() output modified to make it readable on a
small screen (key press expected when screen is full).
3) MarkCa
1) Fixed CAN-4UNE8D (MMC Controller access vilation after emergency power
down)
2) Removed KPBUS1 | KPBUS2 | KPBUSDRV tracing from mlnk\header.iby.
Version 1.02.307
================
(Made by Nicolas, 27/02/2001)
1) Jonathan
Manual e32test cleanup:
1) Moved T_COLOUR from a manual to a support test since no-one bothers
implementing text video modes other than mono. Made those screen
drivers that didn't already return KErrNone from SetMode(EMono).
2) Moved T_PS and T_WWINS from manual to support tests since they're not
useful.
3) Nuked T_PTNOS test and D_PTNOS test driver.
4) Nuked T_REGRAM registry test (which was lurking unused since v6.0).
5) Made T_INF prompt for confirmation that displayed values are OK, so
if not OK an error appears in the test log.
6) Fixed FID-4TXFVX "Wrong defaults for MainBatteryGood()".
7) Fixed FID-4TYF78 "FIQ link with battery state is broken".
8) Fixed BAR-4SMG99 "Efficiently implement the "MergeModifiers" function
in e32\include\K32KEYS.INL".
9) Fixed FID-4RRMTH "bootstrap: Bug searching for sleep info block".
2) MarkCa
1) Fixed CAN-4TXKZQ (Using a PC Card can wrongly produce password
notifier)
2) Fixed CAN-4TWM6E (L7200 MMC Controller takes control of second UART)
Fix affects t_atadrv, so changed \l7200a\va_hw.cpp to use non-zero
machine uid.
3) Fixed CAN-4TYFHS (Reading to the end of a MultiMediaCard can produce
an out-of-range error)
4) Fixed EDNTDAS-4L4JZ8 (Thread leakage using emulators)
5) Fixed TOD-4RXJSS (Race condition causing accessing of already delete
pointer when deleting DChannelComm)
6) Fixed CAN-4UBJU2 (Controller does not process all error conditions)
3) Dennis
1) Fixed defect HAS-4U7N92 (T_WWINS hangs on Brutus). This is due to the
smaller screen size compared with the Series 5.
Modified notifier stuff to take account of the screen size.
2) Fixed defect HAD-4T2EJ5 (P::TimerLockSpecToTicks returns incorrect
value).
3) Fixed defect MAT-4TYKLE (Profiler doesn't work on Quartz/Brutus).
Version 1.02.306
================
(Made by Markdo, 07/02/2001)
1) Tim Band
1) Fixed BAD-4SVJY8 "Unavoidable initialisation cost for TRect, TPoint
and TSize"
2) Alastair
1) Fixed EDNTBAD-4Q8M2F "CBufSeg can leak memory"
2) Fixed EDNATHE-4QQJSU
"Inconsistent error handling in use of S::MakeHandleAndOpen",
though there's still some work to be done in this area.
3) Fixed FID-4RKDJT
"Use Cogent key translation tables on template port"
4) Fixed HAD-4RLFVN
"Template header.iby has exyin.dll as file instead of extension"
5) Fixed HAD-4RLFSY
"Template header.iby missing kerneltrace entry"
6) Fixed FID-4SNDAD
"TemplatePort: Tick counter not invalidated when time changed"
3) Morgan
1) Integrated fix for DPassiveDebugger allocation bug for
WINDERMERE
4) Jonathan
1) Created new \e32\ekern\emul\win32\d_entry.cpp as a copy of
\e32\euser\emul\win32\up_dll.cpp. This allows edev.lib to be built
for WINS in an IPR Category E only build. To preserve layering WINS
device driver initialisation no longer wires the kernel.
2) Documented the deprecated nature of UserHAL enums in e32hal.h.
Added minimal documentation to \hal\inc\hal.h and hal_data.h.
5) MarkCa
1) Update linked build by removing warnings from linkup ekern and
implemented polling after MMC data transfers.
Version 1.02.304
================
(Made by Pete, 19/01/2001)
1) Morgan
1) Fixed EDNSCHM-4M7PAJ. Added RMessagePtr::IsNull()
2) Fixed EDNJPAR-4KLLCA "Brutus bootstrap contains large delay..."
3) Fixed EDNRFID-4NVFWF "Bootstrap test-code has Brutus-specific code"
4) Fixed EDNRFID-4MVEQV "Bootstrap: bug in RAM width checking"
5) Fixed EDNRFID-4MVKBL "Bootstrap attempts to write to ROM"
6) Fixed EDNRFID-4NXETX "Bootstrap: bugs mapping IO as sections"
7) Fixed EDNWROS-4LQEPN "bootstrap component -WHAT output incorrect"
8) Fixed EDNRFID-4LGBVH "Bootstrap should keep PE file"
9) Fixed EDNRFID-4PXFYK "Add buffered, not cached flag to bootstrap"
10) Fixed EDNRFID-4PTHXH "Flush D TLBs & Cache in bootstrap after enabling
MMU"
11) Fixed EDNRFID-4MVJZQ "Bootstrap bugs finding initial scratch RAM"
Tested on COGENT, BRUTUS, [UDEB,UREL]
12) Fixed HEY-4STFK7 "Template port: Definition of interrupt names
should..."
13) Fixed TOD-4RJJ75 "Corruption of K::TickQ". This fix creates a change
in the behaviour of the emulator - comms power handler active requests
keep the power requirement up. In practice this means that the
emulator will never power off. A proper fix will have to wait for v7.
2) Pete
1) Fixed a problem introduced in release 303 with the
Cirrus bootstrap which was mapping in 16K rather than 12K for the h/w
registers.
2) Changes to the MMC Controller - to the way that the
ASSP layer reports the operating PSU voltage. Removed TOCR class.
3) Dennis
1) Modified low-memory notification system. There are now two TChanges
flags: EChangesFreeMemory and EChangesOutOfMemory. The first is raised
if the free memory level crosses the relevant threshold, and the
second is raised if an allocation fails due to insufficient free
memory.
4) Jonathan
1) Brutus HAL: Fixed defect EDNABOT-4MCGNL "HALData::EKeyboardClickVolume
doesn't accept valid value". Key click and digitiser click are not
supported on Brutus for 6.1. Changed the values reported by HAL to
reflect this. Cogent was similarly incorrect.
2) Added memory traces for kernel stack and data.
3) Brutus keyboard: Fixed defect JAN-4RLLH3 "Brutus board doesn't map
EKeyDevice key codes". Made Fn modifier generate EKeyDevice0-9. Fixed
some Fn and Shift translation errors.
5) Markdo
1) Implemented Pc Card Controller for Cogent. Controller is disabled (by
setting total supported drives to 1) until timer problem sorted out.
2) Fixed problem in Brutus Pc Card Controller where reset signal not
asserted for long enough when powering up. Reduced length of time spent
in Sa1100::BootWaitMilliSeconds when called in \brutus1\vi_pbus.cpp.
3) Ensured that uart1 in linkup initialised in release builds.
4) Implemented dma on linkup.
6) MarkCa
1) Merged in MMC security code. _LOCKABLE_MEDIA in e32svr.h is not
commented out any more.
2) Updates to linkup example mmc port.
Version 1.02.303
================
(Made by RobertJ, 13/12/2000)
1) Nicolas
1) ECOMMDCE: Cancel power handler timer and reset power requirements in
DChannelComm dtor (pasted from ECOMM). This avoid a kernel panics
in DPowerHandler::RemovePowerModel() when a DCE comm port is
closed.
2) Added DISTRIBUTION.POLICY file (cat. E) to \e32\rombuild\mlnk and
removed superfluous ones from E32 and BOOTSTRAP.
3) Modified rom.bat to avoid spurious error msg when some files
included in the ROM image contain "warning" or "error".
2) Dennis
1) Removed all MCORE code.
2) Minor consolidation of MMU-related #ifdefs in order to support ARM920.
__CPU_SOFTWARE_CACHE_FLUSH, __CPU_CACHE_CONFIGURABLE have gone.
__CPU_ARMV3 is no longer supported.
Remaining #ifdefs with meanings are:
__CPU_CACHE_POLICY_IN_PTE
This means that you can select write through or write-back caching
on a page-by-page basis.
__CPU_WRITE_BACK_CACHE
This means that write-back caching is being used. This may be
either because the cache only supports write-back mode (eg SA1100)
or the cache supports both modes and write-back mode is being used
(eg ARM920). If this is not defined and the cache can support both
modes, write-through caching will be used.
__CPU_CACHE_FLUSH_BY_DATA_READ
This option is only applicable if write-back caching is in use.
It means that the cache must be flushed by reading spurious data
(i.e. SA1100 mode). Currently the data used for flushing is always
mapped at 0x430fe000 and a cache size of 8K is assumed. If this
option is not selected and write-back caching is in use, the
ARM920 method is used (ie flush each line by way/set index) and
the CP15 cache config register is read to determine the size and
layout of the cache.
__CPU_SPLIT_CACHE
This means that the processor has separate instruction and data
caches.
__CPU_SPLIT_TLB
This means that the processor has separate instruction and data
TLBs.
3) Added low memory notification. This uses two thresholds (low and
good). If a low-level chunk adjust or allocation of page tables fails
due to out-of-memory or causes the amount of free memory to drop below
the low threshold, all change notifiers are signalled. If a low-level
chunk adjust or freeing of page tables causes the amount of free
memory to rise above the good threshold change notifiers are also
signalled. A new change notifier flag (EChangesFreeMemory) has been
added to signify the occurrence of one of these conditions. A new
function
TInt UserSvr::SetMemoryThresholds(TInt low, TInt good)
has been added to set the thresholds at which notification occurs.
Test program T_CHUNK has been extended to test this system.
4) Fixed defect EDNATHE-4LCEWZ (Sessions using global message pool can
lose available slots).
5) Fixed defect PAR-4R6DGK (WS_MAIN.CPP should have an extra line of debug
to warn you that you have booted in test mode).
6) Fixed defect EDNJPAR-4L2LMM (WS_MAIN.CPP has a leave without a trap).
7) Fixed defect EDNJPAR-4N9GU2 (TEiger:: missing from added 7211 functions
in ka_eiger.cpp)
8) Fixed defect HAS-4R5NPC (JTAG trace example in template variant).
3) Alastair
1) Fixed EDNJHAS-4QLRPC "All 3rd UIDs wrong" (in the template port).
Uids are now the UNICODE rather than narrow values.
2) Split this file up on the assumption that its large size is the
reason P4 sometimes has difficulty accepting changes to it.
Old release notes are now in release_old.txt.
3) Fixed EDNJHAS-4QNRUB "Template variant include file in E32" by moving
it into the vtemplate directory and exporting it from there.
4) Fixed EDNJHAS-4QNR4M "Template ASSP is in the wrong place"
5) Changed include paths in VTemplate .mmp files so that they no longer
refer to \e32\include.
6) Added DISTRIBUTION.POLICY files (cat. E) to the \VTemplate
directories.
7) Fixed EDNABRY-4L8NR2 "Text console appears stripy on Windows 95"
8) Fixed problem with emulator parent window appearing jazzed if no
bitmap is specified on Windows9x platforms.
9) Fixed EDNJBRN-4MEP5F
"Threads that use a shared heap don't get their stack 0x29 filled".
10) Fixed EDNATHE-4QQKZM
"RThread().Suspend() deadlocks the emulator".
Under WINS/WINC, if a thread is about to suspends itself then it
relinquishes the kernel critical first.
11) Fixed EDNTEEA-4L4BHV
"WINS emulator does not remember its previous position".
Emulator only remembers its position if it's shutdown with Alt+F4 or
via the Windows menus, not with typing "exit" in eshell or exiting
from a test. It is clever about not "reappearing" off-screen.
12) Extended Dennis' low memory notification changes to work under WINS.
13) Fixed defect FID-4RDJTJ
"Template port keyboard driver generates streams of keyup"
14) Fixed defect FID-4RHKC9
"Template Idle function should not be naked"
15) Fixed defect EDNNGRE-4LGJU7
"UserHal::SwitchOff() hangs emulator if mouse is pressed".
Problem: Emulator would power off but not minimise since mouse button
was down, and power on requires impossible window restoration.
Solution: No longer minimise and maximise Emulator window to emulate
Power Off and Power On. Instead, blank screen for Power Off. Power
back on when EStdKeyOff (F9 by default) is pressed. Power on also if
screen is tapped, or case is opened (toggle F11 by default), depending
upon EPointerSwitchesOn and ECaseOpenSwitchesOn
HAL/machine_configuration settings: these values now default to TRUE
for WINS.
4) MarkCa
1) Fixed defect EDNJHET-4PTLUD (Emulator crashes on startup if com
ports used by another program under win98.)
5) Pete
1) Modified the FIR LDD so it conforms with latest power handling scheme
(i.e. it requests it's power requirement on all tx requests while at
the same time setting a timer to releases these requirements if it is
allowed to expire). This in turn required an extra function to be
added to each FIR PDD - PowerRequirement() which returns the FIR power
requirements for that particular platform.
2) Fixed warnings when building WINS version of MMC Controller.
3) Modified TBusLocalDrive class and the associated local media
sub-system so that an info. descriptor can be passed down to the media
driver which is available to the driver at the point at which it is
opened.
4) Fixed warnings when building WINS version of MMC Media Driver.
5) Applied various bug fixes supplied by Pete Sanders for Cirrus Logic
build:-
- Increased BDB IO block size from 8K to 16K in bootstrap.
- Moved addition of power handler from Variant::Init3() to
Variant::Init4().
- Set mem. config registers for both banks of 8Mb flash in
Variant::Init1().
- Fixed problem with digitizer resistive plate enable signals.
6) Morgan
1) Fixed EDNGTIN-4KUH3E "Dll::FileName inconsistent in ARMI",
Mini-loader now forms the filename correctly.
2) Fixed memory allocation bug in DPassiveDebugger
2.1) Fixed empty members of DProcess for bootstrapped processes,
(kernel and file server) for the benefit of the debugger
3) Enabled DPassiveDebugger on Cogent UDEB builds
4) EDNMHEY-4N3FV8 "TDma::iChannel should be set back to ENotBound ..."
5) PAR-4R5EGK "Definition of interrupt name should be in ASSP header ..."
Moved interrupt name definitions from ka_pic.cpp to a32*.h
MCGA, MISA, MAWD, MLNK, MEIG
6) Updated Cogent1, Brutusa, Series5mx1, l7200a, cirrus7211x, variants to
use symbolic interrupt names
7) Updated \e32\rombuild\rom.cfg to match stricter options in ROMBUILD
7) Jonathan
1) Changed meaning of KMEMTRACE kernel trace option. Now only traces
changes in chunk committed size and does not trace RHeap allocation.
8) Markdo
1) Changed WINS simulated mmc drive to 1MB size (from 2MB).
9) William
1) Added iRomRootDirectoryList to TSuperPage in K32STD.H
2) Added TExtensionRomHeader in E32ROM.H
3) Modified epoc\kp_ini.cpp to get the iRomRootDirectoryList from the
superpage
4) Changed bootstrap to pass the iRomRootDirectoryList address vai the
superpage, and added code to support extension ROMs. If a valid
extension ROM is found, the Root Directory List comes from the
extension rather than the main ROM.
Version 1.02.302
================
(Made by Nicolas, 19/10/2000)
1) Alastair
1) Applied fix which will be made on the release branch to EDNJBON-4PBJFD
"Crystal emulator won't run under Windows 98"
2) Replaced calls to Win32 "W" suffixed functions, which won't work on
Windows9x platforms, with new versions supplied in EUNIW.DLL.
3) Merged in Template Port from //epoc/release/bpk/.... This builds as
platform MTemplate and the variant is described by the \VTemplate
directory. Function comments have been changed to JavaDoc format.
Changes have also been made in accordance with Jonathan's changes to
E32 version 301, detailed below ...
\e32\include\v32arm.h --> \e32\ekern\epoc\katemplate\v32template.h
\e32\include\v32templateassp.h --> \e32\ekern\epoc\katemplate\a32templateassp.h
\e32\include\v32templatev1.h --> \e32\ekern\epoc\katemplate\v32template1.h
2) Nicolas
1) Fixed defect EDNNTHY-4PMKJW "RDebug Breakpoints Are Sometimes
Ignored Under Brutus". The B bit is now set in
KRomSectionPermissions and KRomPtePermissions. As a side-effect,
on CPUs with write-through caches the write buffer is now used for
shadowed pages. On SA-1100, setting B ensures the main data cache
is used instead of the mini one, and so fixes the defect.
3) Pete
1) Added WINS platform layer for MMC Controller.
2) Changed the WINS EPBUS.DLL from being a PC Card Controller
to being an MMC Controller (i.e emulation of the PC
Card Controller has now been disabled in WINS and replaced
with an MMC Controller emulator). Similarly, the Media Driver
for WINS drive X: is now a MMC Media driver rather than a CF card
Media Driver.
3) Fixed defect EDNMCAN-4P5C37 "File Mgr:Memory card menu is
not dynamic'. Fixed by powering down any MMC cards while
the media door is open and not allowing any operations on
the cards during this time.
4) Implemented inactivity timer on MMC Controller. While the
MMC bus is powered up, if a given period elapses (set at the
ASSP/Variant layer) where no MMC bus activity has taken place,
then the MMC clock is turned off and power removed from the
bus.
4) Dennis
1) Fixed defect EDNDFER-4N2K8R (Wrong error code returned by fix to
another bug). DThread::Read/Write now return KErrDied if the target
thread has exited.
5) Jonathan
1) Removed old distrib IPR files and script.
Version 1.02.301
================
(Made by MarkCa, 29/09/2000)
0) Must add the following line (BEFORE LINE 44) to
\\epoc\main\romkit\include\base.iby when releasing to mainline:
extension[VARID]=ASSP_DIR\BUILD_DIR\epower.dll System\Libs\EPower.dll
1) Pete
1) Merged in changes to MMC Controller from Cambridge base porting
branch.
2) Improved scheme in MMC Controller on how information on
number of MMC sockets and media drives is returned.
This is now set in the variant layer as you would expect.
3) Removed workaround for broken MCR instruction on ARM915T from
\E32\EKERN\EPOC\ARM\KC_MMU.CPP.
4) Changes to Cogent DTE serial port drivers. Also to
Cogent IREQ1 interrupt control code. These changes,
together your Cogent board re-configured with config 'p120_05_v12'
and also a PCB cut/strap modification to each DTE serial port to
reverse the TX and RX signals will allow the Cogent DTE serial ports
to work fully.
Cogent EUART3.PDD which had been temporarily modified
to drive 'SERIAL 1' rather than 'SERIAL 2' (PCB designations) has now
been changed to drive 'SERIAL 2'.
2) MarkCa
2) Added linkup port from BPC. Build with assp MLNK, variant LA.
3) Nicolas
1) Fixed defect EDNNTHY-4P3GT6 (RDebug::SingleStep() does not stop
after one instruction sometimes). Fix applied to arm generic and
windermere.
4) Jonathan
1) Include file re-org for IPR reasons - ASSP-specific include files live
in the ASSP directory under ekern:
- Include files describing ASSPs (TEiger etc) are named a32*.h:
v32eiger.h -> ekern\epoc\arm\721x\a32eiger.h
v32s1100.h -> ekern\epoc\arm\sa1100\a32sa1100.h
v32wind.h -> ekern\epoc\arm\windermere\a32windermere.h
v32cog.h -> ekern\epoc\generic\cogent\a32cogent.h
- Custom interface files are named v32*.h:
v32arm.h -> ekern\epoc\arm\721x\v32eiger.h
v32arm.h -> ekern\epoc\arm\sa1100\v32sa1100.h
v32awd.h -> ekern\epoc\arm\windermere\v32windermere.h
v32arm.h -> ekern\epoc\generic\cogent\a32cogent.h
v32mcore.h -> ekern\epoc\generic\cogent\a32cogent.h
- All variant-specific include files moved to the variants.
- kc_std.h -> kc_arm.h.
2) New exported file for the text notifier interface
\e32\include\twintnotifier.h split out from ws_std.h, which is no
longer exported.
5) Morgan
1) Integrated fix from 6.0 branch: Fixed EDNTRIN-4BPCTM2 "Detection of
pointer events stops - multiple platforms" for MAWD. Keyboard now
detects switch on keys while sleeping.
2) Removed \brutus\v32isa.h and references
3) Called through to the variant for the following functions on MISA
TBool ImpPsu::ExternalPowerPresent();
TSupplyStatus ImpPsu::MainBatteryStatus();
TInt ImpPsu::MainBatteryMilliVolts();
TSupplyStatus ImpPsu::BackupBatteryStatus();
TInt ImpPsu::BackupBatteryMilliVolts();
4) Moved MISA, MCGA, MCGM, MEIG default power models to variant layer so
they can be replaced as necessary
5) Removed P::SwitchOffBacklight(). Calls to this can be replaced with
Hal::SetBacklightOn(EFalse)
6) Promoted P::OsSwitchOnScreen() to Plat:: so it can be called from the
power model.
7) Added Plat::DebugInit() to force re-initialisation of the trace port
after switch off.
8) Fixes to the interface and implementation of DDebugger/DPassiveDebugger
6) Alastair
1) Applied fixes already made on release branch for EDNABRY-4PHFJJ:
"Emulator support for international keyboards is broken on Windows9x
platforms" and EDNSRES-4P4EFD: "CopyAnyWhere page fault on Win 98".
Version 1.02.300
================
(Made by Dennis, 13/09/2000)
1) Alastair
1) Renamed K32ADDR.H to M32ADDR.H and removed references to it from
WINS/WINC builds, since it isn't required.
2) Fixed Base v6.1 defect EDNWROS-4MJKWH
"Request for a change to emulator window size calculation".
The Emulator window no longer defaults to the Series5 Fascia bitmap
size, and expands to accommodate the specified digitizer size if
necessary.
2) William
1) Modified COGENT1 MMP files to use \e32\bmarm DEF files in all cases
2) Fixed a few places in RArrayBase where delete was being used on a
TAny* pointer. This should be User::Free() as there is no destructor
to be called.
3) Fixed EDNMMIR-4JQDYY "E32DEF.H doesn't correctly use all the features
of GCC" by changing the definitions of CONST_CAST etc.
4) Fixed EDNWROS-4MEJRS "_LIT generates compiler warnings when string
contains large Unicode constants" as suggested in the defect report.
5) Replaced lots of M*Core PP:Fault(PP:ESystemException) calls with
distinct Mcore::Panic(Esomething) calls so that we can tell which is
which.
6) Export \e32\bmarm\eloclu.def
7) Remove excess ".." in bootstrap makefile variables BUILDDIR and
TARGETDIR
3) Jonathan
1) Changes to distrib mechanism:
- "mnt distrib generic" no longer includes source under \e32\euser
since this is "IPR Category D: Additional" source. Split out MMP
files under \e32\euser into new \e32\additional.inf file.
- New "mnt distrib Additional" is similar to "generic" but does
include the \e32\euser source.
4) Dennis
1) Merged in MCore source from Motorola.
2) Added GCC helpers for 64-bit integers (long long) to EUSER so that the
same .DEF file can be used for ARM and MCore.
3) Added test program SAVEHAL to HAL component to store the modifiable HAL
values in \System\Data\HAL.DAT
6) Markdo
1) Added support for pci interrupts on Cogent.
Version 1.02.276
================
(Made by Morgan, 31/08/2000)
1) Alastair
1) Fixed defect EDNABRY-4NFNPX
"HAL component should create HAL.LIB from a dummy HAL.DLL project".
Now a dummy HAL.LIB can be created for ARMI, ARM4 or THUMB builds by
executing "abld build armi", or some similar command(s), for dependent
components to link to. The HAL.DLL created in the ARMI, ARM4 or THUMB
release directories is an empty implementation and should be ignored.
2) Morgan
1) Fixed defect EDNJBED-4NAFQ2 "Switch makes the digitiser freeze"
1) Gave the LCD a power handler so it can respond to on/off calls
from the power model. (Effects MISA, MAWD)
2) PowerStandby can now be aborted. Power handlers are given a
power-on call if they were sent power-off and standby is later
aborted. (Effects generic kernel)
3) Changed the MISA digitiser wrt 2
4) Improved the PM heuristics in the WINS and EPOC comms drivers to
guess when it is busy. (Effects WINS/EPOC comms)
Version 1.02.275
================
(Made by Alastair, 24/08/2000)
1) Alastair
1) Fixed defect EDNPHAR-4N3HRA "Access Violation when closing RLibrary
` handle".
Note that entrypoints of DLLs which are statically-linked
to, having already been dynamically-loaded, will not have their
entrypoints called in the statically-linked context.
Version 1.02.274
================
(Made by MarkCa, 17/08/2000)
1) Morgan
1) Fixed EDNMHEY-4N3FAY. Removed references to V32ETNA.H from MEIG and
MAWD platforms.
2) MarkCa
1) Fixed EDNTBLT-4MFKKY (peripherals need to be started after extensions
loaded). The pbus code has been moved to P::InitialiseLocalDrives(),
which is called from InitialiseLocalDrivesL().
Version 1.02.273
================
(Made by Alastair, 2/8/2000)
1) Alastair
1) Removed enum EKeyEuro from E32Keys.h - fixes EDNGASR-4MKLHW
"EKeyEuro should not be 0x80 but 0x20AC in e32keys.h"
2) MarkCa
1) Fixed defect EDNPSCE-4MFPQC Media Change doesn't work properly
on MMC Controller
\e32\drivers\medmmc\epoc\d_medmmc.cpp
Added return value checking for Engage() calls, particularly in
DMmcMediaDriverFlash::SessionEndDfc() where value is used to
determine behaviour on media door opening / closing.
\e32\epbus\epoc\linda\pa_mmc.cpp
Added KPBUS1 conditional door interrupt debug trace.
\e32\epbus\epoc\linda\pa_std.h
Made MediaState() definition in TLindaMMCMediaChange virtual. It
is implicitly virtual because it is derived from TMediaChangeBase.
\e32\include\p32mmc.h
Made TMediaState MediaState() pure virtual function in
TMMCMediaChange. The function is pure virtual from
TMediaChangeBase anyway. Added AccessMediaChange(TPBusNum aBus)
function to DMMCController. MediaChange(TPBusNum aBus) is
declared as a pure virtual protected function in
DPeriphBusController, and so is not accessible from
DMMCSession::Engage().
\e32\include\p32mmc.inl
Added definition for DMMCController::AccessMediaChange(TPBusNum
aBus). This is an accessor function that simply returns
MediaChange(aBus).
\e32\epbus\ps_mmc.cpp
Added checking to DMMCSession::Engage() to return KErrNotReady if
media driver tries to launch a write while the door for the
associated bus is opened.
\e32test\pccd\t_mmcdrv.cpp
Added test code to check above modifications. Source file must be
explicitly recompiled with TEST_DOOR_CLOSE #define set to non-zero
for test to work.
3) Jonathan
1) Disallow reads/writes to/from dead threads. Fixes EDNDFER-4MFNER.
2) Also removed some old code from ks_thrd, commented out since ER1.
4) Nicolas
1) Fixed EDNNTHY-4MNJXK (Kernel crash after calling ARM4 code from
THUMB code).
In the exception reporting code in __ArmVectorUndef(), the address of
the invalid ARM opcode is now forced to a four-byte boundary before
fetching the opcode. Fixed both in kc_int.cpp (arm generic) and
ke_int.cpp (windermere).
Version 1.02.272
================
(Made by RobertJ, 20/07/2000)
1) Morgan
1) Added a TVersion member to the Debugger API
2) Added a iDebugger member to TKernelPage so it is available
to externel debugger software over JTAG/BDM, at a constant
address. Removed K::Debugger.
3) Fixed EDNMMAT-4M6KHZ "TLex::Val returns the wrong number"
2) Alastair
1) Fixed EDNJBON-4MBMC8 '"set _epoc_drive_j=...." causing emulator
problems' by removing trailing spaces from _EPOC_DRIVE_? environment
variables as they are read.
3) Dennis
1) Fixed EDNKLIG-4LVJST (Device turns off when time changed).
The problem was due to K::TickCounter being updated when the system
time changed. This no longer happens - K::TickCounter now increments
every tick when the machine is on and does not change when the machine
is off. The offset between K::TickCounter and the real time clock is
remembered in order to make locked timers work.
Version 1.02.271
================
(Made by Morgan, 5/07/2000)
1) Morgan
1) Fixed EDNBBOY-4LWGW2
2) Fixed MCGA Monitor warnings
3) Fixed Cirrus7211a MMP warnings
Version 1.02.270
================
(Made by RobertJ, 29/06/2000)
1) RobertJ
1) Fixed EDNMHEY-4L3KX7 "References to Licensee hardware in generic code"
2) Changed \e32\drivers\dfir\epoc\d_fir.cpp to return an error code for a
read failure
3) Changed \e32\drivers\dfir\epoc\d_fir.cpp test for buffer full from
>= to > as limit excluded valid transfer address.
4) Changed \e32\drivers\dfir\epoc\dmabuff.cpp error code was not always
correctly returned. It could return zero when in error
5) Changed \brutusa\vi_fir.cpp to remove 1ms wait after write to
spin until TUR flag set (fifo is empty) then TBY flag transmitter busy.
This is to remove as much latency as possible in tx->rx turnaround
2) Jonathan
1) Fixed EDNJHAS-4LQPA5: changed MMAD to use ARM Base Restored Data
Abort Model.
3) Pete
1) Fixed EDNPSCE-4L3CHV "Device driver slow open
mechanism doesn't work properly on machines with more than one PCMCIA
slot."
In fact, the slow open mechanism is OK as long as a
separate unit number can be used to open a serial channel on each
slot. Hence, the change really just involves enabling the PC Card
Serial driver on Brutus to open on either PC Card slot.
Bottom slot - Unit number 3 (Com4).
Top slot - Unit number 4 (Com5).
Also a change to the function DPhysicalDevice::CheckForSlowOpening()
just to make this more logical.
4) MarkCa
1) Removed Kern::Printf() debug from DLindaMMCStack::DoPowerUpSM() in
\e32\epbus\epoc\linda\pa_mmc.cpp.
Version 1.02.269
================
(Made by Dennis, 22/06/2000)
1) Alastair
1) Using CP_ACP rather that CP_UTF8 for EPOC.INI file text conversion
since CP_UTF8 is not supported on Windows 95
2) Fixed EDNWROS-4L5NLW "Text window server has hardcoded width of 80
characters in some places" and EDNNGRE-4H2MKK "ConsoleBase does not
work on small screens" by replacing the hardcoded widths of 80
characters by iTextScreenSize.iWidth in
\e32\drivers\edisp\emul\win32\wd_wins.cpp.
3) Fixed EDNNSIH-4LCLNE "Access violation when loading SMUM.DLL..." by
using the base name of a dll rather than it's full name to get a Win32
handle to it, in case it's already been loaded from a different
directory.
4) Fixed EDNRCLF-4L4FB2 "User::LeaveIfError crash while trying to connect
to File Server Session in WINC" Now the dll reference table for the
starting process includes efile.dll and dependent dlls if efile.dll
has already been loaded by the process. This ensures that the
efile.dll's entry point is called on startup where necessary and that
the file server is started.
5) Fixed EDNRCLF-4LALXK "E32Initialize Crash".
UpWins::__DllAttachProcess() now changes "TRUE" return value from
Win32 DLLs to KErrNone.
2) Morgan
1) EDNRFID-4FQKKQ Zero-filled the 'Visibility Map' in the text window
server, during initialisation.
2) EDNMHEY-4L9NKJ Added TRawEvent::ECaseOpen and TRawEvent::ECaseClose
events
3) Added idle off behaviour to the comms LDD D_COMM. This stops the
machine turning off while
a) there is a write request outstanding,
b) 20 seconds elapse after the last character has been sent,
c) there is a read request outstanding
4) Altered comms PDD for all variants wrt above.
3) Dennis
1) Yet another 'fix' for defect EDNGBON-4JYNU6 (Inaccessibility of request
semaphores breaks EPOC connect). For WINC the semaphore name has been
reverted to be the same as ER5U.
4) Pete
1) Changes required to move Cirris Logic bootstrap over
to the new bootstrap scheme.
Version 1.02.268
================
(Made by Markdo, 07/06/2000)
1) Alastair
1) Fixed EDNTJOS-4JGME4 "Dialog title EPOC32 fault needs to be changed"
2) If dll entrypoints return TRUE, the return value is changed to
KErrNone.
This change means that Win32 DLLs linked to by EPOC DLLs can return
TRUE without resulting in a KErrBadLibraryEntryPoint error.
2) Nicolas
1) Fixed bugs preventing from building __EARLY_DEBUG__-enabled MCGA
kernels.
3) Dennis
1) Fixed EDNPPAN-4KEELX (HAL attribute for keyboard backlight needed).
2) Fixed EDNPPAN-4KPEEL (HAL attribute EAccessoryPower needed).
3) Fixed EDNJPAR-4KLLGL (HAL TManufacturer not generic).
4) Fixed EDNRFID-4KTFD3 (Bootstrap doesn't clear first new page table).
5) Removed ARM architecture 3 maths code from UC_I64.CPP and UC_REALX.CPP.
The architecture 4 code is always used now.
Version 1.02.267
================
(Made by Alastair, 23.5.2000)
1) Dennis
1) Fixed problem with all ARM bootstraps caused by switching mode from
svc26 to svc32 in a subroutine - LR will contain flags since the BL
was executed in 26-bit mode, giving an incorrect return address for
32-bit mode. Fixed by masking top 6 bits of LR if the routine was
actually entered in 26-bit mode.
2) Fixed defect EDNGBON-4JYNU6 (Inaccessibility of request semaphores
breaks EPOC connect). Thread request semaphores are no longer added
to the K::Semaphores container so that other EPOC code cannot access
them directly. On EPOC they are also unnamed, on Win32 they are named
PROCESSNAME::THREADNAME{EPOCTHREADID} so that the Win32 semaphore
inherits this name and can be found by EPOC connect.
3) Fixed defect EDNSCHM-4K7MTC (CActiveScheduler::Error() broken on ARM).
4) Fixed defect EDNDBAR-4K5EU3 (Close functions in RArray...)
5) Fixed defect EDNMBOX-4JZEAP (TDblQueLink should allow multiple deques).
6) Fixed defect EDNACLN-4JQK2F (HAL::Get panics on low memory).
7) Fixed defect EDNSCHM-4JHRRS (RTimer::Inactivity only useful for switch
off)
2) Nicolas
1) Debug::EnableBreakPoint() now flushes instruction cache after writing
breakpoints into memory. This fixes the transient test failures
observed on brutus.
3) Alastair
1) Introduced new scheme into WINS/WINC so that Dll entry-points are
called by EPOC in much the same way that they are called on a target
device.
When a process is started or when a library is loaded, the Kernel
creates a Dll reference table for the executable to mimic the Dll
information available on the target device. EPOC under WINS/WINC can
thus call Dll entry-points at the appropriate times. This change
means that the Win32 Dll entrypoint mechanism is no longer used for
calling Dll entry-points, and therefore avoids deadlock occurring due
to the "hidden" critical section used by Windows operating systems
while making entry-point calls. This change fixes Symbian defect
EDNATHE-4GAL54 -
"Emulator hangs during startup"
Whether this change will also fix similar deadlocks occuring with the
Emulator running with NT SP5 on Compaq PCs remains to be seen.
2) Added WINS/WINC base address for HAL.DLL - 0x6b000000
4) Morgan
1) Undid a change to TMillisecondTimer::CounterExpired that was causing
the digitiser to crash on Series5mx.
Version 1.02.266
================
(Made by MarkCa, 16/05/00)
1) Pete
1) Fixed EDNPHAR-4JCNSC (Can't access removable drives
on latetst Brutus Roms).
2) Fixed a couple of problems to allow UserSvr::ForceRemountMedia()
to work when a non-removable drive is specified. This now
allows the media driver for a non-removable drive to be swapped
successfully.
3) Modified the ISR for the Brutus PCMCIA/CF Card Serial driver (COM4)
so that it now handles all pending UART interrupts in
a single call rather than just the highest priority interrupt. This
fixes problems with the driver where it could 'lose track' of
interrupts when multiple interrupts were pending.
This fixes EDNACLE-4JZL3V (Brutus PCMCIA Serial I/O Adapter hangs...)
and EDNPREF-4JCKV (Protocol hanging on Brutus board).
4) Modified the Brutus PCMCIA/CF Card Serial driver (COM4)
to support change notification.
5) Fixed a problem with Brutus built-in serial ports
(COM1 and COM2) which were not correctly configuring the port when
either Odd or Even parity was selected.
2) RobertJ
1) Fixed \brutusa\vi_com2.cpp, \brutusa\vi_fir.cpp, \brutusa\v32isaba.h
to cope with transceiver SIR/FIR mode change
3) Morgan
Fixed some anomalies in the power handling code:
1) Removed ImpHal::Standby() and ImpHal::Standby(aWakeup) (from
MAWD, MISA, MCGA, MEIG, MMAD)
and replaced it with appropriate code in the power model.
The correct way to turn off the machine from kernel-side is to call
a) DPowerModel::PowerStandby() for immediate kernel-side switchoff
b) Kern::AddEvent(ESwitchOff) for ordered user shutdown
To turn off from user side, we call UserHal::SwitchOff().
1.2)Renamed K::SwitchOff() to Power::SwitchOff()
Renamed K::PowerOn() to Power::PowerOn()
Removed DPowerModel::PowerStandby(aWakeup) because it is useless.
2) UserHal::SwitchOff calls Power::SwitchOff which calls PowerStandby on
all power handlers. This will cause
DPowerModel::PowerTransition(EPowerNone) to be called (when each power
hander has called SetRequirement(0)). The power model should then
call DPowerModel::PowerStandby() to turn the machine off. (see a)
above).
3) DPowerModel::PowerStandby() works out when the next alarm is due, and
turns off the machine by calling the appropriate
DPowerModel::DoPowerStandby(/*aWakeup*/) function.
4) Added a User-Cpu-In-Use flag to the power model's power-requirement.
This stops the machine turning off while there is user-side processing
but no device drivers (power handlers) active. This flag does NOT
prevent idle. This flag is unset when UserHal::SwitchOff is called,
and set for PowerOn.
Version 1.02.265
================
(Made by Morgan, 18/4/2000)
0) Must change \\epoc\main\generic\romkit\include\base.iby line
file[VARID]=ASSP_DIR\BUILD_DIR\cVARLETTERxyVARIANT.dll System\Libs\Exyin.dll
to
extension[VARID]=ASSP_DIR\BUILD_DIR\cVARLETTERxyVARIANT.dll System\Libs\Exyin.dll
when integrating to mainline.
1) Morgan
1) Made all XYInputs into kernel-extensions
2) Removed TXYInput from M32HAL.H
2) Dennis
1) Fixed EDNJPAR-4G5FA8 (missing chunk types)
2) Fixed EDNMBOX-4DSJXH (missing #include guards on e32des8.h
and e32des16.h)
3) Fixed EDNJBON-4DCEHD (Kern::Printf doesn't support %c)
4) Fixed EDNPBAA-4HXEST (TDes::Format doesn't support %i)
5) Fixed EFNATHE-4GYFQ8 (Thread semaphores named after thread)
6) Fixed EDNJHAS-4HCQAF (SA1100 standby)
7) Fixed EDNDBAR-4C5E7V (RArray<> should have a TArray interface).
8) Fixed EDNJHAS-4HXEGT (Literal length as compiler constant).
9) Fixed EDNJHAS-4HXELS (Compile-time TFixedArray).
10) Fixed EDNJHAS-4HXEPN (Support for profiling).
11) Added CleanupStack checking functions:
CleanupStack::Pop(TAny* aExpectedItem) check top item and pop
CleanupStack::PopAndDestroy(TAny* aExpectedItem) check top
item, pop and destroy
CleanupStack::Pop(TInt aCount, TAny* aExpectedItem) Pop aCount
items, checking last one
CleanupStack::PopAndDestroy(TInt aCount, TAny* aExpectedItem)
Pop/destroy aCount items, checking last one
12) Removed compiler warnings from E32 and variants.
13) Added EMemoryRAMFree option to HAL to get amount of free RAM.
14) Fixed EDNCDUG-4J3QA8 (collate.h includes files not in \epoc32\include).
3) Alastair
1) Fixed EDNABRY-4JGJG4 "Test T_Float fails under WINS/WINC"
Version 1.02.264
================
(Made by Morgan, 7/4/2000)
1) Morgan
1) Added DPowerHandler::DoPowerTransition(aPowerState) virtual
function to the power handlers. Power handlers should
implement this if they need notification when the power state
of the machine changes.
2) Added DPowerModel::PowerTransition to call the power handlers.
Added pure virtual function DPowerModel::DoPowerTransition()
to replace the DPowerModel::SetPowerState function, (which has
now been killed).
3) Added Power Model locking - Power::[Un]LockPowerModel(). This
prevents the power model from shifting power states during
power critical periods.
4) Added ECaseState to the HAL.
5) Removed ImpHal::EmergencyStandby() from all platforms. This fn
is not used or needed any more.
2) Nicolas
1) Improvements and bug fixes in RDebug API implementation
so in-target-debugging will be usable on ER6 devices.
USER-LEVEL VISIBLE CHANGES:
* Debugging resources owned by the debugger and the
debuggee are automatically released when the
debugger/debuggee ends (this includes automatically
closing the debugging session).
* SDebugInfo has a new field containing the start
address of the debuggee's data/bss chunk: this is
mandatory to support the current toolchain in
gdbstub.
* THUMB breakpoints supported. Let A be the address
of a breakpoint to be set/cleared. In THUMB mode, A
should be passed as-is to RDebug. In ARM mode, A+2
should be passed. See below for a rationale.
* New class TArmBreakPoint added in kc_std.h. It
contains breakpoint characteristics and an inline
function that can be used to insert a hardcoded ARM
or THUMB breakpoint in user code.
INTERNAL CHANGES:
* Breakpoint notification in __ArmVectorUndef() was
disabled. It is now re-enabled. Code updated to
take into account both THUMB and ARM.
* Support for ARM BX instruction has been added to
single-stepping code. THUMB single-stepping still
not supported.
* In Debug::Continue(), removed code which stepped
over breakpoints located at the start address
because GDB already does the same thing. Removed
too, code which stepped over hardcoded breakpoints
because it was buggy and hardcoded breakpoints are
uncommon.
* New scheme used for breakpoints: a single 16-bit
opcode is used for both ARM and THUMB breakpoint.
For ARM, this pattern must replace the upper 16-bits
of the instruction to break at. As little-endian is
used, the breakpoint bit pattern is actually at
address+2, hence the API change described above.
* CPU-dependent modifications done in both generic ARM
and in windermere.
2) Fixed defect EDNNTHY-4H6PXT (PC address computed at
start of __ArmVectorUndef() is wrong in THUMB mode).
3) AndrewB
1) Removed K32SND.H, K32SND.INL, D32SND.H and D32SND.INL
from the export section of bld.inf. These files should
no longer be public since all sound functionality is now
managed by the Media Server.
4) MarkCa
1) \E32\EPBUS\EMUL\WIN32\PP_PCCD.CPP
Added ReadPasswordFromStore() and EncodePassword().
Added logic to RPlatPccdChunk::(Read|Write) to automatically unlock
card if pw in store Replaced assertion w. return code in
DPlatPcCardController::WritePasswordData(). Added comments to describe
how emulated mechanism corresponds with real MMC mechanism.
Modified password store to use 128-bit card ids to simulate mmc better.
DPlatPcCardController::PasswordControl(),
DPlatPcCardController::PasswordStoreLengthInBytes(),
DPlatPcCardController::(Read|Write)PasswordStore()
All modified to give same behaviour as default DPeriphBusController
virtual functions if _LOCKABLE_MEDIA is not #defined.
2) \E32\EPBUS\EMUL\WIN32\PP_STD.H
DPlatPcCardController prototypes for above.
Removed panics EWinsPcCard(MappingNotInStore|PswdStoreBadWriteDesc).
3) \E32\INCLUDE\E32SVR.H
Added "//#define _LOCKABLE_MEDIA" so WINS PC Card controller can be
built without locking mechanism.
5) Morgan
1) Changed declaration of Custom::DriveSettings to pure virtual on
MAWD and MMAD and MIEG platforms.
2) k32snd.h and d32snd.h are no longer exported, so:
Changed \series5mx\va_sdrv.h to get k32snd.* and d32snd.*
from \e32\include. Changed \cirrus72x1\va_sdrv.h to get k32snd.*
and d32snd.* from \e32\include. Modified k32snd.h and d32snd.h
to get header files from \e32\include
6) Alastair
1) Removed unused __USE_CRITICAL_SECTION__ #defines from the WINS/WINC
kernel.
2) Removed badly-spelt LedArrangeVerticaly keyword from the EPOC.INI file
processing code - use LedArrangeVertically instead.
3) Named the WINS/WINC kernel critical section mutex so that it can be
shared between processes.
4) Fixed Symbian ER5u defect EDNHLOO-4HGKKJ
"EXPORT_C used instead of IMPORT_C in header file".
7) Pete
1) Added extra member to TDriveInfoV1 class:-
TInt iRuggedFileSystem
With this set (to KRuggedFileSystem), it indicates to the
file server that it should implement a rugged file system.
This required the addition of a new variant function - DriveSettings()
so the ruggedization option can be selected at the variant level.
2) Added latest versions of LFFS Media drivers for WINS and Brutus - 4th
candidate version (R1.2) of LFFS.
3) Modification to E32 local media subsystem so that the reading
of partition information from the media driver on mounting
a drive is done asynchronously. This affects the media driver API as
follows:-
TInt DMediaDriver::PartitionInfo(TPartitionInfo &anInfo);
becomes
void DMediaDriver::ReadPartitionInfo(TInt &aResult,const TCallBack& aCallBack);
The ReadPartitionInfo() call just initiates the reading of partitiion
information with this typically being concluded on an interrupt. From
the interrupt, the driver signals the conclusion of the requests by
call 'aCallback', having first written the result of the request to
'aResult'. The partition info is now written by the driver directly
into its member data - DMediadriver::iPartitionInfo rather than being
passed back to the local media subsystem.
8) Dennis
1) Renamed iCount member of CObjectIx to iHighWaterMark. Added new member
iNumEntries which counts the number of actual entries in the index.
The Count() member function now returns iHighWaterMark so its meaning
is unchanged. Added new ActiveCount() member function to return the
new iNumEntries member.
Changed Exec::HandleCount() to return the number of actual handles open
rather than the high water mark of the handles array as before.
Version 1.02.263
================
(Made by MarkDo, 30.03.2000)
1) Morgan
1) Reorganised the super-page into TSuperPage, TKernelPage,
and TMachineConfiguration. TMachineConfiguration has
been promoted from WINS.
TSuperPage holds values discovered by the bootstrap that
are required by the generic kernel. TKernelPage
contains generic kernel data that needs to be preserved
over a warm reset. TMachineConfiguration contains
system wide settings that should be persisted over a
warm reset and machine state saves (backup).
2) Changed P::SetMachineConfiguration() and
P::MachineConfiguration() to use the new
TMachineConfiguration on all platforms.
3) Removed iDebugger from the super page
4) Fixed some warnings
5) Changed the bootstraps for MEIG and MAWD to match new
superpage layout.
Changed bootstrap\include\superpage.h to match new
bootstrap.
6) Removed PowerRestart functions since the power model
never calls them.
Version 1.02.262
================
(Made by Dennis, 23.03.2000)
1) Alastair
1) Added calls to Sleep(0) before all occurrences of SetEvent(),
ReleaseSemaphore() and ReleaseMutex() in accordance with advice given
in MSDN Knowledge Base article Q173260. This change should make one
variant of the Emulator Hanging bug less likely to occur.
2) MarkCa
1) \E32\EPBUS\EMUL\WIN32\PP_PCCD
Added ReadPasswordFromStore() and EncodePassword().
Added logic to RPlatPccdChunk::(Read|Write) to automatically unlock
card if pw in store.
\E32\EPBUS\EMUL\WIN32\PP_STD.H
DPlatPcCardController prototypes for above.
3) MarkDo
1) Added additional media attributes KMediaAttLockable and
KMediaAttLocked.
4) Pete
1) Removed the EUSER class UserPcCardCntrl.
2) Modified the function MBusDev::DoAsyncLateOpen() to
now take an additional second parameter 'TInt anOpenInfo'.
5) Dennis
1) Removed the EPOC registry - files US_REG.CPP, UB_REG.CPP and KP_REG.CPP
along with TRegistryCategory, TRegistryItemName, TRegistryItemValue,
CRegistry, CPersistentRegistry and Environment classes.
2) Removed most UserHal:: functions - these have been superseded by HAL::
functions.
3) Removed RThread::Create() overload taking a RProcess& parameter and
removed RProcess* parameter from the overload taking an RLibrary*
parameter. Threads may now only be created in the current process.
4) Reassigned ARM domains following demise of registry. 2 is still used
for page tables, 3 is now used for the RAM drive and 4 for F32.
5) Change to Brutus bootstrap to link at 0xc8000000 for compatibility
with 12Mb bootloader.
Version 1.02.261
================
(Made by Robert, 17.3.2000)
1) Morgan
1) Added User::ResetInactivityTime() to reset all
RTimer::Inactivity timers
2) Added TRawEvent::EKeyRepeat for adding auto repeated key events
to the event queue
2) Pete
1) Added kernel functions to read, write and return the
size of the Peripheral Bus Controller password store.
3) MarkCa
1) Added WINS PC Card locking features to test mmc (Crystal) functions
\E32\EKERN\KW_EXEC.CPP
Modified ExecHandler::Drive(ReadPasswordData|PasswordStoreLengthInBytes)()
to call P functions.
\E32\EKERN\KS_SVR.CPP
Modified svDriveWritePasswordData to call P::WritePeriphBusPasswordData().
\E32\EPBUS\EMUL\WIN32\PP_PCCD.CPP
Modified DPlatPcCardController::PasswordControl().
Implemented DPlatPcCardController::(Read|Write)PasswordStore(),
DPlatPcCardController::PasswordStoreLengthInBytes().
Read and write routines return KErrLocked if locked and accessing
EPccdAttribMem memory. This still allows chunks to be created for
locked cards.
\E32\EPBUS\EMUL\WIN32\PP_STD.H
Prototypes for above and store panic codes.
4) RobertJ
1) Entered suppilied mods to Linda SIR in vm_com2.cpp for all variants
Version 1.02.260
================
(Made by Alastair, 10.3.2000)
1) Alastair
1) Updated e32 rombuild scripts to pick up the test .IBY files
generated by Bldmake from the new directory structure implied
by recent changes to E32TOOLP.
2) Added temporary hack to bootstrap component extension makefile
so that mainline rombuilds for MEIG, MAWD and MMAD will still work,
now that the rombuild system has been changed to work with output
produced by the generic bootstrap build system.
2) Pete
1) Modified PC Card Controller emulator (EPBUS) in WINS
to implement Peripheral bus password functions (Lock/Unlock/Clear).
This is only possible on the simulated CF cards in Socket 0 (not the
simulated Compact rom card in socket 1).
3) MarkCa
1) \E32\EUSER\US_KSVR: converted
TBusLocalDrive::((Lock|Unlock)Drive)|ClearPassword) from async to sync.
\E32\E32SVR.H: changed TBusLocalDrive prototypes.
Version 1.02.259
=================
(Made by MarkCa 03-03-00)
1) Morgan
1) Guarded POS hooks with #define __SUPPORT_PARTNER_OS__ and updated
U32STD.H appropriately. This removes partner OS support from most
platforms.
2) 'Enhanced' the POS hooks. Kernel lock is now done after the POS
reschedule hook, instead of before. This makes it necessary to
check for the POS rescheduler being interrupted. If it has been
interrupted then we now make an early exit from the int-vector to
prevent running DFCs from the nested interrupt.
2) William
1) Fixed the borders for text-window server windows on EPOC devices.
WINS uses true Unicode fonts, but EPOC devices have a cp1252 font
built in, and so need to continue using the cp1252 encoding for the
box drawing characters.
3) MarkCa
1) Added TBusLocalDrive -> Exec -> ExecHandler functions for MMC
password support.
4) Pete
1) Added PasswordControl() function to TLocDrv,DMediaDriver and
DPeriphBusController classes.
Version 1.02.258
================
(Made by Pete 24/02/00)
1) Alastair
1) Updated a few .mmp files to hardcode .def file locations.
2) Dennis
1) Made TDesC8::Left(), TDesC8::Right(), TDesC16::Left() and
TDesC16::Right() truncate the requested length to Length() instead
of panicing.
2) Export COLLATE.H to \Epoc32\Include instead of \Epoc32\Include\Kernel
since it contains public interfaces.
3) Added DEBUG mode checking to ensure that heaps are not referenced by
DFCs. Before calling a DFC the current heap pointer is changed to
0xC90FDAA2 and is restored when the DFC returns.
3) Morgan
1) Removed \hal\group. BLD.INF is now in \hal. Removed annoying
"Nothing to do" declarations. Updated all variant hals to match.
4) Robert
1) Added new export ClearIrError for Linda in ka_linda.cpp and v32linda.h
5) Pete
1) Signal change notification added to Cogent DTE serial drivers (COM3 &
COM4).
2) Fixed problem with signal change notification on DTE
and DCE serial drivers where it was possible for a transition on a
modem status line to occasionally fail to trigger notification.
3) Added CF Card Serial driver for Brutus (COM4) - not yet tested.
Version 1.02.257
================
(Made by Dennis, 14-02-2000)
1) Dennis
1) Added HAL component.
2) Removed calls to most UserHal functions except for those which are
always available from the kernel.
3) Inlined ::operator new(TUint, TLeave) and
CBase::operator new(TUint, TLeave) to remove the need for the
TLeave parameter to be generated by the compiler.
4) Kernel now always disables auto switch off by default.
5) Added RTimer::Inactivity() and CTimer::Inactivity() functions to
support generic user inactivity timers.
6) Added K::InactivityQ and TInactivityLink to the kernel to implement
generic user inactivity timers.
7) Added User::InactivityTime() to return the time elapsed since the last
user event.
2) Morgan
1) Exported hal_int.h into the system\kernel include dir
2) Made \hal\group\config.mke generic so it works for HALs in
\hal component and also works for HALs in \<variant>\hal.
Renamed <variant>.hda and <variant>.hcf to values.hda and
config.hcf.
3) Added HALs to linda b,c,1 variants
4) Updated Variant::DisplayOn for all linda variants.
Code from Sampsa - not tested locally.
5) Fixed EPBUS build error in pa_std.h on MMAD platform
6) Added kernel-extension loading to kernel init.
Kernel extensions are loaded just before the file-server.
Extensions can have writable static data but global constructors
are not called.
8) Made keyboard drivers on all platforms into kernel-extensions.
9) Removed TKeyboard.
10) Fixed bug in TIdler::Idle(). There are now 64 ticks in a second.
3) Jonathan
1) Fixes to "mnt distrib" mechanism and dsitrib.txt files.
Made distrib.pl checking stricter: Checks for mising distrib.txt files
and for non-existent files listed in distrib.txt.
4) Pete
1) Re-enabled the ACD on MEIG.
2) Enabled main battery voltage measurement on Cirrus 7211
board (which is simulated using a pot. on the board). Also reference
voltage measurement. Disabled backup battery measurement.
3) Added digitizer driver for Cirrus 7211 board - using
ADC channels to measure screen position.
4) Generally tidied up variant for Cirrus 7211 board.
5) Modified MEIG bootsrap so it resets DRAM width to
32bit. (Cirrus 7211 repro program sets it to 16bit).
6) Temporarily re-assigned Cogent UART3.PDD to use
UARTB rather than UARTC since UARTC/UARTD still have h/w problems
with setting thier interrupt mask registers. This means Cogent now
has a single DCE and DTE serial port. The ports are now assigned:-
Driver Port Number Uart Port Type
------ ----------- ---- ---------
EUART1 Serial 0 UART-A DCE
EUART2 Serial 2 UART-C Not working
EUART3 Serial 1 UART-B DTE
EUART4 Serial 3 UART-D Not working
Version 1.02.256
================
(Made by Simon, 01-02-2000)
1) Dennis
1) Added aLength parameter to Dll::GlobalRead() to specify how much data
to read.
2) Added UserSvr::HalGet() and UserSvr::HalSet().
2) Pete
1) Modified Linda MMC Controller to include calls on the
power model to reduce the clock frequency during MMC operation (and
restore to normal clock frequency afterwards).
2) Corresponding changes to the Linda power model to support MMC clock
switching.
3) Added various additional functions to TLinda class to
support power model clock switching.
4) Added CF card modem serial PDD to MAWD - DATXB13
3) Morgan
1) Integrated Matt's changes for the LCD on the HPs
4) Simon
1) Restructured e32 source directory, and moved varients to new components
Version 1.02.255
================
(Made by Dennis, 19th January 2000)
1) Morgan
1) Bug fix for WINS emulator-configuration on the command-line
(EDNATHE-4ETJPC)
2) MMAD LC/LB/L1 clock moved to 52Mhz and changed LCD settings
3) EXPORT_Ced some more functions (in ImpAsic) for use by ENOS
4) Integrated changes from Nile to MMAD keyboard drivers
5) Added TRUST changes to MMAD bootstrap
6) Modification to the POS fiq vector to defer POS reschedule
when interrupted from irq or svc mode
2) Dennis
1) Removed X86 build
2) Removed NoLongerSupported... functions from EUSER and EKERN
3) Removed TReal96. Removed the implementations of Math:: functions which
use TReal96; only the TRealX implementations now remain. Rewrote some
code in UM_RTOD.CPP (real to text conversion) to use TRealX instead of
TReal96.
4) Removed SObjectIxArray, SObjectConArray and SObjectConIxArray. These
data members are now part of CObjectIx, CObjectCon and CObjectConIx
respectively.
5) Inlined CObjectCon::UniqueID() and CObjectCon::Count()
6) Changes to descriptor code from Andrew Thoelke. Copy constructors are
no longer explicitly defined (compiler generated instead). A protected
empty destructor has been added to TDesC8 and TDesC16 to prevent the
passing of TDesC and TDes parameters by value, which would result in
object slicing. To cope with static descriptors, an empty atexit()
function has been added to UP_DLL, UP_EXE and KC_EXE for all platforms.
7) Added machine coded 16-bit descriptor code for ARM (UC_DES16.CPP). This
is enabled by __DES16_MACHINE_CODED in U32STD.H.
8) Inlined TCallBack functions.
9) Removed TChar copy constructor. This means that TChar parameters passed
by value are now passed in registers by GCC. Modified machine coded
functions which take a TChar parameter to account for this.
10) Removed TLex8 and TLex16 copy constructors.
11) UserSvr::StaticCallList(), UserSvr::DynamicCallList() and
RLibrary::LibraryCallList() are no longer exported.
12) RChunk::CreateDllStatic(), RChunk::ReserveAt() and all overloads of
RChunk::Read() and RChunk::Write() have been removed.
13) Added inline functions for converting TProcessId and TThreadId to and
from TUint.
14) Removed RThread::Mark(), RThread::SetMark(), RThread::NotifyIfDie(),
RThread::SetNotifyIfDie(), RThread::Busy() and RThread::SetBusy().
15) Removed RProcess::Mark(), RProcess::SetMark() and RProcess::Busy().
16) Removed User::Abort() and User::Dying().
17) Inlined TRawEvent default constructor, TRawEvent::Type() and
TRawEvent::Ticks().
18) Removed RLoader::LoadProcess and RLoader::LoadLibrary functions which
don't take a TUidType. RLoader::Version() and RLoader::LoadProcess()
are no longer exported.
19) Changed CCaptureKeys to use RArray instead of CArrayFixFlat.
20) Removed class RMmu.
21) Removed CArrayFixA etc.
22) Options %E, %F, %G in TDes::AppendFormatList() now convert a TRealX
instead of a TReal96.
23) Fixed bug in chunk creation - between setting the domain and the
iOwningProcess, the SetNameL could leave. The chunk destructor would
then erroneously free the domain.
3) Alastair
1) Removed SROS, ARM3 and MARM targets from BLD.INF and GENERIC.INF.
2) Fixed minor problem with DIFILB.MMP.
3) Added support for specifying color depths Gray256 and Color64K in the
EPOC.INI file with the ColorDepth keyword. Changed the Emulator color
depths default to all supported color depths rather than just Gray2,
Gray4 and Gray16.
4) Made processing of all EPOC.INI file keywords case-insensitive, and
extended maximum line length from 80 to 256 characters. EPOC.INI
syntax errors are now captured and displayed in a Message box before
causing the Emulator to exit. Text from the EPOC.INI file is
converted to UNICODE before processing.
4) Mark
1) Added KLindaUidValue and used to set iMachineUniqueId in superpage
for MMAD L1/LB/LC.
5) Pete
1) Merged in latest changes to MMC Controller and MMC Media driver.
The Controller now supports multiple block read/writes requests
and the Media driver makes use of the multiple block reads.
2) Added support in TCogent for the 2nd Dual UART device (ST16C2552) and
also suppport for its associated interrupts (in KA_PIC.CPP).
3) Added DCE serial drivers to Cogent - not yet fully functional. Also
re-organized cogent serial PDDs. These are now assigned as follows:-
Serial 0 - DCE using ST16C552 device (CTS/RTS).
Serial 1 - DCE using ST16C552 device (CTS/RTS).
Serial 2 - DTE using ST16C2552 device (RTS,DTR/CTS,DSR,RI).
Serial 3 - DTE using ST16C2552 device (RTS,DTR/CTS,DSR,RI).
4) Removed TLocalDrive class from EUSER (use TBusLocalDrive instead).
5) Changed TBusLocalDrive Read(), Write() Format() functions to use a
TInt64 rather than a TInt to specify position within the drive.
6) Removed RLogicalChannel class from EUSER (use RBusLogicalChannel
instead).
7) Removed RDevComm class from EUSER (use RBusDevComm instead).
Version 1.02.254
================
(Made by Pete, 21st December 1999)
1) Petteri
1) Added extended serial port functionality as required by Linda. A new
pair of device drivers has been added to enable Linda to act as a DCE
device in addition to DTE. New notifications and capabilities have
been added.
Files changed:
Inc\D32comm.h Inc\D32comm.inl
Inc\K32comm.h Inc\K32comm.inl
Inc\K32std.h Inc\V32linda.h
Dcomm\D_comm.cpp Vmadlc\Vm_com1.cpp
Vmadlc\Vm_com2.cpp Vmadlb\Vm_com1.cpp
Vmadlb\Vm_com2.cpp Varmca\Va_com1.cpp
Varmca\Va_com2.cpp Varmcl\Va_com1.cpp
Varmcl\Va_com2.cpp Varmp2\Va_com1.cpp
Varmpb\Va_com1.cpp Varmpc\Va_com1.cpp
Varmpc\Va_com2.cpp Varmpd\Va_com1.cpp
Varmpd\Va_com2.cpp Varmpd\Va_com3.cpp
Vawdb1\Va_com1.cpp Vawdb1\Va_com2.cpp
Vcgac1\Va_com1.cpp Vcgac1\Va_com2.cpp
Visaba\Vi_com1.cpp Visaba\Vi_com2.cpp
Visaba\Vi_com3.cpp Vrosr1\Va_coms.cpp
Vx86pc\Vx_comm.cpp Dpwins\D_cdrv.cpp
Kamad\Ka_linda.cpp Bmmad\Ekernu.def
Group\Bld.inf Ksrc\Ks_chn.cpp
Files added:
Dcomm\D_commdce.cpp Vmadlc\Vm_com1dce.cpp
Group\Ecommdce.mmp Group\Dmtxlc1dce.mmp
Group\Dmtxlb1dce.mmp Vmadlb\Vm_com1dce.cpp
2) Pete
Changes to the above DCE serial drivers and the new notification aspects
of the DTE serial drivers:-
1) Added DCE serial driver for Linda L1 together with the corresponding
changes to the existing DTE serial drivers for Linda L1.
2) Postponed various notification completion calls to a DFC. Also, now
uses DThread::Write() were appropriate to return completion
information to the client thread.
3) Changed implementation of NotifyFlowControlChange() so this only
completes when a change to a h/w signal has actually changed the Tx
flow control status. Also, now XON/XOFF changes trigger this notifier
too.
4) Slight change to the way NotifySignalChange() is implemented.
5) Implemented notification changes to WINS serial driver.
3) Pete
Converted MEIG build to the Cirrus Logic 7211 - a ARM Architecture V4
device. MEIG can now be built for ARM4, ARMI and THUMB and can no longer
be used on ARM 7110 (Eiger) platforms.
1) Modifications to Varmca variant (i.e. Cirrus Logic 7211 evaluation
board:
- Alterations to reflect changed GPIO allocation for the Rev.B
evaluation board.
- Fixed problem with diagnostic LED.
2) Fixed a problem with enabling additional CL-PS7111 interrupts.
3) Fixed a problem with TEiger::SetUart2Config() so that the 2nd 7211
serial port now works OK.
4) Altered MEIG bootstrap to use ARMv4 rather than ARMv3 coprocessor
instructions to flush the cache and TLB. Also, now maps an extra page
for the additional 7211 Eiger specific registers.
5) Changed the definitions for MEIG in U32STD.H to use ARM4 rather than
ARM3 settings.
6) Added added support for additional 7211 registers in the TEiger class.
7) Modifed BLD.INF so that only the CA variant is built for MEIG
builds. The PB,PC,PD,P2,CL variants are no longer built.
4) Pete
1) Changes to e32\dcomm\d_comm.cpp to fix a s/w flow control
problem. If SetConfig() is called on the serial port with
KConfigSendXon set in config.iHandshake and the port h/w has not yet
been initialised then the driver attempts to send an XON char with the
h/w off. No XON char is transmitted and no subsequent data can be
transmitted.
5) Morgan
1) Bug fix for MMAD LB and LC variants
Version 1.02.253
================
(Made by Morgan, 3/12/99)
0) Use with F32(201)
1) Dennis
1) Use section mapped garbage area for SA1100 cache flushing. Main cache
flush area is at 0x43000000, mini cache at 0x43100000.
2) Added new function Mmu::FlushUnmap() which is called when RAM is
unmapped. This function flushes a writeback DCache to ensure that no
modified lines remain which relate to the unmapped memory.
3) Added new function Mmu::FlushCode() which is called after new code
is loaded into RAM - in DPlatProcess::Loaded and DPlatLibrary::Loaded.
This flushes the ICache on a split-cache machine.
4) Reinstated machine coded CActiveScheduler::Start() and CServer::RunL()
after applying the RunError() modifications from last release.
5) Added new define __CPU_EXC_VECTORS_MOVABLE in U32STD.H for
SA1100. This signifies that the processor offers a choice about the
virtual address used for the exception vector table. Changed SA1100
bootstrap to place the vectors at 0xFFFF0000 and changed Mmu::Init1()
to set the end of the home section to 0xFFF00000 on SA1100.
6) Fixed scheduler bug which caused a null pointer dereference in the case
where TheCurrentVMProcess=NULL, i.e. during boot.
7) Modified SA1100 bootstrap to output boot tracing to the same port as
kernel tracing. Added more boot tracing. Tracing can now be done after
the MMU is enabled, since the output char function checks the MMU
control register.
8) Modified SA1100 bootstrap to set the correct RAM wait states when
running from RAM, since the bootloader sets pessimistic values.
9) Modified SA1100 bootstrap to mark the exception vectors as cacheable
and as readable by all code and writeable by none.
10) Removed __MCGA__ hacks from KCARM. We now use __CPU_ARMV3 define to
determine whether to use architecture 3 or 4 MMU instructions.
11) EXE code chunks are now allocated at the top of virtual address space
in the same region as DLL code chunks. Also they don't move during a
reschedule. This means that split-cache machines need never flush the
ICache except following loading of new code to RAM.
12) When sharing a DLL code chunk, copy entry point from the library whose
code chunk is being shared.
13) Added "kerneltrace 0x80000000" to every HEADER.IBY file, so panics are
always traced in debug builds.
2) Morgan
1) Fixed a couple of warnings
2) Removed the 256 character limit from process command lines
Added Exec::ProcessCommandLineLength
Added RProcess::CommandLineLength()
Added RProcess::CommandLine(TDes&)
Changed UserSvr::ProcessCreate to take an additional cl HBufC parameter
Changed svProcessCreate and S::ProcessCreate[L] accordingly, and added
cleanup code.
Changed RLoader::LoadProcess RMessage to take additional cl parameter
Changed WINS getFileNameAndCommandLine initialisation function
DProcess::Create now takes and additional command line HBufC
3) Fixed PWM interface in TLinda
4) Added EStdKeyApplication<n> enumerations
5) Added KHARDWAREASSIST to the KTRACE #defines for switching on
hardware that can assist with kernel tracing
6) Mapped in CBA on EStdKeyDevice0..EStdKeyDevice3 on MMAD LB and LC
variants
7) Added hardware assist tracing to Variant::DebugOutput() on
MMAD platforms
8) Changed the XYInputType on MMAD platforms to EXYInputDeltaMouse,
and MCGA to EXYInputMouse by implementing ImpHal::XYInputType()
9) Integrated Matthew's new MMAD L1 variant
10) Integrated Matthew's WINS changes for mapping application keys
3) Simon
1) Use Cogent extended PCI space if available
Version 1.02.252
================
(Made by Simon 25-11-1999)
1) Morgan
1) Process create now correctly notifies the debugger of the new main
thread.
2) VMADLB and VMADLC report correct physical screen dimensions.
3) Updated the MMAD bootstrap to take new flash initialisation values
4) Pushed DPassiveDebugger Rom-library-hunting into 3rd stage kernel
initialisation. This is to allow the kernel heap to grow as required.
Also, reorganised strings in the DPassiveDebugger tables to take up
less room.
5) Added EVT100.MMP to build the vt100 display driver.
2) Alastair
1) Changed exception-handling for system threads under WINS/WINC so that
exceptions are passed on to the system debugger for handling rather
than producing the Plat 46 dialog.
3) Andrew T
1) Fixed regression defect EDNMDON-4DJK8E (from Defect tracking V3.0) as
suggested.
2) Added a further check on the message slot handle in
Kern::MessageComplete to verify that it lies within the kernel heap,
prior to the validity check. This prevents bogus message handles from
causing a kernel exception and crashing the kernel.
2a) Modified E32 t_svr test to test the new check.
4) Andrew B
1) Added virtual "RunError" function to CActive definition in E32BASE.H,
and modified CActive::Scheduler::Start() to use new CActive::RunError
function when RunL leaves. It is a source compatible but not binary
compatible change.
2) Modified U32STD.H to prevent machine-coded versions of CServer::RunL()
and CActiveScheduler::Start() being used until the implementations are
updated to reflect the changes to the C++ versions.
3) Fixed long-standing defect in CActive::Deque() which stopped active
objects being re-added to scheduler. Updated T_ACT.CPP to test
CActive::Deque() defect and new RunError function.
Version 1.02.251
================
(Made by Morgan, 25/10/99)
1) Alastair
1) Removed local function loadEnvironmentVariablesL() from
KPWINS\KP_INI.CPP. This change addresses ER5u software problem
EDNKDEY-4AAKEW "Long environment variables stop the emulator working".
The full emulator (from Mainline build 00019) still appears to work OK
without this function. Note that this change means that F32 will no
longer search the system path for DLLs to be loaded dynamically.
2) Added code to make it possible to set the User::JustInTime() value
from the EPOC.INI file for WINS debug builds, using the syntax
JustInTime 1 # turn on just-in-time debugging
JustInTime 0 # turn off just-in-time debugging
Presumably only the latter will ever be used since JustInTime
debugging is enabled in WINS debug builds by default. The keyword is
case-insensitive. This change addresses ER5 defect EDN414664 "Should
be possible to set User::JustInTime from the EPOC.INI file".
3) Refrozen EKERN.DLL for WINS/WINC so that the four functions referenced
by ordinal in source code appear at the start of the frozen .DEF file.
This means WINS/WINC executables linking to EKERN.LIB will need to be
rebuilt with the latest EKERN.LIB before they will run against the
latest EKERN.DLL.
2) Morgan
1) TMachineInfo::iXYInputPresent has become iXYInputType. Added
enum TXYInputType in e32hal.h. This can take one of the values
EXYInputNone, EXYInputPointer, EXYInputMouse (delivers absolute
values in mouse events), EXYInputDeltaMouse (delivers relative
values in mouse events).
2) Removed MouseButtonDown and SetMouseButtonDown from UserHal and
Hal classes. Binary incompatable change. Incompatability limited
to the functions added last release.
3) Removed unused events from TRawEvent: EFlipChange, ESimButton*
and EPointerMoveBy. Removed unused TFlipPos from TRawEvent.
4) Updated MMAD emulated-mouse driver to use new API
3) Alex
1) Added a preliminary version of MMC stack controller and MMC media
driver (currently disabled) to the "peripheral bus" drivers family.
2) Added Linda implementation of MMC stack ASSP layer.
4) Bob
1) Applied suggested fix to TLinda::ArtError and TLinda::IrError in
kamad\ka_linda.cpp
Reset the fifo only when error condition, not after every byte
5) Pete
Change to bootloader to support CL-PS7211.
Temporarily disabled ADC on Cirrus Logic board due to problems with it.
Version 1.02.250
================
(Made by Morgan, 27/9/99)
1) Morgan
1) Added the very random number generator Math::Random and Kern::Random.
Any device drivers that can derive random bits from their devices
should call Kern::RandomSalt(TUint aBitOfSalt) to mix up the kernel's
random pool. Only the LSB is used.
2) MAWD Arm::IrqDispatch adds random salt from TWind::RtcTickCount()
MEIG Arm::IrqDispatch adds random salt from TEiger::RtcTickCount()
MISA Arm::IrqDispatch adds random salt from TSa1100::OstData()
MCGA Arm::IrqDispatch adds random salt from TCogent::TimerCounter()
3) Added DPowerModel::NotifyEvent called from Kern::AddEvent. Override
this function in your power model to implement auto timeout behaviour.
eg
DMachinePowerModel::NotifyEvent()
{ iLcdPowerHandler->ResetAutoSwitchOffTimer(); }
4) Fixed HW IO mapping problem in the MMAD bootstrap
5) Fixed \e32\rmmad\header.iby. Now includes screen size.
2) Chris
1) Fixed bug in TDMA (generic dma) affecting receive transfers large
enough to require breaking down into multiple dma operations.
2) Changes to TLinda fns DmaSrcSize() and DmaDestSize().
3) Changed ImpDma::GetInterrupt() and added code to set up the correct
device widths of peripherals for dma on Linda.
4) Changed fast ir LDD to store ir frames on 4 byte boundaries.
5) Changed PDD/LDD fast ir interface to be more generic and added
Caps/Config.
6) Added incomplete Linda fast ir pdd(difilb). Supports 1M and 4M.
3) Jonathan
1) Fixed ER5u defect EDNGASR-46SD7V "Special keycodes conflict with
Unicode values" by making non-character keys start at 0xff80 and
special keys start at 0xff70, within the UNICODE private area.
inc\e32keys.h
4) Petteri
1) Added base mouse support.
[Note, this API has not been finalised. If you use these
APIs expect source and binary incompatable changes next
release]
Files changed:
Vmadlc\Vm_hw.cpp Usrc\Us_exec.cpp
Vmadlc\Vm_keyb.cpp Kpehal\Kph_inf.cpp
Vmadlb\Vm_hw.cpp Kamad\ka_inf.cpp
Vmadlb\Vm_keyb.cpp Kpepoc\Kp_dat.cpp
Inc\E32svr.h Bmarm\Euseru.def
Inc\E32hal.h Bmmad\Ekernu.def
Inc\U32std.h Bmawd\Ekernu.def
Inc\M32hal.h Bmcga\Ekernu.def
Inc\M32std.h Bmeig\Ekernu.def
Kaisa\Ka_inf.cpp Bmisa\Ekernu.def
Kacga\Ka_inf.cpp Bmros\Ekernu.def
Kaeig\Ka_inf.cpp Bwins\Euseru.def
Karos\Ka_inf.cpp
Keawd\Ka_inf.cpp
2) Added virtual cursor support for Linda
5) Simon
1) MCGA will now 'dual boot' on CMA120 and CMA102
6) Alastair
1) Changed GROUP\GENERIC.INF so that ELOCL.DLL is not built for
THUMB.
7) Malcolm
1) Added new feature to rom.bat find template files by scanning
the e32/r*/ directories for .oby files. The config file now
simply specifies which one is the default - if this is not
present then another template is picked. The new
--list-templates option lists the known templates, along with
a description. The description is picked up from a line in
the .oby file starting //#NAME:
2) Added ability to reuse rom.oby file in rom.bat (--reuse).
This is not recommended but is useful for quick .oby file
hacks. There is a heuristic employed to determine the ASSP of
the rom.oby file from its name, or it can be specified
directly.
3) Changed MAWD, MEIG, MISA, MAD, SROS and SARM bootstraps to
pick up the kernel trace mask from the rom header (requires
rombuild > 125 to write the info there).
8) Alex
1) Fixed multiplier for TMillisecondTimer on MMAD, and adjusted
delay in keyboard driver.
Version 1.02.197
================
(Made by Morgan, 26/8/99)
SOURCE-ONLY RELEASE
Built with MSVC6
1) Jason
1) Removed Casius MISA variant and all references to FPGA14 from MISA
code.
2) Uncached screen chunk in \KAISA\KA_INI.CPP to fix stripy cursors.
3) Update the MISA OST timer and match registers (KA_INI.CPP) over switch
off/on.
4) MISA Seting of RTC clock now wait for one 32KHz tick.
5) MISA Codec sample rate divider functions fixed.
6) MISA Tick code fixed.
7) InitSystemTime() implemented for MISA.
8) MISA Bootstrap now uses correct MMU permissions for page tables.
Pagetables unlocked and locked (KA_ISA.CPP) in MISA sleep code.
9) MISA Mini-Cache is now mappable and flushable, using new mappings of
EUserRwNotBuff, ESupRwNotBuff.
10) \VISABA\VI_HW.CPP variant tidied up with Eikon friendly constants.
11) \VISABA\VI_XYIN.CPP restructured.
12) Added OS Timer Watchdog Enable to MISA sleep code and cleared all
the OST status bits after wakeup.
13) Fixed possible MISA millisecond timer code bug.
2) Alastair
1) Removed ESOUND.LDD and ESDRV.PDD - these projects are now part of
E32TEST.
2) Used #defines in GROUP\GENERIC.INF to ensure that KC_EXE.LIB is not
built for THUMB.
3) Moved EUSER from BLD.INF to GENERIC.INF so that it's built only for
generic platforms rather than ASSP-specific platforms. Used #defines
so that it's not built for THUMB.
4) Added empty target "FINAL" to GROUP\BOOTROM.MKE.
5) Disabled VC6 warning C4414 - short jump to function converted to near,
in UPWINS\UP_I64.CPP and UPWINS\UP_REALX.CPP.
6) Fixed BOOTROM.MKE so that SROS builds correctly report their
releasable.
7) Added extension makefile KCARM\ABORTH.MKE to copy the correct abort
handler object file to \Epoc32\Build\...., and corresponding Perl file
KCARM\ABORTH.PL.
8) Changed IBY files in ROMBUILD directory to #include the E32TEST and
F32TEST IBY files generated by ABLD TEST ROMFILE.
9) Removed narrow frozen .DEF files.
10) Re-frozen all .DEF files in new format so that the C++ name
appears with the mangled name for all exports and windiff can be
used to compare frozen .DEF files with generated .DEF files.
3) Petteri
1) Added a new variant (Vmadlc) for Linda Macro m1.3BB rack.
Files changed:
Group\Bld.inf Kbmad\E32var.iby
Kbmad\Rom.cmd Kbmad\Rom.oby
Files added:
Vmadlc\Distrib.txt Vmadlc\Vm_com1.cpp
Vmadlc\Vm_com2.cpp Vmadlc\Vm_hw.cpp
Vmadlc\Vm_kdata.cpp Vmadlc\Vm_keyb.cpp
Vmadlc\Vm_pbus.cpp Vmadlc\Vm_xyin.cpp
Inc\V32madlc.h Group\Cmkdlc.mmp
Group\Cmkylc.mmp Group\Cmxylc.mmp
Group\Dmtxlc1.mmp Group\Dmtxlc2.mmp
Group\Vmadlc.mmp Bmmad\Vmadlc.def
Bmmad\Vmadlcu.def
4) Morgan
1) Improved the MMAD TIdler to perform tickQ correction and to take notice
of active millisecond timers
2) Wired in the TRtc class to the SetSystemTime function
3) Corrected ImpMmu::FlushShadow for MMAD
4) Added a flag to MilliSecondTimer so we can tell if the Millisecond
timers are being used while in Idle
5) Bug fix to TDma::GetLargestXfer which was delivering odd count values
6) Added initialisation function optimisation for pipe and copy commands
in ImpDma
7) Incorporated TLinda::SetStateDiscriminator into the ImpDma
initialisation functions
5) Pete
1) E32 provides the following function to facilitate notification
of media change events:-
TInt UserSvr::MediaChangeNotify(TMediaDevice aDevice,TRequesStatus *aStat);
This currently only supports a single request to be outstanding on any
socket at any given time. Hence, for platforms which have more than one
socket, it is only possible to be notified of a media change on one of
these sockets. This has been changesd to allow a request to be
outstanding on each socket.
2) Removed support for 2nd PC Card socket from VARMPD - no longer have a
rack with this h/w functional.
3) Modified function UserSvr::ForceRemountMedia(TMediaDevice aDevice) to
allow a fixed drive as well as a removable drive to be specified. It
can now be called after having installed a new media driver to force
a remount on the appropriate drives. This fixes a problem where a new
driver for a fixed device is loaded but there is no way to force F32
to remount the local drives associated with the media driver.
4) Modifications to Varmca variant:
- Alterations to reflect changed GPIO allocation for the LCD interface
on Rev.B evaluation board.
- Enabled diagnostic LED.
- Enabled SPI-ADC device.
6) Chris
1) Added mouse driver to Cogent + hardware cursor.
2) Changed name of serial driver on Cogent to that expected by Romkit.
3) Tidied up fast ir.
4) Changed unit masks for Com2 and Com3 on Brutus.
5) Modified Cogent serial drivers. Passes T_Serial.
7) Jonathan
1) Removed kc_exc.cpp and ke_exc.cpp from all distributions until IPR
issues are clarified.
8) Dennis
1) Added __SWITCH_TO_ARM and __END_ARM macros for use in test programs to
enable them to build in THUMB without rewriting assembler code.
2) Modified test ROM build script to work with new GCC.
3) Initialise .data and .bss for ROM-resident device drivers when driver
is loaded.
4) Corrected TLocDrv::Caps(TDes8& aCapsBuf) so it doesn't assume that the
descriptor parameter is a TBuf8.
5) Removed Kern::Printf() from Kern::PowerGood() - this causes the serial
driver to lock up since it gets called in the serial driver's ISR.
6) Modifications to ROM.BAT:
Added --inst option to specify instruction set. If not specified,
defaults to first instruction set listed for the ASSP in ROM.CFG.
Build (--build) can now be UDEB or UREL only. If not specified,
defaults to the first build listed in ROM.CFG (ie UDEB).
Changed format of ROM.CFG - [VARIANTS] section has been scrapped.
[ASSPS] section now lists for each ASSP the ROMBUILD flags to use, the
variants supported and the instruction sets supported.
9) Simon
1) Mouse is now optional, ie doesn't hang if no mouse connected
Version 1.02.196
================
(Made by William, 13.8.99)
SOURCE-ONLY RELEASE
Built with MSVC6 and ARMv4 (GCC 518).
CHANGES TO RELEASABLE
1) William
1) CAKD*.MMP files no longer specify ASSP_LIBRARY EKERN.LIB, so that they
can be built correctly for THUMB.
2) U32STD.H now defines __SUPPORT_THUMB_INTERWORKING for ARMv4T, using
#ifdef __ARM_ARCH_4T__ to distinguish between MAWD compiled with the
new GCC and MAWD compiled with the old toolchain.
3) The GCC "_call_via_rX" helper functions required by THUMB code are
hacked into up_dll.cpp and uc_exe.cpp. This should be removed and
replaced by the proper GCC.LIB mechanism.
4) RequestComplete tracing is now conditional on KTHREAD+KSEMAPHORE
5) BOOTROM.MKE CLEAN target now removes intermediate .o files
Version 1.02.195
================
(Made by Alastair, 2.8.99)
SOURCE-ONLY RELEASE
Built with MSVC6
CHANGES TO RELEASABLE
1) Alastair
1) E32 now releases zip files for ARMI, ARM4 and THUMB in the same style
as it's other releasables. Note that generic EUSER.LIB and EDISP.LIB
are still released with the ASSP-specific releasables, though all
other generic stuff is now contained in the 3 new zip files. To use
these releasables it's necessary to use E32TOOLP version 120 and the
new GCC compiler.
This change is academic for this release since it's source-only, also
it has, in fact, been built with the old gcc compiler.
1) Alastair
1) Hopefully fixed ER5u defect EDNDMAI-49UE4V
'"KERN RE-ENTRANT" Panic' in KPWINS\KP_UTL.CPP by converting the
UNICODE RDebug::Print text to NARROW 256 characters at a time using
a stack variable rather than allocating space on the heap.
2) Fixed ER5 defect EDNKDEY-45NHVH
"Unhandled exception checking for priority key (emulator only)" in
WSRC\KY_TRAN.CPP by making sure that capture key data is not left
uninitialised when Windows produces a character code that the EPOC
translation tables didn't.
3) Fixed ER5u defect EDNWROS-46YC3V "Plat fault or Plat panic?" in
KPWINS\KP_UTL.CPP so that the Fault/Panic distinction is part of the
text inside the alert box rather than just in the title where nobody
ever thinks to look.
4) Split BLD.INF into BLD.INF and GENERIC.INF with GENERIC.INF containing
details of those projects which are not ASSP-specific. This change
corresponds to changes in E32TOOLP version 120 and is designed to
support building E32 with the new GCC compiler for the new targets.
To build E32 it is now necessary to build the generic libraries, then
the ASSP-specific libraries, then the generic releasables, then the
ASSP-specific releasables.
Updated .OBY files so that, if E32 is built with the old GCC compiler,
they will look for the generic releasables in the right places. They
will need more updating to work with the new compiler though.
5) Changed EKERN.MMP and KC_EXE.MMP so that EKERN links to KC_EXE.LIB
rather than KE_EXE.LIB under MAWD.
6) Now building E(EXE|DLL).LIB rather than E(EXE|DLL).o under MARM and
E(EXE|DLL).obj under WINS. This means that using this version of
E32 requires E32TOOLP version 120.
7) Changed E32DEF.H so that WINS/WINC warning C4710, about functions not
being inlined, is disabled for MSVC versions 5 or later, rather than
just MSVC5.
8) Commented out user-side tracing macros under WINS/WINC builds in
INC\U32STD.H because they cause the kernel to go re-entrant. This
should be investigated further.
9) Integrated changes for compiling with VC6 from Ann Windsor and William
Roberts. Changes to EKERNU.DEF and EUSERU.DEF mean that this release
of E32 will not build with MSVC5 and the import libraries from this
release will not be compatible with MSVC5.
2) Malcolm
1) Enabled debug monitor for SROS, and protected some MMU
instructions for single builds.
2) Added new trace level, KMEMTRACE that dumps alloc/free/realloc and
chunk adjustments (chunks in SINGLE only) to the debug log
3) Morgan
1) Made Mmu::AllocPageTable public so it can be accessed by the debugger
2) Added MMAD-specific debugger implementation, and null debuggers for
those platforms without support
3) Moved useful ARM Mmu definitions into kcarm\kc_mmu.h
4) MMAD debugger now updates the thread id register, remaps the Rom
as small pages, and allocates some free pages for SW breakpointing.
5) Removed explicit references to variants from KC_UTL.CPP and removed
reference to the Eiger variant (V32ARM.H) from the global header
KC_STD.H. Pushed P::StartupBeep into the ASSP layer. Re-organised
P::OutputToCom1 functionality so the variant is only referenced in
ASSP layer. Changed P::ScreenInfo() to use the Hal function instead
of calling the variant directly.
6) Defined TExtInterrupt in KC_STD.H, but it should really be moved into
the Eiger platform which seems to be its only client.
7) Modified the Asic::Debug* functions for all ASSPs
8) Added MMAD interfaces for the Psu and Rtc to V32MAD.H and wired them
into the kernel
9) Implemented EDNWROS-49ZKUX "Unhelpful trace message"
4) Dennis
1) Added alignment checking on 16-bit descriptor functions in DEBUG mode.
2) Modified User::HandleException() to trap leaves by the exception
handler and pass them on after clearing the last chance flag and doing
User::WaitForAnyRequest();
5) Chris
1) Added slow ir pdd for Linda (dmtxlb2).
2) Added serial pdd for Cogent (datxcg1 and datxcg2).
3) Made small change to Brutus slow ir pdd (ditxba2).
Version 1.02.189
================
(Made by Kal Patel, 22nd July 1999)
1) Jonathan
1) TStringToDateTime::NextToken():
Fixed defect EDN830354: Allow am/pm designators to be non-alpha and >3
characters.
Reapplied and reworked an ER5 ICF (defect EDNANOE-49BFV2): Match
against abbreviated month names instead of leading substrings of
months.
usrc\us_parse.cpp
2) Morgan
1) Added an implementation of TMillisecondTimer for MMAD
kamad\ka_pic.cpp
2) Implemented workaround for ARM915T MMU MCR instruction bug
Interrupts are disabled over writes to the domain access control
register
kcarm\kc_int.cpp
kcarm\kc_sched.cpp
inc\kc_std.h
3) Fixed the definition of delta and tick TTimerModes
inc\v32linda.h
4) Added a new class TIdler, that switches off rescheduling and the tick
during idle, and reenables it shortly before a timer is due.
kamad\ka_idle.cpp
kamad\ka_std.h
5) Exported functions from DPowerModel for those power models that
are implemented outside of the platform kernel
inc\k32power.h
ksrc\ks_power.h
6) Moved the MMAD variant to VMADLB, and invented a custom layer suitable
for MMAD. VARMLB.DLL is now VMADLB.DLL. CA*LB.DLL is now CM*LB.DLL.
DATXLB1.DLL is now DMTXLB1.DLL.
varmlb\*
inc\v32mad.h
inc\v32madlb.h
group\ca*lb.mmp
group\varmlb.mmp
3) Alastair
1) Added RESOURCE target to GROUP\BOOTROM.MKE.
2) Removed defunct .DEF files from BSARM, BSCGA and BSROS.
3) Removed defunct UPEPOC\UP_CON.CPP.
4) Removed defunct BLD.CMD files from various directories.
5) Updated GROUP\E32.FTC to include the MCGA releasables.
6) Changed GROUP\BOOTROM.MKE to copy KBMCGA\COGENT.BIN to
\EPOC32\Release\MCGA\BOOTROM.BIN. Updated KBMCGA .OBY files
accordingly.
7) Changes to support building with new compiler (*.oby files,
/group/mnt.bat files, /group/bld.inf files etc)
4) Simon
1) Fixed problem with cogent timer interrupt going off for no good reason
kacga\ka_pic.cpp
2) Fixed problem in vcgac1\va_keyb.cpp that caused intermittent exceptions
5) Malcolm
1) Added new RAM Loaded code functionality
2) Modifications for Unicode SROS
3) Incorporated Kista-Patch-Baseport-3.00-990717A
kbros/rose.inc
vrosr1/va_xyin.cpp
karos/ka_rose.cpp
INC/D32COMM.H, INC/V32Rose.h
vrosr1/va_coms.cpp
group/DATXR11.MMP
group/bld.inf
6) Kal
1) Added the Aort handler functionality for flash filing system use
karos/ka_ini.cpp
karos/ka_excep.cpp
karos/ka_std.h
karos/ka_rose.cpp
WSRC/wd_rose4.cpp
group/EKERN.MMP
INC/V32Rose.h
2) Added Fast Timers on A1C
karos/ka_rose.cpp
karos/ka_pic.cpp
karos/ka_std.h
INC/distrib.txt
INC/V32FTick.h
group/bld.inf
Version 1.02.188
================
(Made by Dennis, 13th July 1999)
1) Morgan
1) Removed the SPI controller from MMAD platform
kamad\ka_spi.cpp
kamad\ekern.mmp
kamad\ka_psu.cpp
2) Used a more efficient method for draining the write buffer on MMAD
kcarm\kc_mmu.cpp
kamad\ka_ini.cpp
3) Included a missing call to POS in the slow swi dispatcher
kcarm\kc_int.cpp
4) Frozen BMMAD
bmmad\*.def
5) Added a gcc-helper static library (EGCC.LIB) which currently
only contains the __fixuns* helper functions
upepoc\up_gcc.cpp
group\egcc.mmp
6) Implemented RTC emulation
kamad\ka_utl.cpp
kamad\ka_std.h
kamad\ka_pic.cpp
7) Added state discriminator functions to TLinda and updated Linda Dma
kamad\ka_dma.cpp
kamad\ka_linda.cpp
inc\v32linda.h
2) Petteri
1) Added an improved version of
varmlb\va_keyb.cpp
3) Alastair
1) Added Graham Asher's updates to his change to UMATH\UM_DTOR.CPP so that
it builds in narrow variants.
2) Added GROUP\BOOTROM.MKE - a bldmake-compatible custom-build makefile
for building bootstraps.
3) Removed some hacks from MNT.BAT now that MAKMAKE from E32TOOLP version
109 builds static libraries to \EPOC32\Release\MARM rather than
\EPOC32\Release\MEIG.
4) Moved \e32\inc\conswins.def to \e32\inc\econs.def and listed it for
export to \epoc32\release\wins\econs.def. Made a corresponding change
to \e32\inc\consmarm.def and removed \e32\inc\consmisa.def.
5) Moved the implementation of the RConsole and TConsoleKey classes into
EWSRV.DLL from ECONS.DLL. Stopped exporting all functions from the
CConsoleTextWin Class under WINS/MARM except the function to create a
new console. Removed the dummy export from the text window server.
This means there is no longer a mutual link-time dependency between
ECONS.DLL and EWSRV.DLL - ECONS.DLL merely depends upon EWSRV.DLL, and
the WINS ECONS.DLL has the same API as the WINC one. and not vice
versa.
6) Added fetcher definition file, E32.FTC, to the group directory.
7) Fixed ER5U defect EDNABRY-48YFUC "Compiling E32 with MSVC6 reveals
problems with TPtr8 and TPtr16 copy constructors."
Fixed in USRC\US_DES8.CPP by taking the contents of the function
TPtr8::Set(TPtr8 &aPtr) function and adding it to function
TPtr8::TPtr8(const TPtr8& aTPtr). This change is not binary compatible
backwards with code which calls the TPtr8 copy constructor either
explicitly or implicitly and relies upon the previous behaviour of the
copy constructor. The previous behaviour merely made sure that the
copied TPtr pointed to the same descriptor as the original TPtr, while
the new behaviour also makes sure that the TPtr's iType is set
correctly.
These changes were necessary for TPtr8s to work correctly when compiled
with MSVC6. I have made corresponding changes to the TPtr16 copy
constructor.
8) Changed KPWINS\KP_GUI.CPP so that the Windows character code
translation is suppressed if the Ctrl, Alt and Shift keys are all
depressed. This means that the heap-checking code for APPs which used
the Ctrl-Alt-Shift-A combination will now work again, as the EPOC key
translation will not be overridden by the Windows translation.
4) Chris
1) Added export to mmu to enable creation of DHardware chunk from Ram.
2) Slight change to TDma to allow it to break up non-contigous transfer
buffers.
3) Added fast infra-red LDD(Efir) to misa and mmad and a fast infra-red
PDD(Difiba) to misa.
4) Changes to TSa1100 variant class to implement infra red and dma on
misa.
ImpDma class impemented also for misa.
5) Added 572000,1152000 and 4000000 baud defs to d32comm.h.
5) Dennis
1) Added routine ImpExc::AdjustRegisters() to restore registers on ARM
processors to allow an aborted instruction to be retried.
2) Added TException::Bind(), TException::UnBind() exported functions to
allow device drivers to bind to exceptions.
3) Various Snowdrop-specific fixes which didn't make it for ER5.
(Euro, Digitiser factory settings, Windermere DRAM refresh, ROM size,
digitiser EEPROM calibration)
4) Prefetch aborts now have exception ID EExcCodeAbort instead of
EExcGeneral.
5) Added ExecHandler::RomHeaderAddress() to windermere kernel.
6) Rearranged VAWDB1U.DEF so that VariantInitialise__Fv is at ordinal 1
(this is necessary or else nothing works).
7) Fixed bug in new RTest where RDebug::Printf(_L("<string>")) would panic
if <string> contained a % character. This was due to <string> being
passed into AppendFormatList which was then interpreting the % as a
format specification.
8) Modified assembler code in EUSER to allow thumb interworking by making
all subroutine returns and indirect function calls use the BX
instruction. Macros have been used so that the ARM-only version with
no BX instructions can still be built - this is necessary for
StrongARM builds.
Macros employed are:
__JUMP(cc,r) = BXcc r or MOVcc PC, r
__POPRET(rlist) = LDMFD SP!, {rlist,lr} \ BX lr or LDMFD SP!,{rlist,pc}
__CPOPRET(cc,rlist) = LDMccFD SP!, {rlist,lr} \ BXcc lr or LDMccFD SP!, {rlist,pc}
NOTE: Thumb interworking is still disabled by default, since the new GCC
is not yet fully deployed.
9) Made minimal modification to EKERN to permit thumb user code to execute
correctly. This involves changing two instances of "mov pc, lr" in the
SWI handler to __JUMP(,lr) and also involves changing
DArmPlatThread::CallFunction to use separate routines depending on
whether an ARM or THUMB context is being modified. Also, when saving
context following a SWI call, the saved PC points to a BX instruction
instead of to the return address from the Exec:: function.
NOTE: All supervisor mode code is expected to be ARM. Much more
extensive modification of the kernel would be required to permit THUMB
device drivers.
10) Compiled and tested E32 with the new version of GCC. This produces
several warnings, mostly "comparison of signed and unsigned", "ANSI
C++ does not permit declaration without type", "Taking address of
temporary" and "XXX declared but not used" (for variables or functions
only used from within assembler code). Modified the source to remove
these warnings.
11) Compiled and tested E32 using THUMB test executables. These all work
apart from those which contain ARM assembler code. Disabled
breakpoint exception since this can crash the kernel with an alignment
fault if an undefined instruction is encountered in THUMB code.
Fixing this properly would require a lot of work on the debugger to
fully support THUMB.
NOTE: To build THUMB executables, the _call_via_r0() helper functions
are required. These were added to EEXE.O for testing purposes, but will
eventually be in the GCC helper library.
12) Modified TDes::AppendFormatList() so that variable precision
specifications are now allowed, and so that the precision
specification is also applied to strings.
6) Simon
1) Improved ps/2 keyboard initialisation within kacga
7) Mark
1) Enabled unicode WINS/WINC to run on Windows 9x. Introduced euniw.dll
to convert between unicode and relevant narrow Win32 functions.
Added exported set of functions to euser.dll that return a pointer
to either the relevant 'W' Win32 function or a wrapper function in
euniw.dll. These functions and the initialisiation of the function
pointers is implemented in upwins\up_uansi.cpp.
2) Changed unicode to narrow WINS/WINC conversion from UTF-8 to
CP_ACP in WinCOutput::Write and Debug::DebugFunction.
Version 1.02.187
================
(Made by Alastair, 9.6.99)
1) Jason
1) Added sleep and wakeup code for MISA
2) Enabled LCD and Keyboard for Brutus wakeup.
3) Added MCP controller accessor functions for MISA
4) Modified power model to share MCP clock
5) Added definitions for the Brutus UCB1200 codec chip.
6) Added touch screen controller for Brutus, including touch to wakeup.
7) Fixed Brutus keyboard controller to not enable interrupt edges that it
does not use.
8) Added the missing function TSa1100::UartTxBusy() to MISA
\inc\v32s1100.h
\v32ucb12.h
\kaisa\ka_isa.cpp
\ka_ini.cpp
\ka_power.cpp
\ka_power.h
\kbisa\sa1100.inc
\sa1100.s
\visaba\vi_hw.cpp
\vi_keycn.cpp
\vi_xyin.cpp
2) Morgan
1) Made Mmu::UnlockPageTables and Mmu::LockPageTables public so
code that calls Mmu::LogicalToPhysical() can unlock and
access the page tables.
\inc\m32hal.h
2) Unlocked the page tables in TDma::NextBlock() function
\kpepoc\kp_dma.cpp
3) Petteri
1) Added Linda serial driver.
2) Added 230.4K speed to d32comm.h and modified old serial drivers
to dislike it.
\group\datxlb1.mmp
\inc\d32comm.h
\v32linda.h
\kamad\ka_linda.cpp
\varmca\va_com1.cpp
\va_com2.cpp
\varmcl\va_com1.cpp
\va_com2.cpp
\varmlb\va_com1.cpp
\varmp2\va_com1.cpp
\varmpb\va_com1.cpp
\varmpc\va_com1.cpp
\va_com2.cpp
\varmpd\va_com1.cpp
\va_com2.cpp
\vawdb1\va_com1.cpp
\va_com2.cpp
4) Graham Asher (merged by Jonathan)
1) Implement standard Unicode collation and add new collation functions
to allow loose matching.
2) Fill up all the available TLanguage slots (00 to 99); codes added
include those requested for Roxette; this is a provisional solution
pending the introduction of a saner language and locale number API.
3) Fix problems in TLex16::Val(TRealX&,TChar) &
TLex16::Val(TReal64&,TChar) in Unicode-to-8-bit conversion (defect
EDN769607).
4) Obsolete functions yet to be removed:
TInt TDesC16::CompareC(const TDesC16& aDes,const TInt16*
aCollationRules) const;
TInt TDesC16::CompareC(const TDesC16& aDes,TUint32
aDesiredCollationRulesId,TUint32&
aActualCollationRulesId) const;
static TInt Mem::CompareC(const TUint16* aLeft,TInt aLeftL,const
TUint16* aRight,TInt aRightL,const TInt16*
aCollationRules);
static TInt Mem::CompareC(const TUint16* aLeft,TInt aLeftL,const
TUint16* aRight,TInt aRightL,TUint32
aDesiredCollationRulesId,TUint32&
aActualCollationRulesId);
static TInt Mem::CollationRuleSets();
static TInt Mem::CollationRuleSetId(TInt aIndex);
static const TInt16* Mem::CollationRuleSetByIndex(TInt aIndex);
static const TInt16* Mem::CollationRuleSetById(TUint32
aDesiredId,TUint32&
aActualId);
5) Jonathan
1) Fixed "ambiguous overload for `bool ? TChar : char'" errors from new
gcc compiler.
umath\um_rtod.cpp
6) Alastair
1) To build this release of e32tools you'll need the latest version - 108
- of E32toolp. If you're going to use this release at all, you'll
need to be building your component with the latest version of
e32toolp, since import libraries are only released in the MARM release
and WINS debug directories and also because EDLL.O and EEXE.O won't
link properly with older versions of e32toolp.
2) Renamed MARM platform to MEIG and SARM platform to SEIG just as far as
E32 is concerned. Other components will still build for the MARM (and
SARM) platforms. This change means that rombuild obey files will need
to change to reflect the new location of e32 releasables in
\EPOC32\Release\Meig instead of \EPOC32\Release\Marm.
3) Changed zips of releasables put onto the network. There is now one zip
file for each platform. There is also a zip file for exported header
files. Hence, the contents of S:\e32\zip includes
export.<ver>, wins.<ver>, meig.<ver>, misa.<ver> ,mawd.<ver> winc.<ver>.
Each of the meig, misa and mawd zip files should contain everything
necessary for building components which depend on E32 for marm.
The files within these zip files now also have full pathnames so ensure
you unzip them into the root of your EPOC drive with any flags required
to recreate the directory structure.
4) Added new MAKMAKE keyword ASSPEXPORTS to various .MMP files so that
they search ASSP-specific deffile directories rather than CPU-specific
deffile directories by default. E.G. EKERN.DLL built for narrow MISA
REL will refer to \E32\BMISA\EKERN.DEF rather than
\E32\BMARM\EKERN.DEF. These .MMP files are for EKERN, EPBUS, VARMCL,
VARMLA, VARMLB, VARMP2, VARMPB, VARMPC, VARMPD, VAWDB1, VISABA,
VISACA, VROSR1, VCGAC1, VARMCA. This keyword means that the import
library for a project build for MEIG will go into
\EPOC32\Release\MEIG\<rel|urel>\ rather than
\EPOC32\Release\MARM\<rel|urel>\.
Where .MMP files have links to the import libraries for these
components I have listed the libraries with new keyword ASSPLIBRARY
and taken them out of any existing LIBRARY statements. This ensures
that the generated- makefile will search in the correct place for the
import library. Any other components linking to these libraries will
have to do the same thing.
5) Kernel include headers are now exported to \EPOC32\Include\Kernel
rather than \EPOC32\Include, so if your component includes these
headers you'll need to add \EPOC32\Include\Kernel as a SYSTEMINCLUDE
file in your .MMP file.
6) Added new command, MNT CHECKREL, to check that all releasables are
present before doing an MNT PUTREL.
Before doing MNT CHECKREL or MNT PUTREL call BLDMAKE -v RELFILES to
create the lists of releasables.
7) Changed edll, exdll, eexe and kc_exe so that they all build as static
libraries rather than object files in accordance with ER5u makmake
changes.
8) Changed second uids in device driver .MMP files to zero so that makmake
will apply the correct ones automatically.
9) Changed .MMP files to take advantage of changes in makmake .MMP
#defines.
10) Replaced all B[plat].PRJ files for use with BLDMAKE with BLD.INF in
accordance with latest BLDMAKE changes.
11) Moved ETIMR and T_DEVC to project E32TEST.
12) Removed all E*.REL files from GROUP directory and changed MNT.BAT so
that MNT PUTREL looks for .REL files generated by BLDMAKE instead.
Updated BLD.INF accordingly.
13) Changed #defines in the following files now that __MEIG__ is being used
to mean __MARM__ and __MARM__ is being used to mean ARM CPU:
INC\U32STD.H, INC\M32STD.H, PSRC\PS_PCCD.CPP,
KCARM\KC_INT.CPP, DPEPOC\D_MEDINT.CPP, DPEPOC\D_MEDCRR.CPP,
DPEPOC\D_MEDCRM.CPP, DPEPOC\D_MEDATA.CPP.
14) Removed EVALID.PL and EVALID.BAT from GROUP dir now that this version
of EVALID is being released as part of E32TOOLP.
15) Created directory \E32\BMEIG. Moved .DEF files for the following
projects from \E32\BMARM\ to \E32\BMEIG:
EKERN, EPBUS, VARMCL, VARMP2, VARMPB, VARMPC, VARMPD.
16) Removed unnessary __XCON__ #defines and swapped them with __WINC__
instead where necessary.
17) Removed XWSRV.MMP, XPBUS.MMP, XCONS.MMP, EXYIN.MMP and EKEYB.MMP - they
were no longer required now that libraries can be built separately.
Note that this means the import libraries must be built before building
the other releasables because of the mutual imports between some E32
Dlls.
18) Changed variant .MMP files to link to the respective variant versions
of exyin.lib and ekeyb.lib now that exyin.lib and ekeyb.lib are no
longer built as import libraries.
19) Removed WINS #defines from around the dummy export for the text window
server so that it has a dummy export for other builds. Frozen the dummy
export in \E32\BMARM\EWSRV.DEF.
20) Removed export command from MNT.BAT and EXPORT.PL from group directory
now that and equivalent command is provided by BLDMAKE.
20) CONSWINS.DEF, CONSMARM.DEF and CONSMISA.DEF are now exported to
directory \EPOC32\Release\<Platform>\ rather than \EPOC32\Include.
21) Changed #defines in K32ADDR.H, U32STD.H, V32COG.H in accordance with
makmake #define changes for __SROS__ and __SCGA__.
22) Adjusted BLD.INF so that kernel headers are exported to
\EPOC32\Include\Kernel\ rather than \EPOC32\Include. This means that
any projects requiring the kernel headers will have to have
\EPOC32\Include\Kernel added to the list of SYSTEMINCLUDE paths within
their .MMP files.
23) Removed all .DEF files from the B<plat> directories which are now
referenced in the BMARM directory. Renamed BSROS BMROS and removed
BSARM and BSCGA.
24) Added extra commands to MNT.BAT to copy edll.o and eexe.o from the MEIG
release directories to the MARM ones pro tem, and to zip them up for
MEIG, MAWD and MISA.
25) Changed rom.oby files in KBARM and KBSARM directories to incorporate
changes resulting from the new way E32 is built. A few changes in
other rom.oby files may also be required.
26) Excluded Graham Asher's change to UMATH\UM_DTOR.CPP since they won't
build in narrow variants.
27) Fixed up MEIG EKERN.DEF following Pete's DMedia changes.
28) Changed P::Print so that in release builds it uses Win32's
OutputDebugString() rather than putting up a message box. This has
always been the behaviour in debug builds. As a result of this change,
test output will no longer appear in an annoying sequence of message
boxes.
7) Pete
1) Modification to DMediaDriver class so a media driver
can be configured to allow read/write/format requests simultaneously
with each other. By default, a driver only allows one
request to be outstanding at any time but by setting the
DMediaDriver member iFlags to KMediaDrvMultipleReqs,
a read/write and format command may each be outstanding at a given
time.
\ksrc\ks_locd.cpp
\inc\k32std.h
\inc\k32std.inl
Version 1.02.186
================
(Made by Malcolm, 21st May 1999)
Petteri
1) Added a new variant (Varmca) for the Rev.A of the new Cirrus
Logic 711X evaluation board. This port is not complete: digitiser
driver, most of ADC code, second serial port and some other
small things are missing. Also, the board is still evolving.
New files added:
Varmca\Va_c6700.cpp Group\Cakdca.mmp
Varmca\Va_com1.cpp Group\Cakyca.mmp
Varmca\Va_com2.cpp Group\Caxyca.mmp
Varmca\Va_hw.cpp Group\Dasnca.mmp
Varmca\Va_kdata.cpp Group\Datxca1.mmp
Varmca\Va_keyb.cpp Group\Datxca2.mmp
Varmca\Va_pbus.cpp Group\Varmca.mmp
Varmca\Va_sdrv.cpp Inc\V32armca.h
Varmca\Va_spi.cpp
Varmca\Va_xyin.cpp
Varmca\Va_std.h
Old files modified:
Group\Bmarm.prj
Group\Emarm.rel
Kbarm\E32var.iby
Kbarm\Rom.oby
Kbarm\Setvars.cmd
( and also:
Kamad\Ka_linda.cpp
Inc\V32linda.h )
Jason
1) MISA Idle code fix.
\kaisa\ka_utl.cpp
\kcarm\kc_int.cpp
\kbisa\sa1100.s
Jonathan
1) Added Protea, Cassius and inc{c|k} files to distrib.txt files
bmarm\distrib.txt
bmisa\distrib.txt
inc\distrib.txt
group\distrib.txt
Version 1.02.185
================
(Made by Malcolm, 14th May 1999)
Malcolm et al.
1) Prepared E32 for automatic building and testing. Each kbXXX
directory should now have the following files:
rom.cmd that takes an .oby file as the first parameter (and
then the standard build/variant as before).
test.oby that builds a rom with all the test code for that
platform. Test.oby should also include batch files called
z:\test\e32auto.bat, z:\test\f32auto.bat and
z:\test\allauto.bat that run respectively the e32, f32 and all
tests for this platform. For now, these are taken from
\e32test\group./
bld.cmd that creates udeb and urel roms, given that all of
e32, f32 and the test suites have been built. Typically this
makes the bootstrap code then calls rom.cmd.
This change has been implemented for misa, marm, mcga & sros.
Alastair
1) Changed RDebug::Print for WINS/WINC so that output is appended to file
EPOCWIND.OUT in the PC's temporary directory, as well as being sent
where it is currently. In UNICODE builds, the output is converted to
UTF-8 before being appended to the file.
2) Changed WINC Console output under UNICODE builds so that it can be
redirected to a file. The output is converted to UTF-8 before being
sent to the console.
Simon
1) Merged in Cogent
\kacga\*
\bmcga\*
\vcgac1\*
\wsrc\wd_vgacga.cpp
\wsrc\wd_vtcgakb.cpp
2) Modified coproc related bits for ARM4 on Cogent
\kcarm\kc_sched
\kcarm\kc_mmu
Petteri
1) Minor Linda screen and keyboard related changes.
\kamad\ka_ini.cpp
\kamad\ka_linda.cpp
\inc\v32linda.h
\varmlb\va_hw.cpp
\varmlb\va_keyb.cpp
\wsrc\wd_mad.cpp
Malcolm
1) Changes to mnt.bat. Directories are now enummerated in
dir.prj rather than being hard-coded into mnt.bat all over the
place. Two perl helper scripts have been created to interface
to PVCS.
\group\mnt.bat
\group\dopvcs.pl
\group\lock.pl
\group\dir.prj
Petteri
1) Minor changes in order to tidy up DisplayOn()
\kamad\ka_ini.cpp
\inc\v32linda.h
\varmlb\va_hw.cpp
\wsrc\wd_mad.cpp
Petteri
1) Speed improvements to Linda screen driver.
\wsrc\wd_mad.cpp
2) Modified keyboard related files so that Linda keyboard
driver works properly.
\varmlb\va_keyb.cpp
\varmlb\va_kdata.cpp
\group\cakylb.mmp
Malcolm
1) Upgraded the MNT DISTRIB command to cope with per-file
inclusion/exclusion. Now uses perl to parse distrib.txt
files. These files have changed in format. The format is
now lines of the format:
<filename> <licensee>
If the filename is Default, then all the files in this
directory will be included. If the licensee text contains
"Epoc" then this is part of the generic release.
To always exclude a file I suggest using a licensee of "Never".
Comments can be started with the # character and last to the
end of the line. \inc\distrib.txt and \group\distrib.txt files
are good examples.
The distrib.txt files themselves are never included.
At the moment, this script requires pkzip version 2.5, called
pkzip25 to be in the path. This is due to limitations with
the previous versions of pkzip.
\group\distrib.pl
\group\mnt.bat
\*\distrib.txt
2) Fixed single process scheduler bug
\kcarm\kc_sched.cpp
3) Merged in Simon's automatic test changes.
\usrc\us_test.cpp
\inc\e32test.h
4) Added export.pl that will export E32 headers appropriately.
\group\export.pl
Petteri
1) Added text screen driver for Linda
\wsrc\wd_mad.cpp
\group\edisp.mmp
Malcolm
1) Removed all the li.prj files & moved the distribution comments
to distrib.txt files. Updated mnt.bat to deal with this.
\group\mnt.bat
*\li.prj
*\distrib.txt
2) Boilerplated Roxette sources
\vrosr1\*
\karos\*
\kbros\*
Malcolm
1) Major reorganisation of the E32 tree. Tags: Pre-ER5u-Reorg is
before this, Post-ER5u-Reorg is after it.
What was upmarm and upmx86 has had the common parts extracted
into upepoc and the architecture dependant bits moved to
ucmarm and ucmx86 respectively.
\upmarm\*
\upmx86\*
\ucmarm\*
\ucmx86\*
\upepoc\*
group\ekern.mmp
group\eexe.mmp
group\xcons.mmp
2) Ucdt has been moved over to Usrc
\ucdt\*
\usrc\*
group\euser.mmp
3) Roxette (SROS) has been merged in
\karos\*
\kbros\*
\vrosr1\*
\bsros\*
group\ekern.mmp
group\bsros.prj
group\esros.rel
group\euser.mmp
group\ekern.mmp
group\edisp.mmp
group\eexe.mmp
group\ekdata.mmp
group\inck.rel
group\vrosr1.mmp
wsrc\wd_rose*
4) Removed EPBUS reference in epbus
group\epbus.mmp
5) Added support for screen dimension keys (flip keys)
inc\e32keys.h
inc\e32panic.h
usrc\us_evnt.cpp
6) Changes to timers to disambiguate periodic and locked timers for the
lower layers by encoding a value in the repeat field
ksrc\ks_tim.cpp
inc\k32std.h
7) New function UserSvr::RomHeaderAddress(), replacing the use of
KRomLinAddr constant. This is so the F32 is single-process agnostic.
All address constants have been moved to k32addr.h
inc\k32addr.h
kpepoc\kp_ini.cpp
inc\u32std.h
inc\e32rom.h
inc\e32svr.h
inc\m32hal.h
Jason
1) Added debug monitor for MISA
\KAISA\KA_MON.CPP
\INC\M32STD.H
\GROUP\EKERN.MMP
Morgan
1) Upgraded Dma abstraction to cope with transfers across page boundaries
\INC\M32STD.H
\KAMAD\KA_DMA.CPP
\KPEPOC\KP_DMA.CPP
2) Fixed function prototype for DPowerHandler::SetRequirement(TUint &aState)
\inc\k32power.h
\ksrc\ks_power.cpp
\b*\ekern*.def
3) Implemented Hal::ModifyLedMask()
\kpehal\kph_inf.cpp
4) Fixed key translator to use User::LowerCase instead of User::Fold
for EMatchKeyCaseInsens
\wsrc\ky_tran.cpp
5) Merged in changes for MMAD
\inc\u32std.h
\inc\v32linda.h
\kbmad\*
\kamad\*
\varmlb\*
6) Corrected remote serial screen cursor positioning
\wsrc\wd_vt100.cpp
7) Fixed mismatched #defines of
__CPU_SPLIT_TLBS and __CPU_SPLIT_TLB
__CPU_CACHE_CONFIGURABLE and __CPU_CACHE_SELECTABLE
\kcarm\kc_mmu.cpp
8) Removed NotBuffered attribute from the read-only EKernelCode and
EUserCode chunks
\kcarm\kc_mmu.cpp
9) Added Platform dependent constants for page table attributes
\kcarm\kc_mmu.cpp
10) Integrated the debug monitor into MMAD
\kamad\ka_mon.cpp
\inc\m32std.h
11) Uncommented the two lines of code that flush the D-Cache on
split cache processors
\kcarm\kc_sched.cpp
\kcarm\kc_mmu.cpp
12) More bug fixes for MMAD
\kamad\ka_linda.cpp
13) Implemented Rom groping in the bootstrap
Jonathan
1) Fixed fix for EDN430762 in 170; trap handler was not being correctly
zeroed.
kpwins\kp_utl.cpp
2) Reinstated unused functions SetLine and GetLine cos they're pure
virtual in the base class and so need to exist.
wsrc\wd_wins.cpp
3) Made RTest::Getch() pause for input even in non-manual mode.
usrc\us_test.cpp
Version 1.02.181
================
(Made by Pete, 5th May 1999)
1) Pete
1) Added the (exported) function:-
TBusLocalDrive::Format(TInt aPos,TInt aLength)
so that it is possible to format just a part of a
drive.
2) Changed the local drive allocation for Brutus/WINS as follows:-
Local-Drive-Num Assignment
(Let-EPOC/WINS)
0 (C:/Y:) EFixedMedia0 (Internal Ram)
1 (D:/X:) ERemovableMedia0 (1st partition on PC Card Socket0)
2 (E:) ERemovableMedia1 (1st partition on PC Card Socket1)
3 (F:) ERemovableMedia0 (2nd partition on PC Card Socket0)
4 (G:) ERemovableMedia1 (2nd partition on PC Card Socket1)
5 (H:) ERemovableMedia0 (3rd partition on PC Card Socket0)
6 (I:) ERemovableMedia1 (3rd partition on PC Card Socket1)
7 (J:) Not used
8 (K:/W:) EFixedMedia1 (Flash File System)
3) Backed out the change made in V180 to TTrapK::Trap() in kpwins\kp_utl.cpp as
this is suspected to be causing problems in WINS Unicode builds.
4) Fixed a problem with the function ImpHal::Idle() on ISA builds
(KAISA\KA_UTL.CPP).
5) Fixed a problem with EPBUS.DLL which resulted in an exception
if an attempt was made to open a media driver for a peripheral
bus device (ie derived from DPBusMediaDriver) on an
internal drive. This typically only causes a problem on machines
which have a local drive designated as an internal drive in addition
to the standard Internal Ram drive (ie EFixedMedia1). This isn't a
problem on Snowdrop/Protea. There generally isn't a problem on the
internal Ram drive (ie EFixedMedia0) since the IRAM media driver
(MEDINT.PDD) opens successfully on this device before any drivers for
removable devices. (It would have caused a problem if ATA media driver was
loaded before the IRAM media driver).
6) Modified E32VAR.IBY and ROM.OBY in \KBISA to allow ISA UNICODE rom's
to be built successfully.
7) Added a LFFS media driver (MEDLFS.PDD) to the WINS and Brutus platforms.
The WINS version emulates a media device by performing reads/writes to the
file <temp>LFSLDRV.BIN (e.g. C:\TEMP\LFSLDRV.BIN). The Brutus version uses
2Mb of flash in Static Memory bank 1 and thus requires a pair of 1M x 16 flash
chips to be fitted to this bank. These devices aren't fitted on a standard Brutus
rack as shiped from Intel. The Brutus media driver is a read-only implementation
in this release.
Version 1.02.180
================
(Made by Pete, 29th April 1999)
This is an ER5U release
1) Jonathan
1) Fixed EDN430762 (E32TEST T_REG.EXE fails in WINS REL).
TTrapK::Trap() in kpwins\kp_utl.cpp mixed assembler and C++ and was
being broken by MSVC5's aggressive optimisations when built for
WINS/WINC REL/UREL. The fixed code is still vulnerable to compiler
changes because it still contains one C++ statement and could
therefore be confused by the compiler setting up a stack frame or
trashing the cx register.
TTrap::Trap() in upwins\up_trp.cpp and upmx86\up_trp.cpp would contain
the same problem but we can't build the user library under MSVC5 with
optimisations enabled for other reasons so the problem does not
appear.
2) Pete
1) Modifications to Brutus variant (VISABA) to fix a problem with the PC Card
interface CD signals on GPIO7 (socket1) and GPIO4 (socket0). These were being
reconfigured to their alternate function (upper port of LCD interface) within
the function Variant::DisplayOn().
2) Change to the way the ISA PC Card Controller handles a media change interrupt so
that it now queues a 20ms millisecond callback to handle switch debounce rather
than doing this directly from the interrupt service routine.
3) In the ISA PC Card Controller abstraction, removed some redundant functions calls
called during media change and socket interrupt handling. These functions had been
carried over from the MARM platform.
4) Disabled idle mode for now in the ISA platform (ImpHal::Idle()). There appears to be a
problem with PC Card IREQ interrupts (implemnted using GPIO edge triggered interrupt)
bringing the machine out of idle such that the machine eventually hangs.
5) Implemented a new Pc Card Controller to Variant interface for ISA platforms (TPcCardControllerIsaInterface
in V32PCCDI.H). This includes the following new functions:-
- const TDesC8& SocketIntSource(TSocket aSocket,TPccdEvent anEvent);
- void InitSocketInt(TSocket aSocket,TPccdEvent anEvent);
- void ClearSocketInt(TSocket aSocket,TPccdEvent anEvent);
This is allows the socket interrupt implementation on ISA platforms to performed
at the variant layer
3) Alex
1) Modifications to ISA bootstrap (which is really tailored for the reference Brutus
platform) to support running code from RAM rather than FLASH. This means that images larger
than 4Mb (the previous limit on this platform due to the size of the flash bank) can be
handled. Use with E32UTILS REPROB V027.
4) Pete
(inc\E32SVR.H)
Modification to TLocalDriveCapsV2 to add the data member
iEraseBlockSize. This is to support an F32 Flash File System.
Version 1.02.166
================
(Made by Jonathan, 23rd February 1999)
1) Jason
1) Implemented Millisecond timer for MISA.
2) Made the ATA Media driver as part of the ROM for MISA.
2) Dennis
1) Replaced Snowdrop digitiser default calibration values with values
supplied by Amazon.
2) Modified Windermere LCD controller Timing2 register setting as
requested by Amazon.
3) Changed Snowdrop current consumption and battery threshold values
to those supplied by Amazon.
3) Morgan
1) Replaced the code that stops the machine turning off if an absolute
timer is due soon.
4) Jonathan & Co
1) Boilerplated source.
2) Removed historical epocfns.txt, sizes.txt, sizes.xls from .\group.
5) Alastair
1) Replaced hard-coded R: with %s% in MNT.BAT.
2) Changed MNT PUTSRC to use T:\Tools\Zip.exe rather than
T:\Tools\PKZip.exe.
3) Changed MNT GETREL to get the WINC debugging releaseables for DEB and
UDEB builds.
4) Removed non-existent V32ARMS1.H, V32SASIC.H and duplicate listing of
K32POWER.H from \E32\INC\INCK.PRJ.
5) Removed non-existent D32FTIM.H, D32FTIM.INL and *.FRZ from
\E32\INC\INCC.PRJ.
6) Added CONSWINS.DEF, CONSMARM.DEF and CONSMISA.DEF to \E32\INC\INCK.PRJ.
7) Removed CAKDP2 Series5 keyboard variants from EMARM.REL.
8) Removed ELOCL variants from EMARM.REL, EWINS.REL and EWINC.REL.
9) Moved \E32\INC\INCC.PRJ to \E32\GROUP\INCC.REL and \E32\INC\INCK.PRJ to
\E32\GROUP\INCK.REL and changed MNT.BAT so that these .REL files are
treated in the same way as all the other .REL files.
10) Updated validation process to use William's new EVALID.BAT (added to
E32\Group pro tem.).
11) Removed empty file \E32\Inc\M32hal.inl.
Version 1.02.165
================
(Made by Pete, 16th February 1999)
1) Jason
1) Removed fixed Rom address from MMU initialisation bootstrap code.
2) Morgan
1) Fix for defect EDN964446 to prevent WINS standby going re-entrant.
3) Mark
1) Implemented PC card driver for MISA.
4) Dennis
1) Applied Jason Robinson's patch for defect EDN061952 (cannot force a
cold reset by holding down both shift keys).
2) Fixed problem EDN106813 (snowdrop pathological failure mode).
5) Pete
1) Added range checking to the Pc Card h/w chunk allocation functions
(derived versions of RPccdChunkBase::CreateL()) in MARM, MISA and MAWD
builds to prevent this allocating memory chunks beyond the physical
region assigned to the Pc Card memory.
Version 1.02.164
================
(Made by Jonathan, 10th February 1999)
1) Jonathan
1) Disabled the crash debug monitor.
2) Fixed problem EDN941329 "RThread::GetRamSizes() Crashes the Kernel" by
making RThread::GetRamSizes() return 0 for the heap size in combined
stack+heap chunks.
3) Applied Dennis' fix for EDN157244 "Process creation can leak memory"
by promoting DPlatProcess::FirstThread() to DProcess::FirstThread()
and checking for case where OOM occurs after thread creation.
2) Dennis
1) Fixed problem EDN256123 (adding a thread to a dead process crashes the
kernel). Create empty process handles array after deleting the
original one, and when creating a new thread check that the owning
process is not dead.
2) COM061952: Put in Jason Robinson's bootstrap fix for Windermere so
that cold resets (both shift keys down) should now work on Snowdrop.
3) Morgan
1) User::LoadLogicalDevice and User::LoadPhysicalDevice now supply
match-Uid's KLogicalDeviceDriverUid and KPhysicalDeviceDriverUid on
their calls to RLoader::LoadLibrary
4) Pete
1) Added the function TPBusCallBack::Clear() (exported from EPBUS.DLL) to
clear the source of a Peripheral Bus event (e.g. IREQ interrupt from
PC card). This is a 'generic' version of the temporary fix applied in
E32-162 for defect 'CF Card interrupts being missed on Snowdrop
machines'. Also, removed the functions
DPcCardController::EnableEvent() and DPcCardController::DisableEvent()
and replaced them with TPBusCallBack::Enable() and
TPBusCallBack::Disable() respectively.
2) Added the functions DPcCardController::PwrUpProfile() and
DPcCardController::SetPwrUpProfile() to read/modify the power up
profile of the PC Card Controller (ie time reset applied, pause after
card becomes ready, timeout period when waiting for card to become
ready). Removed the parameter 'aResetProfile' from
DPeriphBusController::PowerUpBus(), DPcCardController::PowerUpCard(),
and DPcCardController::RestoreCardPower() as this information is now
superfluous.
3) Increased synchronous busy timeout period on ARM ATA driver from 15mS
to 20mS to support large Lexar CF cards.
4) Enabled CF card rail (Vpc) monitoring in Snowdrop variant. Also
modified this so that checking is performed periodically as long as
the rail is on (in addition to once when first turned).
5) Change to ARM ATA driver so it checks for 'card not busy' if it times
out on a command. If the card isn't busy then it processes this as if
it had received a normal card interrupt.
Version 1.02.163
================
(Made by Pete, 3rd February 1999)
1) Morgan
1) Fixed a problem that was causing Dll entrypoints to be called
with EDllProcessAttach twice.
2) Jason
1) Restored the RAM drive to MISA.
3) Dennis
1) Fixed problem EDN591058 (remote thread write to end of chunk can
fail). Use sizeof(TDes8) instead of sizeof(TBuf8<1>)-1 for checking
to avoid alignment problems.
2) Fixed problem EDN468376 (RHeap::Compress can leave heap
corrupted). In the situations where a free cell header would have
been chopped in half, an extra page of RAM is now left allocated to
the heap.
3) Fixed problem EDN102617 (undefined instruction exception kills the
kernel). Modified undefined instruction handler to run Exc::Dispatch
in mode_und rather than mode_abt.
4) Modified super page signature so that it includes the E32 version
number. This means that when a machine is reprogrammed to a
different version of E32, a cold reset will be forced when the
machine is first booted even if the user attempts to do a warm
reset.
4) Jonathan
1) Fixed problem EDN671244 (RDebug::ReadMemory can reset the machine)
by trapping calls from Debug::DebugFunction to Debug::ReadMemory and
Debug::WriteMemory.
2) Fixed problem EDN471656 (underlying cause of which was RAM disk
size not being a multiple of page size) by applying Andrew/Pete's
modified fix.
5) Pete
1) Renamed current implementation of the class TLocalDrive as
TBusLocalDrive. Also, changed TBusLocalDrive::Caps() from the form:-
TInt Caps(TLocalDriveCaps &anInfo);
to
TInt Caps(TDes8& anInfo);
with the later taking a TLocalDriveCapsBuf.
Re-introduced a TLocalDrive class which is BC with the E32-114
version. The TLocalDrive class will be maintained to support disk
utilities which need a level of direct disk access. However,
TLocalDrive functions: Enlarge(), ReduceSize() and Format() now
return KErrNotSupported. TBusLocalDrive is intended to be used only
by F32 and there is no BC commitment with this. (Fixes EDN545357).
2) Added EPBUS.MAP to MARM,MISA,MAWD release files.
3) Modification to prevent CF card from being powered down during a
write operation when the machine is turned off. This involves a
change to DPcCardController::PowerStandby() so that it waits a short
period for any critical operation to complete. If still critical
after that period then it goes ahead and powers down the sockets,
but generates an emergency reset event so that clients can attempt to
recover. (Fixes EDN201114).
4) Modification to IRAM media driver (EPOC Platform) so that when it is
first mounted, it takes its initial size directly from the super
page rather than the IRAM chunk size (which is in multiples of a
page size).
Version 1.02.162
================
(Made by Morgan, 27th January 1999)
1) Dennis
1) Fixed problem EDN153887 (using infra-red lowers RS232 RTS line) -
modified VAWDB1\VA_COM1.CPP to ensure that UART1 SIR enable bit is
always cleared.
2) Store garbage values in K::SvThread and K::SvProcess on completion of
a kernel server function to guard against inadvertent use of these in
executive calls or DFCs.
3) Fixed problem EDN741588. Modified S::ChunkCompressAll() in KS_CHK.CPP
so that it only attempts to compress the kernel heap if its critical
section is not blocked.
4) Added extra command 'R' to crash debugger to print the values of all
processor registers across all processor modes at the point where the
debugger was entered.
2) Jason
1) Restored link to MISA Idle code with-in the bootstrap.
2) MISA DRAM initialisation made to match the documentation.
3) Jonathan
1) Added missing "Distribution:" comments to PSRC\LI.PRJ and
KBAWD\LI.PRJ. Modified "mnt check" to check that all LI.PRJs contain
"Distribution:" comments.
2) Added new "mnt distrib" verb for zipping up a copy of E32 source for
distribution to a named licensee. This verb is intended to be used
on a clean freshly-got copy of the source.
"mnt distrib acme" will produce \E32-acme.zip for acme.
"mnt distrib generic" will produce an unencumbered \E32-generic.zip.
4) Pete
1) Fixed EDN590829 (CF Card interrupts being missed on snowdrop
machines). Fixed by clearing the interrupt directly from the media
driver interrupt callback rather than relying on it to be cleared by
the PC Card controller before the callback. This affects CF cards
which 'claim' to support pulse mode interrupts but actually seem to
implement level mode interrupts.
Version 1.02.161
================
(Made by MarkD, 19 January 1999)
1) Dennis
1) New Snowdrop digitiser and SPI code from Mark Ball.
2) Battery low interrupt now disables UART and Codec interrupts on
EIGER to prevent watchdog death due to permanently asserted
interrupt from UART when power is removed abruptly.
3) Reinstated __COMMS_MACHINE_CODED__ in VA_COM1.CPP for P2 and PD
variants, after fixing problem caused by hard-coded vtable offset.
2) Pete
1) Fixed two problems with the ATA command timeout
implementation on the ARM ATA driver. (The timeout catches
situations where a request is made on the card which ought to be
signalled by an interrupt from the card when complete, but where the
card fails to generate an interrupt):-
a) Changed to use a ticklink rather than a
TMilliSecondCallBack to implement the timeout.
b) Fixed a problem where the timeout could be requeued
before the previous timeout had completed.
2) Increased synchronous busy timeout period on ARM ATA driver from
8mS to 15mS to support KingMax CF cards.
3) Modification to function DMediaDriver::RequestSetup()
so it now returns KErrInUse if the data member iReqStat isn't NULL.
This prevents the possibility of more than one request at a time on a
single media driver.
4) Stopped releasing WINS .BMP files (ie killed SWINS.REL).
3) Morgan
1) Turned off emulation of the WINS backlight
Version 1.02.160
================
(Made by Jason, 12th January 1999)
1) Mark
1) Fixed a problem with MISA such that the screen wasn't being turned
on.
2) Dennis
1) Added kernel crash debugger to MARM and MAWD builds. When a kernel
fault occurs, the debugger will start instead of the machine just
restarting. The crash debugger is enabled by compiling with
__ENABLE_DEBUG_MONITOR__ defined in M32STD.H.
2) Got the C++ build going again. Compiling with
__MINIMUM_MACHINE_CODE__ defined in U32STD.H will result in a build
with all non-essential machine code removed. All tests pass on EIGER
in debug and release builds.
3) Assembler-coded most TWind functions (KE_WIND.CPP).
4) Made RPointerArray<T>::Count() and RPointerArray<T>::Find*() const.
5) Added check in svProcessTerminate in KS_SVR.CPP so that calling
RProcess().Terminate() does not crash the kernel.
3) Jason
1 ) MISA five layer split done created \e32\kaisa\ removed \e32\keisa\.
4) Morgan
1) Added Dll::FileName() which will return the drive, path, and filename
of the library it is called from. (Added UserSvr::DllFileName and
associated EXEC functions to support this). Dll's that exist on the
ROM drive and have not been RLibrary::Load()ed will return only the
drive, (ie. "Z:").
2) Fixed bugs in LoadLogicalDevice and LoadPhysicalDevice that was causing
unbalanced calls to the entrypoint of drivers (with EProcessDetatch and
EThreadAttach).
3) Removed cleanup code from user side code RLoader::LoadLibrary. Cleanup
of half loaded dll's is now performed loader side as it should be.
4) Fixed a problem with switch-off-on-case-close.
5) S::LoadLibraryExact now creates a handle into the Loader thread rather
than into the loading client. DLibrary::LoadedL transfers handles and
created dependencies as required. See Note F32 126.2.2
Version 1.02.159
================
(Made by Pete, 21st December 1998)
THIS RELEASE OF E32 REQUIRES F32 125
1) Jonathan
1) Added TLanguage enums { ELangTaiwanChinese, ELangHongKongChinese,
ELangPrcChinese, ELangJapanese, ELangThai }.
2) Morgan
1) Removed old static power functions that are no longer used from
classes P, K, and ImpPsu.
2) Removed TKeyboard::SwitchOn() and TXYInput::SwitchOn(). And for those
variants that required it, upgraded the keyboards and digitisers to be
first class power handlers.
3) Changed KLogicalDeviceDriverUid for Unicode and Narrow builds because
the Ldd interface has changed. This change stops old device drivers
loading on the new kernel.
4) Uniquely identified each architecture of the kernel with a Uid. This
change stops libraries that link to the kernel from loading on the
wrong architecture.
3) MarkD
1) Performed the PC Card reorganisation for MISA.
2) Fixed a problem in KEISA\KE_INI where the requested video chunk size wasn't
rounded to page size.
3) Added a serial driver for Brutus using serial ports 1 (VISABA\VI_COM1.CPP)
and 3 (VISABA\VI_COM2.CPP).
4) Alastair
1) Fixed ER5 defect EDN381842 "WINS 'large' fascia problem under Win95/98".
If not running under Windows_NT SetupEmulatorPaths() function in upwins\up_path.cpp
takes account of the fact that Win32 GetModuleFileName() will report a full path
rather than a virtual path if the Emulator is running on a subst'ed drive from a
DOS prompt.
5) Petteri
1) Changes to VARMCL variant to fully enable the PC Card Controller. All PC Card tests
now pass on this variant.
6) Dennis
1) Merged in more Amazon changes to Windermere port.
2) Modified Plat::ScreenInfo for Windermere to return the address of the screen RAM
bitmap rather than the palette.
3) Fixed a bug in the text window server introduced in 158 which stops pointer drag
from working.
7) Pete
1) Various changes to facilitates a better partitiioning of
functions between EKERN and EPBUS and to allow ROMS to be built without an EPBUS
component. Functions which previously called either TPBusCallBack or
Kern::PBusController() in the indepedant layer have now been moved to the Asic
layer:-
Modification of class DPrimaryMedia into an Indepedent layer class
DPrimaryMediaBase and a Asic layer class DPrimaryMedia.
Modification of class DMediaChangeNotifier into an Indepedent layer class
DMediaChangeNotifierBase and a Asic layer class DPrimaryMedia.
Functions K::PowerUpPeriphBus(), K::BusDevPowerStatus() are now platform
dependent (hence moved to class P). Also creation of the functions P::ForceMediaRemount(),
ImpHal::TotalSupportedBuses() and ImpHal::TotalSupportedDrives().
Version 1.02.158
================
(Made by Pete, 7th December 1998)
1) Morgan
1) Bug fix for MARM and MAWD Emergency power down. (Screen not powered up
after emergency power down). Effects KEAWD\KE_POWER.CPP and
KAEIG\KA_POWER.CPP
2) Pointer-switch-on now behaves as it did in E32(156).
3) Added MISA power model.
2) Pete
1) Split out the PC Card Controller from the kernel into a new
component - EPBUS.DLL. The independant layer code, previously in \KSRC,
files KS_PCCD.CPP and KS_PSOCK.CPP has been moved into \PSRC.
The architecture layer code files have been renamed from K?_PCCD.CPP
to P?_PCCD.CPP (e.g. \KAEIG\KA_PCCD.CPP renamed PA_PCCD.CPP).
As far as the interface with the kernel is conserned, EPBUS.DLL
is now a 'generic' Peripheral Bus Controller rather than specifically a
PC Card Controller. Machines which have a MultiMedia card interface or
a USB interface rather than a PC Card interface will have a Peripheral
Bus Controller supplying services for these interfaces instead. This has
involved quite extensive modifications to the classes which previously
implemented the PC Card media change (DMediaChange) and supply voltage
(TPcCardVcc) since large parts of these implementations are common for
any Peripheral Bus Controller.
The classes associated with the 'generic' Peripheral Bus Controller
are defined in P32STD.H. Of these functions, the code for those asociated with
media change and supply voltage classes is in PS_PSU.CPP and the code for the
Controller interface itself is in PS_PBUS.CPP. The independant layer code for
the PC Card Controller implementation in now in PS_PCCD.CPP and PS_PSOCK.CPP
(defined in P32PCCD.H).
The variant layer code for the Peripheral Bus Controller is still supplied
by the variant DLL. However, the bulk of the PC Card Controller functions have
been removed from the main Custom class and moved to a TPcCardControllerInterface
class (defined in V32PCCD.H). The custom now has a single function:-
TAny* Custom::CreatePeriphBusControllerInterface()
which returns a pointer to this class. This will allow variant layer code for other
types of Peripheral Bus Controller to be supplied by the variant DLL without bloating
the basic Custom class with these functions.
Removed the majority of the exported functions of the class UserPcCardController
(all apart from PwrDown() and NotifyChange()) from EUSER.DLL. Also, constructors for the
classes TPccdChnk, TPccdConfigInfo, TPccdRegionInfo and TPccdType. The DEF file entries for
these functions have been replaced with NotSupported entries.
Similarly, fixed up the MARM/WINS EKERN DEF files to replace all the entries for
exported PC Card Controller functions with NotSupported entries.
[Note: No Pc Card reorganisation for MISA.]
2) The class TPccdCallback has become TPBusCallBack. A single callback can now be
registed for mutiple events, with the event now specified by a mask rather than an enum.
This has simplified the implemenation of the classes DPrimaryMedia and DMediaChangeNotifier.
3) Modified the variant function PcCardMemPhysicalAddress() to take an extra
parameter - 'TPccdMemType'. Prior to this, the variant just returned
the physical address per socket, with the kernel adding an offset
dependant on the memory type. Unfortunatley, the PS7111 has a
different PC Card memory offset scheme to that used in the PS7110.
Hence the need for it to be calculated in the variant (since 7111 and
7110 share the same kernel).
Version 1.02.157
================
(Made by Dennis, 1st December 1998)
NOTE: Must be used with F32 version.
No ISA or Windermere binaries.
Outstanding problem with machine-code serial PDDs (non-machine code
version has been released) and with Windermere power-off.
Bldmake-generated batch files are no longer released as source so
bldmake <all> must be run to create the batch files before any building
can be done.
1) Morgan
1) Added uid-type-safety overloads to RLibrary::Load() and
RProcess::Create() to only load Dlls and Exes that match
the supplied Uids.
eg
lib.Load(_L("\\system\\plugins\\PLUGIN.DLL");
should change to
lib.Load(_L("\\system\plugins\\PLUGIN.DLL"),
TUidType(KNullUid, KPluginUid, KNullUid);
where KPluginUid is either KPluginUid8 or KPluginUid16.
2) SARMBE-RIP
3) Added a new power management framework in INC\K32POWER.H. Here is a
quick overview:
A DPowerHandler performs power related functions previously resident
in DLogicalChannel, and also provides mechanisms for communicating
with the machine's power model. A DPowerModel, (DEigerPowerModel on
the Series5, DWinsPowerModel on WINS), logs all DPowerHandlers in
the system and their power requirements. The power model controls
power up and power down behaviour of all shared power units. This
allows it to dictate the machine's power management policy. (See
document POWER001 in the Base database for more grusome details).
These changes break binary compatability for DLogicalChannels, and
existing device drivers that require power management.
* Here is some guidance on how to update existing
DLogicalChannels to use E32(157):
// 1. given an old Ldd "Tomfoolery":
class DTomfooleryLdd : public DLogicalChannel
{
public:
~DTomfooleryLdd();
[...]
// override DLogicalChannel pure virtual functions
virtual void DoPowerUp();
virtual void DPowerDown();
virtual void DoEmergencyPowerDown();
}
// 2. modify the class declaration to insert a power handler
class DTomfooleryPowerHandler;
class DTomfooleryLdd : public DLogicalChannel
{
public:
~DTomfooleryLdd();
[...]
// these power functions no longer need to be virtual
// but you may wish to keep them virtual to maintain
// Ldd-Pdd compatability.
virtual void DoPowerUp();
virtual void DoPowerDown();
virtual void DoEmergencyPowerDown();
public:
// add power handling to this channel
DTomfooleryPowerHandler *iPowerHandler;
}
// 3. add a new power handler to the TOMFOOL.CPP file
class DTomfooleryPowerHandler : public DPowerHandler
{
public:
DTomfooleryPowerHandler(DTomfooleryLdd *aLdd) : iLdd(aLdd) {}
virtual TInt DoPowerOn() { return iLdd->DoPowerUp; }
virtual void DoPowerStandby() { iLdd->DoPowerDown(); }
virtual void DoPowerRestart() { iLdd->DoPowerDown(); }
virtual void DoPowerEmergencyStandby() { iLdd->DoEmergencyStandby(); }
public:
DTomfooleryLdd *aLdd;
}
// 4. change DTomfooleryLdd::DoCreateL and destructor
void DTomfooleryLdd::DoCreateL(...)
{
[...]
iPowerHandler=new (ELeave) DTomfooleryPowerHandler(this);
// register the power handler so we get power events
User::LeaveIfError(Power::AddPowerHandler(iPowerHandler));
[...]
// ask the PowerManager to power us up
iPowerHandler->PowerOn();
}
DTomfooleryLdd::~DTomfooleryLdd()
{
[...]
// ask the PowerManager to power us down
iPowerHandler->PowerStandby();
// remove the power handler from the system
Power::RemovePowerHandler(iPowerHandler);
delete iPowerHandler;
}
// 5. Finally, redirect calls to DLogicalChannel::PowerGood()
// and SetPowerConsumption() through the new iPowerHandler and
// remove all references of RegisterEmergencyPowerDownHandlerL()
It should also be noted that DLogicalChannel::PowerOn() and
DLogicalChannel::PowerDown() are no longer called called during
S::CreateLogicalChannel() and DLogicalChannel::Close().
4) Moved WINS, MAWD and MARM over to the new power models. Changed
DPcCardCntrl, and DLddSound to use the new facilities.
Also Altered DComm, DChannelComm, and DEigerComm.
[Note: Models not added for MMAD, MISA.]
5) Removed duplicate implementations of P::PowerOff, P::PowerOn,
P::Standby(), and P::CheckSupplies in WINS.
2) Jo
1) Fixed EPOC software problem SW1-266 "TLocale isn't updated in
WINC/WINS when the time zone is changed"
Added a line to KPWINS\KP_INI to update locale data on EStartupCold
when the time zone on the PC is changed.
3) Jane
1) Split kearm directory into kcarm for cpu only code and kaeig for
asic code.
Made the kcarm code generic for any arm processor, so that all arm
based ports can eventually share it.
Added a set of __CPU_ #defines for "cpu properties" such as whether
cache is write-back or write-through, whether there is a write
buffer, and so forth. Used these to make the kcarm directory
generic.
These properties are set up in u32std.h from the build #define.
Moved the MAD port to the new scheme - it shares the kcarm directory
and has its own asic dependent directory, kamad.
The MARM and MAD ports have new .MMP files for ekern (ekernx),
ekdata (ekdatx) and ke_exe (kc_exe).
I am particularly pleased with the new TMadPanic - it made it all
worthwhile...
4) Alastair
1) Changed PP::TheMachineName to "Epoc". Take note SDK people, this
means the default .INI file loaded from the emulator's data
directory will be EPOC.INI rather than SYSTEM.INI. I've also
removed the facility to specify the fascia bitmap within the
<machine>.ini file - instead the emulator will expect the fascia
bitmap to have the same base name as it's corresponding ini file -
so if the emulator is invoked with the -Mgeofox1 switch it will try
to load geofox1.bmp. By default the emulator will try to load
epoc.bmp. I've updated E32's SWINS release component accordingly.
2) Updated EKERN.MMP and EUSER.MMP to take advantage of MAKMAKE's new
FIRSTOBJECT keyword (E32TOOLP 097). Merged Jane's new EKERNX.MMP
into EKERN.MMP, and old KE_EXE.MMP into Jane's new KC_EXE.MMP
following these changes.
3) Exporting the following functions from ekern under WINS/WINC by
ordinal rather than name
EXPORTS E32KernelDispatchAddress @279 NONAME
EXPORTS _E32Initialise @280 NONAME
EXPORTS _E32DeInitialise @281 NONAME
EXPORTS _E32ExitProcess @282 NONAME
Euser.dll has been changed to look up these functions by ordinal.
The latter 3 functions were previously only exported under WINC, and
do nothing and are not called under WINS. The hack in MAKMAKE to
handle the linking of these functions by ordinal has been removed
(E32TOOLP O97).
4) Removed Plat::EnterCS() and Plat::LeaveCS() from ESDRV.CPP and
ECDRV.CPP
- these fixes should no longer be required to avoid deadlock since a
generic fix has been applied to E32 version 155.
5) Added 2 new exports to EUSER.DLL in E32WINS.H
IMPORT_C void SetEmulatorColorDepth(TUint& aDepths);
IMPORT_C void EmulatorColorDepth(TUint& aDepths);
SetEmulatorColorDepth() is called by EKERN.DLL which will set colour
depths supported by the emulator according to the specification of
the ColorDepth keyword in the System.ini file. Syntax is
ColorDepth {Gray2} {Gray4} {Gray16} {Color16} {Color256}
{Color4K} {Color16M}
If the ColorDepth keyword is not specified supported colour depths
will default to Gray2,Gray4 and Gray16 for backward compatibility.
Users of EmulatorColorDepth() will need to pass a bitmap reference
to the function which will be set based on the following constants
defined in E32WINS.H
const TUint KEmulGray2= 0x00000001;
const TUint KEmulGray4= 0x00000002;
const TUint KEmulGray16= 0x00000004;
const TUint KEmulGray256= 0x00000008;
const TUint KEmulColor16= 0x00000010;
const TUint KEmulColor256= 0x00000020;
const TUint KEmulColor4K= 0x00000040;
const TUint KEmulColor64K= 0x00000080;
const TUint KEmulColor16M= 0x00000100;
6) Changed RThread::Panic() so that in WINS DEBUG builds it calls a new
function, ThreadPanicBreakpoint2, in upwins\up_debug.cpp, with
information about the thread being panicked and also the name of the
killing thread. This fixes Epoc S/W problem 356 "The __DEBUGGER
macro that catches panics should be un-commented out." To get the
Windows ID of the panicking thread in RThread::Panic() I changed the
code which keeps a list of Epoc threads in EUSER.DLL so that it
contains the Epoc thread ID as well as the Windows one and added a
function to upwins\up_thrd.cpp, TUint32 WinsEpocThreadWinID(TUint
aEpocID), which returns the Windows ID corresponding to the Epoc ID
passed in as a parameter.
7) Split header inc\e32wins.h into 2 headers, e32wins.h and u32wins.h.
U32wins.h contains euser functions that should not need to be used
by any component except E32.
8) Removed all the logical and physical device driver deffiles from
\E32\INC, since makmake always ensures the right function is
exported at ordinal one for LDD and PDD targettypes.
9) Changed the Emulator's path scheme. Now, if a directory called
'Data\' is found in the same directory as the executable which
started the Emulator, the Emulator's data directory will be
considered to be this directory and expected to contain .INI files
and any corresponding bitmaps. Also, directories 'C\' and 'Z\' in
the executable's directory will be mapped to the emulated C: and Z:
drives. If a 'Data\' directory is not found in the executable's
directory, the old scheme will be assumed where the Emulator's data
directory is '\Epoc32\Data\' and the emulated C: drive is mapped to
'Epoc32\WINS\C\'.
10) Fixed Epoc S/W problem 466
"Plat: 46 fault when running EXEs from a different directory".
The emulator now looks in the directory containing the emulated Z
directory for filenames specified without a drive, rather than in
the directory containing the executable that started up the
emulator; so if Z is mapped to \Epoc32\Release\WINS\DEB\Z\, the
emulator will look in \Epoc32\Release\WINS\DEB\ for these files.
Note that mappings for emulated C and Z drives will be overwritten
if specified in the environment, but can safely be set in the
EPOC.INI file using the _EPOC_DRIVE_? keyword. Any attempted
mapping for the Z drive which does not specify a directory ending in
\Z or \Z\ will fail.
11) Removed references to all bldmake-generated batch files from LI.PRJ
files containing them, and updated MNT.BAT so that directories \BWINC,
\BVC4 and \BVC4WINC are not archived (they contain nothing but
bldmake-generated files anyway). This means that to build E32 from
source bldmake must always be called first to generate the batch files,
and ensures these batch files are more likely to be up-to-date.
5) Jonathan
1) Retired KEARM directory following Jane's changes. The MAWD and MISA
builds depended on some files in KEARM, so these files were copied:
KEISA: ke_edbg.cpp, ke_edbg.h, ke_dma.cpp
KEAWD: ke_edbg.cpp, ke_edbg.h, ke_dma.cpp,
ke_exc.cpp, ke_thrd.cpp,
ke_exe.cpp, ke_kdata.cpp
2) Updated MNT.BAT to reflect all of the above directory changes.
3) Hacked a workaround to MSVC++ 5.0 (sp3) assembler bug, where MSVC
incorrectly fixes up conditional jumps when the destination is a C++
function. Files affected: upwins\up_realx.cpp, upwins\up_i64.cpp.
6) Dennis
1) Fixed bug in serial comms driver relating to zero-length reads. If
the receive buffer was empty when a zero-length read was requested,
the driver would enter an inconsistent state and the request would
not be completed unless a terminating character was specified.
7) Pete
1) Added the class RBusDevCom which is intended as a replacement
for RDevCom (although the latter is still supported). This new class
allows the support of serial devices such as PC Card modems which
require the asynchronous power up of the card. The changes included
in E32-120 allowed these types of cards to be initially powered up
just before a channel was opened on the device. They didn't however
support the repowering of an open channel (which again needs to be
asynchronous) after the machine has been turned off. The RBusDevCom
now provides the means to support for this scenario. If a channel is
opened on a serial device which requires asynchronous powering then
all DoControl() and DoRequest() calls are preceded by a fast exec
call to check whether the device needs repowering. (Channels open on
standard serial devices don't suffer the penatly of this
exec. call).
Added the class RBusLogicalChannel (RBusDevCom is derived from
this class) which is intended as a replacement for RLogicalChannel -
to be used for devices which may need to be asynchronously powered
either before opening or while the channel is use. RLogicalChannel
would continue to be the choice for classes of devices which don't
require this behaviour.
Modifications to the TLocalDrive class. This now makes use of the
MBusDev class - created as part of the implementation of the
RBusLogicalChannel class.
Fixed a problem with the TLocalDrive class CheckMount() function
so that it can't lock the file system doing continuous re-mounts
when a CF card is inserted that never asserts its RDY signal.
2) Added a member 'iHiddenSectors' to TLocalDriveCaps
to report the number of sectors on a media device reserved before
the start of the first partition.
3) Added a new version of the
DPcCardCntrl::RegisterEvent() function taking an extra parameter
'TUint aFlag'. This allows the better support of PC cards which use
level mode interrupt requests rather than pulse mode. The flag is
set when level mode is required meaning the PC Card Controller can
avoid failing to clear the interrupt in the PC Card Controller
hardware.
4) Merged various changes to the MAWD architecture layer, the MAWD
B1 variant layer and the MARM P2 variant layer including a new SPI
implementation for MAWD, support for ETNA Rev3 etc.
Added a function Plat::WaitAtLeastAMicroSecond() for use by the
ATA media driver.
Version 1.02.156
================
(Made by Jonathan, 27th October 1998)
N.B. WINS DEB/UDEB will only work with F32 122 OR LATER.
1) Dennis
1) Reintroduced debug/release interoperability for WINS. Removed
CBase::iName and SObjectIxArray::iPadding. Deleted all debug DEF
files.
2) Merged in Andrew Thoelke's E32 proposals:
i) SW1-77 Compiler-generated constant descriptors.
ii) SW1-14 C++ range-checking template wrapper for fixed arrays.
iii) SW1-87 CleanupClosePushL and related cleanup-stack things.
3) Globally disabled warning about not inlining functions in MSVC++ 5.0.
2) Jonathan
1) Fixed version bug in mnt getbld.
2) Fixed pvcs paramater error for bsarm and bsarmbe dirs in mnt *lock.
3) Alastair
1) Added the following Unicode Uid values
KLogicalDeviceDriverUidValue 0x100039cf
KPhysicalDeviceDriverUidValue 0x100039d0
KKernelUidValue 0x100039e2
KUserDllUidValue 0x100039e5
KLocaleDllUidValue 0x100039e6
KConsoleDllUidValue 0x100039e7
KDisplayDllUidValue 0x100039eb
KCustomDllUidValue 0x100039e8
KKeyboardDllUidValue 0x100039e9
KKeyboardDataUidValue 0x100039e0
KKeyboardTranUidValue 0x100039e1
KXYInputDllUidValue 0x100039ea
N.B. some of these values are defined in the file E32UID.IBY (from
\e32\kbarm\,\e32\kbisa\, etc). If this file is to be used in creating
UNICODE roms then the preprocessing stage prior to rombuilding should
define the _UNICODE macro.
2) Updated .MMP files in accordance with the UNICODE plan.
3) Changed MNT.BAT to get E32TOOLP version 096.
Version 1.02.155
================
(Made by Morgan, 20th October 1998)
NB: REQUIRES F32 VERSION 121 OR ABOVE, WSERV VERSION 100 OR ABOVE
0) Jonathan
1) Added Distribution lines to the LI.PRJ files in all subdirectories to
identify licensee-specific source.
1) Graham Asher, 13/10/98
These changes affect the Unicode builds only. They make it possible to use
several different sets of collation rules in the same locale, which is
needed for East Asian locales; and they make it easier to write collation
rules for these and other locales.
\inc\collate.h
introduced TCollationRepertoire - stores a series of rule sets so that one
can choose, say, between sorting on stroke count and radical, or JIS code,
without changing locale. added new collation operators to make it easier
to write complex collation rules reorganised TCollate constructors to make
them easier for Mem functions to call
\inc\e32des16.h
added new TDesC16::CompareC overloads to allow selection of rule set
\inc\e32panic.h
added EBadCollationRulesIndex panic number
\inc\e32std,h
added Mem functions to enumerate collation rule sets and select them when
comparing; these are new CompareC overloads
\inc\u32std.h
changed LCharSet to include a collation repertoire (instead of just a ptr
to the rules) and a collation attribute repertoire
(TUnicodeAttributeRepertoire) for storing locale-specific character
attribute tables like radical and stroke count
\inc\unicode.h
added the new structures used by TCollationRepertoire, and added
TUnicodeAttributeRepertoire and its constituents; added
TUnicode::GetAttribute, so that collation can use locale-specific
attributes, and abolished TUnicode::TranslateFromUnicode and
TUnicode::TranslateToUnicode
\lsrc\ls_unic.cpp
now contains collation repertoire ptr, not rules ptr, and an attribute
repertoire ptr for any attributes supported by the locale
\ucdt\uc_des16.cpp
implementation of new TDesC16::CompareC overloads
\ucdt\uc_exec.cpp
TChar::TranslateFromUnicode and TChar::TranslateToUnicode now do nothing;
have not abolished them like the TUnicode functions of the same names
because of binary compatibility
\ucdt\uc_func.cpp
added new Mem functions to enumerate and retrieve collation rules; and
implemented new Mem::CompareC overloads
\unicode\collate.cpp
reorganised constructor arguments; implemented new operators including
those that retrieve locale-specific attributes; increased subkey size to
16 bits
\unicode\unicode.cpp
abolished TUnicode::TranslateFromUnicode and TUnicode::TranslateToUnicode
2) Dennis
1) Machine coded most of the TEiger functions because things like keyboard
scanning were taking a ridiculously long time (nearly 500us).
2) Fixed bug SW1-256 - TInt64::TInt64(TReal) won't compile under VC5.
3) Fixed bug SW1-738 - Scheduler bug may leave processes unprotected.
4) Added extra function calls to serial comms PDD VA_COM1.CPP to cope
with new chained interrupts.
3) Alastair
1) Changed Emulator title bar to read "EPOC Emulator".
2) Changed \e32\dpwins\d_medint.cpp and \e32\kpwins\kp_pccd.cpp
to use Win32 function GetTempPath() to get the system
temporary path rather than manually checking the "temp" environmental
variable. Fixes Epoc Software problem SW1-112.
3) Changed WINS F11 key case closed behaviour so that "case
closed" is added to the WINS title bar rather than the case
bitmap being displayed.
4) Removed possibility of specifying the case bitmap within
WINS's system.ini file, and all references to the case bitmap.
5) Disabled Emulator Window maximise button since the button
served no purpose.
6) Added new header \E32\INC\E32WINS.H containing the following
WINS-specific functions to be exported from EUSER.DLL
IMPORT_C TInt SetupEmulatorPaths();
IMPORT_C TPtrC EmulatorPath();
IMPORT_C TPtrC EmulatorDataPath();
IMPORT_C TInt SetupEmulatedDrive(const TChar aDrive,const TDesC& aPath);
IMPORT_C TInt MapEmulatedFileName(TDes& aBuffer,const TDesC& aFileName);
These functions are defined in new file
\E32\UPWINS\UP_PATH.CPP, and replace various drive-mapping
activities in different places in E32 and F32. They also
incorporate changes to make the Emulator runnable from
anywhere. If the Emulator is running from a traditional
\Epoc32\Release\WINS\<build>\ directory, then emulated C: and Z:
drives and the Emulator data directory will be as before;
otherwise, emulated C: and Z: will be subdirectories 'C' and 'Z'
of the Emulator directory, and the Emulator data directory
will be the 'data' subdirectory of the Emulator directory.
7) Fixed Epoc Software problem SW1-153 "Allow applications to simulate
running from C: or D: on WINS". F32 has been changed so that
an Epoc path, rather than a full Win32 path, is passed to
the kernel's DPlatLibrary::DoLoad() function. The path is mapped
to a Win32 path using MapEmulatedFileName() for the Win32 call to
LoadLibrary(), but DPlatLibrary.iFileName is set to the Epoc
path rather than the full Win32 path. It is iFileName that function
RLibrary.FileName() returns. Previously F32 would
pass in the full Win32 path and DPlatLibrary::DoLoad() would
convert it to an Epoc path to set the iFileName value, but for
libraries on the emulated Z drive only.
8) In \E32\KPWINS\KP_GUI.CPP, replaced some old dos function
calls with newer, more UNICODE-friendly, Win32 ones.
9) Added 2 new, case-sensitive, command-line flags.
Use EPOC.EXE -C<emulated C drive> -- (that's 2 dashes) to
specify the emulated C drive.
Use EPOC.EXE -T -- to specify that the system temporary path
should be used as the emulated C drive.
These flags will override the default settings and any _EPOC_DRIVE_C
setting in the environment or in the System.ini file.
10) Removed obselete code defaulting maximum free RAM under WINS from
\E32\KPWINS\KP_HAL.CPP. The default is now applied by
\E32\KPWINS\KP_GUI.CPP.
11) Changes to support international keyboard variants - these changes
will mean that WSERV version 100 (or above) and it's corresponding
changes are required to provide sensible keyboard behaviour.
a) Changed WINS EKERN.DLL so that character codes are passed onto the
Window Server in the 2 high bytes of the TRawEvent iScanCode
member variable.
b) Changed WINS EKTRAN.DLL to translate Epoc scan codes to the
character code provided in the 2 high bytes of the aScanCode
parameter if this code is available.
c) Changed EWSRV.DLL so that the 2 high bytes of the TRawEvent
iScanCode are ignored where appropriate.
d) Changed WINC ECONS.DLL to support international keyboard
input.
e) Removed \E32\KPWINS\KP_KYBD.CPP - this file used to provide
limited international keyboard support - UK/US variants only.
12) Added KConsoleDllUid, 0x100000C5, to \E32\INC\E32UID.H.
13) Made changes to \E32\WSRC\CO_TWIN.CPP to resolve the ECONS.DLL
problem in line with the version of Epoc S/W Proposal SW1-84
revised 27/8/98. Some changes to the Eikon console will be
required for the solution to be fully effective. The changes
don't go quite as far as the proposal - the text console only
attempts to load ECONSEIK.DLL, not ECONS?*.DLL, since the
dll-loading code does not handle wildcards.
14) Changed \E32\KPWINS\KP_GUI.CPP so that under WINS the pointer
name (TMachineInfoV1.iXYInputName) is always either _L("PEN"),
_L("MOUSE") or _L("NONE"). This value can be set via
\Epoc32\Data\System.ini using keyword "PointerType", and
defaults to _L("PEN"). E.G. "PointerType mouse".
15) Changed \E32\KPWINS\KP_GUI.CPP to allow Emulator windows to be
created which are larger than the PC screen.
16) Changed \E32\GROUP\SWINS.REL to include the new symbian fascia.bmp and
friends from R:\SDK\ZIP\SDKMODELS.007.
17) Added new function and an enum to E32WINS.H
IMPORT_C TInt EmulatorFlip(TEmulatorFlip aEmulatorFlip);
enum TEmulatorFlip
{EEmulatorFlipRestore,EEmulatorFlipInvert,EEmulatorFlipLeft,EEmulatorFlipRight};
Calling this function, defined in \E32\UPWINS\UP_GUI.CPP, will change
the size and orientation of the emulator's parent and child windows
and bitmap.
18) Implemented Epoc Proposal SW1-93 "Help for debugging Panics on WINS".
In WINS DEBUG mode, when a thread is panicked, a function in
\E32\UPWINS\UP_DEBUG.CPP will be called which will break into the
debugger and provide comprehensive information about the panic. Source
file UP_DEBUG.CPP will be needed for this to work properly. I've
removed the __DEBUGGER() macro from RThread::Panic() since it should no
longer be required.
20) Added 2 new functions to E32WINS.H - AddToWinsEpocThreadList() and
RemoveFromWinsEpocThreadList(). These enable the kernel to create and
maintain a list of "real" Epoc threads (as opposed to fake WINS
hardware threads) within EUSER.DLL. New function
UpWins::__EpocThread() in UP_STD.H is called by EDLL.OBJ (linked into
every WINS Epoc dll) to check whether the current thread is in this
list, so that EUSER's E32Dll() routine is only called when real Epoc
threads attach to and detach from loaded Epoc dlls. As a result of
this change dlls linked to the new version of EDLL.OBJ will not run
against older versions of EUSER.DLL. All these new functions are
defined in new file \E32\UPWINS\UP_THRD.CPP. This change addresses
Epoc Proposal SW1-19, though I haven't removed the calls to E32Dll()
with parameters EDllProcessAttach and EDllProcessDetach yet since the
window server, and perhaps other components, make use of these.
4) Morgan
1) Added interrupt chaining to TInterrupt. This breaks binary
compatability for this class, but maintains source compatability.
Attempts to Bind the old TInterrupt class with the new kernel will
fail with KErrNotSupported.
Version 1.02.151
================
(Made by Pete, 12 October 1998)
1) Morgan
1) Updated TLinda and KEMAD\KE_PIC.CPP to take the new interrupts
2) Added some kernel access functions so device drivers can
find DPhysicalDevices, DLogicalDevices, DChunks, and DLibraries
3) Added TDma::Fill()
4) Fixed a bug in the ImpDma interface
5) Added hooks for automatic chaining of Dma buffers
2) Pete
1) Re-organisation of the SPI bus / ADC channel
measurement code in MARM and MAWD builds:-
TSpiController is now an abstract class. A
TSpiController derived class is defined and instanciated in each
variant. During initialisation, the kernel calls
TSpiController* Custom::CreateSpiController() to create the
appropriate SPI controller device.
TSpiController now includes the following
pure virtual functions which (hopefully) encompass the variant
specific aspects of this device:-
- void TSpiController::InitialiseSpiDevice();
- void TSpiController::StartAveragedReading();
- void TSpiController::StartOneShotReading();
Created the file VA_SPI.CPP in each MARM/MAWD
variant to implement the above functions (the code for which
has been essentially extracted from the appropriate KE_SPI.CPP
file). Also moved the following SPI related functions out of
VA_HW.CPP into VA_SPI.CPP:-
- TBool Custom::TestBootSequence()
- TInt Custom::BindSpiChannel(const TDesC8& aName)
- TBool Custom::EightChannelAdcFitted().
The TSpiController device no longer relies on
the digitizer driver to drive it to pull off and process
entries from its queue of ADC channels waiting for an ADC reading.
The Controller now has its own 8mS tick to perform
this. The later can be suspended/resumed by the variant using:-
- void TSpiController::Suspend();
- void TSpiController::Resume();
(For PB-PD/P2 MARM and B1 MAWD variants, the
digitizer driver does indeed suspend this operation and
drives processing of pending channels itself so as not to
change the operation of this driver).
2) Re-organisation of the way the PC Card Controller
hardware (e.g. Etna) is implemented for MARM builds to make
use of the fact that the variant DLL can now contain static
data. The h/w chunks are no longer allocated in the
architecture layer (KE_INI.CPP), but are
allocated within the variant as part of the Custom::Init3()
function. As such, the function
Custom::PcCardCntrlPhysicalAddress() has become redundant.
3) The function Hal::ColdStart() is now properly
exported.
3) Petteri
1) Changes to MARM display driver (WD_EIGER.CPP) so to handle
different screen sizes. Previous one assumed 640x240.
2) Changes to bootstrap and MARM variant layer to allocate an
additional h/w chunk for the extra registers in the CL-PS7111 device.
3) Various changes to the Cirrus Logic evaluation board
variant - to bring back as a supported variant.
4) Dennis
1) Put SCREENVARIANT code back into MARM bootstrap.
Version 1.02.150
================
(Made by Alastair, 23rd September 1998)
This release is not intended for ER4, though it could be used as part
of an ER4 SDK.
1) Alastair
1) Changed ECDRV.PDD, ESDRV.PDD and ESOUND.LDD as suggested by replies
to topic "WINS sound and comms cause deadlocks with STDLIB" under
category "Known Epoc Problems" in Notes database
"Symbian Tech Support General", except that the change to
ECDRV.PDD has been modified slightly so that it doesn't break test
T_SERIAL.EXE. The ECDRV.PDD change has been tested with a version of
T_SERIAL.EXE modified to simulate the conditions which
could previously cause deadlock.
These changes address the following bugs/proposals, but do not
represent a permanent solution:
Epoc Software problem SW1 - 176 "WINS sound driver
deadlock in ESTLIB E32Dll() function."
Series5 Software problem SW1 - 503 "ECDRV.PDD can cause
deadlocks in simple test programs".
Epoc proposal SW1 - 19 "Implement true EPOC32 handling of
E32Dll() under WINS".
The change to ESOUND.LDD fixes Epoc Software problem SW1 - 179
"ESOUND.LDD plays silence indefinitely for short sound samples".
Version 1.02.144
================
(Made by Dennis, 7th August 1998)
1) Matthew
1) Added code to MISA platform so that the cpu goes into idle mode when
in the idle thread.
2) Added \e32\keisa\todo.txt - a to-do list for the MISA platform.
2) Dennis
1) Fixed bug in comms device driver D_COMM.CPP which left unwanted DFCs
queued after a power-down. These then attempted to complete requests
twice. Power down now cancels any pending DFCs.
3) Jonathan
1) Removed tests for redundant files from valid command in mnt.bat.
2) Updated build.txt to add dire warnings about checking e32ver.h and
advice about MNT VALIDating releases.
Version 1.02.143
================
(Made by Pete, 20th July 1998)
1) Dennis
1) Fixed SW1-586 incorrect handling of signed zeros.
2) Morgan
1) Updated V32Linda.h to reflect the latest hw
2) Added TDma class and supporting classes Dma, ImpDma
3) Changed MMAD bootstrap to use the same modular scheme as MARM
3) Alastair
1) Fixed Epoc Software problem SW1-107 'WINS RThread::Resume problem on
Win95' by not faulting the platform unless Win32 API function
GetLastError() reports an error as well as ResumeThread().
4) Pete
1) Fixed a problem with ATA media driver such that it sometimes failed
to reduce machine current consumption - having raised it due to a
read or write to the CF card.
2) Fixed a problem with ATA media driver. As part of the exec. call to
read/write/format the card, the driver sends a command to the card,
to read/write the appropriate number of sectors. Each time a sector
is complete, the card generates an interrupt so the driver can
either read the data from the sector or supply the data for the next
sector to be written. There was a problem with the driver such that,
if the first interrupt from the card occurred while still in the
initial exec. call, the interrupt could be prematurely cleared. The
driver then only detects that the sector has been processed when a 2
second time-out occurs on the operation - making the operation
appear very slow. This only seems to have been a problem for Viking
and Panasonic CF cards.
3) Alteration to the ATA media driver to improve speed of transfer,
particularly on reads from the card. Before, the driver queued a DFC
for the completion of each sector read from the card (to write it
back the thread making the request). The media driver's buffer has
now been increased so that this can be filled under interrupt. A DFC
in now only queued when the buffer is full.
Version 1.02.142
================
(Made by Pete, 1st July 1998)
1) Matthew
1) Changed MISA bootstraps to use the same modular scheme as MARM.
2) Added functions to TSa1100 for new hardware registers in revision D.
1) Dennis
1) Added thread write function DThread::WriteNoCheck() which doesn't
perform the strict checking that DThread::Write() does.
2) Changed TLex::Val(TReal*) to use TRealX in its intermediate
calculations in order to increase the precision of the final
result. Added a new function Math::MultPow10X which multiplies a
TRealX argument by an integer power of 10. This is basically a
higher precision version of Math::Pow10.
1) Pete
1) Changed MARM ATA and CROM media driver to use
DThread::WriteNoCheck(). Fixes SW1-482.
Version 1.02.141
================
(Made by Pete, 10th June 1998)
1) Jonathan
1) Removed private assignment operators from TSglQueIterBase and
TDblQueIterBase as per EPOC32 Proposal SW1-53.
2) Made inline RSubSessionBase::SubSessionHandle() public as per EPOC32
Proposal SW1-45.
3) Bumped up the E32 KMediaDriverInterface*VersionNumber.
4) Changed the default WINS memory emulation from 4MB to 64MB as per
EPOC32 Proposal SW1-88.
5) New code page 1252 and Unicode character information tables derived
from release 2.1 of the character database from Unicode Inc.
Fixes EPOC32 Software Problems SW1-42 and also adds:
80 & U+20AC New euro currency symbol
8E LATIN CAPITAL LETTER Z WITH CARON (= U+017D)
9E LATIN SMALL LETTER Z WITH CARON (= U+017E)
U+FFFC OBJECT REPLACEMENT CHARACTER
6) From Graham Asher:
The enumerated type TChar::TCategory in e32std.h, used only in the
Unicode build, has been changed to accommodate the new character
categories in unidata2.txt.
2) Matthew
1) Changed the TSa1100 class - removed SetHalt(), which had been
copied over from TEiger, and renamed IntLevels() to IntsPending()
and IntTypes() to IntLevels() to conform with the terminology in
the SA1100 documentation. Breaks misa kernel-side compatability.
2) Removed lccr followers from MISA, which were working around a bug
in the SA1100.
3) Changed MISA ScreenInfo function to return the address of the
beginning of the palette (rather than the pixel data for 8bpp).
The screen driver will have to change to take account of this.
4) Removed TSa1100 palette functions - the screen driver should write
to memory instead.
5) Removed Cassius-A releasables from the releasables, because we had
the hardware taken from us.
6) Changed Windamere(AWD) and SARMBE architectures to set year to
rombuild year on a cold boot, which I forgot in the last release
(see 3.13 in release 140).
7) Fixed Epoc32 defect SW1-33 ("Problem in Plat::Fault in Unicode
builds") by changing Length() calls to Size() calls.
8) Changed sound ldd to use DThread::Read() and Write() rather than
doing its own thing this fixes S5 defect SW1-231 ("Machine warm
reset when playing sound while spy running").
9) Changed svChangeLocale() function so that it triggers
RChangeNotifiers.
10) Changed keyboard translator dll so that the default library is
closed when not in use.
11) Incremented EPOC comms-driver minor version number (but not WINS
one) and put a check into the pdds so that they will not be used
with early versions of the ldd. Partially fixes Bluebell defect
SW1-5 ("Triple beep reset when turning on the link").
12) Added an explicit call to compress the kernel heap to
S::ChunkCompressAll(). This fixes the E32 bit of Series-5 defect
SW1-356 ("Large uncompressible heaps in system components").
13) Fixed bug in sound ldd which caused sine waves to not be
cancelled in WINS on PCs which did not support aLaw.
3) Dennis
1) Fixed bug in ARM710.S in EIGER bootstrap code. In function
EigerSetCSnWidth register R1 is accidentally overwritten, causing
the ROM to be set up incorrectly if its bus width is not 32 bits.
2) Implemented EPOC32 proposal SW1-69. User::StartThread modified to do
the DLL attach and detach in separate functions, so that the 1K of
stack used in these functions can be reused during actual running of
the thread.
3) Fixed problem SW1-51 - renamed TPointerArray<T> to RPointerArray<T>
and TSimpleArray<T> to RArray<T>. Replaced TArray(U)Int with
RArray<T(U)Int>. Replaced the destructor with a Close() function to
do memory deallocation. Frozen DEF files modified so that renamed
functions are at same ordinal as before, with Close() functions at
the same ordinals as the destructors were.
4) Fixed problem SW1-47 - modified code in DebugFunction ProfileResult
to get the tick period from Hal::TickPeriod instead of hardcoding it
to 15625us.
5) Fixed problem SW1-622 - modified heap code so that all free cells
are at least 16 bytes in debug mode, since this is the minimum
allocated cell size.
6) Modified RHeap::ReAlloc() so that the nestingLevel field in debug
mode is preserved. This prevents test programs failing a kernel
heap check due to one of the kernel's arrays being reallocated
during the test.
7) Modified handlers for vectors 0x00 and 0x14 (reset and reserved) to
fault with a simulated exception EExcInvalidVector rather than
looping forever. iCodeAddress=0x00 or 0x14, iDataAddress=value of
lr on jumping to 0x00 or 0x14.
8) Added functions RChunk::IsReadable() and RChunk::IsWritable() so
that user code can determine whether or not a chunk is mapped into
its process address space.
9) Fixed problem SW1-370 (Math::Mod is not sufficiently
accurate). Changed the algorithm from x%y=x-y*INT(x/y) to a
bit-by-bit shift and subtract algorithm. Added operator%,
operator%=, Mod() and ModEq() functions to TRealX class to implement
the new algorithm.
4) Petteri
1) Fixed a bug in Math::Round(). (SW1-402)
2) Fixed a couple of bugs in the text window server.
3) Changed Ekern.mmp as required by changes in Makmake.
5) Alastair
1) Changed mnt.bat so that mnt getsrc no longer attempts to make
the Epoc work directories.
2) Changed WinCOutput::Write(const TDesC &aDes) so that WINC
programs can write output to STDOUT for redirection. This change
applies to ascii builds only.
3) Changed the kernel so that the Windows Alt-F4 keyboard
shortcut for closing applications works for WINS.
4) Changed #define in kpwins\kp_chunk.cpp so that the code which
checks that requests for more memory won't cause the emulated
memory allocation limit to be exceeded applies for WINS only, not
WINC. This won't change WINC behaviour because the emulated
memory limit under WINC was always zero, which meant that the
check wasn't applied anyway.
5) Changed kpwins\kp_gui.cpp in line with Epoc Proposal SW1-21,
so that emulated drive assignment is possible from
\Epoc32\Data\System.ini.
Syntax is
_EPOC_DRIVE_<letter> <path>
6) Jo
1) Fixed Series 5 software problem SW1-440 ("PDD returns different errors
in WINS and ARM"). Both WINS and ARM now return KErrNotSupported.
2) Fixed Series 5 software problem SW1-943 ("XXX_CAST macros in E32DEF.H
are written incorrectly")
7) Pete
1) Implemented asynchronous rather than synchronous system
for read,write and format operations on local media devices.
This affects the TLocDrv and DMediaDriver classes.
2) Changed API on for local media devices so that for any given
operation (eg read,write,format,reduce size) the position on the
device is specified as a TInt64 rather than TInt. This will allow
very large media devcies to be supported. This affects the TLocDrv,
DMedia and DMediaDriver classes.
Taking changes 1 & 2 for DMediaDriver, the functions
TInt DMediaDriver::ReduceSize(TInt aPos,TInt aLength);
TInt DMediaDriver::Read(TInt aPos,TInt &aLength,const TAny* aTrg,TInt aHandle,TInt anOffset);
TInt DMediaDriver::Write(TInt aPos,TInt &aLength,const TAny* aSrc,TInt aHandle,TInt anOffset);
TInt DMediaDriver::Format(TInt aPos,TInt &aLen);
become:-
TInt DMediaDriver::ReduceSize(TInt64 &aPos,TInt aLength);
void DMediaDriver::Read(TInt64 &aPos,TInt *aLength,TLocalDriveMessageData &aTrg,DThread *aThread,TRequestStatus *aStatus);
void DMediaDriver::Write(TInt64 &aPos,TInt *aLength,TLocalDriveMessageData &aSrc,DThread *aThread,TRequestStatus *aStatus);
void DMediaDriver::Format(TInt64 &aPos,TInt *aLength,DThread *aThread,TRequestStatus *aStatus);
3) Withered the UserPcCardCntrl class. Now all functions are 'not supported'
apart from:-
void UserPcCardCntrl::PwrDown(TSocket aSocket);
TInt UserPcCardCntrl::NotifyChange(TSocket aSocket,TRequestStatus *aReqStat);
which are implemented using the corresponding UserSvr functions
described below.
The media device functions previously provided by UserPcCardCntrl
are now provided by D_DRVIF.LDD in E32UTILS.
The PC Card controller functions previously provided by UserPcCardCntrl
are now provided by D_PCCDIF.LDD in E32UTILS.
4) Added the following UserSvr local media functions:
void UserSvr::ForceRemountMedia(TMediaDevice aDevice);
Causes remount on next access to specifed device (ie
media change simulation).
TInt UserSvr::MediaChangeNotify(TMediaDevice aDevice,TRequestStatus *aReqStat);
Request notification of power of powerup and media change
events on the specified media device.
5) In MARM build the function:-
TInt DArmPlatPcCardSocket::EventCallBackEnable(TPccdEvent anEvent)
no longer performs a clear of any pending events before enabling an
event callback type. Also, it now performs an additional check that
a power down of a PC Card hasn't occured (ie Kern::PowerGood()) before
enabling PC Card IREQ events.
Version 1.02.140
================
(Made by Morgan, 14th May 1998)
1) Graham
1) Added P3 variant to the rom building capabilities in KBARM
2) Dennis
1) Added support for multiple kernels/variants in the same ROM.
This requires F32 096 and ROMBUILD version 093.
2) Added TSimpleArray<>, TPointerArray<>, TArrayInt simple array classes.
3) Changed occurrences of CArray* in the kernel to TSimpleArray<>.
4) Rearranged ARM boot code into a form which is easier to adapt to other
hardware and which facilitates multiple-boot ROMs.
5) EKERN.EXE no longer links to the variant DLL. Instead, the variant DLL
is found by searching a list of possible variants.
6) Added executive call UserSvr::RomRootDirectoryAddress() to enable F32 to
obtain the address of the ROM file system root directory. This address is
now determined at boot time from a list of possible root directories, one
for each variant which the ROM supports.
7) Added code to enable profiling of threads (measures CPU time used by each
thread in the system). To use this, rebuild the MARM REL version with the
symbol __PROFILE__ defined at the top of M32STD.H. You will also need test
program T_PROF.EXE and device driver D_PROF.LDD from E32TEST.
8) Added two new format options %O and %o to Kern::Printf. %o prints the short
name of a CObject and %O prints the full name. Also modified Kern::Printf
to print (null) if a NULL pointer is passed into %S, %O or %o.
9) Modified statements of the form Kern::Printf(_L("%S"),&obj->FullName())
to Kern::Printf(_L("%O"),obj).
10) Added a generic algorithm for determining the size and configuration of
DRAM devices to the ARM bootstrap code.
11) Modified ARM/ISA/X86 bootstrap to map in the PageTableInfo array at
0x41080000. The fixed offset from the page directory simplifies remapping
during a reschedule.
12) Added fields iHomePdes, iPdes and iNumPdes to the definition of DPlatChunk.
These indicate directly which PDEs are used by the chunk and simplify
moving a chunk around. Modified the scheduler to use these fields when
switching processes. Added a function DPlatChunk::SetPdeInfo to set up
these fields.
13) Removed the current consumption setting code from the scheduler. Added
a function K::TotalCurrentConsumptionInMilliAmps() which calculates the
machine current by adding K::TotalCurrentMilliAmps to the machine current,
determined by simply looking to see if the null thread is running.
14) Modified DPlatProcess::LookupChunk to do a binary search on the chunk list
instead of a straight entry-by-entry search.
15) Fixed a bug in DPlatChunk::ReallocateHomeAddress which would result in a
chunk being left without a home address if all linear addresses in the
home section were exhausted.
16) Modified text window server so that it loads EDISP.DLL from Z:\SYSTEM\LIBS
and invokes ordinal 1 in order to create the screen device driver, rather
than being statically linked to EDISP.DLL. This is necessary for multi-boot
ROMs since EDISP.DLL is hardware dependent.
17) Added WINDERMERE architecture (\E32\KEAWD), Bluebell V1 variant (\E32\VAWDB1),
and dual-boot EIGER/WINDERMERE test ROM (\E32\KBAWD).
This builds and runs on Rack D but is obviously completely untested on
Windermere. There are some outstanding issues with the Windermere port:
i) Standby code may be faulty - problem with restoring state when machine
powers back up.
ii) PC card/CF card code requires modification to use LDRH/STRH 16 bit
instructions rather than relying on EIGER 'mad-mad mode'.
iii) Bootstrap needs modifying to detect Windermere.
iv) SPI controller and LCD controller setup may be incorrect.
3) Matthew
1) Got rid of MARM P1 (banana) variant.
2) Bug fixes to MISA so it can be run in 4bpp and 16bpp modes.
3) Changed misa to use the hardware rtc to keep track of the time, instead of
counting ticks.
Unfortunately the 32MHz crystal is very slow to warm up, so a cold boot is now
much slower than it was because it has to wait for the crystal to stabilise.
4) Changed misa bootstraps to be fractionally more like the marm one.
5) Moved the WINS-specific setting of the daylight-saving mode out of the
independent layer and into KPWINS. Removed the resetting of the
daylight-saving from the change-locale function. These mean that S5
defect SW1-558 ("Remove windows dependency") has been fixed.
6) Fixed bug in DLogicalChannel::Request(), which previously, in WINS,
could have sent a request from a thread which had no right to do a request
on that channel.
7) Integrated Andrew Baldwin's wonderful new WINS sound pdd, which will not
offend your ears. Many thanks to Andrew for this.
8) Modified sound ldd so that it can pass multiple samples to the pdd. Modified
pdds to use this new functionality. This reduces the amount of time spent in
the service routine.
9) Fixed S5 defect SW1-228 ("Dial setup errors") in sound LDD.
10)Incrememented sound driver minor version number, to stop people mixing old
and new pdds/ldds.
11)Put an __DEBUGGER() macro into K::PanicCurrentThread() - previously these
panics were just stopping WINS without giving you a chance to jump in with
a debugger.
12)Added int3's to WINS DEBUG versions Plat::Panic() and Plat::Fault() so they
break into the debugger whatever the state of the JustInTime flag.
13)Changed MISA and MARM cold-boot to read the year from the rom header and set
the time to 10:10 January 1st of that year. Fixes Bluebell defect SW1-134.
14)Made the private function KernelCompressAll() into the public
User::CompressAllHeaps(). This is to allow Shell to trigger heap compression
more easilly (see Bluebell defect SW1-299).
4) Morgan
1) Integrated the MADLinda architecture and build system
2) Bug fix to KESARMBE\KE_PIC.CPP
3) Changed occurences of DisableIrqs and EnableIrqs to DisableIrqsToLevel2 and
RestoreIrqs in SARMBE architecture
4) Added callback hook for the idle loop
5) Added Kern::PhysicalDeviceFromHandle
6) Added an external debugger interface (K32DBG.H). Used it to bolt on an
InfoOutput debugger for MSDEV. On the MARM platforms bolted on a logging
debugger for use by an external JTAG debugger, (like TI's). No debugger
for X86.
5) Jonathan
1) Made Eiger and Windemere text drivers return correct screen size
from CScreenDriverMarm::Init() instead of assuming 80x24.
Removed old #ifdefed-out SetMode() code from Eiger driver.
================
Big version number increment to skip over Liffey release.
================
Version 1.02.128
================
(Made by Jonathan Harris, 8th May 1998)
1) Jonathan
1) P::SetMachineConfiguration(): Don't update the bits of the SuperPage that
belong to the boot code (including the exception info), apart from the
display contrast.
Version 1.02.127
================
(Made by Graham Darnell, 26th March 1998)
1) Dennis
1) Added a new variant function Variant::SetSoundDriverEnabled(TBool) for use
with Snowball in order to allow user code to enable/disable the speaker
using UserHal::SetSoundDriverEnabled().
2) Added some code to Variant::Init3 for P2 variant to enable correct operation
with either a single ROM device, 4Mb on CS0 and 2Mb on CS1, or 4Mb on both.
2) Matthew, Pete and Rob Pym
1) Converted the MISA build from being for a Digital IT board to being for
SA-1100 based hardware. This has an identical user-side API to MARM, so
MARM releasables will run unchanged. To build a rom use the MARM F32.
2) Added variants VISABA for a Digital's "Brutus" board and VISACA for a
Cassius rack.
Note: TO BUILD A TEXT-SHELL ROM FOR BRUTUS YOU WILL NEED THE ESHELL.EXE
FROM F32 096 OR HIGHER. PRIOR TO THIS, THE SHELL TRIES TO CREATE
A CONSOLE WINDOW LARGER THAN THE BRUTUS SCREEN AND CRASHES.
3) Matthew
1) Changed all interrupt-binding and startup-beep internals to use Narrow
descriptors in the Unicode build.
2) Added code to read extra digitiser information in E2 on P1, P2 and PD
variants. Changed the digitiser drivers on P2 and PD machines to use this
extra information, so different digitisers can be used on these machines.
If the new E2 information is invalid due to a new rom has been put into
an old machine, then this is detected due to the x rise-time being zero,
and the driver defaults to the previous good values.
If you wish to program your E2 with values suitable for the standard
digitiser use XYSpread/16=6; X-Rise=1; Y-Rise=1; Pen-down discard=0.
3) Moved TVideoMode enum from d32video.h to e32twin.h, and stopped e32twin.h
including d32video.h, thus fixing SW1-921.
4) Changed sound LDD to make sure that the internal state is implies no
request is pending when a play request is completed. Thanks to Andrew
Baldwin for finding this.
5) Changed some RChangeNotifier internals so that the internal state implies
no request is pending when a request is completed.
4) Graham/Matthew
1) Changed the WINC memory information function so that it doesn't emulate a
machine with 4 megs of ram.
2) Removed some critical-section switching in the WINS thread-startup code.
This fixes a bug which occasionally caused WINC to hang on fast machines
if a thread did an exec call very soon after being resumed for the first
time.
3) Removed another 'dance of the semaphores' during WINS thread
startup. This seemed to prevent a resumer proceeding
until all resumee dll entry points have been called. Since
there seems to be no reason for this and since this was
causing a problem when threads were resumed inside
dll entry code, there seemed no point in keeping it.
However, this might be something to watch out for.
3) On WINS/WINC, the call to tick the tick-queue is now sandwiched between a
Plat::EnterCS() and a Plat::LeaveCS(). This will make these platforms far
more robust, but might break work-arounds that may or may not exist in
user code.
5) Morgan
1) Fixed Bluebell defect SW1-43.
2) Added Dll::FreeData(). This should be called in the EProcessDetatch
of those Dlls sporting static data.
6) Graham
1) Added comms and sound device drivers to the WINC
releasables.
Version 1.02.126
================
(Made by Jonathan, 26th February 1998)
1) Matthew
1) Tweaked MMP files in preparation for misa platform.
2) Added lots of useful constants to k32std.h - these will be used in the
misa platform.
3) Removed the obsolete DriveName and PccdSlotHame() functions from the
variant layers.
2) Graham
1) Added K32KEYS, K32COMM, and K32SND header files to INCK release
2) Split off the S1 variant into its own project
3) Removed S1 variant from E32 project
4) Fixed a bug in the MARM architecture that assumed that an eight channel
ADC was fitted when powering up.
3) Dennis
1) Modified RHeap definition so that it is now derived from RHeapBase,
which contains all the non-debug data members. This is to force GCC
to put the vptr in the same place that it always was in release builds.
This is to enable test code to run on a real machine with EUSER.DLL
replaced from RAM.
2) Changed UP_CON.CPP in UPMARM, UPMX86 and UPWINS to only include <e32def.h>
instead of up_std.h. Previously, modifying k32std.h would cause up_con.cpp
to be rebuilt but not the real econs.dll.
4) Alastair
1) Added edll.pdb and eexe.pdb to ewinsdb.rel because following the move
to using makmake edll.obj and eexe.obj no longer contain their own
debugging information.
2) Updated .MMP files previously using the START MARM .. END block keyword
DLLNAME so that they use the new LINKAS keyword instead. Updated MNT.BAT
to get e32tools 091 and e32toolp 091.
5) Jonathan
1) Added new SwitchOn() digitizer driver call. Needed by the Snowball
variant to reinit the digitizer after power-off.
Version 1.02.125
================
(Made by Graham, 16th February 1998)
1) Morgan
1) Allowed static data for Rom Ldds/Pdds. These require the 'fixed'
keyword in the obey file.
2) Graham
1) Removed debug/release interoperability from WINS/WINC.
Version 1.02.124
================
(Made by Jonathan, 10th February 1998)
1) Jonathan
1) Incremented KMediaDriverInterfaceMinorVersionNumber because the
media interface has changed (actually, it changed back in 120).
2) Added new TPasswordToken member to TMachineConfiguration on WINS,
updated on setting the password or machine configuration.
3) For internal consistency, WINS now actually limits the amount of
available memory on the 'machine' to the parameter set in
system.ini, and defaults to 3M if no value is set. Previously WINS
merely _reported_ 3M if no default was set, but allowed you to
allocate past 3M. This broke test code.
4) Fixed generation of event on Off keypress on Snowball 1.
5) Incorporated Pete's change: Snowball 1 variant no longer waits for
400ms for SanDisk to come out of reset. Instead, the media driver
polls the SanDisk on first use.
2) Alastair
1) Updated e32base.h and ub_sec.cpp with Andrew Thoelke's changes to
implement EPOC32 proposal PR-0077, that a new function be provided
to return the maximum possible length that an encrypted piece of
data could become under the encryption scheme in use given the
initial length of the data.
2) Changed mnt getrel so that it doesn't attempt to get the non-existent
.PDB files for release builds.
3) Basher
1) Changed K::EmergencyPowerDown() and K::EmergencyPowerDownDfcFn()
functions (ks_power.cpp).
2) Changed Variant::EmergencyStandby() - on the folowing varients
varmcl, varmpd, varmsa and varmsb.
3) \varms1\va_mati.cpp changed - implementing safe EmergencyPowerDwn
control. EmergencyCallBack function added and the SectorWrite function
changed to control emergency system shutdown to prevent Liffy's
internal CF card from corruption.
4) Morgan
1) Added VARMLA variant and bigendian support
5) Graham
1) Changed variant structure for VARMCL, VARMPB, VARMPC,
VARMPD, VARMP1, VARMP2, VARMS1, VARMLA.
The variant object is now created on the kernel heap.
This allows the variant code to have state and will
result in many simplifications of code that interacts
between variant and architecture layers. It will also
allow for improved customisation possibilities for
our licensees.
Questions concerning historical and cross-platform
binary compatibility are yet to be resolved.
2) Cleaned up E32STD.H. This now follows the new standard:
CBase *Function(TDes &aParameter);
becomes
CBase* Function(TDes& aParameter);
3) Snowball PTR2 varmsb and Delaware varmpg removed.
6) Petteri
Changes to the text window server:
1) Four different window classes have been reduced into just one.
2) The notifier server now has a thread of its own and uses text window
server API for its output.
3) ASCII font has been changed to get the window borders back.
4) There is now a constant KCONSFULLSCREEN, which can be used to create
a full-size window whatever the size of the screen.
5) Windows can be moved, resized and scrolled using the mouse or a pen.
6) OnTop flag has been added. If the flag is set, the window stays on top
of other windows.
7) The size of notifier windows now depends on the length of the text
which is being displayed. Buttons can have more than just one character
and they are centred. One button option now works properly. Pressing
ESCAPE returns value 0, ENTER returns 1. The notifier window stays on
top of other windows.
8) Info prints are also variable-sized and they stay on top of other windows.
9) System.ini files are now read correctly in Unicode build. (Files written
in Unicode cannot be read.)
10) Colour support has been added. WINS supports a mode EColor256, where a
palette of 256 colours is available. SetTextAttribute() provides an easy
way to display text in colour. The following attributes are available:
ETextAttributeNormal, ETextAttributeBold, ETextAttributeInverse and
ETextAttributeHighlight. Palettes (if supported) can be manipulated and
read with SetPaletteEntry() and GetPaletteEntry(). SetTextColors() changes
colours for text foreground and background. Colours for window background,
window borders and screen background are set with SetUIColors().
11) The text window server API has 8 new functions:
TInt SetWindowPosAbs(const TPoint &aPosition) (Sets window position.)
TInt ScreenSize(TSize &aSize) (Returns screensize in characters.)
TInt SetMode(TVideoMode aMode)
void SetPaletteEntry(TUint anIndex,TUint8 aRed,TUint8 aGreen,TUint8 aBlue)
void GetPaletteEntry(TUint anIndex,TUint8 &aRed,TUint8 &aGreen,TUint8 &aBlue)
void SetTextColors(TUint anFgColor,TUint aBgColor)
void SetUIColors(TUint aWindowBgColor,TUint aBorderColor,TUint aScreenColor)
void SetTextAttribute(TTextAttribute anAttribute)
Version 1.02.123
================
(Made by Jonathan, 27th January 1998)
1) Alastair
1) Changed MNT.BAT so that no attempt is made to release PDB files for
WINS and WINC release builds, because MAKMAKE generated makefiles do
not create them by default.
2) Removed references to defunct directory \e32\dmedia from MNT.BAT.
2) Jonathan
1) Drain the Snowball 1 digitizer FIFO before enabling its interrupt to
prevent it from generating spurious and unwelcome penup/downs on
startup.
2) P::SetMachineConfiguration() : delete the current password and update
the password from the new configuration.
3) Dropping DTR on Snowball 1's 2nd serial port (the phone port)
asserts the ONKEY signal to the phone, allowing users of that serial
port to turn the phone on/off.
4) Corrected size returned by Custom::XYInputSize() on Snowball().
5) Hugely simplified the Snowball 1 key data tables.
6) Added special support for the Snowball 1's Off key in the keyboard
driver. But this doesn't work.
7) Belatedly updated kbarm files with support for Snowball 1.
Version 1.02.122
================
(Made by Graham, 23rd January 1998)
1) Jonathan
1) Snowball 1. Don't reset the ASIC on startup.
2) Dennis
1) New serial comms LDD and modified PDDs for all variants.
2) WINS comms LDD is now separate from the real comms LDDs. WINS LDD lives in
DPWINS directory with the WINS PDD, and is currently the same as the old comms LDD.
3) Added hooks to KEARM\KE_INT.CPP to allow another operating system to be bolted on to EPOC32.
4) Added test program T_PTNOS.CPP with LDD D_PTNOS.CPP to test the partner OS hooks.
5) Added a check to KPEPOC\KP_PROC.CPP to prevent two copies of a fixed-address
process from being created. DPlatProcess::DoCreate will leave with
KErrAlreadyExists if it finds a matching EXE code chunk belonging to a fixed
address process.
6) Added some more facilities to T_TERM.CPP, including file upload and download
and loopback.
7) Fixed typo in ARM boot code which caused problems by failing to map in the
CS1 ROM if ROM address 0x10000ec6 (physical) contained zero.
8) Fixed bug which could cause processes to be run with incorrect domain access
if an interrupt occurs during a reschedule. This caused machine to reset
during heavy keyboard use.
9) Added missing __NAKED__ declaration to ARM assembler versions of
TDes8::AppendNumUC() and TDes8::AppendNumFixedWidthUC().
10) Fixed problem in DThread::Write() (all 3 variants) - it was returning an error
code if the source descriptor had zero length and a null pointer.
3) Graham
1) Created a new public header file - E32PANIC.H - which
contains the base panic numbers.
2) Split the test programs off into a new E32TEST
project.
3) Removed full exception handling from WINS and WINC if running under Windows '95.
E32's exception handling system relies on being able to asynchronously
meddle with another threads context and stack in order to inject a call
to an exception handler into that thread's normal train of execution. This
technique works with NT but Windows 95 is not up to it. It is clear that
not every operating system would be able to handle this. Consider, for example,
the possibility that the thread is inside an OS call when the call is injected.
4) Alastair
1) Moved build system over to MAKMAKE. The batch files for building E32 are
created by e32tools's BLDMAKE. From the GROUP directory, type BLD or CLEAN
or PREPARE without any arguments for help on how to use the new batch
commands. MAKMAKE has not yet been applied to the build system for MISA,
MX86. CLEAN.BAT uses NMAKE to do its cleaning, so a PREPARE.BAT
needs to have been done first. PREPARE.BAT will make the makefiles and
build the working directories.
2) Renamed freeze files from .FRZ to .DEF, including CONSMARM.FRZ, CONSMISA.FRZ
and CONSWINS.FRZ.
3) Removed WINS_UID statements from all source files.
4) Changed EDLL.O, EXDLL.O, EEXE.O so they are built by separate makefiles
rather than that of EUSER for MARM.
5) Changed KE_EXE.O so that it is built by a separate makefile rather than
that of EKERN for MARM.
6) Added SARMBE platform to the build process so big-endian single-process ARM
platform can be built.
Version 1.02.121
================
(Made by Graham, 10th Dec 1997)
1) Dennis
1) Fixed bug whereby CObjectIx::~CObjectIx could crash if Close()ing an object
in the index caused other objects to be removed from the index and thereby
caused the array to be ReAlloc()ed.
2) Speeded up TInt64 multiply a bit more on the ARM.
3) Added a mechanism whereby every DFC knows whether or not it is pending. Kern::Add
will now only queue the DFC if it is not already queued. DFCs are flagged unqueued
just before being run. A Queued() function is provided to discover whether a DFC
is currently queued or not, and a Cancel() function is provided to cancel a DFC
which is currently pending.
4) Added missing break statements to case EConsoleSetTitle and case EConsoleSetSize
in ws_main.cpp
5) Fixed bug in KBARM\BOOTROM1.S and KBSARM\BOOTROM1.S where a register was being
corrupted (subroutine WordMove corrupts r3) leading to the kernel BSS section not
being correctly zeroed on reset.
6) Fixed bug in TInt64::GetTReal() ARM machine code version - wrong shift count in one
instruction.
7) Added new function KFormat() to KS_UTL.CPP to do limited printf-style formatting
without using any EXEC calls. Modified Kern::Printf to use this function instead
of TDes::AppendFormatList(). This enables Kern::Printf to be used in fast exec
calls, interrupts etc. Use a static buffer to receive the formatted string instead
of an automatic one to avoid gobbling a large amount of stack.
8) Added a new flag ExecMutateFlag which is set by the IRQ and FIQ dispatchers if
an interrupt occurs in SVC mode. The fast executive dispatcher tests this flag on
return from the exec function and if it is set, DFCs and/or a reschedule will be
executed in the same way as for a slow exec call. This fills a hole in the interrupt
scheme whereby if an FIQ occurred during a fast executive call and queued a DFC,
the DFC would not be run before user code was resumed. This flag can also be set
by a fast executive call in order to allow rescheduling to occur.
9) Changed some executive calls from slow to fast to reduce overhead in the case where
a reschedule is not needed. These are ChunkBase, ChunkSize, ChunkBottom, ChunkTop,
ChunkMaxSize, MutexCount, MutexWait, MutexSignal, ProcessId, ProcessExitReason,
ProcessExitType, ProcessExitCategory, ProcessPriority, ProcessFlags, SemaphoreCount,
SemaphoreWait, SemaphoreSignal1, ServerReceive, SessionSend, ThreadId,
ThreadPriority, ThreadProcessPriority, ThreadFlags, ThreadExitType, ThreadExitReason,
ThreadExitCategory, ThreadRequestCount, ThreadRequestComplete, WaitForAnyRequest
and SvSendReceive.
10) Use a different stack for IRQs (IrqStack) rather than the reentrant stack. This
allows IRQs to be enabled during a fast executive call. ThreadRequestComplete,
SessionSend, SvSendReceive, ServerReceive enable IRQs during their execution.
11) Modified the exception handling mechanism. All exceptions are now placed into
one of three categories:
Fatal (exceptions in IRQ, FIQ or ABT mode) - these always cause a kernel fault
Critical (SVC mode or UND mode with the kernel locked) - these cause a kernel
fault unless exception trapping is enabled (DThread::iExceptionErrorCode)
Noncritical (user mode or UND mode with the kernel unlocked) - these are handled by
exception trapping, thread exception handler, global exception handler
in that order. If none of these is active, the current thread is paniced,
and if that thread has the system flag set a kernel fault results.
12) If an exception occurs while the kernel is locked, DFCs will not be run at the end
of the exception handler.
13) PD Variant::Init3() now sets CS1 ROM size to 4Mb and total ROM size to 8Mb.
2) Morgan
1) Renamed Dll::Data to Dll::InitialiseData()
2) Fixed zeroing bss for Dll data in ROM
Version 1.02.120
================
(Made by Jonathan, 24th Nov 1997)
1) Pete
A) Various changes to PC Card Controller to fully support I/O cards as well as memory cards:-
1) Added a new (exported) PC card controller function -
TInt DPcCardCntrl::RestoreCardPower(TSocket aSocket, TInt aResetProfile).
This re-applies power to a PC Card which has previously been successfully powered by the system.
If a media change has occurred on the socket since it was last powered then function will
immediately return KErrGeneral. The power up process is the same as carried out by the controller
function PowerUpCard() - wait up to 2.5Secs for card to become ready using specified reset
profile. However, this function doesn't implement a TRequestStatus mechanism when complete.
It is left to the caller to poll the card status. If the card had previously been configured when
powered and the configuration options allow the configuration to be restored (see 3) then the
card will be reconfigured automatically when it is re-powered.
2) Modified the PC card controller function DPcCardCntrl::PowerUpCard() so that, like RestoreCardPower()
it re-configures PC cards which were previously configured when the card was powered down if a media
change hasn't happened since. Also, the optional last parameter (was TInt aResetLen, now TInt
aResetProfile) now specifies both the reset length and a pause after the card becomes ready. The upper
16bit word specifies a pause period (in 20mS units) after the card signals it is ready before the
controller updates the socket status (and TRequestStatus is signalled). The lower 16bit word specified
the length of the reset pulse (also in 20mS units) applied to the card.
3) Added a new version of the PC card controller function DPcCardCntrl::RequestConfig(). The new
version has an additional parameter 'TUint aFlag' (the old version is now obsolete). The only
flag currently defined is 'KPccdConfigRestorable' which is set if the config may be restored
automatically by the controller if the card is re-powered (see 1 and 2).
4) Added new values to TPccdSocketStatus (to support 1,2 and 14). This can now have the following
values:-
- ESocketFullyOff: Card not present or present but not yet powered.
- ESocketPoweredDown: Card present, not currently powered but has been powered
and could be restored to previous configuration (ie no media change
since it was last powered).
- ESocketBatTooLow: Card present, but not currently powered. A previous attempt to
power the card failed because the main battery voltage was too low.
- ESocketNotReset: Card present and powered, waiting for it to become ready.
- ESocketReady: Card present, powered and ready.
- ESocketCorruptCard: Card present but not powered since it cannot be recognised by
controller (not used yet).
5) Changed the PC card controller event type that causes the mount status of TLocalDrive objects
(associated with PC card media) to be updated. Before, the status was updated on a power-up
event (EPccdEvPwrUp) meaning that any subsequent access to the TLocalDrive object would
be preceded by a remount. Having it on power-up rather than power-down meant the media drive
system only had to bind to one event rather than EPccdEvPwrDown and EPccdEvEmergencyPwrDown.
This however meant it was not possible to power-down cards during periods of inactivity. The
media drive system now binds to power-down events.
6) Change to ATA media driver (MEDATA) on ARM architectures brought about by the emergency power
down changes in E32-V115. The driver was bound to the PC card controller emergency power down
event. Since the driver's event callback is now called on a DFC, changes have been necessary
to handle card writes aborted by emergency power down.
7) Added a new (exported) PC card controller function -
TInt DPcCardCntrl::SetEvent(TSocket aSocket, TPccdEvent anEvent, TInt anInfo);
This allows drivers etc to generate PC card events. It also allows extra info to be passed to
callback functions via 'anInfo' (see 8 below).
8) TPccdCallBack has an extra member 'TInt iCallBackInfo' which can be used to provide extra info.
on a PC card controller event. Extra info on the reason for card power down is now provided in
iCallBackInfo for EPccdEvPwrDown events.
9) The following functions have been added to the custom DLL:-
TPtrC PcCardMediaChangeIntSource(TInt aMediaChange)
void ClearPcCardMediaChangeInt(TInt aMediaChange)
TMediaState PcCardMediaState(TInt aMediaChange);
Prior to these changes the PC card controller media change implementation was completely
implemented in the architecture level and above, meaning that variations to the media change
system couldn't be handled without a new architecture.
Also added an additional member 'TInt iMediaDoorCloseDelay' to 'TPccdCntrlMachineInfo' (returned by the
custom function PcCardMachineInfo()) which allows the media door switch de-bounce parameter to be specified
in the custom.
10) Support for dual voltage PC Card sockets added. These are sockets where the VCC voltage can be
altered depending on the type of card detected (typically 3.3V or 5V). The system implemented,
initially sets the socket VCC depending on the voltage setting indicated by the cards VS (voltage sense)
signals. Dynamically changing the socket VCC once the card is powered (in response to information in
a card's CIS etc) is not supported.
11) Added a new (exported) PC card controller function -
TPccdSocketVcc DPcCardCntrl::SocketVcc(TSocket aSocket);
This returns the current VCC setting for the specified socket. Note that this function
returns info on its current VCC setting even when the supply is turned off.
12) Generally tidy up of the ARM PC card controller VCC implementation. Additions of the following
function to custom DLL:-
PcCardVccInfo(TInt aPsu,TPccdCntrlVccInfo &aninfo).
TPccdCntrlVccInfo is defined:-
class TPccdCntrlVccInfo
{
public:
TUint iVoltageSupported;
TInt iMaxCurrentInMicroAmps;
TUint iVoltCheckInterval;
TPccdPsuVoltChkMthd iVoltCheckMethod;
};
This specifies the voltage(s) that the supply supports (5V,3.3V etc), the maximum current
it can supply, when the o/p of the supply should be checked (once when first turned on,
or continuously while on) and how the voltage should be check (via the ADC channel reserved
for the PC card controller or via a variant layer function).
13) TPcCardPsu renamed to TPcCardVcc since it now has functionality which could
only be attributed to a VCC supply (eg 10&12 above) rather than a generic PC Card supply.
14) Added an additional member 'TInt iDisableOnLowBattery' to 'TPccdCntrlMachineInfo' (returned by the
custom function PcCardMachineInfo()). This can be used to set a battery level (see TSupplyStatus) such that
if the main battery level is below this level, the PC card controller will no longer power up
any PC cards. Set to EZero to disable this feature.
15) Fixed problem clearing PC Card IREQ interrupts on ARM. On ARM platforms the PC card controller
IREQ interrupt service routine was clearing the interrupt in the controller hardware (ETNA)
before calling any ISRs bound by drivers. Since it is generally the driver ISR which clears
the source of the interrupt on the card you end up with a second bogus IREQ interrupt. This
only occurs when 'level mode' interrupts are enabled, not 'pulse mode'. Pulse mode interrupts
are selected if supported which is why the problem was only discovered so late in the day.
16) Changed the reset timing when powering up a PC card. Now:- Apply reset for 100mS, wait up to 2.5Seconds
for card to become ready, delay any access to the card for a further 100mS after ready. (Was:- apply reset
for 60mS, wait 2.5Seconds for ready and no delay on subsequent access).
17) Fixed problem in PC card serial port PDD where the destructor could be called before the member
'iSocket' was initiated. The destructor calls PcCardCntrl::PowerDownCard(iSocket). This was
a particular problem on rack D where the PC card socket is socket 1 (CF card socket is socket 0)
and the rack hw doesn't fully isolate the two sockets. Certain comms programs attempt to open a channel
on the PC card serial port while a channel is already open on this device. These subsequent attempts fail
calling the PDD destructor which then was incorrectly powering off the wrong socket. Due to the h/w
implementation, this was actually resulting in the serial PC card being reset.
18) Fixed a problem affecting EXTFIQ. Once you bound a TInterrupt to EXTFIQ it was not possible to unbind
again.
19) Added the following test programs to TPCCD:-
i)T_MEDCH (and associated LDD MEDCH.LDD): Soak test of Compact Flash (ATA) - h/w media changes.
ii)T_EXTFIQ (and associated LDD EXTFIQ.LDD): Continuously generates EXTFIQ on rack D using EXTFIQ.LDD.
iii)T_BEXFIQ (and associated LDD BEXFIQ.LDD): Generates EXTFIQ on rack D, associated LDD binds and clears
FIQ.
Also modified DRVSOAK to better support emergency power down testing.
B) Modification to serial comms in order to support PC card serial devices:-
20) Added mechanism for opening a channel on a PC Card I/O device. These devices requires an asynchronous
power-up of the card before the standard channel open mechanism can take place. In the case of some PC
Cards (e.g. Serial port cards) there needs to be a further asynchronous phase after creating the PDD
before the channel is fully open.
Added a kernel slow exec function:-
TInt RLogicalChannel::CheckOpenMode(const TDesC &aLogicalDevice,const TVersion &aVer,TInt aUnit);
This is called once each time a channel is opened. If the return value is <0 then the open proceeds as
normal. Otherwise, it indicates that a 1 or 2 phase asynchronous open is required. (This function would
normally ripple down to the custom DLL).
Added a kernel supervisor function:-
TInt RLogicalChannel::DoSlowOpen(TInt aMode,TInt anInfo,TRequestStatus &aStatus);
This initiates the asynchronous parts of the operation. 'aMode' is either KChanSlowOpenPhase1 or
KChanSlowOpenPhase1 to indicate whether its the aynchronous phase before or after the normal open. 'anInfo'
is derived from the value returned from CheckOpenMode() and normally indicates the PC Card socket in
question. TInt RLogicalChannel::DoCreate() has been modified to include these extra operations.
An extra pure virtual function:-
TInt DComm::CompleteSlowOpen(DThread *aThread,TRequestStatus *aReqStat);
had to be added to DComm in order to implement the 2nd asynchronous open phase.
21) Modified PC card serial port PDD to take advantage of the above PDD open scheme (20) so that the PDD now
fully controls the PC card. (Before it relied on the media system having already powered up the PC Card and
didn't properly perform the 2nd part of the initialisation). Also modified the PDD so that it re-applies
power and re-configures the Serial PC Card each time the system comes out of standby (eg machine switched
off, emergency power down etc).
22) Changes to LDD to handle PC Card media change events (ie media door open or card removal - dependant on
platform).
As far as I can gather, in the serial LDD, iStatus==EClosed never occurs. I now force the LDD into
this state from a PC Card PDD when a media change is detected. The serial port now needs to be disabled
(for good) because it has been powered down (and in all likelyhood removed). Once in this state
you never should to change to any other state. Any write requests return with KErrNotReady which hopefully
will give any client a clue that they shouldn't have removed the PC card serial port while using it. This
is an intermediate solution. The eventual plan (involving a the invention of a new RDevCom type class) will
handle the media change and re-power the serial PC card (if still there) before any requests get down to
the LDD. However, you need an asychronous supervisor kernel call to restore a PC card after media change
which can't be acheived with the present scheme. It is possible to re-power the PC card when coming out of
standby (machine turned off etc) because you know the same PC card is still present and hence you don't
need to alter any memory allocation associated with the card.
23) Modified PC card serial port PDD to enable serial interrupts for modem signal status changes (CTS,DCD,DSR,
RI). Prior to this, h/w flow control wasn't supported on this serial device.
24) Modified PC card serial port PDD to update system current consumption info. This info is derived from the
PC card CIS where possible.
25) Modified PC card serial port PDD to determine its baudrate capabilities from 'max baudrate supported' field
(if present) in the CIS. Also, limit baudrate (capabilities) to 19200 if serial card doesn't contain a FIFO.
26) Added the following test programs to TCOMM:-
i)T_MODEM1: Test code for PC Card Modem Serial Ports (analogue loopback).
ii)T_COMSOAK1: Serial port soak test program (requires loopback connector).
iii)T_AMPV: Approval test code for PC Card Adapter.
iv) T_MODEM2: T_SERIAL for PC card serial port. Instead of looping COM1 to COM2(Etna) it loops
COM1 to COM3 expecting a PC Card Socket I/O Serial card.
Also modified T_TERM so it can be used to open a channel on COM3. (Also added extra error reporting).
2) Jonathan
1) Old Snowball variant SA retired.
2) New Snowball variant S1 for Prototype 3 units. Major changes from SB:
- Combined PDD for Eiger and ASIC serial ports using shared modem
status interrupt.
- Variant-specific LDD for use on ASIC serial port only - implements
Spark phone's weird CTS handshaking.
- QuickEmergencyStandby handler.
3) New PhysicalScreenWidth and PhysicalScreenHeight values for
\epoc32\data\system.ini, see kpwins\kp_gui.cpp .
4) Prevented *\va_sdrv.cpp from trying to Disable or UnBind when unbound
from its interrupt.
Version 1.02.119
================
(Made by Morgan, 7th Nov 1997)
1) Alastair
1) SARM
Integrated Single-process code into e32 source allowing SARM roms to be
created. Build commands are mnt sarm, sarmall, sarmrel etc. There are no
releaseables and no facilities for building test programs. SARM builds
use the "__SINGLE__" macro for distinguishing Single-process-specific
code. Work directories are \epoc32\build\e32\sarm\[build] and
\epoc32\release\sarm\[build]. SARM makefiles are generated into
\e32\bsarm using perl to process makefiles from \e32\bmarm as a
temporary measure prior to the use of makmake for creating e32
makefiles. SARM roms are built from directory \e32\kbsarm, and require
a special version of rombuild - the makefile for this special version
will be released with e32tools version 082.
Major changes
a) \e32\kbsarm - contains special versions of bootrom1.s and rom.oby.
b) \e32\inc - changes to e32rom.h, k32std.h, m32mmu.h, m32std.h and
v32eiger.h so that different linear address constants are defined
for __SINGLE__ builds.
__SINGLE__ (MULTI)
KRomHeaderLinAddr 0x00000000 0x50000000
KSuperPageLinAddr 0xC0000000 0x40000000
KHomeBase 0xC0000000 0x80000000
KHomeEnd KHomebase+0x3fffff 0xffffffff
KHwLinBase 0xa0000000 0x60000000
KHwLinEnd 0xbfffffff 0x7fffffff
KEigerBaseAddress 0x80000000 0x58000000
c) \e32\kpepoc\kp_chk.cpp - __SINGLE__ chunks are allocated in the kernel's
heap - they cannot change in size and don't move. Since SARM roms do not
utilise the MMU. The actual size of a chunk is a compromise between the
initial and maximum sizes requested when a chunk is created.
File changes
d) bsarm\*
dpepoc\d_medint
group\mnt.cmd
inc\ - e32rom.h, k32std.h, m32mmu.h, m32std.h, v32eiger.h
kbsarm\*
kearm\ - ke_ini, ke_int, ke_mmu, ke_utl
kpehal\ - kph_inf, kph_pic
kpemmu\ - kpm_mmu.cpp
kpepoc\ - kp_chk, kp_ini, kp_proc, kp_reg, kp_std.h, kp_thrd, kp_utl
ksrc\ - ks_svr, ks_utl
varmpd\va_hw
wsrc\wd_eiger
2) Added UNICODE.H to e32\inc\incc.prj so that the file is released.
3) Changed WINS command line processing such that only switches specified
before "--" is encountered are processed. Switches after the "--" switch,
or all switches if the "--" switch is not specified, are ignored.
4) Added -L<language Index> switch to WINS command line so that
different Epoc locales can be specified. Eg "WSEXE -L5 --" will
mean that elocl5.dll rather than elocl.dll is loaded.
2) Dennis
1) Rewrote MMU code. Major changes are:
i) Linear address map has changed - see file KEARM\KE_MMU.CPP
ii) RAM drive is at fixed linear address but no longer composed of consecutive
physical RAM pages.
iii) The free page pool has been removed.
iv) The ROM is mapped with section descriptors on the ARM instead of 4K pages.
v) Chunks can be adjusted in place rather than only in the home section.
vi) On the ARM extra protection has been added for page tables, registry
and RAM drive.
vii) ROM layout is different - the kernel data is at 80000000, followed by
static data for fixed-address ROM processes (see below). The kernel
stack follows the last fixed-address data chunk, and the home section
starts with the kernel stack chunk.
2) Modified process handling and scheduling:
i) Now have two classes of process. One class has its chunks mapped down
into the data section while running, the other class has its chunks
at the same linear address all the time. The latter class is used for
system servers. It reduces the need for cache flushing - this is only
required if any chunks have moved - and thus gives a considerable speed
increase.
ii) ROM fixed address processes specified in .OBY file
RAM fixed address processes specified by setting KImageFixedAddressExe flag
iii) On the ARM, a domain will be allocated to every fixed-address process.
All the process' local chunks will be located in this domain. In addition,
every global chunk created by a fixed-address process will be allocated
a domain. The use of domains removes the need for page directory
manipulation when switching between these processes.
iv) The scheduler has been machine coded for ARM and ISA. Actions performed
on switching between processes now depend on the attributes of these
processes.
3) Added ARM machine coded message passing and semaphore code.
4) Modified inter-process reading and writing code. Two functions have been added:
i) TAny* DPlatThread::CurrentAddress(TAny *anAddress);
This function returns the current linear address corresponding to an
address in the thread's address space. No translation is done for addresses
above 0x40000000 or if the thread's process is currently running.
This function is used to convert addresses for reading.
ii) TAny* DPlatThread::CurrentAddress(TAny *anAddress, TInt& aMaxSize);
This function returns the current linear address corresponding to an
address in the thread's address space and also the maximum size of a write
to the thread's address space (end of chunk - specified address).
Chunk lookup is always performed.
This function is used to convert addresses for writing.
5) Kernel faults now restart the system from the reset vector. The MMU backup
page has been removed.
6) Added double-ended chunks. These are regions of memory where the committed
region can start at any address in the reserved range, rather than always starting
at the base of the reserved range. Added functions
i) RChunk::CreateDoubleEndedLocal()
Create a local double-ended chunk with a specified maximum size and
a specified initial committed region.
ii) RChunk::CreateDoubleEndedGlobal()
Create a global named double-ended chunk with a specified maximum size and
a specified initial committed region.
iii) RChunk::AdjustDoubleEnded()
Adjust the position and/or size of the committed region. If the initial
and final regions intersect, the contents of the intersection are
unchanged. Other parts of the committed region have undefined contents.
iv) RChunk::Bottom()
Returns the offset of the base of the committed region from the base of
the reserved region (RChunk::Base()).
v) RChunk::Top()
Returns the offset of the top of the committed region from the base of
the reserved region. ( Top() = Bottom()+Size() )
RChunk::Size() always returns the size of the committed region.
7) Extended the CBitMapAllocator class. Functions added are:
i) TInt Alloc(TInt aCount, TInt& aConsecutive)
Allocates from the first free position as many consecutive positions as
possible, up to aCount. Returns the first free position, and aConsecutive
equal to the number of positions allocated.
ii) TInt AllocAligned(TInt anAlignment)
Allocates a position whose number is an exact multiple of 2^anAlignment.
iii) TInt AllocAlignedBlock(TInt anAlignment)
Allocates a block of 2^anAlignment consecutive positions such that the
first position is an exact multiple of 2^anAlignment. Returns the
first position.
iv) AllocAt(TInt aPos, TInt aCount)
Allocates aCount positions starting at aPos.
v) Free(TInt aPos, TInt aCount)
Frees aCount positions starting at aPos.
iv) TBool IsFree(TInt aPos, TInt aCount)
Returns TRUE if and only if positions [aPos,aPos+aCount) are all free.
8) Modified Math::Sin, Math::Cos and Math::Tan functions to return exact answers
when input values are exact multiples of pi/2. This is done by adding tests of
the form
IF ( ABS(x MOD pi) < 2^-52 * ABS(x) )
return exact answer
ELSE
do calculation as before
ENDIF
9) Modified TTime::Convert(const TDateTime&) and TTime::DateTime() in order
to minimise the number of divisions involved and to use 32 bit arithmetic
rather than 64 bit wherever possible. The latter of these functions gets
called frequently by the window server on a periodic timer.
10) Added functions TDes8/TDes16 :: (Append)NumFixedWidth(UC)
These convert 32-bit integers to descriptors in a specified radix, adding leading
zeros up to the specified field width. These are intended to replace calls of
the form
des.Format(_L("%08x"),value)
which are very inefficient. All Format() calls in E32 have been replaced, apart
from the ones which use an overflow handler.
11) Fixed problem with comms driver causing reset if an interrupt occurs while the
kernel server is closing a comms channel. This was caused by the interrupt queuing
a DFC which refers to the comms channel being closed. The DFC runs after the
kernel server has deleted the channel, and resets the machine when it tries to
access the nonexistent channel.
12) Files changed:
dcomm\ d_comm.cpp
dpepoc\ d_medint.cpp
dvideo\ ws_disp.cpp
inc\ e32base.h, e32des8.h, e32des16.h, e32rom.h, e32std.h, e32svr.h,
k32std.h, k32std.inl, m32std.h, m32std.inl, m32hal.h, u32std.h, v32eiger.h
m32mmu.h and m32mmu.inl have been removed
kbarm\ bootrom1.s, rom.oby
kbx86\ boot486.asm, bootrom.asm, build.cmd, e32d.oby, e32r.oby, m486.bat,
romdefs.inc, romhead.inc
kbsarm\ bootrom1.s
kearm\ ke_dat.cpp, ke_dbg.cpp, ke_ini.cpp, ke_int.cpp, ke_mmu.cpp, ke_pccd.cpp,
ke_pic.cpp, ke_psu.cpp, ke_std.h, ke_thrd.cpp, ke_utl.cpp
ke_all.cpp deleted, ke_sched.cpp added
keisa\ ke_dat.cpp, ke_dbg.cpp, ke_ini.cpp, ke_int.cpp, ke_mmu.cpp, ke_pccd.cpp,
ke_std.h, ke_thrd.cpp, ke_utl.cpp
ke_all.cpp deleted, ke_sched.cpp added
kex86\ ke_exc.cpp, ke_ini.cpp, ke_int.cpp, ke_mmu.cpp, ke_std.h, ke_thrd.cpp,
ke_utl.cpp
ke_all.cpp deleted
kpehal\ kph_dbg.cpp, kph_inf.cpp, kph_pic.cpp
kpemmu\ kpm_mmu.cpp
kpm_all.cpp, kpm_regn.cpp, kpm_sect.cpp deleted
kpepoc\ kp_chk.cpp, kp_dat.cpp, kp_dev.cpp, kp_ini.cpp, kp_proc.cpp, kp_reg.cpp,
kp_sched.cpp, kp_sem.cpp, kp_thrd.cpp, kp_utl.cpp
kpwins\ kp_chk.cpp, kp_ini.cpp, kp_proc.cpp, kp_std.h, kp_thrd.cpp, kp_utl.cpp
ksrc\ ks_chk.cpp, ks_exec.cpp, ks_ldd.cpp, ks_lib.cpp, ks_mes.cpp, ks_pdd.cpp,
ks_proc.cpp, ks_svr.cpp, ks_thrd.cpp, ks_utl.cpp
ubas\ ub_bma.cpp, ub_obj.cpp, ub_std.h
ucdt\ uc_des8.cpp, uc_des16.cpp, uc_exec.cpp, uc_func.cpp, uc_ksvr.cpp,
uc_reg.cpp, uc_std.h, uc_time.cpp
umath\ um_rtod.cpp, um_sin.cpp, um_tan.cpp
upmarm\ up_des8.cpp, up_exec.cpp, up_utl.cpp
upmx86\ up_exec.cpp
upwins\ up_exec.cpp
vx86pc\ vx_vga.cpp
3) Morgan
1) Added dll process attach and detach for ARM and X86 builds
2) Added RThread::Context(TDes8 &aDes) to retrieve the register contents of
a sleeping thread.
3) Added RChunk::ReserveAt(TUint8 *) to force allocation of a chunk at the
specified linear address.
4) Ldd/Pdds with static data was broken. Now fixed.
5) Loading Dlls with writable static data now allocates a Data/Bss chunk
and offers it to F32 to be fixed up.
6) Added TInt Dll::Data() to initialise Dll writable static data
Version 1.02.118
================
(Made by Jonathan, 15th October 1997)
1) Dennis
1) Rewrote CObjectIx, CObjectCon and CObjectConIx classes to do their own
array handling instead of using CArrayFixFlat.
2) Added ARM machine-coded versions of CObjectIx::At, CObjectIx::operator[],
CObjectCon::At and CObjectCon::operator[].
3) Added ARM machine-coded versions of CActiveScheduler::Start() and
CServer::RunL().
4) Removed CArrayFixFlat from DPlatProcess. Custom array handling code is now
used to store the chunks being used by a process.
5) Added ARM machine-coded versions of some commonly used fast Exec:: calls and
of DPlatProcess::LookupChunk().
2) Morgan
1) Added -M<machineName> switch to WINS command line to pick up
alternate System ini files from \epoc32\Data. eg WSEXE -Mfungus
will use \epoc32\data\fungus.ini
2) Froze the Custom Dll against V1.01 E32(114)
3) Froze the Variant Dlls (P1,P2,PB,PC,PD,PG,SA,SB,CL) against V1.01 E32(114)
3) Jonathan
1) Changed Snowball A & B physical screen size to 4.4"x1.375".
2) New TSAsic::SetCrystalSpeed function in varmsb\va_sasic.cpp.
3) Added cakysbd keyboard driver for Snowball B which has a, b, z and :
instead of arrow keys.
4) Snowball B variant autodetects 4MB or 8MB ROM, 1MB or 4MB RAM
5) New Hal::StartupReason() type EStartupSafeReset. Currently this is only
returned by Snowballs when "Home" and "Back" are pressed at boot.
6) Replaced Variant::ColdReset with more general Variant::StartupReason.
This breaks Morgan's variant & custom freezes against 114 for this one
function, but that's OK because the kernel really is the only component
that should be calling this.
7) New UserSvr::ResetMachine(TMachineStartupType) function. Currently only
allows a reset type of EStartupWarmReset. Implemented by generating a
TPlatFault::ESoftwareWarmReset. After the reset the kernel may
actually report a reason other than EStartupWarmReset if either:
- EStartupWarmReset isn't supported (mx86/misa/wins)
- The variant supports munging of reset types, ie by holding down
keys at boot, and those keys are held down (various marm variants).
8) New custom and parent functions AutoSwitchOffType, which returns
ESwitchOffEvent on Snowballs A & B, ESwitchOffHard on other variants.
9) New TRawEvent::ESwitchOff. The kernel generates this at auto-switchoff
time instead of just switching off if the above function returns
ESwitchOffEvent. The window server (or one of its clients) must call
UserHal::SwitchOff fairly soon after receiving this event. Made the
text window server do this. Auto-switchoff is still disabled by default
on Snowballs A & B becuase wakeup is still broken.
4) Matthew
1) Enabled hardware filtering on SA and SB digitisers. Also boosted
sampling rate to 112 pps.
2) Changed SB variant so that the san-disk is mapped to InternalMedia0
(ie C:). Make sure you get rid of MEDINT.PDD from your .oby file when
building roms, or F32 will pick this up and you will still have the
ram disk as C:.
Version 1.02.117
================
(Made by Jonathan, 5th September 1997)
1) Dennis
1) Rewrote Math:: transcendental functions to use simpler algorithms
and to run faster. All functions now use polynomial approximations
instead of rational functions.
2) Added Math::PolyX function to do fast polynomial evaluation using
TRealX for argument, coefficients and result.
3) Updated T_R64BM to benchmark more functions and to use a range of
different argument values.
4) Added new test program T_MATH2.EXE to test the accuracy of the
transcendental functions.
5) Fixed SW-21.
Changed way in which DLLs statically linked to an EXE are handled.
Instead of opening a process-relative handle on the DLL, the process'
code chunk now holds a list of DLLs on which it depends. This list
is only deleted when the chunk itself is deleted, thus solving the
problem of two instances of the same EXE running concurrently.
Added function UserSvr::ExeAddDependency to add a DLL to the process
code chunk's dependency list.
2) Matthew
1) Added software filtering to Snowball digitiser drivers.
2) Moved initial calibration of digitiser into the TDigitiserXxx::Init3().
This has also meant that some of the E2Prom functions needed to be
exported - I exported all the public functions.
This change has allowed Hal::Init3 to be rearranged to how it was in 114.
3) Fixed small bug in Snowball B Comm2 driver, which was acting as though
it supported 57600bps.
3) Rob Pym
1) Added support for ARM 7115 - this chip has a few more peripherals
than the ARM 7110. New functions in ke_eiger.cpp and ke_pic.cpp.
2) Added CL variant for the Cirrus Logic ARM 7115 evaluation board.
[Jonathan:] Releasables not released because it doesn't build.
Version 1.02.116
================
(Made by Jonathan, 26th August 1997)
1) Dennis
1) Added new extended-precision real class TRealX, defined in
e32math.h. This class provides 64 bit precision and a dynamic
range of approx. 1E-9863 to 1E+9863. All member functions are
assembler coded for speed.
2) Changed GCC compiler helper functions to use TRealX instead
of TReal96 to speed things up. Also modified all UM_xxx files
to use TRealX instead of TReal96, apart from UM_DTOR and
UM_RTOD.
3) Added new test programs T_TREALX, T_R64BM, T_RXBM. T_TREALX
tests the TRealX member functions. T_R64BM does a benchmark
test for TReal64 field operations and transcendental functions.
T_RXBM does a benchmark test for TRealX field operations.
4) Added machine coded versions of Math::Sqrt() and some other
Math:: functions for ARM.
2) Jonathan
1) Fixed data TX on varmsa/va_com2.cpp and varmpd/va_com3.cpp when
Fifos are disabled; no longer trys to output >1 byte on TX interrupt.
2) Variant::Init3() on Snowball A & B sets AutoSwitchOffBehavior to
ESwitchOffDisabled because power management isn't yet implemented.
3) Changed table in Snowball B Variant::SetLcdContrast to correct for
strange hardware.
4) To reduce noise in the output logs, all .cmd files to build E32 now
invoke NMAKE with the -nologo flag.
3) Pete
1) Added Internal ATA media driver (MATISB.PDD) for Lavender prototype B
build.
2) Change to internal ram media driver on WINS/ARM so that it only
opens on media device type EFixedMedia0 rather than any fixed media
type.
4) Matthew
1) Fixed bug in Snowball digitiser drivers which caused execeptions when
the pen was down. Fixed by moving the queueing of the pen-up timer from
the interrupt service routine into the Dfc.
2) Added code to read the CTS signal in the Snowball prototype B com2 PDD.
3) Temporarilly made the Snowball prototype B com2 PDD ignore framing
errors at 38400 bps. This is to allow people downstream to use the port.
4) Further modifications to T_SERIAL for Snowball compatibility.
Version 1.02.115
================
(Made by Jonathan, 16th August 1997)
1) Graham
1) Changed in RAM standby code to have a delay loop
rather than the previous faulty inmplementation
which attempted to validate the ROM by
continually reading it until it returned a known
good value - this was erroneous because the ROM
reads were coming from the cache anyway.
Then I commented out this code and replaced it with
the traditional code that runs from ROM (this was
only introduced as a result of some hardware paranoia
when we were getting 'unable to switch on' bugs in
the run up to V1.00
2) Updated minor version number to 02.
2) Dennis
1) Modified emergency power-down FIQ handler so that it
only performs the bare minimum of tasks when the machine
is powered up again. Other more time-consuming tasks have
been moved into a DFC.
2) Added new machine code versions of TInt64 functions for MARM,
WINS and MX86 which don't use the TInt64A class.
3) Added machine coded versions of some 8-bit descriptor functions
for MARM in new file UPMARM\UP_DES8.CPP.
4) Added machine coded versions of RHeap::Alloc(), RHeap::Free()
for MARM REL.
5) Modified Mem::Copy() to run faster when source and destination
addresses are unaligned, or when a small copy is required.
3) Ann
1) Fixed rounding bug where the number of intervening zeros
after the decimal point in a descriptor was being ignored
when next non-zero digit is out of range of precision when
converting to real.
4) Matthew/Jonathan
1) Added Snowball B variant for use with the Snowball prototype.
2) With a TSAsic class to access the ASIC on the Snowball prototype.
5) Matthew
1) Added digitiser drivers for snowballs A and B.
2) Added a virtual SetCalibration() function to the TXYInput
class, so that future digitiser drivers can use hardware
calibration, if this is available.
Currently none of the drivers use this (including the Snowball
ones) and they return KErrNotSupported.
3) Added a comm pdd for the Snowball prototype asic. There are
several known bugs in this driver.
Made some modifications to T_SERIAL so that it does not test
things beyond the capabilities of the comm port when running
on a Snowball.
6) Jonathan
1) Fixed problem caused by reading IID register too often in
Snowball A 2nd comm pdd.
2) Added IR support to Snowball B 1st comm pdd (untested).
Failing on Snowball B prototype:
- tests t_power, t_timer, t_chunk, t_serial, t_idrv, t_pccd1, t_pccd2
- Power up after switch-off
Version 1.01.114
================
(Made by Graham, 29th July 1997)
1) Matthew
1) SW1-244 Fixed sound driver so that it no longer returns
KErrAlreadyExists if a prepare function is called
twice. Changed test code accordingly.
2) Morgan
1) SW3-1556 Removed dependency in M32HAL.H on M32DBG.H and
re-inserted dependency on M32DBG.H in appropriate .CPP
files.
Version 1.01.113
================
(Made by Graham, 25th July 1997)
1) Dennis
1) Fixed CSW3-1559, CSW3-1560, CSW3-1530, SW1-91, SW1-155, SW1-158
Added doubly-linked tree structure to DLibrary objects to record which
DLLs depend on which. The access count of a DLibrary object is now equal to
the number of thread/process handles open on it, plus the number of other
DLibrary objects which have a dependency on it. Added code to DLibrary::Close()
to check that a DLL is really in use (directly or indirectly) by traversing
the tree structure and to delete it if it is not. Added a new supervisor function
UserSvr::DllAddDependency() used by the loader to record DLL dependencies.
2) Matthew
1) Fixed bug in sound ldd which caused buffers to be orphaned on the kernel heap if
a prepare function was called twice. This now returns KErrAlreadyExists.
Added test code to t_sound.
3) Graham
1) Made further changes to the backup battery levels:
Good -> Low 2850
Low -> Replace 2800
Replace -> Low 2850
Low -> Good 2900
Not present 2000
2) SW1-201. Reduced the maximum voltage of the main battery
from 3100mV to 3000mV.
3) SW1-179. Removed redundant IMPORT_C declarations from
E32BASE.H on:
CServer::NewSessionL
CSession::ServiceL
4) Added Charles Wier's ASSERT macro.
5) Changed the battery voltage reading algorithm. I used
to do one one dummy read on the adc channel then wait
10mS then take the real reading. I now do 10 dummy
reads at the rate of one every millisecond and then
take the real reading.
6) Fixed the .REL files to release Dutch and French
localisation dlls and a french keyboard table for MARM P2.
7) Added Scandinavian localisation dll in WINS and MARM
builds.
8) Added DANISH/NORWEGIAN keyboard table (CAKDP2.DN) and
SWEDISH/FINNISH keyboard table (CAKDP2.SF) for P2
MARM builds.
Version 1.01.112
================
(Made by Graham, 17th July 1997)
1) Dennis
1) Fixed CSW-2710, SW1-114
Changed four kernel faults to K::PanicCurrentThread with new KERN-EXEC
panic numbers; these are KK::EMesAlreadyPending, KK::EEvntRequestPending
and two instances of PP::EIllegalWsProcess.
2) Fixed CSW3-880
Corrected checking of filename length in RLoader::LoadProcess() and added
a check for the command line length.
3) Fixed CSW3-1340
Changed the code to allow both heap min size and heap max size to be zero.
However if heap max size < 256, then a value of 256 will actually be used.
4) Fixed CSW3-1601
Set up the value of K::TickCounter in the RTC tick ISR rather than in code
which runs asynchronously to the RTC tick. Reinitialise K::TickCounter when
the system time is changed.
5) Fixed CSW3-1670
Added function TBool TTickQ::CheckMidnightCrossover(TInt aSecs) to check if
a midnight crossover has occurred and set iTomorrowStarts accordingly. Added
overloaded function void TSecondQ::SystemTimeChanged(TUint& aChanges)
to abort all absolute and locked timers and set the EChangesMidnightCrossover
bit in aChanges if a system time change results in a midnight crossover.
TSecondQ::SystemTimeChanged() now calls this function, as does
ExecHandler::LocaleSet(). Updated T_CHNOT.CPP to test the new RChangeNotifier
behaviour.
6) Modified prefetch abort handler to set iDataAddress to the value of lr when
the exception occurred.
7) Corrected User::StartThread to call DLL entrypoints with EDllThreadDetach
rather than EDllThreadAttach when the thread exits.
8) Set the RTC correction to zero on a cold start. (Forgot this last time!)
2) Graham
1) Added code to fetch the language index and the keyboard
index from E2. Added these values to the machine info
structure (UserHal::MachineInfo()) by adding class
TMachineInfoV2 which derives from TMachineInfoV1.
2) Modified the text window server to load a different
localisation module and keyboard module according to
the language and keyboard indexes read from E2.
3) Increased the adjustment for current consumption
that is made prior to establishing whether the main
battery status should fall.
4) Reduced the voltage levels at which the main battery
status changes. Low is now at 2150mV, Replace is now
at 1900mV (P2 and PD variants only).
5) Reduced the max backup battery voltage to 3100mV in
line with the max main battery voltage (P2 and PD
variants only).
6) Reduced the voltage levels at which the backup up
battery status changes:
Old (mV) New (mV)
Good -> Low 2900 2800
Low -> Replace 2800 2750
Replace -> Low 2850 2780
Low -> Good 3000 3000
Not present 2000 2000
7) Added kernel side EXPORTS for:
S::ChunkCreate
S::LibraryLoadExact
S::MutexCreate
S::PhysicalDeviceLoad
S::PhysicalDeviceFree
S::SemaphoreCreate
3) Basher
1) Added new function in the keyboard translation dll
(ChangeKeyData) which loads a different keyboard data
module.
4) Pete
1) When interrogating the CIS of a PC Card to determine the cards type,
the PC Card controller verifies the integrity of the CIS by
attempting to follow each CIS chain to the end. While performing this
operation the controller is currently reading each tuple entirely
rather than just checking its type and link. This is un-necesary and
in fact not recomemded. Unknown tuples may contain active registers.
This change fixes the problem.
Version 1.01.111
================
(Made by Graham, 11th July 1997)
1) Jonathan
1) Small fix to DPccdCntrlInterface::DoNotifyChange and DoChangeFlag to return
KErrGeneral instead of panicing on being passed an invalid socket number.
2) Kernel now exports all of DPlatChunkHw so that device drivers can map
in their own memory-mapped registers etc.
3) Added 2nd serial port (16550-based) to Snowball MARM variant. Currently
just a dummy because of a suspected bug triggered by ~DPlatChunkHW().
4) Variant::TestBootSequence on Snowball is always True. This enables an
(alternative) etest.exe to be run on boot, which starts elink before booting
normally.
5) Added etestl.exe which does the above.
2) Pete
1) Fixed SW3-1226
Makes it possible to force accesses to as particular type of PC Card
memory (ie Common,Attribute,I/O) to be 8-bit accesses only (ie 32bit
word accesses disabled). This mode can be enabled in the function
Variant::PcCardCntrlMemConfig() by returning KMemConfigByteAccess.
This is to support h/w implementations which can't support 32-bit accesses
to PC Card memory.
3) Dennis
1) Fixed SW3-1321
Moved the RTC correction value and last set time into the super page so
that they will be preserved over warm resets. This stops strange offsets
from being added to the system time when the machine is switched off and on.
2) Moved the definition of the super page from M32STD.H to K32STD.H. Added a
super page to the WINS build. Moved the battery statistics (insertion time,
time on main battery, time on external power, battery power used) from K::
into the super page so that they will be preserved over warm resets.
3) Fixed SW3-1419
Removed all user access from user data chunks in the home section. Changed
the way the stack/heap chunk is created on thread creation - the pages are
now allocated using DPlatChunk::AdjustL() instead of AdjustUserL(). This means
that the pages are immediately mapped with the correct page permissions
rather than with full user access. Removed the line in DPlatProcess::Loaded()
which applies the final page permissions to the main thread's stack/heap chunk.
4) Fixed SW3-1317
Modified function RUserHeap::SvClose() so that if it finds the access count of
the heap negative, it panics the owning process rather than causing a kernel fault.
5) Fixed SW3-1311
Fixed operator precedence error in CObjectIx::Remove().
6) Fixed SW3-770, SW3-1539
Modified DPlatProcess::DoSetPriority() to recursively descend the tree of threads
owned by the process and adjust their priorities (previously, thread-relative threads
were not adjusted).
Introduced a new set of absolute thread priorities which enable the priority of a
thread to be made independent of the priority of its owning process.
Note that this upgrade requires a modification to the SHELL to set the priority of
the EIKON server thread to EPriorityAbsoluteForeground instead of EPriorityMore.
7) Fixed SW3-319
Added a new exported function Kern::PanicCurrentThread(const TDesC&, int) which panics
a thread by sending a message to the kernel server (like K::PanicCurrentThread).
Modified D_COMM.CPP to call this function instead of DPlatThread::Panic().
8) Fixed SW3-1604
Modified RThread::RaiseException() so that if the exception is unhandled, it panics
with ECausedException rather than calling User::Exit(KErrDied);
9) Fixed SW3-4688
Modified UPWINS\UP_TRP.CPP to do a ret 4 at the end of User::Leave() instead
of a compiler-generated ret 0. Applied the same modification to the X86 build.
10) Fixed SW3-1408, SW3-1671
Modified UCDT\UC_REGN.CPP TRegion::SubRect() to return without doing anything if
the rectangle to be subtracted is empty. Applied the same modification to the
ARM version in UPMARM\UP_UTL.CPP.
11) Fixed SW-4688
Modified UPWINS\UP_TRP.CPP User::Leave() to end with a ret 4 instead of a ret 0.
Applied the same modification to the MX86 version.
12) Fixed SW3-1149
Added an inline accessor function for the iThread member of CAsyncOneShot to
allow the handle to be changed.
13) Fixed SW3-1604
Modified RThread::RaiseException() so that if the exception is unhandled, it
panics with ECausedException rather than calling User::Exit(KErrDied);
14) Fixed SW-5529
Modified RLibrary::LoadRomLibrary in UPMARM\UP_LIB.CPP and UPMX86\UP_LIB.CPP
to close a handle in all possible cases.
15) Fixed SW-5530
Modified KS_SEM.CPP, KS_MUTX.CPP and KS_CHK.CPP so that if a global object is
created with a thread-relative handle, it has no owner.
16) Modified DPlatThread::Die() so that if a system thread panics, the machine resets.
17) Fixed SW1-22
Modified CObjectIx destructor to invalidate each array entry after closing it.
Modified CObjectIx::Remove() to panic if an attempt is made to remove an entry with
a null object pointer.
Modified S::Close() to check if the handle is valid before attempting to close it.
18) Fixed CSW3-1426
Made 0x10 (DLE, non-breaking space character in OPL) a whitespace character.
19) Fixed CSW-5500
Check for nDig<0 in doGeneral() function, return KErrGeneral in this case.
4) Matthew
1) Fixed SW3-883
Moved the undertaker notification call Kern::NotifyThreadDeath() from
DThread::Cleanup() to DThread::DoDie(), so it is called before any child threads
are killed.
Added test to T_THREAD.
2) Fixed SW3-1173
Made "%X" give upper-case, instead of lower-case hex.
Added test to T_BUF.
3) Changed T_SOUND test code so that it actually tests that keyclicks are disabled
during recording.
4) Renamed Variant::TVarmpdPanic to TVarmp2Panic in P2 variant.
5) Made varmp2\va_prom.cpp #include v32armp2.h instead of v32armpd.h.
5) Graham
1) Anns fix for incompatibility between random number
generation on WINS and MARM.
2) Martin Tasker's updated header files E32BASE.H and
E32DEF.H for MSVC 5.0 compliance.
3) Increased RAM refresh rate to the maximum in the
bootstrap. This can then be slowed down in the
variant layer if applicable.
4) Changed the reschedule code to run with interrupts on.
5) Added Charles Wier's __DECLARE_TEST_DEBUG that compiles
out in release mode.
6) Added Charles Wier's RTest::SetConsole(CConsoleBase*).
7) SW3-716 sanitise E32KEYS.H for the resource compiler.
8) SW3-1556 released M32MMU.H and .INL in INCK and removed
dependency in M32HAL.H on M32DBG.H.
9) SW3-1557. Fixed an ASSERT in Mmu::AllocShadowPage().
10) Added new Central European language enums to TLanguage.
11) Changed RNotifier::Connect to use its own version number
instead of the operating system version number - the
notifier interface is updated independently of E32.
12) Merged in new in localisation files since 110.
13) Fixed bug in ARM architecture which caused ADC code
to be called when the variant specified that no
ADC was fitted - caused problems for Delaware.
14) Changed the main battery monitoring code to compensate
for voltage drops with high current consumption when
calculating changes in battery status.
15) Changed the main battery monitoring code to increase
the frequency that it samples the main battery voltage
when other components are interested in obtaining
accurate readings of that voltage.
16) Changed the P2 and PD sound driver to divorce its ability
to play digital sound from the main battery status. It
now has two threshhold voltages - one at 2200mV below
which no sound driver operation will begin and another
at 2000mV below which any sound driver operation that
is in progress will be aborted.
17) Fixed the backup battery code which caused its status to
oscillate between Good and Low every time you switched
off and on.
These fixes, in combination should fix CSW-5376, CSW3-682,
CSW3-1672
6) Basher
1) Added new user server function "ChangeLocale" to change
localisation dll.
Version 1.00.110
================
(Made by Graham , 5th June 1997)
1) Graham / Jonathan / Morgan / Colly
1) Fixed a bug in the Comms LDD emergency power down code.
This was causing interrupts to be enabled which then
caused the kernel irq handling routine to reenable
fiqs thus causing the fiq handler to be reentered with
subsequent death of a random nature to any user code
that might happen to be lying around within reach.
Multiple SW's hopefully.
2) Introduced interrupt protection around
TEiger::ModifyRegister8. This had been introduced into
TEiger::ModifyRegister32 a long time ago but somehow got
missed out of the 8 bit variant.
3) Added protection against rogue irqlevels passed into
Hal::RestoreIrqs();
4) Added NOPs into the following type of ARM assembler
construct:
asm("stmia lr, {r13-r14}^");
asm("add lr, lr, #8");
This now becomes:
asm("stmia lr, {r13-r14}^");
asm("mov r0, r0");
asm("add lr, lr, #8");
The ARM manual advises against using a banked register
directly after any user-bank load or store multiple
instruction.
5) Added T_IRQS test code developed by Alastair.
Version 0.01.109
================
(Made by Graham , 3rd June 1997)
1) Dennis
1) 2/6/97
Fixed SW-3795, SW-3798
Set main battery insertion time after initialising RTC
When system time is set, main battery insertion time is changed
by (new system time-old system time)
Moved initialisation of Locale data from S::Initialise() to P::Initialise()
just after Hal::Init1(). This is necessary to make sure that the home time
offset is initialised before the system time on a cold start.
2) Fixed alloc heaven problem in KS_CHN.CPP whereby a
physical channel is created and not deleted if the
corresponding logical channel creation failed.
2) Matthew
1) Changed sound and comms emergency power-down code to do their completions
with DFCs. This seems to fix the exception-type resets associated with
emergency power-downs.
2) Fixed a bug in the sound driver's write-to-thread code where the home
address of the user buffer was not being used. Spotted by Colly.
3) Fixed bug in sound driver where if an Open() failed with OOM then any
subsequent attempts to open would fail with KErrInUse. Spotted by Colly.
3) Pete
1) Fixed SW3-998: Prevents emergency power downs occuring
while servicing PC Card interrupts from generating an exception.
2) Fixed SW3-974: Machine reset inserting CF card with OOM.
Fix is low risk (FLW). One part affects code only called in OOM
situation, and the other is minor change to a destructor.
4) Graham
1) Fixed a bug in the comms logical device driver. This bug
prevented the machine from switching on sometimes in the
presence of an oscillating DSR input (like Nautilus).
2) Fixed a bug in the backup battery handling when switching
on. This again was preventing machine from turning on
occasionally. Thanks to Colly, Bill and Morgan for help
finding this one. SW3-666 (the number of the beast).
3) SW3-877. Slowed down the turning off of the display
when switching off normally - the previous behaviour
may have been damaging to the lcd panel. (UNAPPROVED)
4) SW3-997 fixed a keyboard table bug when pressing FN+B
followed by the space bar - previously gave a little
circle; now gives a circumflex. (UNAPPROVED)
5) Upped the LCD pump value to 11 from 8. SW3-354.
(UNAPPROVED)
6) Changed MachineInfo for P2 to describe the microprocessor
as an ARM 7100 rather than an ARM 7110. SW3-1028.
(UNAPPROVED).
5) Morgan
1) Fixed RTC error. Conversion between parts per 4000000
and parts per 2^24 was wrong.
Version 0.01.108
================
(Made by ---, --- May 1997)
1) Matthew
1) 22/5/97
Fixed SW-5406: Made the fall-back alarm sound slightly less offensive.
Forward and backward compatible.
2) 22/5/97
Fixed SW-4899: WINS comms pdd no longer calls the ldd's transmit ISR the
extra time.
Backward compatible, not forward if you were assume the transmit ISR
can only be called once.
3) 22/5/97
Fixed SW3-293: Moved EWSRV.DLL to base 0x42800000 so it no longer clashes
with dsound.ldd.
Forward and backward compatible.
4) 22/5/97
Fixed SW3-372: Added the '%.' label to TTime::FormatL. This gives the
locale decimal separator. Test code in T_TIME.
Backward compatible, not forward compatible - previous versions of
E32 reduced '%.' to '.' whatever the locale information was.
2) Morgan
1) 23/5/97
Fixed SW-4604: When a growing Ram Drive hits a page containing
page tables the page allocator attempts to move them. This code was
assuming all four page tables in the page were in use which is not
always the case, causing the allocator to Leave. To fix this, trapped
the Leave when an unused page table is not found in the PageDir.
Forward and Backward compatible.
2) 27/5/97
Applied the correct Uids and capitalised the names of EKern and EFile
by hand during startup. Required because neither of these processes
are loaded by the file server (which is normally responsible for doing
that).
3) 27/5/97
Added RProcess::SetType(const TUidType &aType) and test code.
Backward compatible
3) Ann
1) 27/5/97
Changed KRealFormatNoExponent to use a maximum of aMaxSigFigs digits.
Updated test code accordingly.
4) Graham
1) 28/5/97
SW3-495. Reduced the risk of E32 getting out of step with case
opening/closing
2) 28/5/97
Introduced BLDARMREL as a synonym for ARMREL in MNT.CMD and
removed the need to do MAKEWORK before building.
Version 0.01.107
================
(Made by ---, --- May 1997)
1) Graham
1) Removed MEDCRR.MAP and DATXPD3.MAP from MARM releaseables
Forward and backward compatible.
2) Removed EKERN.LIB from WINC releaseables
Forward and backward compatible.
3) Upgrade 003
Fixed SW3-282. If the 'switch off when case is closed' option was
enabled and one switched off, closed the case, then attempted to wake
the machine up using the external buttons or by asserting dsr, then
the machine would remain dead until the next warm reset.
This was fixed by reading the state of the case when coming out of
standby as well as every second while switched on.
Forward and backward compatible.
4) Upgrade 007
Removed the ability to turn on using the digitiser after an emergency
power down. This makes the behaviour consistent with 'Switch on when
case is opened'. SW-5282
Forward and backward compatible.
5) Upgrade 008
Upgraded P2 and PD digitiser drivers to include debouncing logic
(SW-874 and duplicates).
Forward and backward compatible.
6) Upgrade 009
Upgraded P2 and PD comms pdd's. These now implement the following
current consumption scheme.
RS232 drivers enabled 2mA
Cable connected + 22 mA
Ir enabled 0 mA
Ir receiving 0 mA
Ir transmitting + 35 mA
The cable is detected by either:
1) DSR high
2) Character received
Forward and backward compatible.
2) Pete
1) Upgrade 001
Fixed SW3-331. Formatting of Local Drives was being done cardSize/32
bytes at a time. This was OK on smaller CF cards but on larger ones
(eg 16M Hitachi CF) it was locking up the machine for long periods
(because F32 which is running during each sub-format is at a high
priority). Changed so that a Local Drive is formatted
Min(16K,size/32) bytes at a time.
Forward and backward compatible.
2) Upgrade 004
In addition to having the option to disable compatibility checking between a cards
Vcc level requrements and those supported by a machine, it is now possible
to disable Vcc current and Vpp level compatibility checking in
TPcCardConfig::IsMachineCompatible().
Backward compatible, not forward.
3) Upgrade 005
Fixed a problem parsing device info. tuples which fail to provide the
end of field character. TCisReader::FindReadRegion() now checks the
length of such a tuple and doesn't rely on the terminating character
being present.
Forward and backward compatible.
4) Upgrade 006
Various changes to Pc Card Serial Port PDDs:
- Added Cellular Card Phone Serial Driver (VA_NCCP.CPP) for Rack D.
- Fixed a problem with the standard Modem Card Serial Driver (EUART3.PDD)
when writing to the card at 115Kbps. The driver wasn't making full
use of the Tx FIFO and was spending too long servicing interrupts
resulting in a triple beep reset due to the watchdog timing out.
Also disabled Vpp compatibility checking in order to support the
WorldPort modem.
The full list of supported modems is now:-
- Socket I/O serial port
- Dacom Goldcard V34 + Fax
- Dacom GoldCard Global (V34+Fax)
- Hayes Optima 288
- US Robotics WorldPort
- MegaHertz XJ2288
- Trellis Datacom PC288V2
- Com1 Modem Card MC218
- Paldio Data card
- Changes to Delaware standard Modem Card Serial Driver (EUART2.PDD)
to bring it up to same standard as the Rack D driver.
None of this affects Protea P2.
Forward and backward compatible.
3) Ann
1) Upgrade 002
Fixed SW-4304, SW3-415. TRealFormat changes. Changed
Calculator mode to discard trailing zeros first and then to decide on
exponential or non-exponential format based on the number of digits
available. If the number of digits (including significant leading/trailing
zeros) when using non-exponential format would exceed aMaxSigFigs, then
exponential format would be used, so reducing to no more than aMaxSigFigs.
Fixed SW3-416. The above changes should been this situation won't
occur, but leaves space for sign now, just in case!
Also T_FLOAT test code improved and updated.
Version 0.01.106
================
(Made by Graham, 19th May 1997)
1) Graham
1) Implemented MNT VALID verb.
Forward and backward compatible.
2) Updated all version numbers to 1.0(106)
The compatibilty issues for this are quite complicated.
However, I believe these changes to be both forward and
and backward compatible.
3) Added .MAP files to MARM releasables.
Forward and backward compatible
4) Changed idle current to 38mA, backlight current to 98mA.
Forward and backward compatible
5) Upgrade 004
Changed the WINS fascia to reflect the changed order on the
application bar.
Forward and backward compatible
6) Upgrade 009
Fix which defends against the possibility that the Flash ROM will not
wake up quickly enough when coming out of standby. We jump into RAM
to execute the standby instruction. When we come out of standby we
check the ROM is reading correctly before jumping back.
Forward and backward compatible
7) Upgrade 010
SW-5179 Return an error if an attempt is made to turn the backlight
on when the main batteries are set to 'replace' and no external power
is being applied.
Forward and backward compatible
8) Upgrade 011
Reduce default on time of backlight to one minute and make it
sensitive to user activity.
Forward and backward compatible
9) Upgrade 012
SW-5319 Changed default screen contrast of PD and P2 variants
Forward and backward compatible
10) Upgrade 013
SW-3264 Changed default auto power down behaviour to
'Enabled always' and reduced the default timeout to
3 minutes.
Forward and backward compatible
11) Upgrade 014
SW-3232 Swop round FN-Q,D and FN-Q,T
Forward and backward compatible
2) Dennis
1) Changed wait states on CS1 ROM from 4 to 2 on P2 variant.
Forward and backward compatible
2) Modified ImpHal::PrepareForRepro() to leave the cache and
write buffer enabled. It is only necessary that the page
directory entries for the FLASH are marked as not
cacheable or bufferable and that the TLB and cache are
flushed, which was already the case.
Forward and backward compatible
3) Upgrade 001
Rewrote some of the TRegion member functions in ARM assembly language in an attempt to
speed up the operation of the window server, which uses these functions extensively, and
which was found to be responsible for slow operation of the machine when a large number
of applications are open. See defect reports SW-3500 and SW-4478 and the replies to them.
Forward and backward compatible
3) Ann
1) Upgrade 002
Fixed a bug in Math::Pow() (defect report SW-4624) so that
KErrOverflow errors are not incorrectly returned as KErrArgument
errors. This occured because of differencing of infinity - which is
now checked for. Updated maths test code (t_math) to test this
change fully.
Forward and backward compatible
2) Upgrade 025
Fixed SW3-317 KRealFormatNoExponent mode was not checking for
KExtraSpaceForSign flag. Now checks and changed to act accordingly.
Also added this to test code.
4) Morgan
1) Upgrade 003
Set a constant string in the SuperPage when platform initialisation
has completed. This string is checked on warm resets to validate
cold start initialisation has completed successfully at some point
in the past.
Forward and Backward compatible except for machine configuration
compatiblity. So, machine configurations may not be passed
between old and new versions of E32. You must perform a cold
reset having upgraded to the version of E32 because of this
change.
2) Upgrade 019
Fix for SW3-91 and SW3-66: Shared code chunks are Open()ed properly
in DProcess::Create(). New code chunks are named "$EXE[<Checksum>]"
and no longer have an owner.
3) Upgrade 026
Initialised TheSuperPage.iXtalError to 0 in Hal::Init1() on a cold boot
for those platforms that don't do it themselves in their variant
initialisation.
5) Matthew
1) Upgrade 005
Changed "Rings" alarm sound to be the same as those on the 3a. Thanks to Jezar
for his help with this.
Also adjusted the trailing silence in algorithmic alarms as suggested.
Fixes SW3-22.
Forward and backward compatible
2) Upgrade 006
Fixed SW3-256: Arm sound ldd no longer links to localisation dll.
Forward and backward compatible
3) Upgrade 007
Fixed bug SW3-25: Requests on logical channels by threads which did not open
that channel will now panic the rogue thread, rather than potentially crashing
the whole machine.
Added test code to T_SOUND.
Forward and backward compatible
4) Upgrade 008
Fixed bug SW3-9. Wins fixed (again) to take account of NT daylight saving settings.
Forward and backward compatible
5) Upgrade 023
Fixed SW3_315. In the sound LDDs play and record dfc functions the value of
iThread.iExit is now tested, and if it is not EExitPending then the function
returns straight away.
Forward and backward compatible
6) Pete
1) Upgrade 015
SW3-138 Change to CF card interrupt enable scheme. Currently the MTD keeps
card IREQ interrupts enabled in Etna while its open. These are normally
disabled at the card level but enabled in the card during a write operations.
When the media switch is broken or when a dodgy CF card is present, this can
resulting in a watchdog timeout due to the card permanently asserting IREQ and
not responding to the interrupt clear. This change leaves IREQ disabled
in Etna until required for the write operation.
Forward and backward compatible
2) Upgrade 016
Change only for variants with 2 sockets (ie RackD). Currently on these systems,
when a media change occurs, the PC Card controller does the following
to each socket in turn before turning off Vpc:
- Disable IREQ
- Disable Etna interface
However, because the two sockets have an individual IREQ, but share
the same Data/Address buffers, when the Etna interface is disabled on
the 1st socket, it causes the RESET signal to the 2nd to become
active. This in turn causes the 2nd socket to permanently assert IREQ
(which is now Rdy/Bsy) while its IREQ interrupt could potentially be
enabled. Result is continuous interrupts followed by watchdog
timeout.
The fix is to disable IREQs on both sockets before disabling the Etna
interface. This is done in the variant code for Rack D - ie no impact
on Protea P2.
Forward and backward compatible
3) Upgrade 017
Change to test program DRVSOAK so that it monitors the amount of
spare RAM while soak test is running.
Forward and backward compatible
4) Upgrade 027
Fixed SW3-440. Older SanDisk CF cards still sometimes timeout when
running on batteries. Increased timeout in CF card media driver from 60ms
to 70ms.
Forward and backward compatible
5) Upgrade 028
Fixed SW3-434. Allow CIS parsing functions not to reject a CIS which
has incorrect link tuples.
If a CIS chain contains no link tuples then a check is made for a link target
tuple at address 0 in common memory (as before). However, if a link
target isn't found here then we assume a normal end of the CIS chain
(rather than marking the entire CIS chain as invalid as before).
If a CIS chain contains a 'Long Link to attribute memory' tuple but no link
target tuple is found at address: (specified offset x2) then we also check for a
link target tuple at address: (specified offset x1).
Forward and backward compatible
7) William
1) Upgrade 020
Changes to test programs so that they run from CF card on top of the full
Protea ROM. T_CTRAP, T_POWR, T_UID from TBAS, the rest from TCDT. Still more changes
required to fix "Z:\Test" assumptions and the strange bug with the EIKON console.
T_CTRAP will now fail on WINS debug because it checks the stack depth.
Forward and backward compatible
2) Upgrade 021
Extend RChangeNotifier to do EChangesSystemTime: effects E32STD.H and KSRC\KS_TIM.CPP, KS_NOFTY.CPP
There is a Defect for this, but it's really an E32 Proposal trying to be noticed...
Backward compatible, not forward compatible if you take
advantage of this new feature.
3) Upgrade 022
Check in DThread::Cleanup to see if the dying thread is the one which currently owns the event hook.
If so, cause a 'graceful' kernel fault instead of an
'ungraceful' one further down the line (SW3-205).
Forward and backward compatible
4) Upgrade 024
Fixed SW3-73. Puts the first 8 characters of the Panic/Fault category into the codeAddress
and dataAddress of the last exception information (except, of course, if we are faulting
because of an exception...)
Forward and backward compatible
8) Geert
1) Upgrade 029
Fully source and binary compatible. Not link compatible, however. See below for details.
Fixed SW3-11, replacing the following EUSER.DLL exported functions with binary equivalents:
CArrayFix<TAny>::CArrayFix(TBufRep aRep,TInt aRecordLength,TInt aGranularity);
CArrayFix<TAny>::~CArrayFix();
CArrayFixFlat<TAny>::CArrayFixFlat(TInt aRecordLength,TInt aGranularity);
CArrayFixFlat<TAny>::~CArrayFixFlat();
CArrayFixSeg<TAny>::CArrayFixSeg(TInt aRecordLength,TInt aGranularity);
CArrayFixSeg<TAny>::~CArrayFixSeg();
CArrayVar<TAny>::CArrayVar(TBufRep aRep,TInt aGranularity);
CArrayVar<TAny>::~CArrayVar();
CArrayPak<TAny>::CArrayPak(TBufRep aRep,TInt aGranularity);
CArrayPak<TAny>::~CArrayPak();
All CArrayXxx<TAny> stock instances acquire inline ctors just like the template ones.
If you use any of these classes then to be able to link against the new EUSER.LIB
will require re-compilation.
A clean build should be sufficient.
2) Upgrade 030
Entirely backward compatible. Forward compatible for all software that doesn't use the new service.
And additional forward incompatible change now allows the element just past the array to be addressed
using CArrayXxx::End().
Fixed SW3-374, adding new exported function
TAny* CArrayFixBase::Back(TInt anIndex) const;
as well as inline wrappers to CArrayFix<T> and CArrayFix<TAny>.
These functions provide functionality equivalent to CBufBase::BackPtr(), being CArrayFixXxx::End()
counterparts for fast _backward_ iteration.
Also introduced modifiable overloads of End() inline wrappers and relaxed index range checks for
CArrayFixXxx::End() as well as Back().
9) Jonathan
1) Upgrade 031
Fixes SW3-334
Debug::SetBreakpoint only allowed breakpoints to be set at 0x2xxxxxxx (and at
0x5xxxxxxx in debug releases). Eikon apps get loaded into memory between
0x9000~ and 0xFFFF~.
Debug::SetBreakpoint allows breakpoints between 0x9000~ and 0xFFFF~.
No API change. Doesn't depend or tread on any previous upgrade.
Forward and backward compatible
Version 0.01.105
================
(Made by Pete, 8th May 1997)
1) Dennis
1) Modified the scheduler to set machine current consumption to either
running or idle current depending on whether the null thread is
being scheduled.
2) Added functions Custom::BacklightCurrentInMilliAmps() and
ImpHal::BacklightCurrentInMilliAmps and code to include the
backlight current in K::TotalCurrentMilliAmps when it is on.
3) Fixed a problem with average battery current calculation - the function
was using a hard-coded tick rate of 10 ticks per second.
4) Changed function DLogicalChannel::SetCurrentConsumptionInMilliAmps from
protected to public since in practice it is always the PDD which calls it.
5) Modified the sound and COM1 PDDs to set the current consumption according
to the device state.
2) Morgan
1) Digitiser calibrated from values in E-squared Prom on a Cold Start.
2) Calibration preserved over a warm reset.
3) Plugged in crystal error and machine unique Id values from the E-squared.
4) DPlatProcess destructor closes the process code chunk, and Create() adds
newly created code chunks to the list of Kernel chunks.
5) RLoader::LoadProcess() Kill()s the new process on a failed load.
3) William
1) Reorganise CDeltaTimer creation to fix SW-4030
2) Remove TDblQueLInkBase::EnQue() assertion, to fix SW-4991
3) Reset auto switchoff timeout when an absolute timer completes, to fix SW-4870
4) Ann
1) Fixed bug SW-4351 in Math::Mod(). Now returns KErrTotalLossOfPrecision
if an accurate answer cannot be given.
2) Reorganised maths test code so it now builds for ARM.
5) Andrew 1) Fixed bug SW-4180. SetReserveL(TInt) is now available only
for CArrayFixFlat<T>, CArrayFixFlat<TAny> and CArrayPtrFlat<T>.
The parameter is new the reserved size of the array, not the
reserved expansion space.
6) Pete 1) TPcCardSocket::SetSocketStatus() made virtual function.
2) Added the inline function
TPcCardSocket::EventCallBacksRequested(TPccdEvent anEvent).
Used to determine if there are any clients expecting notification of
a particular PC Card event.
3) CROM Media Driver Caps() no longer sets the drive attributes as
KDriveAttRom.
4) Fixed problem parsing Configuration table entry tuples where the
last two entries both have the same configuration entry value. Prior to
this, only the first of the two was reported.
5) ATA Media Driver now leaves card interrupts enabled in the PC Card
Controller h/w, and enables/disables these as required on the card. This
is quicker than the previous scheme where it was continuously enabling
and disabling interrupts in controller h/w on each Write() request.
6) Media Driver Open() failures due to media change now only return
KErrNotReady rather than any other error value.
7) ATA Media Driver now verifies that a partition is a DOS partition
(extended DOS partitions not supported).
8) ATA Media Driver now uses Pulse mode interrupts where possible.
Previously it always used Level mode interrupts.
9) Change to ATA Media Driver - for write requests
which straddle a sector boundary and require prior reading of two
consecutive sectors, the read is now performed with a single read
command (of two sectors) rather than two reads of one sector.
10) Default attribute memory access speed for 3.3V
socket is 600ns rather than 300ns (as per PC Card Spec.).
11) Withered Custom::DriveName() and Custom::PcCardSocketName() in
custom dll.
12) Prevented DPrimaryMedia queueing same DFC twice.
13) Introduce Media Driver Interface version number.
14) Made media driver current consumption values more realistic.
7) Jonathan
1) The Debug class won't let the user insert breakpoints or
single-step into ROM code before the aDebugLimit argument to
Debug::Open. Gdbstub sets aDebugLimit to its own location in
ROM, thus preventing breakpoints/stepping into code before it in
ROM (including EUser, EKern etc) which might otherwise break.
2) The Debug class ignores the user-supplied aDebugLimit in Release
builds and prevents setting of breakpoints/single-stepping
anywhere in the ROM.
3) Binary incompatibility (affects gdbstub & test code, doesn't
affect RDebug::Printf):
Debugger functions in the RDebug & Debug classes changed to use
thread Ids instead of opaque DThread pointers. Components that
call RDebug::ReadMemory() or RDebug::WriteMemory() should pass in
RThread().Id() as the first argument to these functions to retain
their current functionality.
4) New DThread* Kern::ThreadFromId(TThreadId) for use by Debug
class. Also changed S::ThreadOpen(... TThreadId, ...) to use it.
8) Matthew
1) Fixed SW-3783 - by default, the comms driver now uses descriptor
MaxLength() rather than Length() for reads.
Note: This fix has meant a change to the inline function RDevComm::Read(),
so anyone using this function should recompile with the new E32. You
know who you are.
2) Fixed bug in comms driver so that it no longer crashes if you
request that it writes beyond the end of a descriptor.
3) Stopped WINS sound pdd from gurgling when you do a PlaySineWave().
4) Moved DTMF volume information from sound LDD into the PDDs, since
it depends on the frequency response of the hardware.
5) Tiny amount of fiddling with algorithmic alarm sounds.
6) Made the __WINS_UID() macro expand in WINC builds, implementing the E32
proposal.
7) Removed the EChangesAll enum from E32STD.H since if it used it may break
forwards compatability. This should only effect BAFL.
8) Added a User::SetCurrencySymbol() function for setting the system-wide
currency symbol.
9) Graham
1) Added German keyboard table which now gets
released as CAKDP2.GE
2) Released IMPORT_C from TInt64A functions. These
were not being exported anyway.
3) Exported RLibrary::LoadRomLibrary on EPOC
platforms
4) Fixed update of battery statistics when the
main batteries are changed (SW-5096, SW-4228).
5) Fixed update of main and backup battery statuses
when switching on (SW-3401, SW-4479).
6) Changed UK, US, and German keyboard tables to give
the multiplication and division signs when the
appropriate keystrokes are made.
7) Shortened the beeps for Cold Start, Warm Start,
and Kernel Fault.
10) Jal
1) Added build infrastructure for ELOCL.GE
(the german localisation dll).
Version 0.01.104
================
(Made by William, 2nd May 1997)
1) William
1) Removed the TRAPD() from DThread::RequestComplete, which still seems
to cause lots of E32USER-CBase 71 and 63 panics when used in the
harsh environment of real test roms
2) Remove reference to GateFunction in EGATE.DEF to fix the T_DUID.DLL test
3) Add extra test cases to TCDT\T_THREAD.CPP
4) Add missing XCUST*.DEF files to BMARM\LI.PRJ
Version 0.01.103
================
(Made by Morgan, 1st May 1997)
1) Graham
1) Fixed a problem with the code which looks for both shift
keys when switching on after a warm reset in order to
change it into a cold reset.
2) Fixed a problem with constructing the encrypted password
in the super page.
Version 0.01.102
================
(Made by Morgan, 30th April 1997)
1) Pete
1) Change to PC Card Serial Driver (EUART3.PDD) for Rack D. Added
followers for 16550 registers IER,LCR,MCR rather than relying on
them being read/write registers. Tested this driver using
COMMS(033) app. Sent/received files at various baud rates up to
57600 (didn't test at 115K) using XMODEM without any problems. The
above driver works with the following PC Card Serial Ports/Modems:
- Socket I/O serial port
- Dacom Goldcard V34 + Fax
- Hayes Optima 288
2) Now possible for ATA media driver to return the following errors
on read or write command fails:
KErrCorrupt - Bad block detected / sector ID error.
KErrWrite - Write fault.
KErrTimedOut - Timeout waiting for ATA controller to negate
BSY bit.
KErrLocked - Timeout waiting for ATA controller to assert
RDY bit).
KErrGeneral - Protocol error (wrong state of DRQ bit
detected).
KErrUnknown - General ATA controller error.
KErrCancel - Command aborted
KErrDied - Uncorrectable error encountered.
Prior to this, all the above conditions resulted in KErrTimedOut.
(All of these get translated as before by F32 but the extra
information from the driver is useful).
3) Format command now implemented using ATA WriteSectors command rather
than FormatTrack. This is because there seem to be a variety of
implementations of the FormatTrack command and also it can take a significant
time to complete (>200ms) on some cards which require CHS addressing.
4) Changes to various trace o/ps to prevent system watchdog timeouts on media
changes with tracing on.
2) William
1) Use Win32 IsBadReadPtr/IsBadWritePtr functions to provide better emulation of
EPOC32 kernel exception handling (should allow us to handle the access violations
that the kernel has contingency plans for, even under the MSDEV debugger).
2) Fix SW-1799 by preventing the Win32 thread priority from being raised too high
3) Fix SW-???? by ignoring the KNotifyIfDie flag when WINS threads die (as per EPOC32).
4) Trace the Win32 Thread ID and the WINS thread name in the debug window (WINS debug builds)
5) Fix SW-4346 by making CalcChunkHeapCompression wary of corrupt heaps and wrapping the
invocation from ChunkCompressAll in a suitable exception trap.
6) Arrange to keep iHandles valid (but empty) after thread cleanup
7) Fix SW-3718 by making ChangeNotifier handles thread-relative.
8) Prevent WINS RProcess::SetPriority from changing the Win32 process priority (SW-1799)
9) Limit the size of a heap cell to 1 Gigabyte (SW-4528)
10) Fix SW-4389 by ignoring UserSvr::InitRegisterCallback calls after initial bootstrap.
11) Fix SW-3527 by ensuring that the SYSTEM.INI screenwidth is rounded up to a multiple of 16.
12) Fix T_QUE, T_DLL1, T_DLL2 and T_SVR2 test failures.
3) Graham
1) Fixed WINS problem with expanded MachineInfo
structure.
4) Bruce
1) Two field dates are now accepted for all locales. Fixed year 2000 bug.
Removed hard-coded 'am'/'pm' and replaced these with data
retrieved from the localisation dll.
5) Ann
1) Fixed bug in TLex8::ScndigAfterPoint() (SW-4304) - now reads in first 18 significant
digits rather than just first 18 digits.
2) Fixed bug in TLex8::Val() (SW-4355) - overflow in some cases was being returned as
positive regardless of actual sign.
Version 0.01.101
================
(Made by Graham, 29rd April 1997)
1) Graham
1) SW-1921 Fixed the occasional load click by disabling interrupts while creating the click.
2) Added localised keyboard tables to the P2 build
system and created CAKDP2.UK and CAKDP2.US. CAKDP2.DLL
remains and gives a layout consistent with the keyboards
currently on our Limes.
3) Change the rombuilding system to accept a localisation
parameter. So you may use "rom rel p2 uk". If you specify
just "rom rel p2", you get what you always used to.
4) SW-3330 Fixed repeating keys when entering 'Raw'
mode in the text window server while a key is depressed.
5) SW-3837 introduced ELangInternationalFrench
6) SW-4181 allocated WINS DLL address for MEDCRM.PDD
7) Solved problem with watchdog timer going off sometimes
when coming out of standby.
8) Changed Hal information names in preparation for the
final ROM.
9) Changed supply voltage information so that it
never returns a voltage above the stated maximum
for that battery and returns zero millivolts if
the battery status is EZero. Changed the maximum
voltage for the main battery to 3100mV and for the
backup battery to 3200mV. SW-4194 SW-4237.
10) Implemented the reading of ADC channel 7 on a cold
boot in order to detect when test department boot
to final test is required.
11) SW-3563 Displaying years >2000 as 2 digits in
abbreviated form.
12) SW-4339 Set CurrencyNegativeInBrackets to EFalse
in both the US and UK localisation dlls.
13) Added structure for UserHal::CpuInfo(TDes8& aInfo)
14) Added UserSvr::WsRegisterSwitchOnScreenHandling().
If a window server wants to take control of
turning on the screen, then it should call this
function with ETrue and may then call
UserSvr::WsSwitchOnScreen(). It may relinquish
control back to the Os by calling the register
function again with EFalse.
15) Added the functions:
UserHal::SaveXYInputCalibration();
UserHal::RestoreXYInputCalibration(aType);
Restore takes an argument that may be EFactory (to
restore the factory set calibration) or ESaved to
restore the previously saved calibration.
16) Added the following to the Machine Information
structure:
TInfoName iProcessorName
TInt iProcessorClockInKHz
TInt iSpeedFactor
TInt iMaximumDisplayColors
2) William
1) Added WINS SYSTEM.INI support for "MegabytesOfFreeMemory" which also turns on the
mechanism for limiting the total amount of memory which WINS can allocate.
2) Number some more enumerated types associated with panics and faults. Note that this
includes removing #ifdef __XCON in KPWINS\KP_STD.H so that the KPWINS platform fault
numbers will change: prior permission was obtained from the BC police.
3) In DEBUG builds, change RHeap::Free to fill the released block with 0xDE rather than 0
4) Add __ASSERT_DEBUG to catch double insertion of a TDblQueLink (and fix two places in
the Base which weren't constructing a link when creating an object).
5) Fix SW-3707 by not panicing unnecessarily in DPlatProcess::AllocateDataSectionBase()
6) Fix SW-2104 in DTimer::Cancel(), by not calling RequestComplete on a dead thread, and
not doing the expensive timer scan in DThread::Cleanup().
7) Fix SW-1185 by interpreting EKeyIncContrast to mean "bigger number in SetContrast" in the
text window server.
3) Morgan
1) Preserved the password and its enabled state over a warm reset.
4) Matthew
1) Added PlaySineWave() function to RDevSound. Also added an iMaxSineWaveFrequency
member variable to the sound caps structure. Frequencies are in Hz.
2) Changed sound LDD so that it gets the alarm name via the kernel's
locale-message-text service. LS_SND.CPP and K32LSND.H have thus been scrapped.
3) Fixed bug in sound LDD which caused a kernel panic if FlushRecordBuffer() was
called after a record request had failed with bad power.
Version 0.01.100
================
(Made by Graham, 23rd April 1997)
1) Dennis
1) Modified ARM boot code to automatically work out the size and bus width of
the ROMs connected to CS0 and CS1 chip selects. This information is stored
in the super page in the iRomConfig entries. Both banks of ROM are then mapped
to consecutive linear addresses.
2) Added a new function Hal::PrepareForRepro, which re-maps all the ROM in the
machine. This is to make sure repro works correctly even if ROM page shadowing
is in use. This function uses the information stored in the iRomConfig entries
in the super page to work out which ROM to map and how to map it.
3) Removed ROM mapping calls from VA_HW.CPP for all variants, and added code to set
up the ROM speed and type. For P2 variant, added code to set up the ROM size
for CS1 and the total ROM size. This is required to ensure that repro will work
correctly even if the CS1 ROM is initially blank.
4) Added code to SF_MAIN.CPP to load an LDD (BOOT.LDD) from Z: immediately prior to
loading the window server. This allows any shadowing of the ROM for bug fixes to
be done.
5) Added a new function UserHal::RomInfo to read the iRomConfig entries from the
super page. Updated T_INF.CPP to display this information.
6) Modified ARM boot code to allocate 1K for each page table instead of 4K as it
does at the moment. Also use page tables 6 onwards for ROM mapping instead of
8 onwards, since page tables 6 and 7 are unused at the moment.
This saves 44K RAM for the standard Protea configuration.
7) Modified ARM boot code to make checking the RAM configuration non-destructive.
2) Graham
1) SW-3765 Export TReal96::IsZero by number instead of by name.
2) SW-3760 Removed E32VIRT.H from the release
3) SW-3759 Removed temporary __ARRAY_NO_PTRS__ from E32DEF.H
and appropriate function definitions.
4) SW-3058 Removed __DECLARE_DLL_UID().
5) SW-3480 Removed default Southern daylight savings
time from the UK localisation DLL.
6) SW-3565 Implemented ~ as FN+J on Lime keyboards
7) SW-3564 Implemented the dial key as Fn+Menu on a
Lime and as F3 on WINS. This comes through as
EStdKeyDial and EKeyDIal (in E32KEYS.H).
3) Morgan
1) Moved the locale configuration into the SuperPage to preserve it
over a warm-reset.
2) Implemented TDes::TrimAll();
3) Checked Uid[1] in S::PhysicalDeviceLoad and S::LogicalDeviceLoad.
Added WINS Uids to the device drivers in the Base.
4) Cold reset is now: Warm-reset followed by LeftShift+RightShift+On
to make it harder to do by accident.
5) Fixed K::TickCounter synchronisation after standby, and initialised
iLastLock for locked timers.
4) Matthew
1) Fixed SW-2855 - the TRegion::Sort() and CArrayXxxBase::Sort() functions
have been changed from having no return value to returning TInts, they
will return KErrGeneral if there is a stack overflow.
2) Fixed blitting bug in eiger text window server which caused blocks of
screen to be cleared.
3) Fixed bug in sound driver which made it crash when given a zero-length
sample.
5) Jal
1) Added TLocaleMessageText to E32SVR.H
6) Alastair
1) Changed e32\wsrc\ws_main.cpp so that the eikon shell is not loaded
if the machine is in test department boot mode.
2) Created new project e32\etest producing an executable which will be
loaded instead of ewsrv.exe if the machine is in test department
boot mode. This executable will attempt to load ewsrv.exe and
final.exe from the root directory of a cf card containing euser.dll,
edisp.dll and econs.dll from the base in directory D:\system\libs.
If this attempt fails, etest.exe will try to load elink.exe from
Z:\system\libs which will open the remote link so that the machine
can be booted down the serial port. If this fails etest.exe will
attempt to boot the machine up normally.
7) Pete
1) Fixed 'Emergency power down with CF card powered results in cold
reset' (SW-3620). This was due to QuickEmergencyStandby() not
disabling the Etna's wait state controller properly.
2) Force ATA and CROM media drivers on ARM to only return KErrNotReady
rather than any other error value when a request is interrupted by a
media change.
3) Added the function CardIsReady() to class DPcCardCntrl. This should
be used periodically while using the PC Card Controller to check that
a media change hasn't occured. The new function is a quicker alternative
to the function CardIsReadyAndVerified(). The later is now only used once
at the start of each interface with the controller.
4) Requests to Write or Format the CROM card now return KErrAccessDenied
rather than KErrNotSupported.
5) PC Card Controller now calls P::ResetAutoSwitchOffTimer() on each
call off RPccdWindow::SetupChunkHw() to stop the machine going into
standby in the middle of a long write to a CF card etc.
Version 0.01.099
================
(Made by Graham, 18th April 1997)
1) William
1) Fix SW-3331 by ignoring Undertakers owned by threads which have themselves already died
2) Tweak UPWINS\BLD.CMD to bootstrap ECONS.LIB more reliably
3) Arrange for absolute timers to complete with KErrOverflow for times too far in the future
instead of treating them as times in the past (starts to fix SW-3566)
2) Graham 1) Fixed leaving without a trap harness. This was
calling a slow executive function to panic the
thread inside a fast executive trap function.
Moved the call to panic to the user side.
2) Added V32ARMP2.H to INCK release.
3) Fixed a problem with 098 which meant that
EKERN.DLL was linking to ELOCL.US rather
than ELOCL.DLL (In WINS).
4) Included device driver def files in the INCK
release.
3) Matthew
1) Fixed Sound device driver's DTMF tone generating
interrupt handler.
4) Ann
1) Fixed doCalculator() function so that KRealFormatCalculator mode displays in no exponent
mode only if full precision may be seen in this mode or if no mor precision will be available
in exponent mode.
2) Fixed doNoExponent() function so that KRealFormatNoExponent mode reduces the number of
significant figures used if the given no won't fit. Now only raises an error if value is too
big or too small to fit into the given width.
Version 0.01.098
================
(Made by Graham, 16 April 1997)
Note: This release is neither 100% binary compatible with 097, nor 100% source compatible.
The binary incompatibility is to do with UID allocation changes, the source incompatibility
with the correction of "overriden".
The UID changes are such that narrow release DLLs should work as they are. Other targets need
tweaking, which maktran 063 will do for you. See below for details.
1) GrahamA
IMPLEMENTATION OF UNICODE CHARACTER CLASSIFICATION, CONVERSION AND COLLATION
NEW FILES
e32\inc\collate.h
header for Unicode collation system
e32\inc\unicode.h
header for Unicode character classification system
e32\unicode\collate.cpp
Unicode collation system
e32\unicode\unicode.cpp
Unicode character classification and attribute retrieval
e32\unicode\unitable.cpp
tables of Unicode character attributes; this file is generated by the READTYPE utility from unidata2.txt.
CHANGED FILES
e32\bmarm\elocl.mak:
e32\bmisa\elocl.mak:
e32\bmx86\elocl.mak:
e32\bwins\elocl.mak:
added ls_unic.cpp to list of source files
e32\bmarm\eloclu.def:
e32\bmarm\eloclud.def
e32\bmisa\eloclu.def:
e32\bmisa\eloclud.def
e32\bmx86\eloclu.def
e32\bwins\eloclu.def
removed UpperTable, LowerTable, FoldTable, CollTable, TypeTable; added CharSet.
(where relevant) added ls_unic.cpp to list of source files
e32\bmarm\euser.def:
e32\bmarm\euser.frz:
e32\bmarm\euserd.def:
e32\bmarm\euserd.frz:
e32\bmisa\euser.def:
e32\bmisa\euser.frz:
e32\bmisa\euserd.def:
e32\bmisa\euserd.frz:
e32\bmx86\euser.def:
e32\bmx86\euser.frz:
e32\bwins\euser.def:
e32\bwins\euser.frz:
added TChar::GetUpperCase, TChar::GetLowerCase
e32\bmarm\euser.mak:
e32\bmisa\euser.mak:
e32\bmx86\euser.mak:
e32\bwins\euser.mak:
added collate.cpp, unicode.cpp and unitable.cpp to list of source files, and collate.h and unicode.h
to dependencies where needed
e32\bmarm\euseru.def:
e32\bmarm\euseru.frz:
e32\bmarm\euserud.def:
e32\bmarm\euserud.frz:
e32\bmisa\euseru.def:
e32\bmisa\euseru.frz:
e32\bmisa\euserud.def:
e32\bmisa\euserud.frz:
e32\bmx86\euseru.def:
e32\bmx86\euseru.frz:
e32\bwins\euseru.def:
e32\bwins\euseru.frz:
added TChar::Compose, TChar::Decompose, User::Fold (new overload), TUnicode::Fold,
TChar::GetBDCategory, TChar::GetCJKWidth, TChar::GetCategory, TUnicode::GetCategory,
TChar::GetCombiningClass, TChar::GetInfo, TCHar::GetLowerCase, TUnicode::GetLowerCase,
TChar::GetNumericValue, TChar::GetTitleCase, TChar::GetUpperCase, TUnicode::GetUpperCase,
TChar::IsAssigned, TChar::IsMirrored, TChar::IsTitle, User::TitleCase,
TChar::TranslateFromUnicode,TChar::TranslateFromUnicode.
changed entry for RLogicalChannel::DoCreate to suit new signature
e32\dsound\d_sound.cpp
changed an erroneous use of TChar::Fold to TChar::UpperCase
e32\inc\d32ftim.inl
corrected penultimate arg to RLogicalChannel::DoCreate to suit new type (const TDesC8 *, not const TDesC 8).
e32\inc\e32std.h
added Unicode functions and constants to TChar class
added Unicode functions to User class
e32\inc\e32std.inl
added inline definitions of TChar::Fold and TChar::TitleCase
e32\inc\k32std.h
added declarations for ExecHandler::GetLocaleCharSet, Locl::CharSet, K::CharSet
e32\inc\u32std.h
added definition of LCharSet and removed character type bits (__U, __L, etc.), from Unicode build
defined EExecGetLocaleCharSet and DExecGetLocaleCharSet
added declaration for Exec::GetLocaleCharSet
e32\kearm\ke_int.cpp
e32\keisa\ke_int.cpp
e32\kex86\ke_int.cpp
e32\kpwins\kp_utl.cpp
added ExecHandler::GetLocaleCharSet to the dispatch table
e32\ksrc\ks_dat.cpp
in the Unicode build, removed K::TypeTable, K::UpperTable, K::LowerTable, K::FoldTable and K::CollTable
and added K::CharSet
e32\ksrc\ks_exec.cpp
added Unicode functionality to existing functions; added ExecHandler::GetLocaleCharSet
e32\ksrc\ks_ini.cpp
in the Unicode build, removed initialisation of K::TypeTable, K::UpperTable, K::LowerTable,
K::FoldTable and K::CollTable and added initialisation of K::CharSet
e32\lsrc\ls_lat1.cpp
in the Unicode build, used preprocessor directives to remove unused material
e32\lsrc\ls_table.cpp
added preprocessor directives to select Unicode-build or Ascii-build material as appropriate
e32\lsrc\ls_std.h
in the Unicode build, removed the LAlphabet class and added the TheCharSet object
e32\tbas\t_key.cpp
e32\t_cdt\t_buf.cpp
collation tests now work with new Unicode stuff
e32\t_cdt\t_char.cpp
now works with new Unicode stuff; and in the Unicode build tests character classification and
my new collation system
e32\tlocale\t_chset.cpp
now works with new Unicode stuff
e32\ucdt\uc_des.cpp
changed two erroneous uses of TCharF to TCharUC
e32\ucdt\uc_des16.cpp
e32\ucdt\uc_des8.cpp
Capitalize and CopyCP convert first letter to title case, not upper case, in the Unicode build
e32\ucdt\uc_exec.cpp
character classification and conversion functions (TChar::IsUpper, etc.) now work for all
Unicode values in the Unicode build; added new Unicode-only functions like TChar::IsMirrored
and TChar::GetNumericValue
e32\ucdt\uc_func.cpp
the Unicode versions of Mem::CompareC now use the Unicode locale-specific string-based collation
system implemented by the TCollate class in the new source file collate.cpp
e32\ucdt\uc_ksvr.cpp
changed type of penultimate arg to RLogicalChannel::DoCreate from const TDesC* to const TDesC8*
so that it works in the Unicode build: this caused changes to exported function signatures in the
.def and .frz files
e32\ucdt\uc_lex16.cpp
e32\ucdt\uc_lex8.cpp
changed two erroneous uses of TChar::Fold to TChar::UpperCase: folding isn't guaranteed to make
characters upper case, and doesn't in the Unicode build, but UpperCase is
e32\upmarm\up_exec.cpp
e32\upmx86\up_exec.cpp
e32\upwins\up_exec.cpp
added Exec::GetLocaleCharSet
e32\upmarm\up_lib.cpp
e32\upmx86\up_lib.cpp
changed an erroneous use of CompareC to CompareF
2) William
1) Used Win32 InterlockedIncrement/InterlockedDecrement to implement WINS LockedInc and LockedDec
2) Implemented first-cut exception->leave translation for WINS (as per MARM)
3) Added exception trapping to DThread::RequestComplete, to fix SW-2274
4) Arranged not to complete requests if the requesting thread has already died
5) Enhance T_HEAP test to include truly concurrent access to shared heaps
6) Fix incorrect semaphore count on default heaps (as shown by the revised T_HEAP!)
7) Correct implementation of DThread::GetRamSizes for shared heaps, to fix SW-2671
8) Fix WINS implementation of RDebug::Print, which was assuming a zero-terminated string
9) Add T_REASON, a utility which loops printing the restart reason using RDebug::Print.
This isn't a test program as such, but can be put on a CF card as \System\libs\wserv.exe
to help debug endless restarting.
10) Improve DSession destructor to dequeue any messages which are marked EDelivered, in the
hope of fixing SW-1407 and friends.
11) Implement scheme to orphan kernel CObjects when their owner goes away, to fix SW-1665 (again!)
3) Dennis
1) Modified prefetch abort, data abort and undefined instruction exception
handlers in ke_int.cpp to save correct context if exception occurs in
supervisor mode.
4) Matthew
1) Fixed SW-2408 (problems with signals when you come out af standby).
2) Fixed SW-3293 (cancelling fallback alarm causes panic).
3) Fixed bug with emergency power down during fallback sound.
4) Increased DTMF buffer so if can now cope with 32 characters.
5) Made kernel noises (keyclicks, buzzes and sound driver activity) obey
the state of the sound info. KErrAccessDenied is returned when sound
cannot be played. Fixes SW-2725.
6) Yet more fiddling with algorithmic alarm sounds - fixed nasty distortion
occuring with chimes.
7) Fixed potential memory leaks in CSecurityBase and CConsoleBase.
8) Fixed TTime::RoundUpToNextMinute() and TTime::operator+(TTimeIntervalMonth)
so they now handle negative values correctly.
9) Fixed SW-1974 (Switching on IrDA gives 0xff in Rx buffer).
10) Changed comms PDD so that RS232 hardware is not enabled when IrDA is in use.
11) Changed "KeyClickOverriden" to "KeyClickOverridden" in lots of places.
12) Fixed SW-3097 (Wins Hal switch statement missing a break after TickPeriod).
5) Graham
1) Fixed (with help from Morgan) booting up into a text
shell on a normal eikon-based machine by placing
the appropriate components (EWSRV.EXE EUSER.DLL ECONS.DLL
EDISP.DLL ESHELL.EXE) in the \system\libs directory on
a CF card.
2) Fixed SW-3163 (Alarms when the case is closed and
'switch off when case is closed' is enabled).
3) Fixed SW-3091 (Auto switch of in the presence of
'switch on when case opens').
4) Fixed SW-2893 (UserHal::MaxDisplayContrast(TInt&) in
WINS).
6) Geert
1) Removed the encoding of build variants in uid[0] of E32 images. Introduced
differentiation between EXEs and DLLs in uid[0]. EXEs have a uid[0] of
KExecutableImageUid [0x1000007a], DLLs come with one of KDynamicLibraryUid
[0x10000079]; ie, DLLs don't change for narrow release builds, EXEs get the
value previously used for narrow debug builds. EXEs won't load unless they
have their uid[0] changed.
2) Changed lots of other private and public UIDs, taking care to preserve
compatibility for ARM builds. Unless you release an EXE you're alright, and
even EXEs can be fixed at rom build time.
UIDs of interest can be found in a bare <e32uid.h>, which, in addition to
KExecutableImageUid and KDynamicLibraryUid contains KLogicalDeviceDriverUid
and KPhysicalDeviceDriverUid--uid[1] values for device drivers--and unrelated
KMachineConfigurationUid.
3) Removed the second PREP stage from the rom build process.
7) Morgan
1) Fixed a chunk problem with RAM loading the same process twice.
8) Pete
1) Fixed 'Panic in DPlatMediaChange::TickService()' in WINS
(SW-1962). Now ignore further media change events (F5 keydown)
while the door state is open (as per ARM).
2) Fixed problems parsing the CIS of Multifunction PC Cards.
3) Temporarily fixed 'Occasional Write() / Format()
timeouts when accessing CF card' (SW-3311) by increasing the
WaitForNotBusy() watch dog in the CF media driver from 40mS to 60mS.
4) Door close event in WINS (F5 keyup) now processed
when the machine is in standby.
5) CRom(Prog) media driver (MEDCRR.PDD) now
calculated the CRom size by attempting to read the intelligent ID
from each flash device. This driver now has 'high' priority to allow
it to open in preference to the normal CRom media driver.
Version 0.01.097
================
(Made by ???, ??? April 1997)
1) MarkT
1) Added Early write completion to serial driver - D_COMM.CPP.
To enable set the flag KConfigWriteBufferedComplete in the
iHandshake of TCommConfigV01 and writes will be completed when
they are in the transmit buffer as oppose to waiting until they are
in the hardware. To flush data from the transmit buffer either
use Write(0), (Write(0) will not complete until transmit buffer
is empty), or unset KConfigWriteBufferedComplete and do a
write as normal.
2) Pete 1) Change to CF media driver (MEDATA.PDD) so that this reverts to CHS
addressing if the LBA disk size is found to be invalid. Allows us to
work with Epson PC ATA card.
2) Fixed a problem such that the second socket on rack D (E:) wasn't
properly being reset following a media change (DPcCardSocket::Reset1()
wasn't being called) - only applies to racks modified for
VPC control via the CHRGEN signal.
3) Pc Card Controller now fully supports Memory Space Description fields
when parsing Configuration Table Entry tuples.
4) Pc Card Controllers attribute memory chunk increased from 8K to 64K.
5) Added the Delaware variant (VARMPG).
6) Added PC Card Serial Driver (EUART3.PDD) for Rack D - ie providing a third
serial port on Rack D when PC Card Modem or Serial card is inserted into the PC
Card Socket (68pin socket). To use it you have to switch the '3.3V/5V' switch to
the 5V position (LEFT) and apply a 5V/500mA supply to the '+5V'pin next to this
switch. Unfortunately, without a modification to Rack D it is not possible to
turn this socket on/off under s/w control. The driver assumes the card is
permanently powered and if the rack goes into standby (or the media change switch
is operated) then the card is no longer useable.
This driver has only received limited testing:-
- With a Serial PC Card it passes T_SERIAL up to 115K baud as long as the power-off
tests are disabled and the serial port FIFO is enabled. (Passes T_SERIAL up to
19200baud with FIFO disabled).
- Dacom V34 PC Card modem responds to an AT<CR> with T_TERM.
7) Change to CROM media driver so that the page latch
is reset after each access. This ensures that the page containing the
cards CIS is always selected at the start of each access.
8) Fixed problem where DPccdCntrlInterface::DoNotifyChange was adding the same TPccdCallBack
to two event queues. This resulted in the wrong event callback being
called on media change. This eventually lead to the situation where
the DMediaChange Dfc wasn't queued and the door close event was
missed. Any subsequent access to the CF card returned KErrNotReady.
(Fixes SW-2557)
3) William
1) Fixed HeapOffset/ChunkCompressAll interactions to ensure heap safety: the HeapOffset
is now set by RHeap::ChunkHeapCreated after the RHeap has been fully created, and
ChunkCompressAll now respects the RHeap critical sections.
2) Add "DebugMask nnn" facility to WINS SYSTEM.INI (sadly you have to specify the
bitmask as a decimal number, but it's still useful).
3) Start adding explicit numbering to some of the panic enumerated types, in particular
TBasePanic, TCdtPanic and TExcType.
4) Implement CConsoleTextWin::SetTitle
5) Add T_HCOMP.CPP heap compressing program used to cause ChunkCompressAll problems.
6) Add __KTRACE_ANY which is similar to the previous version of __KTRACE_OPT
4) Graham
1) Made pointer click volume default to soft (on a cold boot)
2) Removed Steve Townsend's change to TRegn::Clear()
3) Removed the leading 'V' from version names
4) Changed the fold and collate tables of the ISO
LATIN1 character set so that 'a with a ring above
it' and 'ae combined into one character' both
fold to an 'a' and so that 'o with a slash through
it' folds to an 'o'.
5) Froze the complete kernel interface on all builds
except WINC.
6) Published CConsoleBase interface def files in
CONSWINS.FRZ, CONSMARM.FRZ, and CONSMISA.FRZ.
These are released in the INCC zip file so they
will end up in \EPOC32\INCLUDE
5) Morgan
1) Released E32 as PETRANned components, complete with Uids.
2) Removed RLibrary::UidL() and RLibrary::Gate() from the API
3) Introduced TUidType RLibrary::Type() and
TUidType RProcess::Type().
4) TLoaderInfo has changed, so this E32 and the new F32 must be
used as a pair.
6) Matthew
1) Fixed comms drivers so they return the correct Ir Capabilities
(KCapsSIR115kbps on Eiger).
2) Fixed bug in WINS sound pdd which meant that sometimes cancelling
a play request would only finish after the sound had finished playing
anyway.
3) Fixed bug in sound LDD which meant that samples up to the length of
the buffer could be played or recorded on one go. Now descriptors
must be less than or equal to the half the size of the buffer.
4) Added code to check that the power was not too low for playing or
recording before it started. Also added code which checks the power
level while it is in use and aborts if the power drops too low.
5) Further changes to the algorithmic alarm sounds - they now use beats,
as on the 3a.
6) Added EChangesPowerStatus to the change notifier. This change occurs
when either of the two battery statuses changes, or if external power
is connected or disconnected.
7) Fixed bugs in TTime::DayNoInWeek() and TTime::DateTime() which were
giving the wrong values for negative TTimes.
8) Added horizontal tabs, delete and ascii bell to test window server.
Also made it ignore the null character and vertical tabs.
Version 0.01.096
================
(Made by Graham, 2nd April 1997)
Binary compatible with 095
1) Graham
1) Improved backup battery voltage monitoring
2) Fixed a bug in the sound driver in the presence of
emergency power loss. This should cure all reported
problems of not being able to turn the machine back
on after playing sounds with low batteries.
2) Dennis
1) Fixed bug in unsigned division routine when used with
a divisor >= 0x80000000.
3) William
1) Implement primitive support for WINS memory gauge (SW-1183)
Note that this won't limit the total memory allocated, so the gauge can
exceed 100% (see Defects database for details).
2) Report allocated base address even for chunks of committed size 0 (SW-1876)
3) Fix dangling pointer problem with DChunk::AdjustL (SW-1793)
4) Implement Steve Townsend's suggested shortcut in User::Free and User::FreeZ
5) Tidy up handling of config structures in DoControl in D_COMM.CPP (SW-1970)
4) Matthew
1) Fixed SW-1994: Playing no sound can lock up machine.
5) Pete
1) Measurement of Vpc when powering up Pc Cards has now been enabled. This is in order
to reject cards which are found to be drawing excessive current.
(This had been disabled until it was possible to convert the ADC reading to millivolts).
Version 0.01.095
================
(Made by Graham, 26th March 1997)
1) William
1) Fixed bug with shared heaps (SW-1665) and added failure scenario to the T_RHEAP test.
2) Fixed SW-1884 bug about timer.At() alarms going off early after switchoff, and
enhanced T_POWR test to check for this.
2) Morgan
1) Added code to calibrate the digitiser based on the values in the
E-squared on a cold start. This may mean that if your E-squared
contains wildly outrageous values the digitiser will be out of
kilter. You can run \E32\TBAS\T_PROM to rectify this.
3) Matthew
1) Fixed B5/B6 bug SW-1726 (volume suddenly shooting to maximum).
2) Moved algorithmic alarm data into the localisation dll, so the names can
be changed.
3) Fixed B5/B6 bug SW-1630 in Comms PDDs: trying to set Mark and Space now
returns an error, and they are not returned as part of the capabilities.
4) Changes to Etna comms:
Fixed bug where the TEtna class was ignoring the Parity-Enable bit.
Removed the Uart interrupt enable from the boot up, since it was being
switched off anyway, and made the Etna comms driver switch interrupts on.
5) Added Comms driver power handling code. The behaviour is now that read and
write requests are completed with KErrAbort on normal switch-off and with
KErrBadPower if there is an emergency power down. On a power down the input
signals drop. On switch off, writes will keep going until the end of the
hardware fifo.
6) Fixed some bugs in the Comms LDD to do with signals.
7) Added Grahams K32DBGDD.H header file, which contains a helpful class for
debugging device drivers.
4) Jal
1) Changes to the Pccd interface controller to allow
access to media change notification. Added to UserPcCardCntrl:
IMPORT_C static TInt NotifyChange(TSocket aSocket,TRequestStatus *aReqStat);
5) Graham
1) Tightened up the backlight handling code and added various
backlight tests to T_POWR.CPP
2) Made Steve Townsends modification to TRegion.
3) Fixed a bug in Unicode in UM_RTOD.CPP
6) Jonathan
1) t_dbg: Added memory read/write tests to user data and, on
MARM, to Eiger registers.
2) Forced RDebug::WriteMemory() to use Mem::Move for aligned
writes so that writing to Eiger registers works.
7) Dennis
1) Added code to implement real-time clock correction based on a
measured crystal error value in parts per 2^24, written into
K::XtalError at startup.
8) Pete
1) On media change, before writing to a thread which
has requested notification of media change, a check has been added to
verify the thread has not been destroyed.
2) Fixed a problem with CRom media driver (MEDCRM.PDD).
Reads/writes from a position which wasn't on a word boundary (or of a
length in bytes which wasn't a multiple of 4), weren't previously supported.
3) Implemented a 40ms watchdog timeout on writes to CF cards (MEDATA.PDD).
4) Pc Card Controller now supports extended device
speed bytes when parsing Device Information Tuples.
5) Added extra fixed media enum to TMediaDevice in E32PCCD.H.
6) Various changes to Pc Card Controller to reduce code size.
7) It is now possible to disable the media change
implementation by setting iTotalMediaChanges=0 in Custom::PcCardMachineInfo().
8) Pc Card inactivity power down and 'not locked' power down periods can now be
set at the custom layer in Custom::PcCardMachineInfo().
Version 0.01.094
================
(Made by Graham, 20th March 1997)
1) William
1) Changed __KTRACE_OPT for exact matches on multiple trace bits, and tweaked some
of the debug messages a bit.
2) Enabled __KTRACE_OPT for WINS builds, writing to "Output" window under MSDEV
3) Automatically set KPANIC trace bit if debug mask is non-zero
4) Use aThread==NULL to mean &Plat::CurrentThread() in ObjectFromHandle functions,
and adjusted the callers appropriately
5) Check in SvSendReceive to make sure that the iSvSession is not NULL, and
fault if it is: the most likely reason for this is a User::Panic in the Supervisor
thread, so we check to see if the message code is ESvThreadPanic and extract the
Panic category and code as appropriate.
6) Added a new TCDT\T_KILLER.CPP test program.
7) Added simple calibration of WINS ticks, to fix SW-1384 by making the clocks run on time...
8) Arranged for Plat::Panic to add 0x10000 to the afult number and call Plat::Fault, so that
the machine will restart rather than loop forever.
9) Put back tweaked VA_RCHG.CPP battery charging driver: it will charge batteries without
melting the machine, but it won't do so automatically: still needs more work.
2) Graham
1) Changed rack B,C,and D keyboard tables to interpret FN+cursor
keys as home, end, page down and up.
2) Updated all keyboard tables to handle ctrl+fn as outlined in
the 090 release notes - not sure what happened to these changes,
they seemed to disappear some time after 090
3) Added code to handle low battery situations a lot faster.
Typically, we remove power from all devices within 110uS and go
into standby within 130uS.
4) Enhanced the P2 keyboard driver. It no longer locks the keyboard
out fully when three keys are pressed simultaneously. Rather, it
waits until fewer then three keys remain pressed before beginning
to deliver keyboard events again.
5) Fixed a bug in the keyboard when switching on with the dictaphone
keys - it delivered the key down event but never delivered a
key up event when the key was released.
3) Ann
1) Changed TRealFormat KRealFormatExponent mode to be able to use
either significant figures or decimal places. Default is still
decimal places, but oring in the KUseSigFigs flag to the format type
will allow use of significant figures instead.
2) Changed TRealForamtFixed mode so that negative numbers < -1 are
are "0" rather than "-0" when 0 dp are used.
4) Dennis
1) Exec::ThreadRead8, ThreadRead16, ThreadWrite8, ThreadWrite16, ThreadGetDesLength,
ThreadGetDesMaxLength now return an error code of KErrArgument if the pointer into the
remote thread address space is invalid, rather than panicing the caller. This fixes
problem SW-1013.
2) Supervisor server functions invoked with a bad pointer will now panic the caller,
rather than causing a system fault and rebooting the machine.
3) The sound driver LDD has been changed to allow only one channel to be open at a time.
This fixes problem SW-1165.
4) All key and pointer clicks are now disabled during sound recording. This fixes
problem SW-817.
5) Morgan
1) Read the E-Squared ROM into RAM on a cold boot.
Version 0.01.093
================
(Made by Graham, 14th March 1997)
1) Pete
1) Fixed a problem with inter-thread reading from CF card.
2) Fixed a timeout problem with some CF cards when
formatting.
2) Jonathan
1) StrongARM port (ISA) brought up-to-date but not tested.
*) Base team please note that (rightly or wrongly) the ARM Custom
API is shared with ISA (file inc\v32arm.h), so any changes or
additions to the ARM Custom API must be reflected in the ISA
Custom implementation.
3) Graham
1) Fixed handling of the emergency power down queue. This
problem was due to the bad design of single queues - it
is impossible to fully check that you are enqueued without
traversing the queue from the top. We might look into
adding a more useful single queue type.
Version 0.01.092
================
(Made by Graham, 13th March 1997)
1) Pete
1) Fixed problem with Format() in Compact Rom (repro version)
media driver (MEDCRR.PDD) such that it was only formatting the first
2M of a CRom card.
2) Compact Rom media driver (MEDCRM.PDD) now included in release.
2) Graham
1) Fixed an bug in the mmu abstraction which assumed that the page
directory was aligned linearly in the same way as it was aligned
physically.
3) William
1) Fixed a problem with threads dying
Version 0.01.091
================
(Made by Graham, 12th March 1997)
1) SimonB
1) Fix for Serial PDD in NT 4
2) Removal of dependancy on MSVCRT40*.DLL
2) Morgan
1) Added screen information to TRomHeader for the bootstrap
2) Fixed corrupted ExcInfo on MARM by adding a FiqStack and
moving the exceptions onto the ExceptionStack.
3) Moved TExcInfo to E32HAL.H
4) System Death due to an exception now saves ExcInfo in the
Superpage and causes a Kernel Fault. Startup, Fault and
Exception reasons are available through:
UserHal::StartupReason()
UserHal::FaultReason()
UserHal::ExceptionId()
UserHal::ExceptionInfo()
There should be a Shell dialogue which retrieves
this information after a kernel fault. This will
enable us to pin down the offending code. Also, along
with each new Protea image, MAKSYM should be run and
the generated log file should be placed on the network
as well. This will give the address of every function
in every module of the ROM.
5) Changed the startup beeps
ColdStart 1 beep
WarmStart 2 beeps
KernelFault 3 decending beeps
6) Fixed SW-1069 - WINC heaps can grow up to 8Mb
3) Graham
1) Enabled the shift key when typing e.g. CTRL-1 a to give
a-umlaut.
2) Solved the œ sign problem on WINS - this had been
re-introduced by Simon's WINS internationalisation
code.
3) Re-introduced some digitiser inertia code to prevent
wobble.
4) Re-structured the Spi controller code.
5) Fixed a bug in CObjectCon::CheckUniqueFullName() that was
preventing two processes of the same name being loaded.
This cures problems with T_KHEAP.EXE and T_PROC1.EXE.
6) Fixed T_KEYS.EXE by updating it for the new ISO LATIN 1
keyboard tables.
7) Made TInt64::GetTInt() and TInt64::GetTReal() const.
8) Swapped the dictaphone keys round (again?)
9) Changed the emergency power down list to be on a single
queue instead of an object container.
10) Changed the P2 keyboard table to make FN-e give e acute
and FN-SHIFT-e to give E acute. This is just to test that
such things are possible although it might be cool to just
leave this in since e acute is probably the most-used
accented character in English.
11) Moved the accenting keys from CTRL+1-6 to FN+Q and FN+Z-B
12) Completed anti-ghosting logic to disallow more than one
modifier and more than one normal key at the same time.
13) Changed the text window server so that a pointer click outside
the region of any window will cause the foreground window to
change.
14) Implemented battery voltage monitoring
15) Increased the number of frozen functions in the kernel to
avoid BITGDI recompilations when E32 is released. Lane, you
will have to recompile, hopefully for the last time, for
this version of E32.
16) Changed keyboard driver to recognise when the machine is
turned on. It will then scan the keyboard and deliver a
keyboard event only if the dictaphone keys are down. It then
waits for all keys to be up before proceeding to deliver
further events.
4) Matthew
1) Fixed B5 bug SW-266 ("%+0*S" formatted incorrectly).
2) Put in Ir power-down fix (from Mark Ball).
3) Added emergency power down handling to sound driver. The driver
completes statuses with KErrBadPower on emergency power down.
This fixes B5 bug SW-384.
4) Added two functions to sound driver - BytesPlayed() and
ResetBytesPlayed() wich give the user feedback on how playing is
progressing.
5) Increased the volume of EVolumeMedium in Eiger sound PDD so the
steps are more even. "Fixes" SW-543 (No apparent difference
between volume settings).
6) Moved sound test code from F32 to E32.
5) Jonathan
1) Added SA ARM variant for Snowball.
2) Fixed #defines in ROM.OBY file to make PREP happy.
3) Made screen size a variant-dependent thing on ARM:
- Screen size is no longer hard-coded in ARM text window server
(wd_eiger.cpp) or ImpHal::Init3(). Text window server no
longer handles switching bit depth.
- LCD initialisation moved out of boot code into
ImpHal::Init3(), with size-dependant LCD initialisation in
Variant::Init3().
- ARM boot code uses screensize parameters in ROM header to
determine video RAM size and placement of page tables.
6) Dennis
1) Fixed a bug in the high-resolution timer code, and added a
Cancel() function to TMilliSecondCallBack.
2) Added a logical device driver for the high-resolution
timer (EFTIM.LDD) accessed via RFastTimer class in
D32FTIM.H
3) Fixed some bugs in 486 build of E32 and speeded it up
by enabling the processor cache and by coding the Mem::
functions in assembler.
7) Ann
1) Fixed a bug in TLex8::Val() which setting next to start of
string if an overflow occurred, causing problems for EIKON.
8) Pete
1) On ARM architecture, moved code for Etna device out of the Kernel
into the Variant DLL for P1,P2,RackC and RackD builds.
2) Added iInterruptInfo to TPccdConfigInfo class. Users of
UserPcCardCntrl::GetConfig() must rebuild - only Pc Card test code should
be using this.
3) Changes to the inter-thread Read()/Write() functions and the Format()
function of DMediaDriver to take a reference to a length (TInt &aLen rather
than TInt aLen). Read/Write/Format requests which would result in excessive time spent in the Kernel now only partly complete. They then return TErrTooBig
with aLength adjusted to the remaining length.
4) Removed the current thread read/write functions
Read(TInt aPos,TintaLength,TDes8 &aTrg) and Write(TInt aPos,TDesC8 &aSrc) from class DMediaDriver as the inter thread read/write versions now perform the same function if the target thread is found to be current.
5) ARM Ata media driver now adjusts auto power down timeout of CF card to 1sec. This prevents it from going into sleep mode between access which could affect CF card transfer rates (default is 5mS).
Version 0.01.090
================
(Made by Graham, 26th February 1997)
1) Graham
1) Changed CTRL+FN+key behaviour. This is a complicated
issue. If one hits CTRL+FN+'1' on a Lime, then it is clear
that the Control and Function modifiers should be set.
However, what should the keycode be? It should be '1'
and not '_'. Higher level software is more interested in
the fact that CTRL+FN+'1' has been pressed than CTRL+'_' has
been pressed. For this reason, in 089, the keyboard tables
were changed to make CTRL override FN as far as keycode code
production was concerned.
However, consider the keystroke CTRL+FN+LeftArrow. In this
case, the opposite is true. Higher level software is more
interested in the fact that CTRL+HOME has been pressed
than that CTRL+FN+LeftArrow has been pressed.
So, in this release I have changed the keyboard tables to
cater for both problems by judging each key on an
individual basis. On a Lime, the keycode produced for:
CTRL+FN+'1' - CTRL+FN+'9' -> '1' - '9'
CTRL+FN+'A' - CTRL+FN+'Z' -> 0x01 - 0x1a
CTRL+FN+LeftArrow -> Home
CTRL+FN+RightArrow -> End
CTRL+FN+UpArrow -> PgUp
CTRL+FN+DownArrow -> PgDn
CTRL+FN+Tab -> CapsLock
CTRL+FN+Esc -> Off
CTRL+FN+' -> '
CTRL+FN+. -> .
CTRL+FN+<space> -> Backlight
CTRL+FN+, -> Help
2) Changed the raw key code on WINS for the Alt key from
EStdKeyLeftAlt to EStdKeyLeftFunc. Attempted to get the
windows key to be the Epoc32 Alt key.
3) Various additions to do with REPROing the upper 2Mb on
Limes.
4) Protected the eiger internal registers from user mode access
5) Introduced anti-ghosting algorithm into the P2 keyboard
driver. It doesn't, however, get rid of the ghost FN key
when you hold down LeftShift, DownArrow, and RightArrow
together. This leads me to believe that not all the diodes
have been fitted on the modifier keys.
The algorithm is basically one of 2-key rollover. So, any
keypresses made when two keys are already held down should
be ignored. Naturally, this is no good when you want to
hold down certain complex modifier and key combinations.
So, these special cases are compensated for in the software
in the knowledge diodes should be fitted into the modifier keys
to prevent any matrix-ghosting.
2) Ann
1) Fixed bug spotted by Natascha in doCalculator() so that values
with negative exponents are displayed correctly.
Version 0.01.089
================
(Made by Jane, 21st February 1997)
1) SimonB
1) Removed dependency on WINMM. Timer now based on a RealTime thread
and sleeps.
Required for Win95 and general compatibility.
2) Changed WINS Comms PDD to work with Windows 95
3) Mark T's Comms PDD bug fixes integrated.
4) International Keyboard support. Just UK and US at the
moment, more to follow.
5) Removed first chance exceptions from WINS loading.
IsBadWritePtr replaced by VirtualQuery.
2) Jane
1) Finished the CObjectCon improvements suggested by Andrew. Note
that to pick these up you need the new version of
CheckUniqueName which takes CObject*s rather than names.
The time taken to Add 0x600 named objects to a container has
gone down from 14 seconds to 6 seconds.
2) Added code for _ftol() to WINS and X86 builds. The function
header is in e32std.h
3) Fixed various debugging printfs by supplying a simple overflow
handler so that long strings are truncated rather than
panicing the caller.
3) Graham
1) Fixed the œ gives ae keyboard problem by converting all
keyboard tables from CP850 to ISO Latin 1.
2) Introduced a new key code - EKeyHelp. This is now F2
on WINS.
3) Changed the WINS keyboard tables so that the dictaphone
keys give the correct raw scan code as well as the
appropriate Epoc32 key code. Did the same trick for
the menu, help and off keys.
4) Fixed up the P2 keyboard tables. Note that the backlight
keys have to be handled in higher level software -
presumably the window server. On Protea the key code used
is EKeyBacklightToggle. However, a really skillful
implementation would handle EKeyBacklightOn and
EKeyBacklightOff as well (in case future hardware has
both on and off keys for the backlight).
5) Fixed the P2 sticky shift and function modifiers.
6) Removed the keyclick on shift, function and control keys.
This has only been implemented on P2.
4) Pete
1) Renamed EPccdEvent enums to prevent name clashing with
W32STD.H.
2) Enabled media change interrupts on P2 hardware.
5) Morgan
1) WarmReset+LeftShift boots with EStartupColdReset on P1,P2,PB,PC,PD
2) Added startup beep
3) Fixed SW-32
4) Write protected the Mmu page directory backup
6) Ann
I IMPLEMENTATION OF SPECIAL VALUES:
TReal96, Math and TDes8/16 classes now handle "special values" - NaNs,
infinities, signed zeros and denormals.
Changes are as follows:
1) Maths constants renamed:
K...ExponentBigBad now K...SpecialExponent
K...ExponentSmallBad now K...ZeroExponent.
2) The Math member functions
ASin(), ACos(), ATAn(), Exp(), Frac(), Int(), Ln(), Log(), Mod(),
Pow(), Pow10(), Sin(), Cos(), Tan(), Sqrt()
have been changed as follows:
a) to return an error corresponding to the result, i.e.
KErrArgument if the result is indefined / a NaN,
KErrOverflow if the result is too big to be represented or infinite
positive only if the result is an integer),
KErrUnderflow if the result is too small to be represented (or if the
result is an integer, if the result is too large or infinite
and negative),
KErrNone if the result is finite and representable.
b) to write a result to the aTrg IN ALL CASES rather than just
the return value is KErrNone. Hence the result is as follows:
NaN if the error is KErrArgument,
Positive or negative infinity as appropriate if the error is
KErrOverflow (or the max value if the result is an integer),
Positive or negative zero as appropriate if the error is
KErrUnderflow (or the min value if the result is an integer).
c) to be able to handle denormals. i.e. all numbers >= 5E-324 and <
KMinTReal64=2.2250738585072015E-308.
3) Math member functions IsZero(), IsNaN(), IsInfinite() and
IsFinite() added. Also private member functions SetZero(), SetNaN()
and SetInfinite().
4) TDes8/16::Num/AppendNum() returns error value or length of string
as previously, but if error value is returned an appropriate string
is set:
"Inf" for positive overflow (KErrOverflow and positive argument)
"-Inf" for negative overflow (KErrOverflow and negative argument)
"0" for positive underflow (KErrUnderflow and positive argument)
"-0" for negative underflow (KErrUnderflow and negative argument)
"NaN" for NaN (KErrArgument)
5) TDes8/16::AppendFormatList() only panics for KErrGeneral and
if another error value is returned by Num(), uses the string set
as above.
6) The exponent of TReal96 zero is now -32768, the smallest exponent
possible.
7) TReal96 member functions IsZero(), IsNaN(), IsInfinite(),
IsFinite(), SetZero(), SetNaN() and SetInfinite() added.
II ROUNDING FLAG:
See Programming DB - Global Rounding Flag Required
A new private member of TReal96, iFlag, has been added to
indicate whether the mantissa is rounded up, rounded down or exact.
This has required changes in member functions to set and use the
flag where necessary.
Changes are:
1) iSign member changed from TInt16 to TInt8.
2) Constants for values of iFlag added to e32math.h:
const TUint8 KRoundedUp=2;
const TUint8 KRoundedDown=1;
const TUint8 KExact=0;
3) New TReal96 member function TReal96::Flag() which returns the
value of iFlag as a TInt.
4) New private function TReal96::Round() taking an argument which
specifies the number of binary digits in the mantissa to perform
rounding in the (MSDEV and IEEE standard default) round to nearest
mode and to set the flag as appropraite has been added to be used by
Normalise(), Prepare() and conversion functions. New private member
function TReal96::ShiftToNormalise() added to be used in cases where
rounding will never be required e.g. assignment/construction of
TReal96 from TInt.
5) TInt64::Multop() returns integer values between -2 and 1 with the
following meanings:
-2 least significant 64 bits exactly zero
-1 least significant 64 bits less than TInt64(0x80000000,0) but
not zero
0 least significant 64 bits exactly TInt64(0x80000000,0)
1 least significant 64 bits greater than TInt64(0x80000000,0)
and TReal96::MultEq() changed to round according to these values.
6) TReal96::DivEq() rounds on the remainder after division similarly.
All maths test code updated to test special cases including
correct return values and setting target values and new functions,
etc. Also fixed to work in X86 build.
III OTHER
1) UP_GCC.CPP function converting double to float changed to raise
the exception. Also all arithmetic changed to do operation and
conversion and raise the exception if an error value is returned at
any stage.
2) Function TReal96::CheckOverUnderflow() used by arithmetic now a
private member function and altered to check fewer large-exponent
cases for overflow.
7) Matthew
1) Fixed SW-25 from B5 database (Power off while recording hangs machine).
Version 0.01.088
================
(Made by Jane, 12th February 1997)
This version requires F32 053
1) Graham
1) Sorted out the digitiser. This should no longer
exhibit wobble or erroneous points when touching
the surface lightly.
2) Updated digitser driver to use the new digitiser
clicks rather than the keyboard clicks. These
should now be indepenently controllable.
2) Jane
1) Added an implementation of User::IsRomAddress from
Simon B.
2) Added CArrayFixBase::SetReserveL
3) Fixed a chunk bug - when a TFindChunk was opened read-only
in a process, the top bit of the process address (data
section) was set to indicate this. If another thread was
then created in the process, its heap address was incorrectly
allocated over the TFindChunk, as the latter's address was
stored with top bit set.
4) Fixed a shared chunk bug on 486 - when T_CHUNK opened the
Window Server chunk RO, and then did an Exec::SessionSend
to the WindowServer, there was a fault when the kernel
attempted to write the message into the Window Server's
heap. Fixed this by unsetting the WP bit in CR0, so that
supervisor can write over User RO chunks. This is OK on the
ARM, but a thing to look out for if we ever port to another
processor.
5) Improved CArrayPtr<T>::ResetAndDestroy as suggested.
6) Changed profiler end/start behaviour as detailed on Notes.
7) Started to optimise CObjectCon::CheckUniqueName as suggested
by Andrew Thoelke.
The time taken to store 0x200 unnamed objects has gone down
from 6 seconds to being as close to 0 as makes no difference.
More on this later...
8) Added __ftol to EUSER.
9) Added CObjectCon::AtL which leaves rather than panicking, so that
the kernel can panic a thread which passes an invalid find handle to
open, rather than dying itself.
10) Increased the WINS main user thread's max heap size to 8M.
3) Pete
1) Moved sections of code relating external interrupt control and binding out of
the Kernel DLL and down into the Variant DLL.
2) Code for Pc Card external interrupts (Ready,IREQ,Status change) added.
3) CF card media driver now makes use of card IREQ signal during card writes. This
now goes into idle after initiating a write to the card, with the card asserting
an interrupt on completion to wake up the system.
4) Added a media driver for compact rom card (MEDCRM.PDD).
5) Written media driver for programming flash on compact rom card(MEDCRR.PDD).
6) Modified the functions
7) Changes to functions CardInfo() and ChangeFlag() of UserPcCardCntrl class.
8) Monitor the Vpc voltage on first applying power to a Pc Card to check that
the card isn't drawing too much current for the rail.
9) Alteration to media change simulation in WINS:
F5 - Media door open as long as F5 is held down.
F4 - This toggles between 1 of two simulated CF cards on socket 0 (ie X:)
when hit while F5 is held down.
10) All files used to simulate Pc Card memory and internal ram drive now created in
systems temp directory rather than \EPOC32\DATA - ie fixed HA-262.
11) Fixed problem with ATA media driver - divide by zero.
12) Removed support for Rev 1.0 Asic12.
13) Check battery status before commencing write to CF Card - return with
KErrBadPower if battery is low.
14) CF Card driver now handles emergency power down.
15) Pc Card power consumption - K::PcCardCurrentMilliAmps
now implemented.
4) Matthew
1) User::SetHomeTime() has been changed to return a TInt. This will return KErrOverFlow on
Arm if the new time is out of range (past about 2068, before about 1932).
2) Sound driver: Added more click controlling code and implemented a fallback alarm.
Version 0.01.087
================
(Made by Graham, 5th February 1997)
This release is binary compatible with 086
1) Graham
1) Implemented dictaphone keys in WINS:
F6 Dictaphone Play
F7 Dictaphone Stop
F8 Dictaphone Record
2) Begun the production of power supply
information from UserHal::SupplyInfo().
Expanded test code in t_power accordingly.
3) Added the P2 variant which will be used for green
machines. Changed the keyboard variant to include
the dictaphone keys.
4) Added PD and P2 variants to the releaseables.
5) Added the function UserSvr::TestBootSequence(). This
returns true if the machine is being booted by the test
department. The file server should call this function and
load etest.exe rather than ewsrv.exe if this is the case.
6) Added the function UserHal::ResetAutoSwitchOffTimer().
7) Added the function UserSvr::AddEvent(). This enables user
code to add events into the event queue. Quite apart from
the numerous applications that this might spawn, it is
necessary for user side implementation of a VT100
console driver and handwriting recognition software.
8) Added the EKeyMenu, EKeyBacklightOn,
EKeyBacklightOff, and EKeyBacklightToggle keycodes
to all variants. On WINS the F1 key is used as the
MENU key.
9) Rationalised the MARM rom building system. This is
now controlled by a single ROM.OBY file which is
preprocessed with build and variant information.
10) Added backlight support. The backlight may be
either timed or untimed. Should the timeout
be reset whenever the machine is used?
11) Made pointer clicks configurable separately from
key clicks.
12) Added screen clearing on switch on if a password
is set.
13) Added UserHal functions for PointerSwitchesOn,
CaseOpenSwitchesOn, and CaseCloseSwitchesOff.
Grouped these, together with the
AutoSwitchOffTime, AutoSwitchOffBehavior,
BacklightTime, and BacklightBehavior information,
into a new TOnOffInfo structure.
14) Implemented switch off on case close and switch
on on case open on all platforms.
15) Simon has implemented a visual simulation on WINS
of case closing. On WINS, F11 is also used to simulate
both closing and opening the case. You will
notice that, while the case is closed, keyboard
and pointer events have no effect. This is to
simulate the fact that normally you can't get to the
keyboard or screen under these conditions.
16) Enhanced MARM switch on on pen down to take
account of the Hal variable PointerSwitchesOn.
17) Solved Low battery bugs (HA-357, HA-362)
2) Ann
1) Test code changes:
i) Additional tests added to t_math tests for Pow10(). These show
that in all but one case inexact string to real conversion is due
to inexact calculation by Math::Pow10(). All tests in t_math check
for as much accuracy as possible.
ii) t_float tests are now consistent between WINS and ARM.
iii) Whetstone benchmark tests added
iv) t_r96 casting tests now include identity tests (which check
consistency with MSDEV in WINS). Casting to TInt tests changed
in line with changes to source code (ii below).
2) Source code changes:
i) TReal96::MultEq() altered to do one shift rather than preparing
and then shifting to left. This avoids losing bits which may be
shifted off the end by preparation, but for which there is space in
the final postition.
ii) TReal96::operator TInt() changed to round towards zero to
comply with IEEE standard and Java requirements (also MSDEV).
iii) TReal96::Prepare() altered to check for zero sign or zero
mantissa. If so, preparation is not done. Im the latter case,
the mantissa is meaningless and in the second preparation would
result in an infinite loop which does nothing.
3) Morgan
1) Implemented Kernel Faulting.
2) Reorganised low memory to include the Registry just before the
Ram Drive. This means that the Ram Drive is shoved up and down
in memory as the Registry changes size.
Added class TLowMemory to manage the Ram Drive and Registry
memory allocation and to provide information to F32 about the
drive's changing position.
3) The Ram Drive now survives Warm Resets and Kernel Faults
Implemented CPersistantRegistry to do the same for the Registry.
T_RESET tests all this jiggery pokery on MARM.
4) Added integer divide by zero exception to MARM
5) Implemented a user side mini-loader for loading Dlls from ROM
when an explicit ROM path is provided.
eg. lib.Load(_L("MONKEY.DLL"), _L("Z:\\Animals\\Primates\\Hairy"));
This eliminates most of the time taken to load these Dlls.
4) Jane
1) Fixed MMU bug which showed up in fairly obscure kernel growth/shrinkage
situations.
2) Optimised page allocator for faster kernel growth.
3) Added a routine to compact kernel pages when the machine is reset. This function
is not called yet, except in test code.
4) Made a TFindChunk::Open() actually add the chunk to the process address space (unless
it is a kernel chunk) so that the chunk can be read/written from another process.
5) Matthew
1) Fixed HA-355: added %*a and %*b to TTime::Format() which give
am/pm without a space.
2) Fixed HA-367: descriptor formatting now accepts things like
%-10f (default fill character space) and % 5F (no "+").
3) Internal changes to sound driver to reduce the amount of clicking.
Also fiddled with the volumes of DTMF dialling, so it should work now.
Version 0.01.086
================
(Made by Matthew, 22nd January 1997)
This release is binary compatible with 085
1) Graham
1) Renamed T_PARSE to T_TPARSE to eliminate the
conflict with the F32 test program of the same
name.
2) Updated the TREALTIM test programs and fixed some
super thread bugs.
3) Temporarily reintroduced page-based ROM mapping so
that debugging can be tested again.
4) Fixed a bug in the user side event code which
prevented position information being extracted
from the new EPointerSwitchOn events.
5) Fixed bugs in the ARM implementation of
TInt64A::MulTop() and changed it to return a TInt.
2) Ann Windsor
1) Removed KTReal96MaxExponent and KTReal96MinExponent from
e32math.h
2) Fixed bug HA-345: constants now correct to full precision.
3) In t_math test code, all approximate tests now use the
function testApprox(). This tests that the relative error
is within a specified tolerance.
4) Removed all approximate tests from t_r96 and t_r64.
5) In Pow10(), limits for second underflow check changed so
1.0E-308 underflows as expected.
6) TInt64A::Multop() fixed to carry from insignificant parts
and now returns a TInt to indicate whether the insignificant
64 bits are zero or non-zero. TInt64::MulTop() changed
accordingly.
7) TReal96::DivEq() fixed to force rounding up where
appropriate. This results in division being up to
5E-6 secs slower in the worst case.
8) SReal64 and SReal32 struct definitions added to um_std.h
and removed from other umath *.cpp files
9) TReal96::MultEq() fixed to force rounding up where appropriate.
3) Alastair
1) Fixed bugs in release versions of T_SEC.
4) Simon
1) Protected EventQ from access from WINS Window and Timer threads.
Fixes a few WINS Bugs related to AddEvent causing an Access
Violation.
2) Added some new shutdown code to allow System threads to continue
execution when the machine is off. This fixes bugs like "Program
does not exit when minimized" and other miscallaneous hangings
after a PowerDown.
3) Change to E32Initialize to allow WINC apps to call it more than
once.
5) Matthew
1) Stopped WINS from adding 1 hour for summer time when it's winter.
2) Fixed bug in CRegistry::SetContents().
Version 0.01.085
================
(Made by Jal, 10th January 1997)
1) Morgan
1) Fixed OOM alloc heaven in CreateSession and RLoader::LoadLibrary
2) Renamed kernel.exe to ekern.exe in the X86 obey file so device
drivers can link to it.
3) Added iLanguage bitfield and iHardware members to TRomHeader.
Updated BOOTROM.BIN to match.
2) Jane
1) E32 Proposals
a) Made CObjectCon::ValidateName -> User::ValidateName (static)
b) Removed copy constructors for TPoint, TSize, TRect
c) Made TLocale constructor exported, removed setting to 0 from TChar
constructor.
d) Removed CDeltaTimerAlloc
e) Americanised Capitalise.
f) Make TDesC8::Length and TDesC16::Length inline
g) Implemented Rog's amendment of David's User::Notify proposal: an RNotifier
class with the following member functions-
TInt Connect();
void Notify(const TDesC& aLine1,const TDesC& aLine2,const TDesC& aBut1,const TDesC& aBut2,TInt& aButtonVal,TRequestStatus& aStatus);
TInt InfoPrint(const TDesC& aDes);
2) Bug fixes
a) Removed unused User time/date functions
b) Kept a list of thread relative threads within the thread so that they
can be closed properly when the thread dies.
c) Alloced a bit in the DThread iFlags for whether the thread is the main one, this
fixed the bug with APPRUNs not dying.
d) The priority of the NULL thread was incorrect in WINS - spotted by
David Batchelor, thanks.
f) Added CServer::Restart() and fixed CServer::RunL()
g) Fixed HA-55 kernel alloc heaven causes kernel re-entrancy
3) SteveG
1) Fixed bug in the battery recharger hanging when free'd. Added
iChargeTick.Cancel() into the device driver destructor.
4) Geert
1) Inlined various TDateTime, TTimeIntervalXxx and TTime members.
2) Integrated Bruce's TTime::Parse() service. (See the proposal and
spec in E32 Proposals for details.)
3) Removed all Time member functions duplicating services in TTime.
4) Removed initialisation code from TTimeIntervalXxx's and TTime's
default ctors. Default constructed instances of these classes now
have undefined, arbitrary values.
5) Graham
1) Added functionality to the text window server to allow raw
event information to be passed through to a client. The
primary user of this is the final test program which
needs some way of testing each raw keyboard element.
2) Updated the double multitasking kernel functions to give
handles wrt the kernel server rather than the device
driver client. Updated the real time test program and
device driver accordingly.
3) Made relocatable static data changes appropriate for
our real-time needs.
4) Fixed a further digitiser problem. There should
now be no machines which experience complete
digitiser failure apart from those with hardware
faults in this area.
6) Alastair
1) Added overloaded NewL function for Security class which
takes a piece of security data as a parameter so that a
CSecurityBase object can be constructed using security
data stored in a file for decryption purposes.
2) Removed ConstructL, EncryptL, DecryptL and
IsValid functions from CSecurityBase API.
3) Added NewEncryptL and NewDecryptL functions to
CSecurityBase API so that objects for handling encryption
sessions and objects for handling decryption sessions can
be created. The APIs for these object classes -
CSecurityEncryptBase and CSecurityDecryptBase - have been
added to E32BASE.H.
NewEncryptL and NewDecryptL take an initialisation
vector as a parameter to allow for pluggability with
more sophisticated encryption methods.
4) Written a new UB_SEC.CPP to cater for the above
changes. The current encryption scheme produces
encrypted data in multiples of 32 bytes.
5) Rewritten T_SEC.CPP to test security changes.
7) Matthew
1) Changed set and free tls functions from exec to sv calls.
2) Fixed alloc heaven in change notifier, and changed notifier so that
you can only logon once to each notifier, so that the kernel's notify
function can be called from exec functions. This has meant API changes,
and the RUndertaker API has also been changed - the parameter has been
removed from LogonCancel - so the two are more similar.
3) Added iMaxVolume capability to sound driver, now the volume-by-value
takes a value from 0 to iMaxVolume, instead of 0 to 100.
4) Removed Time::IsValidDate().
8) Pete
1) Added custom and variant DLL for rack D h/w.
2) Moved sections of code relating to the Pc Card Controller h/w out of
the Kernel DLL and down into the Variant DLL.
3) Added the function UserHal::DriveInfo() which
returns a TInfoName for each local drive and Pc Card socket as well
as the total number of valid drives and socketss on a given variant.
4) Various changes to the member functions of UserPcCardCntrl
class.
9) Ann Windsor - CHANGES TO MATHS SOURCE CODE
I e32\inc\e32math.h
-------------------
1. Constants KTReal32MinExponent and KTReal32MinExponent, KTReal96MaxExponent,
KTReal96MinExponent, KTReal96ExponentBigBad and KTReal96ExponentSmallBad added.
2. Functions added to UM_R96.CPP added to TReal96 class
II e32\inc\e32std.h
-------------------
1. Constant KErrDivideByZero added.
2. New constants defined for flags in TRealFormat type:
KExtraSpaceForSign=0x40000000
KAllow ThreeDigitExp=0x20000000
KUseSigFigs=0x10000000
KDoNotUseTriads=0x08000000
KGeneralLimit=0x04000000
KRealFormatTypeFlagsMask=0x7c000000
KRealFormatTypesMask=0x0000007
3. RealFormatType no longer enum; changed to constant TInts
KRealFormatFixed=1
KRealFormatExponent=2
KRealFormatGeneral=3
and two new types added:
KRealFormatNoExponent=4
KRealFormatCalculator=5
4. iDecimalPlaces member of TRealFormat name changed to iPlaces because used
for decimal places or significant figures as appropriate.
5. TLex8 member function ScndigAfterPoint() added.
III e32\ucdt\uc_des.cpp
----------------------
1. Changed in line with changes to e32std.h above.
2. AppendFormatList() altered to allow three-digit exponents in E,e (exponent)
and G,g, so Printf %E,e,G and g all display numbers to the maximum range.
IV e32\umath\um_dtor.cpp
------------------------
1. Changed TLex8::Val() appropriately to deal with the full range of values. This
includes doing multiplications in TReal96's so that errors can be detected.
2. TLex8::ScndigAfterPoint() added to do conversion from decimal after point, so that
trailing zeros are not included. This ensures that e.g. 0.2900 and 0.29 have the same
binary representation.
V e32\umath\um_pow.cpp
-----------------------
1. Changed to check for aSrc being ±1. If so, sets result appropriately to ensure exact
and to save running algorithm.
2. Bug found and fixed: Int() being used for a number potentially larger than 32767.
Altered to return an error if Int() reports an error, i.e. if the input has an absolute
value larger than 32767 (a return value larger than 32767 would lead to an error later in
the function anyway). This ensures that results over and underflow as expected.
3. Bug found and fixed: reduce() set high part of f to 0 rather than leaving it unchanged.
This fixes the bug reported in B4 problem report no HA-207: overflows are now reported as
expected.
VI e32\umath\um_pow10.cpp
-------------------------
1. Changed to handle the full range of TReals rather than up to 1e±100.
VII e32\umath\um_r96.cpp
------------------------
1. Set() checks that exponent does not exceed maximum (KTReal64ExponentBigBad/
KTReal64ExponentBigBad) and is not less than minimum (KTReal32ExponentSmallBad/
KTReal64ExponentSmallBad). If so, KErrArgument is returned.
2. GetTReal()
i) In checking for underflow, value against which check is made changed from
-KTReal32MaxExponent/-KTReal64MaxExponent to KTReal32MinExponent/KTReal64MinExponent.
ii) Rounding has been implemented for TReal32s so that when a TReal96 mantissa is
converted to a TReal32 it is rounded to the nearest value using all bits available,
rather than just being truncated.
3. Casting to a TInt from a TReal96 changed to check for zero by using sign and also to
round to nearest, rather than always rounding down.
4. Arithmetic
i) Added functions AddEq(), SubEq(), MultEq() and DivEq() which perform the operations
+=(), -=(), *=() and /=() respectively, as these operator functions did previously, but
reporting an error constant, rather than panicking.
ii) Similarly to i), functions Add(), Sub(), Mult() and Div() have been added as the
non-panicking variants of operator +(), -(), *() and /(). The latter functions panic on
an error as described in ii). The result is written to an input target variable.
iii) operator +=(), -=(), *=() and /=() perform arithmetic operations (using AddEq(),
SubEq(), MultEq() and DivEq() respectively) and either panic (when unsuccessful), leaving
the initial arguments unchanged, or otherwise return the result in *this.
iv) Added function CheckOverUnderflow(), to be used in AddEq(), SubEq(), MultEq() and
DivEq(), to check for overflow or underflow in cases where it may occur by normalising
the result and checking the exponent.
v) Added function PanicOverUnderflowDividebyZero() which is used in operator +=(), -=(),
*=() and /=() to panic if an error is returned by AddEq(), SubEq(), MultEq() or DivEq()
respectively.
vi) Addition operations (in AddEq()) improved to eliminate loops which change exponent by
1 and shift the mantissa by 1 place on each loop to make the exponents equal before
addition takes place, instead altering the exponent and shifting as appropriate in one
step.
vii) Fixed bug in AddEq() so that it shifts the mantissa of the bigger number right by
one. This prevents failure when subtracting numbers of the same sign (or adding numbers
of the opposite sign) when the ms bit needs to be carried down (and hence only two bits
are shifted down into the extended part when preparing the result) and the last hex digit
of the result is 4 when prepared.
viii) In DivEq(), a new error KErrDivideByZero has been introduced. Also reports
KErrArgument if 0/0 (invalid operation).
5. Changed Normalise() to round on last three bits to nearest value, rounding to value
with l.s. bit zero (even) if two values are equally near to be consistent with MSDev and
to minimise propagation of rounding errors in general.
6. To be consistent with MSDev, increment and decrement operators should normalise after
each operation. However, this doubles the time and ultimately decreases accuracy, so
has not been adopted.
VIII e32\umath\um_rtod.cpp
--------------------------
1. fDigLim() changed to handle all exponents between -1022 and 1025, i.e. all TReal64s.
2. All do...() functions now take TInt flags as one of their parameters to enable (or
disable) extra space for sign, three-digit exponents, significant figures rather than
decimal places, triads and linited accuracy of digbuf.
3. In addtition to the flags above, an internal flag determining whether the digbuf needs
rounding has been added.
4. doExponent() altered so it can be used both directly and by doGeneral() and
doCalculator(). In calculator mode, trailing zeros are eliminated. Also uses three-
digit exponents if allowed by flag if necesary.
5. doFixed() altered so that a space is left for a potential sign if a flag is set. This
allows positive and negative numbers of the same exponent to be of the same accuracy.
6. doGeneral() altered in line with alterations to doFixed() and doExponent().
7. doNoExponent() new function added to deal with calculator representation which does
not use exponents, i.e. numbers to a maximum number of significant figures. This
function is similar to doFixed(), other than it does not pad with zeros and hence does
not necessarily have a decimal point or deciaml places. If the triad length is non-zero
then triads are allowed by default (but can of course be disabled by a flag). An
overflow error is reported if the number is too big to fit in the maximum significant
figures and an underflow if it is too small for any significant digits to appear i.e.
apparently 0. If the number does not fit, i.e. not enough space for sign, point or triad
separators, then a general error is reported.
8. doCalculator() new function added which operates as a conventional calculator would,
i.e. using non-exponential representation as far as possible and otherwise exponential
representation. The number of figures in the display is limited by the maximum
significant figures. This function will report a general error if there is insufficient
space availble to include a sign, decimal point and exponent, as well as the figures,
EVEN IF THEY ARE NOT REQUIRED. In this way it operates as a conventional calculator.
doCalculator() uses either doNoExponent() or doExponent() (in calculator mode, see 4.)
as necessary.
9. rtob() has been altered in line with the above changes.
Also it now checks that the numspace is >0, otherwise reporting a general error. iType is
now used to take both the user-specified flags and type. If no type or flags are
specified then it leaves. Flags are also set as necessary for the various modes (in all
modes, rounding is needed):
fixed - does not use significant figures
exponent - does not use significant figures (when accessed directly rather than
through calculator)
general - does not use significant figures or triads
no exponent - uses significant figures
calculator - uses significant figures and no triads.
IX e32\umath\um_sin.cpp
-----------------------
1. sinx() changed to ensure than sin of a multiple of pi and cos of an odd multiple of pi/2
give exactly zero.
X e32\umath\um_std.h
---------------------
1. EMathUnknownPanic added to TMathPanic to deal with unknown errors.
XI e32\umath\um_tan.cpp
-----------------------
1. Tan() changed to ensure that tan of a multiple of pi gives exactly zero and tan of an
odd multiple of pi/2 reports an overflow error.
XII e32\umath\um_utl.cpp
------------------------
1. Poly() changed to use TReal96s.
XIII e32\upmarm\up_gcc.cpp
--------------------------
1. Arithmetic now raises an exception if an error is returned by the TReal96 non-
panicking arithmetic variants.
XIV e32\upwins\up_i64.cpp
-------------------------
1. Bug found in MulTop() - the two least significant words are never multiplied together
and hence the possible carry from this part into the ls word of the result is ignored.
This part may also need to be used for rounding purposes.
CHANGES TO MATHS TEST CODE
--------------------------
I T_FLOAT
---------
1. Altered and increased appropriately to test altered and new cases due to changes
in the above. Also divided into two modules containing data only (FLTDATA1.CPP and
FLTDATA2.CPP) and a header file containing class definitions because the amount
of initialised data was too large for the GCC compiler.
2. Altered and increased appropriately to test fully string to real conversion to
full range. N.B. THESE TESTS ARE CURRENTLY APPROXIMATE DUE TO AN UNRESOLVED BUG.
II T_GEN and T_GEN32
--------------------
1. Added to generate files for use by T_R64 and T_R32. These are for testing in
ARM, to see that the GCC and MSDEV compiler give the same results.
T_GEN also generates special values needed for the generation of these files and
for T_R32 and T_R64 test code.
III T_MATH
----------
1. In the light of changes made to sin, cos, tan and power functions various tests have
been added or updated:
i) tests exact results are given for: zero to a power, any number to power zero, ±1 to
any power, sin(n*pi), cos((2n+1)*pi/2) and tan(n*pi) (where n is an integer).
ii) tests overflows occur as expected for Math::Pow()
iii) tests tan((2n+1)*pi/2) overflows.
2. More comprehensive tests of trig functions have been included to test multiples of
"common" values: pi/6, pi/4, pi/3, pi/2 and pi (in addition to test for exact values
above).
3. Comprehensive testing of Math::Cos() (not just Sin() ) have been added.
4. Added test to check reduce() is working correctly.
IV T_R64 and T_R32
-------------------
1. Special values generated by T_GEN and T_GEN32 used in all tests.
2. Casting tests for TReal32s now use TReal96s. (A special test following this shows the
occurrence of an (as yet unresolved) bug.) Tests have also been added to be used when
exception handling is fully implemented.
3. All tests improved and made comprehensive.
4. Further tests added using the files generated as described in II.
5. T_R64.CPP and T_R32.CPP have also been split so their data is in a separate file
to avoid duplication of code in T_GEN and T_GEN32.
6. Arithmetic tests all test for equality rather than using BitApprox, with cases
which fail being removed until bugs are fixed so exact results are obtained in all cases.
With changes to um_r96.cpp explained in VII 2. and 4. above, T_R32 tests are now all
exact.
7. Test code has been included (for use in debug mode only) to test that exceptions
are raised correctly by the up_gcc.cpp code (which has been copied into separate files -
emgcc32.cpp and emgcc64.cpp - which may be called by these tests).
V T_R96
--------
1. Special values for use in the test code have been initialised and used in the tests
where appropriate.
2. Constructors of TReal96s from TInts, TReal32s and TReal64s tested fully, including
tests that attempting to construct from values with "bad" exponents (i.e. exponents too
big or too small) results in a return of KErrArgument.
3. Test of preparing a denormal checks that the value is not already prepared. Also added
test of preparing of an unprepared value.
4. Arithmetic tests
i) Arithmetic tests all test for equality rather than using BitApprox, with cases
which fail being removed until bugs are fixed so exact results are obtained in all cases.
ii) As a result of the bug fixed in operator/=() by Jal a test of division of denormals
has been added.
iii) Extra tests have been added to test the new member functions AddEq(), SubEq(),
MultEq() and DivEq() which perform arithmetic operations and report an error rather than
panicking if overflow, underflow or division by zero errors occur. The panicking-variants
are also tested to be sure panics occur as expected (to be run in debug only).
5. Tests of GetTReal(), casting functions unary operators, increment and decrement
operators and equalities and inequalities have been made more comprehensive and include
tests for overflow, underflow and total loss of precision errors where appropriate.
6. Tests for SetExp() and SetSign() and also for assignment operators added.
7. Increment/decrement tests now include normalising to get results consistent with
Microsoft.
Version 0.01.082
================
(Made by Morgan, 20th December 1996)
This release is binary compatible with 081
1) Morgan
1) Fixed a bug in the SWI vector code on the ARM that was calling
dispatchDfcAndReschedule incorrectly.
2) Jane
1) Changed the base addresses of WINS dlls as suggested by Martin Budden.
2) Fixed bug in CObjectIx where creating many objects could return a null handle.
3) Fixed Daylight saving bug in WINS
3) Graham
1) Modified bootup code so that it reads the keyboard to
set up ROM memory configuration. This will be used with
the masked ROM to check paged mode rom access
Version 0.01.081
================
(Made by Matthew, 17th December 1996)
This release is binary compatible with 080
1) Matthew
1) Fixed dereferencing-zero bug in CObjectCon and CObjectConIx destructors.
2) Changed EDLL WINS debug info to C7 format.
Version 0.01.080
================
(Made by Jane, 16th December 1996)
This release is binary compatible with 079
1) Morgan
1) Timers abort on power up and locale changes to universal
time, and daylight saving.
2) Fixed HA-307
2) Matthew
1) Speeded up several CObjectIx, CObjectCon and CObjectConIx
functions by using pointers into arrays instead of operator[].
3) Jane
1) Added support for real time threads. These are supervisor mode threads
whose real time response is greatly improved over ordinary user threads,
as it is possible for them to interrupt the supervisor server and
non-blocked slow exec calls.
Wrote the WINS and X86 implementations of the above, and a test driver
and test program. (D_RTIM and T_RTIM).
4) Graham
1) Added ARM implementation of real time threads.
Version 0.01.079
================
(Made by Graham, 10th December 1996)
This release is binary compatible with 078
1) Graham
1) Changed the bootstrap to map the ROM using ARM MMU 1Mb
sections. This reduces the number of TLB entries used
by the ROM and yields a 4% speed increase on our inter-
process message passing test (T_PROC1).
2) Fixed MachineInfo problems on WINS (HA-220, HA-303).
3) Patched up some Hal information services.
4) Experimentally added clicks when the digitiser is touched.
2) Matthew
1) Checked all PP::, KK::, Plat:: Panics and Faults. Some
have been changed to panic the calling thread, instead of
the kernel. This fixes bugs like HA-276 (Leave without TRAP).
Version 0.01.078
================
(Made by Graham, 7th December 1996)
This release is binary compatible with 077
1) Simon
1) Changed WINC over to use some WINS components, allowing
Store and other components to use WINS librraies for WINC
development.
WINC now conists of a EKERN ECONS and EEXE but all other
components are taken from the WINS build. The BLD.CMD has
been changed to reflect this new building model.
2) WINS EUSER added WINC initialisation functions.
3) Removed unecessary files from UPWINC
2) Graham
1) Implemented User::MachineConfiguration() and
User::SetMachineConfiguration(). These may be used to
save and restore the registry and O/S information such as
whether key clicks are enabled or sound volume is loud etc.
It is hoped that this information will now be standardised
in such a way that anyone moving from one EPOC/32 machine
to another will be able to transfer their machine's
'personality' in one go.
2) Moved P::DebugMask() to Plat::DebugMask() as it was being
exported.
3) Pete
1) PC Cards are now powered down automatically after 5
seconds if the card is left both un-configured and with no memory
allocated.
2) Fixed a problem were a CF Card was incorrectly returning
'Not supported' on each subsequent access following the
situation were a read from the card was interrupted with a media
change. (Unfortunatley interrupted writes still cause the file server
to panic).
3) Full 16bit access of CF cards (and therefore support of Hitachi
cards) now takes place when a Rev2 Etna is detected.
4) General PC Card related class renameing. Also, PC Card
configuration info. has now been moved from the EKERN into the
appropriate custom DLL for ARM builds.
Version 0.01.077
================
(Made by Graham, 6th December 1996)
1) SteveG
1) Fixed bug in battery charging LDD which hung when free'ing the
device driver. Removed debug information which was being
output to the comms port while charging was in progress
2) Morgan
1) Altered the MARM MMU PTE permissions lookup table to enable
write buffers for user data. Fixes HA-300 (Speed).
2) User::Abort now raises EExcKill exception.
3) Jane
1) Fixed Lane's shared chunk growing problem
4) Graham
1) Fixed a versioning problem with the text window notifier
server.
Version 0.01.076
================
(Made by Graham, December 3rd 1996)
This release is binary compatible with 075
1) Graham
1) Added Eiger port control code which avoids output bits
reading erroneously when they are connected to circuits
with large rise or decay times.
2) Added Minor Version 4 to the E32 version number to reflect
the fact that this is a B4 release.
3) Fixed a problem in the media driver version numbering.
2) SteveG
1) Preliminary release of the battery recharging LDD, DARCP1.LDD,
for tests by the hardware dept. This is only for the real
Proteas.
The LDD offers the following functions:
RDevNicads::Open() to open a channel
RDevNicads::Type(TInt& type) to get the charge type in progress
This will be EChargeNone, EChargeFast or EChargeTrickle
RDevNicads::SetChargeType(TInt aType) to set the type
The type should be EChargeNone, EChargeFast or EChargeTrickle.
Returns an error if it is not possible to start the requested
charging method.
RDevNicads::Close()
The functions are defined in D32RCHG.H and D32RCHG.INL
Loading the device driver using LoadLogicalDevice will start
the charging if a rechargeable battery pack is fitted. The mains
LED will flash while fast charging is in process. Once fully charged,
the battery pack is trickle charged while mains power is applied.
This can be overridden using the above functions.
3) Morgan
1) Fixed WINS so that it reports the same physical screen
size as it did before .INI-file-controlled fascia bitmaps
were introduced.
Version 0.01.075
================
(Made by Graham, November 28th 1996)
This release is not binary compatible with any previous version.
1) SteveG
a) Wrote the device driver for the serial E2PROM. This is currently
only for P1 Proteas, as the racks do not have the device fitted
The device driver is DAE2P1.LDD and provides all the commands
necessary for writing, reading, protecting and locking the
sixteen 16-bit registers in the E2PROM chip
b) Fixed bug in ARM Mem::Compare with non word aligned buffers >=16
c) Implemented keyboard repeats in the E32 text WServ
d) Added an EActive event, which is sent in WINS when the focus
is returned to the WINS window. The EInactive event is still
sent when the WINS window loses focus
e) Added an EUpdateModifers event, which is sent whenever the
WINS window gains focus. This event includes the current
state of the toggling modifier keys, and should be passed
on to the keyboard translator to update its modifier states
using KeyTranslator->UpdateModifiers(TInt). The modifiers
are extracted from the event using TInt TRawEvent::Modifiers();
E32 text WServ modified accordingly. This event is sent before
the EActive event. This event will also be sent when booting
up WINS, so the caps/num lock states will be correct at bootup.
KeyTranslator->UpdateModifiers() also resets the state of the
key translator to normal
f) Implemented keyboard clicks, the following UserHal functions
can be used to set the clicks:
to set/read the volume:
UserHal::SetKeyClickLoud(TBool)
UserHal::KeyClickLoud(TBool&)
to set/read if clicks are enabled:
UserHal::SetKeyClickEnabled(TBool);
UserHal::KeyClickEnabled(TBool&);
to override the system on/off setting, forcing clicks off
(will be used by WServ to turn off clicks when an application
requests to disable clicks while in foreground):
UserHal::SetKeyClickOverriden(TBool)
UserHal::KeyClickOverriden(TBool&)
(This function could do with a better name...:-)
Using SetKeyClickOverriden(ETrue) will disable key clicks
regardless of the system setting. The system setting can
still be changed while overriden.
Note that key clicks will not work in WINS as they produced
more of a key fart than a click. The functionality is there,
and if a way of producing a suitable click is found, will be
added in a later release (function P::KeyClick() in KP_UTL.CPP)
g) Fixed problem with CTimers going off 1 second early - this
solves the problem of alarms going off a second or so early
in TimeW app on MARM. There still appear to be problems
in WINS, which may lie elsewhere...
TSecondLink::At() now converts the absolute time you specify
to seconds since year2000, and uses this to work out the
delta value to put into the queue. This is more accurate
since the time that the queue was last ticked over is also
stored in seconds since year2000. Previously the value added
to the delta queue was the difference between the system time
and the time you supplied, which could be upto a second out
if the microseconds part of the system time was non-zero
which would be 99.9999% of the time
2) Morgan,
a) Added support for a WINS system ini file allowing some system defaults
to be setup. The .INI file lives at \EPOC32\DATA\SYSTEM.INI
and allows you to change the screen dimentions, fascia and the
LED arrangement.
The defaults are
ScreenWidth 640
ScreenHeight 240
ScreenOffsetX 123
ScreenOffsetY 53
FasciaBitmap \epoc32\data\Fascia.bmp
LedOffsetX 30
LedOffsetY 26
LedSize 14
LedGap 5
LedArrangeHorizontally
#LedArrangeVertically
b) Added exception support for MX86, MARM, and WINS:
TExceptionHandler* RThread::ExceptionHandler() const;
TInt RThread::SetExceptionHandler(TExceptionHandler* aHandler,TUint32 aMask);
void RThread::ModifyExceptionMask(TUint32 aClearMask, TUint32 aSetMask);
TInt RThread::RaiseException(TExcType aType);
TBool RThread::IsExceptionHandled(TExcType aType);
If a thread has no handler for an exception it is passed onto the
kernel for handling. The default action is to panic the offending
thread. Unhandled exceptions caused by RThread::RaiseException()
force the thread to exit via User::Exit().
Otherwise handlers are executed in the context of the thread on
which the exception is raised and control returned to the
point of the exception.
When debugging under WINS, MSDEV will intercept the exception before
the handler has a chance to execute.
c) Fixed HA-258
d) Added Uids (and -type-safe-link for ROMBUILD) to the Base components under ARM.
The Uids are #defined in \Epoc32\include\E32UID.H and \e32\kbarm\E32UID.IBY.
e) Added an iTextSize to TLoaderInfo and TRomImageHeader for GDB
f) Implemented Dll::GlobalAlloc, Dll::GlobalAllocated, Dll::GlobalRead, and
Dll::GlobalWrite.
3) Matthew
a) Fixed HA-208 (IsPresent and IsValid in TUidType should return TBool).
Also changed loads of other Is*() functions to return a TBool instead
of a TInt. A few Is*() functions which returned KErr values have been
renamed:
CObjectCon::IsValidName -> ValidateName
CObjectCon::IsUniqueFullName -> CheckUniqueName
DComm::IsValid -> Validate
b) Fixed HA-196 (inline TLocale functions not expanded in release builds).
c) Fixed HA-238 (Shortcomings of KNullUid definition): removed TUidC class
and added static functions TUid::Uid(TInt) and TUid::Null() to get round
GCC bug. #defined KNullUid as TUid::Null().
d) Changed WINS Uid scheme so that the UId is stored in a segment of its own
called ".E32_UID", to add a UID to a windows file include the code
#pragma data_seg(".E32_UID")
__WINS_UID(Uid1,Uid2,Uid3)
#pragma data_seg()
in your source.
e) Added the capability to detect thread death to the RChangeNotifier
(completes with the EChangesThreadDeath bit set).
f) Implemented User::InfoPrint() function. Also added a very simple notifier
server to the text window server so that little windows appear when
anyone calls User::Notify or InfoPrint.
g) Improved the Tls scheme so that it uses a CArrayFixFlat. According to my
benchmarking this should speed up Dll::Tls(), though it remains to be
seen what happens in the real world.
Note that there is now a Dll::FreeTls() function, and that Dll::SetTls
can now return KErrNoMemory.
h) Changed midnight crossover code, to avoid costly divisions.
i) Changes to sound driver: Fixed several bugs to do with having two LDDs
going at once. This has caused the driver to become more sensitive to
playing and recording at once, and may mean that code that previously
worked fine now returns KErrInUse. Remember that the driver keeps
playing aLaw even after the last play request has been completed, and
keeps recording until the buffer is full. If you find problems, check
that you flush the record buffer when you have stopped recording, and if
you try to record and get KErrInUse, you may want to wait until the play
buffer has had time to drain and try again before reporting an error.
Added some preliminary power handling code. Playing will stop on
switch-off and the restart from where it left off; recording will
terminate with KErrGeneral (this seemed the only appropriate value)
when you switch back on.
The PDDs now support EVolumeByValue. The values are as follows:
0-20 = EVolumeNone
21-40 = EVolumeSoft
41-60 = EVolumeMedium
61-80 = between EVolumeMedium and EVolumeLoud
81-100 = EVolumeLoud
4) Jane
a) Changed MMU from a scheme of passing 3 parameters denoting the chunk's
owner, its type (code, data etc.) and whether it was locked in physical or
linear memory, to a simpler scheme where the chunk's owner is passed throughout the MMU
system (there being a greatly increased possible number of chunk owners). This
was to enable the ARM MMU, which is more limited than the X86 one, to cope with
shared chunks being read only in one process and writable in another etc.
b) When creating certain types of chunks, kept a list of allocated pages, so that it
is possible to support 3 possible states of permissions. (On the X86 this is achievable
by merely changing the top level PDE permissions - this is not so on the ARM). This change
allows the ARM MMU to support code chunks which are read/write to start with when the file
server reads the code into them from a CF card, but later are both supervisor read/only
when in the home section and user read/only when running.
c) Made a note early on of the file server's process. Changed the ram drive chunk
to being two-state chunk, and when the file server runs, change the permissions on the
RAM chunk (top level PDEs only) so that the file server has direct access to the
RAM drive.
d) Made the RAM drive supervisor priviledges, so that no-one except the file
server (see above) can access it.
e) Added size reporting functions for spy programs
TInt RLibrary::GetRamSizes(TInt& aCodeSize, TInt& aConstDataSize);
TInt RThread::GetRamSizes(TInt& aHeapSize, TInt& aStackSize);
TInt RProcess::GetRamSizes(TInt& aCodeSize, TInt& aConstDataSize, TInt& anInitialisedDataSize, TInt& anUninitialisedDataSize);
f) Added Andrew Thoelke's optimisations to various Find and Locate functions - see
Notes for more details.
5) Graham
1) Added and enhanced Kazuhiro Konishi's unicode/japanese changes
to the text window server.
2) Added the UID into the sound driver make file and removed
all the link dependancies that the sound PDDs had upon
their LDD.
3) Fixed the dodgy digitiser (HA-284)
4) Experimentally increased the digitiser sample rate to
50 samples/s.
5) Introduced the EPointerSwitchOn event. This event contains
x and y information and is generated when pen down causes
the machine to switch on. No further pen events should be
generated until the pen has subsequently been removed from
the surface of the digitiser. I believe appropriate windows
(i.e. the application bar window) will be able to register
with the window server an interest in these events. So, normal
windows should not be troubled by them. This should solve
problem HA-325.
6) Removed the text window server's beep when switching on
normally and introduced it when switching on with the
digitiser. (This only occurs on debug builds).
6) Rog 1) Fixed RackC COM::1 bug which was causing input RS-232 lines
to be reported incorrectly.
7) Pete 1) Reduced the wait states introduced by Etna on CF Card
attribute memory reads. This was interfering with screen
refreshing when 16 shades of grey mode was enabled (HA285).
2) CF card support when powering on and off the machine has
now been added. On power off, the card is fully powered down. On power
up, TLocalDrive objects are notified of the power down, forcing them
to re-mount the disk on the next access (HA281).
3) Added the functions InCritical() and EndInCritical() to
the PC Card controller. While in-critical, media change power down is
delayed. Writes to the CF Card are now critical. Prior to this, if a
media change occured during a write to the card then this could leave
a sector with an ID error on the card.
However, there is currently a problem such that the File Server
panics if a media change occures during a write to the CF card
so this should be avoided for now.
4) PC Card controller now able to access a CIS chain in common
memory as well as attribute memory.
5) Removed the function User::PcCardCntrlInterface() and
replaced this with the class UserPcCardCntrl.
6) Added the following functions to the above class: MediaStart(),
MediaOpen(),MediaInfo(),MediaRead(),MediaWrite(). These
allow access to a media device (eg CF Card) at a media
level (rather than a partition level as do TLocalDrive.Read() and
Write()). I.E. they allow access to the partition table etc.
Version 0.01.074
================
(Made by Graham, November 6th 1996)
1) Graham
1) Fixed a leak in AddProtected() which caused the O/S to
panic with EBadDfc when stressed.
2) Added followers into the TEiger class for ports A,B,C,D
and E. Modifying these registers can now be safely
achieved without worrying about those bits which are
programmed to be input bits.
3) Added interrupt protection into all TEiger modify
functions.
4) Stopped KE_ALL debug information from coming out in all
circumstances.
2) Morgan
1) Moved WINS power off button to F9 (HA-214).
2) Fixed HA-255 and added test code.
3) Made semaphore and mutex names unique for each process to fix
HA-163. It is now possible to run 2 WINS kernels with the same
process name simultaniously.
Version 0.01.073
================
(Made by Graham, November 6th 1996)
1) Graham
1) Solved the stack problem which prevented debug information
from being emmitted in MARM debug builds.
2) Fixed WINS keyboard repeat problem when the WINS window
loses focus.
2) SteveG
1) Reduced stack usage of CObject::FullName, which was shoving a
TFullName on the stack for every owner of an object. Now only
one TFullName is put on the stack regardless of the number of
owners. This cures HA-273.
Version 0.01.072
================
(Made by Jane, October 25th 1996)
This release is the candidate B3 release. Unless there are any show-stopping
bugs, our next release will be the first in the chain leading to B4, and
will not be binary compatible with this one.
NOTE: Once again to speed the passage of this non-binary compatible release
through the system, I have released with test code failures. However in this
case I believe them to be test code problems. The following tests are failing
with kernel alloc heaven - T_CHUNK (chunk testing), T_KHEAP (thread testing)
and T_THREAD (undertaker testing). These tests fail in ARM debug builds only,
and pass on X86, which leads me to believe that these are granularity
issues in the kernel heap on ARM.
1) Jane
a) Implemented allocation of sub-page tables for ARM.
b) Fixed bugs to do with lengths of supplied filenames in
process and library loading. Took the opportunity to rationalise
the loader to do this and reduce stack impact considerably.
c) Added MMU debug supervisor calls to enable the porting of my
MMU system from its emulated environment, and converted several
tests to the new system.
d) Tidied up various APIs to their correct places, ready for
unfreeze.
Affected are the new unimplemented exception APIS, and the
RLoader::LoadLibrary
e) Added an enum, TKernPanic, to e32std.h
Now client threads will be panicked with values in this list,
rather than error numbers.
f) Fixed a couple of bugs in the low-level arm mmu implementation which
showed up with very large RAM disks.
g) Exported wildcards KMatchAny and KMatchOne from e32std.h
h) Changed RConsole::Set to RConsole::Init
i) Stopped RTest writing to comm ports (except in X86 builds)
j) Rationalised KErrxxxx constants
KErrNoLinearMemory gone, used KErrNoMemory instead
KErrSubSystem gone
KErrDomain gone, used KErrArgument instead
KErrException gone (kernel panic enum used instead)
KErrNotFound becomes -1, so that we could omit KNotFound in future.
NOTE - KErrGeneral is no longer -1. This showed up quite a few
bugs in the file server which was assuming that KNotFound was the
same thing as KErrGeneral. This is no longer the case, beware!
k) Added RThread::ProcessPriority() and RThread::SetProcessPriority()
l) Changed void RThread::GetHeap(RHeap*&) to RHeap* RThread::Heap()
m) Speeded up interprocess messaging by about 10%. A further 8%
to come in next release.
2) Steve
a) Fixed UserHal::MemoryInfo which was returning an incorrect
figure for FreeRam - it was deducting the size of the RAM
disk from the real free ram size.
3) Graham
a) Changed the ADC interface to unsigned values. This should give
doubled digitiser accuracy but meant recalibration of the
digitiser on all platforms.
b) Updated K32VIDEO.H to include power handling functions.
c) Add CountDown(n) and FirstDelta() function calls to the
priority queue class.
d) Implemented waking up from alarms.
e) Implemented waking up from pen down.
f) Implemented ESwitchOn events on all platforms (HA-229).
g) Added a beep to the Text Window Server in debug builds
when an ESwitchOn event occurs.
h) Added a general purpose interface to the ADC channels which
measure battery voltages, thermistor readings etc.
i) Made Neil Lilliot's change for reducing shadowing on the LCD.
4) Jal
a) Fixed a bug in TReal96::operator/=
Version 0.01.071
================
(Made by Graham, October 11th 1996)
1) Graham
1) Added a millisecond timer queue to the kernel. It
currently uses FRC2. All kernel services which were
using TEiger::WaitMilliseconds should now move over
to the new services provided by this queue.
2) Implemented the digitiser in terms of the millisecond
timer queue instead of the system tick queue. This enables
code to be written which can deliver more than 21 digitiser
events per second (it is currently set to 25/s). Not only
this, by driving current across the digitiser only when it
is absolutely necessary, power consumption has been
reduced. The digitiser should now work on upgraded
machines - the H/W fix for digitiser wobble involves an
increase to 1mS in the X/Y drive rise-time. In order to
take account of this rise-time, the millisecond timer was
required.
3) Implemented the buzzer in terms of the millisecond timer
queue. Due to variable interrupt latency, this does not
produce a pleasing effect. So, for the time being, I have
left the buzzer monopolising FRC1. You can switch between
this and the new millisecond timer buzzer with the compile
time switch __SOFTWARE_BUZZER__ in KEARM\KE_UTL.CPP
4) Introduced Hal::WaitMilliSeconds which uses the
millisecond timer. This replaces TEiger::WaitMilliSeconds.
5) Added device driver power handling functions in
KS_POWER.CPP.
6) Created a release of header files for those who link to
the E32 kernel (device driver writers mainly). This can
be found in R:\E32\ZIP\INCK.xxx
7) Implemented the auto clibration sequence on the ADC
converter. This cures the problem which causes the first
ever pen down event to have the wrong y-coordinate.
2) Pete
1) Fixed a bug which prevented the machine booting up with
the CF card door open.
Version 0.01.070
================
(Made by Jane, October 4th 1996)
1) Morgan
1) Priority of a process is set according to the Executable's E32Image.
2) Fixed svLibraryLoadExact to deal with statically linked libraries where
the ownership of the libraries handle belongs to the newly created process.
2) SteveG
1) Changed the keyboard data for P1 to have ' on shift-6, not ^
2) RDebug changes: Anyone can now request to be informed when a thread
panics, hits a breakpoint or causes an exception without having
called RDebug::Open. This means a panic catcher can be running
continuously and still allow GDB to be used. Previously, only one call
to RDebug::Open was allowed, meaning that the debugger could not
be used while a panic catcher was running and vice-versa.
To catch panics etc, use the following code:
SDebugInfo info;
TRequestStatus status;
RDebug::GetException(info,status);
User::WaitForRequest(status);
SDebugInfo is defined in E32SVR.H
You must kill the thread that paniced at some point using:
RDebug::KillThread(info.iThread);
or it will remain suspended forever. Do not use RDebug::Open
or you will prevent GDB from running at the same time.
If someone starts GDB while your request to GetException is pending,
GDB takes priority and you will not recieve any notifications of threads
panicing until GDB quits
Only one call to GetException can be active at any one time. It is
quite safe to call GetException while GDB is running, your request
will remain pending until the first app panics after GDB quits
To cancel a request to GetException, use RDebug::CancelGetException()
This feature has been buried by Jane's RUndertaker class which
should be used in preference ('cos she says it's better :-()
The ability to use GetException without calling RDebug::Open will
be removed in a later release.
3) Altered D_GDB, the GDB stub, so that if you launch it without
passing a program to debug on the command line, it will wait
for a thread to panic/hit a breakpoint and then call
User::Notify(). You can then start up GDB on the PC and
connect to the Protea and start debugging the thread that
paniced/hit a breakpoint.
To put a hardcoded breakpoint into your code, use the line:
asm(".word 0xe7ffffff");
in your code. Run D_GDB without passing a command line, and
start your program. When the notify appears saying that
a program has hit a breakpoint, start up GDB on the remote
PC and start debugging...
3) Jane
1) Added KErrException. Threads which make illegal accesses etc. are
now panicked with this value.
2) Added RThread::RaiseException(TExcType aType)
For the time being, this just panics a thread with category
"Exception Raised" and panic number = the exception number
TExceptionType is obsolete, and will be retired at the next thaw.
3) Filled all user mode stacks with 0x29 to aid spy programs
4) Implemented the thread death notifer service. The class is
class RUndertaker : public RHandleBase
{
public:
IMPORT_C TInt Create();
IMPORT_C TInt Logon(TRequestStatus& aStatus,TInt& aThreadHandle) const;
IMPORT_C TInt LogonCancel(TRequestStatus& aStatus) const;
};
To use the class, create an RUndertaker and logon to it like so
RUndertaker u;
u.Create();
TRequeststatus stat;
TInt handle;
u.Logon(stat, handle);
User::WaitForRequest(stat);
When a thread dies, the status word is completed, and the handle is that
of the dying thread. To look at why the thread died, for example, you might
do the following...
RThread r;
r.SetHandle(handle);
if (r.ExitReason()==0x666)
{
...
As you now have a handle on the dying thread, it won't go away until
you close it.
r.Close();
Look at T_THREAD for examples.
NOTE: This service isn't guaranteed. If a thread dies while you are not
logged on to your RUndertaker, obviously you'll miss it - and there is a
window of opportunity after a thread has died & your status has completed
and before you get chance to deal with this and logon on again.
NOTE2: Matt will be implementing a more general form of this in his
RChangeNotifier class, which will complete to tell you that a thread
has died, but not tell you *which* thread.
4) Matthew
Fixed bugs: HA-207 (%J in TTime::FormatL should abbreviate in 12hour
mode) and HA-215 (CActiveScheduler::Add should assert parameter).
5) Graham
Partial implementation of a kernel millisecond timer which
now runs the buzzer. Do not be alarmed if buzzing sounds
different in this release.
Version 0.01.069
================
(Made by Jane, September 26th 1996)
1) Jane
1) Clients causing an exception are now panicked KErrAbort.
2) Possible fix for curtains bug. Any more reports of curtains
welcome (sort of.)
The bug was caused because of the change in behaviour such that
a client thread is still hanging around when the server processes
the disconnect. If the process creator had already closed its
process handle, then the process died immediately, but the client
thread was left. Then when the client thread eventually died, it
closed its chunks, which involved removing them from the (dead)
process's address space. BANG!
Now the chunk is removed from the process address space earlier on.
2) SteveG
1) Release 068 had a problem with the MARM custom DLLs,
which prevented the LEDs from flashing. Now OK.
3) Graham
1) When the kernel faulted, it used to continue to run and
possibly do all sorts of bad things.
For the time being, we just print a helpful message to
COMM1 and loop forever. (In the future we will reset.)
Version 0.01.068
================
(Made by Jane, September 23rd 1996)
NOTE - T_RDRV failed on certain bananas. We think that it is due
to a problem with the hardware - the door open interrupt is not
asserted for these fruit.
1) Graham
1) Removed nocallentrypoint declarations in MARM .OBY files
and added dll= appropriately.
2) Fixed HA-219 which caused the digitiser to stop working
after the sound driver had been used.
3) Added a system of cumulative inertia into the digitiser.
Consider a system where a physical movement of the pen
produces an actual Pen Move Event only if it has moved
more than 1 pixel. Call this an inertia of value 1. So,
if the digitiser has an inertia value of 3, then it only
produces Pen Move Events when a movement of greater than
3 pixels in any direction has occured. The system I am
now experimenting with is one where the longer the pen
stays in one place, the greater inertia it acquires. So,
normally, with the pen moving all the time, no inertia
effects are apparent. But, when the pen comes to rest,
then the inertia begins to increase by one unit for every
1/4s that it remains within its 'inert event horizon'. It
is currently set so that the maximum possible inertia
value is 5. Clearly, I can't tell if this is a valuable
system until some higher level apps start running with
this O/S. So, feedback on this subject is especially
welcome.
4) Speculative fix for HA-217 ('Curtains').
5) Exported Hal::DisableIrqsToLevel1() et al. from the kernel
6) Reworked the kernel exception interface (TException,Exc).
2) SimonB
1) Removal of F32 code from the EWINC library
1) Addition of a new TWINC directory with MAK files for building all the code in TBAS. (The CPP files
used are the ones in TBAS). The header files from TBAS have been copied into TWINC, but this could
be rectified by changing the #includes to reference "..\TBAS\..."
1) Addition of bld and run cmd for building WINC libs, and test code. Also for running the test code.
1) Changes to MNT additional verbs
winc build the libarries
wincall
wincdeb
wincrel
wincudeb
wincurel
btwinc build the test code
btwincall
btwincdeb
btwincrel
btwincudeb
btwincurel
rtwinc Run the test code
rtwincall
rtwincdeb
rtwincrel
rtwincudeb
trwincurel
1) Changes to EWINC MAK files and build cmd file to get Unicode variants to build and work. May still
need some more changes - (the mak files were completely stuffed with release builds compiling debug
code). It may be worth recreating all mak files again froms scratch
1) Changes to E32Initialise. With the file server in a separate Dll, the init code follows the WINS
init code method for the file server.
3) Jane
1) Added new RThread::Create which takes an open RLibrary, as discussed in EON defects -
IMPORT_C TInt Create(const TDesC &aName,TThreadFunction aFunction,TInt aStackSize,TAny* aPtr,RLibrary* aLibrary,RProcess* aProcess,RHeap* aHeap, TInt aHeapMinSize,TInt aHeapMaxSize,TOwnerType aType);
This function takes all possible parameters so that a thread with an open library
handle can be created in another process, sharing a heap etc. (If the RLibrary*, RProcess*, RHeap*
are not required, just pass in NULL as usual.)
The entrypoints of the library are called before the thread's entrypoint.
NOTE - obviously the thread cannot access the handle it has on the library, so the library
can only get its final close when the thread dies.
2) Fixed a bug to do with stack chunk creation. Improved the naming scheme for chunks.
3) Various E32 Proposals
- Processes unmarked by default
- Queues don't allow shallow copies
- CActive functions const
- RTest Console() accessor for iConsole
4) Improved the kernel server protection method, which was becoming more unsafe
with the addition of each new way of shooting a client thread. (Now if the kernel
server shoots a client, it should always leave KErrKernelServerLeave, after
stashing a suitable error to shoot the client with in K::ClientErrorCode)
5) Fixed a few situations where the kernel was shooting itself rather than the client.
6) Pervasive change, such that the Owmer() of a CObject - used in forming the
name - is correct for thread-owned objects.
If a semaphore A is owned by thread B in process C its name is now C::B::A
If it was owned by process C directly it would be called C::A
4) SteveG
1) Implemented control of the LEDs on the racks and P1. It is now possible to get your
red alarm LED on your banana to flash, but it will flash green. Please note that this
is not an E32 software bug
2) Changed all occurances of TheSuperPage().iTotalRamSize to TheSuperPage().iMaxFreeRam,
and added iTotalRamSize and iTotalRomSize to the SuperPage. iRamDriveSize is now
setup correctly, and these figures will be returned properly when using UserHal::MemoryInfo
3) Added ESpecialKeyBase and ESpeicalKeyCount to E32KEYS.H. Any scancode in this range passed
to the keyboard translator will be passed through unaltered, and can be used for the
on-screen keys facility provided by the window server
5) Morgan
1) Added RLibrary::FileName()
2) Corrected the key mappings for Func and Alt on the X86 build
3) Extended Library and Process RAM loading to share ready loaded code chunks. RAM loaded
Libraries can use ROM code chunks but currently Processes cannot. Suitable code chunks
are identified by matching their checksums.
5) Matthew
1) Implemented %lx, %ld etc for formatting TInt64s. Added TLex::Val functions for TInt64s.
Removed TLex::Convert() and TLex::ConvertList().
2) Given DThreads and DProcesses ids: essentially just a unique TUint. Threads and processes
can be now opened by their id.
3) Changed Hal::RomVersion() so that it now returns version number from the rom header on
Epoc platforms.
6) Pete
1) Changes to support Asci12-Rev2. (Still works with Rev1 though).
2) ATA Driver - Validation of partition entries in MBR now added.
3) ATA Driver - CHS and LBA addressing now supported (this allows us to work with Hitachi CF
card).
7) Rog
1) Introduced a rack only bug into hardware handshaking for the Serial driver. To facilitate a
timely E32 release the serial drivers will be re-released with C32. If you don't need h/w
handshaking or can get by on WINS, these drivers are just fine.
Version 0.01.067
================
(Made by Jal, September 7th 1996)
1) Jane
1) MMU fix to do with re-allocating linear space after RAM disk
has grown.
2) More build and mnt fixes.
3) Fixed HA-204, incorrect error given by in WINS library loading.
4) Fixed HA-205, bug in RThread::Create
5) Changed the Environment class, so that all environment variables are
stored and compared in UPPER CASE.
6) Changed ks_proc as requested by Colly so that names which are duplicates except
for generation are allowed.
7) Fixed HA-95, allowing the server to refer to the client thread when processing a
disconnect message
8) Fixed HA-211, RProcess::Open stops process from being destroyed
9) Fixed HA-210, runtime checks on queues
10) Implemented basic exception handling - i.e. shooting the offending thread. Fixes
bugs HA-137 and HA-157
11) Fixed HA-212, RLibrary::Load problems after creating thread in foreign process
2) Matthew
1) Bug fixes HA-188, HA-198 and HA-202. Also fixed a time-mangling bug on
the rack, which effected relative timers due to off after more than
about 30 seconds, and a bug which caused the sound LDD to panic.
3) SteveG
1) On the WINS build, F10 and F11 now send EKeySliderDown and
EKeySliderUp keypresses. F12 key is now the OFF key and
sends an EKeyOff keypress. The UserHal::SwitchOff() function
now minimizes the WINS window, simulating switching off.
Maximising the window will simulate switching on by sending
a TEvent::SwitchOn. The Shell, or whoever switches off,
should just look for EKeyOff and then call UserHal::SwitchOff
which will then work with the correct key on all platforms
2) Implemented the TTime::Set(TDesC& aString) function which
allows setting or constructing a TTime from a date string
in the format YYYYMMDD:HHMMSS.MMMM - any part of the string
may be omitted, but either the dot or colon must be present.
Any parts of the string which are omitted are zero'd.
3) Added suitable values to be returned by the WINS memory
functions in UserHal::MemoryInfo()
4) Fixed problem with supplying long category names when
panicing a thread - only the first 16 characters used
4) Morgan
1) Fixed HA-191 by not passing the placement new as an argument to
CArrayFixBase::ResizeL.
Fixed HA-187. Under WINS Mutex are signaled in thread CleanUp code
rather than in the DPlatThread destructor.
Fixed a Bug in Time::FormatL to prevent the %C directive overflowing
the descriptor and causing a panic.
2) CArray???::FindIsq returns an index of 0 if the array is empty.
3) User::IsRomAddress is back. Again.
Version 0.01.066
================
(Made by Jane, August 23rd 1996)
1) SteveG
1) Re-fixed bug in ARM Mem::Copy and Mem::Move, which got
lost prior to releasing 0.01.065. Refixed the test
software T_FUNC.CPP as well. The bug meant that
Mem::Copy and Mem::Move didn't return the correct
address if the source and target were the same
2) Debugger fixed to take into account the changes in the
way threads start - the change meant the debugger no
longer set a breakpoint at the start of the thread
when starting a debug session
2) Matthew
1) Fixes to sound LDD and arm PDD.
3) Jane
1) Various build fixes, especially to WINC
Version 0.01.065
================
(Made by Jane and Jal, 17th August 1996)
IMPORTANT NOTE:
To avoid delaying the chain below us, this version of E32 has been released with
2 known bugs and one possible bug. They are as follows...
1. Problems on ARM build when the RAM drive grows beyond 1 Meg in size. To avoid this
bug, this release of E32/F32 implements a maximum size of 1 Meg for the RAM drive.
2. T_SOUND fails on the ARM platform.
3. T_CPER (CPeriodic test) fails on EPOC platforms. However, I believe this is not a bug
- Graham fixed the timers but the test code is out of date.
4. There are WINC test code problems which aren't worth delaying the release for.
1) Graham
1) Added microseconds to the system time. This required a
fix to TEiger::RtcTickCount() to counteract an Eiger
hardware anomoly - the SYSFLG 64ths do not roll over to
zero at the same time as the RTC rolls over its seconds.
It does this on the half-second instead. Enhanced T_TIMER
to test this roll-over effect.
2) Changed the MUTATBLE errors in E32DEF.H
3) Updated EMARM.REL to include the P1 variant device drivers
4) Fixed warnings in T_BUF.CPP.
5) Fixed intrnal TTickLink services to work with microseconds
instead of tenths. In order to help device-driver writers,
I have changed the name of the functions to
PeriodicInMicroSeconds and OneShotInMicroSeconds.
6) IMPORTANT
I have changed the way in which the timing services in E32 work.
Although the changes mean that more of the underlying mechanism
is exposed, it is hoped that this policy will result in more
programmer-friendly services once the theory has been explained.
The theory:
The timing services are based upon the regular pulse that animates
the operating system. The time between pulses is called the tick
period and this will vary according to the platform being used.
The tick period for WINS, for instance, is 100000 uS, while for
MARM it is 15625 uS.
A new service has been introduced which enables the programmer
to determine the length of the tick period in microseconds:
TInt UserHal::TickPeriod(TTimeIntervalMicroSeconds32& aPeriod)
But, for the purposes of the subsequent discussion, I will call
this length of time T.
So, we have the following situation:
---|-----------|-----------|-----------|-----------|--
<----------->
T
At any point in time, a program may request a timing service
such as User::After(x). This function should return x uS later.
Let us show this on the diagram and introduce the term y.
User::After(x)
|
---|-----------|-----------|-----+-----|-----------|--
<-----------> <----->
T y
So, y represents the amount of time between the timing service
being requested and the next system tick. It is clear that y may
be any duration of time less than or equal to T.
Let's explore the behaviour of User::After(x) for a range of
different values of x.
x=0
---
This will return on the next system tick. So, if you ask
for 0 uS, you actually get y uS.
User::After(0) Completes
| |
---|-----------|-----------|-----+-----|-----------|--
<-----------> <----->
T y |
x<T
---
This will also return on the next system tick. So, if you
ask for T-1 uS, you actually get y uS.
User::After(T-1) Completes
| |
---|-----------|-----------|-----+-----|-----------|--
<-----------> <----->
T y |
x=T
---
This will cause a wait of 1 tick to be set up. So, if you
ask for T uS, you actually get y+T uS.
User::After(T) Completes
| |
---|-----------|-----------|-----+-----|-----------|--
<-----------> <----->
T y |
x=2T-1
------
Just to expose the workings a little more. 2T-1 gets divided
by T to see how many ticks to wait. Any remainder is discarded.
Now, in integer maths, (2T-1)/T = 1. So, we set up a wait of
1 tick. So, if you ask for 2T-1 uS, you actually get y+T uS.
User::After(2T-1) Completes
| |
---|-----------|-----------|-----+-----|-----------|--
<-----------> <----->
T y |
x=2T
----
2T/T = 2. So, we set up a wait of 2 ticks. So, if you ask
for 2T uS, you actually get y+2T uS.
User::After(2T) Completes
| |
---|-----------|-----------|-----+-----|-----------|-----------|--
<-----------> <----->
T y |
Notes
-----
a. It is a slightly irksome feature of this system that if you
ask for x uS, you may end up waiting less time than x, or you
might end up waiting more time than x. It all depends on
the value of the 'wobble factor', y.
As mentioned above, if you ask for T-1 uS, you actually
get y uS. Now y could be, in fact it will in all probability
be, significantly less than T-1. On the other hand, if you ask
for T uS, you get T+y uS, which means you will be waiting a
longer time than that requested.
It is impossible, then, for the operating system using this
system to guarantee that it will wait at least as long as the
period of time requested. If this is the sort of guarantee you
need, then you will have to arrange it yourself by
adding (T-1) to your request. You can determine T using the
UserHal function mentioned above.
b. In some situations the value of y is known. Consider a
periodic timer. After the first callback, you know that
you are now synchronised to the system tick and that y
is just less than T. The 'wobble factor', in this situation,
can be taken allowed for by the programmer. So, if you start
a CPeriodic with a delay of 0 uS and an interval of 0 uS,
you will get one which immediately starts calling back on
every system tick.
c. Timing test programs commonly want to synchronise to the
system tick in order to remove the 'wobble factor' from
their calculations. This can now be achieved using User::After(0).
2) Jane
1) Added new User class layout from Martin Tasker.
2) Re-fixed WINS RDebug.Print (HA-170) which had become un-edited after
I put it in!
3) Added CObjectIx::Count() to return the total number of
objects in a CObjectIx.
4) Added RThread::HandleCount(TInt& aProcessHandleCount, TInt& aThreadHandleCount) const;
This returns the total number of handles open in a thread and
its owning process.
5) Added RHandleBase::HandleInfo(THandleInfo* anInfo);
This function fills in a THandleInfo structure with
information about the current handle.
class THandleInfo
{
public:
TInt iNumOpenInProcess;
TInt iNumOpenInThread;
TInt iNumProcesses;
TInt iNumThreads;
};
iNumOpenInProcess = the number of times the object given by
the handle is open in this process.
iNumOpenInThread = the number of times the object given by
the handle is open in this thread.
iNumProcesses = the number of processes which have a handle on the object.
iNumThreads = the number of threads which have a handle on the object.
6) Added an extra defaulted parameter to many RHandleBase derived classes' Create calls.
For example, from RMutex...
TInt CreateLocal(TOwnerType aType=EOwnerProcess);
TInt CreateGlobal(const TDesC &aName,TOwnerType aType=EOwnerProcess);
The owner type specifies whether the handle created is
thread or process relative. (The default is process-relative
as before.)
Process-relative handles may be passed between threads in
the same process without duplication. The handles are held
in the process, and are not closed when the thread dies, so
the objects will hang around until the process dies.
Thread-relative handles need to be duplicated between
threads in the same process, but the handles will be closed
when the thread dies.
IMPORTANT NOTE 1
Due to design considerations, RLibraries and RTimers are
now always thread relative handles. You will need to
duplicate them if they are shared between threads. RLibraries
should now unload when their access counts become 0.
Fixes bug HA-170
7) Fixed X86 crash on test failure.
8) Fixed HA-177 - panicking a dead thread kills the caller.
9) Fixed HA-180 - panic enum was incorrect.
10) Dll loading changes.
RLibrary load api becomes...
TInt Load(const TDesC &aFileName,const TDesC &aPath=_L(""));
If aFileName is a full filename with path, then aPath will be ignored,
and the only load attempted will be that of aFileName. If the dll is not
at the specified location, the load will fail.
If aFileName is just a rootname, (e.g. _L("ECONS.DLL")), then the dll
will be searched for in the following order - specifed path, followed by
the system directory on each attached drive.
IMPORTANT - old calls with the extension specified as the second parameter
e.g. lib.Load(_L("MYDLL"),_L(".DLL")) are now likely to fail as the second
parameter is now interpreted as a path.
11) Dll entrypoints
For the first time under EPOC, DLL entrypoints are now called.
When a process is loaded, all the DLLs to which it is statically linked
get their entrypoints called with the value EDllThreadAttach. (This call
is on behalf of and in the context of the main thread.)
When a new thread is created in the process, the statically
linked DLLs' entrypoints are again called with EDllThreadAttach in the
context of the newly created thread.
When each thread in the process dies, the entrypoints are called with
EDllThreadDetach in the context of that thread.
Unlike Windows NT, I do not call entrypoints with EDllProcessAttach and
EDllProcessDetach. This is because the function pair Dll::GlobalAlloc()
and Dll::GlobalAllocated (currently unimplemented) allow the DLL to
discover its first ever call, if necessary. This is though to be more
useful in our system then knowing a first call per process. Similarly
Dll::SetTls() and Dll::Tls() enable the DLL to discover its first load
within a thread.
When a thread loads a DLL dynamically via RLibrary::Load(), the DLL's
entrypoint is called, if and only if this is the first load of this DLL
within the thread. (So if a process is statically linked to FRED.DLL and then
a thread does an RLibrary::Load of FRED.DLL, then FRED's entrypoint is not called
in response to this load.)
The entrypoint is called with the value EDllThreadAttach in the context of the
thread loading the DLL.
The above situation is further complicated by DLL's themselves being statically
linked to other DLLs. When a DLL is loaded, I make a list of unique DLL entrypoints
in the statically linked chain, and call each of them once only. So if DLL
A is linked to DLLs B, C and D, and then B is linked to X, C and Y, and D is
linked to B, C, and Z, then the entrypoints for A, B, C, D, X, Y and Z are called
once each when A is loaded.
If A were statically linked to just B and C, then when it was loaded just the
entrypoints for A, B, C, X, Y would be called. If the same thread then went
on to load D, then the entrypoints which had not already been loaded in that
thread would be called - i.e. D and Z.
All this DLL entrypoint calling can get very time-consuming in the case of
many of the DLLs in the ROM which have no need for entrypoints to be called.
In this case, add "nocallentrypoint" after the DLL's specification line in the
obeyfile, and no entrypoints will be called for that DLL or any DLLs below it
in the static linkage chain.
All drivers should have "nocallentrypoint" specifiers.
E.g. primary=\xxx\ekernd.exe sys\kernel.exe nocallentrypoint
IMPORTANT NOTE 2
Although for many of the files "nocallentrypoint" is optional, it is compulsory for
kernel.exe and efile.exe. Bad things happen if the kernel's entrypoint is called
when something which is linked to it is loaded, and the file server doesn't take
too kindly to it either!
Also, note that the name of efsrv.dll has changed in the obeyfile. It's probably
best to cut and paste from the released E32 obeyfiles.
There are new versions of ROMBUILD & PETRAN which support the above obeyfile
changes and new structures necessary for the calling of DLL entrypoints.
12) Due to the new directory scheme, it has been possible to remove
RLibrary::LoadExact. RLibrary::Load now does a load exact - i.e. it does no
name mangling on the name passed in as a parameter.
RLoader::LoadExact has been renamed to RLoader::Load. This will affect you
if you have one of those "mini-loaders" for WINS which allows you to live
without the file server.
3) SteveG
1) Altered all builds of E32 to use the new directory structure \Epoc32\Build and
\Epoc32\Release
2) Added SetModifierState function to KeyTranslator:
TInt SetModifierState(TEventModifier aModifier,TModifierState aState)
which alters the supplied modifier according to the supplied state.
TModifierState is defined in E32Keys.h and is one of ETurnOnModifier,
ETurnOffModifier or EToggleModifier.
3) Fixed bug in KYTRAN where left and right modifiers were not being set
4) Implimented DigitizerCalibration functions, and wrote simple text shell
calibration program. A calibrator will need to be written as an Eikon app.
A calibration program should:
Call UserHal::CalibrationPoints(TCalibration& aCalibration) which will return
three screen coordinates at which points should be plotted. The user should
touch these three points, and the values returned by the digitizer for the points
actually touched should then be returned to
UserHal::SetXYInputCalibration(TCalibration aCalibration)
Note that a TCalibration actually has 4 points - the 4th is ignored by
SetXYInputCalibration
Suitable default calibration values incorporated into each ARM variant, so
the calibration on your yellow jobbie should be more or less correct without
calibrating. If yours is wildly off, please let us know
5) Added profiling support to all platforms, and increased the number of nested
profiles to 64. You can specify a range of profiles to clear/read results of.
Results returned in microseconds, but only recorded at tick resolution. This
avoids changing the API when profiles are measured more accurately.
Using profiles:
Decide on the profile numbers you are going to use, between 0 and 63. You can
use any of them, unless someone else is using some in the same ROM build.
Reset the profiles you are using, by:
RDebug::ProfileReset(aStart,aCount);
which resets aCount profiles starting from profile number aStart.
Surround the code with __PROFILE_START(n) and __PROFILE_END(n) where n is
a number of your choice between 0 and 63 inclusive. You can nest the profiles.
Return the results using:
TProfile profile[n]; // n is the number of results you are reading
RDebug::ProfileResults(&profile[0],aStart,aCount);
which writes the results of aCount profiles starting with profile number
aStart into your profile array.
TProfile is currently defined as:
class TProfile
{
TInt iTime;
TInt iCount;
};
You need to include E32SVR.H in your code to use profiles
6) Moved the keystroke data dll to the variant level, allowing
different keyboard layouts for each implementation. Changed
the P1 version to give correct keystrokes and modifiers on the
yellow jobbies.
On the real Proteas:
Fn sets EModifierLeftFunc and EModifierFunc
Menu sets EModifierLeftAlt and EModifierAlt
Fn-Esc sends an EKeyOff keypress
Fn-M sends an EKeyDecContrast keypress
Fn-, sends an EKeyIncContrast keypress
On B and C racks:
Alt sets EModifierLeftAlt and EModifierAlt
Alt-Esc sends EKeyOff
Alt-, sends EKeyDecContrast
Alt-. sends EKeyIncContrast
On WINS:
Left Alt sets EModifierLeftAlt and EModifierAlt
Right Alt sets EModifierFunc and EModifierLeftCtrl
and EModiiferCtrl (the setting of Ctrl is a Windows
funny and can't be prevented AFAIK)
7) Fixed bug with ARM coded Mem::Copy and Mem::Move where it
returned the wrong value if the source and targets were the same
4) AdamG
1) Much of ECOMM re-written to speed up data paths and fix all known serial driver
bugs.
2) Implemented reference counting of interrupts in all serial PDDs for all hardware
and platform variants.
3) Added use of NT Critical sections to WINS Serial PDD to eliminate multiple
completion bugs.
4) Corrected signal polarity in all MARM serial PDDs.
5) Matthew
1) Changes to TLocale.
Most importantly there are now four date separators and four time separators, one
for the beginning, one for the end and two potentially different internal
separators. The convention is that the NULL character represents no separator.
This has had a knock on effect on the TTime::FormatL() function: now '%:0' means
first time separator, '%/3' means the forth date separator etc.
Additionally there is now an AmPmSymbolPosition indicator, and different distance
units for different contexts: one general and two for short/long distances.
2) Added an RChangeNotifier class, for notifying users of global changes. At the
moment changes to TLocale and midnight crossover are the only things which are
notified.
To use call Create() and then Logon() with a TRequestStatus. This first Logon()
will complete straight away with the value EChangesAll. Subsequent logons will
complete next time there is a change and the status will contain a bitfield
indicating what has changed.
3) Made certain TInt64 functions inline. Also changed the default constructor so
that it does not assign zero.
4) Changed the X86 build so that getting the time returns fractions of seconds. The
time is now given to the nearest tick (which occur at just over 18.2Hz on the X86).
5) Added unary minus operators to TPoint and TSize.
6) Changes to sound driver: Fixed a bug that caused a crash when you tried cancelling
playing alarm sounds. Stopped it from panicking in Wins if you turned beeps off
from the control panel.
6) Jal
1) Various internal changes to TLocalDrive and media drivers.
2) Added operator[] to CObjectIx
7) Morgan
1) More RThread test code under Suspend/Resume conditions
and fixes to WINS and EPOC threads.
2) Moved User::IsRomAddress to the file server where it is now called
RFs::IsRomAddress
3) Added User::TickPeriod
4) Added physical screen size (in twips) to MachineInfo
8) Steve & Jane
Implemented new Epoc32 directory structure (described in more detail on Notes.)
All makefiles should be changed so that the intermediate files are built to
e.g. \Epoc32\Build\WINS\E32\Deb for exes and \Epoc32\Build\WINSD\E32\Deb for dlls.
The executables and dlls themselves should be built to
e.g. \Epoc32\Release\WINS\Deb. (NOTE - there is no "E32" in this directory path -
all releasables for a given build go to the same directory.)
E32 mnt makework currently makes the whole Epoc32 structure - this can be used to
get started.
mnt gettools gets tools to Epoc32\Tools. This should be added to your path from
the control panel. All existing paths to \tools should be removed if possible
- if not possible then the e32 tools themselves should be removed from any tools
directories in your path.
\E32SYS should also be removed from the path.
The scheme whereby executables can be installed under Epoc32\WINS\Z and appear as
if they are under Z: is not in this release, but will be in the next one. For the
time being, the old scheme with romfile.bin holds.
NOTE: GCC only runs from C:\Epoc32\GCC\BIN, so if you are working on a substed
drive, you will still need an Epoc32 directory with GCC in on C:.
Version 0.01.064
================
(Made by Graham, 26 July '96)
1) Graham
1) Integrated WINC into MNT.CMD. This version is the first
to include a release of WINC.
2) Implemented a special version of RDebug::SupervisorMode
which suits the purposes of REPRO.EXE
3) REPRO.EXE now works. It communicates with a program called
PREPRO.EXE which runs on the PC. You can get this program
from S: using GETREL PTOOL PEIGER 104 in your \TOOLS
directory. You may type PREPRO for command line options, but, in
general, you merely type PREPRO imagefilename.IMG. The PC will
then wait for the Protea to lead communications.
Now run the REPRO program on your Protea. Make sure you do
not remove mains power during the reprogramming process.
Progress will be reported on the screen of the PC.
If an error is detected during the reprogramming process,
then the program on the Protea will just restart - erasing
all the flash chips again and then programming them.
This means that if you interrupt the PC program, no
disaster will occur. If you decide you are programming the wrong
image in the middle of the process, then just escape from the PC
program, get the correct image on your PC and restart
PREPRO with this image. By the time you have done this,
the Protea will have timed out and will have decided to
restart.
4) Added Gillian's bug fix for TTime::MonthsFrom() and
TDateTime::SetHour()
5) Changed EWSRV.EXE so that it hunts for ESHELL.EXE on all
drives from A: to Z:
6) Upgraded BOOTROM.BIN to the new E32TOOLS(36)
2) SteveG
1) Fixed bug in Des::AppendNumUC which converted the whole
descriptor to uppercase rather than just the appended number
2) Added simple profiling for ARM builds, which counts the
number of times a function or section of code is executed
and the time taken in ticks. A later version will be
more accurate (using a 512kHz timer).
To use this, surround the section of code to be tested with:
__PROFILE_START(n)
and
__PROFILE_END(n)
where n is a number between 0 and 7 inclusive. You use upto
8 profiles, which can be nested if necessary. You will need
to use the RDebug class to access the results as follows:
TInt E32Main()
{
RDebug debug;
debug.ProfileReset(); // Clear readings & reset counts
__PROFILE_START(0);
<test code>
__PROFILE_END(0);
SProfileInfo profile;
debug.ProfileResult(profile);
}
SProfileInfo and RDebug are defined in E32SVR.H.
SProfileInfo is defined as:
struct SProfileInfo
{
TInt iCount[8];
TUint iTimes[8];
}
RDebug::ProfileResults returns the counts and times
for all 8 profiles, even if you are only using 1 profile.
3) ARM coded the following E32 routines which were dog slow,
and changed the relevent descriptor functions to use these
new functions rather than their own copying code
Mem::Copy
Mem::Move
Mem::Swap
Mem::Fill
Mem::Compare
TDes8::AppendNum
TDes8::AppendNumUC
and added ARM code for signed or unsigned integer divide
by 2,4,5,7,8,10 and 16, which will improve the modulo
function as well.
Speed improvements, TDes::AppendNum()
TDes8::AppendNum has been optimised for hex, decimal, octal
and binary conversions, and is improved for all other
conversions as well.
TDes::AppendNum(num,EHex) is now 614% faster
TDes::AppendNum(num,EDecimal) is now 611% faster
TDes::AppendNum(num,EOctal) is now 751% faster
TDes::AppendNum(num,EBinary) is now 1322% faster
The uppercase conversions will be the same speed as the
lowercase ones, but the %age increase will be greater due
to the fact that the string is worked out in uppercase rather
than converting the descriptor to uppercase after the conversion,
as was done in the CPP version.
Speed improvements, Mem functions
Mem::Fill is now 236% faster for word aligned buffers, and
around 400% faster for non word aligned buffers, which were
slow before
Mem::Swap is now 975% faster for buffers which have the same
word or non-word alignment and around 160% faster for buffers
which have different alignments to each other
Mem::Move and Mem::Copy are 330% faster for word aligned
buffers. For buffers with the same byte alignment, the speed
increase is around 600%. If the two buffers have different
alignments to each other, the increase is around 157%.
Mem::Move will be slightly faster than Mem::Copy as it knows
the buffers are aligned by definition of the function.
Mem::Compare: no figures yet, but descriptor compares are
around 220% faster, although this depends on what you're
comparing
Speed improvements, Integer division
No speed measurements on this, but for divide by 16,8,4,2
should be pretty big, and the divide by 10 seems to be around
200% faster. Much hair missing after realising that the GCC
routine __umodsi3 in UP_GCC.CPP (which returns the remainder
of a division), doesn't actually 'destroy r3' as it states in
the cpp file, it returns the quotient in r3, which is relied
upon in divide routines which call __umodsi3.
4) DeBugger. Drastic unimprovements to get a working version,
which is now what we have :-)) The debugger will now not
single step into EUSER or certain other DLLs, as this
causes problems on the ARM build. As the ARM processor
does not have any single step or trace mode, all single
stepping is done by looking at the next instruction to
be executed, working out where the PC will be if that
instruction is executed, and setting a breakpoint at that
address. Stepping into EUSER or certain other DLLs causes
certain death as any thread could hit that breakpoint
before the thread being stepped. Although code has been
written to silently step any thread over a breakpoint
it shouldn't stop at, serious problems occur if the
kernel hits the breakpoint while in supervisor mode or similar.
A document on how to use GDB is on R:\E32\DOCS\GDB.DOC.
Contact me on x625 if you are daring enough to try and use
the most excellent GDB software.
If you wish to use the debugger, you need to include
D_GDB.EXE in your ROM build. Please ensure this is AFTER
euser.dll in the ROM and BEFORE anything you debug.
The debugger will not single step into any part of the ROM
that is before D_GDB.EXE. This is a quick 'bodge' to get
around the problem mentioned above, and allows a quick
method of changing what you can and can't single step
into.
3) Rog
1) Added CAsyncOneShot and CAsyncCallBack. These two active object
derived classes are like a single use CIdle. They can also be used
to transfer a thread of control between two threads. Because of the
way they work both classes are added to the current active scheduler
when they are created.
2) Added delta timer class. CDeltatimer is a resource efficient timer
based on a delta queue and a single RTimer. Requests are identified by
TTimerHandles which are returned from CDeltaTimer::Queue and may be
passed to CDeltaTimer::Remove.
3) Added the fast timer driver to the source release. Due to beta
deadlines work on the fast timer has ceased.
4) Matthew
1) Various changes to the sound LDD and PDDs. The main change is that
buffering in now done entirely within the LDD.
2) Renamed TTime::SetNow() to HomeTime(); TTime::SetUniversal() to
UniversalTime() and User::SetSystemTime() to SetHomeTime(). The
"system time" is now universal time ie GMT. Home time takes into
account any daylight saving and time zone.
3) Changes to TLocale - added SpaceBeforeAmPm and changed the way
daylight saving is handled.
4) Fixed bug in second queue which caused absolute timers to run twice
as fast as they should have done.
5) Implemented RHeap::CompressAll().
5) Jane
1) Added changes from Steve Townsend to optimize region code.
2) Added timer fixes to thread clean-up code
3) Fixed the RDebug death under WINS, and implemented RDebug::Print using
OutputDebugString to the debug window.
6) Pete 1) Pc card Controller now allows allocation of card memory chunks smaller
than page size.
2) Various omissions to Pc Card Controller now attended to.
3) Improvements to media change handling.
4) Internal ram drive supports size changing.
5) TLocalDrive::Format() now calls back during formatting.
6) TLocalDrive::Caps() returns more than just size.
7) Morgan 1) Thread and Process protection.
The kernel, file server, null thread, supervisor are now marked as
system threads/processes. They are also Protected.
Any attempt to Panic, Kill, Terminate, SetPriority on a protected thread
will shoot the caller.
A thread's status can be changed with:
RThread::SetProtected(TBool)
RThread::SetSystem(TBool)
RThread::SetNotifyIfDie(TBool) (was SetServer)
RThread::SetMark(TBool)
Similar functions exist for processes.
The Exec functions (Set)Mark, and (Set)Server have been replaced with
(Set)Flags functions for threads and processes to implement this.
T_PS.EXE displays thread and process status.
2) AppendFormat and AppendFormatList changes.
Both can now take a TDes[8|16]Overflow handler which is called when the
formatting operation would write to the descriptor beyond its max length.
When this happens and no overflow handler is supplied, the default action
is to panic.
3) TTime::Format has become TTime::FormatL
4) Added CServer *CSession::Server() to return the session's server.
Added protected member TDblQueIter<CSession *> CServer::iSessionQ, an
itterator over the server's sessions.
5) Name changes
TTimeIntervalShortMicroSeconds -> TTimeIntervalMicroSeconds32
AfterInMicroSeconds -> After
TStartup -> TMachineStartupType
and some Americanisations
6) Defined __ARRAY_NO_PTRS__
and *_CAST operators
Changed __ASSERT_*(c,p) to use (... p ,0)
8) Removed huffman encoding/decoding from TBuf
9) Implemented User::IsRomAddress(TAny *)
10) Added a checksum member to TRomHeader
Version 0.01.063
================
(Made by Graham 3 July '96)
1) SteveG
1) Applied patches to the GCC tools and rebuilt them all, with lotsa
help from Nick Twyman. You now no longer need template instantiations,
and the code saving seems to be somewhere between a massive 8 and 13%,
although the exact figure will vary between projects. You will need
to remove all occurances of 'template class.....' from your .cpp files.
2) Altered the whole of E32 to compile with the new tools, removing every
'template class...' line from all the source files, altering all the
MAK files etc. The new compiler/linker are a lot more nit-picky, and
you will experience several warnings such as 'class xxx only defines
private constructors and has no friends' or 'taking address of temporary'.
Handcrafted ARM MAK files will need changing by hand, v033 of MAKTRAN will
take care of any changes for you. Any handmade ARM MAK files will need
changing as follows:
change all occurances of -m6 to -mcpu=arm710 -mapcs-32 and remove all
instances of -fno-implicit-templates. Add in -fvtable-thunks after the
-fcheck-new flag. To remove the warnings 'class xxxx only defines
private constructors and has no friends' add in the flag
-Wno-ctor-dtor-privacy after the -Wall flag.
If anyone has any problems with the new tools, please hesitate to
contact me on x625.
3) Wrote various benchmark tests to identify areas of E32 that could
improve with being written in ARM code. Start made on testing speed
increases for various descriptor/memory/number functions in ARM code.
4) Debugger (Arrrrrrrrrgh :-(
Source level debugging now possible to some extent running a debug
.exe file from the E32 text shell (if you can bear to use Gdb).
No success with an eikon app yet. Identified some problems caused
by single stepping through user functions which my breakpoint
handler uses (memcopy, array/descriptor functions etc). The first
thing my breakpoint handler does is to clear any breakpoints in
the ROM, but in doing so it cannot use any functions which might have
breakpoints set in them.
2) Matthew
1) Changed RThread::Read() and Write() so that they leave on errors.
This fixes HA-158 - CSession::WriteL(...) panics caller.
2) Added RThread::SetInitialParameter() and RThread::GetHeap(),
fixing HA-63, so you can now create an RThread, find its heap,
alloc a cell in that heap, pass the pointer to that cell as the
parameter to the thread and the thread can call User::Free on it.
3) Made KCurrentThreadHandle have the NoClose flag set, so that
Close()ing an RThread which hasn't been Create()ed is harmless.
4) RThread and RProcess::LogonCancel() now return KErrGeneral if
you are not logged on.
3) Graham
1) Built and released Protea Rev 1 (P1) variant of MARM.
2) Made WeekNoInYear and DayNoInYear const correct.
3) Removed 'API Freeze Technology'
4) Added the REPRO program which must be included (In PETRAN
format) in all P1 variant ROMs. NB this program does not
work yet.
5) Re-included Andrew Theolke's fix for Single Queues. This
means that everyone will have to remove their work-arounds
6) Fixed the HAL API problem with UserHal::BacklightBehaviour
7) Reintroduced stack frames into the debug MARM builds of EKERN
and EUSER.
4) Jane.
1) Fixed linear address allocation problem with hardware chunks.
2) Stopped a false read of CMOS data/time information under X86
killing the kernel.
3) Fixed bug HA-150 - Rng was returning T rather than TBool
4) Removed J Day hacks and old functionality for RAM loading
of exes and dlls, and added support for new E32Image format etc.
IMPORTANT NOTE - You must now update to the latest version of E32TOOLS. This
version of E32/F32 is incompatible with versions of tools pre 029.
5) Morgan
1) Added WINS Led simulation. To turn the Leds on and off use:
UserHal::ModifyLedMask(TUint aClearMask, TUint aSetMask);
with the masks, KLedMaskRed1 and KLedMaskGreen1
2) Removed the protea bitmap from the kernels WINS resource.
The bitmap is now loaded from \E32\KPWINS\PROTEA.BMP at runtime.
3) Implemented TSecondQ::SystemTimeChanged()
User::SetSystemTime() now completes all pending timers on the
K::SecondQ with KErrAbort.
4) Added DTimer::Abort() to support this.
Version 0.01.062
================
(Made by Graham, 31st May 1996)
1) Graham Fixed MARM Debug mode
2) Pete Added Media change handling. This allows CF cards to
be inserted or removed without the need to reset. All
that is now required is that the DOOR switch is
depressed during these operations.
NB Do not attempt to use the CF card (or even boot up
a rack with a CF card inserted) if your rack does not
have a special capacitor fitted to counteract a fault
in the ETNA chip (ASIC12)
Version 0.01.061
================
(Made by Graham, 30th May 1996)
1) Jane
1. Implemented E32 Proposal: TDes8::Append(const TDesC16&)
2. Implemented E32 Proposal: calling RMessage::Complete twice panics server not kernel
3. Implemented E32 Proposal: priority enumeration for active objects
4. Fixed bug HA-93: referring to a dead thread panics caller
2) Matthew
Fixed bug HA-102: K::BeepComplete can be catastrophic
3) Rog Added IrDA support to serial LDD and COM1 PDDs
Enabling Irda will automatically set framing and
handshaking to SIR standards (i.e. 8N1 None)
Added CheckConfig()=0 to PDDs this allows PDDS to
furtle with the default configuration before the
driver is created (in specific it allows the Etna
driver to disable the Fifo.)
4) Pete Added ATA media driver for Compact Flash cards
(MEDATA.PDD). This allows read/write/format of CF cards
via TLocalDrive. However, media change interrupts aren't
handled yet. Therefore racks must be powered down or Reset
before inserting or removing a card to remove power
from the CF card socket.
NB Use E32TOOLS(028) - this release contains a .EXE which exposes
a bug in earlier versions of ROMBUILD. You should also use these
tools because the new MAKTRAN causes -fcheck-new to be introduced
into the gcc compiler options.
Version 0.01.060
================
(Made by Graham, 23rd May 1996)
1) Pete
1. General enhancement to TLocalDrive and its corresponding
kernel side objects to support Media Drivers. TDriveBase/TPlatDrive
now replaced with TLocDrv which is platform independant.
2. TLocalDrive::Connect() can now take a reference to a
media change flag (TBool).
3. Internal Ram Drive now implemented using Media Driver.
4. Further improvements to RPcCardController.
2) Rog
1. All but a complete re-write of serial LDD. Throughput much
increased.
2. Support for COM1 on RackC is now available from the new
DATXPC1.PDD.
3. Hardware handshaking is currently broken.
3) Graham
1. Etna support fixed.
2. Removed redundant .FRZ files
4) Jane
1. Added support for RAM loading of dlls and exes. Currently entrypoints
are called in the same manner as for ROM exes and dlls, i.e. only once
for a process attach, and never for a thread attach/detach, or a process
detach.
IMPORTANT NOTE: To support this, the format of the rom headers has
changed, and there are new rom building tools - see E32TOOLs release notes.
The old tools are incompatible with E32 060.
2. Added RDebug::Print(TRefByValue<const TDesC> aFmt,...) which outputs
text to COM1 from user side code as an aid in debugging.
Version 0.01.059
================
(Made by Colly)
1) Fixed RLibrary::LoadExact() which would not load more than 1
DLL at a time.
Version 0.01.058
=============[==
(Made by Matthew)
1) Colly
1. Changed the _S8,_S16 and _S macros to return
const TText*
rather than
TText*
which was allowing writeable descriptors to be constructed illegally
over strings. i.e.
TPrtC(_S("Test string"));
Bad news as strings are in the text segment and read only.
Compiler will now refuse to compile the above code.
2. Renamed class TGuid to TUid and changed the representation to just
a signed integer (to keep Bill happy). Added the class TUidC where
C stands for constructor which just has two constructor, a default
constructor which effectively sets the UID to KNullUid and one
taking an integer. Given a uid of 0x10000000 then TUidC(0x10000000)
will construct the right UID. KNullUid is unfortunately implemented
as a #define to avoid class consts.
Everywhere that guid was used has now been changed to uid which
effected RLibrary and the registry functions.
Renamed the uid test DLL from T_UID to T_DUID and the test program
from T_GUID to T_UID.
3. Changed CObjectCon::FindByName() and CObjectCon::FindByFullName()
to use MatchF() instead of Match(). CObject::FullName() used to
concatenate Owner().Name() with Name(). It now concatenates
Owner().FullName() with Name().
4. Changed TCreateProcessInfo and TCreateLibraryInfo to have a TUid
which in due course will be supplied by the loader from the
.exe and .dll headers. Added the TUid to DProcess and DLibrary.
Also added iGeneration to DProcess so that more than one process
can be run at the same time.
5. Changed the name of a library to include the TUid::Name().
If library t_test.dll is loaded and it has a TUid of 0x10000001
then its name will be:
t_test[10000001]
6. Changed the name of a Process() to include the TUid::Name()
followed by iGeneration as a 4 digit decimal value. If process
t_test.exe is loaded and it has a TUid of 0x10000001 and
it is the the third copy running its name will be:
t_test[10000001]0002
7. Added Mem::Crc()
which performs the 16 bit CCITT checksum. It should be called
for a descriptor as follows:
TPtrC8 des=_L("Check string");
TUint16 crc=0;
Mem::Crc(crc,des.Ptr(),des.Length());
8. Added the TUidType class. This class packages three UIDs
together. It is intended to provide Type, SubType and
SubSubType together for the typimng mechanism in E32. It
has the following important functions:
TUidType::IsValid()
TRUE if at least one of the UIDs is not KNullUid
TUidType::IsPresent(TUid aUid)
TRUE if any one of the UIDs == aUid
TUidType::MostDerived()
{
if (iUid[2]!=KNullUid)
return(iUid[2]);
if (iUid[1]!=KNullUid)
return(iUid[1]);
return(iUid[0]);
}
9. Added the TCheckedUid class. This class packages a TUidType
together with a checksum. It is intended to be placed at the
beginning of all E32 binary files as follows:
TCheckedUid check(TUidType(0x10000001)); // Created the header
RFile f;
f.Open(theFs,_L("binary.file"),EFileWrite);
f.Write(check.Des()); // Write the descriptor
....
The class can be reinstantiated from the binary file as follows
TPckgBuf<TCheckedUid> check;
RFile f;
f.Open(theFs,_L("binary.file"),EFileRead);
f.Read(check); // Read the signature
if (check().Type().IsValid()) // Is it a valid signature
10.Added a new type TPassword which is just a 16 character buffer.
11.Added the new abstract class CSecurityBase which provides
encryption/decryption functions given a TPassword. This is
polymorphic to allow other security systems to be
substituted at a later date. One implementation of a security
system is provided which implements a polyalphabetic
substitution which is similar to that on E32 but no great shakes.
In order to use CSecurityBase merely instantiate one with
Security::NewL(). By default the security object will be
initialsed with a zero length password and disabled. To
change its value use SetL(_L(""),new password). Alternatively
it can be re-initialised with a descriptor that was previously
extracted from a CSecurityBase with CSecurityBase::SecurityData().
The data returned by CSecurityBase::SecurityData() is intended to
be saved to file and acts as a token for the associated password.
Before encrypting or decrypting data use PrepareL() and there
after make continuous calls to EncryptL() or DecryptL().
Hopefully the other functions are self explanatory.
Added test code T_SEC.CPP to test the security system.
NOTE: Passwords are currently case sensitive.
12.Added the machine password control functions
class Password
{
public:
IMPORT_C static TInt IsEnabled();
IMPORT_C static TInt SetEnable(const TPassword& aPassword,
TBool aIsEnabled);
IMPORT_C static TInt IsValid(const TPassword& aPassword);
IMPORT_C static TInt Set(const TPassword& anOldPassword,
const TPassword& aNewPassword);
};
Password::IsEnabled() returns the current state of the password
enabled flag. Password::SetEnabled() allows the state to be
changed but only if the correct password is supplied.
Password::IsValid() returns TRUE if the password is valid.
Password::Set() allows the password to be changed
By default the password is _L("")
13.Added the notifier functions:
TInt User::Notify(const TDesC& aLine1,const TDesC& aLine2,
const TDesC& aBut1);
TInt User::Notify(const TDesC& aLine1,const TDesC& aLine2,
const TDesC& aBut1,const TDesC& aBut2);
TInt User::Notify(const TDesC& aLine1,const TDesC& aLine2,
const TDesC& aBut1,const TDesC& aBut2,
const TDesC& aBut3);
The function will attempt to connect to a server called
__NOTIFIER_NAME (#define in E32SVR.H) and then send a message
ENotifierNotify with P0() pointing to a TPckgBuf<TNotifyInfo>.
It is allowable for iButton[1] or iButton[2] to be NULL in which case
one, two or three button should occur in the dialog. If aBut1
is picked then 0 is returned, 1 for aBut2 and 2 for aBut3. Any
other error such as their being no Notifier or a result being
wrong will result in a return of KErrGeneral.
14.Added Mem::Move() which has the same API as Mem::Copy(). Move()
assumes that src and trg are 2^2 aligned and that aLength is a
multiple of 4.
15.Added a new time interval TTimeIntervalShortMicroSeconds
which is an interval in micro seconds but stored in a 32
integer. This is the new interval when specifying After()
delays. Note that I have left the low level kern services
in ticks for now.
16.Renamed
RTimer::After() to RTimer::AfterInMicroSeconds()
CTimer::After() to CTimer::AfterInMicroSeconds()
User::After() to User::AfterInMicroSeconds()
CPeriodic::Start() to CPeriodic::StartInMicroSeconds()
to aid the conversion to the new interval. When converting
just multiply the value being passed originally by 100000
which is ofcourse the number of microseconds in a tenth of
a second.
17).RSessionBase::CreateSession() and
RSessionBase::SetRetry() both take a
TTimeIntervalShortMicroSeconds as the the delay interval.
18).Fixed mnt.cmd by adding %_F32VER% as the second parameter
of all recursive getXXX calls to fix defect HA-121 reported
by DavidW.
19).Made the Timer services TicksToTenths() a bit easier to
implement and OneShot() timing slightly more accurate.
2) Geert
1. Removed CArrayFixBase::DestroyAll(). Use the new
CArrayPtr<T> class template instead. (See below.)
2. Added support for objects that can only ever
live inside an array. E.g. support for a variable
array of TBufC<100000>, where the elements are just
big enough to contain the actual data in the
buffer.
CArrayFix<T>::ExpandL(TInt anIndex) opens up a slot
at anIndex by shifting the elements after anIndex
and returns a reference to the new element. The new
element is constructed in place.
ArrayFix<T>::ExtendL() is equivalent to ExpandL(Count()).
CArrayVar<T>::ExpandL(TInt anIndex,TInt aLength)
opens up a slot of size aLength at anIndex by and
is otherwise the same as the fixed record case.
CArrayVar<T>::ExtendL(TInt aLength) is equivalent
to ExpandL(Count(),aLength).
3. Added repeated insertion and re-sizing functions
to CArrayFix.
CArrayFix<T>::InsertL(TInt anIndex,const T& aRef,TInt aReplicas)
inserts a copy of aRef, aReplicas times.
CArrayFix<T>::ResizeL(TInt aCount)
extends or shrinks the array as needed for it to
contain aCount elements. Any new elements are
bitwise copies of a default-constructed T.
CArrayFix<T>::ResizeL(TInt aCount,const T& aRef)
extends or shrinks the array like ResizeL(TInt).
New elements, however, are bitwise copies of aRef.
NB. As a result of these changes, the element type
has to have an accessible default constructor. If
you have a CArrayXxx<TYyy>, and some custom
TYyy::TYyy(TZzz aZzz) exists, a TYyy::TYyy() will
have to be added. A knock-on effect is that C-style
arrays can no longer be supported as element types.
Note that array elements are still bitwise copies,
and will be Mem::Copy()-ed around during their
lifetime. Having the constructor called merely
guarantees that they'll be bitwise copies of a
properly constructed object, rather than random
garbage. In keeping with this, array functions may
construct instances of the element types, but they
will never destroy them. Element types need not
have an accessible destructor.
4. Changed CArrayXxx::InsertIsqL() and added the
new funcion InsertIsqAllowDuplicatesL()
CArrayFix<T>::InsertIsqL(const T& aRef,TKeyArrayFix &aKey)
and
CArrayFix<T>::InsertIsqAllowDuplicatesL(const T& aRef,TKeyArrayFix &aKey)
return the new element's index.
InsertIsqL() leaves with KErrAlreadyExists if a
duplicate is discovered, and
InsertIsqAllowDuplicatesL() inserts the element
after any duplicate. The existing InsertIsqL(),
returning KErrNone or KErrAlreadyExists, and taking
a TAllowDuplicates argument is withdrawn.
In the case of variable-element arrays, the
signatures are
CArrayVar<T>::InsertIsqL(const T& aRef,TInt aLength,TKeyArrayFix &aKey)
and
CArrayVar<T>::InsertIsqAllowDuplicatesL(const T& aRef,TInt aLength,TKeyArrayFix &aKey).
Note that the meaning of InsertIsqL()'s return
value has changed and care should be taken when
porting.
5. Almost all the array manipulation functions in
CArrayXxxBase have become public. This is to allow
code to operate on incoming (typed) arrays in a
type-independent way. It can be argued this reduces
type-safety and encapsulation, but the most
important thing is to guard against accidental
misuse. This is done by providing typed functions
in the template classes overriding--and hiding--all
the unsafe functions.
6. Added functions CArrayXxx<T>::At(TInt anIndex).
They are synonymous with CArrayXxx<T>::operator[]()
and serve to hide the At() functions in the base
classes.
7. Added CArrayFix<TAny>, CArrayFixFlat<TAny> and
CArrayFixSeg<TAny> as well as CArrayVar<TAny> and
CArrayPak<TAny>. They are hand-crafted and somewhat
restricted instances of the templates, for those
who wish to use a generic array; e.g., as a member
of the base class in a template pair. In the case
of CArrayFixXxx<TAny>, the record length is
specified as a constructor parameter.
8. Added functions CArrayXxx::AppendL(), Find(),
FindIsq() and InsertL() taking a reference to T
instead of a pointer. People wishing to switch to
the reference-based API may define the macro
__ARRAY_NO_PTRS__, which will hide the
pointer-based versions.
9. Added class template CArrayPtr<T> extending
CArrayFix<T*>'s interface with a ResetAndDestroy()
function. The function is intended as a type safe
replacement for CArrayFix<CBase*>::DestroyAll().
It is equivalent to a loop delete-ing all (pointer)
elements, followed by Reset().
10. CBufBase::ExpandL(TInt aPos,TInt aLength) makes
room for aLength bytes at aPos. The new contents
are undefined. InsertL(Pos,aPtr,aLength) is
equivalent to ExpandL(aPos,aLength) followed by
Write(aPos,aPtr,aLength).
11. CBufBase::ResizeL(TInt aSize) expands or
deletes from the buffer at the end so that its
Size() becomes equal to aSize. Not to be confused
with CBufFlat::SetReserveL, which has no effect on
the logical size of the buffer.
12. CBufFlat::Capacity() reports the size the
buffer can grow to without reallocation. The buffer
insertion functions are guaranteed not to leave
until the buffers Size() reaches or exceeds its
Capacity(). A flat buffer's capacity is changed
using SetReserveL().
13. Removed the global new operator taking a base
pointer and check size; ie., TAny* operator
new(TUint aSize,TAny* aBase,TInt aCheckSize)
Making sure at runtime that the allocated size is
he same as the supplied buffer size is not a very
common requirement. As it turned out, size checking
was really only required for RHeap and derived
classes. Supplying it with a custom RHeap::operator
new(), as is now the case, is actually a cheaper
solution.
14. Added zero-filling versions of the full set of
available global new operators to CBase and removed
CBase's delete operator.
The delete operator was there only as a workaround
for a problem with the Visual C++ linker. The
problem appears to be fixed in Visual C++ 4.0, so
there is now no point in having the operator.
15. Added pragma's disabling Visual C++ warnings to
do with the generation of copy constructors and
assignment operators to <e32def.h>.
16. Added private, undefined copy constructors and
assignment operators to CBase. Copying and
assignment of CBase-derived classes is now
prohibited by default.
3). Graham
1. Various keyboard changes.
2. Added HAL set and sense functions. Most are not
yet implemented but will be in 059.
4). Steve
1. Debugger:
Further improvement and additions to the debugger classes and the Gdb stub.
Still no bug fixes back form Cygnus to allow source level debugging using
Gdb. Added support for multiple thread debugging, and allowing breakpoints
to be set in ROM which effect the threads you specify rather than all
threads. Finalised the API for the RDebug class which is used by any
debugger or debug stump program. Full details of the E32 debugger class
currently in R:\E32\DOCS\RDEBUG.DOC.
2. Key translator:
Fixed the bug where the modifier status wasn't updated on a modifier key
down - it was updated on the next key up or down.
5). Jane
1. Removed saving and restoring of fs & gs in interrupt code to speed up
X86 version of EPOC.
2.Added support for debugger in finding code address of target processes.
Added MMU functions to support debugger in shadowing ROM. (Both untested).
3.Added process cleanup code to fix process logon - but left it commented
out due to time pressure in meeting API freeze. Will be tested and in
place in 059.
4.Added start of code supporting process and dll loading from RAM, and
added dummy APIs for future additions to this. Rationalised kernel
LoadLibrary functions.
5.Fixed stack scribble in runThread, which was causing an incorrect
return status to be given to logging threads.
6). Roger
Serial LDD reliability improved. Fixed double completion bugs.
Eiger Serial PDD. Turned interrupts off during initial fifo priming.
Etna Serial PDD. Written not able to test due to a (suspected) kernel bug.
Further changes to the serial drivers as of Sat 4th May given
to Colly.
7). Matthew
Preliminary sound Ldd and Pdds for Wins and Eiger. Currently the Wins PDD
pretends to play by making random beeps for the appropriate length of time
and pretends to record aLaw data by filling a bufer with silence in the
appropriate time. The Eiger PDD just plays silence.
8). Pete
Improvements to Pc Card Controller and its user interface.
Simulation of Media Change using F5 key added to WINS (commented out for
now).
Version 0.01.057
================
(Made by Graham, Friday 19th April)
1) Graham
1. Implemented MNT ARMALL, ARM, ARMDEB, ARMREL, ARMUDEB, ARMUREL
BTSTARMALL, BTSTARM, BTSTARMDEB, BTSTARMREL, BTSTARMUDEB,
BTSTARMUREL.
2. Fixed bugs in BMARM\XDUMM.MAK, XKEYB.MAK, and XXYIN.MAK
3. Fixed F32\BMARM\ESHELL.MAK to vary name according to
build - ESHELL.EXE, ESHELLD.EXE, ESHELLU.EXE, ESHELLUD.EXE
4. Updated ARM Rom building system to build debug and unicode
roms as well.
5. Ensured O/S and test programs build in DEBUG and UNICODE
as well as RELEASE mode.
6. Removed redundant LCD contrast handling from
VARMPR\VA_KEYB.CPP
7. Added KE_ETNA.CPP with the help of Roger and Peter.
8. Rationalised variant system, allowing for three MARM
variants. Each variant for a given architecture has a
two character mnemomnic:
PB Protea rack B
PC Protea rack C
P1 Protea version 1
Each variant has an E32\ sub-directory:
\E32\VARMPB
\E32\VARMPC
\E32\VARMP1
Each must contain a VA_CUST.CPP which implements class
Custom and produces an ECUST.DLL which the kernel links to.
These ECUST.DLL's are called CARMPB.DLL, CARMPC.DLL, and
CARMP1.DLL until one of them is selected to become
ECUST.DLL in the ROM.
They must also include keyboard or pointer device
implementations (VA_KEYB.CPP and VA_XYIN.CPP) which
create CAKYPB.DLL, CAKYPC.DLL, CAKYP1.DLL (Arm keyboard
DLL's) and CAXYPB.DLL, CAXYPC.DLL, CAXYP1.DLL (Arm XY
input device DLL's).
Normally, they will also include a VA_HW.CPP which
implements variant-specific hardware functionality. These go
on to produce the variant dll's VARMPB.DLL, VARMPC.DLL,
and VARMP1.DLL. Physical Device drivers (which are intrinsically
Variant-level entities) and custom dll's might want to
link to these DLL's, but the kernel cannot.
They will also contain PDD source.
The upshot of this is that .OBY files have to change.
A typical Protea Rack B .OBY file will begin:
romname=arompb.img
version=0.01
bootbinary=c:\work\emarm\bootrom.bin
romsize=0x400000
romlinearbase=0x50000000
romalign=0x1000
kerneldataaddress=0x80100000
kernelstackaddress=0x80000000
kernelheapmin=0x10000
dataaddress=0x400000
files=
primary=c:\work\emarm\ekern.exe sys\ekern.exe
file=c:\work\emarm\euser.dll sys\euser.dll
file=c:\work\emarm\elocl.dll sys\elocl.dll
secondary=c:\work\emarm\efile.exe sys\efile.exe
file=c:\work\emarm\efsrv.dll sys\efsrv.dll
file=c:\work\emarm\elocal.fsy sys\elocal.fsy
file=c:\work\emarm\ewsrv.exe sys\ewsrv.exe
file=c:\work\emarm\econs.dll sys\econs.dll
file=c:\work\emarm\edisp.dll sys\edisp.dll
file=c:\work\emarm\varmpb.dll sys\varmpb.dll
file=c:\work\emarm\carmpb.dll sys\ecust.dll
file=c:\work\emarm\cakypb.dll sys\ekeyb.dll
file=c:\work\emarm\caxypb.dll sys\exyin.dll
file=c:\work\emarm\ektran.dll sys\ektran.dll
file=c:\work\emarm\ekdata.dll sys\ekdata.dll
file=c:\work\emarm\eshell.exe sys\eshell.exe
A typical Protea Rack C .OBY file will begin:
romname=arompc.img
version=0.01
bootbinary=c:\work\emarm\bootrom.bin
romsize=0x400000
romlinearbase=0x50000000
romalign=0x1000
kerneldataaddress=0x80100000
kernelstackaddress=0x80000000
kernelheapmin=0x10000
dataaddress=0x400000
files=
primary=c:\work\emarm\ekern.exe sys\ekern.exe
file=c:\work\emarm\euser.dll sys\euser.dll
file=c:\work\emarm\elocl.dll sys\elocl.dll
secondary=c:\work\emarm\efile.exe sys\efile.exe
file=c:\work\emarm\efsrv.dll sys\efsrv.dll
file=c:\work\emarm\elocal.fsy sys\elocal.fsy
file=c:\work\emarm\ewsrv.exe sys\ewsrv.exe
file=c:\work\emarm\econs.dll sys\econs.dll
file=c:\work\emarm\edisp.dll sys\edisp.dll
file=c:\work\emarm\varmpc.dll sys\varmpc.dll
file=c:\work\emarm\carmpc.dll sys\ecust.dll
file=c:\work\emarm\cakypc.dll sys\ekeyb.dll
file=c:\work\emarm\caxypc.dll sys\exyin.dll
file=c:\work\emarm\ektran.dll sys\ektran.dll
file=c:\work\emarm\ekdata.dll sys\ekdata.dll
file=c:\work\emarm\eshell.exe sys\eshell.exe
9. Enhanced the KBARM\ rom building system to allow for the
production of all three variant ROMs.
10. Fixed spurious Pen Up events on the digitiser.
11. Added GETSRC verb to MNT.CMD
2) Morgan
1. Completed DEVICE/DRIVER name changes to LDD/PDD.
2. Added operator++() to TTimerLockSpec
3. Added TTimerLockSpec User::LockPeriod(). This returns which
of the TTimerLockSpec periods the clock is currently in.
3) Jane
1. Fixed some problems with the new chunk sheme, notably to do with
closing EPOC chunks.
2. Added a new debug only build of the .def files for X86.
3. Added MMU support for both kernel growth (contigous in linear and
high physical memory) and RAM drive growth (contigous in linear
and low physical memory) - moving other people's pages and page
tables out of the way if necessary. Added TMMU test code to test
these situations.
4. Added a new function to the bit map allocator
AllocFromTopFrom(TInt aPos) which returns the
next free page after the one specified. Tidied
up AllocFromTop() a bit while I was at it.
4) Colly
1. Added User::PageSize() to return the current machine page size.
2. Renamed RHeap::Destroy() to RHeap::Close().
3. Implemented heap sharing for heaps in chunks by having it heaps
own and use an RCriticalSection as well as supporting access counting.
The function TInt RHeap::Open() should be used to open a heap for
sharing which increases the access count. A subsequent RHeap::Close()
will decrement the access count but the heap will only be discarded
if the access count goes to zero. The static function User::ChunkHeap
includes the call to Open(). Fixed address heaps cannot be shared and
calls to Open() will be panicked.
The heaps which are created when a thread is created and which can be
retrieved with a call to User::Heap() should not be closed with a call
to Close() since the chunk in which the heap is created contains the
threads stack as well as the heap. If Close() is called the thread will
be panicked. The constanst RHeap::EChunkStack for the heaps type indicate
this kind of a heap, while RHeap::EChunkNormal indicate a heap created
with User::ChunkHeap(). Type EChunkSupervisor will never be seen
by an user mode code.
A thread is usually created with its own heap, but it can also be
created to use either the current thread's heap or a heap already
created. To use the current threads heap:
RThread t;
TInt r=t.Create(_L("Shared1"),threadEntryPoint,KDefaultStackSize,
NULL,NULL);
The first of the TWO NULLs will cause the routine to share the
current threads heap. i.e. that returned by User::Heap().
To use a heap already created:
RHeap* pH=User::ChunkHeap(_L("Share"),User::PageSize(),0x100000);
test(pH!=NULL);
RThread t;
TInt r=t.Create(_L("Shared1"),threadEntryPoint,KDefaultStackSize,
pH,NULL);
NOTE: In either case above the Heap will be opened and closed
internally so you need not provide any cleanup. If you no longer
wish to retain your copy of the heap in the example above after the
new thread has been created then you can call pH->Close().
Finally note that if thread1 creates thread2 to share its heap and
then exits thread1's chunk will remain in existence until such time
as thread2 exits. This is so since thread2's heap is now in thread1's
chunk. Such are the joys of sharing heaps.
4. Full automated heap growth is now implemented as is RHeap::Compress().
If the adjust to the heaps chunk fails the the kernel server will be
called to attempt to compress all heaps known to the kernel. When
completed a further attempt will be made to adjust the chunk so that
the heap can grow. Remember that a heap will never be compressed
below its minimum size and that heaps can onlybe compressed if they
have free space at the top of the heap.
5. Added a default argument TOwnerType aType=EOwnerProcess to most
of the operating system types CreateLocal(),CreateGlobal() and
Open() functions. Because of the default paramter this change is
seamless all current programs. The meaning of TOwnerType is to
indicate whether the resulting RObject is owned by the Process or
the Thread. Owned by the Process has been the only behaviour allowed
until this change. EOwnerThread will make the thread the owner of the
handle. The effect of being owner by the thread is that when the
thread dies any handles owned by the thread and not closed, will be
closed automatically. Example of process ownership:
RLibrary lib;
test(lib.Load(_L("TESTDLL"));
//
// The library handle will be closed when the process exits
//
User::Exit(KErrNone);
Example of thread ownership
RLibrary lib;
test(lib.Load(_L("TESTDLL"),EOwnerThread);
//
// The library handle will be closed when the thread exits
//
User::Exit(KErrNone);
NB. Although the addition of TOwnerType arguments to the
appropriate function calls has been made, EOwnerThread-type
services have not yet been implemented. This change merely
prepares the way for such an implementation.
6. Implemented the full and correct naming strategy for
objects in the base.
7. The test DLLs T_START1.DLL, T_START2.DLL and T_START3.DLL were
all using a WIN32 function GetTickCount() to delay their startup
which was preventing them from being used as a test under Epoc/32.
Changed to use User::TickCount() and removed Kernel32.lib from
the link dependencies.
5) Gillian
1. Added TDateTime::SetYear() etc functions (Brendan's
accepted proposal E32.51 TDateTime setting functions)
2. Added TTime::- and TTime-= functions for all TTimeInterval classes
(Richard Knights accepted proposal TTime should define operators -
and -=)
3. Extended TTime::DateTime() function to deal with BC dates
4. Added tests for all the above and tidied the test code up a
little.
6) Roger
1. Implemented DFcs under WINS. This allows us to use DFCs
from the serial LDD rather than the non WINs PDD. This gives
much more reliability under WINs and improved throughput under
MX86 and MARM.
7) Steve
Key Translator:
1) Added new modifier EModifierPureKey, which is set when a
ctrl-key combination does not alter the keycode (basically
any key other than Space,A-Z which return 0 to 26 respectively)
2) Fixed bug so that ctrl-space returns a NULL key press
rather than being thrown away
3) TPattern enums moved into E32SVR.H for use by wserv
Debugger:
4) Removed the Gdb stub from the E32 kernel
5) Added Debug and RDebug classes. Debug is on the Kernel side
and provides debugging functions for RDebug on the user side.
A user mode debugger or stub opens a channel to RDebug and
can then debug one or more threads. The RDebug class provides
functions for Single-stepping, setting breakpoints,
reading/writing memory and reading/setting of register
values. Watching of memory addresses will be provided
in a later release
6) Added 'TInt iDataSize' into DPlatProcess for use by the Debug
class for returning the Bss address of a Process
7) Simple program written to run on the rack which waits for
any thread to panic and then displays what has panicked
and why
8) Gdb stub written which communicates between RDebug and Gdb
running on a remote host PC. Currently the Gdb stub only copes with
debugging one thread at a time, and due to problems with Gdb itself,
only limited debugging facilities are available.
8) Pete
1. Added PC Card Controller to WINS and MARM.
9) NOTE to shared chunk users (FBSERV etc). Support for read-only
shared chunks has been withdrawn. Although the API remains, all
shared chunk users should ONLY open for read/write.
Version 0.01.056
================
(Made by Morgan, Sometime soon)
1) Matthew
Bug fixes:
HA-81: In Wins if a E32Dll returns an error this is now correctly
detected.
HA-58: (Just in time debugging added for Kernel Panics) fixed in
KSRC\KS_UTL.CPP
HA-62: (Flat buffers not compressed when cleared) fixed in
UBAS\UB_BUF.CPP.
HA-82 (ReadCancel() doesn't complete TRequestStatus) fixed in
WSRC\WS_WIN.CPP, tested in T_WSIMP.CPP.
HA-73, HA-74, HA-61, HA-52,58,61,62,69,73,74,81,82.
2) Rog
Added:
IMPORT_C void CActive::SetPriority(TInt aPriority);
inline TInt CActive::Priority();
SetPriority() will panic if the AO is active when it is called.
3) SteveT
1: Added:
TBool TRegion::Contains(const TPoint &aPoint);
Simply returns True if the point is contained within the region,
False if not.
2. Added a new template class RRegionBuf<N>
This is a cross between the two existing variants of the TRegion
class, it's black box spec is identical to the RRegion class, you
can have unlimited size regions but have to check for errors, but
a buffer big enough to hold <N> rectangles is included with the
RRegionBuf structure, this is used until it is full up when a
cell will be allocated and the whole rectangle list copied into
the allocated cell, the region will not revert back to using the
buffer even if it shrinks small enough fit.
These regions are chiefly designed to be used as temporary work
space on the stack where they will save a lot of calls to alloc
for trivial rectangle lists. Using these for long term region
storage would be inefficient as when the buffer overflows it is
left lying around empty wasting memory.
3. After calling Close() the region can safely be reused, before
it was left in a dangerous state with a pointer to the old freed
cell.
4) Jane
Changed EPOC to the new process relative chunk strategy. Under
this scheme, the process now owns a chunk, which contains the
.data and .bss (zero-filled data) sections. Each additional
thread now only has one chunk minimally, which contains its stack
and heap. This scheme saves on resources, and will allow the
process to live on if the main thread dies, a change I intend to
make later on.
Added support for shared chunks in EPOC. A global chunk - one
created with RChunk::CreateGlobal() - can be shared by other
processes/threads if they do an OpenGlobal() of the same chunk,
by name.
WARNING! The latter change has necessitated api changes in
RChunk, detailed below.
1. The Create functions have gained an extra parameter, as shown.
IMPORT_C TInt CreateLocal(TInt aSize,TInt aMaxSize);
IMPORT_C TInt CreateGlobal(const TDesC &aName,TInt aSize,TInt
aMaxSize);
The new parameter, aSize, is the number of bytes to initially
commit to the chunk. IT IS NO LONGER NECESSARY TO ADJUST A NEW
CHUNK - it will be adjusted to aSize on creation.
2. OpenGlobal has gained an extra parameter, as shown below.
IMPORT_C TInt OpenGlobal(const TDesC &aName,TBool isReadOnly);
The new parameter, isReadOnly, specifies whether the sharing
process wants readonly access to the chunk. Thus it is now
possible for the creator of a chunk to have read/write access to
it, but for others who share that chunk to be denied that
priviledge.
3. As mentioned, it is now unnecessary to adjust a newly created
chunk. It will be adjusted to aSize bytes on creation.
5) Colly
1. Added Registry and Environment services
6) Graham
1. All release mode tests run on MARM
2. Enhanced the MARM build to include DEBUG and UNICODE modes.
3. Enhanced the Eiger Text Display Deiver to switch between
1bpp, 2bpp, and 4bpp modes.
4. Text Window server allows CTRL-ALT-1, CTRL-ALT-2,
CTRL-ALT4 to switch display modes. The rack now boots up
in 2bpp.mode.
5. Released BOOTROM.BIN. It boots the rack in 2bpp mode, so
the same .BIN file may be used for Text Window Server and
Graphics Window Server ROM's.
6. Added -fno-implicit-templates to the MARM builds and
removed -fvtable-thunks.
7) Peter
1. Added proto-ramdrive.
Version 0.01.055
================
(Made by Morgan, 18 March '96)
1). NickT,
TLex??. I have added two new classes TLexMark8 and TLexMark16 and
the obvious typedef TLexMark. These classes are used to record or
mark a positon in a TLex, hence
TLex8::Mark(TLexMark8& aMark)
which can be followed by, e.g.
TLex8::UnGetToMark(TLexMark8& aMark).
By and large, wherever there was a TLex?? member function which
used the internal mark, e.g. SkipSpaceAndMark, there is a new
member which is passed a TLexMark?? or reference to one.
I have retained the internal mark iMark, changing it to a
TLexMark, and all the existing member function remain, usually as
an inline function which passes the internal mark to the general
member function.
The TLex??::Val() members no longer use the internal mark to
recover from errors but use an automatic TLexMark?? constructed
within the function.
T???Que(Base). I have added a member function Reset() to the Sgl,
DBl and Delta ques which just resets the que to be empty (the
offset remains unchanged).
CArrayFix(Base)/CArrayVar(Base). I have added new member function
which over load the existing InsertIsqL members. The change is an
addition TInt& argument.
On returning from InsertIsqL, this is set to contain the position
within the array of either the new entry or, if the entry exists
and ENoDuplicates is passed, the position of the pre-existing
entry.
2). Morgan,
Plat::TickCount on WINS fixed so 1 tick = 1/10th of a second.
CBufxxx::New is now CBufxxx::NewL. The CArray classes have been
altered to use these.
CActiveScheduler made concrete and constructor made public.
Removed PopAndDestroyAll from TCleanupTrapHandler::Untrap which
now calls CCleanup::PreviousLevel(). This ASSERTS that the
cleanup stack's current level is empty. All Pushes to the clean
up stack must be balanced with a Pop before the Trap unwinds
naturally. +Test code.
Added PushL() and Pop() member functions to TAutoClose so they
can be pushed onto the cleanup stack and are closed automatically
on a leave. +Test code.
Added TReal and TReal96 formating to TDes?::Format
New specifiers are:
%f(%F) - format TReal(TReal96) (was padding)
%e(%E) - format TReal(TReal96) using exponent format
%g(%G) - format TReal(TReal96) using general format
%p(%P) - padding (used to be %f)
and
.n - specify n decimal places
New thread test code, to test Suspend/Resume while the thread is
suspended on a semaphore.
Extended RTimer/CTimer with locked timers for synchronisation to
fractions of a second.
Included USERTYPE.DAT in the release.
3). Jane,
Fixed Exc::Dispatch which was deferencing NULL in certain cases.
Fixed DLogonProcess derivation, which was incorrect under the new
single phase destruct.
Added kernel protection for bad handles in both kernel server and
executive. Now the user thread should get panicked for a bad
handle, rather than the kernel dying when dereferencing 0. Now
that this is in place, I would welcome reports of any remaining
kernel death due to bad parameters, so that we may tighten up any
remaining loopholes.
Fixed CObjectIx::At which was panicking rather than returning 0 in
certain circumstances.
Added CObjectIx::AtL which leaves on a bad handle.
Added low memory handling to the MMU, and enhanced test code to
test that there are no alloc heavens in low memory situations.
Note that the rem page allocator function FreeHomePage() now takes
a physical address as a parameter rather than a linear one.
Added a new type of executive service, EXECUTIVE_SLOW_CONFORMANT
(int 22h on x86), which allows certain carefully chosen kernel
services to go re-entrant (i.e. be called from another slow kernel
executive service). Match8 and Match16 have been changed to this
new type, so that Match can be called from Exec::ThreadNext and
friends, thus allowing find services to work on EPOC.
4). Matthew,
Tiny change to T_CHUNK (x86): now assumes the executable is T_CHUNK
rather than TCHUNK, and the case used on the command-line is not
important.
5). SteveG
Key translation:
================
Combined the keyboard translator files into two source files,
KY_TRAN.CPP and KY_CAPT.CPP.
These make up EKTRAN.DLL, which carries out translating the
scancodes into keycodes and modifiers and handles capture keys.
KD_MC400.CPP makes up the keyboard translator data dll
(EKDATA.DLL). Removed all .data from this DLL by copious use of
const.
Fixed the keytranslator so that modifier keys are returned as
EKeyNull.
CCaptureKey and CKeyTranslator are now defined in e32svr.h for use
by the Window Server. w32keyb.h and w32keyb.inl no longer exist.
In order to use the keyboard translator, theWindow Server must at
startup create a new CKeyTranslator, eg:
CKeyTranslator* KeyTranslator=CKeyTranslator::New();
The translate key function is defined as:
KeyTranslator->TranslateKey(TUint aScanCode, TBool aKeyUp, const
CCaptureKeys& aCaptureKeys, TKeyData& aKeyData)
and an extra function for obtaining the current modifier state
has been added:
TUint KeyTranslator->GetModifierState();
Key Modifiers
=============
EModifier enums are now defined in e32virt.h and are at the top
level. Anyone making use of 'TEvent::EModifierXxxxx' should
globally replace 'TEvent::EModifier' to 'EModifier'.
Removed the TModifier class. A normal TUint should be used in
place of TModifier, and anyone using the modifier functions
IsOn(), IsOff(), TurnOn() etc should do this using | and & etc.
E32 TEvents
===========
Changed the E32 TEvent structure, and renamed it TRawEvent. A
TRawEvent is passed to the Window Server, which will create a
TWservEvent as before. TRawEvent is defined in e32svr.h and no
longer includes the modifier state. The modifier state is added in
in the Window Server for events that require the modifer state,
rather than being worked out and passed around for every event
type.
Changed the event types. Mouse events have been removed and
replaced with EPointerMove and EButtonNDown/Up events. The new
event types, defined in e32svr.h are:
enum TType
{
ENone,
EPointerMove,
EKeyDown,EKeyUp,
ERedraw,
ESwitchOn,
EInactive,
EButton1Down,EButton1Up,
EButton2Down,EButton2Up,
EButton3Down,EButton3Up
};
Changed all occurences of TEvent and TEventBuf to TRawEvent and
TRawEventBuf respectively in the E32 source and header files.
Changed Event.Set() and RawEvent copy constructors etc so they no
longer use the shiftState.
6). Colly,
Changes required to implement the proposal to give DLLs a globally
unique identifier (GUID) which can be checked before trying to
call any of the functions in the DLL. It adds two functions to
RLibrary as well as adding the concrete data type TGuid. Included
is a test program T_GUID along with a test DLL T_UID, all of which
live in TBAS. I have also fixed bugs in the .MAK files for EKTRAN
and EKDATA.
A new version of t_romg.cpp which was broken by changes to
TDes?::Format() (i.e. changing %f to %p for padding).
7). Jal,
Added methods to CSession:
IMPORT_C void ResourceCountMarkStart();
Panics client if CountResources returns KErrGeneral
IMPORT_C void ResourceCountMarkEnd();
Panics client if CountResources != iResourceCountMark
IMPORT_C virtual TInt CountResources();
Default implementation returns KErrGeneral
Version 0.01.054
================
(Made by Morgan, 23 Feb '96)
1). Colly
Removed two phase destruction. Note that all objects derived from
CActive must call Cancel() in their destructors. Note that
Adt::Destroy() has disappeared (replace with delete).
The class TAggregate depended on Adt::Destroy(), so it has
also disappeared (I don't think anyone was using it anyway).
Renamed E32ADT.H to E32BASE.H and the project UADT and TADT to
UBAS and TBAS. Decided not to include E32BASE.H in E32STD.H as
anyone can include E32BASE.H directly and achieve the same effect.
Removed all TBuf_10, TBuf_20 etc variants.
2). Jane
Added an extra flag to TModifier: EModifierDoubleClick=0x00800000
Fixed DLogons which were writing back the wrong status into the
logged thread. The net effect being that now when you try to run a
program which doesn't exist, you don't crash the OS.
Added the window server to the dll startup scheme so that the font
server can be started before it. Look at wsrc\ws_utl.cpp to see
E32's window server startup code.
Added thread relative handles for DServer, DSession and client
DThread in server DThread. This was necessary for proper cleanup
of sessions when server and client threads died. It has the
side-effect of making the WINS implementation much more like the
EPOC one - and will show up any bugs where sessions are used from
another thread.
Added the Window Server to the dll startup scheme so that the font
server can be started before it.
Fixed bug in CObjectIx::Destruct(), HA-19.
3). Matthew
Changed the base to use the new CServer/CSession with ServiceL in
CSession insted of CServer. The new versions of CSession and
CServer are now what used to be called CNewSession and CNewServer.
The windows server and test code use this new scheme.
If you have your own server/session then to convert you must
replace your CServer::ServiceL(RMessage&,CSession&) with a
CSession::ServiceL(RMessage&). In addition, if you have supplied
a CSession::CreateL() it should now be a
CSession::CreateL(CServer&).
Made TSglQueLink::Enque() private and TSglQueBase a friend of
TSglQueLink. Removed calls to Enque in T_SQUE.
Fixed X86 chunk routines. Additionally, changed WINS so that if
you try to create a chunk of negative/zero size it returns
KErrArgument instead of KErrGeneral.
4). SteveG
This change affects the Window Server:
Changed TKeyTranslator::TranslateKey(). It no longer accepts a
TModifier as the second parameter. This function now takes care of
working out and storing the current key modifier states.
Now implemented as:
TBoot TKeyTranslator::TranslateKey(TUint aScanCode, TBool aKeyUp,
const CCaptureKeys& aCaptureKeys, SKeyData& aKeyData);
Altered \wsrc\ws_main.cpp and \wsrc\keytran.h accordingly, and
altered keytran.cpp to work out the key modifier states from the
supplied scancodes.
The keycode translator is now part of E32 as two DLL's: EKDATA.DLL
and EKTRAN.DLL.
Added the stub for the Gdb debugger. This adds two classes, Gdb
and ImpGdb. Class Gdb handles the communication protocol to the
remote PC running the debugger. The ImpGdb class handles all the
implementation specific functions such as returning register
values, setting breakpoints and the sending and receiving of data
packets to the remote PC.
Altered \e32\kex86\ke_int.cpp to pass control to the Gdb stub when
a breakpoint or single step trap occurs, and \e32\kearm\ke_int.cpp
to pass control to the Gdb stub when an undefined instruction is
executed.
5). Morgan
Fixed thread cleanup code to cancel the threads timer if it had
not completed when the thread died. Previously the destructor was
attempting to close it after the thread's heap had been removed.
Made TInt64A::Cmp into a signed compare.
Fixed the DivMod function and other small fixes to get TInt64 code
running on the rack.
TInt64 operator >> now does an ASR. TInt64::Asr() has become
TInt64::Lsr()
Alloc fail tool changes:
__xHEAP_FAILNEXT(n) now fails once on the nth mem alloc.
CTimer::Create has become CTimer::ConstructL.
CActiveScheduler is now concrete.
6). Graham
Incorporated ARM E32 - find GCC porting guide in 'Protea Software Design'.
Modified test programs so that they build under gcc.
Added digitiser code (XYIN) and general ADC control code.
Added compiler support functions for software floating point.
Added 'float' conversion routines to UM_R96.CPP
Removed data from ELOCL.DLL by appropriate use of const in LSRC\*.CPP
**** WARNING TO SERVER WRITERS ****
CSession::CreateL(CServer& aServer) has changed to
CSession::CreateL(const CServer& aServer)
This is a virtual function. If you supply your own version of this
function, then be sure to change its prototype. If you don't then you won't
get a compiler warning, but your program won't work any more.
Version 0.01.053
================
(Made by Morgan, 29 Jan '96)
1). Matthew
Removed all trace of the old date\time classes.
\E32\TCDT\T_FIND, which tests the find handles.
There's also a modified version of \E32\TCDT\T_KERN.CPP, which has had it's
brief TFindXxxx tests expanded to include the ones it previously missed out.
2). SteveT
I'm just putting keyboard repeats into the window server. I've put this change
into \E32\KPWINS\KP_GUI.CPP to block windows auto repeats from getting
through.
line 169:
case WM_SYSKEYDOWN:
case WM_KEYDOWN:
if (!(HIWORD(lParam)&KF_REPEAT))
{
v.Set(TEvent::EKeyDown,PP::Sca....
Kern::AddEvent(v);
}
break;
Another change to KP_GUI.CPP to get the keyboard repeats going properly. This
adds a new TEvent type EInActive that informs me when the E32 window has lost
focus, the change I've done is as below.
case WM_ACTIVATE: // line 207
if ((lParam&0xFFFF)==WA_INACTIVE)
{
v.Set(TEvent::EInActive);
Kern::AddEvent(v);
}
break;
case WM_CHAR:
I'm not sure if this the best solution, presumably for completeness there
should be an EActive event as well, or add a true/false parameter to the event
to say whether it's an active or inactive message.
Of course on the real machine these events will never be used but I don't see
that as a problem.
3). Morgan
Serial drivers for X86 and Eiger platforms.
TLinearSectionRam::CreateRegion now rounds the committed size argument to page
size before calling Map.
4). Natascha
Character set conversion.
New test code (t_chset, t_chset2, t_chcon) for Unicode build
5). Jane
Added User::SetDebugMask to allow the setting of the trace mask around
important sections of code.
Fixed various DSession closing and CServer bugs, including HA-51. EPOCX86 can
now run a test program more than once!!
Fixed a process creation bug.
Version 0.01.052
================
(Made by Matthew, 16 Jan '96)
1). Matthew
Modified the kernel to use the new date/time classes internally. This includes
the addition of new overloaded functions duplicating old ones. This should not
effect the external interface except in a few cases, where some functions have
been renamed XxxOld().
In release 053 the old functions will be removed and some data members will be
changed to the new date/time classes.
2). Natascha
Character set conversion.
Replaced \e32\lsrc\LS_850.CPP with new file \e32\lsrc\LS_LAT1.CPP, which has
the same format:
type table for characters
and conversions for upper case, lower case, folding and collating.
for the Windows ISO Latin 1 character set.
There are 3 test programs:
1) \e32\tlocale\t_chset.mak which writes to a file "chtest.txt" the descriptions
for the characters 32 - 255 together with a description of the character it is
mapped to for each of the upper case, lower case, folding and collating conversions.
It does this by reading from the tables in LS_LAT1.CPP directly. This is designed
to test the mapping tables in LS_LAT1.CPP.
2) \e32\tlocale\t_chset2.mak which produces the same output to a file "chtest2.txt"
and console, but uses the functions provided by the TChar class instead of reading
the tables directly. This is designed to test that the changes made in
\e32\bwins\elocl.mak have taken effect. Note there is no collate output since
TChar has no collate function.
3) \e32\tlocale\t_chcon.mak which produces a console output displaying the
attributes of a range of characters 0xC0-0xCF using functions in TChar. This
tests that the type table in LS_LAT1.CPP is correct.
All 3 test programs read from the text file e32\tlocale\winiso.txt.
Note that currently these new tests do not compile in unicode build.
3). Matthew
Replaced TBool TRegion::Check() with TBool TRegion::IsContainedBy(), which
has the opposite sense, ie it returns ETrue when Check() returned EFalse and
vice-versa.
4). Roger
Added write(0) functionality to the serial LDD.
A request to Write(...) with either a zero length descriptor or an explicit
zero length will not complete until the control lines are asserted in such a
way that a further write would actually send characters on to the line. The
exact behaviour of write(0) depends upon the iHandshaking field in the current
config.
eg.
void WaitForCTS(RComm& aSerial)
//
// Synchronously wait for CTS to be asserted, assumes aSerial is Open.
//
{
TCommConfig cBuf;
TCommConfigV01& c=cBuf();
aSerial.Config(cBuf);
c.iHandshake=KConfigObeyCTS;
TRequestStatus stat;
aSerial.Write(stat,TPtr8(NULL,0),0);
User::WaitForRequest(stat);
}
The XOn/XOff bits of iHandshaking are ignored for Write(0).
There are no changes to the PDD.
5). Jane
Wrote display dll, video device (LDD) and VGA driver (PDD) for EPOCx86.
Fixed ImpHal::DisableInt() which was only pushing 16 bits of flags.
KMaxSectionBase in m32std.h was wrong - fixed.
Added TExec which tests number of exec calls in one second.
6). Graham
Fixed allocation of run addresses to chunks in DPlatProcess::
AllocateDataSectionBase().
7). Roger
Implemented CNewServer and CNewSession to run alongside CServer and CSession as
proposed in MartinT's E32 proposal "ServiceL() should belong to CSession, not
CServer". See E32 proposals for the API.
This code is not part of a fully accepted proposal as yet - the code is included
in the release to A) make further testing with the socket server less painful
and B) allow others to migrate servers to the new scheme if they wish.
Assuming the proposal becomes accepted, CServer and CSession will be replaced
with CNewServer and CNewSession.
8). Matthew
Maths bug fixes and test code.
Version 0.01.051
================
(Made by Matthew, 21 Dec '95)
1). Jane
Implemented dll and device loading for EPOC platforms.
IMPORTANT NOTE
We have decided that when the entrypoint of a dll (E32Dll) succeeds, it should
return KErrNone rather than TRUE. Under WINS, the true entrypoint (_E32Dll)
converts KErrNone to TRUE before returning, but under EPOC this is not
necessary and we get tighter code by being able just to pass on the return
value of E32Dll().
So in release 051 all dll entrypoints must now return KErrNone if successful.
Added functions TBool User::JustInTime() and User::SetJustInTime(TBool) to
allow getting/setting a kernel variable which controls whether the debugger
macro executes its int 3 to do just in time debugging of panics with Visual
C++. The default is ETrue, i.e. just in time debugging is enabled.
All test code which traps deliberate panics should set this variable to
false around the code in question, to prevent Visual C++ firing up. See
TADT\T_CTIMER.CPP
2). Morgan
Changes to TReal96: Changed KMatissaBits back to 53.
Added Normalise and Prepare functions.
GetTReal is now a const function.
3). Gillian
Changes to the date and time classes
The following is a summary of the new classes, but see the report in E32 proposals
(Replacement for the existing date and time classes), and the ensuing discussion
for a fuller description of the classes and the motivation for these changes.
To avoid a name clash, the existing TDateTime class has been renamed TOldDateTime.
This along with TSystemTime, SDaySec, SDate and STime and the static date and time
functions in Userwill be withdrawn in release 053.
The functionality previously in TDateTime is provided by TTime which holds the
number of microseconds since midnight on 1st January 0AD in a TInt64. A TTime
object may be constructed from a TInt64, a TDateTime (see below) or a string
literal. Default construction will set the time 0.00am 1st January 2000AD. This
class also supports comparisons between TTimes, the addition of TTimeIntervals
(see below) to TTimes and the subtraction of TTimes (giving a TTimeInterval as the
result). Such arithmetic operations are allowed to over- or underflow, but an error
is returned if the results of a subtraction are too large to fit in the relevent
(32-bit) TTimeInterval.
The class TTimeIntervalMicroSeconds represents a 64-bit signed difference and the
classes TTimeIntervalSeconds, ...Minutes, ...Hours, ...Days, ...Months, ...Years
all derived from TTimeIntervalBase represent the differences in the rest of the
time bases in a 32-bit signed integer. These classes only support getting, setting
and comparison functions.
The new class TDateTime has been defined for easy user access to TTime. It has
year, month, day, hour, minute, second and microsecond data members, all held as
TInts and therefore replaces the SDate and STime structs. This can hold times longer
than TTime but no checks will be made on construction or assignment. The TDateTime
class will only support getting and setting functions.
The static functions date and time functions previously in User are now in the class
Time.
Omissions - BC dates, string parsing.
Proviso - Due to bug in TInt64 class Time::MaxTTime() and MinTTime() fail comparisons
4). Colly
Removed RThread::Read() and Write() variants taking 2 parameters.
Provided RMessage::ReadL and WriteL functions. These call the appropriate Client
functions, so the code like
myMessage.Client().Read(...)
should now be changed to
myMessage.ReadL(...)
Removed AllocHeaps.
Added preliminary code for support of shared heaps. In functions where a heap was
previously created using given min and max heap sizes there is now an extra argument:
RHeap * aHeap. If this is NULL then everything proceeds as before. Otherwise, the
given heap is used. However, this is not properly implemented as yet and so for now
you should always pass a null pointer.
Replaced the constructor RHeap(THeapType aType,TInt aMinLength,TInt aMaxLength,TInt
aGrowBy) with RHeap(TInt aMaxLength).
5). Matthew
If TCallBack::iFunction==NULL then TCallBack::CallBack() returns 0. The default
constructor now sets iFunction=NULL.
CBufBase::DoInsertL() has been made private and a new overloaded variant of InsertL
has been added.
Added CActiveScheduler::Level(), which returns iLevel.
6). New error codes:
const TInt KErrTimedOut=(-33);
const TInt KErrCouldNotConnect=(-34);
const TInt KErrCouldNotDisconnect=(-35);
const TInt KErrSubSystem=(-36);
const TInt KErrBadLibraryEntryPoint=(-37);
const TInt KErrBadDescriptor=(-38);
Version 0.01.050
================
(Made by Matthew, 12 Dec '95)
1). Roger/Mark
Comms bug fixes.
2). Jal
Circular buffer bug fix.
3). Roger
RThread::Duplicate() fix.
4). Jane
Improved the build system. Added mnt cleanup, mnt cleanwins and mnt
cleanx86 which delete all the intermediate files for all builds, just
WINS and just X86 respectively. A cleanup should always be performed
before the first build of a new release of E32.
Fixed clean-up of a thread's kernel server session when it dies.
DPlatThread::Create() was not opening the thread it created, and thus
the access count was too low, causing death when the thread died. Fixed.
Fixed TTimerInt::TimerComplete() to switch interrupts off during the
non-atomic decrement of the dfc pending flag.
Made CObject::AccessCount() public rather than protected - mainly for use
in debugging.
5). Geert
Changed to a new scheme for boolean values. As the change has considerable
impact there is a fair amount of material here, including some background
information. Feel free to skip anything that looks familiar:
In a statement such as
if (cond) s1;
else s2;
C++ will execute s1 if cond!=0, and s2 if cond==0. In general, C++ treats
boolean values as false if they are equal to zero, and true if they are
anything else. The if statement, ?:, &&, || and ! operators all work on
this assumption.
However, the _result_ of a C++ calculation with boolean values is defined
to be zero for false, and (int) 1 for true: the built-in &&, ||, !, ==,
!=, <, >, <= and >= operators all return either 0 or 1.
Thus, although 1 is the most usual value representing 'true', it is not
the only value that can mean 'true'. It is therefore _bad practice_ to
compare any boolean variable with 1 (or ETrue, or TRUE), to see whether
it's true:
if (x==ETrue) s1;
will only execute s1 if x==1, whereas
if (x) s1;
will execute s1 if x!=0, which is the correct definition of 'true'ness.
The draft ANSI C++ standard includes a 'bool' type that has the right
properties. The TBool introduced here has two main design goals:
(i) when ANSI compilers become widely available, it will be possible to
replace the current type definition with
typedef bool TBool;
and everything will work perfectly
(ii) it is designed to cause the compiler to generate an error message
whenever a TBool is compared with ETrue. This forces you to fix code that
is potentially in error, before your code will successfully compile.
TBool is no longer an enumeration. It is now an integral type best thought
of as the type of boolean operators such as <, ==, !=, etc. The only
significant property of its values is whether they are zero (false) or
non-zero (true). The EFalse and ETrue enumeration constants are available
as boolean literals, but a TBool does _not_ have to be equal to ETrue to
be considered true.
This has some impact on the kinds of expressions you can meaningfully
write using TBools. Comparisons between boolean variables are meaningless,
for instance. On the other hand, a statement such as
if (x==EFalse) s1;
is equivalent to
if (!x) s1;
which is not only more concise but also more expressive in many contexts.
The most common meaningless expressions involving TBools; i.e., the likes
of
if (x==ETrue) s1;
are trapped at compile time, or link time at the latest. Use
if (x) s1;
instead.
Another commonly used construct is
return(x ? ETrue : EFalse);
where the conditional is now entirely redundant. As a side effect of the
definition of EFalse and ETrue, this code no longer compiles. Examples of
other code intended to achieve the same effect are:
return((TBool)(x));
or
if (x) return(ETrue);
else return(EFalse);
or one of many variants. These are not picked up by the compiler.
Comparisons of one TBool to another are not trapped, nor are other
meaningless constructs such as
if (x<=ETrue) s1;
To help the human reader, all boolean values should be declared as TBool,
including: member data; function parameters taking booleans; functions
returning booleans and especially overloaded boolean operators such as
operator==(), operator!=() etc. Where booleans are packed into TInt8s or
the like to save space, consider using a flags word instead.
In rare cases TBools may have to be converted into integer values. This
may be the case when packing booleans into bytes, or when streaming them
out. One elegant and efficient way of doing that is to compare to EFalse;
e.g.,
TUint8 iPresent[aColorComponent]=(TUint8)(aComponentPresent!=EFalse);
Just casting is not sufficient because vital non-zero bits in the incoming
boolean may be lost.
Moreover, it is sometimes useful to assert things about the exact integer
value of a boolean. One example of this is test code. The built-in boolean
operators return either 0 or 1. It may be desirable to specify the same
behaviour for overloaded operators or even ordinary member functions. Use
the FALSE and TRUE macros in those cases; e.g.,
test((des1<des2)==TRUE);
The macros may also be useful when an ordinary integer is regarded as a
boolean. The E32Dll() entry point returns a TInt, for instance. FALSE and
TRUE may be used in that context. Another use is at the interface with
external code, such as the Win32 API. As a final example: a callback
function to be used in the context of a CIdle object might use the macros,
since its TInt return value is interpreted as a boolean.
Note that the conversion to this new scheme is only partially implemented
in the base.
6). Steve
New functions TSize TPoint::AsSize and TPoint TSize::AsPoint return
this as the respective type. Removed overloaded functions in TPoint,
TSize and TRect.
TSize::SetWH renamed to SetSize.
TRect - Functions renamed from Offset to Move and Normalise to
Normalize. New functions: Size, Width, Height, IsNormalized, Center,
SetSize, SetWidth and SetHeight.
Version 0.01.049
================
(Made by Matthew, 21 Nov 1995)
1). Andrew
The constness of the parameters to CCleanup::PushL and
CleanupStack::PushL has gone.
CCleanup and CleanupStack now have an extra PushL overload: This
takes a TCleanupItem, which is callback. This enables any component
to be placed on the cleanup stack by providing a implicit cast to
TCleanupItem: the component will require a static member which conforms
to the TCleanupOperation prototype, with which it can constuct a
TCleanupItem. The overhead of all this is negligible _only_ if the cast
operator is inline!
See the RItem class in the T_CTRAP test code for an example of how to
do this.
It is possible to push a no-data callback on the stack, though the function
must take a dummy TAny * parameter. Such a function can be PushLed
directly, as TCleanupItem provides a constructor from a TCleanupOperation.
2). Jane
Added code for the WINS platform to allow DLLs to startup in a chosen
order. When E32Dll() is first called (aReason==EDllProcessAttach), a new
function UserSvr::InitRegisterCallback(TCallBack t, TInt p) should be
called. This registers t as a callback function with priority p. All the
start-up functionality of E32Dll() should now be moved to the callback.
After all the DLLs have been loaded, the kernel runs through a priority
queue, doing callbacks in the requested order, and waiting on a semaphore
between each call. Before it terminates, the callback function should call
UserSvr::ServerStarted() to signal the semaphore, and allow the kernel to
callback to the next DLL's registered function.
See the t_start files in TADT.
Added support for sharing loading of dlls.
Fixed the thread cleanup code to correctly free resources owned by the
session, and exit cleanly if the thread creation failed due to lack of
heap. Should fix HA-7.
3). Matthew
CObject::Close now panics if the access count becomes negative, new test
code checks this.
In WINS, PP:MapLastError returns KErrDoesNotExist for the NT error code
ERROR_MOD_NOT_FOUND. This fixes HA-22.
Added a function RLibrary::LoadExact which loads a DLL without mangling
the name. To use this you will need F32 build 13.
4). Roger
Added __DEBUGGER() Macro.
Under WINS and MX86 this macro will place an inline int3 instruction into
your code. For ARM builds the macro expands to a SWI instruction.
The macro compiles out under release builds.
Under WINS __DEBUGGER() will cause the application to drop into the
debugger - it will also invoke just in time debugging if your system has
it enabled.
There is no kernel debugger support for ARM or MX86 builds.
The Macro is currently defined in E32STD.h this is a temporary measure
until there is a good area for platform specific pre-processor macros.
Fixed the two DPlatThreads with the same NT thread id in the kernel's
list of threads bug, HA-16 and HA-6.
5). Graham
New ARM code, added function TEiger::BootWaitMilliseconds(), changed
ArmVectorIrq() and CScreenDriverMarm::Blit().
Version 0.01.048
================
(Made by Jane,13 Nov 1995)
1). Colly
If a function has a parameter by reference immediately before the
ellipsis argument as in:
RTest::Printf(const TDesC &aFmt,...)
then there is a problem when using the variable argument macros as
follows:
VA_LIST list;
VA_START(list,aFmt);
since the macro use &aFmt to try and get the address of the argument
on the stack. However this does not work with arguments passed by
reference since &aFmt is the real address of the descriptor. I have
been using a special function User::SetVaArgList() to overcome this
difficulty. However this function does not work with register calling
conventions as for the ARM compiler and so a better solution has been
found. Many thanks to Geert for the solution as follows:
A new class has been defined TRefByValue as follows:
template <class T>
class TRefByValue
{
public:
inline TRefByValue(T &aRef);
inline operator T &();
private:
TRefByValue &operator=(TRefByValue aRef);
private:
T &iRef;
};
The assignment operator is just to stop the compiler whining since
it cannot generate the assignment operator. The trick is to pass a
reference by value and then have a cast to return the refernce again.
So all that needs to change is the function declaration as follows:
RTest::Printf(TRefByValue<const TDesC> aFmt,...)
Note that the TRefByValue is now passed by value so that
VA_START(list,aFmt)
will now work. SetVaArgList has now thankfully been banished.
NOTE: No functions calling these functions with ... should need
to be changed.
As a consequence of this change three pairs of overloaded functions
are now ambiguous:
TDesC::Format(TRefByValue<const TDesC8> aFmt,...); and
TDesC::Format(const TDesC8 &aFmt,VA_LIST aList);
TDesC::AppendFormat(TRefByValue<const TDesC8> aFmt,...); and
TDesC::AppendFormat(const TDesC8 &aFmt,VA_LIST aList);
TLex::Convert(TRefByValue<const TDesC8> aFormat,...);
TLex::Convert(const TDesC8 &aFormat,VA_LIST aList);
Resolved the ambiguity in each case by renaming the function which
takes the VA_LIST argument to end in List, i.e.
TDesC::FormatList(const TDesC8 &aFmt,VA_LIST aList);
TDesC::AppendFormatList(const TDesC8 &aFmt,VA_LIST aList);
TLex::ConvertList(const TDesC8 &aFormat,VA_LIST aList);
2). Colly
A mis-understanding between myself and Nick Twyman caused me to
change EXPORT_C to be defined empty. This is not correct and I have
put it back to the correct #define EXPORT_C __declspec(dllexport)
3). Colly
Fixed a bug in the TReal96 class which then showed up a failure
in the implementation of TReal96. TReal96 on being Set() was always
shifting the mantissa left three and then subtracting 3 from the
exponent. However all the function were not allowing for this. I
have changed the Set() code not to to the shift any longer. So if
real calculations are to be performed the shift will have to be
done before the calculation. GetTReal() and the cast to TReal
normalise as before. GetTReal() had a bug in that it was
normalising *this along the way to converting to a TReal. It should
in fact do nothing and be changed to a const function. Two new
functions need to be added, Normalise() and Prepare(). Normalise()
will do most of what GetTReal() is doing now but will do it directly
on *this, while Prepare() will do the left shift by three.
4). Colly
Changed all executive services to have 4 or less arguments to suit
the calling convention of the GCC compiler. i.e. all arguments are
in registers.
5). Colly
Added the ARM implementation of Epoc/32 for the Eiger chip and finally
got a workable release of the GNU tool chain from Cygnus. Work is now
progressing on getting Epoc/32 running on Eiger.
6). Graham
Various Eiger fixes.
7.) Jane
Changed build system adding the verbs mnt cleanup (deletes everything from \e32sys
and \work\e32\...) and mnt blddef (automated build of all the .def files into
\E32\BWINS and \E32\BMX86 directories). Made several changes to the DEFMAKE tool
to support this.
These should only need to be used by the base team - others can continue to
use mnt bldall etc. as usual.
8). Matthew
Test code for CPeriodic and TDayName etc added.
Fixed rounding bug in um_rtod.cpp (HA-15) & adapted Martin Hardman's test
code.
9). Jane
Fixed HA-13, setting iBase=0 in DestroyAll(), and wrote test code. Note that
DestroyAll() is due to be replaced by a function in a new class CArrayFixFlatCBase
which will subclass CArrayFixFlat<CBase *> and thus can be type safe.
10). Jane
Changed EXE header format in kernel and E32ROM to contain stack & heap maximum
and minimum sizes.
11). Jane
MMU - added allocation of linear regions (chunks) from high memory for DLLs, and
wrote test code.
12). Morgan
Maths fixes.
T_MATH.CPP:
2 sin tests (lines 1317-1321) were failing with the new TReal96 due to inaccurate
values for sin(3) and sin(4).
lntest4 now uses a bit test ( using the 'approx' class) to compare the results taking
into account any bit wobble.
UM_INT.CPP:
Fixed Math::Int(TReal &aTrg,const TReal &aSrc) aSrc.Exp() = KMantissaBits-32.
(Left shifting a TInt by 32 (eg x<<32) results in 0xffffffff when it was required to be 0).
UP_I64.CPP
Added TInt64A::MulTop which returns the top 64 bits of a 64x64->128 multiply.
UM_R96.CPP - TReal96 functions
Set() now writes the correct exponent for a 56 bit mantissa (and is consistent with the
transendental fuctions when KMantissaBits=56)
Added TMathPanics
Added test code for TReal96, RChunks and more tests for Int64
13). Colly
Various X86 keyboard fixes.
14). Martin
Changed Alloc heaven 'dialog' so that address of offending cell is visible.
Added a Replace function to descriptors (courtesy of Brendan), with test code.
Fixed TPtr::Set function to do the right thing with maxlen, modified test code.
15). Graham
Windows server changes.
16). Jane
Added KBX86 and KBARM boot source to PVCS.
Version 0.01.047
================
(Made by Colly, 9 Oct 1995)
1). Changed all TUint to TInt.
2). The UserSvr::RequestEvent(TEvent &anEvent,TRequestStatus &aStatus)
was unworkable for the Epoc/32 micro-kernel variants since the
O/S needs to write the resulting event back in the context of the
interrupt which may not be the same process as that requesting the
event. Like servers, this needs to be written using RThread::Write()
which needs to write to a descriptor in the requesting process. To
this end I have defined:
class TEventBuf : public TPckgBuf<TEvent>
{
public:
inline TEvent &Event() const {return(*((TEvent *)&iBuf[0]));}
};
The function now becomes:
UserSvr::RequestEvent(TEventBuf &anEvent,TRequestStatus &aStatus);
i.e. it takes the packaged event. The actual event can be returned
by using the () operator on the package or by calling Event().
3). The text window server had a bug which was causing the unicode
release build to fail reading the setup parameters in a random way.
4). CObjectIx::Destruct() was deleting NULL object handles. Fixed.
5). Made TRequestStatus a proper class so that it is now strongly typed.
This helps the compiler pick the correct overloaded function as
can happen in the file server for example. Note that there is no
conversion from a TRequestStatus to a TInt. Use the Int() function.
6). ROM sizes are now quoted for the Epoc/32 microkernel builds and
not for WINS as previously.
ROM SIZES
X86 ARM
--- ----
EUSER.DLL 94K 154K
EKERN.DLL 70K 110K
ELOCL.DLL 3K 3K
EFSRV.DLL 27K 41K
----------------------
TOTAL 194K 308K
----------------------
Version 0.01.046
================
(Made by Colly, 2 Oct 1995)
1). Added #defines _L8, _L16, _S8 and _S16 for string literals.
2). Eliminated wait handlers for device drivers. The function
User::AllowRequestsToComplete() is now redundant. Withdrawn.
3). KMinTInt8 and KMinTInt16 were not defined correctly. Fixed.
4). Completed the implementation of RHeap(). The various UserHeap
creation functions now have new arguments, aMinLength,
aMaxLength and aGrowBy. The heap will initially be aMinLength
in size, and can grow to be aMaxLength in size. If there is no
space in the heap then an attempt will be made to grow the heap
in aGrowBy increments. There is a new function Compress() which
will free any excess space at the end of the heap. Compress() will
never shrink the heap to less than aMinLength. The sizing code has
been modified to take account of the RHeap structure at the bottom
of the heap, so that the free size of a newly created heap will
always be >= aMinLength. None of this affects fixed heaps.
5). Changed RThread::Create() to allow the initial size of the heap
to be specified as well as the maximum size of the heap. These
are given as the aHeapMinSize and aHeapMaxSize parameters. All
heaps created in chunks are targets for compression if the system
runs out of memory.
6). Implemented the process handling functions for the first time in
the micro-kernel version, including an interface to allow a loader
server to actually load .EXEs and .DLLs. In a normal system the
loader server will be part of the file server. The 486 version
of Epoc/32 now supports multiple processes, full pre-emptive
scheduling, and execute in place .DLLs and .EXEs.
7). Added User::Beep(TInt aFrequency,TInt aDuration). The frequency
is in hertz so 440 is middle A. The duration is in tenths
of a second. As in Epoc/16 a negative duration indicates that if
the hardware to perform the beep is being used for another purpose
no beep will be sounded. As before if the duration is positive the
beep can hang up the program until the hardware is free to make
the beep. And as before the first beep will return immediately if
the hardware is not busy and the beep will continue in background.
Note that in Epoc/16 the frequency was specified as an interval.
This function is not playing a sound constinuously due to a bug in
Win32. It is however functionally correct. I will fix it in the
next release.
8). The constructor for the TPckg template class was leaving the
length of the descriptor as zero, when it should be the sizeof
the object T. Fixed.
9). Add support for drivers to the kernel. In Epoc/16 there were LDDs
and PDDs. In Epoc/32 a Device is equivalent to an LDD and a Driver
is equivalent to a PDD. The only user mode services for drivers
are TFindDriver which allows all installed drivers to be listed
and User::LoadDriver() and User::FreeDriver(). With the addition
of drivers \E32\KSRC\KS_DEV.CPP got too big to handle so I have
split out channels into KS_CHN.CPP and libraries (DLLs) into
KS_LIB.CPP and put drivers in KS_DRV.CPP.
10).Completed the implementation of the device driver functions in the
kernel and implemented the RDevComm device as well as a WINS driver.
Ax X86 driver for 16450s and 16550s is coming soon. Serial comms lives
again! The comms device and WINS driver are now part of the standard
release of E32 for WINS. The interface to the device is in D32COMM.H
and D32COMM.INL. It is necessary to load both the device driver
and the physical driver in order to use the comms device. An example
of how to do this is in \e32\dpwins\t_comm.cpp.
11).Added a public function CActive::Deque() which will allow the
active object to be removed from the scheduler queue. Deque()
will call Cancel() before dequeing the object. The object must
already be on the scheduler queue to be dequed or else a panic
will result.
12).Added a circular buffer template class CCirBuf<T> to E32ADT.H and
its test program T_CIRC.CPP. This is used by the serial device
to implement receive and transmit buffers. It allows items to be
added at the head of the queue while allowing items to be removed
from the tail of the queue. The buffers size can be changed
dynamically by calling SetLengthL(), although it will discard the
current contents of the buffer. Also added a class CCirBufer
derived from CCirBuf<TUint8> which add Get() and Put() which will
add or remove a single item and are optimised for speed.
13).Added the text window server to the standard build of E32. This has
now been implemented for WINS and EPOC/32-MX86 platforms. The source
of this server is in \E32\WSRC. It uses a screen driver .DLL
to perform character blitting to the screen. The test programs are
in \E32\TWIN. The RConsole class has the following facilities:
RConsole is used to communicate with the text windows server.
Version() Reports client side version information
Create() If necessary, opens a connection to the window server, then creates a default window without displaying
it. The default window characteristics may then be changed using Control() before proceeding to display
the window using Set().
Set() If necessary, opens a connection to the window server. If necessary, creates a window. Then displays
the window with the given title and attaches the given buffer size characteristics to it.
Write() Writes the given text at the current cursor position.
Clear() Clears the whole window and places the cursor at the top left corner.
ClearToEndOfLIne() Clears from the current cursor position to the end of the line
Destroy() Removes the window from the screen. Another may then be opened using Create()/Set().
SetCursorSize() Sets the percentage height of the cursor
SetCursorPosAbs() Places cursor at given absolute position.
SetCursorPosRel() Places cursor relative to current position.
CursorPos() Returns current cursor position
Control() Controls various window characteristics. The text passed to this function may contain near-English
commands. However, only the '+', '-', and upper-case letters are actually interpreted:
'+' Apply subsequent characteristics
'-' Remove subsequent characteristics
'V' Visibility
'C' Cursor on
'S' Scroll bars
'L' Scroll lock
'W' Wrap lock
'M' Maximum Window Size
'N' '/n' is CR and LF
Before interpreting the text, a silent '+' is assumed:
Control(_L("Visibility -Cursor Lock + Scroll"))
This would cause the window to become visible, with no text cursor, no scroll lock active,
but with scroll bars present. Of course, the following command would achieve exactly the same
result, but would not posses the same level of self-documentation or readability:
Control(_L("VS-CL"))
Further more, the next command would achieve the same thing with even more readability:
Control(_L("+Visibility -Cursor -Lock +Scroll"))
Read() Read a character.
ReadCancel() Cancel asynchronous read request
14).Set the priority of the kernel server thread and null thread
correctly on the EPOC/32 platforms.
15).Now allocating data section base addresses correctly so that multiple
threads will now work correctly on the EPOC/32 platforms.
16).Changed THandleBase::Duplicate(RProcess &aProcess) to be
THandleBase::Duplicate(RThread &aThread) since it is usual
to have the remote thread handle and unusual to have the remote
threads process handle. The O/S uses the thread's process as the
handle's source process.
17).RTimer.After() and User::After() were using a duration in ticks. This
has now been changed to a duration in tenths of a second so that it
is platform independent.
18).RProcess RThread::Process() was always returning the current
process rather than the thread's process. Also returning a new
handle based object can fail with out of memory so I have changed
this function to TInt RThread::Process(RProcess &aProcess) so that
it can return the error.
19).Under Windows/NT a mutex once owned by a thread can be waited on again
without locking the thread, on the basis that this protects a thread
from entering deadlock. However this is nonsense since a mutex can
be used to prevent a thread from accessing the resource as
happens in the case of the User::Beep() function. Basically the
mutex is used to lock out threads until the current beep has
completed. What takes the thread out of potential deadlock is the
beep completing in due course. Changed the WINS implementation to
behave correctly and lock the thread.
20).TLex::Val(TReal &) did not fail with a number like _L("1.2e"). Fixed.
21).The default constructor for the TLex class was still being set up for
zero terminated descriptors which were discarded in January. Fixed.
22).TLex::Peek() would happily try and access a character from a default
constructed TLex which resulted in an access violation. Now fixed.
Also dropped inline for Inc(),Peek() and Get().
23).CBufBase::Read(TUint aPos,TDes8 &aDes) is documented as reading up to
aDes.MaxLength() characters, but was in fact reading up to
aDes.Length() characters. Fixed.
24).RTimer was not setting the request status to KRequestPending after
an asynchronous request. Fixed.
25).I have changed EXPORT_C to just be nothing rather than
__declspec(dllexport). For the time being it is still required to
declare functions as EXPORT_C. If you had a function which did
not have a corresponding IMPORT_C then make sure that there is
an IMPORT_C defined somewhere or else the function will not be
exported.
26).Changed the heap checking macros to have understandable names and have
simplified their implementation. I have also made them orthogonal. The
new names and their old equivalents are as follows:
// For the user heap
__UHEAP_MARK MARKSTART
__UHEAP_CHECK(aCount) CHECKNUM1(x)
__UHEAP_CHECKALL(aCount) CHECKTOTALNUM1(x)
__UHEAP_MARKEND MARKEND
__UHEAP_MARKEND(aCount) MARKEND1(x)
__UHEAP_FAILNEXT(aCount) SETFAIL(x,y)
__UHEAP_SETFAIL(aType,aRate) SETFAIL(x,y)
__UHEAP_RESET RESET
// For the kernel heap
__KHEAP_MARK
__KHEAP_CHECK(aCount)
__KHEAP_CHECKALL(aCount)
__KHEAP_MARKEND
__KHEAP_MARKEND(aCount)
__KHEAP_FAILNEXT(aCount) K_SETFAIL(x,y)
__KHEAP_SETFAIL(aType,aRate) K_SETFAIL(x,y)
__KHEAP_RESET K_RESET
// For any RHeap
__RHEAP_MARK(aHeap) MARKSTART1(x)
__RHEAP_CHECK(aHeap,aCount) CHECKNUM2(x,y)
__RHEAP_CHECKALL(aHeap,aCount) CHECKTOTALNUM2(x,y)
__RHEAP_MARKEND(aHeap) MARKEND1(x)
__RHEAP_MARKEND(aHeap,aCount) MARKEND2(x,y)
__RHEAP_FAILNEXT(aHeap,aCount) UH_SETFAIL(x,y,z)
__RHEAP_SETFAIL(aHeap,aType,aRate) UH_SETFAIL(x,y,z)
__RHEAP_RESET(aHeap) UH_RESET
FAILNEXT,UH_FAILNEXT and K_FAILNEXT can be replaced
with __?HEAP_FAILNEXT(1)
It is no longer possible to check a threads heap since this will
not work under Epoc/32 if a thread is in another process.
In the first trial implementation of __?HEAP__FAILNEXT(aCount) I
had not realised that aCount did not do anything. This is now
fixed. Note that aCount==1 fails the next alloc call.
27).The member variable of TScreenInfoV01 were not declared with a lower
case i prefix. Fixed.
28).Released the console classes. The header for the console class in
E32CONS.H. It has an abstract base class CConsoleBase which just
defines a basic set of console functions. It also has CConsoleTextWin
which is the console implementation for the text window server.
29).Changed the WINS platform to use the the CConsoleTextWin instead of
a second Windows/NT console window. The test class now uses the
CConsoleTextWin. The console is released as ECONS.DLL. The
CConsoleTextWin class is defined in the E32TWIN.H header.
30).Changed the test class to use the console. Also added a Getch()
function to the test class. Because it now owns a console object
I have had to rename the test class RTest. I have also added
a Close() member function which will free an allocated console.
31).Added CConsoleBase *Adt::NewConsoleL() which will create a basic
console object. Note that you do not need to be linked to ECONS.LIB
in order to use this or any of the member functions of CConsoleBase.
32).Took the opportunity with the release of the X86 platform to rename
the WINS platform releaseables to be inline with those of the X86
platform. The new names are as follows:
OLD NAME NEW NAME
============ =============
ESTAT.OBJ EEXE.OBJ
ESTAT.LIB EEXE.LIB
EWINS.DLL EUSER.DLL
EWINS.LIB EUSER.LIB
KWINS.DLL EKERN.DLL
LWINS.DLL ELOCL.DLL
For programs the programs which use E32 the only changes to .MAK files
which are significant are as follows:
ESTAT?.OBJ to EEXE.OBJ - The startup object for .EXEs
ESTAT?.LIB to EEXE.LIB - The startup library for .EXEs
if linking with msvcrt20.lib
EWINS?.LIB to EUSER.LIB - The user library
33).Added an inline "construct in place" global new operator.
34).Due to popular demand I have moved the following functions
to a new class of their own CleanupStack.
Adt::PushL(const TAny *)
Adt::PushL(const CBase *)
Adt::Pop()
Adt::Pop(TUint aCount)
Adt::PopAndDestroy()
Adt::PopAndDestroy(TUint aCount)
become
CleanupStack::PushL(const TAny *)
CleanupStack::PushL(const CBase *)
CleanupStack::Pop()
CleanupStack::Pop(TUint aCount)
CleanupStack::PopAndDestroy()
CleanupStack::PopAndDestroy(TUint aCount)
35).For a long time I have been tracking down a race condition under
WINS which resulted in the kernel being hung. This turns out to be
a bug in the Windows/NT implementation of critical sections.
I have replaced the critical section with a mutex which fixes the bug.
36).I have fixed the T_SEMUTX.CPP program which has also long had a
deliberate race condition as part of its test. However the problem
was that sometimes it raced and sometimes it did not. By making each
thread wait different times its possible to always make the race
conditions occur so that the test will always pass consistently.
37).The CIdle class was doing a User::WaitForAnyRequest() in the
DoCancel() function. DoCancel() should just do nothing ofcourse
since the CActive::Cancel() function will do the WaitForAnyRequest().
Many thanks to Brendan for spotting the bug and for providing
the test code t_idle.cpp.
38).Adt::DestroyZ() was never any use, so I have removed it.
39).CSession::CreateL() was defined as pure virtual so that server
implmentors had to define a CreateL() function even, as is often
the case, the function did nothing. I have now supplied a default
implementation which does nothing.
40).CActiveScheduler::Install() would not allow the current scheduler
to be removed by passing NULL. This is now allowed. Note that if
you want to change the scheduler you must first de-install by using
NULL and then replace with the new scheduler.
41).Got most of the base test code working in release mode. For some
unknow reason, some of the test code template classes are not
instaniating in release builds. All tests pass but the following
have the body of their code eliminated.
T_BUF, T_CHAR, T_DES, T_HEAPDB, T_HUF
T_LEX, T_QUE, T_SQUE, T_KEY, T_FLOAT
In getting the test programs to work in the release build almost
all problems wre due to a dependency on the lifetime of
temporaries. In debug builds temporaries are never re-used so they
exist for the duration of the function. However in release builds
they are re-used at the first opportunity. Typical buggy code is
as follows:
class TBug
{
public:
TBuf();
void Set1(const TDesC *aDes);
void Set2(const TDesC *aDes);
private:
const TDesC *iPtr1;
const TDesC *iPtr2;
};
TBuf b;
b.Set1(&_L("Temporary 1"));
b.Set2(&_L("Temporary 2"));
This will work fine in debug builds but will result in iPtr1 and
iPtr2 pointing to the same value. This is because _L is defined
as a constructor for a TPtrC which creates a temporary. The same
automatic space will be used for the temporary.
42).HBufC::NewMax(),HBufC::NewMaxL() and HBufC::NewMaxLC() all ended
up setting the length to the size of the allocated cell which can
be bigger that the requested length. Changed to set the length
to the requested length.
43).Moved MemCopy(),MemCompare(),MemCompareF(),MemCompareC()
MemFill(),MemFillZ() and MemSwap() to a class of their own
called Mem and dropped the Mem prefix. So User::MemCopy() is
now Mem::Copy() etc.
44).Changed TDesC functions Match(),Locate(),LocateReverse() and Find()
to return an unsigned result. They all return KNotFound which is
defined as KMaxTUint if they fail.
45).The message system was not tidying up correctly when a session
was closed by the client or if the client died before closing. The
new implementation of messaging has now fixed this problem.
NOTE
====
20th September 1995.
The X86 implementation of the Epoc/32 platform ran through the
creation and execution of the first user mode process and then
eventually ended up in the NULL process and consequently the idle
loop. The MMU and protection is fully enabled, so this constitutes
the birth of Epoc/32. We hope to have the remainder of the boot
sequence, i.e. file server, window server and shell completed
by the end of the next week.
ROM SIZES
X86 ARM
--- ----
EUSER.DLL 90K 148K
EKERN.DLL 33K 47K
ELOCL.DLL 3K 3K
EFSRV.DLL 28K 42K
----------------------
TOTAL 154K 240K
----------------------
Version 0.01.045
================
(Made by Colly, 30 Aug 1995)
1). Changed the way messaging worked internally. RServer::Receive() used
to get a pointer to the message received. I was hoping to pass this
pointer directly from supervisor space for efficiency, but I have
decided that its not worth the extra overhead of read only shared
memory that wouldbe required. RServer now has a RMessage by value
which receives the contents of the message when it arrives. If the
server needs to hold onto the message then it must either copy
the message in full (I have added a copy constructor and an assignment
operator to allow this) or it must use the new function MessagePtr()
which returns a const RMessagePtr. The only thing you can do with
an RMessagePtr is to complete the message as you do with a normal
RMessage by call RMessagePtr::Complete().
While I was about it I also changes the naming of the accessor
functions I1(),P1() etc. The problem with the names was that on
the client side arguments were being set into an array using normal
indexing, i.e. base 0, while on the server side the names were based 1.
In order to help the conversion I have renamed I to Int and P to Ptr
so that:
I1() is now Int0()
I2() is now Int1()
I3() is now Int2()
I4() is niw Int3()
P1() is now Ptr0()
P2() is now Ptr1()
P3() is now Ptr2()
P4() is niw Ptr3()
Sorry for the inconvenience.
2). Moved a number of constructors in abstract base classes which were
public to protected. This should have no affect other than to stop
them being instantiated.
3). Withdrawn the new(ECleanup) and new(ECleanupObj) options. new(ELeave)
still exists. CBase * is not nescessarily the start of the heap cell
when MI is involved. In general a cast of (TAny *) to a CBase * will
not work unless the TAny * was originally downcast to a CBase *. If
you know the type T of a TAny *ptr then its o.k. to code
(CBase *)(T *)ptr;
but not
(CBase *)ptr;
4). More tiresome CBase * problems. TDblQue::DeletaAll and
TSglQue::DeleteAll were removing each item from the que and then
casting the ptr to a CBase * to call Adt::Destroy(). Withdrawn.
5). CActiveScheduler::Start() was not nesting levels correctly. Fixed.
6). Added TLex?::Offset() and TLex?::MarkedOffset().
7). The various TLex::Val() routines should not change iNext if they
fail to lex a valid number. Fixed.
8). Added TLex?::Val(TReal32 &aReal,TChar aPoint) and
TLex?::Val(TReal64 &aReal,TChar aPoint).
9). Added some extra key difinitions to E32VIRT.H
EKeyBell=0x0007,
EKeyLineFeed=0x000a,
EKeyVerticalTab=0x000b,
EKeyFormFeed=0x000c,
EKeySpace=0x0020
10).Implemented default constructors for TPtrC8 and TPtrC16 which
set the pointer NULL and the length to zero.
11).The X86 version of E32 now builds in unicode.
12).Changed CObjectConIx::Remove(CObjectCon *aCon) so that it can be
passed NULL. It does nothing if aCon is NULL.
13).Added CObjectCon::operator[]() to allow access to all objects in a
container by straight indexing.
Version 0.01.044
================
(Made by Colly, 23 Aug 1995)
1). TDes8::SetMax() and TDes16::SetMax() did not work correctly if the
TDes was from a TBufC.Des() or HBufC.Des(). This caused the
HBufC::NewMax() and HBufC::NewMaxL() to fail to set length to
MaxLength(). Fixed.
2). Added a new type TTrapHandler. This is an abstract class which needs
to be derived to provide a handler to work with the TRAP mechanism.
The trap handler can be installed by calling User::SetTrapHandler()
and can be cleared by passing a NULL pointer. By default there is no
trap handler. Once a trap handler is installed then each time TRAP is
invoked TTrapHandler::Trap() is called. If a leave is called then
TTrapHandler::Leave() is called. If the function being trapped does
not leave then TTrapHandler::UnTrap() is called. Each thread has its
own trap handler. Its not a good idea to install a trap handler while
under a TRAP (exercise for the reader to work out why), so a panic
will be given if this is attempted. The current trap handler can be
retrieved by calling User::TrapHandler().
3). Added a new ADT class CCleanup. The purpose of this class is to
provide an automated cleanup mechanism to go with the TTrapHandler
facility. This class is basically a stack onto which either
allocated cells can be pushed using PushL(TAny *aPtr) or objects
derived from CBase with PushL(CBase *aPtr). The object can
be popped from the stack with Pop() or popped and destroyed with
PopAndDestroy(). It is possible to pop a number of items from the
stack by using the overloaded Pop(TUint aCount) functions.
The object also allows for nesting so that all objects at the
current nesting level can be popped or popped and destroyed with
PopAll() or PopAndDestroyAll(). These functions automatically
decrement the nesting level. The nesting level can be incremented
with NextLevel(). When the object is created the level is zero.
Objects cannot be pushed while the nesting level is zero so it is
necessary to call NextLevel() before doing a PushL().
If the object is destroyed then all items on the stack will also
be destroyed.
The cleanup object keeps a free slot at all times. Thus an object
can always be guaranteed to be added to the cleanup stack. Having
added the object, room is made for another free slot. This may
leave but it will be alright as the object has already been pushed
onto the stack and will be cleaned up. Cleaning up leaves room for
another free slot.
4). Added a new ADT class CTrapCleanup which puts 2) and 3) together to
give a framework for cleanup. All thats necessary to implement this
facility is to call CTrapCleanup::New(). There is no NewL() since
the trap handler can only be installed while not under a TRAP.
Destroying this object will remove the trap handler. Added the static
functions Adt::PushL(const TAny *), Adt::PushL(const CBase *),
Adt::Pop(), Adt::Pop(TUint aCount) and the PopAndDestroy()
equivalents which all use the installed CTrapCleanup object. Note
that the PopAll() variants are not available, since this is done
by the trap handler.
5). Added 2 more types to TLeave, i.e. ECleanup and ECleanupObj. ECleanup
will allocate the storage and leave on error. If successful it will
add the new cell to the cleanup list. ECleaupObj is the same except
that it will add the cell as a CBase derived object. It is possible
to use ::new with ECleanupObj, but you will just get
panicked. It should only be used with CBase::new. Note that any
call to new within a member function in a class derived from CBase
will be calling CBase::new and so will need ECleanup. If creating an
object then ECleanupObj is correct. Using User::AllocLC() is probably
preferable and always call new(ECleanupObj) or new(ELeave).
Added RHeap::AllocLC(), User::AllocLC(), TDesC::AllocLC(),
HBufC::NewLC() and HBufC::NewMaxLC() which all are the same as
the equivalent L functions except that they add the object to
the cleanup list if successful.
Remember that a Pop() of some kind will be required.
6). Added the function to return machine information from the Hardware
Abstraction Layer (HAL). This is retrieved by calling User::HalInfo().
The class is declared in E32HAL.H. Setting functions will be added
in a forthcoming release.
Note that this function takes a TDes8. This is to allow for extensions
to the class as developments proceed apace. The function will always
fill the entire descriptor with zero and then copy the smaller of the
current size of the info class or size of the descriptor. Thus if a
new info class is used with an old O/S all new members are guaranteed
to be zeroed. If an old info class is used with a new O/S only the
appropriate slice of the new info struct is returned. There is a
typedef for a packaged THalInfoV1 called THalInfoV1Buf which can be
passed to User::HalInfo(). Ofcourse later version will be derived
from THalInfoV1 as THalInfoV2 and so on, leaving a clear picture of
what has been added between versions. The object can be retrieved
from the package as follows:
THalInfoV1Buf b;
User::HalInfo(b);
THalInfoV1 &info=b();
test.Printf(_L("Machine name = %S\n"),&info.MachineName());
See the test program \E32\TCDT\T_HAL.CPP for details.
7). The O/S was running DLL startup procedures before starting the file
server and window server threads. It has to do this to allow the
Window and File server DLLs to register their threads so that they
can be started in an ordered manner. However many other servers
like the alarm, comms and secokets servers would also like to start
the server thread from their E32Dll() entry point. The solution is
to hang all starting threads except the Window and File server
threads until the Window and File server threads have started.
8). Changed the RLibrary::Load() function so that it will automatically
add the approriate suffix for the current build. Thus if the file
server wants to load a .DLL called "elocal.fsy" it just uses
"elocal.fsy". The O/S will look for the .DLL names as follows:
Build Source Suffix Target
============ ============ ====== ==============
ansi release "elocal.fsy" none "elocal.fsy"
ansi debug "elocal.fsy" d "elocald.fsy"
uni release "elocal.fsy" u "elocalu.fsy"
uni debug "elocal.fsy" ud "elocalud.fsy"
Because of 8 character name limits the maximum length name of a DLL
can only be 6 characters. If an extension is not supplied it will
be assumed to be .DLL.
9). Added TPtrC8::Set(const TDesC8 &aDes) and TPtr8::Set(const TPtr8 &aPtr)
and the TPtrC16 and TPtr16 equivalents.
10).The resource file \E32\KPWINS\KWINS.RC was including afxres.h from
\msvc20\mfc\include which is not actually required. Fixed.
11).Fixed a bug in TLex::Val(TInt?) which has been lurking from day one
and was scraping by through good fortune.
12).Fixed a bug in creating global operating system objects such as
RSempahores etc.
13).Changed CArrayPakBase to be derived directly from CBase rather
than CArrayVarBase. This was being done to share code but because
of the public inheritance it caused some nasty problems since a
CArrayPakBase is definitely not ISA CArrayVarBase. Users of this
class note that the sort function is SortL() and not Sort() since
it makes a copy of the array as a CArrayVar and then sorts it.
Making the copy can clearly fail. Also note that since the sort is
actually performed on a CArrayVar the key for SortL() needs to be
a TKeyArrVar. Other functions take a TKeyArrPak as normal. No code
should be affected by this change.
14).Added const TArray<T> Array() to each of the array template classes,
which allows a degree of polymorphism amongst the arrays.
TArray<T> only allows const T &operator[]() and Count().
If you want a function to be able to read any of the arrays then
declare it as follows:
void ReadAnyArray(const TArray<TBuf_40> anArray);
It could use the TArray as follows:
TUint count=anArray.Count();
for (TUint i=0;i<count;i++)
test.Printf(_L("%S\n"),&anArray[i]);
Then if you have:
CArrayFixFlat<TBuf_40> *fix;
CArrayFixFlat<TBuf_40> *var;
CArrayFixFlat<TBuf_40> *pak;
They can all be passed to ReadAnyArray() as follows:
ReadAnyArray(fix->Array());
ReadAnyArray(var->Array());
ReadAnyArray(pak->Array());
15).SteveT was getting a weird problem with delete in one of
his CBase derived classes with the virtual destructor calling the
delete from the Windows library. The fix to his problem is to
provide CBase::operator delete() even though its not necessary.
Version 0.01.043
================
(Made by Colly, 21 Aug 1995)
1). Renamed CBufFlat::Capacity() to CBufFlat::SetReserveL().
2). Added the L suffix to all the methods in the ADT classes which
can leave.
CBufBase::InsertL(), CBufFlat::InsertL() and CBufSeg::InsertL().
CArrayFix::AppendL(), CArrayVar::AppendL() and CArrayPak::AppendL().
CArrayFix::InsertL(), CArrayVar::InsertL() and CArrayPak::InsertL().
CArrayFix::InsertIsqL(), CArrayVar::InsertIsqL() and CArrayPak::InsertIsqL().
Note that all occurences of ISQ (uppercase) have been changed to
lower case. Thus FindISQ() has become FindIsq().
Note also that the virtual function InsertL() has been renamed to
DoInsertL(), so that the derived classes do not have to re-define
the two new InsertL()'s in CBufBase.
3). The CArray classes had a kludged way of delaying allocation of the
CBufBase. Fixed.
4). Incorporated SteveT's changes to TPoint, TSize and TRect. His release
notes are as follows:
There are 3 changes to the TRect spec as agreed with Martin Tasker:-
Replaced
TInt TRect::InterSect()
with
void TRect::InterSection() &
TBool TRect::Intersects()
Changed the names of:-
TRect:Union() to TRect::BoundingRect()
TRect::Inside() to TRect::Contains()
I have also removed most of the inline functions from the TPoint,
TSize & TRect functions. The only ones left as inline are the
TPoint & TSize constructors and operator=, although I'm still not
too sure whether they should stay inline or not.
5). Changed CBufBase::Ptr() and CBufBase::BackPtr() to return TPtrs
rather than pointer and length.
Added CBufBase::Read(TUint aPos,TDes8 &aDes)
which will read aDes.Length() bytes.
Added CBufBase::Read(TUint aPos,TDes8 &aDes,TUint aLength)
which will read aLength bytes.
Added CBufBase::Write(TUint aPos,const TDesC8 &aDes)
which will write aDes.Length() bytes.
Added CBufBase::Write(TUint aPos,const TDesC8 &aDes,TUint aLength)
which will write aLength bytes.
Added CBufBase::InsertL(TUint aPos,const TDesC8 &aDes)
which will insert aDes.Length() bytes.
Added CBufBase::InsertL(TUint aPos,const TDesC8 &aDes,TUint aLength)
which will insert aLength bytes.
6). Removed the protected destructor (not actually implemented) from CBase
and changed CBase::Destroy() so that it does not delete this.
Renamed CBase::Destroy() as CBase::Destruct() and all other
virtual Destroy()s to Destruct().
Changed Adt::Destroy() to call delete after the Destruct().
This allows CBase derived objects to be aggregated by value, although
it is not Psion policy to do this (preferring to aggegrate by reference).
Note that there is no longer any requirement to call CBase::Destroy()
from classes derived from CBase.
Note that if aggregating by reference which should be the case for
all Psion code then the object must be destroyed with Adt::Destroy()
rather than the Destruct() function. Its probably a good idea to
search all code for ->Destroy() and check each case. Also make sure
that all classes derived from CBase which have virtual void Destroy()
are changed to virtual void Destruct().
7). CObjectIx, CObjectCon and CObjectConIx could all be created with
optional leave on error. This is not in the spirit of
the ADT classes and so I have removed the option. They will now
always leave on errors. The methods have been renamed where
applicable with the L suffix. These classes were also privately
derived from CArrayFixFlat<T> which was breaking the ISA
relationship with CBase, which prevents use of Adt::Destroy().
They now have a CArrayFixFlat<T> and are derived directly from
CBase. CObject and CObjectCon used to capitalise the name. They
are now case sensitive on the names. Note this affects server
names (watch out SteveT and Brendan).
8). TPckg<T>::operator->() and TPckg<T>::operator()() were returning
const T * and const T & respectively. Fixed.
9). Added HBufC::NewMax() and HBufC::NewMaxL() which allocate an HBufC
of the requested size and then set the length to the maximum length.
Note in the proposals database a function it was agreed to add
a function SetLengthToMax() to TDes. This has been done but I decided
to call it SetMax(). Obviously these functions are available for 8
and 16 HBufC's as well.
10).If multiple inheritance is to be allowed for then the only way to
guarantee that an Adt::Destroy() through a CBase pointer will work
correctly is to have a virtual destructor. This has been implemented
in CBase. No derived classes need to be changed as the compiler will
generate the appropriate destructors automatically. If this seems
like a waste then I have to agree, however it will make us compatible
with the C++ language and all proper C++ implementations. If you want
to know more details then ask me, Gerry or DavidW.
11).The ENTER,CATCH,END_ENTER mechanism had a serious flaw when using
a register calling convention. This has now been replaced with the
pre-processor macros TRAP and TRAPD. These are defined as below:
#define TRAP(_r,_s) {TTrap __t;if (__t.Trap(_r)==0){_s;TTrap::UnTrap();}}
#define TRAPD(_r,_s) TInt _r;{TTrap __t;if (__t.Trap(_r)==0){_s;TTrap::UnTrap();}}
Basically _r is an integer variable which will receive the result of
any User::Leave() and _s is a statement to be executed. It can be any
valid C++ statement, but will normally be a function call.
The difference between TRAP and TRAPD is that TRAPD will declare the
integer variable for you. The integer variable will always be
initialised to 0 before the statement _s is executed. It is possible
to use a number of statements for _s by separating them with ; but
this will possibly lead to failure.
Examples:
CSomething *pS=new(ELeave) CSomething;
TRAPD(ret,pC->ConstructL())
if (ret!=KErrNone)
{
Adt::Destroy(pS);
User::Leave(ret);
}
is the same as
CSomething *pS=new(ELeave) CSomething;
TInt ret;
TRAP(ret,pC->ConstructL())
if (ret!=KErrNone)
{
Adt::Destroy(pS);
User::Leave(ret);
}
If you have a function, say TInt DoSomethingL() and you want to
get the result of the function or the leave then do this:
TRAPD(ret,ret=DoSomethingL())
12).Changed RHeap::Free() to zero the cell it has just freed in the debug
build.
13).Added User::RequestComplete() which will complete a request in for
the current thread.
14).Added a new CDT TCallBack which packages a function taking a TAny *
argument and returning an integer with a TAny * value. It has a two
constructors, the one which does not have a TAny * value will set the
value to NULL. It has one function CallBack which can be used to call
the function passing it the TAny * value. e.g.
class TMyIdle
{
public:
void Run();
static TInt Idle(TAny *aPtr);
};
TInt TMyIdle::Idle(TAny *anObj)
{((TMyIdle *)anObj)->Run();}
TMyIdle idler;
CIdle *pI=CIdle::New();
pI->ConstructL(TCallBack(TMyIdle::Idle,&idler));
15).Added a new active object CIdle which will call back whenever
the active scheduler has scheduled all higher priority objects.
CIdle will re-schedule itself as long as the callback function
returns TRUE. It can be re-started by calling Start() again.
New() and NewL() add the idle object to the scheduler.
16).Changed CPeriodic to use a TCallBack. Note the CPeriodic::RunL()
now always calls the callback.
17).Added TLex8::UnGetToMark() and TLex16::UnGetToMark() which just
reset iNext to iMark.
18).Renamed all the functions which were in the debug build but not in
the release build to have an __Dbg prefix. Also renamed the test
functions __TestInvariant() and __Test to __DbgTestInvariant and
__DbgTest. This is partly as a reminder to users of these functions
that they should only be used inside #if defined(_DEBUG) and partly
to ease producing the .DEF file to control the .DLL build process
using linkage by ordinal. An automated tool will generate the .DEF
file for a .DLL linked by name and will produce the .DEF for the
debug build. It can then produce the .DEF for the release build
by leaving out all the functions starting with __Dbg.
Version 0.01.042
================
(Made by Colly, 3 Aug 1995)
1). All DLLs now link by ordinal.
2). The release versions had a startup bug with some configurations of DLL
useage. DavidW this is what cause the BAFL test code to fail.
3). Includes the first release of the Epoc/32 microkernel platform and
implementation for 486 processor on an IBM/PC.
NOTES
=====
Its a good idea to turn on DEBUG under link so that release EXEs and DLLs
have at least the public symbols for debugging. This can be done for
all build variants. I have done this for all .MAK files in E32 and F32.
Version 0.01.041
================
(Made by Colly, 25 July 1995)
1). RThread::Read() failed when reading a descriptor of the type
generated by TBufC::Des(). Added a test and fixed.
2). Made the NULL thread hang around forever instead of exiting to help
with debugging.
3). Added a new directory BWINS to the group which now has all the .MAK
files used to build the base. If the .MAK is in the same directory
as the source files then the debug databases .PDB files don't store
a full path which causes the debugger to prompt for the source
directory. Putting them in BWINS causes all paths to be stored in the
.PDB. Note that the BLD.CMD files remain where they were they just
pick up the .MAK file from BWINS. If using VC++ then load the .MAK
file directly from BWINS. Moved the startup files from USTAT to
UPWINS and dropped the USTAT directory from the group.
Split the startup module us_stat.cpp into two UP_EXE.CPP for
starting .EXEs and UP_DLL.CPP for starting DLLs.
4). Split EWINS into two .DLLs. EWINS still survives but now contains
just the user mode functions. KWINS is new and contains the kernel.
There is no need to change any .MAK files as it is only the
EWINSxx.DLLs which link to KWINSxx.DLL.
5). Stopped releasing the include file E32CHAR.H.
6). Merged the E32EVNT.H and E32WSRV.H header files into one header file
E32SVR.H which is just for communication with system servers such
as the Window server and File server etc. Moved the functions which
were in the UserWindowServer class to the UserSvr class and gave
the functions better names. Note that I have given the functions in
the UserSvr class more meaningful names. SteveT, these changes will
affect you!
7). Fixed missing external references to _fltused, _adj_fdiv, _adjust_fdiv,
_adjust_fdivr_m64 and _adjust_fdiv_m64.
8). Added the functions to support Global and thread local data in DLLs.
The functions are as follows:
TAny *Dll::Tls() - Returns the Thread Local Storage variable for the
current DLL.
void Dll::SetTls(TAny *aPtr) - Sets the Thread Local Storage variable
for the current DLL.
Usually in the entry point E32Dll() when the process is attached or
when a thread is attached to the DLL some memory will be allocated
on the threads heap. This value will then be saved with Dll::SetTls().
Thereafter it can be retrieved with Dll::Tls().
The following functions are not yet fully implemented:
TBool Dll::GlobalAllocated();
TInt Dll::GlobalAlloc(TUint aSize);
TInt Dll::GlobalRead(TUint aPos,TDes8 &aDes);
TInt Dll::GlobalWrite(TUint aPos,TDesC8 &aDes);
Dll::GlobalAlloc() allocates the global data for the currently
running DLL. Specifying a size of 0 will free the data. The amount
of data allocated can be changed by calling Dll::GlobalAlloc()
repeatedly. It is normal to allocate the global data in the entry
point E32Dll() when a process attaches and when
Dll::GlobalAllocated() returns EFalse. There is no need to free
the data since if the DLL is unloaded the data will be freed. However
it is possible to use some of the allocated data to keep a reference
count which can be incremented on process attach and decremented on
process detach. When the count is zero it can be discarded.
Since the data is kept in the kernel the DLL cannot have direct
access to the data, so it must be read and written using the
Dll::GlobalRead() and Dll::GlobalWrite() functions. It
is considered a panic to write past the current size of the data
but not an error to read past the end of the data.
These functions are implemented in a class of their own since they
need to be statically linked with each DLL or EXE (note than an
EXE is also potentially a DLL) on the WINS platform.
Finally it is a good idea to minimize the size of the global data.
Look at the test DLL \e32\tcdt\t_dll.mak and the test program
\e32\tcdt\t_tdll.mak to see how this works in practice.
9). Now release EXDLL??.PDB files. These come from EXDLL??.OBJ which is
a start up module for EWINS??.DLL, KWINS??.DLL and LWINS??.DLL which
have special initialisation requirements. These are just released as
an aide to debugging.
NOTES
=====
It is now vital that programs are build with proper make files. In
particular any program still linking to the C runtime library MSVCRT20.DLL
will fail to start correctly. Note that we are only talking about the
C runtime library and not the Win32 API libraries kernel32.lib,
gdi32.lib, user32.lib etc. The C runtime library is no longer necessary
as the base is now running entirely independently.
All EXEs should be linked with ESTAT??.OBJ and should have _E32Startup
set as the entry point.
All DLLs should be linked with EDLL??.OBJ and should have _E32Dll set
as the entry point. Remeber that a DLL must now supply a function
E32Dll(). To see and example look at the code in \E32\DPWINS\WS_UTL.CPP.
Everything should be linked with the user library EWINS??.LIB. Apart from
other E32 software nothing else should be necessary.
Make sure that "Ignore all default libraries" is set and that
"Disable exception handling is also checked" and that alignment is
set to 4 bytes.
If you are not sure then start with one of the .MAK files released by
the base and modify it to suit your project.
Version 0.01.040
================
(Made by Colly, 20 July 1995)
1). Converted the kernel to having a Kernel Supervisor Server and an
executive.
2). Replaced the specific exit type of exception with a Panic() category
of Exception.
3). Clean compiled all the platform independent source code with the GCC
compiler with the exception of the sources in UMATH.
4). Added cleanup functionality to the kernel.
5). Incorporated SteveT's fixes to pointer messages with the new screen
surround.
6). Added Martin Dolphin's CArrayPacked classes. Renamed the classes
"Packed" to "Pak". His release notes follow:
This version of CArrayPak inherits from CArrayVar and uses
some virtual functions to achieve code reuse. TKeyArrayPak
inherits from TKeyArrayVar.
ucdt\uc_func.cpp
This has a slightly modified binary search.
This modification guarantees that:
//if no match is found.
//the index of the record logically following the value being searched
//for will be returned in aPos.
uadt\ua_array.cpp
Has the new CArrayPak code plus some other small
modification listed below.
CArrayFixBase::InsertIsq changed to reflect change in BinarySearch.
CArrayVarBase::Find, FindIsq have had unused length parameter
removed, some functions made virtual to achieve code reuse.
8). Fixed further bugs in TInt64 divide and remainder functions as
reported by SteveT.
9). Incorporated SteveT's changes to the region classes.
10).Incorporated the faster versions of User::MemCopy(),User::MemFill()
and User::MemFillZ()
11).Added two template inline functions to align pointers.
inline T *Align2(T *aPtr)
inline T *Align4(T *aPtr)
Align2 will make ((T *)&1)==0
Align4 will make ((T *)&3)==0
and two template functions to align integers.
inline TUint Align4(T aVal)
inline TUint Align2(T aVal)
12).Removed the Notify() and SetNotify methods from RThread and RProcess.
They will re-appear in the file server in due course.
13).Added the executive dispatcher to the kernel.
14).Rationalised the RThread and RChunk read/write routines.
15).Changed CActiveScheduler::Destroy() to just remove active objects
from the schedule queue. It used to destroy them as well. Before
removing each active object it will call CActive::Cancel();
16).Fixed a bug in TLex8::NextToken() and TLex16::NextToken() which
was not checking properly for the end of the buffer. Found by Martin
Dolphin by trying to lex an empty command line.
17).Changed the name of the key matching enumerates as follows:
TKeyArrayCmp to TKeyCmpText
TKeyArrayCmpNumeric to TKeyCmpNumeric
Added another constructor for comparing descriptors and changed
the order of the parameters as follows:
inline TKey(TUint anOffset,TKeyCmpText aType);
At anOffset should be one of the descriptor types, TPtr,TBufC etc
inline TKey(TUint anOffset,TKeyCmpText aType,TUint aLength);
At anOffset should be TText of length aLength.
inline TKey(TUint anOffset,TKeyCmpNumeric aType);
At anOffset should be an integer of some type.
Added support for TInt64s.
This change is propagated to the various TKeyArrayXXX:: classes.
18).Fixed a race condition in the kernel when resuming threads.
19).If a thread panics then it just quietly disappears. If this is
one of the server threads then the program appears to hang for
no reason. To this end I have added new services RThread::Server()
and RThread::SetServer(TBool aState). Any thread marking itself as
a server with RThread().SetServer(ETrue) will have its panics
reported through the messagebox and will then abort the program.
Note that this is done for the main thread as well.
NOTES
All test programs pass in all builds.
Version 0.01.039
================
(Made by Colly, 23 June 1995)
1). Finally removed the dependency on the C runtime libarary.
There are new libraries in t:\msvc21\lib which should all
be copied to c:\msvc20\lib. This is still necessary as the
main operating system .DLL and SteveT's .DLL still link to
the runtime library MSVCRT20.DLL. Also copy
t:\msvc21\system32\*.* to c:\winnt35\system32\*.*
The build for a .EXE has now changed as follows:
a). Select project settings and highlight all 4 builds:
Select the Link tab and the Output category.
Set Entry-point symbol to _E32Startup
(The case is important in _E32Startup)
Select the general category.
Delete all the libraries/object modules.
Make sure "Ignore all Default libraries" is selected.
b). Select each build in turn and set the libraries/object modules
as follows:
Release : \e32sys\estat.obj \e32sys\ewins.lib
Debug : \e32sys\estatd.obj \e32sys\ewinsd.lib
Uni Release : \e32sys\estatu.obj \e32sys\ewinsu.lib
Uni Debug : \e32sys\estatud.obj \e32sys\ewinsud.lib
If in doubt look at one of the test programs.
The build for a .DLL which is linked to Win32 does not need to
change at all.
The build for a .DLL which is linked only to E32 must be changed
as follows:
a). Select project settings and highlight all 4 builds:
Select the Link tab and the Output category.
Set Entry-point symbol to _E32Dll
(The case is important in _E32Dll)
Select the general category.
Delete all the libraries/object modules.
Make sure "Ignore all Default libraries" is selected.
b). Select each build in turn and set the libraries/object modules
as follows:
Release : \e32sys\edll.obj \e32sys\ewins.lib
Debug : \e32sys\edlld.obj \e32sys\ewinsd.lib
Uni Release : \e32sys\edllu.obj \e32sys\ewinsu.lib
Uni Debug : \e32sys\edllud.obj \e32sys\ewinsud.lib
c). Provide a function prototyped as follows:
GLDEF_C TInt E32Dll(TDllReason aReason)
See \f32\sfsrv\fs_utl.cpp for an example of such a function.
The new system cannot be build with the project system at the
moment and must be built with the VC++ IDE. The correct build
order is as follows:
\e32\lsrc\lwins.mak
\e32\kpwins\ewins.mak
\e32\ustat\estat.mak
\e32\ustat\edll.mak
2). Added the fancy graphics screen bitmap of protea to surround the screen.
It does not appear in its full glory on my work machine, but it does on
my home machine. Perhaps SteveT can sort this out for me. I am also
assuming that SteveT will handle the buttons on the imaghe and return
them as key strokes.
3). CServer::RunL() was still using delete to remove a session when
a client disconnected rather than Destroy().
4). Added a protected destructor to CBase which will stop any objects
derived from CBase being placed on the stack.
5). Increased the Window servers stack to 1MByte.
6). TInt64 divide was not working for large intergers.
7). Absorbed SteveT's new region code.
8). Fixed a bug in TLex::Val() which was not dealing with the end of the
descriptor properly. MartinH's fix.
9). Added the TReal to buffer and buffer to TReal functions. The maths
library is now complete. Thanks to MartinH.
10).Fixed a bug in CArrayFixBase::DestroyAll().
11).Moved the TInt64 class from E32MATH.H to E32STD.H and its source
code from umath to ucdt.
12).Took the additions to the bitmap allocator from JaneS
13).New version of enter and leave which should fix previous problems
NOTES
=====
1). T_LEX.CPP failed because the TReal functions now work. I have
commented these out until MH can fix them.
2). T_THREAD.CPP and T_SEMUTX.CPP fail under the unicode debug version.
T_THREAD because their is a race condition in the kernel somwhere
and T_SEMUTX.CPP because there is a bug in the program logic. I will
fix these in the next release.
Version 0.01.038
================
(Made by DavidW, 19 May 1995)
One step backwards before taking two steps forward again!
Put back RRegion::~RRegion to allow the Window Server and GDI to
release new versions quickly, compatible with the latest E32, before
they take more time over the next week to convert to a new RRegion
scheme altogether.
[Added later - fixed INCC.PRJ to release E32DES8.H & E32DES16.H]
Also made a fix to MNT.CMD which meant that only the Release build
versions were being released. The ESTAT*.PDB files weren't being
released either.
Note: T_I64 still fails in UON.
T_SEMUTX fails intermittently (in either UON and UOFF).
Version 0.01.037
================
(Made by Colly, 19 May 1995)
1). Fixed a bug in Math::Rand().
2). Moved the private classes TRectKey and TRectSwap in RRegion
to be declared locally in u_regn.cpp.
RRegion still has a virtual destructor which I have now removed. I
notice that the test code t_regn.cpp does not test either the Close()
or Destroy() functions.
3). Re-organized the entire group.
SUSER has been split into
UCDT - User Concrete Data Types, platform independent
UPWINS - User Wins platform dependent
SOLIB renamed to UADT - User Abstract Data Types
SMATH renamed to UMATH
TUSER renamed to TCDT
TOLIB renamed to TADT
SKERN renamed to KSRC
SWINS renamed to KPWINS
SWINSD renamed to DPWINS
SLOCL renamed to LSRC
4). In line with the above I have renamed E32OLIB.H and E32OLIB.INL
to E32ADT.H and E32ADT.INL.
5). Added class CBitMapAllocator to Adt. This class uses a bitmap to
control allocation of resources. It is used by the PageAllocator
in the micro kernel to allocate free physical pages. Another
potential use is in implementing a block allocation scheme in
a binary file such as a BTree index file.
6). I have changed the way the version numbers are formatted by TVersion.
7). Fixed a bug in RSubSession::Close() which did not check for a NULL
handle before despatching the close message to the server. It is
normal practice to allow a close on something which has never been
opened/created.
8). Recorded the size of components in the release history.
9). The localising code is now released separately as LWINS.DLL. This
is currently included in the base release zip file ewins. Note that
only ewins.dll has a dependency on this file so that no build files
need change.
10).Changed TDblQueIterBase::Wind() and TDblQueIterBase::Rewind()
to TDblQueIterBase::SetToFirst() and TDblQueIterBase::SetToLast()
Also added TDblQueIter<T>::Set(T &aLink) which will start the
iterator on a particular link.
11).Changed TSglQueIterBase::Rewind() to TSglQueIterBase::SetToFirst()
Also added TSglQueIter<T>::Set(T &aLink) which will start the
iterator on a particular link.
12).Added a function Adt::DestroyZ(CBase * &anObject) which will
destroy an object if anObject is not NULL and will then zero
anObject.
13).Added DestroyAll() to CArrayFixFlat and CArrayFixSeg which
assumes that the array is a set of CBase pointers, i.e.
CArrayFixFlat<CBase *>. The only check that is made is the the
record length==sizeof(CBase *). Note that DestroyAll() destroys
all the non-NULL pointers and then calls the normal Destroy().
14).Added a new template class TAggregate to e32atd.h. The idea
behind TAggregate is to automate the desctruction of aggregate
objects in CBase derived classes. Say you have three active
objects owned by your object CMyObject the current way of
writing the class is as follows:
class CMyObject : public CBase
{
public:
CMyObject();
virtual void Destroy();
inline CTimer &Timer(*iTimer);
inline CServer &Server(*iServer);
inline CComms &Comms(*iComms);
private:
CTimer *iTimer;
CServer *iServer;
CComms *iComms;
};
And the Destroy() is as follows:
void CMyObject::Destroy()
{
Adt::DestroyZ(iTimer);
Adt::DestroyZ(iServer);
Adt::DestroyZ(iComms);
CBase::Destroy();
};
With TAggregate you would do it as follows.
class CMyObject : public CBase
{
private:
enum {ETimer,EServer,EComms,EMaxAggregate};
public:
CMyObject();
virtual void Destroy();
inline CTimer &Timer(*((CTimer *)iAgg.iPtrs[ETimer]));
inline CServer &Server(*((CServer *)iAgg.iPtrs[EServer]));
inline CComms &Comms(*((CComms *)iAgg.iPtrs[EComms]));
private:
TAggregate iAgg[EMaxAggregate];
};
And the destructor is as follows:
void CMyObject::Destroy()
{
iAgg.Destroy();
CBase::Destroy();
};
If one of the aggregates is removed or another is added all that
has to be done is add a new enum and the accessor method.
The Destroy() will automatically be correct. Note that there is
no additional overhead for the iAgg.iPtrs[] in the accessors.
15).I have added a new template class TAutoClose to e32std.h which
will add a destructor to any class which has a Close() method.
This is useful for functions in which you want to take advantage
of the compiler automatically destructing the object when it goes
out of scope. e.g.
TInt ReadFile(const TDesC &aFile)
//
// Read a file
//
{
TAutoClose<RFile> f;
TInt r=f.iObj.Open(aFile,KFileStreamText|EFileExclusive);
if (r!=KErrNone)
return(r);
TBuf_100 b;
if ((r=f.iObj.Read(b))!=KErrNone)
return(r);
.....
}
There is no need to call f.iObj.Close() as the compiler will do that
automatically when f goes out of scope. Even if the early return
after f.iObj.Read() is taken the compiler will still call
f.iObj.Close(). There is no overhead to using the TAutoClose class.
16).Added SetMax() to TDes which set the length of the TDes to
MaxLength(). i.e. equivalent to:
TBuf_100 b;
b.SetLength(b.MaxLength());
17).Added TPtrC::Set(const TText *aBuf,TUint aLength) and
TPtr::Set(TText *aBuf,TUint aLength,TUint aMaxLength)
since assignment of a TPtrC is not supported and assignment
of a TPtr means a deep copy rather than a shallow copy.
18).Renamed the files E32DES8.INL and E32DES16.INL if E32DES8.H and
E32DES16.H
Comp Date Bld .text .bss .rdata .data .idata Total
===== ========= === ====== ====== ====== ====== ====== ======
LWINS 17-Mar-95 37 822 32 1344 1092 268 2704
EWINS 17-Mar-95 37 82484 560 6012 1156 2916 92568
.text = The code size (a good indication)
.bss = The uninitialized data size (a good indication)
.rdata = The const data size (a good indication)
.data = The initialized data size (a good indication)
.idata = C++ initialisation + .DLL export table (unreliable indication)
The .idata section is unreliable since it has all .dll refences by name.
As .dll references will be by ordinal rather than by name I expect these
sizes to fall quite a bit.
Note that the current conversion factor from VC++ to GC++ is multiply
by 1.16
NOTES
=====
1). I think that all the heap debug macros in e32std.h should be prefixed
with __ and should be moved to their own include file e32hdbg.h which
is included by e32def.h. I also removed the unnecessary spaces in
their declaration which have been added back in build 035.
2). The functions RHeapDebug() in the RHeap class look like constrcutors
which they are not. The should be declared as returning void and
should also be given a different name. There are a number of comments
in the RHeap class declaration which I have removed.
3). T_thread.cpp fails. Also this program was including the header file
k32kern.h so that is could call Plat::CurrentProcess() to get the
current process. It is a bad idea for any test programs to call any
function in the kernel. This won't be possible on any other platform.
The correct way to get the current thread or the current process is
just to use an RProcess() or RThread() constructor. i.e.
if (RProcess().Mark())
etc.
if (RThread().Priority==EPriorityNormal)
RThread().SetPriority(EPriorityAboveNormal);
This works because the constructor for an RProcess or RThread sets
the RThread or RProcess handle to a special token which means the
currrent process or the current thread. It does no have to be
opened or created in the normal way.
Also the current process can be got from the current thread e.g.
RThread().Process()
P.S. This was covered in the release 26 release notes.
4). T_HEAPDB.CPP also includes k32kern.h (now k32std.h) so that it
can call Kern::UserHeap(). This is unnecessary as there is
already a call User::Heap() which returns the current heap. I have
fixed the test program.
5). T_I64.CPP still fails on divide. I will fix this in the next release.
Version 0.01.036
================
(Made by MartinB, 11 May 1995)
1) New SetThreadAllocFail method in User (MartinH).
2) New macros in e32def.h (MartinH).
3) New Math functions and test code (MartinH),
4) New ASSERT_DEBUGs in RHeap::Alloc.
5) Removed User::SetWSAllocFail, since cannot have window server
dependencies in the base.
6) Improved region code (Lane).
7) Added several "long ptr" qualifiers in P_I64.CPP. MSVC was
treating constants as 16 bit values when moved into (say)
[ebx]. (MartinB).
All test code runs for ASCII DEBUG and UNICODE DEBUG builds (MartinB)
(except T_I64 which does not run in UNICODE).
Version 0.01.035
================
(Made by MartinB, 9 May 1995)
1) Fix to Mul routine in P_I64.CPP.
2) New region code from Steve/Lane.
3) New T_THREAD test code from MartinH.
4) New T_I64 test code from MartinH.
All test code runs for ASCII DEBUG and UNICODE DEBUG builds (MartinB).
Version 0.01.034
================
(Made by Colly, 9 May 1995)
1). In both versions of RSessionBase::SendReceive() the parameter
TAny *aPtr can be passed as NULL.
2). Converted the design E32 to make the categories Kernel, User and
Olib as units. This allows other designs to import these units.
3). Added to RChannelBase overloads for DoRequest() and DoControl() which
allow none, one or two arguments.
4). Added three functions to the TLex classes.
void SkipAndMark(TInt aNumber) which moves the mark along by aNumber.
TPtrC Remainder() which returns the remainder of the buffer after
the mark.
void Inc(TInt aNumber) which moves the pointer on by aNumber.
5). Added IMPORT_C TAny *operator new(TUint aSize,TUint anExtraSize)
to CBase.
6). I have removed the resource file stuff from Olib because I do not
want the base to have a dependency on the file system. Note that in
due course the file server like the window server will live in its own
group and is only included with E32 for convenience while I develop
it. The file server is already completely independent of the operating
system.
I suggest that we have two DLLs called something like HCILI and HCILU.
HCILI would contain user interface independent code and HCILU would
have user interface dependent code. Then a getbld can go something like
this:
GET E32 // The base
GET F32 // The file server
GET W32 // The window server
GET HCIL // Both HCIL DLLs
I originally intended to supply the base as 3 DLLs, i.e.
E32KERN.DLL,E32USER.DLL and E32OLIB.DLL I now intend to supply it as
just two merging E32OLIB.DLL and E32USER.DLL into E32USER.DLL. For
those who are fond of the name OLIB I am quite happy to relinquish
the name and HCILI.DLL could be OLIB.DLL. But OLIB is a funny name
as it stands for Object library which is strange since all libraries
are now object libraries. Maybe its time for OLIB to just disappear.
7). In messages associated with a RSubSession the handle was being passed
in P1(). This was not the best option so I have now changed it to P4().
Note that for a SubSessionCreate message a descriptor is passed in P4()
rather than P1() which a server should use to write back the handle
of the sub session. See \e32\swinsd\ws_main.cpp for an example of the
approriate code.
8). Added Math::Rand(TInt64 &aSeed). This returns a random number in the
range 0 to KMaxTInt (i.e. positive) and updates the seed.
9). Renamed the operating systems Segment to Chunk to avoid confusion on
80x86 platforms with segment registers. Thus RSegment has become
RChunk and User::SegmentHeap has become User::ChunkHeap.
10). The function Test::Next() was assuming a zero terminated string. Fixed.
11). RProcess::CommandLine() was not getting the full command line. Fixed.
NOTES
=====
1). MartinB. Surely HufEncode should belong to class TDes and convert its
argument a TDesC into the TDes rather than belong to TDesC. As well
don't we need a second version of HufDecode called something like
HufDecodeInPlace which will do a decode in place on a TDes since
this is what the resource system does currently. Finally should we
not make a 32 bit version of the resource compiler.
2). There is a #define test in E32TEST.H. All #defines should be in
upper case.
3). Why does RRegion have a virtual destructor, a Close() and a
Destroy(). I suspect that the destructor should go.
4). In TOLIB t_ctimer.cpp and t_cact.cpp both have a #include to
\e32\olib\o_std.h. This is not correct!
5). In TUSER t_heapdb.cpp has a dependency on the window server header
file and in fact uses the window server. This is definitely
incorrect?
6). Can everyone try and make an effort before releasing E32 that
all projects are left in the DEBUG build and that all test
programs do not have windows open and breakpoints left enabled.
Version 0.01.033
================
(Made by MartinB, 4 May 1995)
1) Changed jcxz to a jecxz in P_I64.CPP (!!!)
2) Fixed some alloc heaven in CArrayVarBase::Delete.
3) Improved T_RSC test code.
4) Added MaxSize() to TDes.
5) New RRegion code from Steve.
6) Loads of test code from MartinH.
7) Note u_heap.cpp temporarily includes <stdlib.h> (for
random number generators) for heap alloc failure testing.
This is a temporary measure until the real file handling an
random number generation becomes available.
8) T_HEAPDB requires window server to run (since it tests for window
server heap failure).
All test code runs for ASCII DEBUG and UNICODE DEBUG builds (MartinB).
Version 0.01.032
================
(Made by MartinB, 26 April 1995)
1) Added a new CResourceFile class (and its superclass CFile). CFile
uses standard C files as a temporary measure until Colly
releases the real filing system.
2) Added a KErrFile const to go with the above. Again a temporary
measure.
3) CResourceFile reads resource files produced using our resource
compiler. (S_.RSC and S_.RZC were used in the test code, and
form part of the release of the test code). Note that
CResourceFile also reads compressed resource files. This
meant that:
4) Added Huffman compression for TDes16. Actually this does not
quite work yet, one or two of the test cases are #ifdefed out
in the UNICODE build. However it is 90% there and I have a
good idea of what the problem is (its to do with the unused
byte at the end when the descriptor compresses to an odd number of
bytes).
5) New test code from MartinH.
6) Minor fixes to threads from Colly/MartinH.
NOTES
=====
1) Should we have a TDes::MaxSize() function?
2) All test code runs for ASCII DEBUG and UNICODE DEBUG builds, except
T_RSC does not run in UNICODE.
Version 0.01.031
================
(Made by Colly, 18 April 1995)
1). Changed KEventPending to KRequestPending.
2). Made CActiveScheduler::Start() call the virtual function
WaitForAnyRequest().
3). Fixed ..\rel\ewinsdb.prj to release the estat*.pdb files
rather that wwins*.pdb files.
4). When a thread had an exception or was killed, terminated or
panicked, execution unfortunately continued. Fixed.
5). Added a function User::Dying() which is called by all the kernel
functions just before they kill,terminate,except or panic a thread
or process. This is a very good place for a breakpoint when
debugging. It will catch everything.
6). Added support to dynamically load a DLL and then lookup functions
in the DLL. See class RLibrary.
7). Added support for device drivers. See User::LoadDevice() and
User::FreeDevice() as well as the example device driver in
\e32\swinsd\d_timer.mak and its test program \e32\swinsd\t_devc.mak.
8). Added a constructor to all TFindHandle derived classes to allow
initialisation with the find string.
9). Converted the rose designs to rose 2.525
NOTES
=====
1). The fact that CActiveScheduler::Start() is static is no reason why
the virtual function WaitForAnyRequest() cannot be called. Just use
the static pointer to the scheduler:
theActiveScheduler->WaitForAnyRequest()
All test code runs for ASCII DEBUG and UNICODE DEBUG builds (MartinB).
Version 0.01.030
================
(Made by Colly, 12 April 1995)
1). Removed the virtual destructor in CBase. Added vitrual void Destroy().
CBase::Destroy() now calls delete this. It is now generally necessary
to call the base classes Destroy() in order to get proper destruction
of the object. Note that the DeleteAll methods in TDblQue and TSglQue
only work if the objects on the queue are derived from CBase. Added
a static function Olib::Destroy(CBase *anObject) which will only
destroy the object if anObject is not NULL.
2). Added a static function:
CActiveScheduler * CActiveScheduler::Current();
which return the currently installed active scheduler.
3). In RSubSession::CreateSubSession() was not passing as P1() in the
message the address of the reply so that the subsession handle could
be returned by the server.
4). Creating a semaphore with an initial count other than 0 did not set
the internal count with the initial count although the Windows/NT
semaphore was being set correctly. The same bug applied to Mutexes.
5). When a process was dying its access count was not being decremented
so that if no handles were outstanding the object was not being
destroyed.
6). CObjectIx::Add() and CObjectCon::Add() were closing the object being
added if the add failed. This proves to be unhelpful so they have
been changed to just fail and not do the close.
7). Added the following functions to RThread and RProcess to determine
the reason a thread or process exited.
IMPORT_C TExitType ExitType() const;
IMPORT_C TInt ExitReason() const;
IMPORT_C TName ExitCategory() const;
8). The design of the CPeriodic class made it unusable. This has now been
changed so that the New functions add the active object to the
scheduler. Start() is now defined as:
void Start(TInt aDelay,TInt anInterval,
TPeriodicCallBack aCallBack,TAny *aPtr);
which allows a CPeriodic to be restarted after it has been cancelled.
StartL() has been dropped since Start() is void.
There was also a bug in the RunL() method in that it issued the callback
and then requested the next timer. It should request the next timer and
then issue the callback.
The following merged in by MartinB:
9) Removed double definition of TText8 and TText16 form e32def.h
10) Moved enclosing #endif (matched to #if !defined(__E32DEF_H__)) to
end of e32def.h.
11) Changed make files so that .PDB files are built into \e32sys.
12) Added virtual WaitForAnyRequest to CActiveScheduler. This is not
called from Start, however, since Start is a static function.
After discussion with DW I retained User::WaitForAnyRequest
in Start, until we have time to discuss which functions
should be static.
13) Changed KErrPending to KEventPending.
Version 0.01.029
================
(Made by Martin, 3 April 1995)
1) New alloc testing code does not include filename and lineno
(MartinH).
2) New SglQue test code (DougF).
3) New test code (JalP).
4) Move common functionality of TKeyArrayFix and TKeyArrayVar into
TKey (JalP).
5) Fix to TEnter (DavidW).
All test code runs for ASCII DEBUG and UNICODE DEBUG builds.
Version 0.01.028
================
(Made by Colly, 22 Mar 1995)
1). Definitely the last name changes for the descriptor and buffer classes.
Old Name New Name
======== ========
TDesC TDesC
TDes TDes
TBufBase TBufCBase
TBuf TBufC
HBuf HBufC
TDesR TPtrC
TDesW TPtr
TBufW TBuf
Note that the function:
TDesW DesW()
in TBufBase has now been renamed:
TPtr Des()
Its helpful to consult the Rose class diagram to see why these names
are sensible.
2). Took Steve's new region code.
3). Added the missing #defines for __TEST_INVARIANT.
4). Changed the graphics window to position to 10,10.
5). Fixed the re-entrancy bug with UserWindowServer::Request().
6). Added the fix to stop the beep on ALT + char.
7). Added the code for User::Abort() and User::Exit().
8). User::Panic() was panicking the process and not the current thread
making it impossible to run test threads to see if they panic.
All the test code passes under the DEBUG build.
NOTES
1). The virtual destructor in CActive is calling the virtual DoCancel
which since the destructor is running at the CActive level has
no method to call as its pure virtual. The only reasonable solution
is to introduce a virtual Destroy() function to CBase() which can
do the necessary cleanup and then do the delete.
2). Many of the test programs do not have a standard comment header.
One did not even have a header. This is just careless.
I have fixed them all.
3). Many people when declaring an enum leave a comma on the last
declaration which is untidy.
4). A number of people are decalring automatic variables with capital
letters. Please avoid this practice.
Version 0.01.027
================
(Made by Martin, 16 Mar 1995)
1) Changed TBuf to TBufW, TLcb to TBuf and TLcbH to HBuf.
2) Fixed .lnk files so test code works if built from command line
(Duncan).
3) New T_REF test code (Jal).
4) Added previously missing RRef<T>::AllocL to e32std.inl (Jal).
5) Fixed bug in RRefBase::DoAlloc (Jal).
6) Added invariant to TDateTime (Gill).
7) Improved T_DATE test code (Gill).
8) Improved T_KEY test code (MartinH).
9) Fix to heap checking code (MartinH).
10) Changed T_QUE to use V classes (rather than S classes) (Doug).
11) Made iInterval protected (was private) in CPeriodic (at Steve's
request).
12) This release contains a zip file release (in s:\e32\zip) so that
users should not need to build E32. Only the ASCII DEBUG
version has been released.
All test code (ASCII DEBUG) can now be built and run from the command line
(except T_HEAPDB).
Actions:
1) Now that C classes rely on zero filling for initialisation their
definitions MUST be changed so that they cannot be declared on the
stack.
2) MartinH to fix T_HEAPDB.
3) Steve to complete transformation of CRegion to RRegion.
4) MartinB to complete (or remove) Huffman encoding (did not have
time to do it this release).
5) T_ARRAY and T_VARRAY need more test.Start() and test.Next()
messages (Jal).
6) Many classes still have no __TestInvariant methods (All).
7) CBufSeg has a test class defined under #if defined(_DEBUG) (Jal).
Version 0.01.026
================
(Made by Colly, 11 Mar 1995)
1). Added an operator new() to class CBase which fills memory with zeroes
so that most constructors need do nothing. Note that a constructor
is still required in order to set the name of the class in debug
builds.
2). Changed the RProcess::FileName() and RProcess::CommandLine() functions
to return their result rather than take an them as reference args.
3). Added RHandleBase::Duplicate(RProcess aSrc) which allows a handle from
another process to be duplicated in the current process. This is also
the mechanism by which the pseudo handles for the current thread and
the current process to be turned into real handles. i.e.
RThread self;
self.Duplicate(RProcess());
Note that you will now need to call self.Close() at some stage since
the resource must be freed.
In case you have missed the examples in ..\tuser\t_kern.cpp
instantiating a RThread or RProcess by default give handles to the
current thread and current process respectively. i.e.
RThread().Name() will return the current threads name.
These objects use a pseudo handle since it is not possible to close
these handles since if you could close them they would have to
delete the current thread or current process. Since these are pseudo
handles passing them to another process will not work as in the other
process they will also mean the current process and current thread.
Duplicate overcomes this problem since it gives a real handle to
either the current thread or the current process.
4). Added the RThread::Logon(),RThread::LogonCancel(),RProcess::Logon()
and RProcess::LogonCancel() functions.
5). Cleanup on Thread termination by the kernel now implemented.
6). RThread::Kill(),RThread::Exit(),RProcess::Kill() and RProcess::Exit()
implemented fully.
7). Changed Plat::Panic() and Plat::Fault() to always use the desktop
window for the messagebox.
8). Changed to build options for all variants. Everyone should make a new
.MAK file from T_KERN.MAK as a prototype. Presumably the tool sets
will have to be updated to reflect these changes. Also fixed a number
of link failures which had crept into the system.
9). Note that because of the use User::SetVaArgList() the optimisation
in the release versions to drop stack frames cannot be used.
10). The definition of the private class TLink in CBufSeg is a waste
of space in the headers. So I have declared a forward reference
to the class TBufSegLink and then only need the actual declaration
and implementation in O_BUF.CPP.
The following merged in by MartinB:
11) Uses new toolsets (use TOOLS WINS and TOOLS WINSD to get them).
12) New T_DES test code. (From Duncan).
13) Fixed integer compares in TKeyArrayFix and TKeyArrayVar. (From
Jal).
14) Fixed bug in CArrayFixBase::InsertISQ. (From Jal).
15) Added classes: TSglQueLink, TSglQueBase, TSglQue, TSglQueIterBase
and TSglQueIter. (From Colly). (No test code yet).
16) Added classes: RRefBase and RRef. (From Colly). (No test code
yet).
17) Added Alloc functions that take a size parameter to RRef classes
(at Jal's request).
18) Added __TEST_INVARIANT macro to e32std.h. (from MartinH).
19) Added MartinH's heap checking code. Note took some functions
even though they were not commented - they will be commented for next
release.
20) Took keycode code from DavidB. NOTE: P_STDKEY.CPP still contains
some numbers that should be converted to symbolic constants.
21) Small changes to code in winsd from Steve.
22) Changed User::MemSwap in u_func.cpp so that it does not swap if
memory locations are identical. There is an argument to do
this in the compare routines as well.
23) Moved region to e32std.h and called it RRegion. Steve will implement it as
a proper 'R' in a subsequent release.
ASCII Debug version only was tested.
All test code passes except T_QUE which fails on DeleteAll. Note
that
T_HEAPDB, T_ARRAY, T_CACT, T_VARRAY fail when built from the command
line.
Version 0.01.025
================
(Made by MartinB, 7 Mar 1995)
1) From Gillian: New TDateTime code.
Changed DateAsString() to Format().
Removed 3 unnecessary Add() functions.
Ammended t_time.cpp test code.
Renamed u_time.cpp to u_date.cpp (to lessen confusion with
timer code).
2) From Jal: Bug fix in CBufSeg::Delete() method. New test code.
3) From Duncan: mnt.cmd altered to build math functions and test code.
4) From Duncan: Updated all .lnk files for test code, so that they are built as
windows rather than console applications.
5) From Duncan: Introduced bld.prj in SMATH: this contains all the buildable math
routines (there are some .cpp files in li.prj that have not yet
been converted to E32).
6) From Duncan: Introduced bld.prj in SWINSD: this contains all the buildable cpp
files (there are some .cpp files in li.prj that have not yet
been converted to E32).
7) From Doug: Removed DEBUG friend declarations from Que classes.
8) From Jal: New CRefCountBase and CRefCount classes added to Olib.
9) From MartinH: New TKeyArrayCmpNumeric comparision types for
TKeyArrays. Ammended T_KEY test code.
10) From MartinH: Ammended T_ACT test code.
11) From DavidW: new T_VERSION test code.
12) Minor fixes to test code.
All ASCII DEBUG test code runs. There is one anomally: T_COBJ runs
fine if build inside VC++ but panics with a user panic of 37 if built
from the command line. It was getting late so I decided not to track
this one down.
Version 0.01.024
================
(Made by Colly, 1 Mar 1995)
1). Renamed TPackage to TPckgBuf which packages an object in a TBuf8 and
added TPckgC which packages in a TDesR8 and TPckg which packages in
a TDesW8.
2). Added new Panic function to RMessage which panics the client and
frees the message as well as one to CSession which just panics the
client. This is necessary as the Client() functions return a const
RThread & on which Panic cannot be called.
3). Noticed that Convert(const TDesC &aDes,...) would not work properly
as taking the address of aDes on the stack would fail. Changed to
use the User::SetVaArgList() function. Also removed the version
of Convert which took a string as an argument. Fixed the test
code accordingly.
4). My code in the example window server client side code was being very
naughty and assuming that all arguments were being passed on the
stack (TRUE for VC++, but not TRUE for GCC ARM code generation). Fixed.
5). Removed the function numbers from the RWindowServerBase class as
they can be entirely private.
6). The platform code to get system time was not subtracting 1 from the
day so TDateTime was correctly panicking the kernel on 28 Feb since
it was trying 29 Feb.
Version 0.01.023
================
(Made by Colly, 27 Feb 1995)
1). Moved the region code to SUSER in the file U_REGN.CPP. Moved the
test code from TOLIB to TUSER.
2). The OLIB CServer class was deleting the server object on disconnect
rather than the CSession. Fixed some other bugs as well.
3). Renamed CActive::Run() to CActive::RunL() to indicate that it may
leave.
4). Renamed CServer::Service() to CServer::ServiceL() to indicate that
it may leave.
5). Renamed CServer::NewSession() to CServer::NewSessionL() to indicate
that it may leave.
6). Added the TInt64 class and a number of the maths functions. See
\e32\inc\e32math.h.
7). Completely changed the whole scheme for E32 programs from being
console based to being GUI based. Test programs will write to
a normal Windows/NT console and the GUI window will be ignored.
All GUI programs now need to link with a window server library,
i.e. one of wwins,wwinsd,wwinsu,wwinsud. See the make file in
\e32\tuser\t_gui.mak.
A basic window server which just provides console services can be
found in swinsd in the project wwins.mak until Steve can get his
window server running.
All programs now use:
GLDEF_C TInt E32Main()
for the main program instead of main().
The functions for the basic window server and console are in header
\e32\inc\e32wsrv.h. Steve will provide these and extended functions
by subclassing these in his Window server library.
8). Added a variant to RThread::Read() which allows an offset to be
specified withing the descriptor to allow reading in smaller chunks
in case the user sends over a huge chunk of data.
9). Added the TEvent class and various functions all of which are
only for a Window server. I will discuss these with Steve directly.
The data is in \e32\inc\e32evnt.h.
10). The CArray classes were leaving in their constructors. Fixed by
delaying allocation of the CBufBase till an insert. Increased
the error checking.
11). The kernel was not doing unicode properly since UNICODE was
not defined in \e32\swins\p_std.h before windows.h was included.
12). Added TDes8::Copy(const TDesC16 &aRef) and
TDes16::Copy(const TDesC8 &aBuf) conversions between 8 and 16.
Notes:
Many of the test programs were not keeping test.Start() and
test.End() in balance.
In U_TIME.CPP the unicode build was disabled because Gillian
was using a TLex8 instead of a plain TLex8. I also not that
the API for DateAsString takes the format string as a pointer
and not as a reference. Also the name of the function should
surely be Format().
Version 0.01.022
================
(Made by Martin, 17 Feb 1995)
1) Fixed construction of TLex over strings.
2) New time class from Gillian.
3) Fixed t_buf,t_bflat and t_bseg test code from Jal.
4) Fixed t_lex test code from MartinH.
5) Changed CRegion to RRegion (after consultation with Steve).
6) NOTE: the TDateTime::DateAsString function fails to build under
unicode.
7) K_MES.CPP does not build under UNICODE, search for !!! string to
find where.
Note that there are new wins and winsd toolsets and a new version of
EPR. Get these by doing
TOOLS WINS
TOOLS WINSD
in the usual way.
Version 0.01.021
================
(Made by Colly, 16 Feb 1995)
1). In TUSER t_buf,t_lex do not compile.
2). In TOLIB t_bflat,t_bseg do not compile.
3). In TOLIB t_cact,t_cobj compile but fail. Note t_cact was t_creq.
4). Made the kernel platform function Plat::SetVaArgList(VA_LIST &aList)
public in class User. This function was written assuming the argument
const TDesC &aFmt was the first argument. Using it in
Test::Panic(TInt anError,const TDesC &aFmt
would not work correctly. Changed this function to take a second
argument which says how many bytes to skip before the
const TDesC &aFmt argument. For Test::Panic this is 4 and 0
for all other uses.
5). Renamed CRequester to CActive and CRequestManager to CActiveScheduler.
6). Renamed all T classes which require closing to free their resources
to R classes. I have not renamed CRegion to RRegion in this release
but would propose that we do this (Steve?).
7). Added User::At() and User::After() to put the current process to
sleep for relative and absolute time repectively. These are sync
functions.
8). Implemented the RMessage, RServer and RSessionBase classes and added
the Olib classes CServer and CSession. See the T_SVR.CPP test code
to see how these are used.
9). Renamed t_req.* in TOLIB to t_act.*
10). Added the template class TPackage<T> which will package any type
T in a TBuf<sizeof(T)>. Note the -> and () operator overloading.
TPackage<TVersion> v;
v->iMajor
v().iMajor
This is most useful for passing and receiving non TDesC arguments
to a server so that the server can subsequently read/write to it.
11). Added the minimum,maximum values for all integers in e32std.h look
for KMaxTInt8 etc.
Queries
-------
1). Are we going to implement a 16 bit version of Hufman coding. If not
then we cannot have this functionality as there cannot be a difference
between 8 and 16 bit character versions as far as functionality goes.
2). Someone put #ifdef UNICODE into one of the files in swins. This is
wrong and should have been #if defined(_UNICODE). Although Microsoft
are confused we should always use the _UNICODE form.
3). I think we should rename User::Check and User::Available to have
Heap in their name somewhere.
Version 0.01.020
================
(Made by MartinB, 15 Feb 1995)
1) Removed (most) string functions from descriptors.
2) Fixed bug in unicode Printf.
3) Time class changed to DateTime.
4) Made some queue parameters constant.
5) Tidied up some of the Locale code.
6) Tidied up mnt.bat and renamed it to mnt.cmd.
7) Fixed Format for %S in descriptors.
8) Added Huffman coding to TDesC8 (finally).
9) Added some DateTime validation routines.
10) Removed SetActive and SetInActive functions from CRequestors.
11) Fixed most test code to run with the new descriptors, but there
was too much to do for some (ie t_buf, t_lex, t_bflat).
Version 0.01.019
================
(Made by Colly, 7 Feb 1995)
1). Added the new TTimer concrete data type (CDT).
2). Added the OLIB classes CRequestManager and CRequester.
3). Added the OLIB requesters CTimer and CPeriodic.
4). UNICODE needs to be defined as well as _UNICODE.
5). Fixed a bug in TDblQueIter where neither the inc or dec operators
returned NULL at the end of the queue. Changed the test code to deal
with this. Note that if the iterator is positioned at the end of the
queue it will also return NULL when being casted.
6). Fixed a bug in the TDes::Format(const TDesC &aDes) functons which
when try to set up the VA_LIST were taking the address of aDes and
getting it rather than the expected address of the argument on the
stack. Fixed by using the new User::SetVaArgList() function. The
test code is not testing this part of the code.
7). Added the new static time validation functions to User.
8). The User::WaitForRequest() type functions are now operational.
9). Added the device driver code. Still to write a test device driver
but this will probably be a console device.
10). Changed all the kernel classes to be D something rather than C
something to avoid name clashes with OLIB.
11). Changed the CObject class to allocate the name of the resource so
that NULL can be used to indicate an unnamed object. This has
changed the API's for some of the CreateLocal functions to no
longer require a name, i.e. TSemaphore::CreateLocal().
12). Changed all the API's to the kernel to use const TDesC& rather
than const TName& etc.
13). All tests pass in non-unicode debug.
Version 0.01.018
================
(Made by MartinB, 3 Feb 1995)
1) Improvements to MartinH's test code.
2) Uses new format link files (so needs new tools release).
3) Incorporates Duncan's test code.
4) Improvements to Strings in test code (ie _TL macro).
5) Removed most of the #if defined(_DEBUG) stuff from include files,
but not for the friend classes. Working on a plan for this though.
6) Fixed T_VARRAY .MAK file (was building T_ARRAY).
7) This is a consolidation release.
Version 0.01.017
================
(Made by Colly, 26 Jan 1995)
1) Integrated the changes in preparation for device drivers.
2) Note that the #if defined(_DEBUG) stuff for queues in the
headers is unacceptable.
3) Note that I am not confident of the enumerate for EAllowDuplicates
nor the provision of default parameters.
Version 0.01.016
================
(Made by MartinB, 24 Jan 1995)
All test code passes. (But have not tried UNICODE build).
Now builds with 32bit EBLD. To get this type
TOOLS ETSET
TOOLS WINS
TOOLS WINSD
You can then do MNT BLD etc from the command line.
1) Added _S macro and changed _L macro in preparation for removing
strings from descriptors. Changed code to use _S and _L so that
strings could be easily removed in next release.
2) Took T_TKEY test code from MartinH.
3) Removed Free from CBuf class.
4) Minor bug fixes here and there.
5) Took Que code from Douglas
Version 0.01.015
================
(Made by Colly, 18 Jan 1995)
1). Made the final re-organisation to the descriptors and introduced
the new derived class TDesR. Note that TDesC and TDes are real
abstract base classes as they cannot be directly instantiated.
(They have no contructors). Note that functions like Mid(),Left()
etc. now return a TDesR.
Added the template TLcb class. This class is intended for use
as a member of a struct or class since it needs the minimum
storage space.
This is similar to the TBuf class except that it is a length
followed by the buffer, i.e. no max length. Thus apart from
assigning to it and behaving as a TDesC a TLcb cannot be
manipulated as it was a TDes. However help is at hand since there
is a function DesW() which return a writeable descriptor through
which a TLcb can be manipulated in the same was as a TBuf. i.e.
TLcb<KMaxName> b;
b=_L(" Some spaces");
b.TrimLeft(); // This will fail.
b.DesW().TrimLeft(); // This will work fine.
b.DesW().UpperCase();
If a lot of write operations are to be performed on the TLcb then
it is more efficient to take a copy of the TDesW. i.e.
TDesW w=a.DesW();
Note that there is no public constructor on TDesW for a TLcb
directly as it would need you to pass the maximum length as well
which is best left to the template to do on your behalf.
If a function needs a writeable descriptor then just pass b.DesW()
and all will be well.
As a last final thing for descriptors I have added one final class
TLcbH (H stands for heap). A TLcbH has the property that the TDesW
returned by DesW() has its iMaxLength set to the size of the alloc
cell - sizeof(TUint). A fine feature of this is that the length of
an alloc cell which is always present can now be used to good
purpose. It is also possible to call the TLcbH member functions
ReAlloc() or ReAllocL() on the cell and the get another TDesW
which will have changed its iMaxLength to the new size of the cell.
TLcbH *TLcbH::ReAlloc(); // Returns NULL if fails
TLcbH *TLcbH::ReAllocL(); // Leaves if fails
It is possible to directly construct a TLcbH with the static
functions:
TLcbH *TLcbH::New(TUint aMaxLength) // Returns NULL if fails
TLcbH *TLcbH::NewL(TUint aMaxLength) // Leaves if fails
The TDesC class also has two methods:
TLcbH *TDesC::Alloc(); // Returns NULL if fails
TLcbH *TDesC::AllocL(); // Leaves if fails
which will clone the descriptor on the heap. The size of the TLcbH
will be the length of the descriptor. Remember that these objects
must be freed with either delete or User::Free().
Note that there is a class TLcbBase which is just used to provide a
place to provide the code for the template class and although this
could be placed in the TDesC class this could only be done by
sacrificing the efficiency of the constructors for the TLcb class.
TDesC has so many constructors that TLcbBase is useful in providing a
selector for the base constructor. If this was removed an artificial
enum would have to be added to the constructors in TDesC to ease
selection. Since these are called inline by TLcb this would waste
code.
It is useful to look at the Rose class diagram in \e32\desn\e32.dsn
in the User\Descriptors category.
2). Took the fixed u_time.cpp and new t_time.cpp.
3). Changed the build plan so that all 4 build versions are supported
in all E32 .MAK files and that all releaseable files are in \e32sys
as follows:
Build Name Object directory
========== ================
Win32 Release \work\e32\wins\rel
Win32 Debug \work\e32\wins\deb
Win32 Uni Release \work\e32\wins\urel
Win32 Uni Debug \work\e32\wins\udeb
Build Name .DLLs
========== ================
Win32 Release \e32sys\ewins.dll
Win32 Debug \e32sys\ewinsd.dll
Win32 Uni Release \e32sys\ewinsu.dll
Win32 Uni Debug \e32sys\ewinsud.dll
Build Name .LIBs
========== =====================================
Win32 Release \e32sys\ewins.lib \e32sys\estat.lib
Win32 Debug \e32sys\ewinsd.lib \e32sys\estatd.lib
Win32 Uni Release \e32sys\ewinsu.lib \e32sys\estatu.lib
Win32 Uni Debug \e32sys\ewinsud.lib \e32sys\estatud.lib
The directory \e32\lib has been deleted and replaced with
\e32\rel where the release project files are kept.
As a result of this no generated files get placed in the \e32
source tree, meaning a check -a li should always show no
additional or missing files
4). Fixed most of the death in the unicode build but some test
programs are not building properly.
5). Added the __DECLARE_TEST() macro for adding the test operations
to classes for debug builds. This macro should always be declared
as the last thing in the class as it switches back to public: as
follows:
public:
void __TestInvariant() const;
void __Test() const;
If a DLL is being built the __DLL__ #define should be present and the
macro will generate:
IMPORT_C void __TestInvariant() const;
The operation __TestInvariant() is expected to be supplied for all
classes and should do all the checking that it can to determine that
the object is in a healthy state. If it finds an error it should call
User::Invariant() which will cause a panic. If a class is derived from
a base class then the base class __TestInvariant() should be called
first and then further checking should be done.
This macro should not be added to template functions as the base class
from which the template function is derived should be able to do all
the necessary checking.
The __Test() function is not implemented and is provided to allow
test code a way of directly accessing all the members of a class.
Test code needs only to provide the function and then call it as it
is always assumed to be in the same .exe as the calling program.
Look at e32des8.inl and \e32\suser\u_des8.cpp for an example of how
to implement __DECLARE_TEST().
N.B.
It is expected that all classes will implement this scheme.
6). Taken Gillian's fix to u_loc.cpp which was returning day names
for months.
Version 0.01.014
================
(Made by Colly, 16 Jan 1995)
1). THeap::Available() was not subtracting the header from the cells size.
2). The insert bug in CBufSeg has been fixed.
3). Implemented the new TDes/TBuf plan. This now allows TBufs to be moved
around in memory so that CArray<TBuf_40> is now O.K. Note that TDes8
cannot be instantiated, instead instantiate a TDesW8. TBufs now only
have an overhead of 8 bytes. See TDesC8::Ptr() to understand how
this trickery is accomplished. In general note that the values of the
members of TDesC8 and its derived classes are now meaningless so don't
jump to conclusions. The iLength should be divided by 4 to get the
real length. The bottom two bits provide flags for the Ptr() function.
For TDes8,TBuf8 and TDesW8 iPtr is in fact the maximum length. The
address of the buffer for TBuf8 is assumed to follow iPtr. For a
TDesW8 the real pointer to the buffer follows iPtr.
4). Added the TVersion class and the User::Version() function.
5). In class TLex, renamed Token() to NextToken() and made
MarkedToken() and NextToken() return a TDesC8.
6). Removed the new operator in class CBase. As the cell is no longer
zero filled all relevant fields must be initialised.
7). Added a member variable TText *__iName to CBase when the _DEBUG
flag is set. All constructors of classed derived from CBase should
initialise by using the __DECLARE_NAME macro. For CBufSeg this would
be :
EXPORT_C CBufSeg::CBufSeg(TUint anExpandSize)
//
// Constructor
//
: CBufBase(anExpandSize),iSeg(NULL)
{
__DECLARE_NAME(_L("CBufSeg"));
}
8). Changed the ASSERT1,ASSERT2 and ASSERT3 macros to
__ASSERT_ALWAYS - applied in all builds
__ASSERT_DEBUG - applied only in debug builds
__ASSERT_OPT - applied if __OPT__ is defined
The previous versions assumed that Panic was called, i.e.
#define ASSERT1(c,p) if (!(c)) Panic(p)
This has been changed to allow other functions to be called.
#define __ASSERT_ALWAYS(c,p) if (!(c)) p
This should be used as follows:
__ASSERT_ALWAYS(anIndex<iLength,Panic(EDes8IndexOutOfRange));
9). Further bugs showed up in T_BFLAT which was still assuming that
a TBuf was zero terminated. Changed the code to zero terminate
after construction.
Version 0.01.013
================
(Made by Colly, 12 Jan 1995)
1). Completed the implementation of the descriptor/buffer classes.
2). The TLocale class is now working.
3). Move SDate,STime and SDaySecs out of TTime. Made the members
start with a lower case. Changed the order of members so that
sorting will occur correctly. Changed the filler on STime to be
1/100ths of a second. Provided a service in the kernel to retrieve
the current 1/100ths.
4). Changed TTime to call the kernel to get the current time and TLocale
to get the start of week. The function to set system time is in
User. i.e. User::SetSystemTime(TSystemTime aTime);
5). Moved the static functions from TTime to User.
6). Converted the u_time.cpp to E32 code standards.
7). Converted the u_graph.cpp to E32 code standards.
8). Converted the o_region.cpp to E32 code standards.
9). Fixed the bug if you ran a program from the command line without
the .exe.
10). Changed TDblQue::Next() to be TDblQue::First() and
TDblQue()::Prev() to be TDblQue()::Last(). Changed the
implementation of AddFirst() and AddLast() to take a T * rather
that a TDblQueLink *.
11). Changed the static New()'s in CBufFlat and CBufSeg to return a
pointer to the class rather than to CBufBase.
12). Add a further global new operator which will leave if it cannot
allocate the memory. This is called as follows:
Normally:
TRect *p=new TRect(0,0,10,10);
With leave:
TRect *p=new(ELeave) TRect(0,0,10,10);
13). Renamed TEnter::Throw() to TEnter::Leave();
14). Fixed User::Leave().
15). Add the full queue implemetations.
16). Threads other than the main thread did not have their heap set.
17). Lots more that I have forgotten.
The TLex test code does not pass since it was relying on the zero
terminator and I don't have the time to fix it. There is bug shown
in CBufSeg with the test program T_ARRAY, although not surprisingly
by T_BSEG.
All the test code should now be reviewed and checked.
Version 0.01.012
================
(Made by MartinB, 6 Jan 1995)
1) Fixed death in release 11 below.
2) Descriptor classes essentially complete. Moved iMaxLength from
TDesC to TDes. However must still define unicode-independent
buffers.
3) Passes all test code now (except T_SEM).
Version 0.01.011
================
(Made by MartinB, 6 Jan 1995)
1) Bug fixes to Heap from MartinH.
2) Bug fixes to arrays from Jal.
3) Changed some pointer parameters to references.
4) Changed to new Descriptor class hierarchy. The change is not yet
complete.
5) Some things are now (partially) broken:
T_BUF does not pass all test code (wierd stack death),
T_ARRAY.CPP and T_BFLAT.CPP do not build,
T_LEX does not pass all test code.
Version 0.01.010
================
(Made by MartinB, 4 Jan 1995)
1) Minor bug fix to o_array.cpp.
2) Fixes to slocl to support dynamic loading.
3) Fixes to TLex and TChar code.
4) Converted to using spaces for tabs.
5) Incorporated DWs time class.
6) Moved Steve's CRegion class to SOLIB.
Version 0.01.009
================
(Made by MartinB, 22 Dec 1994)
1) Minor bug fixes and improvements to descriptor code.
2) Now partially buildable under EPR (courtesy of DuncanS). To get
extended toolset type:
TOOLS ETSET
TOOLS WINS
You will also need to set your DOS box to run off a PIF file
(ETSET.PIF in this directory will do), otherwise you will get out of
memory/environment space problems.
Then
ETON WINS
and (in the usual way)
CONT E32 GROUP
DON
BUILD DEB
Then you should be able to do MNT BLDALL. Unfortunately we don't yet
have the technology to build DLLs yet, but we can do CCs and LFs.
This certainly makes it much less tedious to build the test code.
In CONT E32 TUSER type
EBLD ETLI
In CONT E32 TOLIB type
EBLD LI
Version 0.01.008
================
(Made by MartinB, 21 Dec 1994)
1) Took Jal's fixes for CBufSeg class.
2) Added
void Append(const TUint8* aBuf,TUint aLength);
function to TDesBase class.
3) Removed the Assign() functions that were just duplicates of Copy()
from TDesBase.
4) Split data in slocl into country dependent, language dependent and
alphabet (character set) dependent parts. Split not yet complete.
Version 0.01.007
================
(Made by MartinB, 20 Dec 1994)
1) Produces e32winsu.* and e32statu.* on UDEB and UREL builds.
2) Moved to warning level 4.
3) operator= changed to return reference in TPoint, TSize and TRect classes
4) Converted CBuf* classes to constant reference convention.
5) Changed TLex to use descriptors.
Version 0.01.006
================
(Made by MartinB, 20 Dec 1994)
1) #defined _UNICODE on UDEB and UREL in e32ver.h in preparation
for epr building.
2) Converted TLex* class to constant reference convention.
3) Renamed TSuffix to TDateSuffix.
Version 0.01.005
================
(Made by MartinB, 19 Dec 1994)
1) First version with buffers replaced by descriptors. Note that
..\inc\e32db16.h
is a copy of
..\inc\e32db8.h
with 8 replaced by 16 throughout, and
..\suser\u_dsbf16.cpp
is a copy of
..\suser\u_dsbf8.cpp
with 8 replaced by 16 throughout.
This is necessary since it seems impossible to use templates in
this case (this is because there seems to be no way to manually
instantiate the template so that it can be placed in the DLL).
2) Passes all test code except T_BFLAT (which I didn't get to work on
version 004) and T_SEM (which I'm not sure about).
3) TThread class broken? It may well work but I have not yet looked
into the implications for this class.
4) Made this version for a "safe" one to come back to.
5) U_LEX*.CPP and U_SEG.CPP can now be much improved by using
Descriptors instead of temporary buffers.
Version 0.01.004
================
(Made by MartinB, 19 Dec 1994)
1) Minor fixes to SLOCL tables.
2) Defined ASSERTn and ASSERT_VALIDn macros.
3) Last version before new TDes and TBuf classes.
Version 0.01.003
================
(Made by MartinB, 14 Dec 1994)
1) Incorporates TPoint, TSize, TRect & TRegion classes.
2) Incorporates test code for above.
3) Moved TCheckedHeapWalk declaration into THeap (ie nested class
declaration), partially because of name class with TSize (above).
Version 0.01.002
================
(Made by MartinB, 13 Dec 1994)
1) Incorporates buf fixes to TChar, TLex & TBuf classes.
2) Incorporates test code for above.
3) First working UNICODE version.
Version 0.01.001
================
(Made by Colly, 10 Dec 1994)
1) First release.