On Time specializes in providing software development tools for real-time embedded systems on Intel x86 compatible CPUs. Founded in 1989, On Time has offices in Massachusetts and Hamburg, Germany. On Time offers a complete range of real-time operating systems and development tools for 32-bit flat address protected-mode and 16-bit real-mode environments. Recently the company got a port of SciTech’s SNAP graphics suite. Here is an Interview with SciTech‘s Dave Milici, who was responsible for porting SciTech SNAP to On Time RTOS-32.1. Dave thanks for taking the time to answer these questions for us.  Let me start off by asking you to briefly explain what was involved  in porting SciTech SNAP Graphics to an already existing platform?
Dave Milici: Porting SNAP Graphics to On Time RTOS-32 system was relatively  straightforward based on the similarity of its core OS services to  Win32 and DOS protected mode. The first pass of the PM library worked  right away for popular graphics chipsets from Matrox, ATI, and  NVidia. Using filesystem support with the RTFiles-32 library module  made development compatible with existing SNAP and MGL SDKs, while  many of the demos could easily be bound in a self-contained RTTarget-32 RTB binary without requiring the filesystem option.
2. You mentioned the “PM Library” can you give us a bit more  information on this portion of the project?
Dave Milici: The SNAP Graphics Architecture Binary Portable Drivers (BPD) are  able to run on many different operating systems by using a  Portability Manager (PM) library to isolate all OS-specific  functions. Therefore the only source code which needed to be implemented  for RTTarget-32 is the PM library. Developers will find  this code in the SNAP SDK located at %SCITECH%/src/pm/rttarget.
Developers may notice that near the same location are other PM  library implementations for DOS and Win32, as well as the stub code  that new PM libraries can build on, plus simple PM test apps. When  some of the basic PM functions such as identifying the OS name and  type are filled in, a developer may begin building the library which  can test various PM functionality with samples such as Hello, CPU,  and ShowPCI.
3. I assume that RTOS-32 has its own memory management methodology,  including service etc, were you able to use the existing services or  did you replace them?
Dave Milici: Since RTTarget-32 provides memory allocation services via the  standard C library functions, functions like PM_malloc() did not need  alteration, including the shared memory versions which are not  relevant for RTTarget-32 applications.
The essential RTTarget-32 specific functions which had to be  implemented were for mapping physical memory and getting physical  addresses. Although not apparent in its final form, the first-pass  implementation called the equivalent RTTarget-32 API functions for  physical address mapping one-to-one. The additional code for directly adjusting page table entries was added later to manage multiple address mappings for optimization purposes, and was based on the DOS PM library version’s DPMI and VXD services.
4. Ring 0 callbacks always seem to be an issue when dealing with  graphics systems on Win-32 based OS’es, was this also the case with the On Time RTOS-32?
Dave Milici: Some of the PM library functions require execution of privileged  instructions at ring-0, such as reading the page table directory PDB,  reading and writing machine specific registers (MSRs), and setting up  the CPU-specific memory type range registers (MTRR). Although  RTTarget-32 apps may be configured to run directly at ring-0 privilege level, apps that would be running at ring-3 default level would have to be accommodated.
This was implemented via a ring-0 callgate service provided by  RTTarget-32, and was similar to other PM library ring-0 services like  VXD mechanism for Win32 and Windows 9x DOS sessions. In the RTTarget-32 case, all privileged instructions were located in a single x86 ASM  file, and executed via the RTTarget-32 callgate mechanism using  unique IDs corresponding to the equivalent C functions.
5. How difficult was it to add support for On Time RTOS-32 file management structures?
Dave Milici: Since RTTarget-32 file management uses both standard C library and Win32 APIs, the PM file management functions were easily implemented by copying the equivalent code from the PM library for Win32. These functions are typically used in SNAP apps for loading graphics drivers and saving options, and would be additionally needed in MGL apps for loading resource files like bitmaps, fonts, and cursors, etc.
When starting the port, a developer was interested in using RTFiles-32 module for filesystem support. With RTFiles-32 linked in, it was easy to use the existing SNAP and MGL SDK paths for locating graphics BPDs and resource data files on the target system’s hard disk. However the RTTarget-32 binary image executes from the root path by default, so either the SNAP_PATH variable needed to be added to the RTB configuration file’s environment settings in order to locate the SDK files, or all the SDK files would have to be installed relative to the root directory level as well.
Alternatively a developer may choose to bind the SNAP and MGL files directly into the RTB target binary image. The executable is able to load all necessary files bound into the image using RTTarget’s RAM filesystem, where any file path specifications compiled into the app are ignored. Fortunately all of the file names used for SNAP drivers and MGL resources are unique, so ignoring path names is not a problem. The SNAP and MGL demos posted on On Time’s web site use this method, and include sample RTB configuration files for interested developers to generate binaries for testing on their own target systems.
6. Were you able to use the event handling code built into the PM shell or were you forced to completely rework this in order to fit the On Time RTOS-32  model?
Dave Milici: RTTarget-32 provides some keyboard and mouse handlers which facilitated implementing the PM event handling functions. Initially the keyboard handler was dependent on the RTKernel-32 keyboard driver but not all of the key press and release information could be interpreted from the returned data. Since RTTarget-32 provided interrupt service support similar to DOS, it was therefore more efficient to use the PM library DOS-style keyboard code directly.
The RTTarget-32 mouse driver was able to be used without RTKernel-32 services, and PM event records were managed using RTTarget’s Win32-style console IO records. Time stamps need to be added to the PM event records so as to distinguish mouse click and drag events, so ideally the console records could be asynchronously read in a separate running thread. However polling the records from the single task thread exhibited no noticable latency for apps like MGL MegaVision GUI demo, so the DOS-style polling was able to work efficiently without requiring RTKernel-32 thread and semaphore management.
7. Were there any other unexpected or extra steps that you took in order to complete the port of SciTech SNAP Graphics IES for use with On Time RTOS-32?
Dave Milici:  Additional functions were implemented for completing RTTarget-32 PM support for all SNAP graphics drivers, some of which required more time and attention. For instance AGP support needed for some Intel graphics chipsets required contiguous physical memory allocations. MTRR write combining is a useful optimization option on later CPUs but was essential to work properly for some early ATI chipsets. Interrupt handler service routines were available for implementing timer-based stereoscopic page-flip emulation, which is something that has always been simple to do on DOS but extremely complicated on Win32’s multi-tasking kernel. Although these functions may be considered optional since many popular chipsets were able to run without them, completing them makes the RTTarget-32 PM library fully compatible with all the other OS’es that SNAP Graphics currently runs on.

