mirror of
https://github.com/cc65/cc65.git
synced 2024-12-26 08:32:00 +00:00
49d1b8f553
git-svn-id: svn://svn.cc65.org/cc65/trunk@3456 b7a2c559-68d2-44c3-8de9-860c34a00d81
212 lines
6.5 KiB
Plaintext
212 lines
6.5 KiB
Plaintext
<!doctype linuxdoc system>
|
|
|
|
<article>
|
|
|
|
<title>Atari Lynx specific information for cc65
|
|
<author>Karri Kaksonen, <htmlurl url="mailto:karri@sipo.fi" name="karri@sipo.fi">
|
|
Ullrich von Bassewitz, <htmlurl url="mailto:uz@cc65.org" name="uz@cc65.org">
|
|
<date>2004-10-14
|
|
|
|
<abstract>
|
|
An overview over the Atari Lynx runtime system as it is implemented for the
|
|
cc65 C compiler.
|
|
</abstract>
|
|
|
|
<!-- Table of contents -->
|
|
<toc>
|
|
|
|
<!-- Begin the document -->
|
|
|
|
<sect>Overview<p>
|
|
|
|
This file contains an overview of the Atari Lynx runtime system as it comes
|
|
with the cc65 C compiler. It describes the memory layout, Lynx specific header
|
|
files, available drivers, and any pitfalls specific to that platform.
|
|
|
|
Please note that Lynx specific functions are just mentioned here, they are
|
|
described in detail in the separate <htmlurl 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.
|
|
|
|
|
|
<sect>Binary format<p>
|
|
|
|
The standard binary output format generated by the linker for the Lynx target
|
|
is a machine language program with an executable header. It is of course
|
|
possible to change this behaviour by using a modified startup file and linker
|
|
config.
|
|
|
|
You can also produce real carts with directory structures and encrypted
|
|
headers by modifying the startup and linker config files. There is a simple
|
|
example archive called <tt/lynx-cart-demo/ in the <htmlurl
|
|
url="ftp://ftp.musoftware.de/pub/uz/cc65/contrib/" name="contrib directory">
|
|
that shows how to create a complete bootable Lynx cart.
|
|
|
|
<sect>Memory layout<p>
|
|
|
|
cc65 generated programs with the default setup run with the I/O area and the
|
|
kernal enabled, which gives a usable memory range of $400 - $BE3F.
|
|
All boot ROM entry points may be called directly without additional code.
|
|
|
|
Special locations:
|
|
|
|
<descrip>
|
|
<tag/Text screen/
|
|
No conio support is currently available for the Lynx.
|
|
|
|
<tag/Keyboard/
|
|
The Lynx "flabode" keys, Opt 1, Pause and Opt 2 are implemented using the
|
|
conio interface. The only characters the keyboard is able to produce are
|
|
'R' for Restart (Opt 1 + Pause), 'F' for flip (Opt 2 + Pause),
|
|
'P' for pause, '1' for Opt 1, '2' for Opt 2, '3' for Opt 1 + Opt 2 and
|
|
'?' for all keys down at the same time.
|
|
|
|
<tag/Stack/
|
|
The C runtime stack is located at $BE3F and growing downwards.
|
|
|
|
<tag/Heap/
|
|
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>
|
|
|
|
Programs containing Lynx specific code may use the <tt/lynx.h/ header file.
|
|
|
|
|
|
<sect1>Lynx specific functions<p>
|
|
|
|
<itemize>
|
|
<item>lynx_change_framerate
|
|
<item>lynx_eeprom_erase
|
|
<item>lynx_eeprom_read
|
|
<item>lynx_eeprom_write
|
|
</itemize>
|
|
|
|
|
|
|
|
<sect1>Hardware access<p>
|
|
|
|
The following pseudo variables declared in the <tt/lynx.h/ header file do
|
|
allow access to hardware located in the address space. Some variables are
|
|
structures, accessing the struct fields will access the chip registers.
|
|
|
|
<descrip>
|
|
|
|
<tag><tt/MIKEY/</tag>
|
|
The <tt/MIKEY/ structure allows access to MIKEY chip. See the <tt/_mikey.h/
|
|
header file located in the include directory for the declaration of the
|
|
structure.
|
|
|
|
<tag><tt/SUZY/</tag>
|
|
The <tt/SUZY/ structure allows access to SUZY chip. See the <tt/_suzy.h/
|
|
header file located in the include directory for the declaration of the
|
|
structure.
|
|
|
|
</descrip><p>
|
|
|
|
|
|
|
|
<sect>Loadable drivers<p>
|
|
|
|
<sect1>Graphics drivers<p>
|
|
|
|
A TGI driver for the standard graphics mode (160×102 in 16 colors) is
|
|
available, but must be statically linked, because no file I/O is available.
|
|
See the documentation for the <htmlurl url="co65.html" name="co65 utility">
|
|
for information on how to do that.
|
|
|
|
The TGI driver is implemented as a dual buffering device. To use it as a
|
|
single-buffer device set draw page and view page to the same value 0 or 1;
|
|
|
|
The TGI driver has a few Lynx-specific extensions.
|
|
|
|
Calling tgi_ioctl(0, spr) will display a standard Lynx sprite on screen.
|
|
|
|
Calling tgi_ioctl(1, 0) will do a flip screen. If you decide to flip the
|
|
screen then it may be a good idea to call the install-routine for the
|
|
joystick to get that flipped too.
|
|
|
|
Calling tgi_ioctl(2, bgindex) will set the text background color to the index
|
|
defined by bgindex. If bgindex is 0 then the background color is transparent.
|
|
|
|
<sect1>Extended memory drivers<p>
|
|
|
|
No extended memory drivers are currently available for the Lynx.
|
|
|
|
|
|
<sect1>Joystick drivers<p>
|
|
|
|
A joystick driver for the standard buttons is available, but must be
|
|
statically linked, because no file I/O is available. See the documentation for
|
|
the <htmlurl url="co65.html" name="co65 utility"> for information on how to do
|
|
that.
|
|
|
|
The joystick will check to see if the screen is flipped or not in the install
|
|
routine and adapt itself to the currect state.
|
|
|
|
<sect1>Mouse drivers<p>
|
|
|
|
No mouse drivers are currently available for the Lynx.
|
|
|
|
|
|
<sect1>RS232 device drivers<p>
|
|
|
|
No serial drivers are currently available for the Lynx.
|
|
|
|
|
|
|
|
<sect>Limitations<p>
|
|
|
|
|
|
|
|
<sect>Other hints<p>
|
|
|
|
At this point in time there is no support for the cart filesystem yet. I have
|
|
a <tt/lynx-cart-demo/ example project that uses an interrupt driven display,
|
|
has support for the cart filesystem and an abcmusic sound module.
|
|
|
|
At some point in time we may find a way to rewrite these to fit the way the
|
|
cc65 drivers require. But for the time being you can create less portable
|
|
applications using these Lynx specific modules in <tt/lynx-cart-demo/.
|
|
|
|
|
|
<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">).
|
|
|
|
|
|
|
|
<sect>License<p>
|
|
|
|
This software is provided 'as-is', without any expressed or implied
|
|
warranty. In no event will the authors be held liable for any damages
|
|
arising from the use of this software.
|
|
|
|
Permission is granted to anyone to use this software for any purpose,
|
|
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.
|
|
</enum>
|
|
|
|
</article>
|
|
|
|
|
|
|