MOS6502-delphi – a MOS 6502 CPU emulator for Delphi

Thursday, March 9th, 2017 | Dennis D. Spreen | Assembler, C64, Delphi 10.1 Berlin, Delphi Programming, Retro

This is the Delphi / Pascal port of the C++ implementation for the MOS Technology 6502 CPU by Gianluca Ghettini. The code is written to be more readable than fast, however some minor tricks have been introduced to greatly reduce the overall execution time.

Download current version at GitHub
Main features:

  • 100% coverage of legal opcodes
  • decimal mode implemented
  • read/write bus callback
  • jump table opcode selection

The port was written with minor changes to the original file: the run(N) function was replaced by a single Step() function – if you need to run more than one cycle, just put that function inside a loop.

The 6502 functional test (version 16-aug-2013) by Klaus Dormann is included.

A very basic C64 emulator is included. You need to download the BASIC ROM basic.901226-01.bin and the Kernal ROM kernal.901227-03.bin and put both files inside the ROMs folder. Install the commodore CBM.ttf font found in the VICE package.

The C64 Emulator uses a symbolic keyboard translation thus any keyboard layout should work.

This C64 emulator is just a very basic 6502/6510 emulation example and is not feature complete. Please take a look at VICE – Versatile Commodore Emulator instead.

Copyright (c) 2017 Gianluca Ghettini (C++ implementation)
Copyright (c) 2017 Dennis D. Spreen <> (Delphi implementation)
Code released under the MIT license.


4 Comments to MOS6502-delphi – a MOS 6502 CPU emulator for Delphi

Wilfred Oluoch
March 10, 2017

I really, really enjoyed coding on the Apple 2e back in the day. The 6502 was such a sweet design. Brings back memories of BASIC and Assembly language. Nice.

Steffen Nyeland
March 15, 2017

Hi Dennis – great work – I did a small post referring to this post – hope that was okay 🙂

March 15, 2017

Great! Sure, feel free to add the vic-20 example to the github repo!

Paul Leskinen
November 1, 2018

Dennis, thank you for posting this! I’ve extended your code to support TargetFrequency (with start/stop methods for TMOS6502), using cycle counts from the data sheet. I’m also developing an Apple II emulator but the “hi-res” graphics mode is painful.

Leave a comment

About Dennis D. Spreen

I'm an avid programmer working on a variety of platforms in a variety of languages with a wide technical interest.


QR Code