why does snap, a graphics driver lib requires event handling functions? seems kind of strange.
good interview btw, perhaps a bit too technical for osnews though.
About time we had some RTOS news, it’s a fine little kernel.
Now do BeOS! I dare you.
I think most native english/american speakers would say “port X to</t> Y” rather than “port X [i]on Y”.
Your usage is a bit hard to decipher for some of us.
-Hugh
I think most native english/american speakers would also like to preview their comments, so they don’t leave HTML tags lying around
-Hugh
Possibly our longest url but….:
http://www.scitechsoft.com/products/ies/snap_ontime_rtos_content.ht…
“why does snap, a graphics driver lib requires event handling functions? seems kind of strange.”
The SciTech SNAP Graphics drivers per-se do not need event handling, but the PM library contains OS portable event handling functions so that applications built with the SNAP SDK can run in a portable manner. The SciTech MGL uses the PM library event functions, as do all SciTech SNAP native applications such as GATest etc.
Since embedded OS’es like RTOS-32 don’t really have a native GUI environment, having access to a portable graphics library such as the SciTech MGL that lives on top of SciTech SNAP is important. Hence the event functions are an important piece to port to an embedded OS. If an RTOS-32 developer was using SNAP to add graphcis support to their own application, they can completely ignore the PM library event handling if they wish, as it is completely optional.
In fact if a developer was porting SciTech SNAP to an environment where there is an existing native GUI, that developer could completely ignore the event library functions in the PM library. For instance the port of the PM library to Windows NT/2K/XP Ring 0 kernel drivers or Windows 9x Ring 0 VxD drivers does not include any of the event handling support. By contrast the Win32 Ring 3 port (used by the DirectX SNAP driver) includes event handling so Win32 apps built to use the SNAP SDK will run on Windows correctly.
I hope that clears this up a bit 😉
h_ank, thank god your dare was not a “double-dog dare”… as we would then be forced to drop everything and get the Be port wrapped up;)