Image Map Image Map
Page 3 of 48 FirstFirst 123456713 ... LastLast
Results 21 to 30 of 476

Thread: XTIDE Universal BIOS

  1. #21
    Join Date
    Nov 2007
    minneapolis, MN


    most excellent. if I move forward with my PCjr design (gutting an LPT sidecar and putting XTIDE in there) I will be putting a microdrive into that as well for power requirements and obviously size restraints. Was thinking that I could do a CF slot in the back as well...

  2. #22


    I have some good news and bad news. Good news first:

    Beta 4 is going to have a boot menu with drive number swapping (DOS can only boot from first floppy or hard disk) and optional ROM boot (for systems with ROM Basic or ROM DOS). Hard disk drive numbers can even be swapped when booting from floppy drive A. Menu height can be configured and that info at the bottom can be hidden.

    Bad news is that the boot menu takes much more space than i had hoped. I think there will be enough space left for HD floppy support for XT builds and EBIOS support for AT build. There are definitely not enough space for both of them at the same time. This is not a big problem since EBIOS support is quite useless on XTs and ATs already have HD floppy support. There likely won't be enough space for other features either (BIOS partitions, CD-ROM boot etc). I suppose it might be possible to compress most of initialization and boot menu code and then decompress and execute them from RAM. I hope there are some suitable free compression libraries.

    Beta 4 will have block mode transfers and i'd like to include cylinder limiting as well.

  3. #23
    Join Date
    Nov 2007
    minneapolis, MN


    This is excellent news. I think the boot menu is extremely useful on these old machines, so I'm happy that it is now available.
    Have you tested this out on a tandy machine that may boot up in 40 column mode? It looks like your menu should just barely fit!

    Anyway, I plan on burning your BIOS onto all of the production level eeproms for the XTIDE, starting in about a week, so the clock is ticking to get a working release! (no pressure eh?)

  4. #24


    Forgive me for not being perfectly up to date - I try, but there is a lot of activity ..

    Is the BIOS available for download somewhere? I have a few reasons for asking:

    • The existing versions that I have on my card work well enough, and I would like a snapshot of the source code.
    • I want to have access to a version that only does PIO, and does not assume DMA or IRQs. This is the most widely compatible code, and is suitable for other machines.
    • I'm going to be working with Hargle on the PCjr version of the adapter
    • I plan on experimenting with a memory mapped version of the adapter for improved speed when doing PIO transfers. (The IDE registers would stay the same, except for the DATA register which I would like to be in memory space, not I/O space.)


  5. #25


    Quote Originally Posted by hargle View Post
    Have you tested this out on a tandy machine that may boot up in 40 column mode?
    Boot menu width is 38 characters (just like configuration program) so it will work fine on 40 column mode. I just tested it on Tandy and it looks and works fine. I'll try to get beta4 released during next week. Cylinder limitation is missing but that should be easy. Boot menu default drive is fixed to 00h (Floppy Drive A) and i want it to be configurable.

  6. #26


    Quote Originally Posted by mbbrutman View Post
    The existing versions that I have on my card work well enough, and I would like a snapshot of the source code.
    You can have sources for beta3 right away or do you want to wait beta4?

    I plan on experimenting with a memory mapped version of the adapter for improved speed when doing PIO transfers. (The IDE registers would stay the same, except for the DATA register which I would like to be in memory space, not I/O space.)
    Do you mean adapter with RAM as a transfer buffer or do you intent to map XTIDE Data High register to memory space and keep Data Low in I/O space? Or maybe map both data registers to adjacent memory addresses? Best thing would be to modify XTIDE so that only one 8-bit data register would be needed.

  7. #27


    I'll take whatever you have available right now. Ideally this code is in a repository somewhere so we can see the changes between the releases.

    The key to performance with the PIO design is to be able to utilize 16 bit transfers .. and we can't use 16 bit transfers with the current design using I/O ports. On these machines an in or out of a word generates two bus transactions to two adjacent port addresses. This behavior would have been fine, except that the second port address that would be generated is in use already.

    My plan is to change the latches used for the 16 bit data transfers. Instead of using two different ports for hi and low, I would use two adjacent memory addresses. That way a single read word or store word can be used to get all 16 bits. The processor can do a 16 bit read much more efficiently than it can do two 8 bit reads - less instructions are required and it generates the two bus cycles by itself.

    The other ports would stay the same for compatibility. Only the data port would change. User written software that uses the data port directly would be broken, although it's already broken on these machines because you have to do two different port I/Os to get the 16 bit data. I'm anticipating that the BIOS code to read and write sectors is all that most people care about for these machines, and as long as that code is correct if other utilities don't work it is not a big loss.


  8. #28


    I noticed something about CF-cards and microdrives when testing boot menu and other new features. It seems that not all CF-cards are bootable and some cards do not work properly when other card or drive is present.

    Here are the CF cards that i have:
    • 64MB Apacer (no speed rating), not bootable
    • 256MB Apacer (no speed rating), not bootable
    • 256MB Apacer Photo Steno II Pro (100x)
    • 512MB Apacer Photo Steno III (88x), works only as single drive

    And here are the microdrives:
    • 4GB Magicstor (model: GS10040A-11 47), not bootable
    • 4GB Seagate ST1.2 (model: ST64022CF), works only as master
    • 6GB Hitachi (model: HMS360606D5CF00)

    So three of the drives cannot be booted. Apparently they intentionally have fixed boot sector that does not actually boot anything (AA55h signature is present). They allow writes to boot sector but no data is actually written. I have no idea why they work that way. I believe there is a way to get them to boot. BIOS reserves one cylinder for diagnostics. It is not needed but i reserve it for compatibility with other BIOSes. Diagnostics cylinder is the last cylinder but if i reserved first cylinder, then boot sector would be located to some writable sector. That would break the compatibility with other BIOSes so I don't want to do that. When I implement BIOS partitions (if there are enough space for it) i'll make sure that it is possible to left some space unused at the beginning of disk.

    So I have only one fully working CF-card and one microdrive. It is a good thing that the Hitachi is the only 100% working microdrive since it have the best access times of all the three microdrives.

    It is time to release beta4. It is a bit of rushed release so I hope there are not a lot of bugs. This will be the last beta before first stable release. There might be release candidate version(s) if lots of bugs are found. There won't be any new features before stable v.1.0.0. I will fully release source codes when first stable version gets released.

    Here are the changes since beta3:
    • Boot menu with drive swapping
    • Block mode transfers
    • Cylinder limiting
    • Drive detection read errors are now properly detected
    • A little longer timeout value when detecting drives
    • Minor optimizations to save some bytes

    Boot menu
    Boot menu allows to select hard disk or floppy where to boot from. Drive swapping is enabled by default. It is required since DOS can only boot from first floppy or hard disk drive. It is possible to swap hard disks and boot from floppy drive A. Select hard disk you want as a first hard disk and press F instead of Enter. This is needed so DOS could be easily installed to any hard disk. Boot menu has several settings in configuration program.

    Block mode transfers
    This is what is known as “IDE HDD Block Mode” in many BIOSes. I see no reason to disable this so it is always enabled and set to maximum block size supported by drive. Block mode increases transfer rates since more sectors can be transferred per interrupt to minimize any sector handling overhead. It will also help the drive to use cache more optimally.

    Cylinder limiting
    Old software (like FDISK on Tandy DOS 3.2) won't work with large drives. Cylinder limiting can make the drive appear smaller than it actually is. This is a temporary solution that will likely be removed when BIOS partitions are implemented. Disk size in MiB can be calculated with following formula: (cylinders * heads * sectors per track) / 2048. There are many programs to detect CHS parameters from drive. For example DOS 6.x has MSD.EXE that can be used to see the CHS parameters so wanted cylinder limit can be calculated.

  9. #29


    I believe there is a bug when 386 or later processor is used and DPTs are stored to top of interrupt vectors (30:0h). Some (most?) BIOSes use top of interrupt vectors as a stack during POST. This doesn't normally matter since stack grows towards lower addresses.

    It does matter now since boot menu is created to stack. Before releasing v1.0.0_b4 i noticed that the second Disk Parameter Table occasionally got corrupted. This seemed to happen only when stack usage was highest, like when timer interrupt was generated when boot menu selection was being changed.

    I fixed it by moving stack to top of first 64kB of RAM by setting SS and SP to zero. It works fine on Tandy 1000 SX with NEC V20. It should work with any 286 and below but i think that 386 and later generates Stack Fault exception (since SP underruns to FFFEh where first word is stored). It might not matter if default exception handler just returns so if anyone has 386 or later, please try and let me know if it works.

    By default 1kB of base RAM is used for DTPs so there is no need to relocate stack. This bug can happen only when ”Reserve 1kB of base memory” is set to N and 386 or later processor is used.

  10. #30


    XTIDE Universal BIOS v1.0.0_RC1

    Changes since v1.0.0_b4
    • Fixed 386 (and later) stack exception bug
    • Stack is relocated for boot menu even if DPTs are not stored to 30:0h
    • Strings and boot menu are displayed properly on BIOSes that corrupts AH when returning from INT 10h/AH=Eh
    • L-CHS addressing is now used for <=504MiB drives even if LBA is supported

    386 stack exception bug is fixed by relocating boot menu stack to 0:7C00h (below boot sector). Stack is now relocated even if 1kB of base RAM has been stolen. It is possible that some other BIOS uses 30:0h so now stack cannot corrupt anything important.

    L-CHS to LBA translation is slow on 8088/8086. Previously translation was performed for all drives that supported LBA. Now it is only done when necessary. This will slightly improve access times for 512MB and smaller CF cards when slow processor is used.

    Configuration program ( has been updated too:
    • Optimized flashing so 8088@4.77MHz is fast enough to flash with Software Data Protection enabled
    • Quick help can be hidden by pressing F2. This will make menu navigation faster.
    Last edited by aitotat; January 24th, 2010 at 05:05 AM. Reason: Forgot to mention that configuration program has been updated.

Tags for this Thread


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts