惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Full Disclosure
WordPress大学
WordPress大学
小众软件
小众软件
Cloudbric
Cloudbric
AWS News Blog
AWS News Blog
腾讯CDC
量子位
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Vulnerabilities – Threatpost
Scott Helme
Scott Helme
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
C
CXSECURITY Database RSS Feed - CXSecurity.com
The Hacker News
The Hacker News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
Jina AI
Jina AI
Attack and Defense Labs
Attack and Defense Labs
S
SegmentFault 最新的问题
Simon Willison's Weblog
Simon Willison's Weblog
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
T
Tailwind CSS Blog
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
Google Online Security Blog
Google Online Security Blog
美团技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog
罗磊的独立博客
L
LINUX DO - 最新话题
博客园 - Franky
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
The Last Watchdog
The Last Watchdog
J
Java Code Geeks
AI
AI
C
Cisco Blogs
酷 壳 – CoolShell
酷 壳 – CoolShell
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
Help Net Security
Help Net Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
I
Intezer
S
Securelist

KittenLabs

Casiomania Marantz UD5007 power supply replacement AnotterKiosk GPD Pocket 4 Speaker DSP IP-over-Toslink FX3 LVDS Frame grabber Extreme Pi Boot Optimization WiFi auth with OsmoHLR/SIM cards Windows 11 tweaks & usability improvements Using custom domains as a Fediverse redirect 25GBit/s on macOS & iOS Router overclocking Real gaming router Manage RDP certificates on Windows using SSH 20 port USB-C charger Reviving a dead Gigabyte MJ11-EC1 mainboard NVMe BIOS Option ROM 2.5GbE PCIe NIC mod board Blinkekatze ThinkPad T41/T43 USB-C HomeSwitch 4 DC UPS (Lithium) OLED nametag Thermal camera macro LPT printer emulator PC104 ISA adapter Palm IIIc USB-C OtterCast Gigaset DECT debug adapter M.2 NVMe -> miniPCIe Analog floppy synthesizer Dead TROTEC PAC2000S air conditioner Typewriter Teletype SolarCamPi Palm IIIc LED backlight IrDA to RS232 RGB LED nametag PlutoSDR standalone ADS-B FR24 feeder Five meter LED wall ATAPI Audio-CD player TCP/IP for Casio calculators eMMC (micro)SD card ISA8019 NIC Programmable logic in PHP Micro8088 build log FlexibleLOM PCIe adapter Graphical 128x64px VFD GPIO PATA/IDE on Linux CMM2 PCB OpenWRT als WireGuard-Appliance NeonMatrix Pinebook Pro M.2 WiFi Environmental sensor GPS locked Raspberry Pi Es'hail-2 transceiver setup ThinkPad PowerSeries 820 PlutoSDR clock input WiFi over satellite TV coax Search Results
ISA-over-USB
By Manawyrm and tSYS | Wednesday, October 14, 2020 · 2020-10-14 · via KittenLabs

Use real ISA cards in an emulator

What is it?

This project allows the use of ISA extension cards on a modern computer over a USB interface.
The main project goal was to learn about the ISA bus, not to build a polished product.

First prototype (Arduino Mega / AVR-based)

To get a feel for the ISA bus, an Arduino Mega 2560 was manually wired to an ISA slot. Little integrated switch-mode converters provide the -5V and -12V supply rails for ISA cards, a 74HCT32 OR-gate was used as a clock buffer for the 14.31818 MHz clock.

ISA backplane, soldered with lots of individual wires to an Arduino Mega ISA backplane, Arduino Mega and an ISA sound card Clock input, using a 74HCT32 logic IC Protoboard with 2x 5V isolating converters

The Arduino uses a very simple serial protocol to accept transactions from a PC.

r - read from memory  
w - write to memory  
i - read from I/O space  
o - output to I/O space  

are all of the supported transactions.
The Linux utility “isapnptools” was used back in the 1990s to configure Plug & Play ISA cards. This utility normally uses outb/inb commands to directly talk to the I/O-registers of an x86 machine. It was modified to redirect all I/O accesses to a serial connection instead.

In this video, isapnptools runs on a Linux machine, detects and configures an Aztech ISA sound card connected to the Arduino Mega and then starts a simple OPL playback routine (which sends music data to the sound cards synthesizer registers):

STM32-based ISA-over-USB card

ISASTM PCB ISASTM backside ISASTM board, installed into an ISA backplane ISASTM board, installed into an ISA backplane with different cards

Because the performance of the Arduino Mega was limited by the available CPU performance, not the USB bus itself, a STM32-based ISA adapter card was designed. This card includes an STM32H743 with external SDRAM and a native USB 1.1 interface. The STM + SDRAM design was also used in the CMM2 clone project, so we were already familiar with the MCU.

The x86 emulator PCem was modified to redirect certain memory and I/O calls to the STM32 card. This allows a virtual machine to use real ISA peripherals like a sound card, video card or POST analyser card:

You can see the slow scrolling performance. This is a result of the maximum transfer speed of the USB interface. For scrolling, the entire screen content needs to be read and written back to a different address. With 1000 accesses per second in total, scrolling the entire screen takes a while.

STM32-standalone PC emulation

With the fast STM32H743 and external SDRAM, a port of PCem to the 32bit ARM inside the STM32 was attempted. We were able to execute enough BIOS code to initialize the VGA card and get a first Award BIOS screen, but didn’t get any further.
PCem’s code does a lot of unaligned memory accesses (which aren’t possible on the 32bit ARM architecture).

ISASTM board, installed into an ISA backplane, with Segger J-Link attached Monitor, showing the VGA BIOS message from a graphics card

A similar setup with a much faster, arm64 CPU like on a Raspberry Pi would be a good target platform for further experiments. This would also enable the use of the x86->arm64 JIT. The BCM2835 chips also have a SMI feature, which might be use for low-latency, high-speed bus interfacing. PCIe (either with an FPGA or WCH-IC converter) might also be an interesting target.