Author: tkreuzer
Date: Sun Oct  2 15:33:39 2011
New Revision: 53928

URL: http://svn.reactos.org/svn/reactos?rev=53928&view=rev
Log:
[EXT2]
Convert comments to preprocessor format

Modified:
    trunk/reactos/boot/freeldr/bootsect/ext2.S

Modified: trunk/reactos/boot/freeldr/bootsect/ext2.S
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/bootsect/ext2.S?rev=53928&r1=53927&r2=53928&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/bootsect/ext2.S [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/bootsect/ext2.S [iso-8859-1] Sun Oct  2 15:33:39 
2011
@@ -1,11 +1,11 @@
-; EXT2.ASM
-; EXT2 Boot Sector
-; Copyright (c) 2002, 2003 Brian Palmer
-
-; [bp-0x04] Here we will store the number of sectors per track
-; [bp-0x08] Here we will store the number of heads
-; [bp-0x0c] Here we will store the size of the disk as the BIOS reports in CHS 
form
-; [bp-0x10] Here we will store the number of LBA sectors read
+// EXT2.ASM
+// EXT2 Boot Sector
+// Copyright (c) 2002, 2003 Brian Palmer
+
+// [bp-0x04] Here we will store the number of sectors per track
+// [bp-0x08] Here we will store the number of heads
+// [bp-0x0c] Here we will store the size of the disk as the BIOS reports in 
CHS form
+// [bp-0x10] Here we will store the number of LBA sectors read
 
 SECTORS_PER_TRACK              equ     0x04
 NUMBER_OF_HEADS                        equ     0x08
@@ -29,20 +29,20 @@
         nop
 
 BootDrive                              db 0x80
-;BootPartition                 db 0                                    ; Moved 
to end of boot sector to have a standard format across all boot sectors
-;SectorsPerTrack               db 63                                   ; Moved 
to [bp-SECTORS_PER_TRACK]
-;NumberOfHeads                 dw 16                                   ; Moved 
to [bp-NUMBER_OF_HEADS]
-;BiosCHSDriveSize              dd (1024 * 1024 * 63)   ; Moved to 
[bp-BIOS_CHS_DRIVE_SIZE]
-;LBASectorsRead                        dd 0                                    
; Moved to [bp-LBA_SECTORS_READ]
-
-Ext2VolumeStartSector  dd 263088                               ; Start sector 
of the ext2 volume
-Ext2BlockSize                  dd 2                                    ; Block 
size in sectors
-Ext2BlockSizeInBytes   dd 1024                                 ; Block size in 
bytes
-Ext2PointersPerBlock   dd 256                                  ; Number of 
block pointers that can be contained in one block
-Ext2GroupDescPerBlock  dd 32                                   ; Number of 
group descriptors per block
-Ext2FirstDataBlock             dd 1                                    ; First 
data block (1 for 1024-byte blocks, 0 for bigger sizes)
-Ext2InodesPerGroup             dd 2048                                 ; 
Number of inodes per group
-Ext2InodesPerBlock             dd 8                                    ; 
Number of inodes per block
+//BootPartition                        db 0                                    
// Moved to end of boot sector to have a standard format across all boot sectors
+//SectorsPerTrack              db 63                                   // 
Moved to [bp-SECTORS_PER_TRACK]
+//NumberOfHeads                        dw 16                                   
// Moved to [bp-NUMBER_OF_HEADS]
+//BiosCHSDriveSize             dd (1024 * 1024 * 63)   // Moved to 
[bp-BIOS_CHS_DRIVE_SIZE]
+//LBASectorsRead                       dd 0                                    
// Moved to [bp-LBA_SECTORS_READ]
+
+Ext2VolumeStartSector  dd 263088                               // Start sector 
of the ext2 volume
+Ext2BlockSize                  dd 2                                    // 
Block size in sectors
+Ext2BlockSizeInBytes   dd 1024                                 // Block size 
in bytes
+Ext2PointersPerBlock   dd 256                                  // Number of 
block pointers that can be contained in one block
+Ext2GroupDescPerBlock  dd 32                                   // Number of 
group descriptors per block
+Ext2FirstDataBlock             dd 1                                    // 
First data block (1 for 1024-byte blocks, 0 for bigger sizes)
+Ext2InodesPerGroup             dd 2048                                 // 
Number of inodes per group
+Ext2InodesPerBlock             dd 8                                    // 
Number of inodes per block
 
 Ext2ReadEntireFileLoadSegment:
        dw      0
@@ -54,83 +54,83 @@
        dd      0
 
 main:
-        xor ax,ax               ; Setup segment registers
-        mov ds,ax               ; Make DS correct
-        mov es,ax               ; Make ES correct
-        mov ss,ax                              ; Make SS correct
+        xor ax,ax               // Setup segment registers
+        mov ds,ax               // Make DS correct
+        mov es,ax               // Make ES correct
+        mov ss,ax                              // Make SS correct
                mov bp,7c00h
-        mov sp,7b00h            ; Setup a stack
-
-
-               cmp BYTE [BYTE bp+BootDrive],BYTE 0xff  ; If they have 
specified a boot drive then use it
+        mov sp,7b00h            // Setup a stack
+
+
+               cmp BYTE [BYTE bp+BootDrive],BYTE 0xff  // If they have 
specified a boot drive then use it
                jne GetDriveParameters
 
-        mov [BYTE bp+BootDrive],dl                             ; Save the boot 
drive
+        mov [BYTE bp+BootDrive],dl                             // Save the 
boot drive
 
 
 GetDriveParameters:
                mov  ah,08h
-               mov  dl,[BYTE bp+BootDrive]                                     
; Get boot drive in dl
-               int  13h                                                        
                ; Request drive parameters from the bios
-               jnc  CalcDriveSize                                              
        ; If the call succeeded then calculate the drive size
-
-               ; If we get here then the call to the BIOS failed
-               ; so just set CHS equal to the maximum addressable
-               ; size
+               mov  dl,[BYTE bp+BootDrive]                                     
// Get boot drive in dl
+               int  13h                                                        
                // Request drive parameters from the bios
+               jnc  CalcDriveSize                                              
        // If the call succeeded then calculate the drive size
+
+               // If we get here then the call to the BIOS failed
+               // so just set CHS equal to the maximum addressable
+               // size
                mov  cx,0ffffh
                mov  dh,cl
 
 CalcDriveSize:
-               ; Now that we have the drive geometry
-               ; lets calculate the drive size
-               mov  bl,ch                                                      
        ; Put the low 8-bits of the cylinder count into BL
-               mov  bh,cl                                                      
        ; Put the high 2-bits in BH
-               shr  bh,6                                                       
        ; Shift them into position, now BX contains the cylinder count
-               and  cl,3fh                                                     
        ; Mask off cylinder bits from sector count
-               ; CL now contains sectors per track and DH contains head count
-               movzx eax,dh                                                    
; Move the heads into EAX
-               movzx ebx,bx                                                    
; Move the cylinders into EBX
-               movzx ecx,cl                                                    
; Move the sectors per track into ECX
-               inc   eax                                                       
        ; Make it one based because the bios returns it zero based
-               mov   [BYTE bp-NUMBER_OF_HEADS],eax             ; Save number 
of heads
-               mov   [BYTE bp-SECTORS_PER_TRACK],ecx   ; Save number of 
sectors per track
-               inc   ebx                                                       
        ; Make the cylinder count one based also
-               mul   ecx                                                       
        ; Multiply heads with the sectors per track, result in edx:eax
-               mul   ebx                                                       
        ; Multiply the cylinders with (heads * sectors) [stored in edx:eax 
already]
-
-               ; We now have the total number of sectors as reported
-               ; by the bios in eax, so store it in our variable
+               // Now that we have the drive geometry
+               // lets calculate the drive size
+               mov  bl,ch                                                      
        // Put the low 8-bits of the cylinder count into BL
+               mov  bh,cl                                                      
        // Put the high 2-bits in BH
+               shr  bh,6                                                       
        // Shift them into position, now BX contains the cylinder count
+               and  cl,3fh                                                     
        // Mask off cylinder bits from sector count
+               // CL now contains sectors per track and DH contains head count
+               movzx eax,dh                                                    
// Move the heads into EAX
+               movzx ebx,bx                                                    
// Move the cylinders into EBX
+               movzx ecx,cl                                                    
// Move the sectors per track into ECX
+               inc   eax                                                       
        // Make it one based because the bios returns it zero based
+               mov   [BYTE bp-NUMBER_OF_HEADS],eax             // Save number 
of heads
+               mov   [BYTE bp-SECTORS_PER_TRACK],ecx   // Save number of 
sectors per track
+               inc   ebx                                                       
        // Make the cylinder count one based also
+               mul   ecx                                                       
        // Multiply heads with the sectors per track, result in edx:eax
+               mul   ebx                                                       
        // Multiply the cylinders with (heads * sectors) [stored in edx:eax 
already]
+
+               // We now have the total number of sectors as reported
+               // by the bios in eax, so store it in our variable
                mov   [BYTE bp-BIOS_CHS_DRIVE_SIZE],eax
 
 
 LoadExtraBootCode:
