diff options
-rw-r--r-- | NEWS | 88 | ||||
-rw-r--r-- | ldlinux.asm | 34 |
2 files changed, 70 insertions, 52 deletions
@@ -1,7 +1,7 @@ Changes in 1.40: - * Increase A20M delay to avoid problems on certain IBM - Thinkpads (thanks to Donnie Barnes of RedHat for vital info - on this one.) + * Increase A20M delay and put in a test to avoid problems on + certain IBM Thinkpads (thanks to Donnie Barnes of RedHat + for vital info on this one.) * Support COMBOOT style boot command images. * Support chain loading (foreign operating systems, e.g. DOS). * Include a new "copybs" DOS utility to copy a boot sector to @@ -58,45 +58,45 @@ Changes in 1.31: don't need Turbo C.) Changes in 1.30: - * Added support for loading bzImage and initrd loading, and made - SYSLINUX new-setup-code aware (SYSLINUX 1.30 id=0x31). - * Added LILO-style kernel labels; see the LABEL and IMPLICIT - keywords in README file. - * Added support for colorization of intro and help screens. - * The vga= option is now handled correctly. - * Massive rewrite of large chunks of the code in order to - support the first two new features. + * Added support for loading bzImage and initrd loading, and made + SYSLINUX new-setup-code aware (SYSLINUX 1.30 id=0x31). + * Added LILO-style kernel labels; see the LABEL and IMPLICIT + keywords in README file. + * Added support for colorization of intro and help screens. + * The vga= option is now handled correctly. + * Massive rewrite of large chunks of the code in order to + support the first two new features. Changes in 1.20: - * Added simple online help at the "boot:" prompt. - * Removed 2880K image as I no longer have access to such a - floppy drive. (Donations accepted!!) - * Decided to distribute the source in a subdirectory rather - than in a nested zipfile. + * Added simple online help at the "boot:" prompt. + * Removed 2880K image as I no longer have access to such a + floppy drive. (Donations accepted!!) + * Decided to distribute the source in a subdirectory rather + than in a nested zipfile. Changes in 1.11: - * Removed a sanity check which would cause booting to fail on - Phoenix BIOS version 4.03. Apparently this BIOS is buggy. + * Removed a sanity check which would cause booting to fail on + Phoenix BIOS version 4.03. Apparently this BIOS is buggy. Changes in 1.10: - * Added configuration file SYSLINUX.CFG. This file contains all - configurable options, and can be edited from any OS which can - access an MS-DOS filesystem; there is no longer a need to run - SYSLINUX.EXE except to write the boot sector. - * Default command line now given by "default" line in config - file. - * LINUXMSG.TXT and BOOTMSG.TXT hard-coded file names replaced by - "display" and "prompt" lines in config file. - * LILO-style option appending now supported ("append" line in - config file). - * Prompt timeout is now supported ("timeout" line in config - file). The timeout is cancelled when anything is typed on the - command line. - * Pressing <ESC> or <Ctrl-C> at the Loading... stage now aborts - the kernel loading in progress and returns the user to the - boot: prompt. - * The installer now automatically sets the READONLY flag on - LDLINUX.SYS. + * Added configuration file SYSLINUX.CFG. This file contains all + configurable options, and can be edited from any OS which can + access an MS-DOS filesystem; there is no longer a need to run + SYSLINUX.EXE except to write the boot sector. + * Default command line now given by "default" line in config + file. + * LINUXMSG.TXT and BOOTMSG.TXT hard-coded file names replaced by + "display" and "prompt" lines in config file. + * LILO-style option appending now supported ("append" line in + config file). + * Prompt timeout is now supported ("timeout" line in config + file). The timeout is cancelled when anything is typed on the + command line. + * Pressing <ESC> or <Ctrl-C> at the Loading... stage now aborts + the kernel loading in progress and returns the user to the + boot: prompt. + * The installer now automatically sets the READONLY flag on + LDLINUX.SYS. * Added 2880K disk image. Changes in 1.03: @@ -107,13 +107,13 @@ Changes in 1.03: * Changed default kernel name on disk images to LINUX. Changes in 1.02: - * Fixed bug that would garble the command line on recent kernels - with more than 4 sectors of setup code (this wasn't really a - *bug*; rather, a kernel change broke the code. Unfortunately - the Linux boot interface is still sorely undocumented). - * Added BOOTMSG.TXT file support (message file which does not - force display of the boot prompt). + * Fixed bug that would garble the command line on recent kernels + with more than 4 sectors of setup code (this wasn't really a + *bug*; rather, a kernel change broke the code. Unfortunately + the Linux boot interface is still sorely undocumented). + * Added BOOTMSG.TXT file support (message file which does not + force display of the boot prompt). Changes in 1.01: - * Fixed bug on some (most?) 386 BIOSes would require two boot - attempts. + * Fixed bug on some (most?) 386 BIOSes would require two boot + attempts. diff --git a/ldlinux.asm b/ldlinux.asm index c15e9b19..9185bec2 100644 --- a/ldlinux.asm +++ b/ldlinux.asm @@ -341,6 +341,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 SavedSP resw 1 ; Our SP while running a COMBOOT image +A20test resw 1 ; Counter for testing status of A20 TextAttrBX equ $ TextAttribute resb 1 ; Text attribute for message file TextPage resb 1 ; Active display page @@ -2300,8 +2301,8 @@ bcopy: ; ; We typically toggle A20 twice for every 64K transferred. ; -%define io_delay out 080h,al ; Invalid port (we hope) -%define delaytime 1024 ; ISA bus cycles (1.5 µs) +%define io_delay times 4 out 0EDh,al ; Invalid port (we hope) +%define delaytime 256 ; 4 x ISA bus cycles (@ 1.5 µs) enable_a20: call empty_8042 @@ -2310,12 +2311,21 @@ enable_a20: call empty_8042 mov al,0DFh ; A20 on out 060h, al -kbc_delay: call empty_8042 - push cx - mov cx, delaytime -.delayloop: io_delay - loop .delayloop - pop cx + call kbc_delay + ; Verify that A20 actually is enabled. Do that by + ; observing a word in low memory and the same word in + ; the HMA until they are no longer coherent. Note that + ; we don't do the same check in the disable case, because + ; we don't want to *require* A20 masking (SYSLINUX should + ; work fine without it, if the BIOS does.) + push es + mov ax,0FFFFh ; HMA + mov es,ax +.a20_wait: inc word [ss:A20test] + mov ax,[es:A20test+10h] + cmp ax,[ss:A20test] + je .a20_wait + pop es ret disable_a20: @@ -2327,6 +2337,14 @@ disable_a20: out 060h, al jmp short kbc_delay +kbc_delay: call empty_8042 + push cx + mov cx, delaytime +.delayloop: io_delay + loop .delayloop + pop cx + ret + empty_8042: io_delay in al, 064h ; Status port |