]> git.sur5r.net Git - cc65/blobdiff - doc/c128.sgml
remote TABs in doc/ and test/
[cc65] / doc / c128.sgml
index 4df05492f04b91a462c33bb5dd88b9ea223f9c3c..1d8734fdfc319888b5a4b603487242d6bc8e8cff 100644 (file)
@@ -1,10 +1,9 @@
 <!doctype linuxdoc system>
 
 <article>
-
-<title>Commodore 128 specific information for cc65
-<author>Ullrich von Bassewitz, <htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">
-<date>2003-12-14
+<title>Commodore 128-specific information for cc65
+<author><url url="mailto:uz@cc65.org" name="Ullrich von Bassewitz">,<newline>
+<url url="mailto:polluks@sdf.lonestar.org" name="Stefan A. Haubenthal">
 
 <abstract>
 An overview over the C128 runtime system as it is implemented for the cc65 C
@@ -19,11 +18,11 @@ compiler.
 <sect>Overview<p>
 
 This file contains an overview of the C128 runtime system as it comes with the
-cc65 C compiler. It describes the memory layout, C128 specific header files,
+cc65 C compiler. It describes the memory layout, C128-specific header files,
 available drivers, and any pitfalls specific to that platform.
 
-Please note that C128 specific functions are just mentioned here, they are
-described in detail in the separate <htmlurl url="funcref.html" name="function
+Please note that C128-specific functions are just mentioned here, they are
+described in detail in the separate <url url="funcref.html" name="function
 reference">. Even functions marked as "platform dependent" may be available on
 more than one platform. Please see the function reference for more
 information.
@@ -32,10 +31,10 @@ information.
 <sect>Binary format<p>
 
 The standard binary output format generated by the linker for the C128 target
-is a machine language program with a one line BASIC stub. This means that a
-program can be loaded as BASIC program and started with RUN. It is of course
-possible to change this behaviour by using a modified startup file and linker
-config.
+is a machine language program with a one line BASIC stub, which calls the
+machine language part via SYS. This means that a program can be loaded as
+BASIC program and started with RUN. It is of course possible to change this
+behaviour by using a modified startup file and linker config.
 
 
 <sect>Memory layout<p>
@@ -43,12 +42,12 @@ config.
 cc65 generated programs with the default setup run with the I/O area and the
 kernal ROM enabled. Note that this is a non standard memory layout, and that
 there is no "memory configuration index" for this layout. This means that
-special case has to be taken when changing the configuration, or calling any
+special care has to be taken when changing the configuration, or calling any
 code that does this. The memory configuration register at &dollar;FF00 should
 be saved and restored instead of relying on the memory configuration index
 stored in the zero page.
 
-The setup gives a usable memory range of &dollar;1C00 - &dollar;CFFF. Having
+The setup gives a usable memory range of &dollar;1C00 - &dollar;BFFF. Having
 just the kernal ROM mapped in means, that kernal entry points may be called
 directly, but using the BASIC ROM is not possible without additional code.
 
@@ -59,41 +58,54 @@ Special locations:
   The text screen is located at &dollar;400 (as in the standard setup).
 
   <tag/Stack/
-  The C runtime stack is located at &dollar;CFFF and growing downwards.
+  The C runtime stack is located at &dollar;BFFF, and growing downwards.
 
   <tag/Heap/
-  The C heap is located at the end of the program and grows towards the C
+  The C heap is located at the end of the program, and grows towards the C
   runtime stack.
 
 </descrip><p>
 
 
 
-<sect>Platform specific header files<p>
+<sect>Platform-specific header files<p>
 
-Programs containing C128 specific code may use the <tt/c128.h/ or <tt/cbm.h/
+Programs containing C128-specific code may use the <tt/c128.h/ or <tt/cbm.h/
 header files. Using the later may be an option when writing code for more than
 one CBM platform, since it includes <tt/c128.h/ and declares several functions
 common to all CBM platforms.
 
 
-<sect1>C128 specific functions<p>
+<sect1>C128-specific functions<p>
 
-The functions listed below are special for the C128. See the <htmlurl
+The functions listed below are special for the C128. See the <url
 url="funcref.html" name="function reference"> for declaration and usage.
 
 <itemize>
-<item>toggle_videomode
+<item>videomode
 <item>c64mode
-<item>fast
-<item>slow
 </itemize>
 
 
