Author: tkreuzer
Date: Sun Nov 14 17:46:56 2010
New Revision: 49588
URL:
http://svn.reactos.org/svn/reactos?rev=49588&view=rev
Log:
[FREELDR]
Convert fathelp.S into ML compatible code. The result is identical to the old version when
compiled with gcc, but slightly different when compiled with ml. Especially the code
starts at position 6 instead of 0, with a one byte text section at the top, this needs
more investigation. also there is a large reg move, but that doesn't hurt. Finally the
padding at the end doesn't work at all.
Modified:
branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S
Modified: branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S
URL:
http://svn.reactos.org/svn/reactos/branches/cmake-bringup/boot/freeldr/free…
==============================================================================
--- branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S [iso-8859-1]
(original)
+++ branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S [iso-8859-1] Sun Nov
14 17:46:56 2010
@@ -2,24 +2,24 @@
// FAT12/16 Boot Sector Helper Code
// Copyright (c) 1998, 2001, 2002, 2003 Brian Palmer
-.intel_syntax noprefix
+#include <asm.inc>
//org 8000h
-.text
+//.text
.code16
-#define BootSectorStackTop 0x7bf2
-#define DataAreaStartHigh 0x2
-#define DataAreaStartLow 0x4
-#define BiosCHSDriveSizeHigh 0x6
-#define BiosCHSDriveSizeLow 0x8
-#define BiosCHSDriveSize 0x8
-#define ReadSectorsOffset 0xa
-#define ReadClusterOffset 0xc
-#define PutCharsOffset 0xe
+#define BootSectorStackTop HEX(7bf2)
+#define DataAreaStartHigh 2
+#define DataAreaStartLow 4
+#define BiosCHSDriveSizeHigh 6
+#define BiosCHSDriveSizeLow 8
+#define BiosCHSDriveSize 8
+#define ReadSectorsOffset 10
+#define ReadClusterOffset 12
+#define PutCharsOffset 14
#define OEMName 3
#define BytesPerSector 11
@@ -41,7 +41,7 @@
#define VolumeLabel 43
#define FileSystem 54
-#define BootPartition 0x7dfd
+#define BootPartition HEX(7dfd)
// This code will be stored in the first 512 bytes
@@ -52,13 +52,13 @@
// This code is loaded at 0000:8000 so we have to
// encode a jmp instruction to jump to 0000:8200
-.global _mainCRTStartup // For Mingw32 builds where the linker looks for this symbol
+PUBLIC _mainCRTStartup // For Mingw32 builds where the linker looks for this symbol
_mainCRTStartup:
-.global start
+PUBLIC start
start:
- .byte 0xe9
- .byte 0xfd
- .byte 0x01
+ .byte HEX(e9)
+ .byte HEX(fd)
+ .byte HEX(01)
// Now starts the extra boot code that we will store
// in the first 512 bytes of freeldr.sys. This code
@@ -74,7 +74,7 @@
// Display "Loading FreeLoader..." message
mov esi, offset msgLoading // Loading message
- call [bp-PutCharsOffset] // Display it
+ call word ptr [bp-PutCharsOffset] // Display it
call ReadFatIntoMemory
@@ -82,7 +82,7 @@
pop ax // Restore AX (start cluster)
// AX has start cluster of freeldr.sys
- mov bx,0x800
+ mov bx, HEX(800)
mov es,bx
LoadFile:
@@ -90,16 +90,16 @@
call IsFat12
pop ax
jnc LoadFile2
- cmp ax,0x0ff8 // Check to see if this is the last cluster in the chain
+ cmp ax, HEX(0ff8) // Check to see if this is the last cluster in the chain
jmp LoadFile3
LoadFile2:
- cmp ax,0x0fff8
+ cmp ax, HEX(0fff8)
LoadFile3:
jae LoadFile_Done // If so continue, if not then read then next one
push ax
xor bx,bx // Load ROSLDR starting at 0000:8000h
push es
- call [bp-ReadClusterOffset]
+ call word ptr [bp-ReadClusterOffset]
pop es
xor bx,bx
@@ -123,12 +123,12 @@
jmp LoadFile // Load the next cluster (if any)
LoadFile_Done:
- mov dl,BYTE PTR [bp+BootDrive] // Load the boot drive into DL
- mov dh,[BootPartition] // Load the boot partition into DH
+ mov dl, byte ptr [bp+BootDrive] // Load the boot drive into DL
+ mov dh, byte ptr ds:[BootPartition] // Load the boot partition into DH
push 0 // push segment (0x0000)
- mov bx, [0x8000 + 0xA8] // load the RVA of the EntryPoint into eax
- add bx, 0x8000 // RVA -> VA and skip 3 bytes (jump to fathelper code)
+ mov bx, ds: [HEX(8000) + HEX(A8)] // load the RVA of the EntryPoint into eax
+ add bx, HEX(8000) // RVA -> VA and skip 3 bytes (jump to fathelper code)
push bx // push offset
retf // Transfer control to FreeLoader
@@ -139,10 +139,10 @@
add ax, [bp+ReservedSectors]
adc dx, 0
mov cx, [bp+SectorsPerFat]
- mov bx,0x7000
+ mov bx, HEX(7000)
mov es,bx
xor bx,bx
- call [bp-ReadSectorsOffset]
+ call word ptr [bp-ReadSectorsOffset]
ret
@@ -155,7 +155,7 @@
mul cx
shl dx,12
- mov bx,0x7000
+ mov bx, HEX(7000)
add bx,dx
mov es,bx
mov bx,ax // Restore FAT entry offset
@@ -174,19 +174,19 @@
shr ax,1
add ax,cx // AX = AX * 1.5 (AX = AX + (AX / 2)) (since FAT12 entries are 12
bits)
- mov bx,0x7000
+ mov bx, HEX(7000)
mov es,bx
mov bx,ax // Put FAT entry offset into BX
mov ax, es:[bx] // Get FAT entry
pop cx // Get cluster number from stack
and cx,1
jz UseLow12Bits
- and ax,0x0fff0
+ and ax, HEX(0fff0)
shr ax,4
jmp GetFatEntry12_Done
UseLow12Bits:
- and ax,0x0fff
+ and ax, HEX(0fff)
GetFatEntry12_Done:
@@ -197,17 +197,17 @@
// Otherwise CF = 0 for FAT16
IsFat12:
- mov ebx, [bp-DataAreaStartLow]
+ mov ebx, dword ptr [bp-DataAreaStartLow]
// EBX now has the number of the starting sector of the data area
// starting from the beginning of the disk, so subtrace hidden sectors
- sub ebx, [bp+HiddenSectors]
+ sub ebx, dword ptr [bp+HiddenSectors]
xor eax,eax
- mov ax, [bp+TotalSectors]
+ mov ax, word ptr [bp+TotalSectors]
cmp ax, 0
jnz IsFat12_2
- mov eax, [bp+TotalSectorsBig]
+ mov eax, dword ptr [bp+TotalSectorsBig]
// EAX now contains the number of sectors on the volume
@@ -231,5 +231,9 @@
msgLoading: .asciz "Loading FreeLoader...\r\n"
- .org 0x1fe // Pad to 510 bytes
- .word 0x0aa55 // BootSector signature
+ .org HEX(1fe) // Pad to 510 bytes
+ .word HEX(0aa55) // BootSector signature
+
+.endcode16
+
+END