Skip to content

xrip/RP8086

Repository files navigation

RP8086

Аппаратно-программный комплекс на базе Raspberry Pi RP2350B в качестве чипсета для процессора Intel 8086

RP2350B выполняет роль контроллера шины, эмулятора ROM/RAM и полного набора микросхем IBM PC/XT, обеспечивая полнофункциональную работу процессора i8086 на частоте 4.75 МГц.

✨ Основные возможности

  • 🚀 Высокая производительность — стабильная работа i8086 на частоте 4.75 МГц благодаря разгону RP2350B до 500 МГц.
  • 💾 Большой объем памяти736 КБ оперативной памяти (через внешнюю PSRAM) и 16 КБ видеопамяти.
  • 📺 Аппаратный видеовыход CGA/PCjr — полноценная эмуляция Color Graphics Adapter с выводом на физический VGA-порт (GPIO 30-37):
    • Текстовый режим: 80×25 (16 цветов)
    • CGA графика: 320×200×4 цвета
    • PCjr графика: 160×200×16 и 320×200×16 цветов (совместимость с IBM PCjr/Tandy 1000)
  • 🎮 Полная эмуляция чипсета IBM PC/XT:
    • i8259 (Programmable Interrupt Controller)
    • i8253 (Programmable Interval Timer)
    • i8237 (DMA Controller)
    • i8272 (Floppy Disk Controller)
    • i8042 (Keyboard Controller)
    • 16550 UART (COM1 Port)
    • XTIDE (IDE/ATA Hard Disk Controller)
  • 💿 Загрузка ОС с SD карты — успешная загрузка DR-DOS 7 и других DOS-систем с образов дисков (.img), хранящихся на SD карте (FAT12/FAT16/FAT32). Поддержка форматов: 160KB, 180KB, 320KB, 360KB, 720KB, 1.2MB, 1.44MB.
  • 💾 Поддержка жестких дисков — полная эмуляция XTIDE контроллера (порты 0x300-0x308) с поддержкой LBA28 и CHS адресации. Работа с образами HDD через файл hdd.img на SD карте.
  • ⌨️ USB клавиатура и мышь — поддержка USB HID устройств через встроенный USB Host контроллер RP2350B (TinyUSB stack):
    • Клавиатура: автоматическая конвертация USB HID → XT Scancodes → i8042 контроллер
    • Мышь: эмуляция Microsoft Serial Mouse через COM1 (порты 0x3F8-0x3FF)
    • Поддержка USB хабов (до 4 устройств одновременно)
    • Plug & Play — автоопределение при подключении к Type-C порту RP2350B
  • Двухъядерная архитектура — Core0 (UI, USB HID, клавиатура, видео, SD карта, отладка), Core1 (обработка шины, эмуляция устройств, IRQ).
  • 🔊 PC Speaker — аппаратный звуковой вывод через PWM (GPIO 46), эмулирует Intel 8253 PIT Channel 2 для системных звуков.

🏗️ Архитектура

Двухслойная обработка шины

┌─────────────────────────────────────────────────────────┐
│  Intel 8086 CPU @ 4.75 MHz                              │
└──────────────────────┬──────────────────────────────────┘
                       │ 20-bit адрес + управляющие сигналы
                       ↓
┌─────────────────────────────────────────────────────────┐
│  Слой 1: PIO State Machine @ 500 MHz (аппаратный)      │
│  • Захват адреса/данных/сигналов (ALE, RD, WR, INTA)     │
│  • Управление READY для wait states (через side-set)    │
│  • Генерация IRQ для ARM (WR, RD, INTA)                 │
└──────────────────────┬──────────────────────────────────┘
                       │ FIFO + IRQ
                       ↓
┌─────────────────────────────────────────────────────────┐
│  Слой 2: ARM Cortex-M33 @ 500 MHz (программный)        │
│  • Обработка прерываний PIO (чтение/запись/INTA)        │
│  • Эмуляция RAM/ROM/VRAM (736KB PSRAM + 16KB VRAM)      │
│  • Эмуляция всех периферийных устройств (порты I/O)     │
│  • USB HID обработка (клавиатура → XT, мышь → COM1)     │
└─────────────────────────────────────────────────────────┘

Разделение задач между ядрами

