[ros-diffs] [cwittich] 23742: renamed isoboot_regtest.asm to isobtrt.asm to comply with ISO-9660 standard

cwittich at svn.reactos.org cwittich at svn.reactos.org
Sun Aug 27 15:26:44 CEST 2006


Author: cwittich
Date: Sun Aug 27 17:26:43 2006
New Revision: 23742

URL: http://svn.reactos.org/svn/reactos?rev=23742&view=rev
Log:
renamed isoboot_regtest.asm to isobtrt.asm to comply with ISO-9660 standard

Added:
    trunk/reactos/boot/freeldr/bootsect/isobtrt.asm
      - copied unchanged from r23740, trunk/reactos/boot/freeldr/bootsect/isoboot_regtest.asm
Removed:
    trunk/reactos/boot/freeldr/bootsect/isoboot_regtest.asm
Modified:
    trunk/reactos/boot/freeldr/bootsect/bootsect.rbuild

Modified: trunk/reactos/boot/freeldr/bootsect/bootsect.rbuild
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/bootsect/bootsect.rbuild?rev=23742&r1=23741&r2=23742&view=diff
==============================================================================
--- trunk/reactos/boot/freeldr/bootsect/bootsect.rbuild (original)
+++ trunk/reactos/boot/freeldr/bootsect/bootsect.rbuild Sun Aug 27 17:26:43 2006
@@ -18,9 +18,9 @@
 	<bootstrap base="loader" nameoncd="isoboot.bin" />
 	<file>isoboot.asm</file>
 </module>
-<module name="isoboot_regtest" type="bootsector">
-	<bootstrap base="loader" nameoncd="isoboot_regtest.bin" />
-	<file>isoboot_regtest.asm</file>
+<module name="isobtrt" type="bootsector">
+	<bootstrap base="loader" nameoncd="isobtrt.bin" />
+	<file>isobtrt.asm</file>
 </module>
 <if property="ARCH" value="powerpc">
 	<module name="ofwldr" type="bootprogram" payload="freeldr">