-               ; First we have to load our extra boot code at
-               ; sector 1 into memory at [0000:7e00h]
-               ;mov  eax,01h
+               // First we have to load our extra boot code at
+               // sector 1 into memory at [0000:7e00h]
+               //mov  eax,01h
                xor  eax,eax
-               inc  eax                                                        
        ; Read logical sector 1, EAX now = 1
-               mov  cx,1                                                       
        ; Read one sector
-               mov  bx,7e00h                                                   
; Read sector to [0000:7e00h]
+               inc  eax                                                        
        // Read logical sector 1, EAX now = 1
+               mov  cx,1                                                       
        // Read one sector
+               mov  bx,7e00h                                                   
// Read sector to [0000:7e00h]
                call ReadSectors
 
                jmp  LoadRootDirectory
 
 
 
-; Reads ext2 group descriptor into [7000:8000]
-; We read it to this arbitrary location so
-; it will not cross a 64k boundary
-; EAX has group descriptor number to read
+// Reads ext2 group descriptor into [7000:8000]
+// We read it to this arbitrary location so
+// it will not cross a 64k boundary
+// EAX has group descriptor number to read
 Ext2ReadGroupDesc:
-               shl   eax,5                                                     
                        ; Group = (Group * sizeof(GROUP_DESCRIPTOR) /* 32 */)
+               shl   eax,5                                                     
                        // Group = (Group * sizeof(GROUP_DESCRIPTOR) /* 32 */)
                xor   edx,edx
-               div   DWORD [BYTE bp+Ext2GroupDescPerBlock]             ; Group 
= (Group / Ext2GroupDescPerBlock)
-               add   eax,DWORD [BYTE bp+Ext2FirstDataBlock]    ; Group = Group 
+ Ext2FirstDataBlock + 1
-               inc   eax                                                       
                        ; EAX now has the group descriptor block number
-                                                                               
                                ; EDX now has the group descriptor offset in 
the block
-
-               ; Adjust the read offset so that the
-               ; group descriptor is read to 7000:8000
+               div   DWORD [BYTE bp+Ext2GroupDescPerBlock]             // 
Group = (Group / Ext2GroupDescPerBlock)
+               add   eax,DWORD [BYTE bp+Ext2FirstDataBlock]    // Group = 
Group + Ext2FirstDataBlock + 1
+               inc   eax                                                       
                        // EAX now has the group descriptor block number
+                                                                               
                                // EDX now has the group descriptor offset in 
the block
+
+               // Adjust the read offset so that the
+               // group descriptor is read to 7000:8000
                mov   ebx,78000h
                sub   ebx,edx
                shr   ebx,4
@@ -138,51 +138,51 @@
                xor   bx,bx
 
 
-               ; Everything is now setup to call Ext2ReadBlock
-               ; Instead of using the call instruction we will
-               ; just put Ext2ReadBlock right after this routine
-
-; Reads ext2 block into [ES:BX]
-; EAX has logical block number to read
+               // Everything is now setup to call Ext2ReadBlock
+               // Instead of using the call instruction we will
+               // just put Ext2ReadBlock right after this routine
+
+// Reads ext2 block into [ES:BX]
+// EAX has logical block number to read
 Ext2ReadBlock:
                mov   ecx,DWORD [BYTE bp+Ext2BlockSize]
                mul   ecx
                jmp   ReadSectors
 
