[ros-diffs] [akhaldi] 48687: [FREELDR] - Convert fat12/16 boot sector helper code to gas syntax. Brought to you by the Arty. [CMAKE] - Add freeldr and setupldr to build.

akhaldi at svn.reactos.org akhaldi at svn.reactos.org
Thu Sep 2 17:39:47 UTC 2010


Author: akhaldi
Date: Thu Sep  2 17:39:45 2010
New Revision: 48687

URL: http://svn.reactos.org/svn/reactos?rev=48687&view=rev
Log:
[FREELDR]
- Convert fat12/16 boot sector helper code to gas syntax. Brought to you by the Arty.
[CMAKE]
- Add freeldr and setupldr to build.

Added:
    branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S
      - copied, changed from r48568, branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.asm
Removed:
    branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.asm
Modified:
    branches/cmake-bringup/boot/CMakeLists.txt

Modified: branches/cmake-bringup/boot/CMakeLists.txt
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/boot/CMakeLists.txt?rev=48687&r1=48686&r2=48687&view=diff
==============================================================================
--- branches/cmake-bringup/boot/CMakeLists.txt [iso-8859-1] (original)
+++ branches/cmake-bringup/boot/CMakeLists.txt [iso-8859-1] Thu Sep  2 17:39:45 2010
@@ -5,3 +5,203 @@
 CreateBootSectorTarget(fat ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/bootsect/fat.asm ${CMAKE_CURRENT_BINARY_DIR}/freeldr/bootsect/fat.bin)
 CreateBootSectorTarget(isoboot ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/bootsect/isoboot.asm ${CMAKE_CURRENT_BINARY_DIR}/freeldr/bootsect/isoboot.bin)
 CreateBootSectorTarget(isobtrt ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/bootsect/isobtrt.asm ${CMAKE_CURRENT_BINARY_DIR}/freeldr/bootsect/isobtrt.bin)