-<sect1>CBM specific functions<p>
+<sect1>C128-specific accelerator functions<p>
+
+The functions listed below are accelerator functions for the C128. See the <url
+url="funcref.html" name="function reference"> for declaration and usage.
+
+<itemize>
+<item>detect_c128
+<item>detect_scpu
+<item>get_c128_speed
+<item>get_scpu_speed
+<item>set_c128_speed
+<item>set_scpu_speed
+</itemize>
+
+
+<sect1>CBM-specific functions<p>
 
 Some functions are available for all (or at least most) of the Commodore
-machines. See the <htmlurl url="funcref.html" name="function reference"> for
+machines. See the <url url="funcref.html" name="function reference"> for
 declaration and usage.
 
 <itemize>
@@ -111,6 +123,8 @@ declaration and usage.
 <item>cbm_k_basin
 <item>cbm_k_bsout
 <item>cbm_k_clrch
+<item>cbm_k_tksa
+<item>cbm_k_second
 <item>cbm_load
 <item>cbm_open
 <item>cbm_opendir
@@ -122,6 +136,19 @@ declaration and usage.
 </itemize>
 
 
+<sect1>CBM specific CPU functions<p>
+
+Some CPU related functions are available for some of the Commodore
+machines. See the <url url="funcref.html" name="function reference"> for
+declaration and usage.
+
+<itemize>
+<item>fast
+<item>slow
+<item>isfast
+</itemize>
+
+
 <sect1>Hardware access<p>
 
 The following pseudo variables declared in the <tt/c128.h/ header file do
@@ -146,12 +173,12 @@ structures, accessing the struct fields will access the chip registers.
   directory for the declaration of the structure.
 
   <tag><tt/CIA1, CIA2/</tag>
-  Access to the two CIA (complex interface adapater) chips is available via
+  Access to the two CIA (complex interface adapter) chips is available via
   the <tt/CIA1/ and <tt/CIA2/ variables. The structure behind these variables
-  is explained in <tt/_cia.h/.
+  is explained in <tt/_6526.h/.
 
   <tag><tt/COLOR_RAM/</tag>
-  A character array that mirrors the color RAM of the C64 at &dollar;D800.
+  A character array that mirrors the color RAM of the C128 at &dollar;D800.
 
 </descrip><p>
 
@@ -159,55 +186,84 @@ structures, accessing the struct fields will access the chip registers.
 
 <sect>Loadable drivers<p>
 
+The names in the parentheses denote the symbols to be used for static linking of the drivers.
+
+
 <sect1>Graphics drivers<p>
 
+The default drivers, <tt/tgi_stddrv (tgi_static_stddrv)/, point to <tt/c128-vdc.tgi (c128_vdc_tgi)/.
+
 Note: The graphics drivers for the VDC are incompatible with the extended
 memory drivers using the VDC memory!
 
 <descrip>