-; Reads ext2 inode into [6000:8000]
-; We read it to this arbitrary location so
-; it will not cross a 64k boundary
-; EAX has inode number to read
+// Reads ext2 inode into [6000:8000]
+// We read it to this arbitrary location so
+// it will not cross a 64k boundary
+// EAX has inode number to read
 Ext2ReadInode:
-               dec   eax                                                       
                        ; Inode = Inode - 1
+               dec   eax                                                       
                        // Inode = Inode - 1
                xor   edx,edx
-               div   DWORD [BYTE bp+Ext2InodesPerGroup]                ; Inode 
= (Inode / Ext2InodesPerGroup)
-               mov   ebx,eax                                                   
                ; EBX now has the inode group number
+               div   DWORD [BYTE bp+Ext2InodesPerGroup]                // 
Inode = (Inode / Ext2InodesPerGroup)
+               mov   ebx,eax                                                   
                // EBX now has the inode group number
                mov   eax,edx
                xor   edx,edx
-               div   DWORD [BYTE bp+Ext2InodesPerBlock]                ; Inode 
= (Inode / Ext2InodesPerBlock)
-               shl   edx,7                                                     
                        ; FIXME: InodeOffset *= 128 (make the array index a 
byte offset)
-                                                                               
                                ; EAX now has the inode offset block number 
from inode table
-                                                                               
                                ; EDX now has the inode offset in the block
-
-               ; Save the inode values and put the group
-               ; descriptor number in EAX and read it in
+               div   DWORD [BYTE bp+Ext2InodesPerBlock]                // 
Inode = (Inode / Ext2InodesPerBlock)
+               shl   edx,7                                                     
                        // FIXME: InodeOffset *= 128 (make the array index a 
byte offset)
+                                                                               
                                // EAX now has the inode offset block number 
from inode table
+                                                                               
                                // EDX now has the inode offset in the block
+
+               // Save the inode values and put the group
+               // descriptor number in EAX and read it in
                push  edx
                push  eax
                mov   eax,ebx
                call  Ext2ReadGroupDesc
 
-               ; Group descriptor has been read, now
-               ; grab the inode table block number from it
+               // Group descriptor has been read, now
+               // grab the inode table block number from it
                push  WORD 7000h
                pop   es
                mov   di,8008h
-               pop   eax                                                       
                        ; Restore inode offset block number from stack
-               add   eax,DWORD [es:di]                                         
        ; Add the inode table start block
-
-               ; Adjust the read offset so that the
-               ; inode we want is read to 6000:8000
-               pop   edx                                                       
                        ; Restore inode offset in the block from stack
+               pop   eax                                                       
                        // Restore inode offset block number from stack
+               add   eax,DWORD [es:di]                                         
        // Add the inode table start block
+
+               // Adjust the read offset so that the
+               // inode we want is read to 6000:8000
+               pop   edx                                                       
                        // Restore inode offset in the block from stack
                mov   ebx,68000h
                sub   ebx,edx
                shr   ebx,4
@@ -193,131 +193,131 @@
                ret
 
 
-; Reads logical sectors into [ES:BX]
-; EAX has logical sector number to read
-; CX has number of sectors to read
+// Reads logical sectors into [ES:BX]
+// EAX has logical sector number to read
+// CX has number of sectors to read
 ReadSectors:
-        add  eax,DWORD [BYTE bp+Ext2VolumeStartSector] ; Add the start of the 
volume
-               cmp  eax,DWORD [BYTE bp-BIOS_CHS_DRIVE_SIZE]    ; Check if they 
are reading a sector outside CHS range
-               jae  ReadSectorsLBA                                             
; Yes - go to the LBA routine
-                                                                               
                ; If at all possible we want to use LBA routines because
-                                                                               
                ; They are optimized to read more than 1 sector per read
-
-               pushad                                                          
        ; Save logical sector number & sector count
-
-CheckInt13hExtensions:                                                 ; Now 
check if this computer supports extended reads
-               mov  ah,0x41                                                    
; AH = 41h
-               mov  bx,0x55aa                                                  
; BX = 55AAh
-               mov  dl,[BYTE bp+BootDrive]                             ; DL = 
drive (80h-FFh)
-               int  13h                                                        
        ; IBM/MS INT 13 Extensions - INSTALLATION CHECK
-               jc   ReadSectorsCHS                                             
; CF set on error (extensions not supported)
-               cmp  bx,0xaa55                                                  
; BX = AA55h if installed
+        add  eax,DWORD [BYTE bp+Ext2VolumeStartSector] // Add the start of the 
volume
+               cmp  eax,DWORD [BYTE bp-BIOS_CHS_DRIVE_SIZE]    // Check if 
they are reading a sector outside CHS range
+               jae  ReadSectorsLBA                                             
// Yes - go to the LBA routine
+                                                                               
                // If at all possible we want to use LBA routines because
+                                                                               
                // They are optimized to read more than 1 sector per read
+
+               pushad                                                          
        // Save logical sector number & sector count
+
+CheckInt13hExtensions:                                                 // Now 
check if this computer supports extended reads
+               mov  ah,0x41                                                    
// AH = 41h
+               mov  bx,0x55aa                                                  
// BX = 55AAh
+               mov  dl,[BYTE bp+BootDrive]                             // DL = 
drive (80h-FFh)
+               int  13h                                                        
        // IBM/MS INT 13 Extensions - INSTALLATION CHECK
+               jc   ReadSectorsCHS                                             
// CF set on error (extensions not supported)
+               cmp  bx,0xaa55                                                  
// BX = AA55h if installed
                jne  ReadSectorsCHS
-               test cl,1                                                       
        ; CX = API subset support bitmap
-               jz   ReadSectorsCHS                                             
; Bit 0, extended disk access functions (AH=42h-44h,47h,48h) supported
-
-               popad                                                           
        ; Restore sector count & logical sector number
