Fact-checked by Grok 2 weeks ago

Intel 8237

The Intel 8237 is a programmable direct memory access (DMA) controller developed by Intel as a peripheral interface circuit for microprocessor systems, enabling high-speed data transfers between memory and I/O devices without requiring continuous CPU involvement. Part of Intel's MCS-85 family, it includes four independent DMA channels, each with dedicated address registers and byte count capabilities supporting up to 64 KB per transfer, and it requires an external 8-bit address latch for operation. The device supports multiple transfer modes—single, block, demand, and cascade (for expanding beyond four channels)—along with autoinitialization after each transfer and options for address increment or decrement. It also features memory-to-memory transfer capabilities, end-of-process (EOP) signaling, and independent control over request/acknowledge signal polarities. The 8237 gained prominence as a core component in early personal computers, including the original IBM PC (model ), where it managed 8-bit "fly-by" operations for peripherals like controllers and early sound hardware, limited to a 16 MB due to its 8-bit page registers.

History

Development Origins

The Intel 8237 DMA controller originated from a design developed by as the Am9517, under a 1976 patent cross-licensing agreement between AMD and Intel that permitted mutual manufacturing and use of each other's processor and peripheral technologies. This collaboration enabled AMD to leverage Intel's microprocessor architectures while providing Intel access to AMD's innovative peripheral designs, fostering compatibility across emerging computing ecosystems in the late 1970s. The Am9517, later adopted and rebranded by Intel as the 8237, was fabricated using N-channel silicon gate , reflecting the era's emphasis on efficient, low-power integrated circuits for microprocessor-based systems. Development of the Am9517/8237 was closely aligned with Intel's MCS-85 family (including the 8080 and microprocessors) and the nascent x86 architecture, such as the 8086 introduced in , to address the growing demand for high-performance operations in single-board computers and early personal systems. At the time, microprocessors like the were increasingly paired with peripherals requiring rapid data movement, such as drives and emerging hard disk storage, where CPU-mediated transfers bottlenecked system performance. The controller's design prioritized (DMA) to offload the processor, enabling seamless integration into memory-mapped I/O environments typical of these 8-bit and early 16-bit platforms. Central to the device's architecture were four independent channels, each supporting up to 64 KB transfers via 16-bit address and byte count registers, optimized for 8-bit data paths to match the prevailing bus standards of the period. These features allowed for versatile transfer modes, including demand, block, and single transfers, with expandability through cascading for multi-controller setups, ensuring scalability for high-speed peripherals while maintaining compatibility with NMOS-based systems operating at clock speeds up to 4 MHz. This focus on programmable efficiency marked a significant advancement in peripheral support, directly responding to the limitations of earlier DMA solutions like the Intel 8257.

Release and Early Adoption

The Intel 8237, a programmable (DMA) controller fabricated using NMOS technology, was released by in 1979 to support efficient data transfers in microprocessor-based systems, with an initial operating clock speed of up to 3 MHz. Its design addressed limitations in earlier DMA controllers like the Intel 8257 by introducing features such as memory-to-memory transfer capabilities between channels 0 and 1, enabling up to 64 KB per operation compared to the 8257's 16 KB limit, and providing enhanced programmable control for dynamic reconfiguration during operation. The official for the 8237 was published by in 1980, highlighting these advancements and positioning the device as a high-performance peripheral for improving system throughput in data-intensive applications. Early commercial availability targeted original equipment manufacturers (OEMs), with volume pricing around $25 per unit for the 3 MHz variant in quantities of 100, making it accessible for integration into custom designs. Initial adoption occurred primarily in industrial and embedded systems leveraging the microprocessor, including setups and process control equipment where offloaded the CPU for real-time I/O handling. These applications benefited from the 8237's with the 8086's 16-bit and its ability to manage four independent channels for peripherals like disk controllers and sensors. AMD released a parallel version, the Am9517, under cross-licensing arrangements around the same period.

Architecture

Block Diagram and Key Components

The Intel 8237 is housed in a 40-pin (DIP) fabricated using NMOS technology, designed to operate at a single 5 V supply with a typical power dissipation of up to 1.5 W. At its core, the 8237 features four independent channels, each equipped with 16-bit address counters and byte counters capable of handling up to 64 KB transfers, along with a bidirectional 8-bit bus and integrated control logic that facilitates direct transfers between I/O peripherals and system memory without CPU intervention. The control logic encompasses major functional blocks including a timing control unit for generating internal clocks and external signals, a program command control section for decoding operational instructions, and a to manage channel during concurrent requests. The of the 8237 illustrates these elements interconnected via internal paths, with request lines (DREQ0–DREQ3) serving as asynchronous inputs from peripherals to initiate cycles, and corresponding acknowledge signals (DACK0–DACK3) output to grant access and notify devices of active transfers. generation is handled through 16-bit bus drivers, where lower-order bits (A0–A7) are provided directly and higher-order bits are multiplexed over the bus (DB0–DB7) using external latches for extension to 24-bit addressing in larger systems. The supports byte and word transfers, as well as verify operations for checks, with an internal first/last flip-flop that tracks the initial and final cycles of multi-byte transfers to optimize bus usage and signaling. Registers within the channels are briefly referenced for configuring transfer parameters, but their detailed programming is handled separately.

Pin Configuration and Interfaces

