Releases: xrip/pico-286
Full VGA/EGA support
๐ฏ Major Features & Improvements
VGA/EGA Graphics System Overhaul
- Complete VGA 256KB Support: Full implementation of VGA graphics modes with 256KB video memory using planar memory layout with 0xP3P2P1P0 byte packing
- EGA Graphics Modes: Added support for EGA 320x200x16 (0x0D), 640x200x16 (0x0E), and 640x350x16 (0x10) modes with proper plane expansion
- VGA Mode Implementation: Complete VGA 640x480x16 (0x12) and enhanced VGA 320x200x256 (0x13) rendering
- Chain4 Mode Support: Proper handling of VGA chain4 mode for 256-color graphics with
chain4flag invga_cache_t - Pixel Packing Optimization: Replaced
spread4_u32withega_pack8_from_planesfor improved clarity and code reuse across platforms - Enhanced Memory Access: Added
vga_mem_read16implementation and optimized memory read/write operations with 32-bit latch system - Plane Expansion LUT: Added 16-entry plane expansion lookup table for efficient bit-plane to pixel conversion
Cross-Platform Graphics Performance
- Unified Rendering Logic: Standardized graphics rendering across Windows, Linux, and Pico platforms
- Loop Unrolling: Optimized EGA/VGA rendering loops for improved performance
- Bitwise Operations: Replaced division with bitwise operations for better performance
- Memory Alignment: 4-byte alignment for PSRAM variables and video memory buffers
PSRAM & Memory Management
- Butter-PSRAM Support: Auto-detection and configuration for Butter-PSRAM hardware with dynamic GPIO pin detection (GPIO 8 for MURM20, GPIO 47 for PIMO, GPIO 19 default)
- Dynamic Memory Allocation: Runtime PSRAM size detection (16MB, 8MB, 4MB, 1MB) with validation through test patterns
- Memory Layout Optimization: 4-byte alignment for all PSRAM variables (
RAM,UMB,HMA,EMS) withaligned(4)attribute - Virtual Memory Enhancement: Enhanced XMS/EMS memory management with shared UMB support and proper alignment
- PSRAM Frequency Control: Configurable PSRAM frequency (166MHz default) with timing adjustments
- Memory Mapping: PSRAM mapped at 0x11000000 with optimized access patterns
Platform-Specific Improvements
Raspberry Pi Pico (RP2040/RP2350)
- CPU Frequency Handling: Dynamic frequency configuration - 504MHz for Pico2 with HDMI, 378MHz for other HDMI configurations, 500MHz default
- PSRAM GPIO Auto-Detect: Automatic detection of onboard PSRAM GPIO configurations with hardware-specific pinouts
- Flash Frequency Control: Configurable flash frequency (100MHz default) with build name integration (F100-P166-500MHz format)
- Build Configuration: Streamlined CMake configuration with platform-specific optimizations and conditional compilation
- Performance Optimization: Strategic register keyword usage and memory access optimizations with
#pragma GCC optimize("Ofast")
Windows/Linux Host Builds
- MiniFB Integration: Improved MiniFB graphics interface with cleaner code
- All Video Modes: Complete support for PX3 video modes across all platforms
- Build Fixes: Resolved compilation issues across different host platforms
๐ Bug Fixes & Stabilization
Video System Fixes
- 40x25 Text Modes: Fixed rendering issues in 40-column text modes
- CGA Rendering: Corrected pointer types and rendering logic
- Palette Handling: Fixed incorrect palette usage in 640x350 EGA mode
- Boundary Checks: Removed redundant checks while maintaining safety
Memory Management Fixes
- XMS Alignment: Fixed 4-byte alignment for UMB memory blocks
- EMS Integration: Improved Expanded Memory Specification handling
- Memory Leaks: Resolved memory allocation and deallocation issues
- Swap System: Enhanced virtual memory swapping mechanisms
Audio & I/O Fixes
- Speaker Sample Integration: Fixed sound mixing logic for PC speaker
- Sound Blaster Emulation: Resolved swap-related sound card issues
- Port Handling: Improved I/O port access and timing
โก Performance Optimizations
Rendering Performance
- Bit Spreading Optimization: Fast bit spreading for EGA/VGA pixel processing
- Loop Unrolling: Reduced instruction count in critical rendering paths
- Memory Access Patterns: Optimized video memory access for better cache utilization
- Reduced Redundancy: Eliminated unnecessary buffer writes and calculations
Memory Performance
- Aligned Memory Access: 4-byte alignment for improved ARM architecture performance
- PSRAM Optimization: Optimized external PSRAM access patterns
- Virtual Memory: Improved page file access and caching
CPU Optimization
- Register Usage: Strategic use of register keyword for frequently accessed variables
- Bitwise Operations: Replaced expensive operations with faster alternatives
- Function Inlining: Critical path optimizations for better performance
๐ง Technical Improvements
Code Quality & Architecture
- Const Correctness: Added const qualifiers throughout codebase for better type safety
- Type Safety: Improved type handling with proper pointer arithmetic and casting
- Code Cleanup: Removed unused variables (
VIDEORAM,port3DAfrom graphics.h) and dead code paths - Header Organization: Better organization of include files and dependencies
- Variable Naming: Consistent naming conventions (e.g.,
ega_planesinstead of generic variables)
Memory Management Architecture
- Planar Memory Layout: VGA memory organized as 0xP3P2P1P0 (plane0 in lowest byte) for optimal 32-bit access
- 32-bit Latch System: Implemented VGA latch system for planar memory operations
- Memory Access Patterns: Optimized VIDEORAM indexing using bitwise AND instead of modulo operations
- Buffer Management: Unified buffer handling across graphics modes with proper alignment
Build System & Configuration
- CMake Streamlining: Removed complex conditional logic in favor of cleaner platform detection
- Build Naming: Enhanced build names with frequency information (F100-P166-500MHz format)
- Configuration Files: Added support for
config.286runtime configuration - Compilation Flags: Platform-specific optimization flags and conditional compilation
Full Changelog: v1.1.0...v2.0.0
๐ Pico-286 "Navigator" Release ๐
Unified firmware format. If firmware does not contains RP2350/RP2040 mark - its universal firmware for both Picos
The biggest update yet - now with host filesystem magic and cross-platform prowess!
Download preconfigured and finetuned boot disk FDD A:
๐ฏ Release Highlights
This massive release brings 112 commits of pure emulation excellence, transforming Pico-286 into a truly versatile PC emulator that bridges the gap between retro computing and modern convenience.
๐ Major New Features
๐๏ธ Host Filesystem Pass-Through (Network Redirector)
- Revolutionary new feature: Access your host computer's files directly from DOS!
- Full network redirector implementation with RBIL6 compliance
- Cross-platform support for Windows, Linux, and RP2350/RP2040
- Complete file operations: create, read, write, delete, search
- Directory operations and disk information queries
- Includes
mapdrive.comutility for easy drive mapping
๐ง Complete Linux Platform Support
- Native Linux builds with X11-based MiniFB graphics
- Multi-threaded architecture for optimal performance
- PulseAudio and OSS audio backend support
- Full keyboard and mouse input handling
- Cross-platform build system consistency
๐ต Enhanced Audio Experience
- Massive MIDI emulation improvements, especially for drums
- Pi Zero I2S audio support
- Expanded sound card emulation (PC Speaker, Covox, Disney Sound Source)
- Better audio mixing and real-time processing
๐ง Technical Improvements
Memory & Performance
- RAM increase: Bumped from 350KB to 384KB for more breathing room
- Enhanced virtual memory system with configurable
TOTAL_VIRTUAL_MEMORY_KBS - Improved PSRAM handling with better no-PSRAM fallback
- Advanced build optimizations with LTO and aggressive compiler flags
Graphics & Display
- ST7789 TFT driver enhancements with additional graphics modes
- HDMI optimization improvements for 80x25 color text mode
- Better EGA/VGA support with runtime toggling (Ctrl+Alt+KP*)
- MCGA support in no-EGA/VGA mode
- Fixed VGA plane size calculations
System Features
- A20 line emulation via port handling
- UMB (Upper Memory Blocks) redesign with 64+64+32+16 KB blocks
- Enhanced XMS implementation with proper UMB handling
- Speed control: Ctrl+Alt+KP- (slow down) / Ctrl+Alt+KP+ (speed up)
- Improved CPU emulation accuracy
๐ ๏ธ Developer Experience
Documentation Overhaul
- Comprehensive CLAUDE.md with detailed project guidelines
- Expanded README with complete build instructions
- New NETWORK_REDIRECTOR_DOCUMENTATION.md for filesystem features
- PORT_DOCUMENTATION.md for I/O port details
- VIDEO_MODES.md with supported graphics modes
- Developer-friendly architecture documentation
Build System Improvements
- Streamlined CMake configuration
- Better cross-platform compatibility
- Enhanced error handling and debugging
- Cleaner dependency management
Code Quality
- Extensive refactoring for maintainability
- Improved error handling throughout
- Better logging and debugging capabilities
- Cross-platform code unification
๐ Bug Fixes & Stability
- Fixed missing braces in switch cases
- Corrected VGA plane size declarations
- Win32 build fixes and improvements
- Linux-specific path handling fixes
- Memory allocation and cleanup improvements
- Sine calculation bitwise precedence fix
- Pattern handling improvements in file search
- Register usage corrections in network operations
๐ฎ Gaming & Software Compatibility
The enhanced memory management, improved graphics drivers, and new filesystem access capabilities mean:
- Better game compatibility with more available RAM
- Seamless file sharing between host and emulated system
- Improved audio experience in music and sound-heavy applications
- Faster loading times with optimized I/O operations
๐ What's Next?
This release establishes Pico-286 as the premier retro PC emulator for Raspberry Pi Pico, with robust cross-platform support and innovative features that make retro computing more accessible than ever.
Try It Out!
- Windows/Linux: Build with
cmake -DCMAKE_BUILD_TYPE=Release -DPICO_PLATFORM=host - RP2350: Use
cmake -DCMAKE_BUILD_TYPE=Release -DPICO_PLATFORM=rp2350 - Enable network drive: Use the included
mapdrive.comtool - Access host files: Map drives and enjoy seamless file access!
Happy retro computing! ๐ฎโจ
Full Changelog: View all 112 commits
What's Changed
- no-psram bug-fix by @DnCraptor in #10
- Feature/configurable vmem psram logic by @xrip in #11
- one more bug-fix for no-psram by @DnCraptor in #12
- I'll merge PR #13 and apply the suggestions. by @xrip in #14
- Docs: Update README with floppy and hard disk information by @xrip in #16
-
- turn EGA/VGA off by @DnCraptor in #15
-
- MCGA in no-EGA/VGA mode by @DnCraptor in #17
- Add port documentation by @xrip in #18
- A20 + UMB by @DnCraptor in #20
- Fix Host Build and Add Build Instructions by @google-labs-jules[bot] in #21
- I've fixed several bugs in your XMS implementation related to UMB hanโฆ by @xrip in #24
- This commit provides a comprehensive update to the project's documentโฆ by @xrip in #27
- Hostfs passthrough by @xrip in #30
- Feature/rp2350 network redirector by @xrip in #31
- docs: Add info on host filesystem pass-through by @xrip in #32
New Contributors
- @google-labs-jules[bot] made their first contribution in #21
Full Changelog: v1.0.0...v1.1.0
286 Personal Computer
What's Changed
- optimization by @DnCraptor in #2
- Performance optimizations by @DnCraptor in #3
- psram fix by @DnCraptor in #4
- RAM usage bug-fix / improvements by @DnCraptor in #5
-
- mouse sensitivity auto-throttling by @DnCraptor in #6
- blinking mode was fixed by @DnCraptor in #7
-
- repair gcc for Win build by @DnCraptor in #8
- Create readme by @xrip in #9
- All sound card emulators optimized by @xrip
New Contributors
- @DnCraptor made their first contribution in #2
- @xrip made their first contribution in #9
Full Changelog: https://github.com/xrip/pico-286/commits/v1.0.0