Logo Logo Logo
 
IMPORTANT PSA: BMC64 v1.0.6 through v1.4 were not properly putting the other 3 (unused) cores to a low powered mode and was causing CPU temperatures to rise close to or beyond automatic throttling limits. I'm very sorry about this. I don't believe this pushed the devices beyond their limits, it was just a waste of heat. The Pi will automatically throttle itself if CPU temperature goes beyond a certain limit. If you saw thermometer icons in the top right corner of your screen, this is probably why. V1.5+ fixes this.

If you are using an older version, I strongly recommend you update to the latest release.

BMC64 is a bare metal C64 Emulator (using VICE) for the Raspberry Pi (Models 2 & 3). There is no bloated O/S to boot and the emulator has direct access to hardware resulting in better performance than the Linux based distributions. VICE dependencies are satisfied using circle-stdlib.

GitHub Link: https://github.com/randyrossi/bmc64

Features

  • Quick boot time: 4.1 seconds!
  • True 50hz/60hz smooth scrolling (no horizontal tearing or jitters!)
  • Low latency between input and audio/video
  • Excellent audio/video synchronization
  • No need to issue a shutdown sequence, just power off
  • Supports wiring real joysticks via GPIO pins (optional) Click Here for adapter build instructions

Downloads

BMC64 1.8 Release

You have two options for installation:

1) format a FAT32 SD card and/or partition and unzip bmc64-1.8.files.zip onto it. The Pi will boot from the first FAT partition. See below for ROM files you will need to provide yourself.

OR

2) flash an image using bmc64-1.8.img.zip (300Mb partition). Again, see below for additional ROM files you need to provide.

BMC128 Preview Build

Super Mario Bros 64 is out! I'm posting a preview of BMC128 so you can take advantage of TURBO mode in this amazing port for the C64. Only kernels are provided. You'll have to grab other files you need from the 1.8 BMC64 release and setup the /C128 directory with ROMs, keyboard file, etc. Very little testing was done and keep in mind some menu options may not make sense for this machine.

I also added a POT X USB gamepad mapping so the 2nd joystick button will work to jump! Just putting this out there for SMB64 fans!

For C128, you'll need to setup a /C128 directory with ROMs.
    /C128
       basic
       basic64
       basichi
       basiclo
       charg64
       chargen
       kernal
       kernal64
       z80bios
       d1541II
       rpi_sym.vkm
Also, a small change to bootstat.txt so kernal returns 16384 instead of 8192.

BMC64 Setup

  • Formatting an SD card
    • sudo fdisk /dev/sdb (make SURE /dev/sdb is the SDCard!)
    • Create your partition(s)
    • sudo mkfs.vfat /dev/sdbx (make SURE /dev/sdbx is the right partition!)
  • Burning an image to SD card
    • Linux: sudo dd if=bmc64-1.8.img of=/dev/sdx bs=64k (make SURE /dev/sdx is correct!)
    • Windows: Use etcher or Win32DiskManager
  • You MUST obtain at a minumum Commodore 64 KERNAL, CHARGEN, BASIC, and d1541II rom files and copy them to the sdcard into the C64 folder. The emulator will not run without them. These are available from many sites.

    • Example

      NOTE: You will have to rename files from the names you find here to the names the emulator expects above. For example, characters.901225-01.bin becomes CHARGEN

  • Other disk drive ROM files are optional (dos1541, dos1571 and dos1581)
  • Copy to your SD card your .D64/.TAP/.CRT files to the disks, tapes, or carts folders.
  • All USB devices must be attached before you power on the PI. They must remain plugged in or the emulator will not function.
  • F12 brings up the menu (or Commodore Key+F7 if enabled)
  • README for more details.

Stats

The following end-to-end latency measurements were reported by _kieferkn/i:/stern _'s video "C64 Hardware -TheC64 mini Input Lag Test" video

https://www.youtube.com/watch?v=b73BONBBZR8

Note: These measurements are specific to his monitor/TV and joystick testing program he used.

Machine/Emulator over HDMILatency (Machine)Latency (Machine + Display)Notes
Real C64 +
Framemeister HDMI Upscaler
0ms3 framesHDMI using high speed camera
Ultimate 64< .1ms1-2 framesHDMI using high speed camera.
*Practically all latency introduced by TV/Monitor after scaling since the U64 has no frame buffer.
See video for measurement.
C64 Miniunknown6-7 framesHDMI using high speed camera.

Below are my measurements for composite video/audio out and are specific to the joy/key testing programs I used (joy tester is a modification of the 8-bit guy's key delay test and is included with BMC64). C64 mini audio measurement was made by The 8-bit Guy.

Machine/EmulatorComposite Video DelayAudio DelayNotes
Real C640 frames0msdelayjoy.crt
Ultimate 640 frames PAL Composite~35ms analog audio portdelayjoy.crt
C64 MiniN/A~360ms8-bit Guy's measurement for audio
delaykey.crt
Has this been improved in new firmware? Does anyone know?
CombianTODO~250ms analog audio jackUsing default settings (200ms buffer). I was using Fast SID engine. Could go as low as 135ms with buffer size change to 80ms.
delayjoy.crt
BMC642-3 frames GPIO
3-4 frames USB
4-5 frames Keyrah+DB9
~90ms analog audio jackProgressive PAL composite for video using oscilloscope, ReSid SID Engine used
delayjoy.crt

Thanks!

Special thanks goes out to my friend Ryan Daum for his advice and technical guidance on this project!

© 2019 Randy Rossi (randyrossi at gmail dot com) - All rights reserved (2019/01/30)