The Intel 8237 DMA controller is housed in a 40-pin (DIP) and features a pinout designed for integration with systems, providing direct control over addressing and data transfer during DMA operations. The address interface includes eight pins for the lower address bits: A0–A3 are bidirectional tri-state outputs that serve as inputs during programming cycles and outputs during active DMA cycles, while A4–A7 are dedicated tri-state outputs enabled only during DMA service to provide the upper four bits of the 8-bit on-chip . To support full 16-bit or 20-bit addressing (as required for systems like the 8086), external page registers the upper address bits (A8–A15 or A16–A19), effectively extending the addressing capability to 64 KB per channel without additional pins on the 8237 itself. The data bus consists of eight bidirectional tri-state pins (DB0–DB7) that handle both programming data from the CPU and actual DMA data transfers between and peripherals. Key control signals facilitate bus arbitration and DMA cycle management. The CLK pin accepts a single-phase clock input, with a maximum frequency of 3 MHz for the standard 8237 and up to 5 MHz for the 8237-2 variant, synchronizing all internal operations. HRQ (hold request) is an output pin that signals the CPU to relinquish the bus, while HLDA (hold acknowledge) is an input pin where the CPU confirms bus release, enabling the 8237 to take control for DMA transfers. DMA channel requests are handled via four input pins (DREQ0–DREQ3), which are asynchronous and prioritized internally (DREQ0 highest), and corresponding output acknowledge pins (DACK0–DACK3), whose polarity is programmable but defaults to active low. Additional control pins include CS (chip select, active low for I/O addressing), RESET (active high to initialize the device), READY (input to extend cycles for slow peripherals), and EOP (bidirectional end-of-process signal for terminating transfers). Memory and I/O operations are controlled by outputs such as MEMR/MEMW (memory read/write, active low) and IOR/IOW (I/O read/write, bidirectional), along with AEN (address enable, active high) and ADSTB (address strobe, active high) for latching external addresses. The 8237 is electrically compatible with TTL logic levels, with input high voltage (VIH) minimum of 2.0 V, input low voltage (VIL) maximum of 0.8 V, output high voltage (VOH) minimum of 2.4 V at -400 μA, and output low voltage (VOL) maximum of 0.45 V at 8 mA, ensuring seamless integration with TTL-based systems. Timing specifications include a DREQ setup time to CLK low of 0 ns (asynchronous), a READY setup time to CLK low of 100 ns minimum, and hold times of 0 ns for most inputs relative to CLK. Power requirements are +5 V DC (VCC) with ground (VSS), and the device operates over a temperature range of 0°C to 70°C for commercial versions. Designed primarily for the 8080/ microprocessor bus, the 8237 interfaces with the 8086/8088 via external latches (such as the 8282 or 8283) to handle the multiplexed address/data bus, where address bits are latched during the first T cycle and data is transferred in subsequent cycles. For , the device supports cascading multiple 8237s by connecting the HRQ and HLDA of a master to a slave's DREQ and DACK pins, allowing up to four controllers (16 channels total) while maintaining a single bus interface to the CPU; in this configuration, lower-priority channels on slaves are arbitrated only after master channels are serviced.
Pin GroupPinsTypeFunction
AddressA0–A3I/O (tri-state)Lower 4 address bits; inputs for register select, outputs during DMA
AddressA4–A7O (tri-state)Upper 4 address bits; enabled during DMA service
DataDB0–DB7I/O (tri-state)8-bit bidirectional data bus for programming and transfers
DMA RequestsDREQ0–DREQ3IAsynchronous channel request inputs (prioritized)
DMA AcknowledgesDACK0–DACK3OChannel acknowledge outputs (programmable polarity)
Bus ControlHRQOHold request to CPU
Bus ControlHLDAIHold acknowledge from CPU
Clock/TimingCLKISystem clock input (max 3–5 MHz)
Other ControlsCS, RESET, READY, EOP, IOR/IOW, MEMR/MEMW, AEN, ADSTBMixedChip select, reset, ready wait, end-of-process, I/O and memory controls, address enable/strobe
PowerVCC, VSSSupply+5 V and ground

Internal Structure

Registers and Programming