+               test cl,1                                                       
        // CX = API subset support bitmap
+               jz   ReadSectorsCHS                                             
// Bit 0, extended disk access functions (AH=42h-44h,47h,48h) supported
+
+               popad                                                           
        // Restore sector count & logical sector number
 
 ReadSectorsLBA:
-               pushad                                                          
        ; Save logical sector number & sector count
-
-               cmp  cx,byte 64                                                 
; Since the LBA calls only support 0x7F sectors at a time we will limit 
ourselves to 64
-               jbe  ReadSectorsSetupDiskAddressPacket  ; If we are reading 
less than 65 sectors then just do the read
-               mov  cx,64                                                      
        ; Otherwise read only 64 sectors on this loop iteration
+               pushad                                                          
        // Save logical sector number & sector count
+
+               cmp  cx,byte 64                                                 
// Since the LBA calls only support 0x7F sectors at a time we will limit 
ourselves to 64
+               jbe  ReadSectorsSetupDiskAddressPacket  // If we are reading 
less than 65 sectors then just do the read
+               mov  cx,64                                                      
        // Otherwise read only 64 sectors on this loop iteration
 
 ReadSectorsSetupDiskAddressPacket:
                mov  [BYTE bp-LBA_SECTORS_READ],cx
                mov  WORD [BYTE bp-LBA_SECTORS_READ+2],0
                o32 push byte 0
-               push eax                                                        
        ; Put 64-bit logical block address on stack
-               push es                                                         
        ; Put transfer segment on stack
-               push bx                                                         
        ; Put transfer offset on stack
-               push cx                                                         
        ; Set transfer count
-               push byte 0x10                                                  
; Set size of packet to 10h
-               mov  si,sp                                                      
        ; Setup disk address packet on stack
-
-
-        mov  dl,[BYTE bp+BootDrive]                            ; Drive number
-               mov  ah,42h                                                     
        ; Int 13h, AH = 42h - Extended Read
-               int  13h                                                        
        ; Call BIOS
-               jc   PrintDiskError                                             
; If the read failed then abort
-
-               add  sp,byte 0x10                                               
; Remove disk address packet from stack
-
-               popad                                                           
        ; Restore sector count & logical sector number
+               push eax                                                        
        // Put 64-bit logical block address on stack
+               push es                                                         
        // Put transfer segment on stack
+               push bx                                                         
        // Put transfer offset on stack
+               push cx                                                         
        // Set transfer count
+               push byte 0x10                                                  
// Set size of packet to 10h
+               mov  si,sp                                                      
        // Setup disk address packet on stack
+
+
+        mov  dl,[BYTE bp+BootDrive]                            // Drive number
+               mov  ah,42h                                                     
        // Int 13h, AH = 42h - Extended Read
+               int  13h                                                        
        // Call BIOS
+               jc   PrintDiskError                                             
// If the read failed then abort
+
+               add  sp,byte 0x10                                               
// Remove disk address packet from stack
+
+               popad                                                           
        // Restore sector count & logical sector number
 
                push bx
                mov  ebx,DWORD [BYTE bp-LBA_SECTORS_READ]
-        add  eax,ebx                                                   ; 
Increment sector to read
+        add  eax,ebx                                                   // 
Increment sector to read
                shl  ebx,5
         mov  dx,es
-        add  dx,bx                                                             
; Setup read buffer for next sector
+        add  dx,bx                                                             
// Setup read buffer for next sector
         mov  es,dx
                pop  bx
 
                sub  cx,[BYTE bp-LBA_SECTORS_READ]
-        jnz  ReadSectorsLBA                                            ; Read 
next sector
+        jnz  ReadSectorsLBA                                            // Read 
next sector
 
         ret
 
 
-; Reads logical sectors into [ES:BX]
-; EAX has logical sector number to read
-; CX has number of sectors to read
+// Reads logical sectors into [ES:BX]
+// EAX has logical sector number to read
+// CX has number of sectors to read
 ReadSectorsCHS:
-               popad                                                           
                ; Get logical sector number & sector count off stack
+               popad                                                           
                // Get logical sector number & sector count off stack
 
 ReadSectorsCHSLoop:
         pushad
         xor   edx,edx
                mov   ecx,DWORD [BYTE bp-SECTORS_PER_TRACK]
-               div   ecx                                                       
                ; Divide logical by SectorsPerTrack
-        inc   dl                                                               
        ; Sectors numbering starts at 1 not 0
-               mov   cl,dl                                                     
                ; Sector in CL
+               div   ecx                                                       
                // Divide logical by SectorsPerTrack
+        inc   dl                                                               
        // Sectors numbering starts at 1 not 0
+               mov   cl,dl                                                     
                // Sector in CL
                mov   edx,eax
                shr   edx,16
-        div   WORD [BYTE bp-NUMBER_OF_HEADS]           ; Divide logical by 
number of heads
-        mov   dh,dl                                                            
        ; Head in DH
-        mov   dl,[BYTE bp+BootDrive]                           ; Drive number 
in DL
-        mov   ch,al                                                            
        ; Cylinder in CX
-        ror   ah,2                                                             
        ; Low 8 bits of cylinder in CH, high 2 bits
-                                                                               
        ;  in CL shifted to bits 6 & 7
-        or    cl,ah                                                            
        ; Or with sector number
+        div   WORD [BYTE bp-NUMBER_OF_HEADS]           // Divide logical by 
number of heads
+        mov   dh,dl                                                            
        // Head in DH
+        mov   dl,[BYTE bp+BootDrive]                           // Drive number 
in DL
+        mov   ch,al                                                            
        // Cylinder in CX
+        ror   ah,2                                                             
        // Low 8 bits of cylinder in CH, high 2 bits
+                                                                               
        //  in CL shifted to bits 6 & 7
+        or    cl,ah                                                            
        // Or with sector number
         mov   ax,0201h
