mirror of
https://github.com/forth-ev/VolksForth.git
synced 2024-11-25 10:30:57 +00:00
Bootdisk Tools License and Readme
This commit is contained in:
parent
2ca3cf3519
commit
904a83dcfe
26
8086/pc-baremetal/bootdisk/license.txt
Normal file
26
8086/pc-baremetal/bootdisk/license.txt
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
Copyright (c) 2000-2015, Alexey Frunze
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||||
|
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
The views and conclusions contained in the software and documentation are those
|
||||||
|
of the authors and should not be interpreted as representing official policies,
|
||||||
|
either expressed or implied, of the FreeBSD Project.
|
139
8086/pc-baremetal/bootdisk/readme.txt
Normal file
139
8086/pc-baremetal/bootdisk/readme.txt
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
The "BootProg" Boot Sector
|
||||||
|
|
||||||
|
|
||||||
|
What is BootProg?
|
||||||
|
|
||||||
|
BootProg is a collection of 512-byte boot sectors (for the x86 PC) capable of
|
||||||
|
loading and executing a program from a FAT12-formatted floppy or a FAT16/32-
|
||||||
|
formatted hard disk (bootable USB sticks and CDs can also be made with
|
||||||
|
BootProg).
|
||||||
|
|
||||||
|
BootProg understands programs in the MS-DOS .COM or .EXE format. This makes
|
||||||
|
it possible to use existing 16-bit compilers such as Borland/Turbo C/C++,
|
||||||
|
Sybase/Open Watcom C/C++ and Smaller C and a variety of assemblers such as
|
||||||
|
NASM, FASM, TASM and MASM among the others.
|
||||||
|
|
||||||
|
BootProg doesn't require that the program occupy a contiguous span of sectors
|
||||||
|
or FAT clusters or reside at a specific fixed location on the disk. BootProg
|
||||||
|
faithfully parses the root directory and the chain of FAT clusters in order to
|
||||||
|
locate the program contents. The only requirement is that the program be named
|
||||||
|
"STARTUP.BIN" (without quotes). This makes updating the program easy. You just
|
||||||
|
need to update the file and you can reboot and execute it immediately.
|
||||||
|
|
||||||
|
|
||||||
|
What can BootProg be used for?
|
||||||
|
|
||||||
|
You can make a boot loader for your OS. The program that BootProg loads can be
|
||||||
|
your 2nd stage boot loader. Or, if your OS is relatively small, STARTUP.BIN
|
||||||
|
could contain the entire OS.
|
||||||
|
|
||||||
|
You can write low-level utilities to work with your PC's hardware and load them
|
||||||
|
with BootProg without having to jump through the hoops with your Windows, Linux
|
||||||
|
or even DOS.
|
||||||
|
|
||||||
|
You can make cool graphics demos or games that run on bare hardware.
|
||||||
|
|
||||||
|
|
||||||
|
What can't BootProg be used for?
|
||||||
|
|
||||||
|
Many things. Most importantly, if you make a DOS program that uses any MS-DOS
|
||||||
|
service functions (e.g. int 21h) or data structures, it will not work when
|
||||||
|
loaded by BootProg. It must use either BIOS services (e.g. int 10h, int 16h,
|
||||||
|
int 13h and such) or access hardware directly or both.
|
||||||
|
|
||||||
|
However, it is possible to create universal/hybrid programs that would work
|
||||||
|
both in DOS and when loaded by BootProg. BootProg will set registers si, di and
|
||||||
|
bp to the values 16381, 32749 and 65521 respectively before transferring control
|
||||||
|
to your program. Your program can then check the values in these registers and
|
||||||
|
use DOS services in DOS or something else instead on bare hardware. You can also
|
||||||
|
choose to make the program run with reduced functionality if not on DOS or
|
||||||
|
vice versa.
|
||||||
|
|
||||||
|
|
||||||
|
How does it work?
|
||||||
|
|
||||||
|
Nothing special. It just finds STARTUP.BIN, loads it, performs any relocations
|
||||||
|
necessary for the .EXE type of programs, sets the magic numbers 16381, 32749
|
||||||
|
and 65521 in registers si, di and bp respectively and passes control to your
|
||||||
|
program.
|
||||||
|
|
||||||
|
If BootProg can't find STARTUP.BIN, it will print "NF" to the screen. If it
|
||||||
|
fails to load the file due to a read error, it will print "RE". This is how the
|
||||||
|
FAT12 and FAT16 versions of BootProg work. The FAT32 version has much less space
|
||||||
|
for these errors and so in both above cases it will simply print "E".
|
||||||
|
|
||||||
|
|
||||||
|
How do I put BootProg on my disk?
|
||||||
|
|
||||||
|
If you have a 1.44MB 3"5 floppy, just format it regularly with FAT12 in DOS or
|
||||||
|
Windows and then write flp144.bin to the very first sector of the floppy with
|
||||||
|
whatever tools you find/have for that. After that you can copy STARTUP.BIN to
|
||||||
|
the floppy and off you go.
|
||||||
|
|
||||||
|
If you want to create an image of a 1.44MB 3"5 floppy, it might be even easier.
|
||||||
|
Compile the mkimg144.c program contained here with your favorite C compiler
|
||||||
|
and use it:
|
||||||
|
|
||||||
|
mkimg144 [option(s)] [file(s)]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
|
||||||
|
-bs <file> Specifies the boot sector to use, e.g. "-bs flp144.bin"
|
||||||
|
|
||||||
|
-o <file> Specifies the name of the output file ("floppy.img" is the
|
||||||
|
default, if this option isn't specified)
|
||||||
|
|
||||||
|
-us Uses the current time to set the volume ID of the FAT to a unique
|
||||||
|
value (the volume ID is used to distinguish between different
|
||||||
|
removable disks and detect disk change more accurately)
|
||||||
|
|
||||||
|
E.g: "mkimg144 -bs flp144.bin -o flp144.img -us startup.bin".
|
||||||
|
Btw, you can rename the supplied file "demo1.com" to "startup.bin" to try it
|
||||||
|
out.
|
||||||
|
|
||||||
|
For all other cases you'll need to become a little more familiar with FAT and
|
||||||
|
a little more intimate with disk tools and BootProg's source code.
|
||||||
|
|
||||||
|
You will need to populate the BPB's of boot16.asm and boot32.asm with the
|
||||||
|
values appropriate to the type and size of the file system that you already have
|
||||||
|
on a disk or that you intend to create on the disk.
|
||||||
|
See the source code, these places are marked with question marks, for example:
|
||||||
|
bpbBytesPerSector DW ? ; 0x0B
|
||||||
|
|
||||||
|
The best is to format your disk with some standard tools (e.g. FORMAT.COM in
|
||||||
|
DOS), extract the BPB values from the FAT-formatted disk, put them into BootProg
|
||||||
|
and then write thusly adjusted BootProg over the original boot sector.
|
||||||
|
|
||||||
|
You may find a disk editor handy when manipulating BPB values and/or
|
||||||
|
reading/writing boot sectors.
|
||||||
|
|
||||||
|
|
||||||
|
Limitations and implementation details
|
||||||
|
|
||||||
|
boot12.asm (flp144.asm) and boot16.asm require an i80186/i80188/i80286 or a
|
||||||
|
better CPU. boot32.asm naturally requires an i80386 or a better CPU.
|
||||||
|
|
||||||
|
boot12.asm (flp144.asm) was not tested on hard disks (but it might work as the
|
||||||
|
boot sector on FAT12 primary partitions (file system ID 1)).
|
||||||
|
|
||||||
|
boot16.asm was written for and tested on primary FAT16 partitions (file system
|
||||||
|
IDs 4 and 6). Its expected use is the boot sector of the partition and not the
|
||||||
|
MBR. The FAT16 version may allocate up to 128KB of RAM for the entire FAT16,
|
||||||
|
leaving less room for STARTUP.BIN. But ~400KB left should still be plenty of
|
||||||
|
space for its code, data and stack.
|
||||||
|
|
||||||
|
boot32.asm was written for and tested on primary FAT32 partitions (file system
|
||||||
|
IDs 0Bh and 0Ch) and for BIOSes supporting function 42h of int 13h (IOW, for
|
||||||
|
systems supporting HDDs larger than 8GB). Its expected use is the boot sector
|
||||||
|
of the partition and not the MBR.
|
||||||
|
|
||||||
|
BootProg does not check the size of STARTUP.BIN and reads into memory all of its
|
||||||
|
clusters, which means that up to 32767 extra bytes may be read from the disk
|
||||||
|
and written to the memory after the last byte of STARTUP.BIN (max cluster size
|
||||||
|
is 32KB). It also means that you may append data to your program and it will be
|
||||||
|
loaded. You may create oversized .COM-style STARTUP.BIN larger than ~64KB,
|
||||||
|
however, note that the stack will naturally overwrite its contents from offset
|
||||||
|
65535 of the program segment (offset 65279 of the file) downwards.
|
||||||
|
|
||||||
|
If your PC has the full 640KB of conventional/DOS memory, you should be able to
|
||||||
|
load program files of size of up to ~400KB.
|
Loading…
Reference in New Issue
Block a user