Additions:
The Extended Boot structure is as follows:
struct Extended_Boot {
unsigned char Boot_jmp[3];
unsigned char Boot_OEM[8];
struct Extended_BPB Boot_BPB;
unsigned char Boot_DriveNumber;
unsigned char Boot_CurrentHead;
unsigned char Boot_Sig = 41; /* Indicate Extended Boot */
unsigned char Boot_Serial[4];
unsigned char Boot_Vol_Label[11];
unsigned char Boot_System_ID[8];
};
Where
Boot_Serial
is the 32-bit binary volume serial number for the media. Boot_System_ID
is an 8-byte name written when the media is formatted. It is used by FSDs to identify their media but need not be the same as the name the FSD exports via FS_NAME and is NOT the name users employ to refer to the FSD. (They may, however, be the same names). Boot_Vol_Label
is the 11-byte ASCII label of the disk/diskette volume. FAT file systems must ALWAYS use the volume label in the root directory for compatibility reasons. An FSD may use the one in the boot sector.
The extended BPB structure is a super-set of the conventional BPB structure, as follows:
struct Extended_BPB { unsigned short BytePerSector;
unsigned char SectorPerCluster;
unsigned short ReservedSectors;
unsigned char NumberOfFats;
unsigned short RootEntries;
unsigned short TotalSectors;
unsigned char MediaDescriptor;
unsigned short SectorsPerFat;
unsigned short SectorsPerTrack;
unsigned short Heads;
unsigned long HiddenSectors;
unsigned long Ext_TotalSectors;
};
Additions:
**[[BootableJFSPartition Bootable JFS Partition Bootsector]]**
**[[BootOs2Ldr os2ldr Entry Values]]**
Deletions:
**[[BootableJFSPartition Bootable JFS BIOS parameter block]]**
Additions:
Entry is made at 0x7C00 followed by a jump to _entry. After the stack is set up INT 12 is called to find the top of low memory (640K). Next, 54h (84 dec) is subtracted, and AND with 0xFFF0 then shifted left (6) to get the segment for the next module load (micro-FSD). For the Bochs example image the result is 0x8800. A load of BPB+31 sectors is loaded at the calculated segment and offset 0x0000 and the temp storage area is moved to this area (7C3E - 7C45). This load contains the instructions to continue the system load and the micro-FSD.
Deletions:
Entry is made at 0x7C00 followed by a jump to _entry. After the stack is set up INT 12 is called to find the top of low memory (640K). Next, 54h (84 dec) is subtracted, and AND with FFF00 then shifted left (6) to get the segment for the next module load (micro-FSD). For the Bochs example image the result is 0x8800. A load of BPB+31 sectors is loaded at the calculated segment and offset 0x0000 and the temp storage area is moved to this area (7C3E - 7C45). This load contains the instructions to continue the system load and the micro-FSD.
Additions:
**[[BootableJFSPartition Bootable JFS BIOS parameter block]]**
<<===Partition BPB Disassembled===
Deletions:
**[[BootableJFSPartition Bootable JFS Partition Bootsector]]**
<<===Partition Bootsector Disassembled===
No differences.
No differences.
Additions:
During the drive read and error will result in DAP information being displayed and a SYS02027 message, the system will then hang. The error sequence is from the readdrive procedure which is also used executing the micro-FSD loading code.
Deletions:
During the drive read and error will result in DAP information being displayed and a SYS02027 message, the system will then hang.
Additions:
During the drive read and error will result in DAP information being displayed and a SYS02027 message, the system will then hang.
Additions:
Entry is made at 0x7C00 followed by a jump to _entry. After the stack is set up INT 12 is called to find the top of low memory (640K). Next, 54h (84 dec) is subtracted, and AND with FFF00 then shifted left (6) to get the segment for the next module load (micro-FSD). For the Bochs example image the result is 0x8800. A load of BPB+31 sectors is loaded at the calculated segment and offset 0x0000 and the temp storage area is moved to this area (7C3E - 7C45). This load contains the instructions to continue the system load and the micro-FSD.
A check of the calculated segment and offset 0x0200 is made for 0x1961 signature. If the signature is found and return from function is executed which will result in execution continuing at the calculated load segment and offset 0x199C (Bochs image 8800:199C or 0x8999C). If the signature is now found, a "Invalid code for JFS" error and some address information will be displayed and the system will hang.
@@//**NOTE:** Getting a "Invalid code for JFS" error could be cleared up with a sysinstx.com on the boot drive or by using DFSee.//@@
On entry a register dump and these might not be set values (based on Bochs image):
eax: 0x00000000 ecx: 0x00007fbe -- MBR info location edx: 0x00000080 -- Drive number
ebx: 0x00007fbe -- MBR info location esi: 0xffff7fbe -- MBR info location
edi: 0x00080005 eip: 0x00007c00
cs:s=0x0000 ds:s=0x0000 ss:s=0x0030 es:s=0x0000
mov eax, es:1Ch ; load eax 0x1C (Bochs drive 0x0000003F) hidden sectors
mov ds:3Eh, eax ; Bochs image move 0x7C3E to 0x8803E
mov ds:42h, eax ; Bochs image move 0x7C42 to 0x88042
mov ds:24h, al ; Bochs image move 0x7C24 to 0x88024
Deletions:
Entry is made at 0x7C00 followed by a jump to _entry. After the stack is set up INT 12 is called to find the top of low memory (640K). Next, 54h (84 dec) is subtracted, and AND with FFF00 then shifted left (6) to get the segment for the next module load.
On entry a register dump and these might not be set values:
eax: 0x00000000
ecx: 0x00007fbe -- MBR info location
edx: 0x00000080 -- Drive number
ebx: 0x00007fbe -- MBR info location
esp: 0x00000100
ebp: 0x00000000
esi: 0xffff7fbe -- MBR info location
edi: 0x00080005
eip: 0x00007c00
IOPL=0 id vip vif ac vm rf nt of df IF tf sf ZF af PF cf
cs:s=0x0000
ds:s=0x0000
ss:s=0x0030
es:s=0x0000
gs:s=0x0000
mov eax, es:1Ch ; load eax 0x1C (Bochs drive 0x3F)
mov ds:3Eh, eax ; move 0x7C3E to 0x8803E
mov ds:42h, eax ; move 0x7C42 to 0x88042
mov ds:24h, al ; move 0x7C24 to 0x88024
Additions:
BIOS parameter block (BPB) is a variant record embedded within the boot block (block zero) of a disc volume. In the example below the BPB is located from 0x7C0B to 0x7C36. The references I used, [[http://homepages.tesco.net/J.deBoynePollard/FGA/bios-parameter-block.html bios-parameter-block]] and [[http://www.dfsee.com/ DFSee]].
Entry is made at 0x7C00 followed by a jump to _entry. After the stack is set up INT 12 is called to find the top of low memory (640K). Next, 54h (84 dec) is subtracted, and AND with FFF00 then shifted left (6) to get the segment for the next module load.
Deletions:
BIOS parameter block (BPB) is a variant record embedded within the boot block (block zero) of a disc volume. In the example below the BPB is located from 0x7C0B to 0x7C36. The references I used, [[http://homepages.tesco.net/J.deBoynePollard/FGA/bios-parameter-block.html bios-parameter-block]] and [[http://www.dfsee.com/ DFSee]] Entry is made at 0x7C00 followed by a jump to _entry. After the stack is set up INT 12 is called to find the top of low memory (640K). Next, 54h (84 dec) is subtracted, and AND then shifted left (6) to get the segment for the next module load.
Additions:
7C4E db 0, 0, 0, 0, 0, 0, 0, 0
Deletions:
7C4E db 0, 0, 0, 0, 0, 0, 0, 0 ; absolute number of the start of the sectors
Additions:
7C4E db 0, 0, 0, 0, 0, 0, 0, 0 ; absolute number of the start of the sectors
Deletions:
7C4E db 0, 0, 0, 0, 0, 0, 0, 0
Additions:
7C24 db 80 ; physical drive number
7C25 db 80 ; Boot drive letter
7C26 db 29 ; Ext-BPB signature
7C48 db 20 ; number of sectors to be read
7C4A db 0, 0, 0, 0 ;segment:offset pointer to the memory buffer
Deletions:
7C24 db 80 ; physical drive number
7C25 db 80 ; Boot drive letter
7C26 db 29 ; Ext-BPB signature
7C48 db 20
7C4A db 0, 0, 0, 0
Additions:
7C18 db 3F, 0 ; BPB formatted geo: Sectors - 63
7C1A db 20, 0 ; BPB formatted geo: Heads - 32
7C1C db 3F, 0, 0 ,0 ; 0x0000003F hidden sectors
Deletions:
7C18 db 3F, 0 ; BPB formatted geo: Sectors - 63
7C1A db 20, 0 ; BPB formatted geo: Heads - 32
7C1C db 3F, 0, 0 ,0 ; 0x0000003F hidden sectors
Additions:
; Used as temp storage
7C47 db 0 ; unused, should be zero
7C49 db 0 ; unused, should be zero
Deletions:
7C47 db 0 ; unused, should be zero
7C49 db 0
Additions:
BIOS parameter block (BPB) is a variant record embedded within the boot block (block zero) of a disc volume. In the example below the BPB is located from 0x7C0B to 0x7C36. The references I used, [[http://homepages.tesco.net/J.deBoynePollard/FGA/bios-parameter-block.html bios-parameter-block]] and [[http://www.dfsee.com/ DFSee]] Entry is made at 0x7C00 followed by a jump to _entry. After the stack is set up INT 12 is called to find the top of low memory (640K). Next, 54h (84 dec) is subtracted, and AND then shifted left (6) to get the segment for the next module load.
Deletions:
BIOS parameter block (BPB) http://homepages.tesco.net/J.deBoynePollard/FGA/bios-parameter-block.html
Entry is made at 0x7C00 followed by a jump to _entry. After the stack is set up INT 12 is called to find the top of low memory (640K). Next, 54h (84 dec) is subtracted, and AND then shifted left (6) to get the segment for the next module load.
Additions:
BIOS parameter block (BPB) http://homepages.tesco.net/J.deBoynePollard/FGA/bios-parameter-block.html
; BIOS parameter block (BPB)
7C0B db 0, 2 ; 0x0200 size of sector in bytes
7C18 db 3F, 0 ; BPB formatted geo: Sectors - 63
7C1A db 20, 0 ; BPB formatted geo: Heads - 32
7C2B db bochs, 0, 0, 0, 0, 0, 0 ; Partition label (11)
7C36 db "JFS " ; Filesystem type (8)
Deletions:
BIOS parameter block (BPB) http://homepages.tesco.net/J.deBoynePollard/FGA/bios-parameter-block.html
7C0B db 0, 2 ; 0x0200 Bytes per sector
7C18 db 3F ; BPB formatted geo: Sectors - 63
7C19 db 0
7C1A db 20 ; BPB formatted geo: Heads - 32
7C1B db 0
7C2B db bochs ; Partition label
7C30 db 0
7C31 db 0
7C32 db 0
7C33 db 0
7C34 db 0
7C35 db 0
7C36 db "JFS "
Additions:
BIOS parameter block (BPB) http://homepages.tesco.net/J.deBoynePollard/FGA/bios-parameter-block.html
Deletions:
BIOS parameter block (BPB)
Additions:
BIOS parameter block (BPB)