The C64 OS Programmer's Guide is being written

This guide is being written and released and few chapters at a time. If a chapter seems to be empty, or if you click a chapter in the table of contents but it loads up Chapter 1, that's mostly likely because the chapter you've clicked doesn't exist yet.

Discussion of development topics are on-going about what to put in this guide. The discusssions are happening in the C64 OS Community Support Discord server, available to licensed C64 OS users.

C64 OS PROGRAMMER'S GUIDE

Appendices

File Extension Registry

Officially recognized file extensions

The following filename extensions are officially recognized by C64 OS. Before creating a new filename extension for a C64 OS Application data file format, this list should be consulted. And discussion in the C64 OS developer channels on Discord is required to get your filename extension listed in this registry.

Extension Type Note Developer
3dk SEQ 3D Koala. Multi-color matrix graphics. OpCoders Inc.
a PRG TurboMacroPro binary file Style64
art PRG ArtStudio hi-res graphics Oxford Computer Publishing
car SEQ C64 Archiver OpCoders Inc.
cgx SEQ Commodore Graphix OpCoders Inc.
chs SEQ Chess for C64 OS saved game OpCoders Inc.
cwg PRG Create with Garfield multi-color graphics Ahead Designs
d SEQ/PRG Raw data, unstructured. See: dat Generic
d41 SEQ/PRG 1541 disk image. See: d64 Peter Schepers
d64 SEQ/PRG 1541 disk image. See: d41 Peter Schepers
d71 SEQ/PRG 1571 disk image Peter Schepers
d81 SEQ/PRG 1581 disk image Peter Schepers
dat SEQ/PRG Raw data, unstructured. See: d Generic
dd PRG Doodle hi-res graphics. See: ddl Mark R. Rubin
ddl PRG Doodle hi-res graphics. See: dd Mark R. Rubin
dnp SEQ/PRG CMD native partition image Peter Schepers
ech SEQ Eliza for C64 OS chat document OpCoders Inc.
gz SEQ GZip compressed file Jean-loup Gailly, Mark Adler
h SEQ Programming header for method and routine offsets Style64
hbm PRG Hi-res black and white graphics. See: hbw Fun Graphics Machine
hbw PRG Hi-res black and white graphics. See: hbm Fun Graphics Machine
hed PRG Hi-Eddi hi-res graphics Hans Haberl
i SEQ C64 OS binary config data file OpCoders Inc.
joy PRG Game Controller (Joystick) input driver OpCoders Inc.
kbd PRG Keyboard input driver OpCoders Inc.
kla PRG Koala multi-color graphics. See: koa Audio Light
koa PRG Koala multi-color graphics. See: kla Audio Light
l SEQ TurboMacroPro label export. See: xl Style64
m SEQ C64 OS Application menu definition OpCoders Inc.
nhd PRG Network hardware driver OpCoders Inc.
o PRG C64 OS assembled object file, fixed load address. OpCoders Inc.
pa SEQ PRG alias OpCoders Inc.
pbot SEQ PETSCII Bot hi-res character mode graphics Cal Skuthorpe
pet SEQ PETSCII graphics. C64 OS screenshot format. OpCoders Inc.
prs SEQ Presenter for C64 OS Erik van der Tier
ptr PRG Mouse Pointer input driver OpCoders Inc.
r PRG C64 OS assembled object file, relocatable load address. OpCoders Inc.
rtc PRG Realtime Clock (RTC) driver OpCoders Inc.
s SEQ Programming header for constants, structures and static memory addresses. Style64
sid PRG SID music in the PSID format Michael Schwendt
t SEQ PETSCII encoded text. May contain MText codes. OpCoders Inc.
txt SEQ PETSCII or ASCII encoded text. May contain MText codes. Generic
xl SEQ TurboMacroPro label export, trimmed using Exlabel Tool. See: l OpCoders Inc.
zip SEQ/PRG ZIP archive file PKWARE, Inc.

Shared Library Registry

Globally identified shared library codes

The following list of libraries and their codes are officially recognized by C64 OS. Before creating a new library this list should be consulted. And discussion in the C64 OS developer channels on Discord is required to get a new 2-character code officially allocated for your library. At that point, it will be added to this registry.

