Millfork: a middle-level programming language targeting 6502- and Z80-based microcomputers and home consoles
This project is maintained by KarolS
Currently, Millfork supports creating disk- or tape-based programs for Commodore, Apple, BBC and Atari 8-bit computers, NEC PC-88, ZX Spectrum 48k, Amstrad CPC, CP/M, and cartridge-based programs for Commodore 64, VIC-20, MSX, Famicom/NES and Atari 2600, but it may be expanded to support other 6502-based and Z80-based platforms in the future.
To add a custom platform yourself, see the custom platform adding guide.
If you are compiling for a cartridge-based target, you need to take special precautions; see the ROM vs RAM guide
The following platforms are currently supported:
c64
– Commodore 64.
The compiler emits PRG files, not disk or tape images.
If you want to create a program consisting of multiple PRG files,
see the Commodore programming guide for more info.
c64_crt8k
– Commodore 64, 8K ROM cartridge
c64_crt16k
– Commodore 64, 16K ROM cartridge
c64_ef_small
– Commodore 64, EasyFlash cartridge, 72K of program code.
See the EasyFlash programming guide for more info.
c64_scpu
– Commodore 64 with SuperCPU in emulation mode
c64_scpu16
– Commodore 64 with SuperCPU in native, 16-bit mode (very buggy)
lunix
– Commodore 64 or 128 running LUnix/LNG 0.21
Certain language features work differently on this target.
Read the LUnix programming guide for more info.
c64jp
– Japanese version of Commodore 64 (different memory layout and character set)
c16
– Commodore 16
plus4
– Commodore Plus/4
vic20
– Commodore VIC-20 without memory expansion
vic20_3k
– Commodore VIC-20 with 3K memory expansion
vic20_8k
– Commodore VIC-20 with 8K or 16K memory expansion
vic20_a000
– Commodore VIC-20, 8K ROM cartridge at $A000
c128
– Commodore 128 in its native mode
pet
– Commodore PET
nes_small
– a tiny 32K PRGROM + 8K CHRROM Famicom/NES program, using iNES mapper 0 (NROM).
The compiler emits NES files.
nes_mcc4
– a 128K PRGROM + 128K CHRROM + extra 8KRAM Famicom/NES program, using iNES mapper 10 (MMC4)
For more complex programs, you need to create your own “platform” definition.
Read the NES programming guide for more info.
atari_lynx
– Atari Lynx
vcs
– Atari VCS (also known as Atari 2600), 4K cartridge (experimental)
a8
– Atari 8-bit computers.
The compiler emits XEX files, not disk or tape images.
bbcmicro
– BBC Micro model B (32k RAM).
The compiler only emits raw binaries, not disk images.
Read the BBC Micro programming guide for more info.
apple2
– Apple II+/IIe/Enhanced IIe.
The compiler only emits raw binaries, not disk images.
Read the Apple 2 programming guide for more info.
pc88
– NEC PC-88.
The compiler emits bootable disk images.
cpc464
– Amstrad CPC 464.
The compiler only emits raw binaries, not disk images.
Read the Amstrad CPC programming guide for more info.
zxspectrum
– Sinclair ZX Spectrum 48k.
The compiler emits tape images.
zxspectrum_8080
– Sinclair ZX Spectrum 48k, using only Intel 8080 instructions
msx_crt
– MSX 16kB cartridge, using only 16kB RAM
gb_small
– a tiny 32K Game Boy program. (experimental)
The compiler emits GB files.
Read the Game Boy programming guide for more info.
cpm
– CP/M on Intel 8080.
The compiler emits COM files.
cpm_z80
– CP/M on Z80
z1013
– Robotron Z1013. The compiler emits Z80 files.
trs80m1cmd
– TRS-80 Model 1 running TRS-DOS. The compiler emits CMD files.
trs80m3cmd
– TRS-80 Model 3 running TRS-DOS. The compiler emits CMD files.
coco_rsdos
– Tandy Color Computer running RS-DOS. (very experimental)
Read the Color Computer programming guide for more info.
coco_crt
– 16K cartridge for Tandy Color Computer. (very experimental)
Read the Color Computer programming guide for more info.
dos_com
– a COM file for DOS on IBM PC. (very experimental)
x16_experimental
– Commander X16; very experimental,
as both the target configuration and the device itself are in their experimental phases.
The primary and most tested platform is Commodore 64.