On this page I collect some findings that I have not yet put into specific categories (but which should be available nevertheless).
- 1 Communication with devices
- 2 Determine rate register values for TMS9902
- 3 TI-99/4A chipset and components
- 4 Setting up RXTX for Java
- 5 Error codes from the disk controller card
- 6 Hardware discussions
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.
- Hard disk track layout when created with the HFDC
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
Input/output operations are performed by the Communications Register Unit.
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 http://rxtx.qbang.org/wiki/index.php/Main_Page. You should build the binaries for 64 bit systems from the sources.
Instructions for Windows
Download the RXTX binaries package from http://rxtx.qbang.org/wiki/index.php/Download. 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 make install
The file RXTXcomm.jar should now be found in the lib/ext folder of your Java installation. The native libraries librxtxSerial.so, librxtxParallel.so 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:
- 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.
'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/librxtxRS485.la' 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).
|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)|
Using ILA and SENILA