Removed: trunk/reactos/boot/freeldr/bootsect/isoboot_regtest.asm
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/bootsect/isoboot_regtest.asm?rev=23741&view=auto
==============================================================================
--- trunk/reactos/boot/freeldr/bootsect/isoboot_regtest.asm (original)
+++ trunk/reactos/boot/freeldr/bootsect/isoboot_regtest.asm (removed)
@@ -1,1023 +1,0 @@
-; ****************************************************************************
-;
-;  isolinux.asm
-;
-;  A program to boot Linux kernels off a CD-ROM using the El Torito
-;  boot standard in "no emulation" mode, making the entire filesystem
-;  available.  It is based on the SYSLINUX boot loader for MS-DOS
-;  floppies.
-;
-;   Copyright (C) 1994-2001  H. Peter Anvin
-;
-;  This program is free software; you can redistribute it and/or modify
-;  it under the terms of the GNU General Public License as published by
-;  the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
-;  USA; either version 2 of the License, or (at your option) any later
-;  version; incorporated herein by reference.
-; 
-; ****************************************************************************
-;
-; THIS FILE IS A MODIFIED VERSION OF ISOLINUX.ASM
-; MODIFICATION DONE BY MICHAEL K TER LOUW
-; LAST UPDATED 3-9-2002
-; SEE "COPYING" FOR INFORMATION ABOUT THE LICENSE THAT APPLIES TO THIS RELEASE
-;
-; ****************************************************************************
-;
-; This file is a modified version of ISOLINUX.ASM.
-; Modification done by Eric Kohl
-; Last update 04-25-2002
-;
-; ****************************************************************************
-;
-; This file is a modified version of ISOLINUX.ASM.
-; (for ReactOS regression testing)
-; Modification done by Christoph von Wittich
-; Last update 08-27-2006
-;
-; ****************************************************************************
-
-
-; Note: The Makefile builds one version with DEBUG_MESSAGES automatically.
-;%define DEBUG_MESSAGES                ; Uncomment to get debugging messages
-
-%define WAIT_FOR_KEY
-
-
-; ---------------------------------------------------------------------------
-;   BEGIN THE BIOS/CODE/DATA SEGMENT
-; ---------------------------------------------------------------------------
-
-		absolute 0400h
-serial_base	resw 4			; Base addresses for 4 serial ports
-		absolute 0413h
-BIOS_fbm	resw 1			; Free Base Memory (kilobytes)
-		absolute 046Ch
-BIOS_timer	resw 1			; Timer ticks
-		absolute 0472h
-BIOS_magic	resw 1			; BIOS reset magic
-		absolute 0484h
-BIOS_vidrows	resb 1			; Number of screen rows
-
-;
-; Memory below this point is reserved for the BIOS and the MBR
-;
-		absolute 1000h
-trackbuf	resb 8192		; Track buffer goes here
-trackbufsize	equ $-trackbuf
-;		trackbuf ends at 3000h
-
-		struc open_file_t
-file_sector	resd 1			; Sector pointer (0 = structure free)
-file_left	resd 1			; Number of sectors left
-		endstruc
-
-		struc dir_t
-dir_lba		resd 1			; Directory start (LBA)
-dir_len		resd 1			; Length in bytes
-dir_clust	resd 1			; Length in clusters
-		endstruc
-
-
-MAX_OPEN_LG2	equ 2			; log2(Max number of open files)
-MAX_OPEN	equ (1 << MAX_OPEN_LG2)
-SECTORSIZE_LG2	equ 11			; 2048 bytes/sector (El Torito requirement)
-SECTORSIZE	equ (1 << SECTORSIZE_LG2)
-CR		equ 13			; Carriage Return
-LF		equ 10			; Line Feed
-retry_count	equ 6			; How patient are we with the BIOS?
-
-
-
-	absolute 5000h				; Here we keep our BSS stuff
-
-DriveNo		resb 1			; CD-ROM BIOS drive number
-DiskError	resb 1			; Error code for disk I/O
-RetryCount	resb 1			; Used for disk access retries
-TimeoutCount	resb 1			; Timeout counter
-ISOFlags	resb 1			; Flags for ISO directory search
-RootDir		resb dir_t_size		; Root directory
-CurDir		resb dir_t_size		; Current directory
-ISOFileName	resb 64			; ISO filename canonicalization buffer
-ISOFileNameEnd	equ $
-
-
-		alignb open_file_t_size
-Files		resb MAX_OPEN*open_file_t_size
-
-
-
-	section .text
-	org 7000h
-
-start:
-	cli					; Disable interrupts
-	xor	ax, ax				; ax = segment zero
-	mov	ss, ax				; Initialize stack segment
-	mov	sp, start			; Set up stack
-	mov	ds, ax				; Initialize other segment registers
-	mov	es, ax
-	mov	fs, ax
-	mov	gs, ax
-	sti					; Enable interrupts
-	cld					; Increment pointers
-
-	mov	cx, 2048 >> 2			; Copy the bootsector
-	mov	si, 0x7C00			; from 0000:7C00
-	mov	di, 0x7000			; to 0000:7000
-	rep	movsd				; copy the program
-	jmp	0:relocate			; jump into relocated code
-
-relocate:
-	; Display the banner and copyright
-%ifdef DEBUG_MESSAGES
-	mov	si, isolinux_banner		; si points to hello message
-	call	writestr			; display the message
-	mov	si,copyright_str
-	call	writestr
-%endif
-
-
-	; Make sure the keyboard buffer is empty
-%ifdef WAIT_FOR_KEY
-.kbd_buffer_test:
-	call	pollchar
-	jz	.kbd_buffer_empty
-	call	getchar
-	jmp	.kbd_buffer_test
-.kbd_buffer_empty:
-
-	; Check if there is harddisk
-	pusha
-	mov	ax, 0800h
-	mov	dx, 0080h
-	int	13h
-	popa
-	jmp	.boot_cdrom
-
-	; Display the 'Press key' message and wait for a maximum of 5 seconds
-	call	crlf
-	mov	si, presskey_msg		; si points to 'Press key' message
-	call	writestr			; display the message
-
-	mov	byte [TimeoutCount], 5
-.next_second:
-	mov	eax, [BIOS_timer]		; load current tick counter
-	add	eax, 19				; 
-
-.poll_again:
-	call	pollchar
-	jnz	.boot_cdrom
-
-	mov	ebx, [BIOS_timer]
-	cmp	eax, ebx
-	jnz	.poll_again
-
-	mov	si, dot_msg			; print '.'
-	call	writestr
-	dec	byte [TimeoutCount]		; decrement timeout counter
-	jz	.boot_harddisk
-	jmp	.next_second
-
-.boot_harddisk:
-	call	crlf
-
-	; Boot first harddisk (drive 0x80)
-	mov	ax, 0201h
-	mov	dx, 0080h
-	mov	cx, 0001h
-	mov	bx, 7C00h
-	int	13h
-	jnc	.go_hd
-	jmp	kaboom
-.go_hd:
-	mov	ax, cs
-	mov	ds, ax
-	mov	es, ax
-	mov	fs, ax
-	mov	gs, ax
-	mov	dx, 0080h
-
-	jmp	0:0x7C00
-%endif
-
-.boot_cdrom:
-%ifdef WAIT_FOR_KEY
-	call	crlf
-	call	crlf
-%endif
-
-	; Save and display the boot drive number
-	mov	[DriveNo], dl
-%ifdef DEBUG_MESSAGES
-	mov	si, startup_msg
-	call	writemsg
-	mov	al, dl
-	call	writehex2
-	call	crlf
-%endif
-
-	; Now figure out what we're actually doing
-	; Note: use passed-in DL value rather than 7Fh because
-	; at least some BIOSes will get the wrong value otherwise
-	mov	ax, 4B01h			; Get disk emulation status
-	mov	dl, [DriveNo]
-	mov	si, spec_packet
-	int	13h
-	jc	near spec_query_failed		; Shouldn't happen (BIOS bug)
-	mov	dl, [DriveNo]
-	cmp	[sp_drive], dl			; Should contain the drive number
-	jne	near spec_query_failed
-
-%ifdef DEBUG_MESSAGES
-	mov	si, spec_ok_msg
-	call	writemsg
-	mov	al, byte [sp_drive]
-	call	writehex2
-	call	crlf
-%endif
-
-found_drive:
-	; Get drive information
-	mov	ah, 48h
-	mov	dl, [DriveNo]
-	mov	si, drive_params
-	int	13h
-	jnc	params_ok
-
-	; mov	si, nosecsize_msg	No use in reporting this
-	; call	writemsg
-
-params_ok:
-	; Check for the sector size (should be 2048, but
-	; some BIOSes apparently think we're 512-byte media)
-	;
-	; FIX: We need to check what the proper behaviour
-	; is for getlinsec when the BIOS thinks the sector
-	; size is 512!!!  For that, we need such a BIOS, though...
-%ifdef DEBUG_MESSAGES
-	mov	si, secsize_msg
-	call	writemsg
-	mov	ax, [dp_secsize]
-	call	writehex4
-	call	crlf
-%endif
-
-
-	;
-	; Clear Files structures
-	;
-	mov	di, Files
-	mov	cx, (MAX_OPEN*open_file_t_size)/4
-	xor	eax, eax
-	rep	stosd
-
-	;
-	; Now, we need to sniff out the actual filesystem data structures.
-	; mkisofs gave us a pointer to the primary volume descriptor
-	; (which will be at 16 only for a single-session disk!); from the PVD
-	; we should be able to find the rest of what we need to know.
-	;
-get_fs_structures:
-	mov	eax, 16			; Primary Volume Descriptor (sector 16)
-	mov	bx, trackbuf
-	call	getonesec
-
-	mov	eax, [trackbuf+156+2]
-	mov	[RootDir+dir_lba],eax
-	mov	[CurDir+dir_lba],eax
-%ifdef DEBUG_MESSAGES
-	mov	si, rootloc_msg
-	call	writemsg
-	call	writehex8
-	call	crlf
-%endif
-
-	mov	eax,[trackbuf+156+10]
-	mov	[RootDir+dir_len],eax
-	mov	[CurDir+dir_len],eax
-%ifdef DEBUG_MESSAGES
-	mov	si, rootlen_msg
-	call	writemsg
-	call	writehex8
-	call	crlf
-%endif
-	add	eax,SECTORSIZE-1
-	shr	eax,SECTORSIZE_LG2
-	mov	[RootDir+dir_clust],eax
-	mov	[CurDir+dir_clust],eax
-%ifdef DEBUG_MESSAGES
-	mov	si, rootsect_msg
-	call	writemsg
-	call	writehex8
-	call	crlf
-%endif
-
-	; Look for the "REACTOS" directory, and if found,
-	; make it the current directory instead of the root
-	; directory.
-	mov	di,isolinux_dir
-	mov	al,02h				; Search for a directory
-	call	searchdir_iso
-	jnz	.dir_found
-	mov	si,no_dir_msg
-	call	writemsg
-	jmp	kaboom
-
-.dir_found:
-	mov	[CurDir+dir_len],eax
-	mov	eax,[si+file_left]
-	mov	[CurDir+dir_clust],eax
-	xor	eax,eax				; Free this file pointer entry
-	xchg	eax,[si+file_sector]
-	mov	[CurDir+dir_lba],eax
-
-
-	mov	di, isolinux_bin		; di points to Isolinux filename
-	call	searchdir			; look for the file
-	jnz	.isolinux_opened		; got the file
-	mov	si, no_isolinux_msg		; si points to error message
-	call	writemsg			; display the message
-	jmp	kaboom				; fail boot
-
-.isolinux_opened:
-	mov	di, si				; save file pointer
-
-%ifdef DEBUG_MESSAGES
-	mov	si, filelen_msg
-	call	writemsg
-	call	writehex8
-	call	crlf
-%endif
-
-	mov ecx, eax			; calculate sector count
-	shr ecx, 11
-	test eax, 0x7FF
-	jz .full_sector
-	inc ecx
-.full_sector:
-
-%ifdef DEBUG_MESSAGES
-	mov eax, ecx
-	mov	si, filesect_msg
-	call	writemsg
-	call	writehex8
-	call	crlf
-%endif
-
-	mov	bx, 0x8000			; bx = load address
-	mov	si, di				; restore file pointer
-	mov	cx, 0xFFFF			; load the whole file
-	call	getfssec			; get the whole file
-
-%ifdef DEBUG_MESSAGES
-	mov	si, startldr_msg
-	call	writemsg
-	call	crlf
-%endif
-
-	mov	dl, [DriveNo]			; dl = boot drive
-	mov dh, 0					; dh = boot partition
-	jmp	0:0x8000			; jump into OSLoader
-
-
-
-;
-; searchdir:
-;
-; Open a file
-;
-;  On entry:
-;	DS:DI	= filename
-;  If successful:
-;	ZF clear
-;	SI		= file pointer
-;	DX:AX or EAX	= file length in bytes
-;  If unsuccessful
-;	ZF set
-;
-
-;
-; searchdir_iso is a special entry point for ISOLINUX only.  In addition
-; to the above, searchdir_iso passes a file flag mask in AL.  This is useful
-; for searching for directories.
-;
-alloc_failure:
-	xor	ax,ax				; ZF <- 1
-	ret
-
-searchdir:
-	xor	al,al
-searchdir_iso:
-	mov	[ISOFlags],al
-	call	allocate_file			; Temporary file structure for directory
-	jnz	alloc_failure
-	push	es
-	push	ds
-	pop	es				; ES = DS
-	mov	si,CurDir
-	cmp	byte [di],'\'			; If filename begins with slash
-	jne	.not_rooted
-	inc	di				; Skip leading slash
-	mov	si,RootDir			; Reference root directory instead
-.not_rooted:
-	mov	eax,[si+dir_clust]
-	mov	[bx+file_left],eax
-	mov	eax,[si+dir_lba]
-	mov	[bx+file_sector],eax
-	mov	edx,[si+dir_len]
-
-.look_for_slash:
-	mov	ax,di
-.scan:
-	mov	cl,[di]
-	inc	di
-	and	cl,cl
-	jz	.isfile
-	cmp	cl,'\'
-	jne	.scan
-	mov	[di-1],byte 0			; Terminate at directory name
-	mov	cl,02h				; Search for directory
-	xchg	cl,[ISOFlags]
-	push	di
-	push	cx
-	push	word .resume			; Where to "return" to
-	push	es
-.isfile:
-	xchg	ax,di
-
-.getsome:
-	; Get a chunk of the directory
-	mov	si,trackbuf
-	pushad
-	xchg	bx,si
-	mov	cx,1				; load one sector
-	call	getfssec
-	popad
-
-.compare:
-	movzx	eax, byte [si]			; Length of directory entry
-	cmp	al, 33
-	jb	.next_sector
-	mov	cl, [si+25]
-	xor	cl, [ISOFlags]
-	test	cl, byte 8Eh			; Unwanted file attributes!
-	jnz	.not_file
-	pusha
-	movzx	cx, byte [si+32]		; File identifier length
-	add	si, byte 33			; File identifier offset
-	call	iso_compare_names
-	popa
-	je	.success
-.not_file:
-	sub	edx, eax			; Decrease bytes left
-	jbe	.failure
-	add	si, ax				; Advance pointer
-
-.check_overrun:
-	; Did we finish the buffer?
-	cmp	si, trackbuf+trackbufsize
-	jb	.compare			; No, keep going
-
-	jmp	short .getsome			; Get some more directory
-
-.next_sector:
-	; Advance to the beginning of next sector
-	lea	ax, [si+SECTORSIZE-1]
-	and	ax, ~(SECTORSIZE-1)
-	sub	ax, si
-	jmp	short .not_file			; We still need to do length checks
-
-.failure:
-%ifdef DEBUG_MESSAGES
-	mov	si, findfail_msg
-	call	writemsg
-	call	crlf
-%endif
-	xor	eax, eax			; ZF = 1
-	mov	[bx+file_sector], eax
-	pop	es
-	ret
-
-.success:
-	mov	eax, [si+2]			; Location of extent
-	mov	[bx+file_sector], eax
-	mov	eax, [si+10]			; Data length
-	push	eax
-	add	eax, SECTORSIZE-1
-	shr	eax, SECTORSIZE_LG2
-	mov	[bx+file_left], eax
-	pop	eax
-	mov	edx, eax
-	shr	edx, 16
-	and	bx, bx				; ZF = 0
-	mov	si, bx
-	pop	es
-	ret
-
-.resume:
-	; We get here if we were only doing part of a lookup
-	; This relies on the fact that .success returns bx == si
-	xchg	edx, eax			; Directory length in edx
-	pop	cx				; Old ISOFlags
-	pop	di				; Next filename pointer
-
-	mov	byte [di-1], '\'		; restore the backslash in the filename
-
-	mov	[ISOFlags], cl			; Restore the flags
-	jz	.failure			; Did we fail?  If so fail for real!
-	jmp	.look_for_slash			; Otherwise, next level
-
-;
-; allocate_file: Allocate a file structure
-;
-;		If successful:
-;		  ZF set
-;		  BX = file pointer
-;		In unsuccessful:
-;		  ZF clear
-;
-allocate_file:
-	push	cx
-	mov	bx, Files
-	mov	cx, MAX_OPEN
-.check:
-	cmp	dword [bx], byte 0
-	je	.found
-	add	bx, open_file_t_size		; ZF = 0
-	loop	.check
-	; ZF = 0 if we fell out of the loop
-.found:
-	pop	cx
-	ret
-
-;
-; iso_compare_names:
-;	Compare the names DS:SI and DS:DI and report if they are
-;	equal from an ISO 9660 perspective.  SI is the name from
-;	the filesystem; CX indicates its length, and ';' terminates.
-;	DI is expected to end with a null.
-;
-;	Note: clobbers AX, CX, SI, DI; assumes DS == ES == base segment
-;
-iso_compare_names:
-	; First, terminate and canonicalize input filename
-	push	di
-	mov	di, ISOFileName
-.canon_loop:
-	jcxz	.canon_end
-	lodsb
-	dec	cx
-	cmp	al, ';'
-	je	.canon_end
-	and	al, al
-	je	.canon_end
-	stosb
-	cmp	di, ISOFileNameEnd-1		; Guard against buffer overrun
-	jb	.canon_loop
-.canon_end:
-	cmp	di, ISOFileName
-	jbe	.canon_done
-	cmp	byte [di-1], '.'		; Remove terminal dots
-	jne	.canon_done
-	dec	di
-	jmp	short .canon_end
-.canon_done:
-	mov	[di], byte 0			; Null-terminate string
-	pop	di
-	mov	si, ISOFileName
-.compare:
-	lodsb
-	mov	ah, [di]
-	inc	di
-	and	ax, ax
-	jz	.success			; End of string for both
-	and	al, al				; Is either one end of string?
-	jz	.failure			; If so, failure
-	and	ah, ah
-	jz	.failure
-	or	ax, 2020h			; Convert to lower case
-	cmp	al, ah
-	je	.compare
-.failure:
-	and	ax, ax				; ZF = 0 (at least one will be nonzero)
-.success:
-	ret
-
-
-
-
-
-
-
-;
-; getfssec: Get multiple clusters from a file, given the file pointer.
-;
-;  On entry:
-;	ES:BX	-> Buffer
-;	SI	-> File pointer
-;	CX	-> Cluster count; 0FFFFh = until end of file
-;  On exit:
-;	SI	-> File pointer (or 0 on EOF)
-;	CF = 1	-> Hit EOF
-;
-getfssec:
-	cmp	cx, [si+file_left]
-	jna	.ok_size
-	mov	cx, [si+file_left]
-
-.ok_size:
-	mov	bp, cx
-	push	cx
-	push	si
-	mov	eax, [si+file_sector]
-	call	getlinsec
-	xor	ecx, ecx
-	pop	si
-	pop	cx
-
-	add	[si+file_sector], ecx
-	sub	[si+file_left], ecx
-	ja	.not_eof			; CF = 0
-
-	xor	ecx, ecx
-	mov	[si+file_sector], ecx		; Mark as unused
-	xor	si,si
-	stc
-
-.not_eof:
-	ret
-
-
-
-; INT 13h, AX=4B01h, DL=<passed in value> failed.
-; Try to scan the entire 80h-FFh from the end.
-spec_query_failed:
-	mov	si,spec_err_msg
-	call	writemsg
-
-	mov	dl, 0FFh
-.test_loop:
-	pusha
-	mov	ax, 4B01h
-	mov	si, spec_packet
-	mov	byte [si], 13			; Size of buffer
-	int	13h
-	popa
-	jc	.still_broken
-
-	mov	si, maybe_msg
-	call	writemsg
-	mov	al, dl
-	call	writehex2
-	call	crlf
-
-	cmp	byte [sp_drive], dl
-	jne	.maybe_broken
-
-	; Okay, good enough...
-	mov	si, alright_msg
-	call	writemsg
-	mov	[DriveNo], dl
-.found_drive:
-	jmp	found_drive
-
-	; Award BIOS 4.51 apparently passes garbage in sp_drive,
-	; but if this was the drive number originally passed in
-	; DL then consider it "good enough"
-.maybe_broken:
-	cmp	byte [DriveNo], dl
-	je	.found_drive
-
-.still_broken:
-	dec dx
-	cmp	dl, 80h
-	jnb	.test_loop
-
-fatal_error:
-	mov	si, nothing_msg
-	call	writemsg
-
-.norge:
-	jmp	short .norge
-
-
-
-	; Information message (DS:SI) output
-	; Prefix with "isolinux: "
-	;
-writemsg:
-	push	ax
-	push	si
-	mov	si, isolinux_str
-	call	writestr
-	pop	si
-	call	writestr
-	pop	ax
-	ret
-
-;
-; crlf: Print a newline
-;
-crlf:
-	mov	si, crlf_msg
-	; Fall through
-
-;
-; writestr: write a null-terminated string to the console, saving
-;           registers on entry.
-;
-writestr:
-	pushfd
-	pushad
-.top:
-	lodsb
-	and	al, al
-	jz	.end
-	call	writechr
-	jmp	short .top
-.end:
-	popad
-	popfd
-	ret
-
-
-;
-; writehex[248]: Write a hex number in (AL, AX, EAX) to the console
-;
-writehex2:
-	pushfd
-	pushad
-	shl	eax, 24
-	mov	cx, 2
-	jmp	short writehex_common
-writehex4:
-	pushfd
-	pushad
-	shl	eax, 16
-	mov	cx, 4
-	jmp	short writehex_common
-writehex8:
-	pushfd
-	pushad
-	mov	cx, 8
-writehex_common:
-.loop:
-	rol	eax, 4
-	push	eax
-	and	al, 0Fh
-	cmp	al, 10
-	jae	.high
-.low:
-	add	al, '0'
-	jmp	short .ischar
-.high:
-	add	al, 'A'-10
-.ischar:
-	call	writechr
-	pop	eax
-	loop	.loop
-	popad
-	popfd
-	ret
-
-;
-; Write a character to the screen.  There is a more "sophisticated"
-; version of this in the subsequent code, so we patch the pointer
-; when appropriate.
-;
-
-writechr:
-	pushfd
-	pushad
-	mov	ah, 0Eh
-	xor	bx, bx
-	int	10h
-	popad
-	popfd
-	ret
-
-;
-; Get one sector.  Convenience entry point.
-;
-getonesec:
-	mov	bp, 1
-	; Fall through to getlinsec
-
-;
-; Get linear sectors - EBIOS LBA addressing, 2048-byte sectors.
-;
-; Note that we can't always do this as a single request, because at least
-; Phoenix BIOSes has a 127-sector limit.  To be on the safe side, stick
-; to 32 sectors (64K) per request.
-;
-; Input:
-;	EAX	- Linear sector number
-;	ES:BX	- Target buffer
-;	BP	- Sector count
-;
-getlinsec:
-	mov si,dapa			; Load up the DAPA
-	mov [si+4],bx
-	mov bx,es
-	mov [si+6],bx
-	mov [si+8],eax
-.loop2:
-	push bp				; Sectors left
-	cmp bp,[MaxTransfer]
-	jbe .bp_ok
-	mov bp,[MaxTransfer]
-.bp_ok:
-	mov [si+2],bp
-	push si
-	mov dl,[DriveNo]
-	mov ah,42h			; Extended Read
-	call xint13
-	pop si
-	pop bp
-	movzx eax,word [si+2]		; Sectors we read
-	add [si+8],eax			; Advance sector pointer
-	sub bp,ax			; Sectors left
-	shl ax,SECTORSIZE_LG2-4		; 2048-byte sectors -> segment
-	add [si+6],ax			; Advance buffer pointer
-	and bp,bp
-	jnz .loop2
-	mov eax,[si+8]			; Next sector
-	ret
-
-	; INT 13h with retry
-xint13:
-	mov	byte [RetryCount], retry_count
-.try:
-	pushad
-	int	13h
-	jc	.error
-	add	sp, byte 8*4			; Clean up stack
-	ret
-.error:
-	mov	[DiskError], ah		; Save error code
-	popad
-	dec byte [RetryCount]
-	jz .real_error
-	push ax
-	mov al,[RetryCount]
-	mov ah,[dapa+2]			; Sector transfer count
-	cmp al,2			; Only 2 attempts left
-	ja .nodanger
-	mov ah,1			; Drop transfer size to 1
-	jmp short .setsize
-.nodanger:
-	cmp al,retry_count-2
-	ja .again			; First time, just try again
-	shr ah,1			; Otherwise, try to reduce
-	adc ah,0			; the max transfer size, but not to 0
-.setsize:
-	mov [MaxTransfer],ah
-	mov [dapa+2],ah
-.again:
-	pop ax
-	jmp .try
-
-.real_error:
-	mov	si, diskerr_msg
-	call	writemsg
-	mov	al, [DiskError]
-	call	writehex2
-	mov	si, ondrive_str
-	call	writestr
-	mov	al, dl
-	call	writehex2
-	call	crlf
-	; Fall through to kaboom
-
-;
-; kaboom: write a message and bail out.  Wait for a user keypress,
-;	  then do a hard reboot.
-;
-kaboom:
-	mov	ax, cs
-	mov	ds, ax
-	mov	es, ax
-	mov	fs, ax
-	mov	gs, ax
-	sti
-	mov	si, err_bootfailed
-	call	writestr
-	call	getchar
-	cli
-	mov	word [BIOS_magic], 0	; Cold reboot
-	jmp	0F000h:0FFF0h		; Reset vector address
-
-getchar:
-.again:
-	mov	ah, 1		; Poll keyboard
-	int	16h
-	jz	.again
-.kbd:
-	xor	ax, ax		; Get keyboard input
-	int	16h
-.func_key:
-	ret
-
-
-;
-; pollchar: check if we have an input character pending (ZF = 0)
-;
-pollchar:
-	pushad
-	mov ah,1		; Poll keyboard
-	int 16h
-	popad
-	ret
-
-
-
-isolinux_banner	db CR, LF, 'Loading IsoBoot...', CR, LF, 0
-copyright_str	db ' Copyright (C) 1994-2002 H. Peter Anvin', CR, LF, 0
-presskey_msg	db 'Press any key to boot from CD', 0
-dot_msg		db '.',0
-
-%ifdef DEBUG_MESSAGES
-startup_msg:	db 'Starting up, DL = ', 0
-spec_ok_msg:	db 'Loaded spec packet OK, drive = ', 0
-secsize_msg:	db 'Sector size appears to be ', 0
-rootloc_msg:	db 'Root directory location: ', 0
-rootlen_msg:	db 'Root directory length: ', 0
-rootsect_msg:	db 'Root directory length(sectors): ', 0
-fileloc_msg:	db 'SETUPLDR.SYS location: ', 0
-filelen_msg:	db 'SETUPLDR.SYS length: ', 0
-filesect_msg:	db 'SETUPLDR.SYS length(sectors): ', 0
-findfail_msg:	db 'Failed to find file!', 0
-startldr_msg:	db 'Starting SETUPLDR.SYS', 0
-%endif
-
-nosecsize_msg:	db 'Failed to get sector size, assuming 0800', CR, LF, 0
-spec_err_msg:	db 'Loading spec packet failed, trying to wing it...', CR, LF, 0
-maybe_msg:	db 'Found something at drive = ', 0
-alright_msg:	db 'Looks like it might be right, continuing...', CR, LF, 0
-nothing_msg:	db 'Failed to locate CD-ROM device; boot failed.', CR, LF, 0
-isolinux_str	db 'IsoBoot: ', 0
-crlf_msg	db CR, LF, 0
-diskerr_msg:	db 'Disk error ', 0
-ondrive_str:	db ', drive ', 0
-err_bootfailed	db CR, LF, 'Boot failed: press a key to retry...'
-isolinux_dir	db '\LOADER', 0
-no_dir_msg	db 'Could not find the LOADER directory.', CR, LF, 0
-isolinux_bin	db 'SETUPLDR.SYS', 0
-no_isolinux_msg	db 'Could not find SETUPLDR.SYS.', CR, LF, 0
-
-;
-; El Torito spec packet
-;
-		align 8, db 0
-spec_packet:	db 13h				; Size of packet
-sp_media:	db 0				; Media type
-sp_drive:	db 0				; Drive number
-sp_controller:	db 0				; Controller index
-sp_lba:		dd 0				; LBA for emulated disk image
-sp_devspec:	dw 0				; IDE/SCSI information
-sp_buffer:	dw 0				; User-provided buffer
-sp_loadseg:	dw 0				; Load segment
-sp_sectors:	dw 0				; Sector count
-sp_chs:		db 0,0,0			; Simulated CHS geometry
-sp_dummy:	db 0				; Scratch, safe to overwrite
-
-;
-; EBIOS drive parameter packet
-;
-		align 8, db 0
-drive_params:	dw 30				; Buffer size
-dp_flags:	dw 0				; Information flags
-dp_cyl:		dd 0				; Physical cylinders
-dp_head:	dd 0				; Physical heads
-dp_sec:		dd 0				; Physical sectors/track
-dp_totalsec:	dd 0,0				; Total sectors
-dp_secsize:	dw 0				; Bytes per sector
-dp_dpte:	dd 0				; Device Parameter Table
-dp_dpi_key:	dw 0				; 0BEDDh if rest valid
-dp_dpi_len:	db 0				; DPI len
-		db 0
-		dw 0
-dp_bus:		times 4 db 0			; Host bus type
-dp_interface:	times 8 db 0			; Interface type
-db_i_path:	dd 0,0				; Interface path
-db_d_path:	dd 0,0				; Device path
-		db 0
-db_dpi_csum:	db 0				; Checksum for DPI info
-
-;
-; EBIOS disk address packet
-;
-		align 8, db 0
-dapa:		dw 16				; Packet size
-.count:		dw 0				; Block count
-.off:		dw 0				; Offset of buffer
-.seg:		dw 0				; Segment of buffer
-.lba:		dd 0				; LBA (LSW)
-		dd 0				; LBA (MSW)
-
-		alignb 4, db 0
-MaxTransfer	dw 2 ;32				; Max sectors per transfer
-
-		times 2046-($-$$) db 0		; Pad to file offset 2046
-		dw 0aa55h			; BootSector signature




More information about the Ros-diffs mailing list