+
+include_directories(BEFORE freeldr/freeldr/include)
+include_directories(${REACTOS_SOURCE_DIR}/ntoskrnl/include)
+
+if(ARCH MATCHES i386)
+list(APPEND FREELDR_STARTUP_SOURCE
+    freeldr/freeldr/arch/i386/fathelp.S
+    freeldr/freeldr/arch/i386/arch.S)
+elseif(ARCH MATCHES amd64)
+list(APPEND FREELDR_STARTUP_SOURCE
+    freeldr/freeldr/arch/amd64/fathelp.S
+    freeldr/freeldr/arch/amd64/arch.S)
+endif(ARCH MATCHES i386)
+
+if(ARCH MATCHES i386)
+list(APPEND FREELDR_BASE64K_SOURCE
+    freeldr/freeldr/arch/i386/boot.S
+    freeldr/freeldr/arch/i386/drvmap.S
+    freeldr/freeldr/arch/i386/i386cpu.S
+    freeldr/freeldr/arch/i386/i386idt.S
+    freeldr/freeldr/arch/i386/i386pnp.S
+    freeldr/freeldr/arch/i386/i386trap.S
+    freeldr/freeldr/arch/i386/int386.S
+    freeldr/freeldr/arch/i386/linux.S
+    freeldr/freeldr/arch/i386/mb.S)
+elseif(ARCH MATCHES amd64)
+list(APPEND FREELDR_BASE64K_SOURCE
+    freeldr/freeldr/arch/amd64/drvmap.S
+    freeldr/freeldr/arch/amd64/i386cpu.S
+    freeldr/freeldr/arch/amd64/i386idt.S
+    freeldr/freeldr/arch/amd64/i386trap.S
+    freeldr/freeldr/arch/amd64/mb.S)
+endif(ARCH MATCHES i386)
+
+set_source_files_properties(${FREELDR_BASE64K_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_NTHAL_")
+
+include_directories(${REACTOS_SOURCE_DIR}/lib/cmlib)
+
+list(APPEND FREELDR_BASE_SOURCE
+    freeldr/freeldr/arcemul/mm.c
+    freeldr/freeldr/arcemul/time.c
+    freeldr/freeldr/cache/blocklist.c
+    freeldr/freeldr/cache/cache.c
+    freeldr/freeldr/comm/rs232.c
+    freeldr/freeldr/disk/disk.c
+    freeldr/freeldr/disk/partition.c
+    freeldr/freeldr/disk/ramdisk.c
+    freeldr/freeldr/fs/ext2.c
+    freeldr/freeldr/fs/fat.c
+    freeldr/freeldr/fs/fs.c
+    freeldr/freeldr/fs/iso.c
+    freeldr/freeldr/fs/ntfs.c
+    freeldr/freeldr/inifile/ini_init.c
+    freeldr/freeldr/inifile/inifile.c
+    freeldr/freeldr/inifile/parse.c
+    freeldr/freeldr/mm/meminit.c
+    freeldr/freeldr/mm/mm.c
+    freeldr/freeldr/reactos/registry.c
+    freeldr/freeldr/reactos/arcname.c
+    freeldr/freeldr/reactos/archwsup.c
+    freeldr/freeldr/reactos/binhive.c
+    freeldr/freeldr/reactos/reactos.c
+    freeldr/freeldr/reactos/imageldr.c
+    freeldr/freeldr/rtl/bget.c
+    freeldr/freeldr/rtl/libsupp.c
+    freeldr/freeldr/ui/directui.c
+    freeldr/freeldr/ui/gui.c
+    freeldr/freeldr/ui/minitui.c
+    freeldr/freeldr/ui/noui.c
+    freeldr/freeldr/ui/tui.c
+    freeldr/freeldr/ui/tuimenu.c
+    freeldr/freeldr/ui/ui.c
+    freeldr/freeldr/video/fade.c
+    freeldr/freeldr/video/palette.c
+    freeldr/freeldr/video/video.c
+    freeldr/freeldr/windows/conversion.c
+    freeldr/freeldr/windows/peloader.c
+    freeldr/freeldr/windows/winldr.c
+    freeldr/freeldr/windows/wlmemory.c
+    freeldr/freeldr/windows/wlregistry.c
+    freeldr/freeldr/freeldr.c
+    freeldr/freeldr/debug.c
+    freeldr/freeldr/version.c
+    freeldr/freeldr/cmdline.c
+    freeldr/freeldr/machine.c
+    freeldr/freeldr/options.c
+    freeldr/freeldr/linuxboot.c
+    freeldr/freeldr/oslist.c)
+
+if(ARCH MATCHES i386)
+list(APPEND FREELDR_BASE_SOURCE freeldr/freeldr/disk/scsiport.c)
+endif(ARCH MATCHES i386)
+
+set_source_files_properties(${FREELDR_BASE_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_NTHAL_;_BLDR_;_NTSYSTEM_")
+
+include_directories(${REACTOS_SOURCE_DIR}/include/reactos/libs)
+include_directories(${REACTOS_SOURCE_DIR}/include/reactos/elf)
+
+if(ARCH MATCHES i386)
+list(APPEND FREELDR_ARCH_SOURCE
+    freeldr/freeldr/arch/i386/_alloca.S
+    freeldr/freeldr/arch/i386/archmach.c
+    freeldr/freeldr/arch/i386/custom.c
+    freeldr/freeldr/arch/i386/drivemap.c
+    freeldr/freeldr/arch/i386/halstub.c
+    freeldr/freeldr/arch/i386/hardware.c
+    freeldr/freeldr/arch/i386/hwacpi.c
+    freeldr/freeldr/arch/i386/hwapm.c
+    freeldr/freeldr/arch/i386/hwpci.c
+    freeldr/freeldr/arch/i386/i386disk.c
+    freeldr/freeldr/arch/i386/i386rtl.c
+    freeldr/freeldr/arch/i386/i386vid.c
+    freeldr/freeldr/arch/i386/loader.c
+    freeldr/freeldr/arch/i386/machpc.c
+    freeldr/freeldr/arch/i386/miscboot.c
+    freeldr/freeldr/arch/i386/ntoskrnl.c
+    freeldr/freeldr/arch/i386/pccons.c
+    freeldr/freeldr/arch/i386/pcdisk.c
+    freeldr/freeldr/arch/i386/pcmem.c
+    freeldr/freeldr/arch/i386/pcrtc.c
+    freeldr/freeldr/arch/i386/pcvideo.c
+    freeldr/freeldr/arch/i386/machxbox.c
+    freeldr/freeldr/arch/i386/xboxcons.c
+    freeldr/freeldr/arch/i386/xboxdisk.c
+    freeldr/freeldr/arch/i386/xboxfont.c
+    freeldr/freeldr/arch/i386/xboxhw.c
+    freeldr/freeldr/arch/i386/xboxi2c.c
+    freeldr/freeldr/arch/i386/xboxmem.c
+    freeldr/freeldr/arch/i386/xboxrtc.c
+    freeldr/freeldr/arch/i386/xboxvideo.c
+    freeldr/freeldr/windows/i386/ntsetup.c
+    freeldr/freeldr/windows/i386/wlmemory.c)
+else()
+#TBD
+endif(ARCH MATCHES i386)
+
+set_source_files_properties(${FREELDR_ARCH_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_NTHAL_;_BLDR_;_NTSYSTEM_")
+
+list(APPEND SETUPLDR_MAIN_SOURCE
+    freeldr/freeldr/bootmgr.c
+    freeldr/freeldr/inffile/inffile.c
+    freeldr/freeldr/reactos/setupldr.c)
+
+if(ARCH MATCHES i386)
+list(APPEND SETUPLDR_MAIN_SOURCE freeldr/freeldr/windows/setupldr2.c)
+elseif(ARCH MATCHES amd64)
+list(APPEND SETUPLDR_MAIN_SOURCE freeldr/freeldr/windows/setupldr2.c)
+endif(ARCH MATCHES i386)
+
+set_source_files_properties(${SETUPLDR_MAIN_SOURCE} PROPERTIES COMPILE_DEFINITIONS "_NTHAL_;FREELDR_REACTOS_SETUP" COMPILE_FLAGS "-ffreestanding -fno-builtin -fno-inline -fno-zero-initialized-in-bss")
+
+set(CMAKE_C_CREATE_SHARED_LIBRARY "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+
+list(APPEND FREELDR_SOURCE
+    freeldr/freeldr/bootmgr.c
+    ${FREELDR_STARTUP_SOURCE}
+    ${FREELDR_BASE64K_SOURCE}
+    ${FREELDR_BASE_SOURCE}
+    ${FREELDR_ARCH_SOURCE})
+
+add_library(freeldr SHARED
+    ${CMAKE_CURRENT_BINARY_DIR}/freeldr_freeldr.h.gch
+    ${FREELDR_SOURCE})
+
+set_target_properties(freeldr PROPERTIES LINK_FLAGS "-Wl,--strip-all -Wl,-entry,_mainCRTStartup -Wl,--image-base,0x8000 -Wl,--exclude-all-symbols -Wl,--subsystem,native" SUFFIX ".sys")
+
+if(ARCH MATCHES i386)
+target_link_libraries(freeldr mini_hal)
+endif(ARCH MATCHES i386)
+
+target_link_libraries(freeldr
+    rossym
+    cmlib
+    rtl
+    libcntpr)
+add_pch(freeldr ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/freeldr/include/freeldr.h ${FREELDR_SOURCE})
+
+list(APPEND SETUPLDR_SOURCE
+    ${FREELDR_STARTUP_SOURCE}
+    ${FREELDR_BASE64K_SOURCE}
+    ${FREELDR_BASE_SOURCE}
+    ${FREELDR_ARCH_SOURCE}
+    ${SETUPLDR_MAIN_SOURCE})
+
+add_library(setupldr SHARED
+    ${CMAKE_CURRENT_BINARY_DIR}/freeldr_freeldr.h.gch
+    ${SETUPLDR_SOURCE})
+
+set_target_properties(setupldr PROPERTIES LINK_FLAGS "-Wl,--strip-all -Wl,-entry,_mainCRTStartup -Wl,--image-base,0x8000 -Wl,--exclude-all-symbols -Wl,--subsystem,native" SUFFIX ".sys")
+
+if(ARCH MATCHES i386)
+target_link_libraries(setupldr mini_hal)
+endif(ARCH MATCHES i386)
+
+target_link_libraries(setupldr
+    rossym
+    cmlib
+    rtl
+    libcntpr)
+add_pch(setupldr ${CMAKE_CURRENT_SOURCE_DIR}/freeldr/freeldr/include/freeldr.h ${SETUPLDR_SOURCE})

Copied: branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S (from r48568, branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.asm)
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S?p2=branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S&p1=branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.asm&r1=48568&r2=48687&rev=48687&view=diff
==============================================================================
--- branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.asm [iso-8859-1] (original)
+++ branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.S [iso-8859-1] Thu Sep  2 17:39:45 2010
@@ -1,226 +1,222 @@
-; FATHELP.ASM
-; FAT12/16 Boot Sector Helper Code
-; Copyright (c) 1998, 2001, 2002, 2003 Brian Palmer
-
-
-
-;org 8000h
-
-segment .text
-
-bits 16
-
-
-BootSectorStackTop		equ		0x7bf2
-DataAreaStartHigh		equ		0x2
-DataAreaStartLow		equ		0x4
-BiosCHSDriveSizeHigh	equ		0x6
-BiosCHSDriveSizeLow		equ		0x8
-BiosCHSDriveSize		equ		0x8
-ReadSectorsOffset		equ		0xa
-ReadClusterOffset		equ		0xc
-PutCharsOffset			equ		0xe
-
-OEMName					equ		3
-BytesPerSector			equ		11
-SectsPerCluster			equ		13
-ReservedSectors			equ		14
-NumberOfFats			equ		16
-MaxRootEntries			equ		17
-TotalSectors			equ		19
-MediaDescriptor			equ		21
-SectorsPerFat			equ		22
-SectorsPerTrack			equ		24
-NumberOfHeads			equ		26
-HiddenSectors			equ		28
-TotalSectorsBig			equ		32
-BootDrive				equ		36
-Reserved				equ		37
-ExtendSig				equ		38
-SerialNumber			equ		39
-VolumeLabel				equ		43
-FileSystem				equ		54
-
-BootPartition			equ		0x7dfd
+// FATHELP.ASM
+// FAT12/16 Boot Sector Helper Code
+// Copyright (c) 1998, 2001, 2002, 2003 Brian Palmer
+
+		.text
+		.code16
+		.intel_syntax
+
+#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 OEMName							3
+#define BytesPerSector					11
+#define SectsPerCluster					13
+#define ReservedSectors					14
+#define NumberOfFats					16
+#define MaxRootEntries					17
+#define TotalSectors					19
+#define MediaDescriptor					21
+#define SectorsPerFat					22
+#define SectorsPerTrack					24
+#define NumberOfHeads					26
+#define HiddenSectors					28
+#define TotalSectorsBig					32
+#define BootDrive						36
+#define Reserved						37
+#define ExtendSig						38
+#define SerialNumber					39
+#define VolumeLabel						43
+#define FileSystem						54
+
+#define BootPartition					0x7dfd
         
 
-; This code will be stored in the first 512 bytes
-; of freeldr.sys. The first 3 bytes will be a jmp
-; instruction to skip past the FAT helper code
-; that is stored in the rest of the 512 bytes.
-;
-; 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
+// This code will be stored in the first 512 bytes
+// of freeldr.sys. The first 3 bytes will be a jmp
+// instruction to skip past the FAT helper code
+// that is stored in the rest of the 512 bytes.
+//
+// This code is loaded at 0000:8000 so we have to
+// encode a jmp instruction to jump to 0000:8200
+
+.globl _mainCRTStartup						/* For Mingw32 builds where the linker looks for this symbol */
 _mainCRTStartup:
-global start
+.globl start
 start:
-        db	0xe9
-		db	0xfd
-		db	0x01
-
-; Now starts the extra boot code that we will store
-; in the first 512 bytes of freeldr.sys. This code
-; allows the FAT12/16 bootsector to navigate the
-; FAT table so that we can still load freeldr.sys
-; even if it is fragmented.
+		.byte	0xe9
+		.byte	0xfd
+		.byte	0x01
+
+// Now starts the extra boot code that we will store
+// in the first 512 bytes of freeldr.sys. This code
+// allows the FAT12/16 bootsector to navigate the
+// FAT table so that we can still load freeldr.sys
+// even if it is fragmented.
 
 
 FatHelperEntryPoint:
 
-		push ax							; First save AX - the start cluster of freeldr.sys
-
-
-		; Display "Loading FreeLoader..." message
-        mov  esi,msgLoading				; Loading message
-        call [bp-PutCharsOffset]		; Display it
+		push %ax							/* First save AX - the start cluster of freeldr.sys */
+
+
+		// Display "Loading FreeLoader..." message
+        mov  %esi,msgLoading				/* Loading message */
+        call [%bp-PutCharsOffset]			/* Display it */
 
 
 		call ReadFatIntoMemory
 
-		pop  ax							; Restore AX (start cluster)
-		; AX has start cluster of freeldr.sys
-
-        mov  bx,800h
-        mov  es,bx
+		pop  %ax							/* Restore AX (start cluster) */
+		// AX has start cluster of freeldr.sys
+
+        mov  %bx,0x800
+        mov  %es,%bx
 
 LoadFile:
-		push ax
+		push %ax
 		call IsFat12
-		pop  ax
+		pop  %ax
 		jnc  LoadFile2
-		cmp  ax,0ff8h		    ; Check to see if this is the last cluster in the chain
+		cmp  %ax,0xff8						/* Check to see if this is the last cluster in the chain */
 		jmp  LoadFile3
 LoadFile2:
-		cmp  ax,0fff8h
+		cmp  %ax,0xfff8
 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]
-		pop  es
-
-		xor  bx,bx
-        mov  bl,BYTE [BYTE bp+SectsPerCluster]
-		shl  bx,5							; BX = BX * 512 / 16
-		mov  ax,es							; Increment the load address by
-		add  ax,bx							; The size of a cluster
-		mov  es,ax
+		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]
+		pop  %es
+
+		xor  %bx,%bx
+        mov  %bl,BYTE [%bp+SectsPerCluster]
+		shl  %bx,5							/* BX = BX * 512 / 16 */
+		mov  %ax,%es						/* Increment the load address by */
+		add  %ax,%bx						/* The size of a cluster */
+		mov  %es,%ax
 
 		call IsFat12
-		pop  ax
-		push es
+		pop  %ax
+		push %es
 		jnc  LoadFile4
-		call GetFatEntry12					; Get the next entry
+		call GetFatEntry12					/* Get the next entry */
 		jmp  LoadFile5
 LoadFile4:
 		call GetFatEntry16
 LoadFile5:
-		pop  es
-
-        jmp  LoadFile						; Load the next cluster (if any)
+		pop  %es
+
+        jmp  LoadFile						/* Load the next cluster (if any) */
 
 LoadFile_Done:
-        mov  dl,BYTE [BYTE bp+BootDrive]	; Load the boot drive into DL
-		mov  dh,[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)
-		push bx						; push offset
-		retf						; Transfer control to FreeLoader
-
-; Reads the entire FAT into memory at 7000:0000
+        mov  %dl,BYTE [%bp+BootDrive]		/* Load the boot drive into DL */
+		mov  %dh,[BootPartition]			/* Load the boot partition into DH */
+
+		push 0								/* push segment (0x0000) */
+		mov %bx, [0x80A8]					/* load the RVA of the EntryPoint into eax */
+		add %bx, 0x8000						/* RVA -> VA and skip 3 bytes (jump to fathelper code) */
+		push %bx							/* push offset */
+		retf								/* Transfer control to FreeLoader */
+
+// Reads the entire FAT into memory at 7000:0000
 ReadFatIntoMemory:
-        mov   ax,WORD [BYTE bp+HiddenSectors] 
-        mov   dx,WORD [BYTE bp+HiddenSectors+2]
-		add   ax,WORD [BYTE bp+ReservedSectors]
-		adc   dx,byte 0
-		mov   cx,WORD [BYTE bp+SectorsPerFat]
-		mov   bx,7000h
-		mov   es,bx
-		xor   bx,bx
-		call  [bp-ReadSectorsOffset]
-		ret
-
-
-; Returns the FAT entry for a given cluster number for 16-bit FAT
-; On entry AX has cluster number
-; On return AX has FAT entry for that cluster
+        mov   %ax,WORD [%bp+HiddenSectors] 
+        mov   %dx,WORD [%bp+HiddenSectors+2]
+		add   %ax,WORD [%bp+ReservedSectors]
+		adc   %dx,0
+		mov   %cx,WORD [%bp+SectorsPerFat]
+		mov   %bx,0x7000
+		mov   %es,%bx
+		xor   %bx,%bx
+		call  [%bp-ReadSectorsOffset]
+		ret
+
+
+// Returns the FAT entry for a given cluster number for 16-bit FAT
+// On entry AX has cluster number
+// On return AX has FAT entry for that cluster
 GetFatEntry16:
 
-		mov   cx,2						; AX = AX * 2 (since FAT16 entries are 2 bytes)
-		mul   cx
-		shl   dx,12
-
-        mov   bx,7000h
-		add   bx,dx
-        mov   es,bx
-		mov   bx,ax						; Restore FAT entry offset
-		mov   ax,WORD [es:bx]	    	; Get FAT entry
-
-		ret
-
-
-; Returns the FAT entry for a given cluster number for 12-bit FAT
-; On entry AX has cluster number
-; On return AX has FAT entry for that cluster
+		mov   %cx,2							/* AX = AX * 2 (since FAT16 entries are 2 bytes) */
+		mul   %cx
+		shl   %dx,12
+
+        mov   %bx,0x7000
+		add   %bx,%dx
+        mov   %es,%bx
+		mov   %bx,%ax						/* Restore FAT entry offset */
+		es mov   %ax,WORD [%bx]				/* Get FAT entry */
+
+		ret
+
+
+// Returns the FAT entry for a given cluster number for 12-bit FAT
+// On entry AX has cluster number
+// On return AX has FAT entry for that cluster
 GetFatEntry12:
 
-		push  ax
-		mov   cx,ax
-		shr   ax,1
-		add   ax,cx						; AX = AX * 1.5 (AX = AX + (AX / 2)) (since FAT12 entries are 12 bits)
-
-        mov   bx,7000h
-        mov   es,bx
-		mov   bx,ax						; Put FAT entry offset into BX
-		mov   ax,WORD [es:bx]	    	; Get FAT entry
-		pop   cx						; Get cluster number from stack
-		and   cx,1
+		push  %ax
+		mov   %cx,%ax
+		shr   %ax,1
+		add   %ax,%cx						/* AX = AX * 1.5 (AX = AX + (AX / 2)) (since FAT12 entries are 12 bits) */
+
+        mov   %bx,0x7000
+        mov   %es,%bx
+		mov   %bx,%ax						/* Put FAT entry offset into BX */
+		es mov   %ax,WORD [%bx]				/* Get FAT entry */
+		pop   %cx							/* Get cluster number from stack */
+		and   %cx,1
 		jz    UseLow12Bits
-		and   ax,0fff0h
-		shr   ax,4
+		and   %ax,0xfff0
+		shr   %ax,4
 		jmp   GetFatEntry12_Done
 
 UseLow12Bits:
-		and   ax,0fffh
+		and   %ax,0x0fff
 
 GetFatEntry12_Done:
 
 		ret
 
 
-; Returns CF = 1 if this is a FAT12 file system
-; Otherwise CF = 0 for FAT16
+// Returns CF = 1 if this is a FAT12 file system
+// Otherwise CF = 0 for FAT16
 IsFat12:
 
-		mov   ebx,DWORD [BYTE 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,DWORD [BYTE bp+HiddenSectors]
-
-
-		xor   eax,eax
-		mov   ax,WORD [BYTE bp+TotalSectors]
-		cmp   ax,byte 0
+		mov   %ebx,DWORD [%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,DWORD [%bp+HiddenSectors]
+
+
+		xor   %eax,%eax
+		mov   %ax,WORD [%bp+TotalSectors]
+		cmp   %ax,0
 		jnz   IsFat12_2
-		mov   eax,DWORD [BYTE bp+TotalSectorsBig]
-
-		; EAX now contains the number of sectors on the volume
+		mov   %eax,DWORD [%bp+TotalSectorsBig]
+
+		// EAX now contains the number of sectors on the volume
 
 IsFat12_2:
-		sub   eax,ebx				; Subtract data area start sector
-		xor   edx,edx				; from total sectors of volume
-
-		; EDX:EAX now contains the number of data sectors on the volume
-		movzx ebx,BYTE [BYTE bp+SectsPerCluster]
-		div   ebx
-		; EAX now has the number of clusters on the volume
+		sub   %eax,%ebx						/* Subtract data area start sector */
+		xor   %edx,%edx						/* from total sectors of volume */
+
+		// EDX:EAX now contains the number of data sectors on the volume
+		xor %ebx,%ebx
+		mov %bl,BYTE [%bp+SectsPerCluster]
+		div   %ebx
+		// EAX now has the number of clusters on the volume
 		stc
-		cmp   eax,4085
+		cmp   %eax,4085
 		jb    IsFat12_Done
 		clc
 
@@ -229,7 +225,9 @@
 
 
 
-msgLoading	db 'Loading FreeLoader...',0dh,0ah,0
-
-			times 510-($-$$) db 0	; Pad to 510 bytes
-			dw 0aa55h				; BootSector signature
+msgLoading:
+		.asciz "Loading FreeLoader...\r\n"
+
+		.org 0x1fe
+blockend:
+		.word 0x0aa55						/* BootSector signature */

Removed: branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.asm
URL: http://svn.reactos.org/svn/reactos/branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.asm?rev=48686&view=auto
==============================================================================
--- branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.asm [iso-8859-1] (original)
+++ branches/cmake-bringup/boot/freeldr/freeldr/arch/i386/fathelp.asm (removed)
@@ -1,235 +1,0 @@
-; FATHELP.ASM
-; FAT12/16 Boot Sector Helper Code
-; Copyright (c) 1998, 2001, 2002, 2003 Brian Palmer
-
-
-
-;org 8000h
-
-segment .text
-
-bits 16
-
-
-BootSectorStackTop		equ		0x7bf2
-DataAreaStartHigh		equ		0x2
-DataAreaStartLow		equ		0x4
-BiosCHSDriveSizeHigh	equ		0x6
-BiosCHSDriveSizeLow		equ		0x8
-BiosCHSDriveSize		equ		0x8
-ReadSectorsOffset		equ		0xa
-ReadClusterOffset		equ		0xc
-PutCharsOffset			equ		0xe
-
-OEMName					equ		3
-BytesPerSector			equ		11
-SectsPerCluster			equ		13
-ReservedSectors			equ		14
-NumberOfFats			equ		16
-MaxRootEntries			equ		17
-TotalSectors			equ		19
-MediaDescriptor			equ		21
-SectorsPerFat			equ		22
-SectorsPerTrack			equ		24
-NumberOfHeads			equ		26
-HiddenSectors			equ		28
-TotalSectorsBig			equ		32
-BootDrive				equ		36
-Reserved				equ		37
-ExtendSig				equ		38
-SerialNumber			equ		39
-VolumeLabel				equ		43
-FileSystem				equ		54
-
-BootPartition			equ		0x7dfd
-        
-
-; This code will be stored in the first 512 bytes
-; of freeldr.sys. The first 3 bytes will be a jmp
-; instruction to skip past the FAT helper code
-; that is stored in the rest of the 512 bytes.
-;
-; 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
-_mainCRTStartup:
-global start
-start:
-        db	0xe9
-		db	0xfd
-		db	0x01
-
-; Now starts the extra boot code that we will store
-; in the first 512 bytes of freeldr.sys. This code
-; allows the FAT12/16 bootsector to navigate the
-; FAT table so that we can still load freeldr.sys
-; even if it is fragmented.
-
-
-FatHelperEntryPoint:
-
-		push ax							; First save AX - the start cluster of freeldr.sys
-
-
-		; Display "Loading FreeLoader..." message
-        mov  esi,msgLoading				; Loading message
-        call [bp-PutCharsOffset]		; Display it
-
-
-		call ReadFatIntoMemory
-
-		pop  ax							; Restore AX (start cluster)
-		; AX has start cluster of freeldr.sys
-
-        mov  bx,800h
-        mov  es,bx
-
-LoadFile:
-		push ax
-		call IsFat12
-		pop  ax
-		jnc  LoadFile2
-		cmp  ax,0ff8h		    ; Check to see if this is the last cluster in the chain
-		jmp  LoadFile3
-LoadFile2:
-		cmp  ax,0fff8h
-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]
-		pop  es
-
-		xor  bx,bx
-        mov  bl,BYTE [BYTE bp+SectsPerCluster]
-		shl  bx,5							; BX = BX * 512 / 16
-		mov  ax,es							; Increment the load address by
-		add  ax,bx							; The size of a cluster
-		mov  es,ax
-
-		call IsFat12
-		pop  ax
-		push es
-		jnc  LoadFile4
-		call GetFatEntry12					; Get the next entry
-		jmp  LoadFile5
-LoadFile4:
-		call GetFatEntry16
-LoadFile5:
-		pop  es
-
-        jmp  LoadFile						; Load the next cluster (if any)
-
-LoadFile_Done:
-        mov  dl,BYTE [BYTE bp+BootDrive]	; Load the boot drive into DL
-		mov  dh,[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)
-		push bx						; push offset
-		retf						; Transfer control to FreeLoader
-
-; Reads the entire FAT into memory at 7000:0000
-ReadFatIntoMemory:
-        mov   ax,WORD [BYTE bp+HiddenSectors] 
-        mov   dx,WORD [BYTE bp+HiddenSectors+2]
-		add   ax,WORD [BYTE bp+ReservedSectors]
-		adc   dx,byte 0
-		mov   cx,WORD [BYTE bp+SectorsPerFat]
-		mov   bx,7000h
-		mov   es,bx
-		xor   bx,bx
-		call  [bp-ReadSectorsOffset]
-		ret
-
-
-; Returns the FAT entry for a given cluster number for 16-bit FAT
-; On entry AX has cluster number
-; On return AX has FAT entry for that cluster
-GetFatEntry16:
-
-		mov   cx,2						; AX = AX * 2 (since FAT16 entries are 2 bytes)
-		mul   cx
-		shl   dx,12
-
-        mov   bx,7000h
-		add   bx,dx
-        mov   es,bx
-		mov   bx,ax						; Restore FAT entry offset
-		mov   ax,WORD [es:bx]	    	; Get FAT entry
-
-		ret
-
-
-; Returns the FAT entry for a given cluster number for 12-bit FAT
-; On entry AX has cluster number
-; On return AX has FAT entry for that cluster
-GetFatEntry12:
-
-		push  ax
-		mov   cx,ax
-		shr   ax,1
-		add   ax,cx						; AX = AX * 1.5 (AX = AX + (AX / 2)) (since FAT12 entries are 12 bits)
-
-        mov   bx,7000h
-        mov   es,bx
-		mov   bx,ax						; Put FAT entry offset into BX
-		mov   ax,WORD [es:bx]	    	; Get FAT entry
-		pop   cx						; Get cluster number from stack
-		and   cx,1
-		jz    UseLow12Bits
-		and   ax,0fff0h
-		shr   ax,4
-		jmp   GetFatEntry12_Done
-
-UseLow12Bits:
-		and   ax,0fffh
-
-GetFatEntry12_Done:
-
-		ret
-
-
-; Returns CF = 1 if this is a FAT12 file system
-; Otherwise CF = 0 for FAT16
-IsFat12:
-
-		mov   ebx,DWORD [BYTE 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,DWORD [BYTE bp+HiddenSectors]
-
-
-		xor   eax,eax
-		mov   ax,WORD [BYTE bp+TotalSectors]
-		cmp   ax,byte 0
-		jnz   IsFat12_2
-		mov   eax,DWORD [BYTE bp+TotalSectorsBig]
-
-		; EAX now contains the number of sectors on the volume
-
-IsFat12_2:
-		sub   eax,ebx				; Subtract data area start sector
-		xor   edx,edx				; from total sectors of volume
-
-		; EDX:EAX now contains the number of data sectors on the volume
-		movzx ebx,BYTE [BYTE bp+SectsPerCluster]
-		div   ebx
-		; EAX now has the number of clusters on the volume
-		stc
-		cmp   eax,4085
-		jb    IsFat12_Done
-		clc
-
-IsFat12_Done:
-		ret
-
-
-
-msgLoading	db 'Loading FreeLoader...',0dh,0ah,0
-
-			times 510-($-$$) db 0	; Pad to 510 bytes
-			dw 0aa55h				; BootSector signature




More information about the Ros-diffs mailing list