summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS88
-rw-r--r--ldlinux.asm34
2 files changed, 70 insertions, 52 deletions
diff --git a/NEWS b/NEWS
index 839815a1..712272fb 100644
--- a/NEWS
+++ b/NEWS
@@ -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