The Intel 8237 DMA controller incorporates a set of programmable registers that enable software configuration of transfer parameters, channel selection, and operational modes for its four independent channels. These registers are accessed via the chip's 8-bit bidirectional data bus using I/O read (IOR) and write (IOW) signals, with address lines A0–A3 decoding the specific register (ports 00h–0Fh). Each channel maintains eight 8-bit registers internally: two for the 16-bit current address (CAR), two for the 16-bit current word count (CWCR), two for the 16-bit base address (BAR), and two for the 16-bit base word count (BWCR). The current address and word count registers are directly programmable by the CPU, while the base registers are loaded automatically from the current registers upon the first transfer when auto-initialize is enabled, allowing repeated transfers without CPU intervention. Programming the address and registers requires a preliminary step to manage the first/last flip-flop, which determines whether the low or high byte is accessed. This flip-flop is cleared by writing 00h to the temporary at 0Ch, ensuring the subsequent write targets the low byte. For a given , the low byte of the current is then written to the channel's (e.g., 00h for channel 0, 02h for channel 1), followed by the high byte to the same ; the process repeats for the (e.g., 01h for channel 0). The value specifies the starting or I/O for the , incrementing or decrementing based on the configuration, while the word (decremented per , with terminal signaled at 0000h after FFFFh rollover) defines the number of bytes or words to move. Base registers, though not directly accessible, are software-initiated by loading the current registers prior to enabling auto-initialize. The mode register, one per channel and write-only at port 0Bh, configures transfer specifics and is programmed by specifying the channel in bits 0–1 (00b for 0, 01b for 1, 10b for 2, 11b for 3). Its 6-bit format (bits 2–7) includes:
BitNameDescription
7–6Transfer Mode00b: ; 01b: ; 10b: ; 11b:
5Addressing1b: Decrement (address decreases); 0b: Increment (address increases)
4Auto-Initialize1b: Enabled (reload from base on terminal count); 0b: Disabled
3–2Transfer Type00b: Verify; 01b: Write (peripheral to ); 10b: Read ( to peripheral); 11b: Illegal
This must be set before initiating a transfer to define the direction, addressing scheme, and repetition behavior. The command , a global 8-bit at 08h, controls overall controller behavior and is cleared on or master clear. The is used for writing the command and reading the status . Its defined bits are:
BitNameDescription
0M/M1b: Enable memory-to-memory transfer (using channels 0 and 1 as source/destination)
1CH01b: Address hold on channel 0 during transfers
2D/C1b: Disable controller (halts all )
3C/T1b: Enable compressed timing
4F/R0b: Fixed priority (channel 0 highest); 1b: Rotating priority
5–7-Reserved
Programming this typically occurs during initialization to configure global and other behaviors, with rotating useful for fair among active . Channels are enabled or disabled separately via the mask at 0Ah. The , read-only at 08h (sharing the address with the command ), provides real-time feedback on channel states. Bits 0–3 indicate count (TC) flags (1b if the channel's has reached zero, cleared on read or reset), while bits 4–7 reflect pending requests (1b if DREQ is asserted for that channel). This allows software to poll for transfer completion without interrupts. The temporary at 0Ch also supports software commands beyond flip-flop clearing, such as setting the first/last flip-flop (write 01h) or master clear (write 02h, resetting all and modes). Basic setup involves sequencing these writes: clear the flip-flop, load addresses and counts, program modes and command, then unmask channels to begin operation.

Priority Resolver and Arbitration

The Intel 8237 features a four-level as its core resolver, which arbitrates among the four channels (0 through 3) when multiple devices assert simultaneous requests via the DREQ (DMA Request) input lines. This encoder evaluates active DREQ signals and selects the channel eligible for service based on the configured , ensuring orderly bus acquisition from the CPU through the HRQ (Hold Request) output. Upon receiving HLDA (Hold Acknowledge) from the CPU, the resolver asserts the corresponding DACK (DMA Acknowledge) output to the winning channel, initiating the transfer while inhibiting lower- requests until resolution. The device supports two arbitration modes—fixed and rotating—selectable via a bit in the command register. In fixed priority mode, channel 0 maintains the highest precedence, with priority decreasing sequentially to channel 3 as the lowest; this static hierarchy resolves ties by inherently favoring lower channel numbers during contention. Fixed mode suits systems where specific devices require consistent access dominance, such as high-bandwidth peripherals on channel 0. Rotating priority mode, in contrast, dynamically shifts the hierarchy after each DMA service cycle, assigning the lowest priority to the channel just serviced and elevating others in sequence. This cyclic adjustment guarantees that any active channel gains service after at most three intervening higher-priority operations in a standalone 8237 configuration, promoting equitable access across channels. For systems with multiple 8237 controllers, daisy-chaining integrates through interconnected DREQ and DACK lines, where the master device's resolver oversees slaves in a hierarchical manner, preserving the selected fixed or rotating scheme across the expanded channel set. Overall, the rotating mode enhances performance in multi-device environments by balancing bandwidth and preventing indefinite starvation of lower-priority channels, thereby optimizing throughput for diverse peripheral loads.

Operation

Initialization and Command Register

Upon power-on or reset, the Intel 8237 DMA controller initializes with all four channels disabled, as the Mask register is set to mask all DMA requests (DREQ inputs ignored), the Command, Status, Request, and Temporary registers are cleared to zero, and the byte/word counters for each channel are reset to zero, placing the device in an Idle state until software programming occurs. This hardware reset ensures a known initial state but requires explicit software initialization to configure channels, load addresses and counts, and enable operations, as the controller does not automatically start DMA transfers post-reset. The Command register, an 8-bit programmable register written during the Program Condition (CS low, HLDA low, IOW low), controls global operational parameters and must be programmed early in the initialization to set the controller's behavior before enabling channels. Key bits relevant to initialization include bit 0 (Memory-to-Memory Transfer enable: 1 enables transfers using channels 0 and 1 as source/destination, with channel 2/3 disabled during such operations; 0 disables), bit 2 (Controller Disable: 0 enables the controller for service; 1 disables all channels regardless of mask settings), and bit 3 (Compressed Timing: 0 for normal S1/S2/S3/S4 timing; 1 for compressed S1/S2 only, reducing cycle time for faster transfers). Other bits configure priority (bit 4: 0 fixed, 1 rotating), write transfer timing (bit 5), and signal polarities (bits 6-7 for DREQ/DACK sense), but these are typically set once during setup and not altered frequently. The Mask register, a 4-bit write-only , allows per-channel control to isolate active DMA requests during initialization, with each bit corresponding to one channel (bit 0 for channel 0, etc.; 1 masks/disables the channel, 0 enables it). Post-reset, all bits are set to 1, disabling channels; software must unmask specific channels after loading their to prevent unintended transfers. Masking can be done for all channels at once or individually by selecting the appropriate address via A0-A3. This is crucial for safe setup, as unmasked channels could initiate transfers if DREQ asserts before configuration completes. The initialization sequence begins with a software Master Clear command to mimic power-on conditions, followed by setting the Mask register to mask all channels to ensure no transfers start prematurely. Next, clear the byte pointer flip-flop to reset the register addressing for 16-bit loads, then program the Command register to disable the controller (set bit 2=1 for safety) and set global modes like memory-to-memory if needed. For each channel, clear the flip-flop, load the base address (low byte then high byte using the channel's address register select via A0-A3), clear the flip-flop again, and load the word count (low byte then high byte using the count register select); set the Mode register for transfer type (e.g., verify, , ), and optionally configure external page registers for full addressing beyond 64 KB; finally, unmask the desired channel(s) via the Mask register and enable the controller (set bit 2=0 in Command). This sequence prepares the controller for operations without referencing specific transfer modes beyond basic setup.