Core0 (Main) Core1 (Bus Handler)
Инициализация USB Host, PSRAM, VGA, SD карта Инициализация PIO, часов и сброс CPU
USB HID обработка (клавиатура, мышь через TinyUSB) Полная обработка циклов шины i8086
Конвертация USB → XT Scancodes → i8042 Генерация таймерного IRQ0 (18.2 Гц)
Эмуляция Microsoft Serial Mouse → COM1 Управление сигналом INTR для CPU
VGA видеовыход @ 60 FPS (PIO1 + DMA) Эмуляция всех устройств (PIC, PIT, DMA, FDC...)
Обработка отладочных команд PC Speaker PWM управление
Режим терминала CTTY (через виртуальный COM1) Обработка прерываний IRQ0-IRQ7 через i8259

📌 Распиновка GPIO

Шина данных/адреса i8086 (GPIO 0-19)

GPIO Назначение Направление Описание
0-15 AD0-AD15 Bidirectional Мультиплексированная шина адрес/данные (16-bit)
16-19 A16-A19 Input Старшие биты адреса (20-bit адресация)

Управляющие сигналы i8086 (GPIO 20-29)

GPIO Сигнал Направление Описание
20 ALE Input Address Latch Enable
21 RD Input Read strobe (активный LOW)
22 WR Input Write strobe (активный LOW)
23 INTA Input Interrupt Acknowledge (активный LOW)
24 M/IO Input Memory/IO select (1=память,0=I/O)
25 BHE Input Bus High Enable (8/16-bit операции)
26 INTR Output Interrupt Request (активный HIGH)
27 READY Output Wait state control (управляется PIO sideset)
28 RESET Output Reset (активный HIGH)
29 CLK Output Clock @ 4.75 MHz (через PWM, 33% duty cycle)

Видеовыход VGA (GPIO 30-37)

GPIO Назначение Направление Описание
30-37 VGA_DATA[0:7] Output 8-битный цифровой видеосигнал для CGA (RGBI)

📺 Примечание: VGA-драйвер работает на PIO1, генерируя аналоговый сигнал через резисторную матрицу (R-2R DAC).

SD Card (SPI1, GPIO 40-43)

GPIO Сигнал Направление Описание
40 MISO Input Master In Slave Out (данные от карты)
41 CS Output Chip Select (выбор SD карты)
42 SCK Output SPI Clock
43 MOSI Output Master Out Slave In (данные к карте)

💾 Примечание: SD Card используется для загрузки образов дискет и файловых систем.

PC Speaker (GPIO 46)

GPIO Назначение Направление Описание
46 BEEPER Output PC Speaker output (через PWM для генерации звука)

🔊 Примечание: Эмулирует Intel 8253 PIT Channel 2 для генерации системных звуков.

Внешняя память PSRAM (GPIO 47)

GPIO Сигнал Направление Описание
47 PSRAM_CS Output Chip Select для внешней PSRAM (736 КБ RAM)

🧠 Примечание: PSRAM подключена через QMI (Quad SPI Memory Interface) для высокоскоростного доступа.

Сводная таблица занятости GPIO

Диапазон GPIO Назначение Количество пинов
0-15 Шина AD0-AD15 (i8086) 16
16-19 Шина A16-A19 (i8086) 4
20-29 Управляющие сигналы i8086 10
30-37 VGA видеовыход 8
40-43 SD Card (SPI1) 4
46 PC Speaker 1
47 PSRAM Chip Select 1
Итого 44 GPIO

USB периферия (встроенный контроллер RP2350B)

Интерфейс Назначение Описание
USB Type-C USB Host для HID устройств Клавиатура + мышь через встроенный USB контроллер RP2350B

📝 Примечание: USB Host работает независимо от GPIO через встроенный USB контроллер RP2350B (TinyUSB stack). Поддерживается до 4 HID устройств одновременно через USB хабы.

⚠️ Важно: RP2350B является 5V tolerant на входах, поэтому подключение к i8086 (5V логика) возможно напрямую без согласования уровней. Выходные пины RP2350B работают на 3.3V, но этого достаточно для надежного управления i8086.

🔄 Логика обработки шины

