<article>
<title>Commodore 64-specific information for cc65
-<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">
-<date>2014-04-14
+<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz"><newline>
+<url url="mailto:greg.king5@verizon.net" name="Greg King">
+<date>2017-01-18
<abstract>
An overview over the C64 runtime system as it is implemented for the cc65 C
Please note that in this case a changed start address doesn't make sense,
since the program must be loaded to the BASIC start address.
+<sect>Extras<p>
+
+<sect1>80 Columns conio driver<p>
+
+The C64 package comes with an alternative software driven 80 columns
+module <tt/c64-soft80.o/ which uses the memory under I/O between $d000
+and $ffff.
+
+In memory constrained situations the memory from $400 to $7FF
+can be made available to a program by calling <tt/_heapadd ((void *) 0x0400, 0x0400);/
+at the beginning of <tt/main()/. Doing so is beneficial even if the program
+doesn't use the the heap explicitly because loading a driver uses the heap implicitly.
+
+Using <tt/c64-soft80.o/ is as simple as placing it on the linker command
+line like this:
+
+<tscreen><verb>
+cl65 -t c64 myprog.c c64-soft80.o
+</verb></tscreen>
+
+Note that the soft80 conio driver is incompatible with the
+<tt/c64-ram.emd (c64_ram_emd)/ extended memory driver and the
+ <tt/c64-hi.tgi (c64_hi_tgi)/ graphics driver.
+
+<sect2>80 Columns conio driver (monochrome)<p>
+
+In an (even more) memory constrained situation, a size optimized version of the
+software driven 80 columns module may be used, which only supports one common
+text color for the whole screen.
+
+<tscreen><verb>
+cl65 -t c64 myprog.c c64-soft80mono.o
+</verb></tscreen>
<sect>Platform-specific header files<p>
</itemize>
+<sect1>C64-specific accelerator functions<p>
+
+The functions listed below are accelerator functions for the C64. See the <url
+url="funcref.html" name="function reference"> for declaration and usage.
+
+<itemize>
+<item>detect_c128
+<item>detect_c64dtv
+<item>detect_scpu
+<item>get_c128_speed
+<item>get_c64dtv_speed
+<item>get_scpu_speed
+<item>set_c128_speed
+<item>set_c64dtv_speed
+<item>set_scpu_speed
+</itemize>
+
+
<sect1>CBM-specific functions<p>
Some functions are available for all (or at least most) of the Commodore
The names in the parentheses denote the symbols to be used for static linking of the drivers.
+<label id="graphics-drivers">
<sect1>Graphics drivers<p>
<em>Note:</em> All available graphics drivers for the TGI interface will use
-the space below the I/O area and kernal ROM, so you can have hires graphics in
-the standard setup without any memory loss or need for a changed
-configuration.
+the space below the I/O area and Kernal ROM; so, you can have hires graphics in
+the standard setup without any memory loss or need for a changed configuration.
+
+You can use a mouse driver at the same time that you use a TGI driver. But, if
+you want to see the default mouse pointer on the graphics screen, then you
+explicitly must link a special object file into your program. It will put the
+arrow into the "high RAM" area where the bitmaps are put. Its name is
+"<tt/c64-tgimousedata.o/". Example:
+
+<tscreen><verb>
+cl65 -t c64 -o program-file main-code.c subroutines.s c64-tgimousedata.o
+</verb></tscreen>
<descrip>
<tag><tt/c64-hi.tgi (c64_hi_tgi)/</tag>
palette of the 16 C64 colors).
</descrip><p>
+Note that the graphics drivers are incompatible with the
+<tt/c64-ram.emd (c64_ram_emd)/ extended memory driver and the
+ <tt/c64-soft80.o/ software 80-columns conio driver.
+
<sect1>Extended memory drivers<p>
<descrip>
+ <tag><tt/c64-65816.emd (c64_65816_emd)/</tag>
+ Extended memory driver for 65816 (eg SCPU) based extra RAM.
+ Written and contributed by Marco van den Heuvel.
+
<tag><tt/c64-c256k.emd (c64_c256k_emd)/</tag>
A driver for the C64 256K memory expansion. This driver offers 768 pages of
256 bytes each. Written and contributed by Marco van den Heuvel.
<tag><tt/c64-ram.emd (c64_ram_emd)/</tag>
A driver for the hidden RAM below the I/O area and kernal ROM. Supports 48
256 byte pages. Please note that this driver is incompatible with any of the
- graphics drivers!
+ graphics drivers, or the soft80 conio driver!
<tag><tt/c64-ramcart.emd (c64_ramcart_emd)/</tag>
A driver for the RamCart 64/128 written and contributed by Maciej Witkowiak.
Will test the hardware for the available RAM.
<tag><tt/c64-reu.emd (c64_reu_emd)/</tag>
- A driver for the CBM REUs. The driver will determine from the connected REU
- if it supports 128KB of RAM or more. In the latter case, 256KB are assumed,
- but since there are no range checks, the application can use more memory if
- it has better knowledge about the hardware than the driver.
+ A driver for the CBM REUs. The driver will test the connected REU to find
+ out how much RAM is present.
<tag><tt/c64-vdc.emd (c64_vdc_emd)/</tag>
A driver for the VDC memory of the C128. Written and contributed by Maciej
<tag><tt/c64-ptvjoy.joy (c64_ptvjoy_joy)/</tag>
Driver for the Protovision 4-player adapter contributed by Groepaz. See
- <url url="http://www.protovision-online.de/hardw/hardwstart.htm"> for prices and
- building instructions. Up to four joysticks are supported.
+ <url url="http://www.protovision-online.de/hardw/4_player.php?language=en"
+ name="Protovision shop"> for prices and building instructions. Up to four
+ joysticks are supported.
<tag><tt/c64-stdjoy.joy (c64_stdjoy_joy)/</tag>
Supports up to two standard joysticks connected to the joysticks port of
<sect1>Mouse drivers<p>
+You can use these drivers in text-mode or graphics-mode (TGI) programs. See
+the description of <ref id="graphics-drivers" name="the graphics drivers">.
+
The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/c64-1351.mou (c64_1351_mou)/.
<descrip>