]> git.sur5r.net Git - cc65/blobdiff - doc/lynx.sgml
Lynx TGI driver update by Karri Kaksonen. Adds collision detection.
[cc65] / doc / lynx.sgml
index 95745278ce61cd5857ab0fe11df2414d37def556..856b909ec4f49daadf779b31dfd433dfdcf57c89 100644 (file)
@@ -46,8 +46,7 @@ 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 &dollar;400 - &dollar;BE3F.
-All boot ROM entry points may be called directly without additional code.
+kernal enabled, which gives a usable memory range of &dollar;400 - &dollar;C037.
 
 Special locations:
 
@@ -63,12 +62,17 @@ Special locations:
   '?' for all keys down at the same time.
 
   <tag/Stack/
-  The C runtime stack is located at &dollar;BE3F and growing downwards.
+  The C runtime stack is located at &dollar;C037 (or &dollar;A057 if collision
+  detection is enabled) and growing downwards.
 
   <tag/Heap/
   The C heap is located at the end of the program and grows towards the C
   runtime stack.
 
+  <tag/Screen/
+  The collision detection screen is at &dollar;A058 if it is enabled. The
+  double buffered screens are at &dollar;C038 and &dollar;E018.
+
 </descrip><p>
 
 
@@ -81,7 +85,6 @@ 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
@@ -120,8 +123,9 @@ 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 is implemented as an interrupt driven 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.
 
@@ -146,8 +150,9 @@ To update displays you can call tgi_updatedisplay() or tgi_ioctl(4, 1) it
 will wait for the next VBL interrupt and set the draw buffer to the
 view buffer. The draw buffer is also changed to (drawbuffer xor 1).
 
-Set an address for a subroutine you want to call at every VBL by calling
-tgi_setvblhook(addr) or tgi_ioctl(5, addr).
+You can also enable or disable collision detection by a call to
+tgi_setcollisiondetection(active) or tgi_ioctl(5, active). The collision
+result is located before the sprite structure by default in this driver.
 
 <sect1>Extended memory drivers<p>
 
@@ -162,7 +167,7 @@ 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.
+routine and adapt itself to the correct state.
 
 <sect1>Mouse drivers<p>
 
@@ -171,8 +176,60 @@ No mouse drivers are currently available for the Lynx.
 
 <sect1>RS232 device drivers<p>
 
-No serial drivers are currently available for the Lynx.
+<descrip>
+
+  The ComLynx port has Tx and Rx wired together. Every byte is sent
+  to all connected Lynxes. Only one Lynx can send at a time. There is no
+  protocol created for communication. You are on your own.
+
+  If the Lynx returns framing error then it is likely that another Lynx is
+  sending data at the same time.
+
+  The Lynx can also send a break and receive a break. The Lynx break is
+  recognized if the bit is down for 24 bit cycles or more.
+
+  To send a break you just set the break bit. The length of the break depends
+  on how long this bit is down.
+
+  The driver supports the baudrates:
+  <itemize>
+  <item>62500
+  <item>31250
+  <item>9600
+  <item>7200
+  <item>4800
+  <item>3600
+  <item>2400
+  <item>1800
+  <item>1200
+  <item>600
+  <item>300
+  <item>150
+  <item>134.5
+  <item>110
+  <item>75
+  </itemize>
+  The parity bit supports MARK and SPACE. It also supports EVEN and ODD parity
+  but the parity bit is included in the calculation. Most of us don't want it
+  this way. But there is nothing we can do about it.
+
+  The Lynx hardware will always check parity on incoming traffic. Currently
+  the driver cannot receive data from standard PC's due to this parity bug.
+  For working with Lynx to Lynx communication use EVEN parity.
+
+  To send data to standard PC's use MARK or SPACE as parity setting.
+
+  There is always only one stop bit. And the data length is always 8 bits.
+
+  We have no handshaking available. Even software handshake is impossible
+  as ComLynx has only one wire for the data.
+
+  Both transmit and receive are interrupt driven. The driver reserves a fixed
+  area $200-$2ff for the transmit ring buffer and $300-$3ff for the receive
+  ring buffer. This area can not be used at startup for anything as the Lynx
+  ROM needs this area for decryption purposes.
 
+</descrip><p>
 
 
 <sect>Limitations<p>