Логика обработки циклов шины полностью реализована в PIO и двух обработчиках прерываний на Core1, работающих с наивысшим приоритетом.

  • Цикл чтения (RD): PIO захватывает адрес, генерирует IRQ1. ARM-обработчик читает данные из RAM/VRAM/Port и отправляет их обратно в PIO TX FIFO. PIO выставляет данные на шину и снимает READY.
  • Цикл записи (WR): PIO захватывает адрес и данные, генерирует IRQ0. ARM-обработчик записывает данные в RAM/VRAM/Port.
  • Цикл INTA: PIO обнаруживает сигнал INTA, генерирует IRQ3. ARM-обработчик получает вектор прерывания от эмулируемого i8259 и передает его процессору в следующем цикле чтения.

🛠️ Сборка

Требования

  • Pico SDK (установить PICO_SDK_PATH)
  • CMake ≥ 3.13
  • ARM GCC toolchain
  • Git

Команды сборки

# Пример для сборки под RP2350B
cd cmake-build-rp2350b
cmake --build .

# Результат: bin/rp2350b/RP8086.uf2

🎯 Использование

Debug команды

Специальные команды (заглавные буквы, не отправляются в i8086):

  • M — Memory dump (интерактивный ввод адреса в hex).
  • V — Video RAM dump (содержимое видеопамяти 0xB8000).
  • R — Reset CPU (сброс i8086).
  • B — Reboot to bootloader (перепрошивка RP2350B).
  • C — Переключение в режим CTTY (ввод/вывод через COM1/USB, отключает видео).
  • P — Вывод текущих значений регистров CRTC/CGA.

📊 Технические характеристики

Параметр Значение
МК Raspberry Pi RP2350B
Частота МК 500 МГц (разгон с повышением напряжения до 1.60V)
Частота i8086 4.75 МГц
Частота PIO 500 МГц
RAM 736 КБ (внешняя PSRAM через QMI)
ROM 8 КБ (Turbo XT BIOS v3.1)
Video CGA/PCjr: текст 80×25, CGA 320×200×4, PCjr 160×200×16 / 320×200×16
Video RAM 16 КБ (по адресу 0xB8000)
Видеовыход 8-битный VGA-порт (GPIO 30-37, R-2R DAC)
Звук PC Speaker (GPIO 46, PWM, i8253 Channel 2)
Эмулируемые устройства i8259 PIC, i8253 PIT, i8237 DMA, i8272 FDC, i8042 KBC, 16550 UART, XTIDE
Загрузка дисков SD карта (SPI1, GPIO 40-43) с образами .img (FAT12/16/32)
Жесткий диск XTIDE контроллер (порты 0x300-0x308), LBA28/CHS, образ hdd.img на SD
Поддержка форматов 160KB, 180KB, 320KB, 360KB, 720KB, 1.2MB, 1.44MB
USB Host Встроенный контроллер RP2350B (TinyUSB stack)
USB устройства Клавиатура (USB HID → XT), Мышь (Serial Mouse → COM1)
USB возможности До 4 HID устройств, поддержка хабов, Plug & Play

🏆 Достижения

✅ Успешно загружается DR-DOS 7 и другие DOS-системы с SD карты. ✅ Полная эмуляция чипсета IBM PC/XT с поддержкой DMA и FDC. ✅ Стабильная работа i8086 на частоте 4.75 МГц. ✅ Реализован видеоадаптер CGA/PCjr с поддержкой 4 видео режимов и выводом на физический VGA-порт. ✅ Работа с внешней PSRAM для увеличения доступной памяти до 736 КБ. ✅ SD карта для загрузки образов дисков с поддержкой FAT12/16/32 файловых систем. ✅ PC Speaker для системных звуков через аппаратный PWM. ✅ USB Host поддержка: полная работа с USB клавиатурой и мышью через встроенный контроллер RP2350B (TinyUSB stack). ✅ Plug & Play: автоматическое определение USB HID устройств при подключении к Type-C порту. ✅ Совместимость с DOS драйверами: мышь работает через Microsoft Serial Mouse протокол (CTMOUSE, MOUSE.COM). ✅ Поддержка жестких дисков: полная эмуляция XTIDE контроллера с LBA28 и CHS адресацией для работы с образами HDD на SD карте.


Разработано с использованием C23, Pico SDK и PIO assembly

About

IBM PC XT i8086 chipset using Rapberry Pi Pico RP2350B

Topics

Resources

Stars

Watchers

Forks

Contributors 2

  •  
  •