-        int   13h    ; DISK - READ SECTORS INTO MEMORY
-                     ; AL = number of sectors to read, CH = track, CL = sector
-                     ; DH = head, DL    = drive, ES:BX -> buffer to fill
-                     ; Return: CF set on error, AH =    status (see AH=01h), 
AL    = number of sectors read
-
-        jc    PrintDiskError                                           ; If 
the read failed then abort
+        int   13h    // DISK - READ SECTORS INTO MEMORY
+                     // AL = number of sectors to read, CH = track, CL = sector
+                     // DH = head, DL    = drive, ES:BX -> buffer to fill
+                     // Return: CF set on error, AH =    status (see AH=01h), 
AL    = number of sectors read
+
+        jc    PrintDiskError                                           // If 
the read failed then abort
 
         popad
 
-        inc   eax                                                              
        ; Increment Sector to Read
+        inc   eax                                                              
        // Increment Sector to Read
 
         mov   dx,es
-        add   dx,byte 20h                                                      
; Increment read buffer for next sector
+        add   dx,byte 20h                                                      
// Increment read buffer for next sector
         mov   es,dx
 
-        loop  ReadSectorsCHSLoop                                       ; Read 
next sector
-
-        ret   
-
-
-
-
-; Displays a disk error message
-; And reboots
+        loop  ReadSectorsCHSLoop                                       // Read 
next sector
+
+        ret
+
+
+
+
+// Displays a disk error message
+// And reboots
 PrintDiskError:
-        mov  si,msgDiskError                   ; Bad boot disk message
-        call PutChars                                  ; Display it
+        mov  si,msgDiskError                   // Bad boot disk message
+        call PutChars                                  // Display it
 
 Reboot:
-        mov  si,msgAnyKey                              ; Press any key message
-        call PutChars                                  ; Display it
-        xor ax,ax       
-        int 16h                                                        ; Wait 
for a keypress
-        int 19h                                                        ; Reboot
+        mov  si,msgAnyKey                              // Press any key message
+        call PutChars                                  // Display it
+        xor ax,ax
+        int 16h                                                        // Wait 
for a keypress
+        int 19h                                                        // 
Reboot
 
 PutChars:
         lodsb
@@ -340,318 +340,318 @@
 
 
 msgDiskError           db 'Disk error',0
-; Sorry, need the space...
-;msgAnyKey                     db 'Press any key to restart',0
+// Sorry, need the space...
+//msgAnyKey                    db 'Press any key to restart',0
 msgAnyKey                      db 'Press any key',0
 
-        times 509-($-$$) db 0   ; Pad to 509 bytes
+        times 509-($-$$) db 0   // Pad to 509 bytes
 
 BootPartition                  db 0
 
-        dw 0aa55h       ; BootSector signature
-        
-
-; End of bootsector
-;
-; Now starts the extra boot code that we will store
-; at sector 1 on a EXT2 volume
+        dw 0aa55h       // BootSector signature
+
+
+// End of bootsector
+//
+// Now starts the extra boot code that we will store
+// at sector 1 on a EXT2 volume
 
 
 
 LoadRootDirectory:
 
-               mov  eax,EXT2_ROOT_INO                  ; Put the root 
directory inode number in EAX
-               call Ext2ReadInode                              ; Read in the 
inode
-
-               ; Point ES:DI to the inode structure at 6000:8000
+               mov  eax,EXT2_ROOT_INO                  // Put the root 
directory inode number in EAX
+               call Ext2ReadInode                              // Read in the 
inode
+
+               // Point ES:DI to the inode structure at 6000:8000
                push WORD 6000h
                pop  es
                mov  di,8000h
                push di
-               push es                                                 ; Save 
these for later
-
-               ; Get root directory size from inode structure
+               push es                                                 // Save 
these for later
+
+               // Get root directory size from inode structure
                mov  eax,DWORD [es:di+4]
                push eax
 
-               ; Now that the inode has been read in load
-               ; the root directory file data to 0000:8000
+               // Now that the inode has been read in load
+               // the root directory file data to 0000:8000
                call Ext2ReadEntireFile
 
-               ; Since the root directory was loaded to 0000:8000
-               ; then add 8000h to the root directory's size
+               // Since the root directory was loaded to 0000:8000
+               // then add 8000h to the root directory's size
                pop  eax
-               mov  edx,8000h                                  ; Set EDX to 
the current offset in the root directory
-               add  eax,edx                                    ; Initially add 
8000h to the size of the root directory
+               mov  edx,8000h                                  // Set EDX to 
the current offset in the root directory
+               add  eax,edx                                    // Initially 
add 8000h to the size of the root directory
 
 SearchRootDirectory:
-               push edx                                                ; Save 
current offset in root directory
-               push eax                                                ; Save 
the size of the root directory
-
-               ; Now we have to convert the current offset
-               ; in the root directory to a SEGMENT:OFFSET pair
+               push edx                                                // Save 
current offset in root directory
+               push eax                                                // Save 
the size of the root directory
+
+               // Now we have to convert the current offset
+               // in the root directory to a SEGMENT:OFFSET pair
                mov  eax,edx
                xor  edx,edx
                mov  ecx,16
-               div  ecx                                                ; Now 
AX:DX has segment & offset
+               div  ecx                                                // Now 
AX:DX has segment & offset
                mov  es,ax
                mov  di,dx
-               push di                                                 ; Save 
the start of the directory entry
-               add  di,byte 8                                  ; Add the 
offset to the filename
+               push di                                                 // Save 
the start of the directory entry
+               add  di,byte 8                                  // Add the 
offset to the filename
                mov  si,filename
                mov  cl,11
-               rep  cmpsb                                              ; 
Compare the file names
+               rep  cmpsb                                              // 
Compare the file names
                pop  di
                pop  eax
                pop  edx
                jz   FoundFile
 
-               ; Nope, didn't find it in this entry, keep looking
+               // Nope, didn't find it in this entry, keep looking
                movzx ecx,WORD [es:di+4]
                add   edx,ecx
 
-               ; Check to see if we have reached the
-               ; end of the root directory
+               // Check to see if we have reached the
+               // end of the root directory
                cmp  edx,eax
                jb   SearchRootDirectory
                jmp  PrintFileNotFound
 
 FoundFile:
