JollyCV
-------
JollyCV is a highly accurate emulator for the ColecoVision (including Super
Game Module), CreatiVision (experimental) and My Vision.

JollyCV was the first emulator written specifically for The Jolly Good API.
It is designed to document the ColecoVision for educational purposes through
verbose comments, and high quality emulation. The ColecoVision is the perfect
console to use to demonstrate how computer systems and emulators function
because it is very simple and uses generic, off-the-shelf chips with widely
available datasheets. JollyCV has evolved to additionally support other,
similar systems.

This repository lives at https://gitlab.com/jgemu/jollycv

Compiling
---------
Make sure you have The Jolly Good API's header files installed. If you did
not install them, you will be required to include their path in CFLAGS.

Options:
  DISABLE_MODULE - Set to a non-zero value to disable building the module.
  ENABLE_EXAMPLE - Set to a non-zero value to build an example frontend.
  ENABLE_SHARED - Set to a non-zero value to build a shared library.
  ENABLE_HTML - Set to a non-zero value to generate the html documentation.
  ENABLE_STATIC - Set to a non-zero value to build a static archive.
  ENABLE_STATIC_JG - Set to a non-zero value to build a static JG archive.
  USE_VENDORED_SPEEXDSP - Set to a non-zero value to use vendored SpeexDSP.

Linux:
  make

macOS:
  make

BSD:
  gmake

Windows (MSYS2):
  make

Cross Compile:
(For example compiling on Linux for MinGW)
  AR=x86_64-w64-mingw32-ar \
  CC=x86_64-w64-mingw32-cc \
  PKG_CONFIG=x86_64-w64-mingw32-pkg-config \
  STRIP=x86_64-w64-mingw32-strip \
  make

The build will be output to "jollycv/". This directory may be used as is
locally by copying it to your local "cores" directory, or may be installed
system-wide using the "install" target specified in the Makefile.

Input Devices
-------------
JollyCV supports the following input devices:

ColecoVision
  ColecoVision Paddle
  Roller Controller
  Steering Wheel
  Super Action Controller

CreatiVision
  CreatiVision Left/Right Paddle

My Vision
  My Vision System

Settings
--------
input_coleco = 0
0 = Auto, 1 = ColecoVision Paddle, 2 = Roller Controller,
3 = Super Action Controller, 4 = Super Sketch, 5 = Steering Wheel

mask_overscan = 0
0 = Show Overscan, 1 = Mask Overscan

palette_tms9918 = 0
0 = TeaTime, 1 = SYoung, 2 = GCDatasheet

rsqual = 3
N = Resampler Quality (0-10)

region = 0
0 = NTSC, 1 = PAL

Notes
-----
- The Roller Controller is implemented using a mouse. It is recommended to
  assign the Fire buttons to mouse buttons.

- The Steering Wheel is implemented using the X axis of a mouse. Buttons may
  be assigned as usual.

- The Super Action Controller's rollers are implemented using buttons which
  may be held down to simulate a continuous roll. It is recommended to assign
  the RollerL and RollerR input definitions to shoulder buttons on a gamepad.

- CreatiVision games typically require a reset, and then pressing one of the
  start buttons. By convention, those buttons are 6 and B on the left paddle,
  or 7 and N on the right paddle.

- In order to load CreatiVision ROMs, the system type must be specified as
  "crvision" manually, as detecting heuristically is difficult for frontends.

Compatibility
-------------
 ColecoVision
  100% Compatibility with the original commercially released library, and all
  known and freely available homebrew. Some recently released commercial
  homebrew may or may not be compatible.

  Super Sketch boots, but is not usable due to a lack of documentation on the
  Super Sketch Pad.

 CreatiVision
  100% Compatibility with the commercially released library

  Tape drive support for CreatiVision Basic is not yet implemented.

 My Vision
  100% Compatibility with all dumped games

Porting
-------
JollyCV was written in standards compliant ISO C11 and should be extremely
portable. Though it was written for The Jolly Good API, it was done in a
manner that allows it to be used easily in multi-emulator frameworks or
standalone binaries for many potential platforms. If a fork is created with
significant modifications, it is requested that a clear indication of fork
status is made. Please be an honest person and respect the licenses that
apply to the software.

Documentation
-------------
Documentation used to create the emulator is available at
https://gitlab.com/carmiker/colecodocs

Copyright
---------
JollyCV (BSD-3-Clause)
  Copyright (c) 2020-2025 Rupert Carmichael
  See LICENSE

Jolly Good Z80 (MIT)
  Copyright (c) 2019 Nicolas Allemand
  Copyright (c) 2020-2022 Rupert Carmichael
  Copyright (c) 2022 rofl0r
  See src/z80/LICENSE

m6502 (MIT)
  Copyright (c) 2018 Nicolas Allemand

Speex Resampler (BSD-3-Clause)
  Copyright (c) 2003, 2007, 2008 Xiph.org Foundation
  See source files in deps/speex/ for detailed information
