summaryrefslogtreecommitdiff
path: root/etc/etc.i386/INSTALL.dbr
diff options
context:
space:
mode:
Diffstat (limited to 'etc/etc.i386/INSTALL.dbr')
-rw-r--r--etc/etc.i386/INSTALL.dbr467
1 files changed, 0 insertions, 467 deletions
diff --git a/etc/etc.i386/INSTALL.dbr b/etc/etc.i386/INSTALL.dbr
deleted file mode 100644
index 5fc13879a5b..00000000000
--- a/etc/etc.i386/INSTALL.dbr
+++ /dev/null
@@ -1,467 +0,0 @@
- How It Works -- DOS Floppy Disk Boot Sector
-
- Version 1a
-
- by Hale Landis (landis@sugs.tware.com)
-
-
-THE "HOW IT WORKS" SERIES
-
-This is one of several How It Works documents. The series
-currently includes the following:
-
-* How It Works -- CHS Translation
-* How It Works -- Master Boot Record
-* How It Works -- DOS Floppy Boot Sector
-* How It Works -- OS2 Boot Sector
-* How It Works -- Partition Tables
-
-
-DOS FLOPPY DISK BOOT SECTOR
-
-This article is a disassembly of a floppy disk boot sector for a
-DOS floppy. The boot sector of a floppy disk is located at
-cylinder 0, head 0, sector 1. This sector is created by a floppy
-disk formatting program, such as the DOS FORMAT program. The boot
-sector of a FAT hard disk partition has a similar layout and
-function. Basically a bootable FAT hard disk partition looks
-like a big floppy during the early stages of the system's boot
-processing.
-
-At the completion of your system's Power On Self Test (POST), INT
-19 is called. Usually INT 19 tries to read a boot sector from
-the first floppy drive. If a boot sector is found on the floppy
-disk, the that boot sector is read into memory at location
-0000:7C00 and INT 19 jumps to memory location 0000:7C00.
-However, if no boot sector is found on the first floppy drive,
-INT 19 tries to read the MBR from the first hard drive. If an
-MBR is found it is read into memory at location 0000:7c00 and INT
-19 jumps to memory location 0000:7c00. The small program in the
-MBR will attempt to locate an active (bootable) partition in its
-partition table. If such a partition is found, the boot sector
-of that partition is read into memory at location 0000:7C00 and
-the MBR program jumps to memory location 0000:7C00. Each
-operating system has its own boot sector format. The small
-program in the boot sector must locate the first part of the
-operating system's kernel loader program (or perhaps the kernel
-itself or perhaps a "boot manager program") and read that into
-memory.
-
-INT 19 is also called when the CTRL-ALT-DEL keys are used. On
-most systems, CTRL-ALT-DEL causes an short version of the POST to
-be executed before INT 19 is called.
-
-=====
-
-Where stuff is:
-
- The BIOS Parameter Block (BPB) starts at offset 0.
- The boot sector program starts at offset 3e.
- The messages issued by this program start at offset 19e.
- The DOS hidden file names start at offset 1e6.
- The boot sector signature is at offset 1fe.
-
-Here is a summary of what this thing does:
-
-1) Copy Diskette Parameter Table which is pointed to by INT 1E.
-2) Alter the copy of the Diskette Parameter Table.
-3) Alter INT 1E to point to altered Diskette Parameter Table.
-4) Do INT 13 AH=00, disk reset call.
-5) Compute sector address of root directory.
-6) Read first sector of root directory into 0000:0500.
-7) Confirm that first two directory entries are for IO.SYS
- and MSDOS.SYS.
-8) Read first 3 sectors of IO.SYS into 0000:0700 (or 0070:0000).
-9) Leave some information in the registers and jump to
- IO.SYS at 0070:0000.
-
-NOTE:
-
- This program uses the CHS based INT 13H AH=02 to read the FAT
- root directory and to read the IO.SYS file. If the drive is
- >528MB, this CHS must be a translated CHS (or L-CHS, see my
- BIOS TYPES document). Except for internal computations no
- addresses in LBA form are used, another reason why LBA doesn't
- solve the >528MB problem.
-
-=====
-
-Here is the entire sector in hex and ascii.
-
-OFFSET 0 1 2 3 4 5 6 7 8 9 A B C D E F *0123456789ABCDEF*
-000000 eb3c904d 53444f53 352e3000 02010100 *.<.MSDOS5.0.....*
-000010 02e00040 0bf00900 12000200 00000000 *...@............*
-000020 00000000 0000295a 5418264e 4f204e41 *......)ZT.&NO NA*
-000030 4d452020 20204641 54313220 2020fa33 *ME FAT12 .3*
-000040 c08ed0bc 007c1607 bb780036 c5371e56 *.....|...x.6.7.V*
-000050 1653bf3e 7cb90b00 fcf3a406 1fc645fe *.S.>|.........E.*
-000060 0f8b0e18 7c884df9 894702c7 073e7cfb *....|.M..G...>|.*
-000070 cd137279 33c03906 137c7408 8b0e137c *..ry3.9..|t....|*
-000080 890e207c a0107cf7 26167c03 061c7c13 *.. |..|.&.|...|.*
-000090 161e7c03 060e7c83 d200a350 7c891652 *..|...|....P|..R*
-0000a0 7ca3497c 89164b7c b82000f7 26117c8b *|.I|..K|. ..&.|.*
-0000b0 1e0b7c03 c348f7f3 0106497c 83164b7c *..|..H....I|..K|*
-0000c0 00bb0005 8b16527c a1507ce8 9200721d *......R|.P|...r.*
-0000d0 b001e8ac 0072168b fbb90b00 bee67df3 *.....r........}.*
-0000e0 a6750a8d 7f20b90b 00f3a674 18be9e7d *.u... .....t...}*
-0000f0 e85f0033 c0cd165e 1f8f048f 4402cd19 *._.3...^....D...*
-000100 585858eb e88b471a 48488a1e 0d7c32ff *XXX...G.HH...|2.*
-000110 f7e30306 497c1316 4b7cbb00 07b90300 *....I|..K|......*
-000120 505251e8 3a0072d8 b001e854 00595a58 *PRQ.:.r....T.YZX*
-000130 72bb0501 0083d200 031e0b7c e2e28a2e *r..........|....*
-000140 157c8a16 247c8b1e 497ca14b 7cea0000 *.|..$|..I|.K|...*
-000150 7000ac0a c07429b4 0ebb0700 cd10ebf2 *p....t).........*
-000160 3b16187c 7319f736 187cfec2 88164f7c *;..|s..6.|....O|*
-000170 33d2f736 1a7c8816 257ca34d 7cf8c3f9 *3..6.|..%|.M|...*
-000180 c3b4028b 164d7cb1 06d2e60a 364f7c8b *.....M|.....6O|.*
-000190 ca86e98a 16247c8a 36257ccd 13c30d0a *.....$|.6%|.....*
-0001a0 4e6f6e2d 53797374 656d2064 69736b20 *Non-System disk *
-0001b0 6f722064 69736b20 6572726f 720d0a52 *or disk error..R*
-0001c0 65706c61 63652061 6e642070 72657373 *eplace and press*
-0001d0 20616e79 206b6579 20776865 6e207265 * any key when re*
-0001e0 6164790d 0a00494f 20202020 20205359 *ady...IO SY*
-0001f0 534d5344 4f532020 20535953 000055aa *SMSDOS SYS..U.*
-
-=====
-
-The first 62 bytes of a boot sector are known as the BIOS
-Parameter Block (BPB). Here is the layout of the BPB fields
-and the values they are assigned in this boot sector:
-
- db JMP instruction at 7c00 size 2 = eb3c
- db NOP instruction 7c02 1 90
- db OEMname 7c03 8 'MSDOS5.0'
- dw bytesPerSector 7c0b 2 0200
- db sectPerCluster 7c0d 1 01
- dw reservedSectors 7c0e 2 0001
- db numFAT 7c10 1 02
- dw numRootDirEntries 7c11 2 00e0
- dw numSectors 7c13 2 0b40 (ignore numSectorsHuge)
- db mediaType 7c15 1 f0
- dw numFATsectors 7c16 2 0009
- dw sectorsPerTrack 7c18 2 0012
- dw numHeads 7c1a 2 0002
- dd numHiddenSectors 7c1c 4 00000000
- dd numSectorsHuge 7c20 4 00000000
- db driveNum 7c24 1 00
- db reserved 7c25 1 00
- db signature 7c26 1 29
- dd volumeID 7c27 4 5a541826
- db volumeLabel 7c2b 11 'NO NAME '
- db fileSysType 7c36 8 'FAT12 '
-
-=====
-
-Here is the boot sector...
-
-The first 3 bytes of the BPB are JMP and NOP instructions.
-
-0000:7C00 EB3C JMP START
-0000:7C02 90 NOP
-
-Here is the rest of the BPB.
-
-0000:7C00 ......4d 53444f53 352e3000 02010100 * MSDOS5.0.....*
-0000:7C10 02e00040 0bf00900 12000200 00000000 *...@............*
-0000:7C20 00000000 0000295a 5418264e 4f204e41 *......)ZT.&NO NA*
-0000:7C30 4d452020 20204641 54313220 2020.... *ME FAT12 *
-
-Now pay attention here...
-
- The 11 bytes starting at 0000:7c3e are immediately overlaid by
- information copied from another part of memory. That
- information is the Diskette Parameter Table. This data is
- pointed to by INT 1E. This data is:
-
- 7c3e = Step rate and head unload time.
- 7c3f = Head load time and DMA mode flag.
- 7c40 = Delay for motor turn off.
- 7c41 = Bytes per sector.
- 7c42 = Sectors per track.
- 7c43 = Intersector gap length.
- 7c44 = Data length.
- 7c45 = Intersector gap length during format.
- 7c46 = Format byte value.
- 7c47 = Head settling time.
- 7c48 = Delay until motor at normal speed.
-
- The 11 bytes starting at 0000:7c49 are also overlaid by the
- following data:
-
- 7c49 - 7c4c = diskette sector address (as LBA)
- of the data area.
- 7c4d - 7c4e = cylinder number to read from.
- 7c4f - 7c4f = sector number to read from.
- 7c50 - 7c53 = diskette sector address (as LBA)
- of the root directory.
-
- START: START OF BOOT SECTOR PROGRAM
-
-0000:7C3E FA CLI interrupts off
-0000:7C3F 33C0 XOR AX,AX set AX to zero
-0000:7C41 8ED0 MOV SS,AX SS is now zero
-0000:7C43 BC007C MOV SP,7C00 SP is now 7c00
-0000:7C46 16 PUSH SS also set ES
-0000:7C47 07 POP ES to zero
-
- The INT 1E vector is at 0000:0078.
- Get the address that the vector points to
- into the DS:SI registers.
-
-0000:7C48 BB7800 MOV BX,0078 BX is now 78
-0000:7C4B 36 SS:
-0000:7C4C C537 LDS SI,[BX] DS:SI is now [0:78]
-0000:7C4E 1E PUSH DS save DS:SI --
-0000:7C4F 56 PUSH SI saves param tbl addr
-0000:7C50 16 PUSH SS save SS:BX --
-0000:7C51 53 PUSH BX saves INT 1E address
-
- Move the diskette param table to 0000:7c3e.
-
-0000:7C52 BF3E7C MOV DI,7C3E DI is address of START
-0000:7C55 B90B00 MOV CX,000B count is 11
-0000:7C58 FC CLD clear direction
-0000:7C59 F3 REPZ move the diskette param
-0000:7C5A A4 MOVSB table to 0000:7c3e
-0000:7C5B 06 PUSH ES also set DS
-0000:7C5C 1F POP DS to zero
-
- Alter some of the diskette param table data.
-
-0000:7C5D C645FE0F MOV BYTE PTR [DI-02],0F change head settle time
- at 0000:7c47
-0000:7C61 8B0E187C MOV CX,[7C18] sectors per track
-0000:7C65 884DF9 MOV [DI-07],CL save at 0000:7c42
-
- Change INT 1E so that it points to the
- altered Diskette param table at 0000:7c3e.
-
-0000:7C68 894702 MOV [BX+02],AX change INT 1E segment
-0000:7C6B C7073E7C MOV WORD PTR [BX],7C3E change INT 1E offset
-
- Call INT 13 with AX=0000, disk reset, so
- that the new diskette param table is used.
-
-0000:7C6F FB STI interrupts on
-0000:7C70 CD13 INT 13 do diskette reset call
-0000:7C72 7279 JB TALK jmp if any error
-
- Determine the starting sector address of
- the root directory as an LBA.
-
-0000:7C74 33C0 XOR AX,AX AX is now zero
-0000:7C76 3906137C CMP [7C13],AX number sectors zero?
-0000:7C7A 7408 JZ SMALL_DISK yes
-0000:7C7C 8B0E137C MOV CX,[7C13] number of sectors
-0000:7C80 890E207C MOV [7C20],CX save in huge num sects
-
- SMALL_DISK:
-
-0000:7C84 A0107C MOV AL,[7C10] number of FAT tables
-0000:7C87 F726167C MUL WORD PTR [7C16] number of fat sectors
-0000:7C8B 03061C7C ADD AX,[7C1C] number of hidden sectors
-0000:7C8F 13161E7C ADC DX,[7C1E] number of hidden sectors
-0000:7C93 03060E7C ADD AX,[7C0E] number of reserved sectors
-0000:7C97 83D200 ADC DX,+00 number of reserved sectors
-0000:7C9A A3507C MOV [7C50],AX save start addr
-0000:7C9D 8916527C MOV [7C52],DX of root dir (as LBA)
-0000:7CA1 A3497C MOV [7C49],AX save start addr
-0000:7CA4 89164B7C MOV [7C4B],DX of root dir (as LBA)
-
- Determine sector address of first sector
- in the data area as an LBA.
-
-0000:7CA8 B82000 MOV AX,0020 size of a dir entry (32)
-0000:7CAB F726117C MUL WORD PTR [7C11] number of root dir entries
-0000:7CAF 8B1E0B7C MOV BX,[7C0B] bytes per sector
-0000:7CB3 03C3 ADD AX,BX
-0000:7CB5 48 DEC AX
-0000:7CB6 F7F3 DIV BX
-0000:7CB8 0106497C ADD [7C49],AX add to start addr
-0000:7CBC 83164B7C00 ADC WORD PTR [7C4B],+00 of root dir (as LBA)
-
- Read the first root dir sector into 0000:0500.
-
-0000:7CC1 BB0005 MOV BX,0500 addr to read into
-0000:7CC4 8B16527C MOV DX,[7C52] get start of address
-0000:7CC8 A1507C MOV AX,[7C50] of root dir (as LBA)
-0000:7CCB E89200 CALL CONVERT call conversion routine
-0000:7CCE 721D JB TALK jmp is any error
-0000:7CD0 B001 MOV AL,01 read 1 sector
-0000:7CD2 E8AC00 CALL READ_SECTORS read 1st root dir sector
-0000:7CD5 7216 JB TALK jmp if any error
-0000:7CD7 8BFB MOV DI,BX addr of 1st dir entry
-0000:7CD9 B90B00 MOV CX,000B count is 11
-0000:7CDC BEE67D MOV SI,7DE6 addr of file names
-0000:7CDF F3 REPZ is this "IO.SYS"?
-0000:7CE0 A6 CMPSB
-0000:7CE1 750A JNZ TALK no
-0000:7CE3 8D7F20 LEA DI,[BX+20] addr of next dir entry
-0000:7CE6 B90B00 MOV CX,000B count is 11
-0000:7CE9 F3 REPZ is this "MSDOS.SYS"?
-0000:7CEA A6 CMPSB
-0000:7CEB 7418 JZ FOUND_FILES they are equal
-
- TALK:
-
- Display "Non-System disk..." message,
- wait for user to hit a key, restore
- the INT 1E vector and then
- call INT 19 to start boot processing
- all over again.
-
-0000:7CED BE9E7D MOV SI,7D9E "Non-System disk..."
-0000:7CF0 E85F00 CALL MSG_LOOP display message
-0000:7CF3 33C0 XOR AX,AX INT 16 function
-0000:7CF5 CD16 INT 16 read keyboard
-0000:7CF7 5E POP SI get INT 1E vector's
-0000:7CF8 1F POP DS address
-0000:7CF9 8F04 POP [SI] restore the INT 1E
-0000:7CFB 8F4402 POP [SI+02] vector's data
-0000:7CFE CD19 INT 19 CALL INT 19 to try again
-
- SETUP_TALK:
-
-0000:7D00 58 POP AX pop junk off stack
-0000:7D01 58 POP AX pop junk off stack
-0000:7D02 58 POP AX pop junk off stack
-0000:7D03 EBE8 JMP TALK now talk to the user
-
- FOUND_FILES:
-
- Compute the sector address of the first
- sector of IO.SYS.
-
-0000:7D05 8B471A MOV AX,[BX+1A] get starting cluster num
-0000:7D08 48 DEC AX subtract 1
-0000:7D09 48 DEC AX subtract 1
-0000:7D0A 8A1E0D7C MOV BL,[7C0D] sectors per cluster
-0000:7D0E 32FF XOR BH,BH
-0000:7D10 F7E3 MUL BX multiply
-0000:7D12 0306497C ADD AX,[7C49] add start addr of
-0000:7D16 13164B7C ADC DX,[7C4B] root dir (as LBA)
-
- Read IO.SYS into memory at 0000:0700. IO.SYS
- is 3 sectors long.
-
-0000:7D1A BB0007 MOV BX,0700 address to read into
-0000:7D1D B90300 MOV CX,0003 read 3 sectors
-
- READ_LOOP:
-
- Read the first 3 sectors of IO.SYS
- (IO.SYS is much longer than 3 sectors).
-
-0000:7D20 50 PUSH AX save AX
-0000:7D21 52 PUSH DX save DX
-0000:7D22 51 PUSH CX save CX
-0000:7D23 E83A00 CALL CONVERT call conversion routine
-0000:7D26 72D8 JB SETUP_TALK jmp if error
-0000:7D28 B001 MOV AL,01 read one sector
-0000:7D2A E85400 CALL READ_SECTORS read one sector
-0000:7D2D 59 POP CX restore CX
-0000:7D2E 5A POP DX restore DX
-0000:7D2F 58 POP AX restore AX
-0000:7D30 72BB JB TALK jmp if any INT 13 error
-0000:7D32 050100 ADD AX,0001 add one to the sector addr
-0000:7D35 83D200 ADC DX,+00 add one to the sector addr
-0000:7D38 031E0B7C ADD BX,[7C0B] incr mem addr by sect size
-0000:7D3C E2E2 LOOP READ_LOOP read next sector
-
- Leave information in the AX, BX, CX and DX
- registers for IO.SYS to use. Finally,
- jump to IO.SYS at 0070:0000.
-
-0000:7D3E 8A2E157C MOV CH,[7C15] media type
-0000:7D42 8A16247C MOV DL,[7C24] drive number
-0000:7D46 8B1E497C MOV BX,[7C49] get start addr of
-0000:7D4A A14B7C MOV AX,[7C4B] root dir (as LBA)
-0000:7D4D EA00007000 JMP 0070:0000 JUMP TO 0070:0000
-
- MSG_LOOP:
-
- This routine displays a message using
- INT 10 one character at a time.
- The message address is in DS:SI.
-
-0000:7D52 AC LODSB get message character
-0000:7D53 0AC0 OR AL,AL end of message?
-0000:7D55 7429 JZ RETURN jmp if yes
-0000:7D57 B40E MOV AH,0E display one character
-0000:7D59 BB0700 MOV BX,0007 video attributes
-0000:7D5C CD10 INT 10 display one character
-0000:7D5E EBF2 JMP MSG_LOOP do again
-
- CONVERT:
- This routine
- converts a sector address (an LBA) to
- a CHS address. The LBA is in DX:AX.
-
-0000:7D60 3B16187C CMP DX,[7C18] hi part of LBA > sectPerTrk?
-0000:7D64 7319 JNB SET_CARRY jmp if yes
-0000:7D66 F736187C DIV WORD PTR [7C18] div by sectors per track
-0000:7D6A FEC2 INC DL add 1 to sector number
-0000:7D6C 88164F7C MOV [7C4F],DL save sector number
-0000:7D70 33D2 XOR DX,DX zero DX
-0000:7D72 F7361A7C DIV WORD PTR [7C1A] div number of heads
-0000:7D76 8816257C MOV [7C25],DL save head number
-0000:7D7A A34D7C MOV [7C4D],AX save cylinder number
-0000:7D7D F8 CLC clear carry
-0000:7D7E C3 RET return
-
- SET_CARRY:
-
-0000:7D7F F9 STC set carry
-
- RETURN:
-
-0000:7D80 C3 RET return
-
- READ_SECTORS:
-
- The caller of this routine supplies:
- AL = number of sectors to read
- ES:BX = memory location to read into
- and CHS address to read from in
- memory locations 7c25 and 7C4d-7c4f.
-
-0000:7D81 B402 MOV AH,02 INT 13 read sectors
-0000:7D83 8B164D7C MOV DX,[7C4D] get cylinder number
-0000:7D87 B106 MOV CL,06 shift count
-0000:7D89 D2E6 SHL DH,CL shift upper cyl left 6 bits
-0000:7D8B 0A364F7C OR DH,[7C4F] or in sector number
-0000:7D8F 8BCA MOV CX,DX move to CX
-0000:7D91 86E9 XCHG CH,CL CH=cyl lo, CL=cyl hi + sect
-0000:7D93 8A16247C MOV DL,[7C24] drive number
-0000:7D97 8A36257C MOV DH,[7C25] head number
-0000:7D9B CD13 INT 13 read sectors
-0000:7D9D C3 RET return
-
-Data not used.
-
-0000:7D90 ca86e98a 16247c8a 36257ccd 13c3.... *.....$|.6%|... *
-
-Messages here.
-
-0000:7D90 ........ ........ ........ ....0d0a * ..*
-0000:7Da0 4e6f6e2d 53797374 656d2064 69736b20 *Non-System disk *
-0000:7Db0 6f722064 69736b20 6572726f 720d0a52 *or disk error..R*
-0000:7Dc0 65706c61 63652061 6e642070 72657373 *eplace and press*
-0000:7Dd0 20616e79 206b6579 20776865 6e207265 * any key when re*
-0000:7De0 6164790d 0a00.... ........ ........ *ady... *
-
-MS DOS hidden file names (first two root directory entries).
-
-0000:7De0 ........ ....494f 20202020 20205359 * IO SY*
-0000:7Df0 534d5344 4f532020 20535953 000055aa *SMSDOS SYS..U.*
-
-The last two bytes contain a 55AAH signature.
-
-0000:7Df0 ........ ........ ........ ....55aa * U.*
-
-/end/
---
-\\===============\\=======================\\
- \\ Hale Landis \\ 303-548-0567 \\
- // Niwot, CO USA // landis@sugs.tware.com //
-//===============//=======================//