-               mov  eax,[es:di]                                ; Get inode 
number from directory entry
-               call Ext2ReadInode                              ; Read in the 
inode
-
-               ; Point ES:DI to the inode structure at 6000:8000
-               pop  es
-               pop  di                                                 ; These 
were saved earlier
-
-               mov  cx,[es:di]                                 ; Get the file 
mode so we can make sure it's a regular file
-               and  ch,EXT2_S_IFMT                             ; Mask off 
everything but the file type
-               cmp  ch,EXT2_S_IFREG                    ; Make sure it's a 
regular file
+               mov  eax,[es:di]                                // Get inode 
number from directory entry
+               call Ext2ReadInode                              // Read in the 
inode
+
+               // Point ES:DI to the inode structure at 6000:8000
+               pop  es
+               pop  di                                                 // 
These were saved earlier
+
+               mov  cx,[es:di]                                 // Get the file 
mode so we can make sure it's a regular file
+               and  ch,EXT2_S_IFMT                             // Mask off 
everything but the file type
+               cmp  ch,EXT2_S_IFREG                    // Make sure it's a 
regular file
                je   LoadFreeLoader
                jmp  PrintRegFileError
 
 LoadFreeLoader:
-        mov  si,msgLoading                             ; "Loading 
FreeLoader..." message
-        call PutChars                                  ; Display it
-
-               call Ext2ReadEntireFile                 ; Read freeldr.sys to 
0000:8000
+        mov  si,msgLoading                             // "Loading 
FreeLoader..." message
+        call PutChars                                  // Display it
+
+               call Ext2ReadEntireFile                 // Read freeldr.sys to 
0000:8000
 
         mov  dl,[BYTE bp+BootDrive]
                mov  dh,[BYTE bp+BootPartition]
-               push 0                                          ; push segment 
(0x0000)
-               mov eax, [0x8000 + 0xA8]        ; load the RVA of the 
EntryPoint into eax
-               add eax, 0x8000                         ; RVA -> VA
-               push ax                                         ; push offset
-               retf                                            ; Transfer 
control to FreeLoader
-
-
-
-
-
-; Reads ext2 file data into [0000:8000]
-; This function assumes that the file's
-; inode has been read in to 6000:8000 *and*
-; ES:DI points to 6000:8000
-; This will load all the blocks up to
-; and including the double-indirect pointers.
-; This should be sufficient because it
-; allows for ~64MB which is much bigger
-; than we need for a boot loader.
+               push 0                                          // push segment 
(0x0000)
+               mov eax, [0x8000 + 0xA8]        // load the RVA of the 
EntryPoint into eax
+               add eax, 0x8000                         // RVA -> VA
+               push ax                                         // push offset
+               retf                                            // Transfer 
control to FreeLoader
+
+
+
+
+
+// Reads ext2 file data into [0000:8000]
+// This function assumes that the file's
+// inode has been read in to 6000:8000 *and*
+// ES:DI points to 6000:8000
+// This will load all the blocks up to
+// and including the double-indirect pointers.
+// This should be sufficient because it
+// allows for ~64MB which is much bigger
+// than we need for a boot loader.
 Ext2ReadEntireFile:
 
-               ; Reset the load segment
+               // Reset the load segment
                mov  WORD [BYTE bp+Ext2ReadEntireFileLoadSegment],800h
 
-               ; Now we must calculate how
-               ; many blocks to read in
-               ; We will do this by rounding the
-               ; file size up to the next block
-               ; size and then dividing by the block size
-               mov  eax,DWORD [BYTE bp+Ext2BlockSizeInBytes]           ; Get 
the block size in bytes
+               // Now we must calculate how
+               // many blocks to read in
+               // We will do this by rounding the
+               // file size up to the next block
+               // size and then dividing by the block size
+               mov  eax,DWORD [BYTE bp+Ext2BlockSizeInBytes]           // Get 
the block size in bytes
                push eax
-               dec  eax                                                        
                                ; Ext2BlockSizeInBytes -= 1
-               add  eax,DWORD [es:di+4]                                        
                ; Add the file size
+               dec  eax                                                        
                                // Ext2BlockSizeInBytes -= 1
+               add  eax,DWORD [es:di+4]                                        
                // Add the file size
                xor  edx,edx
-               pop  ecx                                                        
                                ; Divide by the block size in bytes
-               div  ecx                                                        
                                ; EAX now contains the number of blocks to load
+               pop  ecx                                                        
                                // Divide by the block size in bytes
+               div  ecx                                                        
                                // EAX now contains the number of blocks to load
                push eax
 
-               ; Make sure the file size isn't zero
+               // Make sure the file size isn't zero
                cmp  eax,byte 0
                jnz  Ext2ReadEntireFile2
                jmp  PrintFileSizeError
 
 Ext2ReadEntireFile2:
-               ; Save the indirect & double indirect pointers
-               mov  edx,DWORD [es:di+0x58]                                     
                ; Get indirect pointer
-               mov  [BYTE bp+Ext2InodeIndirectPointer],edx                     
; Save indirect pointer
-               mov  edx,DWORD [es:di+0x5c]                                     
                ; Get double indirect pointer
-               mov  [BYTE bp+Ext2InodeDoubleIndirectPointer],edx       ; Save 
double indirect pointer
-
-               ; Now copy the direct pointers to 7000:0000
-               ; so that we can call Ext2ReadDirectBlocks
-               push ds                                                         
                                ; Save DS
+               // Save the indirect & double indirect pointers
+               mov  edx,DWORD [es:di+0x58]                                     
                // Get indirect pointer
+               mov  [BYTE bp+Ext2InodeIndirectPointer],edx                     
// Save indirect pointer
+               mov  edx,DWORD [es:di+0x5c]                                     
                // Get double indirect pointer
+               mov  [BYTE bp+Ext2InodeDoubleIndirectPointer],edx       // Save 
double indirect pointer
+
+               // Now copy the direct pointers to 7000:0000
+               // so that we can call Ext2ReadDirectBlocks
+               push ds                                                         
                                // Save DS
                push es
                push WORD 7000h
                pop  es
                pop  ds
                mov  si,8028h
-               xor  di,di                                                      
                                ; DS:SI = 6000:8028 ES:DI = 7000:0000
