* ISOLINUX: Add a few more workarounds for various broken El
Torito BIOSes.
* Make sure .depend files aren't accidentally packed...
+ * ALL: Fix bugs in the extension-detect code; this caused
+ files like COMBOOT images and CD boot sectors to be
+ mis-identified as Linux kernels and rejected.
+ * ALL: Fix the return from COMBOOT.
+ * ALL: Do some of the early groundwork for supporting DOS
+ system calls in COMBOOT.
Changes in 1.74:
* SYSLINUX: fix bug that would cause valid kernel images to be
;
; Set up the DOS vectors in the IVT (INT 20h-3fh)
;
- mov dword [4*0x20],comboot_return ; INT 20h vector
- mov eax,comboot_bogus
- mov di,4*0x21
- mov cx,31 ; All remaining DOS vectors
+ mov di,4*0x20 ; DOS interrupt vectors
+ mov eax,comboot_return
+ stosd
+ mov ax,comboot_int21
+ stosd
+ mov ax,comboot_bogus
+ mov cx,30 ; All remaining DOS vectors
rep stosd
-
+
mov cx,comboot_seg
mov es,cx
mov [es:80h], al ; Store command line length
mov [SavedSSSP],sp
- mov ax,ss ; Save away SS:SP
- mov [SavedSSSP+2],ax
+ mov [SavedSSSP+2],ss ; Save away SS:SP
call vgaclearmode ; Reset video
; Proper return vector
comboot_return: cli ; Don't trust anyone
- lss sp,[cs:SavedSSSP]
- mov ds,ax
- mov es,ax
- sti
- cld
- jmp cb_enter
+ xor ax,ax
+ jmp comboot_exit
+
+; INT 21h: generic DOS system call
+comboot_int21: and ah,ah ; 00 = return
+ je comboot_return
+ cmp ah,4Ch ; 4C = return with status
+ je comboot_return
-; Attempted to execute DOS system call
+ ; Otherwise fall through to comboot_bogus
+
+; Attempted to execute non-21h DOS system call
comboot_bogus: cli ; Don't trust anyone
+ mov ax,err_notdos
+
+;
+; Generic COMBOOT return to command line code
+;
+comboot_exit:
lss sp,[cs:SavedSSSP]
- mov ds,ax
- mov es,ax
+ xor dx,dx
+ mov ds,dx
+ mov es,dx
sti
cld
+ and ax,ax
+ je .nomsg
mov si,KernelCName
call cwritestr
- mov si,err_notdos
+ xchg si,ax
call cwritestr
- jmp cb_enter
+.nomsg: jmp cb_enter
dot_msg db '.', 0
fourbs_msg db BS, BS, BS, BS, 0
aborted_msg db ' aborted.' ; Fall through to crlf_msg!
-crlf_msg db CR, LF, 0
+crlf_msg db CR, LF
+null_msg db 0
crff_msg db CR, FF, 0
default_str db 'default', 0
default_len equ ($-default_str)