Technical details

From Ninerpedia
Jump to: navigation, search

On this page I collect some findings that I have not yet put into specific categories (but which should be available nevertheless).

Communication with devices

  • Here is a commented log when formatting a SSSD floppy disk with the TI disk controller. Actually, this dump was achieved using MESS and putting in some printf lines.

Determine rate register values for TMS9902

The TMS9902 UART (serial interface) is used on various RS232 controller cards. The baud rate is not set by providing some integer number but by configuring a clock divider and multiplier. The baud rate cannot therefore be set precisely but only approximately.

The following illustration shows these approximations, the setting of the clock divider of and the multiplier, and the rate register values below the lines. The favorite values are printed in bold, and the corresponding hexadecimal rate register value is shown in blue below.


TI-99/4A chipset and components

TMS9900 processor

Input/output operations are performed by the Communications Register Unit.

TODO: Continue

Scratch Pad RAM

"Where is scratch pad RAM? - Scratch pad RAM is the ONLY area of RAM addressed with a 16 bit data line. It is FAST.

It can be found from >8300 to >83FE, and parts of it are used by the operating system. (Note: The symbol > means the number following is in hexadecimal format).

Different bits are used depending on how you are using the console! In case you thought EASY BUG was part of the Mini Memory module- yes, it is in the module, but it does not RUN from there- for greater speed it is transferred to the scratch pad area, where it resides from >8370 to >83FF

>8300 to >8348 IS USED BY BASIC (XB) and so seems to be a reasonable place to put a pure machine code utility.

>834A to >83FE seems to be fully utilised for most environments.

Setting up RXTX for Java

RXTX is a serial and parallel port API implementation which is available for Windows, MacOS, and Unix systems, as binary and source code files. The complete documentation and the download location is at You should build the binaries for 64 bit systems from the sources.

Instructions for Windows

Download the RXTX binaries package from Version 2.1-7 is OK. You now have to copy two files manually into the correct folders.

  • Locate RXTXComm.jar in the ZIP file.
  • Copy this file into your Java installation folder. This should be at C:\Program Files(x86)\Java\jre6 (or a similar name; can't tell what version you have installed). Copy the file into the subfolder lib\ext. You may find some other JAR files there; in that case you are at the right location.
  • Locate rxtxSerial.dll in the ZIP file.
  • Copy this file into the subfolder bin of the Java installation folder as located above. You should find a lot of dll files there.

You should now be able to use RXTX with your Java applications.

Instructions for Linux

  • Unzip the file
  • Enter the source directory
  • Do a
  • Install missing libraries if errors are reported.
  • Create and install
make install

The file RXTXcomm.jar should now be found in the lib/ext folder of your Java installation. The native libraries, and more have been copied into the lib/i386 or lib/amd64 folders (32 bit or 64 bit build; Intel 64 bit also uses the amd64 folder).

At first you will likely get an error message during Java execution:

check_group_uucp(): error testing lock file creation Error details:Permission deniedcheck_lock_status: 
No permission to create lock file.
please see: How can I use Lock Files with rxtx? in INSTALL

This message appears because you still have no permission to access the ports and to create a lock file. To fix this you must be member of the following groups:

  • uucp
  • lock (to be allowed to create lock files in /var/lock; you may have to change permissions for this directory as well!)
  • dialout (to be allowed to use the serial interface)

Check /etc/group and add your user name behind all lines, or use your favorite system management tool. You must log out and log in again to make these changes effective. After this change, no such error message should be reported on the command line anymore.

Known Issues

'UTS_RELEASE' undeclared (first use in this function): Using the version rxtx-2.1-7r2 with a recent openSUSE issues this message on configure, and building also fails. Obviously this symbol has been thrown out of the kernel sources, which is still present in the 2.1 rxtx release. I could solve this by using the CVS version.

make install: There is a bug in the configure script, resulting in trouble when using a Java 1.6 JDK or higher. You may get an error message

libtool: install: `x86_64-unknown-linux-gnu/' is not a directory

In that case you need to manually add a version string into the configure script. Look for a sequence


and add a |1.6* behind. This appears multiple times in the configure script; make sure you change it at least for your operating system.

Bug in rxtx-2.1-7r2 on 64 bit systems: If your application immediately exits with a SIGSEGV, and you can see in the dump file that it happened while calling read(), and if your system is 64 bit (x86_64), you may have run into a (known) bug in RXTX (see Bugzilla, bug 171). Please apply the patch mentioned in the comment on the linked page.

Error codes from the disk controller card

These are the error codes from the PHP1240 Disk Controller Card (the original TI disk controller).

Operation Code Meaning
Various operations 06 Device error, like track 0 not reached, no READY signal
Read Sector 07 Invalid sector number
Seek 11 Wrong track ID in header
Read Address (also during Read Sector) 06 Wrong side in header
21 Sector header not found
22 CRC error in sector header
23 Byte buffer overflow (failure to fetch byte on time)
Write Sector 28 Compare error (data)
31 Sector header not found
33 Byte buffer underflow (failure to deliver byte on time)
34 Write protection

Hardware discussions

Using ILA and SENILA