Jump to content
IGNORED

TI 980 ingeniously used to cross-assemble 9900 code


Recommended Posts

I found this unusual paper:

 

COMPUTER SYSTEM CROSS-FERTILIZATION: MAKING YOUR TI 980 PLAY YOUR TMS 9900

by John D. Meng

Presented at TI-MIX Atlanta 1979

 

It describes creating a cross-assembler for the new TMS9900 chip, within the assembler on the laboratory's TI 980A minicomputer.   The TI 980 had a different instruction set than its successor, (you guessed it) the TI 990 minicomputer.   However, the 980 assembler had two directives for defining new instructions!  OPD (operation define) and FRM (Format a new instruction)

 

Quote

Using these two features allowed us, to produce an assembler for the TMS 9900 which executed on our TI 980-A system, the entire project (after the initial inspiration) requiring less than an hour to implement. The TMS 9900 assembler, including comments, consists of exactly 130 lines of code.

 

The syntax looks scary--but they grew to love it. 

 

For example, the arithmetic format I instructions are defined with a FRM. There are constant values for the mnemonics and addressing modes. 

 

ARI    FRM    4,2,4,2,4            BIT FIELDS FOR 9900 FORMAT I
D      EQU    0
I      EQU    1
A      EQU    >A
MOV    EQU    >C

 

To assemble a MOV instruction,

 

       ARI    MOV,I,0,D,2          MOV  R2,*R0

 

which packs the 16 bits of a word, according to the FRM above:

 

1100  (four bits, opcode)

01      (two bits, register indirect, dest addressing mode)

0000  (four bits, dest register 0)

00     (two bits, register direct , src addressing mode)

0010  (four bits, src register 2)

 

Note that the format here is opcode, destination, source... backwards... (a matter of debate)

 

 

Another example,

 

EXT    FRM    6,4,2,4
MPY    EQU    >E

       EXT    MPY,D,1,D,0               produces MPY R0,R1

 

In other cases, the format of a 9900 instruction fit neatly into the pattern of a completely unrelated 980 instruction, so they took advantage of that with the OPD directive. 

 

Format 8 of 9900 instructions, such as AI (add immediate), happen to fit into the TI 980 Format 7.  This declares a mnemonic with Format 7:

 

AI     OPD    >220,7

 

 

 

Then, how to debug the code?

 

Quote

Our solution was to connect a 9900 chip to our 980 via a standard 16-in/16-out data module. This connection allowed us to program the 980 to use a reserved block of its memory as the memory space of the 9900. Enough logic was added to the connection to allow the 980 to micro-step the 9900, to generate 9900 interrupts and to implement the CRU channel (see Figure 3)

 

The 980 can set breakpoints at arbitrary points and then operate the 9900 chip until it reaches a breakpoint.

 

 

This scheme was exactly what TI's AMPL microprocessor laboratory would later provide, of course with the cost of a new TI 990 bundled in.

 

But programming and debugging in assembly was no joyride. Therefore they invented a little language. Reminiscent of the Forth inner loop, the interpreter follows a list, calling BLWP on each address.  Translated back into TI syntax for y'all, the inner loop was:

 


START  LI   R0,PROGM     POINTER TO FIRST STEP (PSEUDO PC)

RUN    MOV  *R0,R2       OPCODE IS PARAMETER POINTER
       JEQ  START        ZERO OP CODE MEANS RESTART
       INCT R0           STEP PSEUDO PC   
       BLWP *R2          EXECUTE THE PSEUDO-INSTRUCTION
       JMP  RUN          LOOP

 

The sample program is:

 

PROGM  @SCAL  RESET
       @TIMR  RESET
       @TIMR  START
       @ADC   ON
       FIN               END.  RESTART. 

 

which is, in 9900 syntax,

 


PROGM  DATA SCAL,RESET
       DATA TIMR,RESET
       DATA TIMR,START
       DATA ADC,ON
       DATA 0            FIN

 

inside the SCAL routine, the parameter RESET is picked up via something like:

 

       MOV  *R13,R0
       MOV  *R0,R0
       INCT *R13

 

In the Epilog, the author makes me feel sad that this effort was superseded. 

 

 
What we have described is not a tutorial on what to do. Nearly everything we have done has been superceded in economic and efficient fashion by material now available from Texas Instruments. We still use our cross assembler simply because we have it and we are very familiar with it.  However, TIBUG achieves much of what we were attempting with our cross-connection between the 980 and a 9900 chip, and the recent introduction of POWER BASIC supercedes our own pseudo-language develop­ments.

