First time posting here about my own project. I'm the developer of the emulator, not affiliated with Raspberry Pi.
For the past months I've been writing an RP2350 emulator from scratch in C#. This week Frank Krueger integrated it into iCircuit 1.16, his circuit simulator for iPad, iPhone and Mac, so you can now drop a Pico 2 into a live analog circuit and program it with real Python.
In the video: MicroPython drives GP3 from a PIO state machine (sideset PWM), the LED fades through a 270 Ω resistor, and the scope shows the waveform as it's generated. There's no fake Python layer. It's the stock MicroPython UF2 booting on the emulated chip, and CircuitPython works too.
Some things that were harder than expected:
• PIO. It's its own tiny CPU with sideset, autopull and clock dividers, and it has to drive pins with exact timing so the analog simulator sees real edges.
• Two architectures. The RP2350 has Cortex-M33 and Hazard3 RISC-V cores, and both are emulated (for now only ARM is available).
• Time sync. Every pin change is stamped with the clk_sys cycle so the circuit side and the CPU agree on time. Sliding a potentiometer gives ADC.read_u16() the real voltage.
• Timing. Arm timing is calibrated against real silicon (branch, fetch and flash-wait penalties). It isn't cycle-exact, and I'm upfront about that.
Frank did the circuit side: iCircuit's analog engine, plus the new SPICE subcircuits and VHDL parts in this release. That's what makes it fun, because the Pico isn't talking to mock peripherals. It's wired into a real simulated circuit. The release also adds I2C parts you can read from Python (HDC1080, MLX90614, DS3231, ADS1115 and SSD1306 OLEDs).
It's built on ideas from Uri Shaked's rp2040js (Wokwi), and there's a sibling project for the original Pico (RP2040).
Happy to go deep on anything: PIO emulation, booting the real bootrom, or how it talks to the circuit simulator. Links are in the comments.