C64E to nowy projekt emulatora "ziemniaczka" autorstwa Christopher Broscharda. Napisany w C++, powoli i metodycznie obrasta w piórka i jest to na tyle młody projekt, że można go śledzić od totalnej podstawki;).
Commodore 64 Emulator v0.7.9.9 alpha 8/05/2026
Primarily an accuracy and stability release. The biggest improvements are in VIC-II timing groundwork, SID register/audio correctness, chip model selection, and safer PRG/cartridge transition behavior. These changes move the emulator closer to real C64 hardware behavior while also improving the debug tooling needed to keep refining compatibility.
- Continued VIC-II hardware accuracy improvements across raster timing, badline behavior, bus arbitration, border handling, and pixel-phase rendering.
- Improved SID emulation accuracy, including better register handling, filter routing, OSC3/ENV3 reads, audio underrun behavior, and 6581/8580 model selection.
- Added/expanded SID chip model selection so the emulator can switch between MOS 6581 and MOS 8580 behavior.
- Fixed PRG loading flow so loading a PRG performs a cleaner machine reset path, including cold reset behavior and cartridge detach handling.
- Improved emulator stability and diagnostics around display, audio, CPU, and media loading behavior.
Commodore 64 Emulator v0.7.9.5 alpha 26/04/2026
This update focuses on VIC-II rendering performance, smoother horizontal scrolling, improved raster-latched render behavior, and continued drive/media/UI work.
v0.7.9.7-alpha improves VIC-II rendering performance and stabilizes raster-latched rendering behavior. Pac-Man and Ms. Pac-Man now run without the previous audible slowdown, horizontal scrolling is smoother, and Spy Hunter’s lower-screen corruption has been fixed through improved render-register latching.
Drive emulation and media/UI work also continued, especially around 1571 native mode, D71 geometry/BAM behavior, 1581 IEC debugging, and disk image management.
Changes
VIC-II Rendering Performance
Improved the scanline rendering path to reduce per-raster overhead.
Changes include:
- Optimized border mask generation.
- Optimized raster line emission by writing the final raster color buffer directly.
- Removed unnecessary background-opacity copying for the current raster.
- Reduced renderer overhead enough to resolve audible slowdown in Pac-Man and Ms. Pac-Man.
Horizontal Scrolling Improvements
Improved horizontal scroll stability by making completed raster rendering use more consistent latched raster state.
Changes include:
- Background geometry now uses per-raster border/window latches.
- Text, bitmap, multicolor bitmap, and ECM render paths now use latched horizontal bounds.
- Background render paths now use latched character/bitmap/screen base state where appropriate.
- Multicolor text mode selection now follows latched D016 state during rendering.
This improved side scrolling in games such as Pac-Man and reduced visual jerkiness caused by mixing live register state with latched scanline state.
Raster Register Latching Cleanup
Improved the VIC-II render latch model.
Render-facing D011, D016, and D018 state is now latched at raster start instead of being retroactively changed by late register writes during the same raster.
This fixed a long-standing bottom-screen corruption issue in Spy Hunter, where late D011 writes near the bottom of the screen were affecting how the completed scanline was rendered.
Spy Hunter Bottom Screen Fix
Investigated and fixed the corrupted lower display area in Spy Hunter.
The issue was traced to late D011 writes around raster 241/242 that changed RSEL and Y-scroll timing near the bottom of the screen. The final fix was to stabilize per-raster render latches instead of bypassing the border or forcing display rows through the border mask.
Monitor / Debug Consistency
Cleaned up how VIC state is represented in monitor/debug output.
Current behavior:
- Raw register dumps continue to show live register values.
- Decoded render base addresses use latched raster state.
- Cycle/debug views continue to use effective/current timing state.
This keeps the monitor useful for both live register inspection and render-state debugging.
Sprite / DMA Timing Preservation
No final changes were made to sprite DMA fetch timing, BA/AEC arbitration, or sprite pointer/data fetch sequencing.
Earlier bus-owner-table experiments were abandoned because they introduced regressions in Pac-Man / Ms. Pac-Man speed and sprite behavior. The final stable changes focus on rendering performance and render-latch consistency only.
Drive Emulation Work
Continued investigation and cleanup around Commodore drive emulation.
Recent areas of work include:
- Continued 1571 native mode testing.
- D71 geometry and BAM/block-count debugging.
- 1581 IEC / device-present investigation.
- VIA/CIA timer behavior review, including Timer 2 one-shot behavior.
- Continued movement away from high-level IEC shortcuts toward ROM-driven IEC behavior.
Several behaviors were compared against VICE, especially around D71 loading, block counts, and 1571 native mode behavior.
Media / UI Work
Continued work on emulator media handling and UI organization.
Recent areas include:
- Blank disk image creation planning.
- D64/D71/D81 formatting behavior.
- Drive-specific disk creation menu work.
- Cartridge detach menu behavior.
- Drive status and LED/menu improvements.
Known Remaining Issues
Bottom Text Scrollers
Games such as Pitfall and Ghostbusters still show slightly jerky bottom text scrolling.
Current theory:
- The text renderer is now more consistent.
- The remaining issue is likely related to D016 horizontal scroll write timing.
- D016 may need targeted current-raster latch handling without disturbing D011/D018 behavior.
VIC-II Pixel Accuracy
The VIC-II is still primarily a cycle-timed scanline renderer rather than a full pixel/dot pipeline.
Known limitations:
- Sprites are still prepared and composed mostly per raster line.
- Sprite/background collision timing is still line-based.
- Border behavior is improved but not yet modeled as true pixel-time flip-flops.
- Some mid-line raster effects remain approximate.
1581 IEC Timing
1581 emulation still needs additional work.
- CIA/VIA IEC pin behavior.
- Drive CPU timing.
- ROM-driven IEC bus behavior.
- Correct ATN/DATA/CLK interaction.
- Device-present / startup handshake behavior.
Commodore 64 Emulator v0.7.9.5 alpha 12/04/2026
This release focuses on improving the hardware accuracy of the VIC-II emulation through a series of targeted fixes and cleanup work completed over the last two weeks. The main areas of improvement were bad-line handling, BA/AEC bus arbitration, display row progression, fetched-row ownership, open-bus behavior, raster timing cleanup, VIC state/save-load consistency, and joystick input handling through CIA1.
Highlights
VIC-II bad-line and display row improvements
- Refined bad-line behavior and tightened the relationship between bad-line start, row fetch setup, and active display state.
- Improved how display-row state is carried across lines to better match real VIC-II behavior.
- Decoupled parts of bad-line fetch startup from broader display-enable behavior.
- Cleaned up
vmliBasehandling so fetched row state remains more stable across display shutdown/opening transitions. - Added explicit bad-line matrix fetch progress tracking with
vmliFetchIndex, making the internal row-fetch model closer to real hardware and easier to reason about.
BA/AEC bus arbitration improvements
- Improved VIC-II bus arbitration behavior to better separate BA-low warning/ownership from true AEC-low CPU steal cycles.
- Sprite pointer fetches no longer force full AEC steals, while real sprite data fetches still do.
- Reduced overly aggressive bus-steal behavior that could cause performance/timing regressions in some games.
Fetched-row ownership and display sourcing
- Continued moving the emulator toward a cleaner model where fetched row data owns active display output.
- Improved consistency between bad-line fetched row data and the data consumed during active display.
- Laid groundwork for stricter FIFO-backed row usage during active display rendering.
Open-bus behavior cleanup
- Moved open-bus updates toward the actual fetch moment instead of later render-time usage.
- Cleaned up bitmap, ECM, text, sprite, and bad-line fetch paths so open bus is updated when bytes are actually fetched.
- Removed several duplicate render-time open-bus relatches that were less hardware-faithful.
Raster, IRQ, and latch timing cleanup
- Continued refining raster/IRQ timing behavior and per-raster latch usage.
- Improved handling of per-raster VIC register state and timing-sensitive behavior tied to those latches.
- Kept the internal timing model more consistent across line start, decision phases, and fetch phases.
Save/load and internal state correctness
- Expanded VIC save/load coverage to better preserve internal runtime state.
- Added persistence and restoration for new VIC runtime fields like bad-line fetch progress.
- Improved reset/frame-start cleanup so transient VIC row-fetch state does not leak across frames or states.
- Added additional sanity/clamp handling for restored VIC runtime values.
Joystick input fixes
- Fixed joystick handling for Joy1 and Joy2 through CIA1.
- Improved controller input routing so joystick state is presented through the correct hardware path instead of behaving inconsistently at the emulator input layer.
- Better matches real C64 joystick port behavior and improves compatibility with games that rely on correct CIA1-backed joystick input.
Practical impact
These changes improve compatibility and correctness across a range of timing-sensitive titles and test cases, especially in areas involving:
- bad lines
- display row progression
- bus arbitration
- sprite fetch interaction with CPU timing
- open-bus-sensitive behavior
- frame/row state stability
- joystick handling through CIA1
Internal focus of this release
This was primarily a hardware-accuracy release, not a feature release. Most of the work went into making the VIC-II and related input behavior act more like the real hardware in edge cases rather than adding new user-facing functionality.
Commodore 64 Emulator v0.7.9-alpha
This alpha focuses on emulator-core accuracy, VIC-II improvements, expanded tracing/debugging, cartridge and mapper work, save/load fixes, and continued IEC/drive development.
Added
- Expanded tracing detail categories across major subsystems
- Added more targeted tracing for:
- CPU
- VIC
- CIA
- PLA
- Memory and I/O
- Cartridge / mapper behavior
- Added improved cartridge-side tracing helpers for mapper, line, memory, and bank activity
- Continued cartridge persistence support work for mappers that require saved EEPROM/flash-style state
- Extended internal save-state coverage for more runtime state
Changed
- Continued refinement of VIC-II emulation
- Improved raster IRQ handling and related timing behavior
- Refined display progression, badline-related handling, and raster-driven internal VIC state
- Continued work on sprite DMA and bus arbitration behavior
- Improved cartridge/memory interaction paths for mapper-controlled behavior
- Continued development of IDE64 support, including controller/register groundwork and RTC-related work
- Continued work toward more accurate IEC bus and disk-drive emulation
- Improved monitor/debug workflows with more granular tracing controls
Fixed
- Fixed multiple raster IRQ and VIC-related issues discovered during compatibility testing
- Fixed save/load problems caused by stale or missing runtime state
- Fixed issues affecting successful state restore in some scenarios
- Fixed watch/monitor behavior regressions in debugging workflows
- Corrected a VIC regression in display/counter progression logic that could break game rendering/loading behavior
- Corrected issues introduced during register-write and tracing-related refactors
Improved
- Better diagnostics for difficult game-specific issues
- Better visibility into PLA mode changes and memory resolution
- Better visibility into memory-mapped I/O behavior
- Better mapper debugging for cartridge banking and control-line changes
- Improved confidence when isolating regressions through internal tracing and testing
- Mapper and cartridge work
- Continued refinement of cartridge mapper support and behavior
- Ongoing work across supported mapper types, including improvements around:
- Ocean
- Action Replay variants
- Retro Replay
- GMOD2
- IDE64
- Improved handling for mapper-controlled windows, bank behavior, and persistence-related state
- Save state / load state
- Expanded serialization coverage for runtime emulator state
- Improved restoration of derived internal state after loading
- Reduced load-state failures caused by unsaved transient data
- Continued stabilization of chunk-based save-state behavior across subsystems
Commodore 64 Emulator v0.7.8-alpha
This release focuses on emulator usability and stability, especially around pause handling, monitor behavior, and window scaling.
What’s new
- Added support for resizing and maximizing the emulator window
- Improved screen scaling while preserving aspect ratio
- Reworked pause handling across hotkeys, menus, dialogs, and monitor state
- Improved monitor integration and pause/resume synchronization
- Refined input and UI command routing
- General internal cleanup and stability improvements
Fixes
- Fixed Ctrl+Space pause toggle issues
- Fixed Pause/Resume menu issues
- Fixed monitor open/close pause-state problems
- Fixed cases where the emulator could remain paused incorrectly
- Fixed scaling and fit issues during resize/maximize
- Fixed several regressions introduced by recent UI refactoring
Notes
- This is still an alpha build, but it should feel much smoother and more consistent during normal use.
Vox populi
Dodaj komentarz!!!!
[Multi] Denise 2.8 12/05/2026
[C64] CCS64 v4 04/05/2026
[multi] BizHawk x64 2.11.1 1/05/2026
[c64] CBM prg Studio 4.8.0 29/03/2026
[cpc] CPC Alive 1.20a 11/04/2026
Commodore 64 Emulator. Contribute to cbroschard/Commodore-64-Emulator development by creating an account on GitHub.
