Put a ribbon on it... we finally got working A20M code. This should be syslinux-1.40
authorhpa <hpa>
Fri, 8 May 1998 01:45:36 +0000 (01:45 +0000)
committerhpa <hpa>
Fri, 8 May 1998 01:45:36 +0000 (01:45 +0000)
the official 1.40.

NEWS
ldlinux.asm

diff --git a/NEWS b/NEWS
index 839815a..712272f 100644 (file)
--- 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.
index c15e9b1..9185bec 100644 (file)
@@ -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