Transfer Cycles and Timing

The transfer cycle of the Intel 8237 begins when a valid DMA request (DREQ) from a peripheral is detected on one of its channels, prompting the controller to assert the Hold Request (HRQ) signal to the CPU to seize control of the system bus. Upon receiving the Hold Acknowledge (HLDA) from the CPU, which indicates that the processor has relinquished bus control, the 8237 enters its active cycle and outputs the memory address—comprising the lower four bits on A0–A3 and the upper eight bits latched externally via the Address Strobe (ADSTB) signal. Simultaneously, the controller asserts the DMA Acknowledge (DACK) signal to the requesting peripheral, enabling the data transfer phase where data moves bidirectionally between the I/O device and memory over the appropriate bus lines, controlled by read/write strobes such as IOR, IOW, MEMR, or MEMW. These operations are synchronized to the controller's internal clock, with a typical cycle time of 250 at a 4 MHz clock , ensuring compatibility with contemporary systems. Key timing parameters include an valid duration of approximately 100 from the clock's high and setup times of around 170 relative to the strobe signals, allowing for reliable latching in external circuitry without excessive delays. The 8237 supports both burst transfers, where multiple bytes are moved consecutively before bus release, and cycled operations that interleave with CPU activity, optimizing throughput based on system demands. Following the completion of the data transfer, the 8237 deasserts HRQ, prompting the CPU to withdraw HLDA and regain bus mastery, thereby minimizing processor idle time. The controller lacks integrated parity checking for data integrity during transfers, relying instead on external system mechanisms for error detection. However, it generates a Terminal Count (TC) signal to indicate when the programmed byte count for a channel has been reached, signaling the end of the transfer sequence and potentially triggering interrupts or mode transitions.

Transfer Modes

Single Transfer Mode

In Single Transfer Mode, the Intel 8237 DMA controller performs a single data transfer per DMA request from a peripheral . When the peripheral asserts the DREQ (DMA Request) signal, the 8237 asserts HRQ (Hold Request) to the CPU to gain control of the . Upon receiving HLDA (Hold Acknowledge) from the CPU, the 8237 asserts DACK (DMA Acknowledge) to the peripheral, completes the one-byte transfer between memory and the I/O , updates the current address register by incrementing or decrementing it, and decrements the word count register by one. The DREQ must remain asserted until DACK is active; afterward, the 8237 releases HRQ, returning bus control to the CPU, which resumes normal operation until the next DREQ assertion initiates another single transfer. This mode is configured by writing to the Mode Register (I/O port 0Bh for the primary controller), where bits 6 and 7 are set to 01 to select Single Transfer Mode for the targeted (selected by bits 0 and 1). Bits 2 and 3 specify the transfer type (e.g., 01 for I/O to write), bit 4 enables autoinitialization if needed, and bit 5 controls address direction. If the word count reaches zero (terminal count), the TC output signals completion, potentially triggering autoinitialization to reload registers for repeated operation.

Block Transfer Mode

In Block Transfer Mode, the Intel 8237 DMA controller is configured by writing to the Mode Register for a specific , where bits 6 and 7 are set to binary 10 to select this mode. This setting enables the controller to perform a continuous sequence of transfers upon activation, distinct from single-transfer operations that release the bus after each byte. The operation begins when a Device Request (DREQ) signal is asserted by the peripheral, prompting the 8237 to arbitrate for the bus, assert the Device Acknowledge (DACK), and seize control from the CPU. Once the bus is acquired, the controller transfers the entire block of data—up to the programmed word count of bytes (64 KB)—without relinquishing control for intermediate CPU intervention. The transfers continue until the Terminal Count (TC) is reached, which occurs when the 16-bit word count register decrements to FFFFh (indicating underflow from 0000h), or until an external End of Process (EOP) signal is received; at this point, the bus is released back to the CPU. Internally, the 8237 handles addressing by continuously incrementing or decrementing the Current Address Register after each transfer cycle, based on the programmed address mode (auto-increment, auto-decrement, or fixed). The word count is similarly decremented with each byte transferred, ensuring sequential progression through the block. Upon completion, the signal is asserted to notify the peripheral, and if autoinitialization is enabled (via bit 4 of the Mode Register), the original address and count values are restored from the Base Address and Base Word Count Registers for potential reuse. By maintaining continuous bus ownership, block mode supports transfer rates up to approximately 800 KB/s on faster variants like the 8237A-5 at 5 MHz.

