diff options
Diffstat (limited to 'ldlinux.asm')
| -rw-r--r-- | ldlinux.asm | 101 |
1 files changed, 14 insertions, 87 deletions
diff --git a/ldlinux.asm b/ldlinux.asm index ec8157d1..8bfdf763 100644 --- a/ldlinux.asm +++ b/ldlinux.asm @@ -28,30 +28,20 @@ %define IS_SYSLINUX 1 %include "macros.inc" +%include "config.inc" %include "kernel.inc" %include "bios.inc" %include "tracers.inc" ; -; Some semi-configurable constants... change on your own risk. Most are imposed -; by the kernel. +; Some semi-configurable constants... change on your own risk. ; my_id equ syslinux_id -max_cmd_len equ 255 ; Must be odd; 255 is the kernel limit FILENAME_MAX_LG2 equ 4 ; log2(Max filename size Including final null) FILENAME_MAX equ 11 ; Max mangled filename size NULLFILE equ ' ' ; First char space == null filename retry_count equ 6 ; How patient are we with the disk? -HIGHMEM_MAX equ 037FFFFFFh ; DEFAULT highest address for an initrd %assign HIGHMEM_SLOP 0 ; Avoid this much memory near the top -DEFAULT_BAUD equ 9600 ; Default baud rate for serial port -BAUD_DIVISOR equ 115200 ; Serial port parameter -; -; Should be updated with every release to avoid bootsector/SYS file mismatch -; -%define version_str VERSION ; Must be 4 characters long! -%define date DATE_STR ; Defined from the Makefile -%define year '2002' ; ; The following structure is used for "virtual kernels"; i.e. LILO-style @@ -170,6 +160,7 @@ InitRDCNameLen resw 1 ; Length of unmangled initrd name NextCharJump resw 1 ; Routine to interpret next print char SetupSecs resw 1 ; Number of setup sectors A20Test resw 1 ; Counter for testing status of A20 +A20Type resw 1 ; A20 type CmdLineLen resw 1 ; Length of command line including null GraphXSize resw 1 ; Width of splash screen file VGAPos resw 1 ; Pointer into VGA memory @@ -937,83 +928,11 @@ all_read: ; mov si,copyright_str call writestr + ; -; Check that no moron is trying to boot Linux on a 286 or so. According -; to Intel, the way to check is to see if the high 4 bits of the FLAGS -; register are either all stuck at 1 (8086/8088) or all stuck at 0 -; (286 in real mode), if not it is a 386 or higher. They didn't -; say how to check for a 186/188, so I *hope* it falls out as a 8086 -; or 286 in this test. -; -; Also, provide an escape route in case it doesn't work. -; -check_escapes: - mov ah,02h ; Check keyboard flags - int 16h - mov [KbdFlags],al ; Save for boot prompt check - test al,04h ; Ctrl->skip 386 check - jnz skip_checks -test_8086: - pushf ; Get flags - pop ax - and ax,0FFFh ; Clear top 4 bits - push ax ; Load into FLAGS - popf - pushf ; And load back - pop ax - and ax,0F000h ; Get top 4 bits - cmp ax,0F000h ; If set -> 8086/8088 - je not_386 -test_286: - pushf ; Get flags - pop ax - or ax,0F000h ; Set top 4 bits - push ax - popf - pushf - pop ax - and ax,0F000h ; Get top 4 bits - jnz is_386 ; If not clear -> 386 -not_386: - mov si,err_not386 - call writestr - jmp kaboom -is_386: - ; Now we know it's a 386 or higher -; -; Now check that there is sufficient low (DOS) memory -; - int 12h - cmp ax,(real_mode_seg+0xa00) >> 6 - jae enough_ram - mov si,err_noram - call writestr - jmp kaboom -enough_ram: -skip_checks: -; -; Check if we're 386 (as opposed to 486+); if so we need to blank out -; the WBINVD instruction -; -; We check for 486 by setting EFLAGS.AC -; - pushfd ; Save the good flags - pushfd - pop eax - mov ebx,eax - xor eax,(1 << 18) ; AC bit - push eax - popfd - pushfd - pop eax - popfd ; Restore the original flags - xor eax,ebx - jnz is_486 -; -; 386 - Looks like we better blot out the WBINVD instruction +; Common initialization code ; - mov byte [try_wbinvd],0c3h ; Near RET -is_486: +%include "cpuinit.inc" ; ; Initialization that does not need to go into the any of the pre-load @@ -1029,6 +948,14 @@ is_486: mov word [kaboom.patch+1],kaboom2-(kaboom.patch+3) ; +; Compute some parameters that depend on cluster size +; + mov dx,1 + xor ax,ax + div word [ClustSize] + mov [ClustPerMoby],ax ; Clusters/64K + +; ; Now we're all set to start with our *real* business. First load the ; configuration file (if any) and parse it. ; |
