A new BIOS for the i440fx #273
Replies: 8 comments 9 replies
-
Here is test image: DOSSmall.zip.
|
Beta Was this translation helpful? Give feedback.
-
It looks promising and I hope it will replace the existing BIOS some day. Since I'm at the moment the only developer of the LGPL'd VGABIOS, I'm interested in new tools to build the VGABIOS. Over the years I have rewritten parts of the code from C to assembler. The Banshee and Cirrus extensions are asm code (except debug messages) and the rewrite of the Bochs VBE stuff is nearly complete. Only the VGA core stuff still has a lot of C code. With the planned Bochs release 2.8 I intend to release VGABIOS version 0.9 and I hope that release 1.0 will be completely asm code and build with the same tools you use. |
Beta Was this translation helpful? Give feedback.
-
Thanks guys for your feedback.
I don't disagree, however, the way I see it, being it currently takes
I am more than happy to have a look to see if I can port your code to my assembler. I tried to make it very close to MASM 5.1, so it may be a small task to do so. I am also going to see if I can get a
Two missing
I have the following in my bochsrc.txt: Thanks again, |
Beta Was this translation helpful? Give feedback.
-
Yes. For example, I can place the following line in the source file...
Agreed. All in good time.
That line means the self test did not return 0x55. I used the same declaration lines you have:
and still have it work as expected. The emulation reboots as expected both with and without x86 debug support compiled in. However, I decided to use your Thanks again. Your feedback is appreciated. |
Beta Was this translation helpful? Give feedback.
-
Yep, a Much appreciation. |
Beta Was this translation helpful? Give feedback.
-
Just a follow-up. Work on this BIOS is progressing. (new file at https://www.fysnet.net/temp/i440fx.zip, dated 25 Feb 2024) |
Beta Was this translation helpful? Give feedback.
-
I think I have fixed this issue. Now works with HIMEM, etc. If you have a chance to test it, please do. (same URL, new file) Thanks, |
Beta Was this translation helpful? Give feedback.
-
As an update, I think I have fixed all known issues and added all items that need to be added (except for a couple more) and have tested as much as I can. The link for this BIOS is still at https://www.fysnet.net/temp/i440fx.zip and still only includes the binary(s), for now. It includes two image files, one for Bochs and one for QEMU. Except for a few (known) items, it should boot QEMU just like it boots Bochs. I have added a minimal GUI style Anyway, just an update, and a thanks for the tests, |
Beta Was this translation helpful? Give feedback.
-
Hi guys,
Partly because the current BIOS is buggy, but mostly I wanted to see if I could do it, I have created a new BIOS.
It is based on a lot of the existing BIOS, but with many fixes and enhancements, namely it will now boot from a USB device.
I have the 128k image at: https://www.fysnet.net/temp/i440fx.zip
Use the standard
romimage
declaration:romimage: file=$BXSHARE/bios/i440fx.bin
If you apply PR #209, you can simply add the following line in your bochsrc.txt file.:
boot: usb
It will try to boot the first USB disk it finds. Without that PR, you can simply press
F12
when prompted, and choose one of the devices.No other modifications are needed.
UHCI, OHCI, EHCI, and xHCI is supported.
There are a few things I still need to do. It will boot a floppy and hard drive image, but not a CDROM since it can be emulated as a floppy, HD, or no emulation at all. The code is there, due to that fact that I emulate
El Torito
with standard CD-ROM images, I just need to modify it to use the USB CDROM image as well. So currently, booting a USB CD-ROM is not fully supported.It is completely writing in x86 assembly. Yep, you read that right, assembly. I have written it in assembly, assembled with my own assembler (https://www.fysnet.net/newbasic.htm). It assembles using only the assembler, no external utilities are needed. i.e.: no
preparser
,sed
,biossums
, or anything. Simply give a couple command line parameters to the assembler, and the whole thing is built with one utility.However, I have not included source at the moment. It needs a lot more testing first. I am including the binary here asking that, if you so desire, please try it.
I have tested with most Windows versions up to WinXP, and I haven't found any errors yet, but that doesn't mean there aren't any.
I have tried booting Win98 as a USB thumb drive and it stops with a 'protection error'. However, occasionally Win98 gives this error booting from an actual
disk
image, so I think my code just triggers the error.I have booted DOS based images, HD and Floppy, as USB drives and they seem to work as expected.
One of the enhancements you might find quite quickly is that it boots into a graphic mode displaying an icon as it boots. Another is PnP support, as well as a limited Boot Specification interface support.
Anyway, I am simply asking tests be done, and let me know what you find. I tested with everything I got, but that isn't anywhere enough of a test. If you so desire, please test and let me know what you find.
If you can include a link to the booted image you tried, that will be very helpful.
Thanks,
Ben
P.S. If you run it while in the x86 debugger, it will break on
xchg cx,cx
in many places. This is simply to let me know where it got and if it actually does break on one of those, it didn't make it to where I thought it should. If you can't include a test image, please at least give me thelinear break
address it stopped on. i.e.:0x000E1234
. Try continuing on all stops, but as soon as it noticeably faults, please note the break address.P.P.S. As many of you know and/or can imagine, writing such a beast in assembly can be and was a challenge, but an enjoyable challenge. Being it is my own assembler, that made a huge advantage. For example, let me include a few lines of code:
This is from the
xHCI
code. Notice that there are a lot of 'helpers'. For example, theC style
pointers in the lines shown. As long as I know, in this case,esi
points to the start of the associated event ring, usingxHCI_EVENT_RING->
will calculate the address for me given a simplestruct declaration
before hand.In this case,
mov es:[esi+xHCI_EVENT_RING->table_size],dl
simply translates, or assembles to:
mov es:[esi+13],dl
This way, I can add, remove, rearrange, or modify members as I see fit with little to no other modification other than the
struct
itself. It makes it a lot easier as well as a great side-effect, it self documents...Anyway, enough bragging, or maybe no so much bragging, but it was an enjoyable challenge. I know most of us here can relate to that.
Thanks again, and I would appreciate any testing results you wish to share.
Ben
Beta Was this translation helpful? Give feedback.
All reactions