Demand Transfer Mode

The Demand Transfer Mode of the Intel 8237 controller enables high-throughput data transfers by allowing the controller to seize and hold the for consecutive cycles as long as the peripheral device maintains the request (DREQ) signal active. To configure a for Demand Transfer Mode, bits 6 and 7 of the per-channel Mode Set Register are programmed to binary 00, with bits 0 and 1 selecting the , the remaining bits setting transfer type (verify, I/O to , or to I/O), increment/decrement, and auto-initialization if desired. In this mode, transfers proceed byte-by-byte until one of three conditions is met: the programmed reaches terminal count (), an external end-of-process (EOP) signal is asserted, or the peripheral deasserts DREQ to pause the operation. This contrasts with block mode, which runs continuously to or EOP without pausing for DREQ changes, making demand mode a flexible extension for peripherals that may intermittently require bus access. When auto-initialize is enabled via bit 4, reaching reloads the base address and registers from their temporary storage, allowing indefinite transfers without CPU intervention as long as DREQ remains asserted across cycles. The controller saves the current address and count between pauses, resuming seamlessly upon the next DREQ assertion after the higher-priority channel (if any) completes its service. However, prolonged DREQ assertion can lead to CPU starvation, as the DMA controller retains bus mastership and prevents microprocessor access until release, potentially degrading system responsiveness in multi-tasking environments.

Cascade Mode

Cascade mode in the Intel 8237 DMA controller enables the interconnection of multiple controllers to expand the number of available DMA channels beyond the standard four per device, facilitating system scalability for applications requiring additional independent transfer channels. In this configuration, one 8237 acts as the master controller, interfacing directly with the CPU via its hold request (HRQ) and hold acknowledge (HLDA) signals to arbitrate bus access, while one or more slave controllers manage their local channels and forward requests through dedicated cascade connections. To configure cascade mode, the master controller dedicates a specific channel—typically channel 0—for cascading, programming its mode register with bits 6 and 7 set to 11 to select cascade operation; this disables address generation and control outputs on that channel, which instead responds solely to direct memory access (DMA) request (DREQ) and DMA acknowledge (DACK) signals from the slave. The slave controller's HRQ and HLDA pins connect to the master's DREQ and DACK on the cascade channel, forming a priority chain where a slave's DMA request propagates to the master only after internal arbitration within the slave. When the master receives a request via the cascade channel and gains bus control from the CPU, it asserts HLDA to the slave, allowing the slave to perform transfers using the shared system bus while the master remains transparent to the operation. This mode supports chaining up to four 8237 controllers in a multi-level , with priorities from lower-priority slaves propagated through the chain to the master, preserving the overall scheme—either fixed or rotating—established in the primary controller. Such expansion is particularly useful in systems demanding more than four channels, enabling effective support for 7 or 8 channels through a master-slave arrangement without requiring a more complex custom controller. The master's priority resolver briefly integrates cascade requests into its process, ensuring seamless coordination across the linked devices.

Applications

Usage in IBM PC and XT

In the IBM PC and XT systems, a single Intel 8237 DMA controller was implemented to manage direct memory access for basic peripherals, mapped to the I/O address range 000h-00Fh. This configuration handled four channels, with channel 0 dedicated to dynamic RAM refresh operations, channel 1 available for expansion cards or peripherals such as the monochrome display adapter or parallel printer, channel 2 hardwired to the floppy disk controller for disk I/O transfers, and channel 3 available for expansion cards such as hard disk adapters. The hardwiring of channel 2 to the floppy controller limited system flexibility, as it prevented reassignment to other devices without hardware modifications. The 8237's native 16-bit addressing restricted each channel to a 64 KB range, but this was extended to the full 1 MB (20-bit) through external page registers at I/O ports 81h, 82h, 83h, and 87h for channels 2, 3, 1, and 0 respectively, which supplied the upper four address bits. Operating at the 's 4.77 MHz clock speed, the controller supported 8-bit transfers only, with no provision for 16-bit operations, resulting in a maximum theoretical throughput of approximately 950 KB/s limited by the five-clock cycle overhead per byte transfer. For operations, practical performance was capped at around 500 KB/s in multi-sector transfers, though actual rates were often lower due to media constraints like the 250 kbit/s double-density signaling. This single-controller setup relied primarily on demand and block transfer modes for efficient peripheral handling, such as reading or writing floppy sectors without CPU intervention. The design prioritized simplicity for the era's limited I/O needs but introduced bottlenecks for concurrent operations, as the priority resolver arbitrated among the few active channels.

Usage in IBM PC AT

