FYSOS update

Update: 6 March 2018: Minor fix with keyboards. Now supports unlimited types and counts of keyboards attached, especially multiple USB keyboards.

Update: 4 March 2018: Thanks to a fellow reader (thank you Michael), I have fixed a few issues with 64-bit machines, as well as updated the USB's HID and other small issues here and there. If you haven't tried the hd.img yet, please do. If you did and it didn't work, please try again.

I haven't updated my bootable FYSOS image in some time, so I thought I would include it now. You can get it from here (~1.00Meg).

Lots of updates and improvements have been done:

  • USB Updates:
    • Added ISO transfers to all four controller types
    • Added Video Camera capabilities
    • Added UASP drive support
    • Improved connection detection
    • Improved Root Hub enumeration
    • Improved USB Legacy Support
    • Improved HID support
    • Greatly improved external HUB support
    • Lots of other improvements
  • Media Updates:
    • Improved AHCI/SATA support
    • Improved IDE support
    • Improved the virtual file system
  • IO Updates:
    • Improved PS/2 support
    • Improved ACPI support
    • Improved Multi-Processor support
    • Improved PIC support
    • Improved APIC support
    • Added/Improved HPET support

All of these additions and improvements have made it possible to document them within their respected books, especially Volume 8. I have added so much more information, corrected some information, and per a request from a reader, added many more images to make the understanding a little bit easier. I hope to have a new edition out within a few months.

Most of the work has been on improving and documenting the USB. The bootable image listed above (or below) will currently only enumerate Mass Storage Devices (MSDes) and external hubs, simply because I have the others commented out. I have a few small things to finish with the change in HID device support before I can safely use them. The USB video works quite well, but relies upon a few hard coded items. Therefore it is commented out too. See below in this blog for images and more information on the video support.

The .zip file (~1.00Meg) contains both a floppy image (1.44Meg), as well as a small (5Meg) hard drive image ready to install on to a USB thumb drive. I use Rufus and it works quite well.

I would really appreciate it if you installed the hd.img file to a thumb drive and booted it on your test machine[1]. Then once there is no more scrolling of data, press the enter key to give you a prompt. Usually takes about 30 seconds or so, depending on the hardware you have installed. Then change to the flash drive:


and type


This will write a text file to the thumb drive of all characters previously written to the screen. I would really appreciate it if you sent me that DEBUG.TXT file.
    fys [at] fysnet [dot] net

A few other notes: The GUI is not currently included with this image. However, at boot time, you can press F8 during boot (light blue screen) and FYSOS will let you select a graphics screen. Since no actual images are included with this image, not much will be shown, but it is there if you wish to do so. (It will select a 16-bit graphics screen by default, if a suitable one is found)

Thank you.

[1]As always, I do not suggest you boot it on your flagship, your development machine, or on a machine that you don't want damaged. My code does not intentionally do any damage, but it is not thoroughly tested. As always,

**** Use at your own risk ****

USB Camera, part 3

We have full screen video!!!!

full screen video

USB Camera, part 2

Just a few notes and an image to show that I have got other resolutions working as well as a better yuy2 to rgb converter.

320 x 240 x 16bit stream

This resolution is twice the size, now at 320 x 240. No more orange and red fire looking stuff. However, I kept this image to show that there was a payload that was in error, so there is a line just under my nose. This shows that I need to figure out what to do when a payload is received in error, or incomplete.

There is a lot of glare with this image, as well as a mirror effect of the image bouncing off the back of my phone and back onto the screen. Notice a silhouette of my head up and to the right.

I again tried a 640 x 480 x 16-bit stream and it worked okay, though some of the payloads were missed so a line or two of the stream was from the previous frame data. I still need to do some work on the scheduler to fix this.

USB Camera

Well, since I show how to enumerate and retrieve data from a camera in Volume 8, I thought it would be interesting to actually start receiving frames from the camera. It isn't as easy as I might have thought. If the timing isn't just right, the camera to PC data can be lost. However, after some tweeks and a few hours of work, I got a decent 160 x 120 x 16-bit stream to show.

160 x 120 x 16bit stream

It's a small image, 160 x 120, and I just bit_blit it to the upper left corner of the screen, but it is quite smooth. The orange and red fire looking stuff in the bottom right corner of the feed is my conversion from yuy2 to RGB565. It needs a little work.

I tried a 640 x 480 x 16-bit stream and it worked okay, though some of the payloads were missed so a line or two of the stream was from the previous frame data. This is solely because my task scheduler is currently set at a 10ms interval. I don't have a variable task priority task scheduler yet. Therefore, my stream retrieval routine would miss about 2 micro-frames of payload data every 10ms.

Anyway, I got the thing to work in most any resolution. Now to document it and add information to the book.

P.S. Note that the background of the screen is text displaying the information I needed to see what was going on. Then note that this camera can stream a feed size of 1280 x 1024 at 16-bits. Notice that the rate is 157 million. I didn't try this resolution. I am sure it would be missing quite a few payloads. :-)