Caution: there may be updates in the pages that have not been zipped yet...
webpages.zip 1.1 Mbyte. Contains all pages
(*.htm) and disassembly listings (*.txt). Last update 12/3/02.
softs.zip 660 Kbytes. Contains all the free softwares below, as such or zipped (*.zip). Last update 12/3/02.
pics.zip 3.4 Mbytes. Contains all pictures (*.jpg, *.gif) plus a few pages that contain a big picture. Last update 12/3/02.
These files are in .txt format, so that they are directly readable with a text editor (such as notepad) or a web browser. If you want to transfer them back to the TI-99/4A, you should use the TI99PIO.EXE program provided below: set the file type as Dis/Var 80, check the "Strip LF" box and select "CR+LF" as a separator. Then click the [Export] button.
On the TI-99/4A side, you should run a tiny Extended Basic program, such as:
100 OPEN #1: "DSK1.FILE1",DISPLAY, VARIABLE 80, OUTPUT
110 OPEN #2: "PIO.EC"
120 LINPUT #2:A$
130 PRINT #1:A$
140 GOTO 120
This will copy the incoming file to a DV80 file called FILE1. Once the PC is done with exporting the file, you'll need to press Fctn-4 to stop the Extended Basic program. These listing are splitted in several files so that they can be edited with a text editor such a Funnelweb's.
Console ROMs and GROMs
Heiner Martin's books, "TI-99/4A Intern" contains commented disassembly listings of the console ROMs and GROMs. It can be found in PDF format on Rich Polivka's site (tiintern.pdf 555 Kbytes).
The disk controller card ROM
dc1.txt ROM header
dc2.txt Power-up routine. Low level subs dealing with the controler (sector R/W, format track). Subroutines for VDP access.
dc3.txt Various file handling routines (mid-level)
dc4.txt Delete opcode. More mid-level routines
dc5.txt DSR entry points, Open, Close, Read, Write, Rewind opcodes.
dc6.txt Load, Save, Status opcodes. Disk directory: Open, Close, and Read opcodes.
dc7.txt Subprograms >10 to >16 (and FILES). Related subroutines.
The RS232/PIO interface card ROM
rs1.txt Power_up routine. Interrupt routine. DSR entry points, Open, Read, Write, Old and Save opcodes.
rs2.txt Close opcode, common DSR exit proc. Subroutines used by the above.
The german Gram-Karte ROM
gc1.txt ROM routines running at >4000-4B00: Power-up routine, call EDITMEM, call MODULE.
gc2.txt GPL program: launches a "modulified" basic program.
gc3.txt GPL program: Gram-Karte main menu.
gc4.txt ROM routines to be run in the low-mem expansion. Displaying Gram-Karte loader menu.
gc5.txt Ditto. Loader menu handling, calling the loaders.
gc6.txt Ditto. General subroutines: VDP access, DSR link, GPLLNK, keyboard scanning. GPL loader, 9900 loader.
gc0.txt A text file describing the arrangement of the above in the card ROM.
The Horizon ramdisk ROS v8.14B
The Ramdisk Operating System was written by John Jonston, Michael Ballmann and Bud Mills.
It's one of the best pieces of assembly programming I ever saw. I strongly recommend that you have a look at it, if only for the pleasure of it. Then compare it with the ugly ROMs in the original TI disk controller (you can tell these guys learned assembly on a PC).
ros1.txt ROM header, DSR entry points, power-up
routines (2), Ramdisk + drive info.
ros2.txt Subroutines >10 (sector R/W), >11 (format), >12 (un/protect), >13 (rename), >14 (input), >15 (output).
ros3.txt DSR opcodes 0-9 Open, Close, Read, Write, Restore, Load, Save, Delete, Scratch rec (yes!), Status.
ros4.txt Extra opcodes: >A (Assembly load), >B (XBasic load), >C (Cartridge load).
ros5.txt Private subroutines (disk/file handling). User DSR and ISR entry points. Ends at >57FF.
ros6.txt Starts at >5800, RAMBO off. Subroutines DN, WO, WF, AO, AF, LD, Xbasic launcher, private routines, char defs
ros7.txt Starts at >5800, RAMBO on. Subroutine >B0: RAMBO page selection, P-Gram+ compatibility.
ros0.txt A text file that describes the overall structure of the ROS.
ROS 8.14 is hard to improve, but I nevertheless wrote two short patches
gk.txt This one makes RAMBO mode compatible with the german 128K Gram-Karte, instead of the P-Gram+ card.
vnb.txt This one causes the ROS to insert and automatically update version numbers for each file in the disk directory.
The Editor/Assembler cartridge
ea1.txt GPL program in GROM memory. Handles the cartridge menus, load programs (editor, assembler, user's).
ea2.txt Ditto. Subroutines to be called from TI-Basic (INIT, LOAD, LINK, PEEK, PEEKV, POKEV, CHARPAT).
ea3.txt Assembly routines stored in GROM, but running in the low mem (LOADER, VDP access, DSRLNK, KSCAN, etc).
The TI-Writer cartridge
wr1.txt GPL program in GROM memory. Handles the cartridge menu, load programs, list disk directory.
wr2.txt Prompts, char patterns, etc, in various languages.
The Mini-memory cartridge
mmg.txt GPL programs in GROM: main menu, DSRs and subprograms (except CHARPAT).
mmg2.txt Ditto: CHARPAT, options 1-3 of the main menu, subroutines for internal use.
mmg3.txt Ditto: Easybug.
mmr.txt Assembly routines in ROM: loader and other assembly subprograms (XMLLNK, VDP access, etc).
mmr2.txt Ditto: subprograms dealing with Basic.
Gram-based 9900 disassembler
GPL assembler package
MILD & MISS package
PC joysticks adapter
IDE card DSRs
Bug99 remote debugger & emulator
FILE-PC/O is an assembly program to be run on the TI-99/4A in Extended basic or in Basic with the Editor/Assembler cartridge plugged in. It allows to transfer any kind of file to or from the PC, much faster than by using the RS232 card's ROM routines. It needs TI99PIO.EXE running on the PC.
So, is this a catch 22? You need FILE-PC/O on your TI-99/4A to download program files from the PC, but how are you going to dowload FILE-PC/O itself? Well, this program is a DF80 file and can therefore be downloaded without any special software on the TI-99/4A side. It can then be used to download all the other files. See below. Required to download the following two files.
DSK-PC/O is an assembly program to be run on the TI-99/4A in Extended basic or in Basic with the Editor/Assembler cartridge plugged in. It allows to save a floppy disk to a PC file, or to restore it from the PC. Usefull for safety backups and required to download any of the packages below. It needs TI99PIO.EXE running on the PC.
TI2PC is a short Extended Basic program that demonstrates how to transfer non-program files to and from the PC by just using the routines in the RS232 cards.
download.zip, 15 KBytes
It is an interactive disassembler so default output is to the screen. But you can also send it to a printer or a disk file. You can also automatically disassemble a range of memory addresses (it's surprisingly fast for a GPL program).
There as several output formats available that can be customized the way you like (using R for registers, hex or decimal numbers, relative/absolute jumps, colors, etc). Last but not least, it has an extensive online help.
disass.zip 23 Kbytes
You can view the screen as it would be if Module Explorer was not runnning, or choose among several information screens. These include a memory editor (VDP, CPU, GRAM/GROM and speech synthesizer memory), a GROM / ROM header analyser, a hexadecimal/decimal/binary calculator, etc.
It comes with a very detailed user manual, including a tutorial that takes you through some easy explorations.
It's a usefull debugging tool if you are writing GPL programs. It can also be used to explore the console GROMs or cartridges. Finally, it could be used to cheat when playing game cartridges (slowing down the speed, increasing your score, etc).
modexp.zip 72 Kbytes
A GPL assembler, wich allows you to write your own GPL programs. It can produce relocatable code, reference other GPL or assembly files, expand macros, etc. It comes with a very extensive documentation, including a description of GPL language and a list of usefull routines in console GROMs and ROMs.
A "Universal" loader, which loads GPL files produced by a GPL assembler, or assembly files produced by a 9900 assembler and links them together. It can load assembly language in gramcard banks or Horizon Ramdisk banks, either as normal programs or as segments that will be automatically selected by a switching routine upon execution. It can also use library files that follow to the standard defined by RA Green. Finally, it can perform batch operations. The loader comes in two versions: one for the german Gram Karte, one for the P-Gram+ card.
A batch compiler. Sometimes, loading a program in memory can become a complex operation. Especially if you load many GPL and assembly files, segments, etc. The batch compiler allow you to write the loader commands once and for all in a DV80 text file. This file will then be interpreted and sent to the universal loader that will performed the required operations. You can also save the compiled version of the batch file in DF80 format, to save the compilation time: the loader recognizes it automatically.
MISS This utility allows you to save GPL and assembly programs as memory image "program" files (see below)
MILD This utility loads "program" files that contain either GPL or assembly language (see below)
A whole bunch of loader utilities to be used with the loader: a symbol table editor, a utility table editor, a segment table editor (segments are what you load in a pagable memory), assembly language utilities, etc.
Fweb utilities to be used with Funnelweb: a list editor that allows you to use another loader than Funnelweb's to load the programs on the list. This is required for GPL files since F'web doen't know about them. And a pseudo-list that displays the contents of the GRAM/GROMs just as if it was a program list.
All of the above come with user manuals, generally fairly detailed.
gpl_asm.zip 174 Kbytes
Memory image loader. This utility loads memory-image "program" files containing assembly language (in EA5 standard format) or GPL programs (in Gram Kracker format). It also understands some extra formats produced by MISS: RAMBO banks, title screens, GRAMs in alternate bases, etc. Furthermore, MILD can shift itself dynamically if the memory area it sits in is needed for loading. It can even commit suicide and load a program that needs the whole range of CPU memory! Meant to work with Funnelweb, it currently comes in two versions: one for the german Gram-Karte, on for the P-Gram+.
mildmiss.zip, 23 Kbytes.
rip.zip 16 Kbytes
RIP is now a real debugger: it inserts breakpoints in your programs (XOP instructions) that allow you to trace execution or to enter RIP at a given point. The same viewing features than in version I are still available, plus some new ones. You can also execute instructions step-by-step. Additionally, RIP can run directly inside an Horizon Ramdisk, so all you need is 24 bytes in the high memory expansion to activate it!
This program has now become Bug99 (see below). It still works as a remote debugger, but also incorporates an emulator for on-PC debugging.
This package contains instructions to build such an adapter, a TI-Artist schematic, and several associated programs:
ideal.zip 44 Kbytes
It comes with two series of demo files arranged as tutorials, one for (Extended) Basic, one for Assembly & GPL, and with a detailed instruction manual in Winword format. The manual can also be accessed online.
tasks.zip 140 Kbytes
This Windows program can be used as a remote debugger, controlling the TI-99/4A via a parallel cable. But it also comprises a TI-99/4A emulation, so you can do your debugging on your PC.
See the user manual and download link therein.
How to dowload files to your TI-99/4A
Then you need a PC program to handle the connection. Dowload TI99PIO.EXE, optionally with its online help files TI99PIO.HLP and TI99PIO.CNT. Also download the TI-99/4A programs: PIO.EC, DSK-PC.DF80, FILE-PC.DF80 and TI2PC.XB.
Alternatively, just download DWONLOAD.ZIP and unzip it: it contains all the above files.
On the PC, launch TI99PIO.EXE.
Use the [Browse] button to select the file PIO.EC.
Set the file type as Dis/Fix 80. Make sure all the checkboxes are unchecked and the "separator" field is empty.
Click the [Export] button. This will soon complete the CALL LOAD on the TI-99/4A, (although it may take quite a time with Extended Basic).
On the TI-99/4A, type:
On the PC, change the file type as "File dump"
Use the [Browse] button and select FILE-PC.DF80 (it is the same program as PIO.EC, only in a different format)
Click the [Export] button once more. This will copy the downloader to DSK1.
On the PC, select DSK-PC.DF80 and click [Export].
You may also want to download the Extended Basic program TI2PC.XB that
demonstrates how to transfer files to/from the PC using only the RS232
card routines. Type:
Select TI2PC.XB on the PC and click [Export].
Where x is the drive number. It MUST be a drive number: you cannot use the syntax DSK.DISKNAME.FILENAME. On the other hand, only the last character before the dot is checked, so you could type "1.MYFILE" instead of "DSK1.MYFILE".
If you do not specify any filename, as in the first exemple, the program defaults to "DSK1.PC".
On the PC side, enter a filename in the edit box. I suggest that you use an extension that reflects the file type: this way you will know what to specify when transfering them back to the TI-99/4A. Then click the [Import] button. As the transfer proceeds you'll see a lot of giberrish on the upper part of the TI-99/4A screen. Once done, the PC will tell you how many bytes were transfered.
To abort transmission, you can press Fctn-4 at any time. The PC automatically aborts if the TI-99/4A does not answer after a few seconds.
Here also, DSKx. must contain the drive number. If you do not include a filename, the program defaults to DSK1.PC
If you do not include any format specification, the current file format is retained if the file already exists. If not, a new "Program" file will be created. If you specify a format for a file that already exists, the new format will replace the old one. Valid format strings are DFxx, DVxx, IFxx, IVxx and PROG, where xx is the record length.
On the PC side, enter a filename in the edit box. Then click the [Export] button. As the transfer proceeds you'll see a lot of giberrish on the upper part of the TI-99/4A screen. Once done, the PC will tell you how many bytes were transfered.
Where x is the drive number (it cannot be a disk name). Only the last
character of the string is considered, so you could omit the "DSK" part.
You can also use a string variable:
The program reads the first sector from the disk to determine the disk size. Then it waits for the PC to answer.
On the PC side, enter a filename in the edit box. I suggest that you use a .DSK extension to identify files containing a floppy disk. Then click the [Import] button. As the transfer proceeds you'll see a lot of giberrish on the upper part of the TI-99/4A screen. Once done, the PC will tell you how many bytes were transfered.
To abort transmission, you can press Fctn-4 at any time. The PC automatically aborts if the TI-99/4A does not answer after a few seconds.
Where x is the drive number. Be aware that all data currently on the floppy will be mercilessly overwritten without further warning!
On the PC side, select the appropriate file and click the [Export] button. Again you'll see a funny display on the TI-99/4A as the transfer is proceeding, then the PC tells you how many bytes were transfered.
D25 connector ,-------------------------1 | ----14 | ,------------------2 PIO connector | | ----15 | | ,----------------3 1---------- -------------, | ,----|-|-----------------16--, 2--------- -------------|-|-|----' | ,--------------4 | 3---------- -------------|-|-|------' | ----17 | 4--------- -------------|-|-|--------' ,------------5 | 5---------- -------------|-|-|----------' ----18 | 6--------- -------------|-|-|-----------------------6 | 7---------- -------------|-|-|-----------------, ----19 | 8--------- -------------|-|-|---------------, '-----7 | 9---------- -------------|-|-|-------------, | ----20 | 10-------- -------------|-' | | '-------8 | 11--------- -------------|---|-----------, | ----21 | 12-------- -------------|---|-------- | '---------9 | 13--------- -------------|---' '------------22 | 14-------- -------------|--------------------------10 | 15--------- -------------|------------ ----23 | 16-------- -----------, '--------------------------11 | '------------------------------24 | <-- 8-10 feet --> --12----' ----25 --13Remarks
Preliminary. 3/25/99. Not for release. Revision I. 5/23/99. OK to release. Revision 2. 5/2/99. Added picture. Revision 3. 6/17/00. New version of TI99PIO.EXE Revision 4. 8/25/01. Added IDEAL 1.0 Revision 5. 11/3/10. Added Bug99
Back to the TI-99/4A Tech Pages