Code Filename Page Size Note Developer
ca calendar.lib.r 3 Date and calendar OpCoders Inc.
ch checksum.lib.r 3 CRC8, CRC16, CRC32 OpCoders Inc.
cm cmp.lib.r 1 Common sort comparators OpCoders Inc.
cn cnp.lib.r 6 Commodore Network Protocol OpCoders Inc.
cr crash.lib.r 2 Crash recovery OpCoders Inc.
da datetime.lib.r 2 Date and time conversion OpCoders Inc.
di dir.lib.r 5 Directories OpCoders Inc.
fc fcopy.lib.r 3 File copy, rename and scratch OpCoders Inc.
fl flock.lib.r 2 File lock and unlock OpCoders Inc.
fn fname.lib.r 1 Filenames and extensions OpCoders Inc.
gf gfx.lib.r 3 Graphics modes and split screen OpCoders Inc.
gr grab.lib.r 2 Screen grabs (screenshots) OpCoders Inc.
i2 i2c.lib.r 3 I2C bus protocol (user port) OpCoders Inc.
ie iec.lib.r 3 IEC bus device detection OpCoders Inc.
me memory.lib.r 4 Memory allocation and REU OpCoders Inc.
ne network.lib.r 5 Network management OpCoders Inc.
pa path.lib.r 2 File reference path management OpCoders Inc.
pl places.lib.r 4 Back end for TKPlaces class OpCoders Inc.
qb qbasic.lib.r 2 Quit to BASIC OpCoders Inc.
qs qsort.lib.r 1 QuickSort OpCoders Inc.
re rec.lib.r 1 REU presence and size detection OpCoders Inc.
si sidplay.lib.r 3 PSID loader and player OpCoders Inc.
qb qbasic.lib.r 2 Quit to BASIC OpCoders Inc.
ta tarea.lib.r 2 Back end for TKTArea class OpCoders Inc.
ut utils.lib.r 3 Rebuilds the Utilities menu OpCoders Inc.
wr wrap.lib.r 3 Builds softwrap line table OpCoders Inc.

Toolkit Classes

Built-In Classes

The following classes are built into the C64 OS KERNAL. A RegPtr to the class definition can be obtained by calling classptr in the Toolkit KERNAL module, and passing the Class ID in the X register.

Object size is measured in bytes.

Class ID Class Name Method Count Object Size
0 tkobj 2 2
1 tkview 19 39
2 tksplit 20 45
3 tktabs 22 54
4 tkscroll 23 46
5 tklabel 20 44
6 tkctrl 25 54
7 tkbutton 27 62
8 tksbar 27 65

Runtime Loadable Classes

These classes are found in the //os/tk/ directory. They must be loaded for relocation. First allocate the number of pages indicated by the page size column for the class, using pgalloc in the Memory KERNAL module. Initialize it as a system file reference using getsfref in the Service KERNAL module. Append "tk/" to the directory path.

Set the filename to the name of the class with a ".r" extension. E.g., if the class name is tklist, set the filename to "tklist.r". Load the class workspace variable (defined by //os/s/:toolkit.s) with a pointer to the superclass. E.g., If you are loading tklist, a pointer to tkview must first be installed in class. Load a RegPtr to the file reference to the class to load and call loadreloc in the Service KERNAL module. The pointer to the newly loaded and linked class is found in class.

Object size is measured in bytes. Complete size is measured in bytes. For classes whose complete size is bigger than its object size, this is because the class is complex; it internally instantiates one or more other classes. The complete size includes the malloc header sizes of the other classes automatically instantiated.

Class Name Superclass Page Size Object Size Complete Size
tklist tkview 2 49 *
tktcols tkscroll 4 54 *
tktable tklist 2 51 *
tkplaces tkview 6 48 219
tkdirinfo tkview 2 39 *
tkfilemeta tkview 5 45 *
tkinput tkctrl 6 60 *
tktext tkview 6 52 *
tkicon tkctrl 2 57 *
tkpbar tkview 2 42 *
tkdatepick tkview 5 45 240
tktimepick tkview 5 45 240
tkrating tkctrl 2 54 *

Table of Contents



This document is subject to revision updates.

Last modified: Nov 23, 2024