• Please review our updated Terms and Rules here

How to make eeprom boot?

To make DOS (or any other program) bootable, it has to 'appear' as a BIOS extension. The BIOS extension would redirect the machine to jump to the code in your EPROM if a boot floppy or bootable hard disk was not found. Some early machines with DOS built into ROM did this, and I would use one of them as a template.

It's not easy to do. You will need a technical reference manual or some sort of BIOS reference to learn how to make BIOS extensions. You will also probably need an assembler, a DOS technical reference, etc. And I don't know how relocatable the DOS boot code is - it won't be trivial.
 
It's a major product. I've experimented with BIOS extensions, but not anything like putting DOS in ROM.

If you want to persue this project, go find a machine that has DOS in ROM and learn how it works. Then use that as a template.

What you are asking for would fill a small book.
 
to possibly alleviate the problem of whether dos is relocatable or not, the code could have dos load from rom (or eprom or eeprom) into ram. Or is that the general idea anyway? It's a very interesting topic, but I don't have the brain cells to even get involved right not (I HEARD THAT TERRY --- HE SAID "NEVER HAD"!!!) LOL LOL LOL
 
The following describes the search/execution of BIOS extensions by the XT's POST.
Other computers are possibly identical in this part of the POST (for compatibility reasons).

20. POST - A search of the memory area from C800:0 to EF80:0 is done (in 2K blocks) for the BIOS extension ROM's that may be located on expansion cards.
When a BIOS extension ROM is found (first two bytes are 55AA), a checksum on it is done. If the checksum is incorrect then the segment of the faulty BIOS extension ROM and the word 'ROM' is displayed (eg. C800 ROM).
If the checksum is correct then the motherboard BIOS ROM hands control to the BIOS extension ROM found on the expansion card. BIOS extension ROM does whatever tests and initialisation that it wants and then returns control to the BIOS ROM on the IBM/XT motherboard. Some BIOS extension ROM's will display messages on the screen.

NOTE:Hard disk controllers for the IBM/XT have a BIOS extension ROM which is normally at C800:0 When control is passed to the controller's BIOS extension ROM, it will issue 1700 series error messages if it finds anything wrong.



Okay. You build your own expansion card containing a ROM that is mapped in memory to start somewhere between C800:0 and EF80:0 (on a 2K boundary). Obviously you must avoid a conflict with any existing BIOS extensions. You set the first two bytes of your ROM to 55AA and you alter the value of some dummy bytes so that the POST sees a correct checksum. That's a piece of cake. The other contents of the ROM will be the fun part.

Obviously it's not as easy as just putting DOS into your BIOS extension. And whatever your BIOS extension does, you must pass execution back to the POST so that:
1. execution of any other BIOS extensions happens, and
2. the remaining POST code runs (it does stuff like enable timer and keyboard interrupts).

However, if you did want your BIOS extension to load/boot DOS, I guess your BIOS extension could do the remaining POST tasks itself, then load/boot DOS. Problem with that is that different computers will have different 'remaining POST tasks'. Throw that idea out the window.

The last thing the XT POST does is invoke the bootstrap loader (via interrupt 19). Therefore maybe your BIOS extension could contain three 'bits' of code. The first bit is what executes when the POST passes execution to your BIOS extension. It simply alters the pointer that interrupt 19 uses to point to the second bit of code in your BIOS extension. In that way the remaining POST tasks get done. The second bit of code in your BIOS extension is a modified bootstrap loader to copy DOS (the third bit in your BIOS extension) from ROM to RAM, then pass execution to DOS.

Sounds simple, but I don't think it will be. There's a lot of research required.
 
skcode1 said:
But i cant find one with eeprom boot

Tandy 1000 HX boots from rom. Dos 2.11 I think, but it'll show yuo how it's done. They come up on ebay all the time.

Kelly
 
kb2syd said:
Tandy 1000 HX boots from rom. Dos 2.11 I think, but it'll show yuo how it's done. They come up on ebay all the time.

Kelly

I have one in storage that you can have for shipping cost, so you can dump the ROM and study the code. IIRC, it boots to DOS 3.3x and also has the 'DeskMate' shell in ROM. Interestingly enough, that machine also utilizes an EEPROM to store system information.

--T
 
Well, that was painless. (Great program, Mike). Here are the DOS 5 dumps from the Zeos.

--T
 

Attachments

  • DOS5.zip
    64.8 KB · Views: 8
  • SYS_ROM.zip
    39.7 KB · Views: 6
Last edited:
The EPROM in a network card socket would have to look like a BIOS extension. Which is how even modern network cards allow a network boot.
 
you can save portions of memory with debug (as long as they're no bigger then 64k-1 or 65,535 bytes). You can save sequential portions too but it can be a little confusin sometimes yer know. You can save it to a file also. If anyone needs help...uh ask someone else LOL. Kidding, it's been a while since I played with it.
 
I really don't understand why it has to be done as a bios extension. And forget about designing an expansion card, there's empty rom sockets on your PC mobo (and empty rom space). After all the POSTs and crap get done, the computer attempts to load something from either hard disk or floppy disk or finally ROM (BASIC - if it's true blue). Seems to me you could just fiddle with that or copy those routines and load the files into ram. I guess that's an oversimplification, but all the other stuph seems unnecessary.

"I have one in storage that you can have for shipping cost, so you can dump the ROM and study the code. IIRC, it boots to DOS 3.3x and also has the 'DeskMate' shell in ROM. Interestingly enough, that machine also utilizes an EEPROM to store system information."

Dude, if no one claims it, I'm interested.
 
How do you get a machine to boot DOS from RAM without putting DOS into RAM in the first place?

The job of the BIOS extension is to tell the machine to put a copy of DOS in RAM from an EPROM after the normal hard disk and floppy disk boots have failed because there was no media.

The BIOS extension is an EPROM somewhere on the machine that is in the correct address range. (0xD000:0000 - 0xF000:0000). If empty sockets on your motherboard are addressable, then fine. Another cheat is to use a network card with a boot EPROM on it as a simple card to hold your new EPROM.

Your method would alter the machine BIOS. I'd rather extend it with another EPROM.
 
Last edited:
"Your method would alter the machine BIOS. I'd rather extend it with another EPROM."

If the BASIC interpreter is done that way (as an extension) then I guess that's the way to go. So I guess what you're saying is if there's no hard disk, nothing in the floppy drive and (presumably) no ROM-BASIC to boot to, it boots into ROM-DOS.
 
but "extensions" as I'm to understand, get executed (their code) just because they're there. It's not conditional in otherwords. And after you hand over control to DOS (once it's loaded into ram) you're not handing control back to the system BIOS, or at least there would be no reason to.
 
Chris2005 said:
I really don't understand why it has to be done as a bios extension.
It doesn't. You can of course replace your existing BIOS ROM's with altered ones (providing there's enough space for DOS, or you can put DOS in a unused ROM socket [either on the motherboard or a card]). You end up with a machine-specific solution.

A 'pure' BIOS extension solution (if done correctly) is a multi-machine solution.
 
Back
Top