Page 1 of 1

Announcing 8bit-Unity: Cross-platform SDK for 8bit games

Posted: Thu Jan 03, 2019 9:18 am
by 8bitDude
Hey guyz,

Last month I released 8bit-Slicks for the C64, Atari XL and Apple//e. It is the first cross-platform online game for 8bit era computers.

While developping the game, I organized my project into a "game" part, and a "SDK" part, for future re-use. It then occured to me that other people would benefit from this base for development of cross-platform 8bit games.

So I am announcing the planned release of 8bit-Unity in the second quarter of 2019. The SDK will contain everything to let you create simple online 8bit games in C code once, and deploy on all supported platforms easily (C64, Atari XL, Apple//e, and more in future!).

So they tuned!!!


Re: Announcing 8bit-Unity: Cross-platform SDK for 8bit games

Posted: Thu Jan 03, 2019 3:14 pm
by explorer
┬┐This project is like the Cross-Chase of Fabrizio?


Cross Lib and Cross Chase
by Fabrizio Caruso (


This is a personal project whose goal is the creation of:
  • the universal 8-bit abstraction layer "Cross Lib" for coding universal 8-bit games
  • the "universal" 8-bit game "Cross Chase" that has to be a fun and that should run on (nearly) ALL 8 bit computers, consoles, handhelds and scientific calculators. The game will be the proof of concept of how flexible the library is.

The main goal is to get the library and game to work on most 8-bit architectures but other systems are also considered.

  • Intel 8080 and its derivatives
  • MOS 6502 and its derivatives
  • Motorola 6809 and its derivatives
  • Zilog 80 and its derivatives

  • Intel 8088/8086
  • PDP11

  • PowerPC
  • Intel 386
  • Motorola 68020
  • MIPS32r2 (little-endian)


We also support any current architecture for which GCC can produce a working binary.


How is it this done? This is achieved by having "Cross Lib" provide APIs for the game code. The game and library code are separated:
  • the game code only depends on the APIs interface and
  • the APIs do not depend on the game code. Therefore it must be possible to re-use the same library for other games/programs.

The program is written in ANSI C and currently compiled with

Previous versions used

WinCMOC for 6809 targets ( WinCMOC has been abandoned because it uses an old CMOC version that has broken pointer to functions and because it is no longer maintained by its author.

For other targets, the following compilers and dev-kits may be included in future versions of the tool-chain:

The tool-chain also uses some third-party target-specific tools to create usable cassette/disk/rom images. This is documented in ... README.txt


The game should be as portable as possible. Therefore the following coding choices and design rules are applied:
  • ANSI C (for the game logic);
  • strictly separated input/output and hardware-dependent code from the game logic;
  • input for keyboard/joystick and output for sound and display are provided by CrossLib

Some target(s) may get specific graphic code with re-defined characters, software/hardware sprites and music/sound effects.


(as of 2018/12/15)

8-BIT versions

For most targets, more than one version is built, in order to support different hardware configuratins and expansions (e.g., memory expansions, second CPU, 80-col display card, etc.).
abc80: Luxor ABC 80
abc800: Luxor ABC 800 (work in progress)
ace: Jupiter Ace
alphatro: Alphatronic
apple2: Apple //
apple2enh: Enhanced Apple //e
aquarius: Mattel Aquarius
atari5200: Atari 5200
atari: Atari 400/800/600XL/800XL/1200XL/65XE/130XE
atari_lynx: Atari Lynx
attache: Otrona Attache
aussie: Aussie Byte
c128_8502: Commodore 128 [8502 CPU]
c128_z80: Commodore 128 [Z80 CPU]
c16: Commodore 264 series (16/116/+4)
c64: Commodore 64
c7420: Philips VideoPac C7420 module (work in progress)
cbm510: Commodore CBM 510
cbm610: Commodore CBM 610
camputers_lynx: Camputers Lynx 48k/96k/128k
coco: Color Computer
coleco: Colecovision
coleco_adam: Colecovision Adam (work in progress)
cpc: Amstrad CPC
cpm8080: CP/M Intel 8080
cpm: CP/M Z80 with adm3a/vt52/vt100 terminals
creativision: VTech Creativision
dragon: Dragon 32/64
eg2k: EACA EG2000 Color Genie
einstein: Tatung Einstein
enterprise: Enterprise 64/128
fp1100: Casio FP-1100
g800: Sharp PC-G800
gal: Galaksija
gamate: Gamate
gx4000: Amstrad GX-4000
kaypro: Kaypro 2X
kc: Robotron KC-85/2/3/4
lambda: Lambda 8300
laser500: Laser 500
m5: Sord M5
mc1000: CCE MC-1000
microbee: Microobee
mo5: Thomson Mo5/Mo6/Prodest PC128 (work in progress)
msx: MSX
mtx: Memotech MTX 512
multi8: Mitsubishi Multi 8
mz: Sharp MZ 80/700
mz2500: Sharp MZ 2500
nascom: Nascom
nc100: Amstrad NC-100/150
nc200: Amstrad NC-200
nes: Nintendo Enterteinment System
newbrain: Grundy Newbrain
oric: Tangerine Oric 1/Atmos
osborne1: Osborne 1
osca: OSCA v6z80p
osic1p: Ohio Scientific Challenger 1P
oz: Sharp OZ-700
p2000: Philips P2000
pc6001: NEC PC 6001
pc88: NEC PC 8801 (work in progress)
pce: PCEngine
pet: Commodore Pet
pps: Peters Plus Sprinter
pv1000: Casio PV1000
pv2000: Casio PV2000
px4: Epson PX-4/HC-40
px8: Epson PX-8/HC-80
rex: Xircom Rex 6000 (work in progress)
rx78: Bandai RX-78
samcoupe: Sam Coupe
sc3000: Sega SC 3000
sg1000: Sega SG 1000
sms: Sega Master System
sos: S-OS
spc1000: Samsung SPC 1000
spectrum: Sinclair Spectrum 16k/48k/128k
srr: Exidy Sorcerer
super80: Super 80/80d/80e/80m (work in progress)
super80r: Super 80r/Super80v (work in progress)
supervision: Watara Supervision (work in progress)
svi: Spectravideo 318/328
telestrat: Oric Telestrat (work in progress)
ti82: Texas TI 82
ti83: Texas TI 83
ti8x: Texas TI 83 Plus
ti85: Texas TI 85
ti86: Texas TI 86
tiki100: TIKI 100
to7: Thomson To7(/70)/To8/To8d/To8+/To9/To9+ (work in progress)
trs80: TRS-80 Model I/III/IV
ts2068: Timex TS 2068
vg5k: VG-5000
vic20: Commodore Vic 20
vz200: VTech VZ200
x07: Casio X-07 (work in progress)
x1: Sharp X1
z1013: Robotron Z1013
z88: Cambridge Z88
z9001: Robotron Z9001, Robotron KC 85/1, Robotron KC 87
zx80: Sinclair ZX80
zx81: Sinclair ZX81
16-BIT versions
pc8086: Intel 8088/8086 PC
pdp: PDP 11 v7 (work in progress)
32-BIT versions
linux386: ELF linux for Intel 386
linux68k: ELF linux for Motorola 68020
linuxppc: ELF linux for PPC
linuxmips: ELF linux for little endian MIPS32r2
Modern 32/64-BIT PC versions

There are a plain stdlib (turn based) and an ncurses (action) version that can be compiled for multiple platforms for which an ANSI C compiler and ncurses are available, including Windows and Linux. For example:
  • Cygwin/Windows or Linux (gcc + ncurses, e.g., cygwin/Windows or Linux)
  • Windows 32/64 bit console (mingw-gcc + ncurses, e.g., x86_64-w64-mingw32-gcc)

Remark: You can compile the game for any recent or old/ancient architecture for which there is an ANSI C capable compiler.

Re: Announcing 8bit-Unity: Cross-platform SDK for 8bit games

Posted: Thu Jan 03, 2019 4:20 pm
by christos
It looks really good and powerful so far. The problem with all these projects for old platforms is documentation, what are your plans for that?

How is it performance wise compared to natively written C code?

Re: Announcing 8bit-Unity: Cross-platform SDK for 8bit games

Posted: Fri Jan 04, 2019 2:19 am
by 8bitDude
christos wrote:How is it performance wise compared to natively written C code?
The right question is how it compares with native Assembly code. The answer is that parts of the code are written in C, and parts are written in Assembly (crucial interrupt code that occurs every screen refresh for example).

My goal with 8bit-Unity is to make an integrated IDE with all the needed tools for processing assets and packaging disks. Developping simple games with static bitmap background, animated sprites, and online gameplay should become a breeeze.

@Explorer: I already saw your post on Retrowiki.

Re: Announcing 8bit-Unity: Cross-platform SDK for 8bit games

Posted: Fri Jan 04, 2019 3:28 pm
by explorer
We will look forward to the release of the first version of 8bit-Unity.

Re: Announcing 8bit-Unity: Cross-platform SDK for 8bit games

Posted: Mon Jan 07, 2019 12:43 pm
by Fabrizio
I am working on better documenting CrossLib.
CrossLib is not, yet, ready to be released as a fully independent library.

Speed-wise these projects should be close to whatever you would get by coding for one of the targets because the differences are sorted out at compilation time.

In my case the C preprocessor will select the right code for the right target by using a mix of preprocessor directives (#if defined(...)...#else...#endif) and different files. So this is done my some sort of metaprogramming. On top of this, some scripts can do the rest in order to select or even generate the right C code and data for each target even before the actual compilation.

So you have:
script -> maybe different files -> preprocessor -> compilation -> run-time

All the multi-target business is done BEFORE the run-time phase, so no significant overhead is expected at run-time because of the fact that multi-target APIs are used.


Re: Announcing 8bit-Unity: Cross-platform SDK for 8bit games

Posted: Sat May 11, 2019 7:02 am
by 8bitDude
To keep things fresh, here goes a roadmap update on the next versions 0.2 and 0.3:

Re: Announcing 8bit-Unity: Cross-platform SDK for 8bit games

Posted: Sun May 10, 2020 2:30 pm
by 8bitDude
8bit-Unity 0.3.0 is now available on the website:

NEW in this version:
* Support for the Atari Lynx (and Oric 1/Atmos since version 0.2)
* Increased available memory on all systems
* Included music trackers for all platforms

Tech demos of 8bit-Grubs and 8bit-Slicks are also included, with all assets needed to build the game! (network code has been obfuscated to prevent server hacking)