]> git.sur5r.net Git - cc65/blobdiff - doc/cbm610.sgml
Ignore start address in cbm_opendir. Rearrange the code somewhat to make it
[cc65] / doc / cbm610.sgml
index d9c3bcdf920de9635f37f3fedab0dff70e08b2ce..a01cd9bc60a548170a0f09931c11ccf8c2eab73b 100644 (file)
@@ -48,10 +48,9 @@ config.
 <sect>Memory layout<p>
 
 cc65 generated programs for the Commodore 610 run in bank 1, the memory bank
-reserved for BASIC programs. Since there are no ROMs in this memory bank, the
-program has almost full 64K for its own. A disadvantage is that kernal
-subroutines cannot be called (at least not in a fast and effective manner), so
-the runtime has replace kernal functionality.
+reserved for BASIC programs. Since there are no ROMs in this memory bank,
+kernal subroutines are either emulated or called by bank switching, which has
+the disadvantage of being slow compared to a direct call.
 
 The default memory configuration for the CBM 610 allocates all memory between
 &dollar;0002 and &dollar;FFF0 in bank 1 for the compiled program. Some space
@@ -89,7 +88,7 @@ url="funcref.html" name="function reference"> for declaration and usage.
 
 <itemize>
 <item>peekbsys
-<item>peewsys
+<item>peekwsys
 <item>pokebsys
 <item>pokewsys
 </itemize>
@@ -137,7 +136,7 @@ structures, accessing the struct fields will access the chip registers.
 
 <bf>Note:</bf> All I/O chips are located in the system bank (bank 15) and can
 therefore not be accessed like on other platforms. Please use one of the
-<tt/peekbsys/, <tt/peewsys/, <tt/pokebsys/ and <tt/pokewsys/ functions to
+<tt/peekbsys/, <tt/peekwsys/, <tt/pokebsys/ and <tt/pokewsys/ functions to
 access the I/O chips. Direct reads and writes to the structures named below
 will <em>not</em> work!
 
@@ -229,6 +228,16 @@ While this simplifies things, it should be noted that the wrappers do have
 quite an impact on performance: A cross bank call has an extra 300&micro;s
 penalty added by the wrapper.
 
+<sect1>Interrupts<p>
+
+Compiled programs contain an interrupt handler that runs in the program bank.
+This has several advantages, one of them being performance (see cross bank
+call overhead mentioned above). However, this introduces one problem:
+Interrupts are lost while the CPU executes code in the kernal bank. As a
+result, the clock may go wrong and (worse) serial interrupts may get lost.
+
+Since the cc65 runtime does only call the kernal for disk I/O, this means that
+a program should not do file I/O while it depends on interrupts.
 
 
 <sect>Other hints<p>
@@ -239,6 +248,21 @@ Command line argument passing is currently not supported for the Commodore
 610.
 
 
+<sect1>Program return code<p>
+
+The program return code (low byte) is passed back to BASIC by use of the
+<tt/ST/ variable.
+
+
+<sect1>Interrupt handlers<p>
+
+The runtime for the Commodore 610 uses routines marked as <tt/.CONDES/ type 2
+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>