How did we fit a

POSIX realtime OS, a full windowing system,

an HTML 3.2 browser,

an embedded web server,

an Internet dialer, TCP/IP, and more

onto a

SINGLE 1.44M floppy?

To answer the question, let's start with the modular, memory-efficient building blocks that form the foundation of this demo: QNX Realtime OS Thanks to QNX's Universal Process Model TM architecture, it was easy to build an operating environment that included only the services we needed. The result? We were able to equip the demo with a protected-mode, POSIX-certified, 32-bit, realtime OS, and still have space left over for a windowing system, browser, and more. Photon microGUI® Windowing System Like QNX itself, this windowing system starts with a tiny microkernel (45K) and provides most GUI services through optional cooperating processes. The result: a fully scalable GUI. Taking advantage of this architecture, we were able to provide the rich GUI functionality needed to host several applications (HTML 3.2 browser, Internet dialer, mini file manager, file editor, ...), but without any of the memory and disk-space requirements of a desktop windowing system. Voyager TM HTML 3.2 Web Browser The Voyager browser delivers complete HTML 3.2 functionality, plus many common extensions - like frames, JavaScript, and animated GIFs - in approximately 400K of code. Voyager Embedded Web Server No embedded Internet demo is complete without both a web browser and a web server! Small enough for a web camera, and robust enough for a factory robot, our web server allows even diskless embedded systems to generate HTML pages in real time. TCP/IP for QNX Like the OS for which it was developed, TCP/IP for QNX can easily accommodate memory-constrained environments. For example, the version included on the floppy is configured for client-side operations and leaves out any functionality the demo apps don't require. Embedding the demo on a floppy

With all the above technologies in place, our next step was to actually fit all the programs and data onto the floppy. To do this, we used data compression technology provided by the QNX RTOS. Using this technology, you can create embedded systems that execute directly from flash or ROM memory. You also have the option of loading code from flash into RAM, where the code is then executed. Since we obviously couldn't execute directly from floppy disk, we chose the "load, then run" option: load the code from the floppy, decompress it "on demand" in RAM, then run it. How do we support so many graphics cards?

QNX provides a vast array of high-performance, accelerated video drivers that support 8, 16, and 24 bit-per-pixel color depths. Unfortunately, we couldn't fit all these drivers onto a floppy and still have space for an RTOS, GUI, web browser, and various other demo programs! Nevertheless, we still had to figure out a way to make the demo work with the wide variety of graphics cards used in today's computers. The solution: create a "flat" graphics-driver technology. Rather than develop a separate graphics driver for each possible card, we implemented a program that could switch a large number of video cards into a "flat" graphics mode. We then wrote a single graphics driver that could work in that mode. What, exactly, is "flat" mode? With the introduction of VLBUS and PCI video cards, many video cards can now map the frame-buffer memory on the card directly into the high-memory space of the processor. To draw on the screen, a video driver can simply write to this high-memory space, rather than communicate with a card-specific graphics engine. Naturally, this approach doesn't deliver the same performance as a card-specific graphics driver. But it does allow a single driver to work with the high-resolution modes of a large number of video cards. How the demo disk works

The boot block on the floppy disk contains a first-stage boot loader that the BIOS loads into memory at 0x7c00. (This is the same operation the BIOS performs to boot any floppy.) Executing at 0x7c00, the boot-loader code then loads the second-stage boot loader (the next few blocks on the floppy disk) to the top of real-mode memory (just under the 640K address). The second-stage boot loader uses BIOS calls to load the remaining data from the floppy disk into the protected-mode address space, starting at the 1M address and ending in the 2.44M range (a total of 1.44M of floppy-disk data). The data loaded to the 1M address contains both a compressed OS and a compressed filesystem. The OS portion includes: a boot module specific to desktop PCs (QNX also supports modules for most embedded x86 processors and platforms)

the QNX microkernel and process manager, which provide POSIX-compliant OS services

embedded filesystems After loading the floppy into memory, the second-stage boot loader decompresses the OS down into low memory (below 640K) and the OS begins to execute. The OS process manager (Proc32) then starts up each of the other processes in the OS image. These processes include the embedded filesystems ( ramdisk.demo & Xipfsys ), which transform the compressed memory image into a live filesystem and provide the executable files for the demo. To see the status of any of these processes, try out the web server demo. Next, the OS executes the /bin/sinit program from the compressed filesystem. This program: launches the serial-port manager auto-detects the modem auto-detects the keyboard and mouse auto-detects the graphical modes supported by the video card launches the Photon microGUI windowing system launches the Voyager Web Browser The memory occupied by the OS image, which resides in the 1-to-2.4M address range, is now released to the OS to be used by executing processes. The demo no longer needs access to the floppy, and relies instead on the embedded filesystem. At this point, QNX, Photon, and the Voyager browser are running. If you look at the screen, you'll see a GUI that lets you dial into an ISP and connect to the Internet. You're ready to surf! A Tribute to the Author - Dan Hildebrand (1961-1998)

Everyone said it was impossible. You could never squeeze that much functionality onto a floppy. But to Dan Hildebrand, the author of this demo, the word "impossible" was like a call to arms. By nature, Dan saw possibilities where other people saw only problems. So when people said that even QNX couldn't make a demo like this, Dan set out to prove otherwise. And prove it he did. Within weeks, Dan and his colleagues at QNX Software Systems had created a working version, released it to beta sites, and - well, the rest is history. By now, over a million people worldwide have taken the "1.44M Challenge" and surfed the web with Dan's impossible floppy. Even ISPs and computing magazines have got into the act, handing the demo out to their subscribers. Always the optimist, Dan taught everyone to reach for their goals, and in doing so brought out a greatness in every project he contributed to. He was, for example, a key architect in the revolutionary, network-distributed design of the QNX RTOS. He also helped discover exciting new possibilities for the Photon microGUI, QNX's microkernel-based windowing system. These included the concept of the remote user interface (RUI), which allows a Photon-based embedded system to "project" its GUI onto the screen of a remote desktop PC. Dan had a talent for presenting complex information in clear, easy-to-understand terms. As a result, industry analysts relied on his insight into technology trends, organizers of trade conferences regularly invited him to deliver technical presentations, and a wide variety of computing magazines commissioned him to write an equally wide variety of articles - on everything from MMUs to web servers to handheld computers. Dan was a true polymath with a passion for electronics, whether it was analyzing the design of the most advanced microprocessors or building tube amplifiers. (His web site was a big hit with audiophiles.) He brought an infectious enthusiasm to his many hobbies, from volleyball to music. But his main passion was playing with his children. After a courageous battle with cancer, Dan passed away with grace and dignity on Tuesday, July 7, 1998, with his family by his side. Right to the end, Dan maintained his unwavering zeal for everything, and everyone, around him. This demo is just one of a thousand ways Dan contributed to the worldwide QNX community. His passing is truly a loss. Nonetheless, Dan left us with an invaluable legacy: The example - and inspiration - of his never-say-never attitude. That will always remain a big part of QNX. The innovation continues ...

Thanks to the efforts of Greg Carr and other QNX technical staff, the 1.44M Demo Disk continues to do the impossible. In fact, we're adding new features - like downloadable extensions - all the time. Keep watching www.qnx.com/demodisk for all the latest developments. If you have any ideas, comments, or questions about the Incredible 1.44M Demo Disk, fill out our comments form at www.qnx.com/demodisk/comments.html. We'd love to hear from you!