-               mov  cx,24                                                      
                                ; Moving 24 words of data
+               xor  di,di                                                      
                                // DS:SI = 6000:8028 ES:DI = 7000:0000
+               mov  cx,24                                                      
                                // Moving 24 words of data
                rep  movsw
-               pop  ds                                                         
                                ; Restore DS
-
-               ; Now we have all the block pointers in the
-               ; right location so read them in
-               pop  eax                                                        
                                ; Restore the total number of blocks in this 
file
-               xor  ecx,ecx                                                    
                        ; Set the max count of blocks to read to 12
-               mov  cl,12                                                      
                                ; which is the number of direct block pointers 
in the inode
+               pop  ds                                                         
                                // Restore DS
+
+               // Now we have all the block pointers in the
+               // right location so read them in
+               pop  eax                                                        
                                // Restore the total number of blocks in this 
file
+               xor  ecx,ecx                                                    
                        // Set the max count of blocks to read to 12
+               mov  cl,12                                                      
                                // which is the number of direct block pointers 
in the inode
                call Ext2ReadDirectBlockList
 
-               ; Check to see if we actually have
-               ; blocks left to read
+               // Check to see if we actually have
+               // blocks left to read
                cmp  eax,byte 0
                jz   Ext2ReadEntireFileDone
 
-               ; Now we have read all the direct blocks in
-               ; the inode. So now we have to read the indirect
-               ; block and read all it's direct blocks
-               push eax                                                        
                                ; Save the total block count
-               mov  eax,DWORD [BYTE bp+Ext2InodeIndirectPointer]       ; Get 
the indirect block pointer
+               // Now we have read all the direct blocks in
+               // the inode. So now we have to read the indirect
+               // block and read all it's direct blocks
+               push eax                                                        
                                // Save the total block count
+               mov  eax,DWORD [BYTE bp+Ext2InodeIndirectPointer]       // Get 
the indirect block pointer
                push WORD 7000h
                pop  es
-               xor  bx,bx                                                      
                                ; Set the load address to 7000:0000
-               call Ext2ReadBlock                                              
                        ; Read the block
-
-               ; Now we have all the block pointers from the
-               ; indirect block in the right location so read them in
-               pop  eax                                                        
                                ; Restore the total block count
-               mov  ecx,DWORD [BYTE bp+Ext2PointersPerBlock]           ; Get 
the number of block pointers that one block contains
+               xor  bx,bx                                                      
                                // Set the load address to 7000:0000
+               call Ext2ReadBlock                                              
                        // Read the block
+
+               // Now we have all the block pointers from the
+               // indirect block in the right location so read them in
+               pop  eax                                                        
                                // Restore the total block count
+               mov  ecx,DWORD [BYTE bp+Ext2PointersPerBlock]           // Get 
the number of block pointers that one block contains
                call Ext2ReadDirectBlockList
 
-               ; Check to see if we actually have
-               ; blocks left to read
+               // Check to see if we actually have
+               // blocks left to read
                cmp  eax,byte 0
                jz   Ext2ReadEntireFileDone
 
-               ; Now we have read all the direct blocks from
-               ; the inode's indirect block pointer. So now
-               ; we have to read the double indirect block
-               ; and read all it's indirect blocks
-               ; (whew, it's a good thing I don't support triple indirect 
blocks)
-               mov  [BYTE bp+Ext2BlocksLeftToRead],eax                         
; Save the total block count
-               mov  eax,DWORD [BYTE bp+Ext2InodeDoubleIndirectPointer] ; Get 
the double indirect block pointer
+               // Now we have read all the direct blocks from
+               // the inode's indirect block pointer. So now
+               // we have to read the double indirect block
+               // and read all it's indirect blocks
+               // (whew, it's a good thing I don't support triple indirect 
blocks)
+               mov  [BYTE bp+Ext2BlocksLeftToRead],eax                         
// Save the total block count
+               mov  eax,DWORD [BYTE bp+Ext2InodeDoubleIndirectPointer] // Get 
the double indirect block pointer
                push WORD 7800h
                pop  es
-               push es                                                         
                                ; Save an extra copy of this value on the stack
-               xor  bx,bx                                                      
                                ; Set the load address to 7000:8000
-               call Ext2ReadBlock                                              
                        ; Read the block
-
-               pop  es                                                         
                                ; Put 7800h into ES (saved on the stack already)
+               push es                                                         
                                // Save an extra copy of this value on the stack
+               xor  bx,bx                                                      
                                // Set the load address to 7000:8000
+               call Ext2ReadBlock                                              
                        // Read the block
+
+               pop  es                                                         
                                // Put 7800h into ES (saved on the stack 
already)
                xor  di,di
 
 Ext2ReadIndirectBlock:
-               mov  eax,DWORD [es:di]                                          
                ; Get indirect block pointer
-               add  di,BYTE 4                                                  
                        ; Update DI for next array index
+               mov  eax,DWORD [es:di]                                          
                // Get indirect block pointer
+               add  di,BYTE 4                                                  
                        // Update DI for next array index
                push es
                push di
 
                push WORD 7000h
                pop  es
-               xor  bx,bx                                                      
                                ; Set the load address to 7000:0000
-               call Ext2ReadBlock                                              
                        ; Read the indirect block
-
-               ; Now we have all the block pointers from the
-               ; indirect block in the right location so read them in
-               mov  eax,DWORD [BYTE bp+Ext2BlocksLeftToRead]           ; 
Restore the total block count
-               mov  ecx,DWORD [BYTE bp+Ext2PointersPerBlock]           ; Get 
the number of block pointers that one block contains
+               xor  bx,bx                                                      
                                // Set the load address to 7000:0000
+               call Ext2ReadBlock                                              
                        // Read the indirect block
+
+               // Now we have all the block pointers from the
+               // indirect block in the right location so read them in
+               mov  eax,DWORD [BYTE bp+Ext2BlocksLeftToRead]           // 
Restore the total block count
+               mov  ecx,DWORD [BYTE bp+Ext2PointersPerBlock]           // Get 
the number of block pointers that one block contains
                call Ext2ReadDirectBlockList