What we have described is,first of all, history. It is a story of challenges successfully met when a new and apparently useful device appeared without much manufacturer support. It is also a story of how to learn in great depth about a new device. Finally it is a story about the immeasurable value of ingenuity in the face of crucial challenges coupled with a perennial budget crunch.

 

 

------------

 


Some cute instruction mnemonics of the 980 are SNO (Skip on Not all Ones) and SOO (Skip On all Ones).  All the conditional branches are called Skip and they only jump over the next instruction!  You might follow a Skip with a BRU, branch unconditional, for the opposite case.  

 

I would like to have its directive BRR (Base Register Reset.) 

 

I imagine this as a valid 980 program:

 

       BRR

       ADD
       SNO
       
       BRU
       IDL


 

Here is a gentle introduction to 980 assembly, prepared for the TI-MIX  group (much more under bitsavers TI-980)

 

I chuckled at this sequence, since CR refers to both Card Reader and Carriage Return.  Hit it. 

 

image.thumb.png.72629c279d9a6e46882c3dcec1c30d95.png

 

Notice that our beloved name CS1 was used by the operating system to refer to the cassette tape unit. 

 

 

 

If you don't have enough grey hair:  the Card Reader/Punch* was a frightful I/O device where a stack of paper cards held your data, punched out with little holes across 12 columns. For example, the numbers 0 through 9 were single punches of the columns 0 through 9... letter A would be 0 plus a hole in the "X" column,  and so on.  The 990 reference card still featured a table of punch codes, listing the 64 characters of IBM ECBDIC, followed by a helpful ASCII conversion table (also 64 codes...)   Dave Pitts mentions a card reader for the 990. 

 

 

From the style of these two documents, it's for sure that 980 users had a sense of humor. 

 

980s in working order were still put to use at TI, in the late 70s, alongside 990s.  (see the speech lab manual that I uploaded.)

 

*In the most antiquated lab course I had in college (6811 embedded lab), we had a network of computer terminals (MTS) connected to the IBM mainframe with all its disk storage and programs.  Yet its 6811 assembler still referred to your input source file as "SCARDS" and output file as "SPUNCH".  I forget what the next step was called--you referred to that assembler output as SCARDS again, and sent it out your terminal's second serial port (STYPE?), assuming the 6811 board was hooked up there and ready to receive it.  Typically I avoided writing code on the lab terminal.  Instead I logged into MTS and uploaded files from my Geneve 9640.  Fast-Term (hmm) mapped the extended keys on the Geneve keyboard to MTS escape codes. 

 

Reference

 

Meng, John D. (1979).  COMPUTER SYSTEM CROSS-FERTILIZATION: MAKING YOUR TI 98C PLAY YOUR TMS 9900.
February 1979. Lawrence Berkeley Laboratory, University of California at Berkeley.  To be presented at 8th annual TI-MIX, Atlanta GA, 3/27/1979.

 

Downloaded  on 1/27/2023 from https://escholarship.org/content/qt1vz517x5/qt1vz517x5_noSplash_0a4bcf88c0d7a86260d9787b1bc5fc73.pdf?t=li5ywu

 

 

TI-980 playing the TMS9900.pdf

  • Like 4
Link to comment
Share on other sites

  • The title was changed to TI 980 ingeniously used to cross-assemble 9900 code

Interesting. Strangely enough, there was a 980B under discussion on the ccmp discord today, used in an Evans&Sutherland Novoview SP-1 flight simulator, that feeds data to the E&S hardware that drives the vector display.

 

Last I checked, Dave is still looking for DX980 and any 980 software, compilers, etc. for use with his 980 simulator.

  • Like 1
Link to comment
Share on other sites

13 hours ago, jbdigriz said:

Interesting. Strangely enough, there was a 980B under discussion on the ccmp discord today, used in an Evans&Sutherland Novoview SP-1 flight simulator, that feeds data to the E&S hardware that drives the vector display.

 

Last I checked, Dave is still looking for DX980 and any 980 software, compilers, etc. for use with his 980 simulator.

I wonder if there is just one 980 left out there, and my one contact is in that same group?  They mentioned SDM drives, but no way to boot. 

 

Evans & Sutherland was a name to conjure by in the 80s!

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...