Viitor_cc65/usr/share/doc/cc65/webdoc/cbm610-6.html
kueller 223cc6685e Neue Version V963
git-svn-id: svn://svn.compuextreme.de/Viitor/V963/Viitor_cc65@5933 504e572c-2e33-0410-9681-be2bf7408885
2011-01-03 10:48:06 +00:00

50 lines
1.8 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.20">
<TITLE>Commodore 610 specific information for cc65: Limitations</TITLE>
<LINK HREF="cbm610-7.html" REL=next>
<LINK HREF="cbm610-5.html" REL=previous>
<LINK HREF="cbm610.html#toc6" REL=contents>
</HEAD>
<BODY>
<A HREF="cbm610-7.html">Next</A>
<A HREF="cbm610-5.html">Previous</A>
<A HREF="cbm610.html#toc6">Contents</A>
<HR>
<H2><A NAME="limitations"></A> <A NAME="s6">6.</A> <A HREF="cbm610.html#toc6">Limitations</A></H2>
<H2><A NAME="ss6.1">6.1</A> <A HREF="cbm610.html#toc6.1">Kernal and hardware access</A>
</H2>
<P>Since the program runs in bank 1, and the kernal and all I/O chips are located
in bank 15, calling ROM routines or accessing hardware needs special code. The
cc65 runtime implements wrappers for all functions in the kernal jump table.
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.</P>
<H2><A NAME="ss6.2">6.2</A> <A HREF="cbm610.html#toc6.2">Interrupts</A>
</H2>
<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.</P>
<P>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.</P>
<HR>
<A HREF="cbm610-7.html">Next</A>
<A HREF="cbm610-5.html">Previous</A>
<A HREF="cbm610.html#toc6">Contents</A>
</BODY>
</HTML>