-  <tag><tt/c128-vdc.tgi/</tag>
-  This driver was written by Maciej Witkowiak. It uses the 80 column display
-  and features a resolution of 640*200 with two colors and an adjustable
-  palette (that means that the two colors can be choosen out of the 16 VDC
+
+  <tag><tt/c128-hi.tgi (c128_hi_tgi)/</tag>
+  This driver features a resolution of 320&times;200 with two colors and an
+  adjustable palette (that means that the two colors can be chosen out of a
+  palette of the 16 VIC colors). Unlike BASIC 7.0, this driver puts its
+  graphics data into the RAM behind the ROMs.
+
+  <tag><tt/c128-vdc.tgi (c128_vdc_tgi)/</tag>
+  This driver was written by Maciej Witkowiak. It uses the 80-column display,
+  and features a resolution of 640&times;200 with two colors and an adjustable
+  palette (that means that the two colors can be chosen out of the 16 VDC
   colors).
 
-  <tag><tt/c128-vdc2.tgi/</tag>
-  This driver was written by Maciej Witkowiak. This driver uses the 80 column
-  display and features a resolution of 640*480 with two colors and an
-  adjustable palette (that means that the two colors can be choosen out of the
+  <tag><tt/c128-vdc2.tgi (c128_vdc2_tgi)/</tag>
+  This driver was written by Maciej Witkowiak. This driver uses the 80-column
+  display, and features a resolution of 640&times;480 with two colors and an
+  adjustable palette (that means that the two colors can be chosen out of the
   16 VDC colors). The driver requires 64KB VDC RAM.
+
 </descrip><p>
 
-Note: The colors are translated from definitions in headers to correct VDC values
-so please use definitions or VIC color numbers only. Colors GRAY3 and BROWN are
-missing on VDC and are translated to the two colors missing from VIC palette.
+Note: The colors are translated from the definitions in the headers to correct
+VDC values; so, please use definitions or VIC color numbers only. Colors
+<tt/GRAY3/ and <tt/BROWN/ are missing on the VDC; and, are translated to the
+two colors missing from the VIC palette.
+
 
 <sect1>Extended memory drivers<p>
 
 <descrip>
 
-  <tag><tt/c128-georam.emd/</tag>
+  <tag><tt/c128-efnram.emd (c128_efnram_emd)/</tag>
+  Extended memory driver for the C128 External Function RAM.
+  Written and contributed by Marco van den Heuvel.
+
+  <tag><tt/c128-georam.emd (c128_georam_emd)/</tag>
   A driver for the GeoRam cartridge. The driver will always assume 2048 pages
   of 256 bytes each. There are no checks, so if your program knows better,
   just go ahead.
 
-  <tag><tt/c128-ram.emd/</tag>
+  <tag><tt/c128-ifnram.emd (c128_ifnram_emd)/</tag>
+  Extended memory driver for the C128 Internal Function RAM.
+  Written and contributed by Marco van den Heuvel.
+
+  <tag><tt/c128-ram.emd (c128_ram_emd)/</tag>
   An extended memory driver for the RAM in page 1. The common memory area is
   excluded, so this driver supports 251 pages of 256 bytes each.
 
-  <tag><tt/c128-ramcart.emd/</tag>
+  <tag><tt/c128-ram2.emd (c128_ram2_emd)/</tag>
+  An extended memory driver for the RAM in pages 1-3. The common memory area
+  is excluded, so this driver supports up to 731 pages of 256 bytes each. The
+  driver can be used as a full replacement for <tt/c128-ram.emd/, because RAM
+  in pages 2+3 is autodetected, but it's larger and there are not many
+  machines with RAM in banks 2+3, so it has been made a separate driver. The
+  additional code was contributed by Marco van den Heuvel.
+
+  <tag><tt/c128-ramcart.emd (c128_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/c128-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.
+  <tag><tt/c128-reu.emd (c128_reu_emd)/</tag>
+  A driver for the CBM REUs. The driver will test the connected REU to find
+  out how much RAM is present.
 
-  <tag><tt/c128-vdc.emd/</tag>
-  A driver for the VDC memory of the C128 written and contributed by Maciej
-  Witkowiak. Autodetects the amount of memory available (16 or 64K) and offers
+  <tag><tt/c128-vdc.emd (c128_vdc_emd)/</tag>
+  A driver for the VDC memory of the C128, written and contributed by Maciej
+  Witkowiak. Autodetects the amount of memory available (16 or 64K), and offers
   64 or 256 pages of 256 bytes each. Note: This driver is incompatible with
   any of the graphics drivers using the VDC!
 
@@ -216,17 +272,19 @@ missing on VDC and are translated to the two colors missing from VIC palette.
 
 <sect1>Joystick drivers<p>
 
+The default drivers, <tt/joy_stddrv (joy_static_stddrv)/, point to <tt/c128-stdjoy.joy (c128_stdjoy_joy)/.
+
 <descrip>
 
-  <tag><tt/c128-ptvjoy.joy/</tag>
+  <tag><tt/c128-ptvjoy.joy (c128_ptvjoy_joy)/</tag>
   Driver for the Protovision 4-player adapter originally written by Groepaz
-  for the C64 and converted for the C128 by me. See <htmlurl
-  url="http://www.protovision-online.de/hardw/hardwstart.htm"
-  name="http://www.protovision-online.de/hardw/hardwstart.htm"> for prices and
-  building instructions. Up to four joysticks are supported.
+  for the C64, and converted for the C128 by Uz. See <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/c128-stdjoy.joy/</tag>
-  Supports up to two joysticks connected to the standard joysticks port of
+  <tag><tt/c128-stdjoy.joy (c128_stdjoy_joy)/</tag>
+  Supports up to two joysticks connected to the standard joysticks ports of
   the C128.
 
 </descrip><p>
@@ -235,19 +293,40 @@ missing on VDC and are translated to the two colors missing from VIC palette.
 
 <sect1>Mouse drivers<p>
 
-Currently no drivers available (in fact, the API for loadable mouse drivers
-does not exist).
+The default drivers, <tt/mouse_stddrv (mouse_static_stddrv)/, point to <tt/c128-1351.mou (c128_1351_mou)/.
+
+<descrip>
+
+  <tag><tt/c128-1351.mou (c128_1351_mou)/</tag>
+  Supports a standard mouse connected to port #0 of the C128.
+
+  <tag><tt/c128-inkwell.mou (c128_inkwell_mou)/</tag>
+  Supports the Inkwell Systems lightpens, connected to port #0 of the
+  C128.  It can read both the one-button 170-C and the two-button 184-C pens.
+  (It can read other lightpens and light-guns that send their button signal to
+  the joystick left-button pin or the paddle Y [up/down] pin.)  It works on
+  only the 40-column screen.
+
+  <tag><tt/c128-joy.mou (c128_joy_mou)/</tag>
+  Supports a mouse emulated by a standard joystick, e.g. 1350 mouse, in port
+  #1 of the C128.
+
+  <tag><tt/c128-pot.mou (c128_pot_mou)/</tag>
+  Supports a potentiometer device, e.g. Koala Pad, connected to port #1 of
+  the C128.
+
+</descrip><p>
 
 
 <sect1>RS232 device drivers<p>
 
 <descrip>
 
-  <tag><tt/c128-swlink.ser/</tag>
-  Driver for the SwiftLink cartridge. Supports up to 38400 baud, hardware flow
-  control (RTS/CTS) and interrupt driven receives. Note that because of the
-  peculiarities of the 6551 chip together with the use of the NMI, transmits
-  are not interrupt driven, and the transceiver blocks if the receiver asserts
+  <tag><tt/c128-swlink.ser (c128_swlink_ser)/</tag>
+  Driver for the SwiftLink cartridge. Supports up to 38400 BPS, hardware flow
+  control (RTS/CTS), and interrupt-driven receives. Note that, because of the
+  peculiarities of the 6551 chip, together with the use of the NMI, transmits
+  are not interrupt driven; and, the transceiver blocks if the receiver asserts
   flow control because of a full buffer.
 
   The driver uses the RS232 variables and buffers of the kernal (buffers at
@@ -260,12 +339,35 @@ does not exist).
 <sect>Limitations<p>
 
 
+<sect1>Realtime clock<p>
+
+The realtime clock functions use the CIA1 TOD clock. As that clock only stores
+the time but not the date, the date set by <tt/clock_settime()/ is simply stored
+inside the C library for retrieval in the same program via <tt/clock_gettime()/.
+
+
 
 <sect>Other hints<p>
 
+
 <sect1>Passing arguments to the program<p>
 
-Command line argument passing is currently not supported for the C128.
+Command-line arguments can be passed to <tt/main()/. Since this is not
+supported directly by BASIC, the following syntax was chosen:
+
+<tscreen><verb>
+    RUN:REM ARG1 " ARG2 IS QUOTED" ARG3 "" ARG5
+</verb></tscreen>
+
+<enum>
+<item>Arguments are separated by spaces.
+<item>Arguments may be quoted.
+<item>Leading and trailing spaces around an argument are ignored. Spaces within
+      a quoted argument are allowed.
+<item>The first argument passed to <tt/main()/ is the program name.
+<item>A maximum number of 10 arguments (including the program name) are
+      supported.
+</enum>
 
 
 <sect1>Program return code<p>
@@ -276,20 +378,11 @@ The program return code (low byte) is passed back to BASIC by use of the
 
 <sect1>Interrupts<p>
 
-The runtime for the C128 uses routines marked as <tt/.CONDES/ type 2 for
+The runtime for the C128 uses routines marked as <tt/.INTERRUPTOR/ for
 interrupt handlers. Such routines must be written as simple machine language
 subroutines and will be called automatically by the interrupt handler code
 when they are linked into a program. See the discussion of the <tt/.CONDES/
-feature in the <htmlurl url="ca65.html" name="assembler manual">.
-
-
-
-<sect>Bugs/Feedback<p>
-
-If you have problems using the library, if you find any bugs, or if you're
-doing something interesting with it, I would be glad to hear from you. Feel
-free to contact me by email (<htmlurl url="mailto:uz@cc65.org"
-name="uz@cc65.org">).
+feature in the <url url="ca65.html" name="assembler manual">.
 
 
 
@@ -304,18 +397,14 @@ including commercial applications, and to alter it and redistribute it
 freely, subject to the following restrictions:
 
 <enum>
-<item> The origin of this software must not be misrepresented; you must not
-       claim that you wrote the original software. If you use this software
-       in a product, an acknowledgment in the product documentation would be
-       appreciated but is not required.
-<item> Altered source versions must be plainly marked as such, and must not
-       be misrepresented as being the original software.
-<item> This notice may not be removed or altered from any source
-       distribution.
+<item>  The origin of this software must not be misrepresented; you must not
+        claim that you wrote the original software. If you use this software
+        in a product, an acknowledgment in the product documentation would be
+        appreciated but is not required.
+<item>  Altered source versions must be plainly marked as such, and must not
+        be misrepresented as being the original software.
+<item>  This notice may not be removed or altered from any source
+        distribution.
 </enum>
 
 </article>
-
-
-
-