[lkml]   [1997]   [May]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectISA bus and SLOW_DOWN_IO

    In the following session, MS-DOS debug is used to read and write
    using the port at 0x80. Note that what is written, will be read back.
    Therefore, it is NOT an "unused" port. Further, everything written to
    any port address of 0xffff and below will appear on the ISA bus.
    Unfortunately, due to poor design, most boards do not decode all
    the address bits. This means that you could access a board without
    intending to do so. I don't have the IBM "bible" here, but I believe
    that the port at 0x80 is the first DMA page register. If so, it
    is hardly an "unused" port. The early IBM design used DMA Channel 0
    to do dummy DMA cycles for RAM refresh, therefore this port may
    be available for use but....

    -i 80 ; Read port 80 (hex)
    00 ; Nothing, if no port, would read FF
    -o 80 aa ; Write 0xaa to port 0x80
    -i 80 ; Read port 0x80
    AA ; It was latched by a real port and can be read back.
    -o 80 55 ; Write 0x55 to port 0x80
    -i 80 ; Read port 0x80
    55 ; It was latched by a real port and can be read back.
    -q ; Exit debug

    The ISA bus is an Asynchronous bus originally designed to support
    a communications board and a video board. Technically, it looks like
    a capacitor. It does not comprise a terminated transmission line.

    For the purposes that the ISA bus grew into, it is broken. Note
    that the first IBM-PC was NOT designed as a PC. It was designed to
    be used as a "smart terminal" for the IBM System 3. A few development
    machines were made with floppies so that code could be written and
    tested on the target machine before being committed to PROM. Osborne
    and others first recognized that the result was everything needed to
    make a PC superior to the CP/M 8080 and Z80 machines that existed
    at the time. From this (and many court battles) the IBM/PC was born.

    As the number of peripherals has increased, and the bus operation
    speed has increased, the problems with edge reflections has also
    increased. The result being that different buses were designed, first
    the VESA Local-bus and then the PCI bus. Port addresses above 0xffff
    appear ONLY on the PCI bus. This allows one to use port I/O and still
    keep the high-speed signals off the ISA bus.

    Writing to port 0x80 every time a read or write to another port is
    performed, such as is done with the "__SLOW_DOWN_IO" macros is counter
    productive. If you don't think so, the following experiment will help
    get my point across.

    (1) Tune a radio to some place where you hear interference from your
    computer while doing some I/O (tar your fs to a tape). If you have
    an ISA Ethernet card, ftp the kernel across the network. Note the
    strength of the interference.

    (2) Temporarily convert the macro in linux/include/asm/io.h to a
    null macro and recompile the kernel. Just add comment characters
    around the definition starting at __asm__.

    (3) Reboot, using the new kernel, and repeat the experiment. The
    amount of interference you hear will be dramatically reduced. Every
    write to port 0x80 produces at least four high-frequency edges that
    bounce up and down the ISA bus until they die out from electromagnetic
    radiation (what you hear on the radio). It doesn't matter that the
    device that responds to the IO R/W is on the motherboard. All the
    activity must also exist on the ISA bus.

    Now, using the "old fashoned" pause method of:

    jmp foo

    Is not too effective because with high-speed CPUs and built-in caches,
    you will not waste enough time. However, accessing RAM is predictable
    because PC class RAM access times will not get much faster than 60 ns.

    I suggest that the macro be changed to:


    This will access the stack with a known number of processor clocks plus
    read/write access time. These accesses are not on the ISA bus.

    Sorry to get "carried away" on this, but as they say.. "I do this for
    a living..."

    Dick Johnson
    Richard B. Johnson
    Project Engineer
    Analogic Corporation
    Voice : (508) 977-3000 ext. 3754
    Fax : (508) 532-6097
    Modem : (508) 977-6870
    Ftp :
    Email :,
    Penguin : Linux version 2.1.40 on an i586 machine (66.15 BogoMips).
    Warning : I read unsolicited mail for $350.00 per hour. Supply billing address.

     \ /
      Last update: 2005-03-22 13:39    [W:0.021 / U:6.528 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site