-               mov  [BYTE bp+Ext2BlocksLeftToRead],eax                         
; Save the total block count
+               mov  [BYTE bp+Ext2BlocksLeftToRead],eax                         
// Save the total block count
                pop  di
                pop  es
 
-               ; Check to see if we actually have
-               ; blocks left to read
+               // Check to see if we actually have
+               // blocks left to read
                cmp  eax,byte 0
                jnz  Ext2ReadIndirectBlock
 
 Ext2ReadEntireFileDone:
                ret
 
-; Reads a maximum number of blocks
-; from an array at 7000:0000
-; and updates the total count
-; ECX contains the max number of blocks to read
-; EAX contains the number of blocks left to read
-; On return:
-;  EAX contians the new number of blocks left to read
+// Reads a maximum number of blocks
+// from an array at 7000:0000
+// and updates the total count
+// ECX contains the max number of blocks to read
+// EAX contains the number of blocks left to read
+// On return:
+//  EAX contians the new number of blocks left to read
 Ext2ReadDirectBlockList:
-               cmp  eax,ecx                                                    
                        ; Compare it to the maximum number of blocks to read
-               ja   CallExt2ReadDirectBlocks                                   
        ; If it will take more blocks then just read all of the blocks
-               mov  cx,ax                                                      
                                ; Otherwise adjust the block count accordingly
+               cmp  eax,ecx                                                    
                        // Compare it to the maximum number of blocks to read
+               ja   CallExt2ReadDirectBlocks                                   
        // If it will take more blocks then just read all of the blocks
+               mov  cx,ax                                                      
                                // Otherwise adjust the block count accordingly
 
 CallExt2ReadDirectBlocks:
-               sub  eax,ecx                                                    
                        ; Subtract the number of blocks being read from the 
total count
-               push eax                                                        
                                ; Save the new total count
+               sub  eax,ecx                                                    
                        // Subtract the number of blocks being read from the 
total count
+               push eax                                                        
                                // Save the new total count
                call Ext2ReadDirectBlocks
-               pop  eax                                                        
                                ; Restore the total count
+               pop  eax                                                        
                                // Restore the total count
                ret
 
 
-; Reads a specified number of blocks
-; from an array at 7000:0000
-; CX contains the number of blocks to read
+// Reads a specified number of blocks
+// from an array at 7000:0000
+// CX contains the number of blocks to read
 Ext2ReadDirectBlocks:
 
                push WORD 7000h
                pop  es
-               xor  di,di                                                      
                                ; Set ES:DI = 7000:0000
+               xor  di,di                                                      
                                // Set ES:DI = 7000:0000
 
 Ext2ReadDirectBlocksLoop:
-               mov  eax,[es:di]                                                
                        ; Get direct block pointer from array
-               add  di,BYTE 4                                                  
                        ; Update DI for next array index
-
-               push cx                                                         
                                ; Save number of direct blocks left
-               push es                                                         
                                ; Save array segment
-               push di                                                         
                                ; Save array offset
+               mov  eax,[es:di]                                                
                        // Get direct block pointer from array
+               add  di,BYTE 4                                                  
                        // Update DI for next array index
+
+               push cx                                                         
                                // Save number of direct blocks left
+               push es                                                         
                                // Save array segment
+               push di                                                         
                                // Save array offset
                mov  es,[BYTE bp+Ext2ReadEntireFileLoadSegment]
-               xor  bx,bx                                                      
                                ; Setup load address for next read
-
-               call Ext2ReadBlock                                              
                        ; Read the block (this updates ES for the next read)
-
-               mov  [BYTE bp+Ext2ReadEntireFileLoadSegment],es         ; Save 
updated ES
-
-               pop  di                                                         
                                ; Restore the array offset
-               pop  es                                                         
                                ; Restore the array segment
-               pop  cx                                                         
                                ; Restore the number of blocks left
+               xor  bx,bx                                                      
                                // Setup load address for next read
+
+               call Ext2ReadBlock                                              
                        // Read the block (this updates ES for the next read)
+
+               mov  [BYTE bp+Ext2ReadEntireFileLoadSegment],es         // Save 
updated ES
+
+               pop  di                                                         
                                // Restore the array offset
+               pop  es                                                         
                                // Restore the array segment
+               pop  cx                                                         
                                // Restore the number of blocks left
 
                loop Ext2ReadDirectBlocksLoop
 
-               ; At this point all the direct blocks should
-               ; be loaded and ES (Ext2ReadEntireFileLoadSegment)
-               ; should be ready for the next read.
+               // At this point all the direct blocks should
+               // be loaded and ES (Ext2ReadEntireFileLoadSegment)
+               // should be ready for the next read.
                ret
 
 
 
-; Displays a file not found error message
-; And reboots
+// Displays a file not found error message
+// And reboots
 PrintFileNotFound:
-        mov  si,msgFreeLdr      ; FreeLdr not found message
+        mov  si,msgFreeLdr      // FreeLdr not found message
                jmp short DisplayItAndReboot
 
-; Displays a file size is 0 error
-; And reboots
+// Displays a file size is 0 error
+// And reboots
 PrintFileSizeError:
-        mov  si,msgFileSize     ; Error message
+        mov  si,msgFileSize     // Error message
                jmp short DisplayItAndReboot
 
-; Displays a file is not a regular file error
-; And reboots
+// Displays a file is not a regular file error
+// And reboots
 PrintRegFileError:
-        mov  si,msgRegFile      ; Error message
+        mov  si,msgRegFile      // Error message
 DisplayItAndReboot:
-        call PutChars           ; Display it
+        call PutChars           // Display it
                jmp  Reboot
 
 msgFreeLdr   db 'freeldr.sys not found',0
@@ -660,6 +660,6 @@
 filename     db 'freeldr.sys'
 msgLoading   db 'Loading FreeLoader...',0
 
-        times 1022-($-$$) db 0   ; Pad to 1022 bytes
-
-        dw 0aa55h       ; BootSector signature
+        times 1022-($-$$) db 0   // Pad to 1022 bytes
+
+        dw 0aa55h       // BootSector signature


Reply via email to