.TH oscar64 1 "June 2026" "Version 1.32" "User Commands" .SH NAME oscar64 \- optimizing C/C++ cross-compiler for 6502 systems .SH SYNOPSIS .B oscar64 .RB [ \-h ] .RB [ \-v [ 1 | 2 | 3 ]] .RB { \-i= "\fIincludePath\fR}" .RB [ \-ii= "\fIincludePath\fR" ] .RB [ \-o= "\fIoutput.prg\fR" ] .RB [ \-rt= "\fIruntime.c\fR" ] .RB [ \-tf= "\fIformat\fR" ] .RB [ \-tm= "\fImachine\fR" ] .RB [ \-pp ] .RB [ \-strict ] .RB [ \-psci ] .RB [ \-n | \-bc ] .RB [ \-e [ p | t | b | a | i ]] .RB [ \-g [ p ]] .RB [ \-O ( 0 | 1 | 2 | 3 | s )] .RB [ \-O ( i | ii | a | z | p | o | x | g | m )] .RB [ \-d \fISYMBOL\fR[=\fIvalue\fR] ] .RB [ \-D \fISYMBOL\fR[=\fIvalue\fR] ] .RB [ \-xz ] .RB [ \-rmp ] .RB [ \-d64= "\fIdiskname\fR" ] .RB [ \-f= "\fIfile\fR" ] .RB [ \-fz= "\fIfile\fR" ] .RB [ \-fi= "\fIn\fR" ] .RB [ \-cid= "\fIn\fR" ] .RB [ \-csub= "\fIn\fR" ] .RB [ \-cname= "\fIname\fR" ] .RI { source.c } .RI { source.cpp } .SH DESCRIPTION \fBoscar64\fR is a C/C++ compiler for the 6502 processor family. It is designed to generate high-performance 8-bit code targeting platforms such as the Commodore 64, VIC-20, PET, Commander X16, NES, Atari 8-bit, and Mega65. .SH OPTIONS .SS "General Options" .TP .B \-h Print help text and exit. .TP .BI \-i= includePath Set the include file search path. .TP .BI \-ii= includePath Set the default include path (overrides built-in path). .TP .BI \-o= output.prg Specify output file name. .TP .BI \-rt= runtime.c Use a custom runtime startup source (or empty for none). .TP .B \-pp Compile in C++ mode (automatically enabled for .cpp files). .TP .B \-strict Use strict ANSI C parsing (no C++ extensions). .TP .B \-psci Use PETSCII encoding for all string literals without prefix. .TP .B \-xz Extended zero page usage. Provides more zero page space but disables return to BASIC. .TP .B \-rmp Generate error files (.error.map and .error.asm) when the linker fails. .SS "Symbol Definitions" .TP .BI \-d SYMBOL[=value] Define a preprocessor symbol (like \fB\-D\fR in other compilers). .TP .BI \-D SYMBOL[=value] Define a symbol in a gcc-compatible way (e.g., \fB\-D NAME=VALUE\fR as a separate argument). .SS "Code Generation" .TP .B \-n Create pure native code for all functions (now the default). .TP .B \-bc Create byte code for all functions (disables native code generation). .TP .B \-e Execute the result in the integrated emulator after compilation. .TP .B \-ep Execute and profile the result in the integrated emulator. .TP .B \-et Execute with trace output in the integrated emulator. .TP .B \-eb Execute with break trace in the integrated emulator. .TP .B \-ea Execute with asserts enabled in the integrated emulator. .TP .B \-ei Execute with I/O range checking in the integrated emulator. .SS "Optimization" .TP .B \-O0 Disable all optimizations. .TP .B \-O1 "\fBor\fR" \-O Default optimizations. .TP .B \-O2 Aggressive speed optimizations (includes auto-inline of small functions). .TP .B \-O3 Aggressive optimization for speed (includes all sub-optimizations). .TP .B \-Os Optimize for code size. .TP .B \-Oi Enable auto-inline of small functions (part of O2/O3). .TP .B \-Oii Enable aggressive auto-inline of all suitable functions. .TP .B \-Oa Optimize inline assembler (part of O2/O3). .TP .B \-Oz Enable auto-placement of global variables in zero page (part of O3). .TP .B \-Op Optimize constant parameters. .TP .B \-Oo Optimize size using "outliner" (extract repeated code sequences into functions). .TP .B \-Ox Optimize pointer arithmetic by blocking shorter arrays from crossing page boundaries. .TP .B \-Og Enable global optimization. .TP .B \-Om Enable merge calls optimization. .SS "Debug and Diagnostics" .TP .B \-v Enable verbose output for diagnostics. .TP .B \-v2 More verbose output. .TP .B \-v3 Even more verbose output (implies v2). .TP .B \-g Create source-level debug info and add source line numbers to .asm listing. .TP .B \-gp Create source-level debug info and static profile data. .SS "Target Format" .TP .BI \-tf= format Set the output target format. .RS .TP prg Standard Commodore PRG format (default). .TP crt EasyFlash cartridge format. .TP crt8 Generic 8KB cartridge (0x8000\-0xa000). .TP crt16 Generic 16KB cartridge (0x8000\-0xc000). .TP bin Raw binary format. .TP lzo LZO-compressed PRG output. .RE .SS "Target Machine" .TP .BI \-tm= machine Specify the target machine. .RS .TP c64 Commodore C64 (0x0800..0xa000, default). .TP c128 Commodore C128 (0x1c00..0xfc00). .TP c128b C128 first 16KB only (0x1c00..0x4000). .TP c128e C128 first 48KB only (0x1c00..0xc000). .TP plus4 Commodore Plus/4 (0x1000..0xfc00). .TP vic20 VIC-20, no expansion (0x1000..0x1e00). .TP vic20+3 VIC-20 +3K RAM (0x0400..0x1e00). .TP vic20+8 VIC-20 +8K RAM (0x1200..0x4000). .TP vic20+16 VIC-20 +16K RAM (0x1200..0x6000). .TP vic20+24 VIC-20 +24K RAM (0x1200..0x8000). .TP pet Commodore PET, 8K RAM (0x0400..0x2000). .TP pet16 Commodore PET, 16K RAM (0x0400..0x4000). .TP pet32 Commodore PET, 32K RAM (0x0400..0x8000). .TP nes NES NROM, 32K ROM, no mirror. .TP nes_nrom_h NES NROM, 32K ROM, horizontal mirror. .TP nes_nrom_v NES NROM, 32K ROM, vertical mirror. .TP nes_mmc1 NES MMC1 mapper, 256K PROM, 128K CROM. .TP nes_mmc3 NES MMC3 mapper, 512K PROM, 256K CROM. .TP atari Atari 8-bit systems (0x2000..0xbc00). .TP x16 Commander X16 (0x0800..0x9f00). .TP mega65 Mega65 (0x2000..0xc000). .RE .SS "Disk Image" .TP .BI \-d64= diskname Create a .d64 disk image with the specified name. .TP .BI \-f= file.xxx Add a binary file to the disk image. .TP .BI \-fz= file.xxx Add a compressed binary file to the disk image. .TP .BI \-fi= n Set sector interleave for data files on disk image (default: 10). .SS "Cartridge Options" .TP .BI \-cid= n Set cartridge type ID (used by VICE emulator). .TP .BI \-csub= n Set cartridge sub-type. .TP .BI \-cname= name Set cartridge name string. .SH "RUNTIME LIBRARY DEFINES" .TP .BI \-d NOLONG Disable support for long integers in printf. .TP .BI \-d NOFLOAT Disable floating-point support in printf. .TP .BI \-d HEAPCHECK Enable heap allocation/free checking; jam if heap is full or free out of range. .TP .BI \-d NOBSSCLEAR Do not clear BSS segment on startup. .TP .BI \-d NOZPCLEAR Do not clear zero-page BSS segment on startup. .SH EXAMPLES Compile a program with optimizations: .nf oscar64 -i=include -O2 -o=demo.prg demo.c .fi Compile with emulator execution and custom runtime: .nf oscar64 -e -rt=startup.c -f=assets.dat game.c .fi Create a disk image with compiled output: .nf oscar64 -d64=mydisk.d64 -f=demo.prg demo.c .fi Compile in C++ mode with maximum optimization: .nf oscar64 -pp -O3 -o=demo.prg demo.cpp .fi .SH FILES .TP .B /usr/local/bin/oscar64 Main compiler executable. .TP .B /usr/local/share/oscar64/ Headers and startup runtime source. .SH SEE ALSO .BR llvm-mos (1)