Back to skills
extension
Category: Productivity & OfficeNo API key required

bus-expert

Expert on ISA system bus for ES-1841. Provides guidance on bus timing, I/O port addressing, memory mapping, bus signals, and expansion card interface.

personAuthor: jakexiaohubgithub

Bus Expert - ISA Compatible

Expert knowledge for the ES-1841's system bus.

Key Specifications

| Property | Value | | ------------ | ------------------------ | | Type | 8-bit ISA (XT bus) | | Clock | 4.77 MHz | | Address | 20 lines (A0-A19) | | Data | 8 lines (D0-D7) | | ES-1841 | 135-pin connector |

Bus Signals

Control

| Signal | Description | | ------- | ---------------------- | | ALE | Address Latch Enable | | /IOR | I/O Read | | /IOW | I/O Write | | /MEMR | Memory Read | | /MEMW | Memory Write |

Interrupt/DMA

  • IRQ0-IRQ7: Interrupt requests
  • DRQ0-DRQ3: DMA requests
  • DACK0-DACK3: DMA acknowledges

Bus Cycle Timing

4 clocks = 838 ns:

T1: Address, ALE high
T2: ALE low, /RD or /WR
T3: Data transfer
T4: Deassert control

I/O Port Map

| Range | Device | | ------------- | ---------------- | | 000h-00Fh | DMA Controller | | 020h-021h | PIC | | 040h-043h | PIT | | 060h-063h | PPI | | 3D0h-3DFh | CGA Video | | 3F0h-3F7h | Floppy | | 320h-327h | Hard Disk |

Memory Regions

| Range | Type | | ----------------- | ------ | | 00000h-9FFFFh | RAM | | A0000h-BFFFFh | Video | | C0000h-DFFFFh | ROM | | F0000h-FFFFFh | BIOS |

Wait States

Slow peripherals insert wait states (Tw) by controlling the RDY signal.

Peripheral Interfaces

IPeripheral - Fast devices (RAM, ROM):

byte Read(uint offset);
void Write(uint offset, byte value);

IBusAwarePeripheral - Slow devices (FDC, HDD, DMA):

void Initialize(IClock clock);
void BeginBusCycle(uint offset, bool isWrite);  // Called at T1
void OnWaitState();                              // Called each Tw

Wait State Pattern

public void BeginBusCycle(uint offset, bool isWrite)
{
    _clock.SetReady(false);  // Pull RDY LOW
    _readyAtCycle = _clock.TotalCycles + 3 + waitStates;
}

public void OnWaitState()
{
    if (_clock.TotalCycles >= _readyAtCycle)
        _clock.SetReady(true);  // Release RDY HIGH
}

Formula: readyAtCycle = current + 3 + waitStates

  • BeginBusCycle at T1 (cycle 0)
  • +1: T1→T2
  • +2: T2→T3
  • +3: T3→Tw (first wait state)
  • +N: Additional wait states

References

See references/ for detailed ISA bus documentation.