The IBM PC AT incorporates two Intel 8237 DMA controllers configured in a master-slave arrangement to expand DMA capabilities beyond the single-controller design of earlier models, supporting up to seven active channels for concurrent peripheral data transfers. The master controller, mapped to I/O ports 000h–00Fh, manages channels 0–3 for 8-bit operations, while the slave controller at 0C0h–0CFh handles channels 4–7, with channel 4 exclusively used in cascade mode to link requests from the master to the slave, effectively presenting channels 0–3 and 5–7 to the system. This cascading enables prioritized handling of DMA requests across both controllers, allowing the slave to intercept and process transfers transparently. A significant upgrade in the PC AT is the provision for 16-bit DMA on slave channels 5–7, which connect to the 16-bit portion of the bus and are wired such that transfers occur on odd addresses (channels 5 and 7) or even addresses (channel 6) due to the slave controller's address offset. DMA page registers at I/O ports 80h–8Fh extend each channel's 16-bit addressing to 20 bits, enabling access to the full 1 MB of system memory without crossing 64 KB boundaries per transfer. Operating at an 8 MHz clock derived from the bus, these enhancements yield theoretical throughputs approaching 1 MB/s for 16-bit demand-mode operations, a doubling over 8-bit rates. These DMA channels are assigned to critical peripherals in the PC AT: channel 3 for the fixed-disk (hard disk) adapter to handle high-volume sector transfers, channel 2 for the controller supporting read/write operations at 250–500 Kb/s, and channel 1 typically for sound cards to stream audio data without CPU overhead. Channel 0 reserved for compatibility with earlier systems (previously used for dynamic refresh). This allocation optimizes performance for storage and I/O-intensive tasks in the AT's 80286-based . The dual-8237 setup maintains with PC and XT software through shared port mappings and command structures for channels 0–3, allowing existing programs to function unchanged in . However, utilization of the new channels 5–7 requires -level programming updates to configure page registers and select 16-bit modes, as the original PC/XT lacks support for these features.

Integration and Legacy

Incorporation into Chipsets

As personal computer architectures evolved in the mid-1980s, the 's functionality began to be integrated into multi-function chipsets to reduce component count and board space while maintaining compatibility with existing peripherals. The , introduced in 1984 as part of the 82230/82231 chipset for PC/AT-compatible systems, incorporated the functions of two 8237 DMA controllers alongside other peripherals like the and an 8284A clock generator. This integration allowed for seven DMA channels in total, emulating the original 8237's modes, registers, and addressing capabilities to support ISA bus operations in 286-based systems. During the 386 and 486 eras, further consolidation occurred with southbridge components that embedded 8237-compatible logic. The 82371SB (PIIX), released in 1995, included two integrated 8237 controllers within its PCI-ISA bridge, providing compatibility for the four-channel 8-bit and 16-bit operations, including , , , and modes, through mapped registers accessible at standard I/O ports like 0x00-0x0F and 0xC0-0xDF. Similarly, the 82378IB ISA System I/O Controller, used in 486 and early systems, integrated an enhanced seven-channel unit based on dual 82C37 ( 8237) designs, supporting the same transfer modes and priority schemes while adding for PCI interactions. These implementations ensured seamless support for older ISA expansion cards without requiring discrete 8237 chips. In the , as chipsets matured, southbridge ICs continued this trend to preserve legacy support amid the shift to . The 82371EB (PIIX4), introduced in , featured distributed peripherals with a full 8237 map, enabling compatibility for ISA-based requests while extending capabilities to for higher-performance devices like controllers. This allowed systems to handle both legacy 8/16-bit at up to 8.3 MB/s and modern transfers, bridging the gap for mixed environments. By the Pentium era in the late 1990s, primary DMA operations had largely transitioned to bus mastering protocols, which offered superior bandwidth and flexibility without the 8237's 16-bit address limitations. However, chipsets like the () retained 8237-compatible modes in their southbridges to ensure for essential peripherals such as controllers and sound cards on the declining bus. This preservation extended into early 2000s platforms, gradually phasing out as and later /PCIe supplanted entirely.

Successors and Modern DMA

By the late 1990s, the Intel 8237 DMA controller had largely been supplanted in mainstream computing by advanced bus architectures such as PCI, which enabled device-initiated bus mastering for direct memory access without relying on legacy ISA-style controllers. USB interfaces further reduced the need for dedicated DMA hardware like the 8237 by providing standardized, high-speed peripheral connectivity with integrated transfer mechanisms managed by host controllers. However, to maintain backward compatibility with older software and peripherals, Intel's 82801 I/O Controller Hub (ICH) series, starting from the ICH0 in 1999 and continuing through models like the ICH5, incorporated emulated logic equivalent to two cascaded 82C37 (8237-compatible) DMA controllers, supporting up to eight channels for legacy ISA emulation over PCI and LPC buses. In parallel, software-based alternatives emerged to handle operations more flexibly, particularly through in operating system drivers. In Windows, drivers for and other bus-mastering devices utilize scatter-gather via APIs that map non-contiguous memory buffers into coherent transfers, allowing peripherals to initiate high-efficiency data movement without CPU intervention. Similarly, implements through the Engine framework, where drivers employ CPU instructions and scatter-gather lists to orchestrate transfers across fragmented memory regions, supporting both common and cyclic buffer modes for devices like network interfaces. Contemporary DMA solutions have evolved into sophisticated integrated controllers that prioritize , security, and throughput. On platforms, the PrimeCell PL330 DMA controller facilitates multi-channel, AXI-based transfers with support for burst modes and scatter-gather operations, achieving speeds up to approximately 400 MB/s in typical benchmarks. For x86 systems, Intel's VT-d (Virtualization Technology for Directed I/O), the implementation of IOMMU, enables secure, virtualized DMA remapping for peripherals, allowing isolated high-speed transfers—often exceeding 1 GB/s via PCIe—while preventing unauthorized access in virtualized environments. Despite these advancements, the 8237's design persists in niche applications through , particularly in retro and certain embedded systems as of 2025. FPGA-based recreations, such as those targeting 1980s-era PCs like the 286, faithfully replicate the 8237's operation for accurate hardware simulation in projects like platform and custom Ulx3s boards. This ensures compatibility for vintage software and hardware preservation, bridging the gap between legacy protocols and modern reconfigurable logic.

