Аппаратно-программный комплекс на базе 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 | Назначение | Направление | Описание |
|---|---|---|---|
| 0-15 | AD0-AD15 | Bidirectional | Мультиплексированная шина адрес/данные (16-bit) |
| 16-19 | A16-A19 | Input | Старшие биты адреса (20-bit адресация) |
| 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) |
| GPIO | Назначение | Направление | Описание |
|---|---|---|---|
| 30-37 | VGA_DATA[0:7] | Output | 8-битный цифровой видеосигнал для CGA (RGBI) |
📺 Примечание: VGA-драйвер работает на PIO1, генерируя аналоговый сигнал через резисторную матрицу (R-2R DAC).
| 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 используется для загрузки образов дискет и файловых систем.
| GPIO | Назначение | Направление | Описание |
|---|---|---|---|
| 46 | BEEPER | Output | PC Speaker output (через PWM для генерации звука) |
🔊 Примечание: Эмулирует Intel 8253 PIT Channel 2 для генерации системных звуков.
| GPIO | Сигнал | Направление | Описание |
|---|---|---|---|
| 47 | PSRAM_CS | Output | Chip Select для внешней PSRAM (736 КБ RAM) |
🧠 Примечание: PSRAM подключена через QMI (Quad SPI Memory Interface) для высокоскоростного доступа.
| Диапазон 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 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Специальные команды (заглавные буквы, не отправляются в 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