Variants

Original and Enhanced Versions

The Intel 8237, introduced in 1979, served as the foundational NMOS implementation of the programmable controller, operating at a base clock speed of 3 MHz and providing four independent channels for data transfers. In the 1980s, Intel released the enhanced 8237A variant, which increased the clock speed to 5 MHz and addressed certain timing inconsistencies in signal generation, offering marginally better power efficiency under load; this version became the standard in most personal computers, including early systems. Compared to the original, the 8237A addressed certain timing inconsistencies in signal generation and offered marginally better power efficiency under load, while maintaining the same 40-pin () for compatibility. Both the 8237 and 8237A entered discontinuation during the 1990s as integrated chipsets supplanted discrete controllers, though Intel published updated datasheets with full specifications as late as 1993.

CMOS and Third-Party Variants

The 82C37A, introduced in the by (later acquired by Harris and Renesas), represents a low-power implementation of the original NMOS 8237A controller. Fabricated using a 2-micron process, it maintains full pin compatibility and operational modes with the 8237A while offering significantly reduced power consumption through its static design, which supports gated clock operation and a standby mode with the clock stopped (maximum 10 µA). Operating at 5V (4.5V to 5.5V range), the 82C37A draws a maximum of 2 mA per MHz during active operation, enabling its use in power-sensitive applications such as early laptops and systems paired with microprocessors like the 80C88 or 80C286. Third-party variants expanded the 8237 family's reach, with AMD's Am9517 serving as the foundational design licensed by for the original 8237. The Am9517, an NMOS device operating at 5V, provided four independent channels with features like memory-to-memory transfers, autoinitialization, and cascade mode, achieving transfer rates up to 2 million words per second in compressed timing configurations. NEC's μPD71037, a CMOS-compatible high-speed from the , supported clock rates up to 10 MHz (with some references to 20 MHz variants) and four channels, targeting systems requiring faster without altering the core interface. Additionally, Harris/ produced the 82C37A-10, a 10 MHz variant that enhanced performance over the base 82C37A while retaining low-power benefits and compatibility for and portable . These CMOS and third-party implementations added value through improved electromagnetic interference (EMI) characteristics inherent to CMOS technology and standby power savings, making them suitable for battery-powered devices and embedded controllers into the 2000s. By the 2020s, production of these variants ceased, rendering them obsolete for new designs, though new old stock (NOS) parts remain available from surplus suppliers, and FPGA-based equivalents are offered for retrocomputing and legacy system emulation projects.

References

  1. [1]
    [PDF] 8237A HIGH PERFORMANCE PROGRAMMABLE DMA ... - PDOS-MIT
    The 8237A is designed to be used in conjunction with an external 8-bit address latch. It contains four indepen- dent channels and may be expanded to any number ...
  2. [2]
    24.3. DMA: What it Is and How it Works
    Oct 8, 1997 · The PC DMA subsystem is based on the Intel 8237 DMA controller. The 8237 contains four DMA channels that can be programmed independently and ...<|control11|><|separator|>
  3. [3]
    EXHIBIT 99.1 - 10-Q: Quarterly report pursuant to Section 13 or 15(d)
    Nov 4, 1994 · In 1976, Intel and AMD entered into a patent cross 4 licensing agreement. In part, the purpose of the 1976 Agreement was to allow AMD to use ...
  4. [4]
    [PDF] Am9517A - Bitsavers.org
    The Am9517A offers a wide variety of programmable control features to enhance data throughput and system opti- mization and to allow dynamic reconfiguration ...
  5. [5]
    x86 cpus' Guide - View details on Intel 8237-5 PDIP
    Release date, 1979 ; Functions/Features, None ; Part Number, P8237-5 (OEM) ; Rarity, * ; In collection ? yes, in 1 collection : Xhoba.
  6. [6]
    [PDF] Intel 8237 datasheet - The Retro Web
    The multimode DMA controller issues a HRQ to the processor whenever there is at least one valid DMA request from a peripheral device. When the processor replies ...Missing: Am9517 history
  7. [7]
    The Danger of Datasheets - The OS/2 Museum
    Dec 11, 2019 · 7 1989, which rehashed the hardware article from the first '87/88 issue. On page 37, an article titled simply Der DMA-Controller 8237 (The 8237 ...Missing: introduction | Show results with:introduction
  8. [8]
    Intel Solutions Publication - CPU-World.com forums :: View topic
    Curiously, the price of Intel 8237-2 DMA controller went up to USD $25.00 in quantities of 100 Confused Source: Intel Corporation, "New EPROM completes 5MHz ...
  9. [9]
    [PDF] The Intel Microprocessors 8086/8088, 80186/80188, 80286, 80386 ...
    Please note that the 8086/8088 are still used in embedded systems along with their updated counterparts, the 80186/80188 and 80386EX embedded microprocessor.
  10. [10]
    None
    Nothing is retrieved...<|control11|><|separator|>
  11. [11]
    Pin Diagram and Pin description of 8237 -DMA - Scanftree.com
    The 8237A allows an external signal to terminate an active DMA service. This is accomplished by pulling the EOP input low with an external EOP signal.
  12. [12]
    ISA DMA - OSDev Wiki
    On a 8237 chip, there is only one flip-flop. And there are eight of the 16 bit registers. And there can be up to three device drivers all competing for the use ...<|control11|><|separator|>
  13. [13]
    8237 DMA Controller - Lo-tech Wiki
    This controller contained 4 independent 8-bit channels consisting of both an address register and counter.
  14. [14]
    None
    ### Summary of Intel 8237A DMA Controller Registers
  15. [15]
    Operating Systems Development - 8237A ISA DMAC
    Command Register. This register is used to control the DMAC. It has the following format: Bit 0: MMT Memory to Memory Transfer. 0 ...
  16. [16]
    None
    ### Summary of 82C37A Datasheet (Compatible with 8237)
  17. [17]
    [PDF] DMA Controller – 8257/8237
    The controller decides the priority of simultaneous DMA requests communicates with the peripheral and the CPU, and provides memory addresses for data transfer.
  18. [18]
  19. [19]
    [PDF] IBM PC Technical Reference - Bitsavers.org
    ... Intel 8088 microprocessor. This processor is an 8-bit bus version of the 16-bit 8086 processor by. Intel. It is software compatible with the 8086 and, thus ...<|separator|>
  20. [20]
    [PDF] 1502237_PC_XT_Technical_Ref...
    The IBM Personal Computer XT Technical Reference manual describes the hardware design and provides interface information for the IBM Personal Computer XT.<|control11|><|separator|>
  21. [21]
    [PDF] 1502494_PC_AT_Technical_Ref...
    ... Intel 8237 A-5. DMA Controller Chips are used, with four channels for each ... AND DESIGN OF BIOS ...
  22. [22]
    [PDF] DMA Fundamentals on Various PC Platforms
    The 8237A DMA controller of the PC performs 8-bit, flyby transfers because the PC has an 8-bit bus. When an I/O device needs a DMA transfer, the device asserts.
  23. [23]
    I/O Addresses, IRQs and DMA Channels Explained - DOS Days
    I/O address is a hex number for device identification. IRQ is a line for interrupt signals. DMA channel allows direct memory access without CPU.
  24. [24]
    [PDF] intel® 82230/82231 - The Retro Web
    The 82230/82231 are two-chip implementations of LSI/MSI/SS! logic controlling the IBM PC-AT, providing a low power, highly integrated PC-AT design solution.Missing: 82301 | Show results with:82301
  25. [25]
    [PDF] 82371FB (PIIX) and 82371SB (PIIX3) PCI ISA IDE Xcelerator
    The 82371 FB (Pl IX) and 82371 SB (PllX3) PCI ISA I DE. Xcelerators are multi-function PCI devices implementing a PCl-to-ISA bridge function and an PCI IDE ...
  26. [26]
    [PDF] Intel Extended Temperature 82371EB PCI-TO-ISA/IDE Xcelerator ...
    Extended Temperature 82371EB (PIIX4E) Datasheet. 174. PRELIMINARY DRAFT. Table 25. 8237 Register Map to Distributed DMA Peripheral. I/O Address. 8237 F/F.
  27. [27]
    memory-to-memory DMA - NTDEV - OSR Developer Community
    Nov 23, 2005 · Intel 8237 support this features. But today's PC comes with >8237 DMA controller? The 8237-compatible logic is now a part of the PCI-to-ISA ...Missing: 82301 emulation
  28. [28]
    Direct Memory Access: Data Transfer Without Micro-Management
    Mar 31, 2021 · Direct Memory Access (DMA) frees the CPU from memory transfers, allowing peripheral devices to directly access memory without CPU intervention.Missing: phases DACK<|control11|><|separator|>
  29. [29]
    [PDF] Intel(R) 82801EB/ER I/O Controller Hub (ICH5/ICH5R) Datasheet
    Support for Security Devices connected to LPC. □ Enhanced DMA Controller. — Two cascaded 8237 DMA controllers.
  30. [30]
    Using Scatter/Gather DMA - Windows drivers | Microsoft Learn
    Dec 14, 2021 · Drivers that perform system or bus-master, packet-based DMA can use support routines designed especially for scatter/gather DMA.
  31. [31]
    How to Use Linux DMA for High-Speed Data Transfers - Voxfor
    Apr 7, 2025 · This comprehensive guide explores how to master Linux DMA for high-speed data transfers, covering everything from conceptual fundamentals to best practices.Exploring DMA in the Linux... · Setting Up a DMA... · Linux DMA API and Core...
  32. [32]
    Benchmark of DMA between an FPGA and a Linux userspace on a ...
    Nov 4, 2024 · From the DMA benchmarks, the maximum throughput to be expected is close to 400 MB/s. This is the maximum available data that can be transferred.
  33. [33]
    286 CPU Experiments | Vintage Computer Federation Forums
    Jul 7, 2025 · I have an Arduino program that can control and single-step a 80286. I have an Intel 80C286 and a Harris 80C286 available for testing.
  34. [34]
    Retro computing on the Ulx3s ECP5 FPGA board - GitHub
    Emulation of old computers, game consoles and arcade machines on Field-Programmable Gate Arrays (FPGAs), if done well, can be much more accurate than software ...
  35. [35]
  36. [36]
    [PDF] 16-BIT V-SERIES MICROPROCESSOR DATA BOOK
    Page 1. 16-BIT V-SERIES. MICROPROCESSOR DATA BOOK. NEC. Page 2. NEC Electronics ... µPD71037. Direct Memory Access (OMA) Controller. µPD710S1. Serial Control ...