Jump to content
IGNORED

Who created TI-99 BASIC, TI or MS?


hloberg

Recommended Posts

I just tried to add the new material three times to the Wiki TI-BASIC page and Wiki rejected the sources each time. Now which source they rejected is unclear. So, for now, I have just removed the references already in the article about the origins of TI-BASIC so at least the article isn't giving bad information.

I work with Wiki to get the full update as soon as I can figure it out.

Link to comment
Share on other sites

That is why I don't contribute to wikipedia.  You can prove seven ways to sunday that what you have written is factually correct, if the current maintainer of the article gets their knickers in a twist, it will never see the light of day. Too many axes being honed and polished over there, not enough concern about being actually informative.

 

 

  • Like 2
Link to comment
Share on other sites

All about CALLs in 990 TI BASIC

 

The CALL syntax, in 99/4A BASIC and Extended Basic, matches the syntax used in TI BASIC for the 990 minicomputer.  So TI BASIC was designed for named subprograms well before the 99/4A. 

 

It's clear to me that the 99/4A TI BASIC and Extended BASIC were a deliberate subset of 990 TI BASIC with few differences. While reading about the CALL syntax, I also read that 990 TI BASIC used RADIX 100 (with an important feature for DECIMAL type.)


I played with 990 TI BASIC yesterday on Dave Pitt's excellent 990 simulator with DNOS. Basic is already installed. However, it is not clock-speed accurate (it runs fast) so timing BASIC benchmarks is silly. https://www.cozx.com/dpitts/ti990.html


 

In the TI BASIC Reference Manual, 1-Dec-83:  http://www.bitsavers.org/pdf/ti/990/basic/


Page 9-3 describes the DEF statements, which may have a return type, or be multi-line.

Page 9-5 describes the CALL/SUB/SUBEND statements.

Page 11-6 describes how to CALL assembly language routines from 990 TI BASIC, and explains the Radix 100 format of parameters.

 

The CALL/SUB statements, which may have variable types declared:

 

SUB HSTEP(REAL A, INTEGER B, REAL C)
IF A=0 THEN SUBEXIT
C = A * 2^(B/12)
SUBEND

REAL X = 220
INTEGER N = 5
REAL Y
CALL HSTEP(X, N, Y)

An optional type after SUB can set one type for all parameters.

 

ESUB is used instead of SUB to write subroutines that have external visibility. The ESUBs are callable from other programs.


Page 9-3 describes the DEF statements, which may have types or be multi-line:

DEF AVG(X,Y) = (X+Y)/2
DEF REAL PI = 3.1415926535

X = AVG(A,B)/PI

or

DEF XYZ(A,B,C)
XYZ = A + B + 2
FNEND


One of TI's examples of a multi-line DEF is the square root algorithm (also explained to students in TI Learning Center's DC AND BASIC ELECTRICITY textbook.)

 

CALL assembly


Section 11-6 describes how to add assembly language routines to 990 TI BASIC and explains the Radix 100 format.

 

Calling assembly routines is not like  99/4A TI BASIC:

 

LIBRARY "*pathname"
CALL ".ASMBLY"(A$, A, B, C)

where pathname is your assembled and linked code, for example .ASMBLY where "." is the path and ASMBLY is the file. The * indicates that the routine should persist in memory. 

 

The first two words of the file are a BLWP vector; BASIC overwrites the workspace pointer at load time. There is one routine per file. Assembly subroutines return with RTWP.

 

Some important assembly libraries distributed with TI BASIC were the .SORT library and keyed file database. These accessed operating systems features (in particular the SORT facility was a system process, multitasked.)

 

BASIC parameters are passed to the assembly routine in a 18-word block of memory. Continuing the example:

 

REAL A
INTEGER B,C
CALL ".ASMBLY"(A$, A, B, C)

WP-36 Number of parameters
WP-34 2 bits for each parameter type: 
00 end of list
01 integer
10 real or decimal
11 string
WP-30 pointers ...

For the example above,

 

>0004
>E500  * b'11100101 00000000 codes for string, real, int, int
>0000
ptr to A$
ptr to A
ptr to B
ptr to C
>0000
...

Figure 11-1 goes on to unpack the variable formats in memory. In particular, it describes RADIX-100 format for REAL. Integers are 16 bits.

 

REALs are stored in the quite familiar 99/4A format. As we know, the mantissa bytes range from 0-99, wasting a bit per byte (1.3 bits to be pedantic). TI BASIC represents type DECIMAL by using 6 leftover bits to store the number of significant decimal places! (+13 to -13) This feature was omitted from 99/4A floating point, but I find satisfaction that the Radix 100 designer originally make good use of all the bits.


990 TI BASIC used Radix 100 format for REAL and DECIMAL, not the the-standard IBM format used on the 990 elsewhere.

 

Next steps

 

Find a way to disassemble the 990 TI BASIC interpreter!

 

  • Like 3
  • Thanks 1
Link to comment
Share on other sites

8 hours ago, senior_falcon said:

Quite correct. Our memory of an event is often different from someone else’s memory of the same event. Which is why in a trial, forensic evidence is usually more reliable than eye witness evidence.

which is why I put all the evidence we had from both sides, but they didn't like it. I got no feed back of what they didn't like but my guess is the interviews off Atariage wasn't 'authoritative enough'. but the interviews is all I have for the side that TI created TI BASIC. SO, I got them to take all the reference down of it's origin. At least that's something.  

  • Like 1
Link to comment
Share on other sites

  • 7 months later...
On 9/17/2019 at 1:28 PM, hloberg said:

 

Interview with Herman Schuurman who had a 36 years career at Texas Instruments, from November 1977 to his retirement in 2013. In March 1978 he got promoted to be Lead Programmer for the Consumer Products Group in Lubbock.

 

Herman's a cool guy.  I worked with him up until he retired.  Knowing TI, I wouldn't be surprised if Microsoft ended up working on a project adjacent to the one TI shipped.

 

I also worked with Karl Guttag.  He had indicated to me (back when we were both still at TI) that he thought Microsoft had actually done the BASIC for the Home Computer.  I wonder if he'd conflated the 99/4 with the 99/7 as Herman suggests?  Karl was on the VDP side of things (and later CPU, with the TMS9995), while Herman was right in the thick of things in Lubbock.

  • Like 4
Link to comment
Share on other sites

  • 10 months later...

Creative Computing March 1980 Page 18

"TI Basic was written by....Microsoft.
...not compatible with---other Microsoft Basic implementations such as
TRS-80 Level 2, OSI Basic, Commodore PET Basic, Applesoft Basic.."



 

I don't consider this claim to be authoritative (where did CC get the info from?) but it may be the earliest appearance of the claim, correct or not..

Edited by blackbox
  • Like 1
Link to comment
Share on other sites

On 8/30/2019 at 6:05 PM, FarmerPotato said:

Hypothesis: Perhaps the floating point format on the TI-99/4A was intended to be BCD coded, but this was abandonded in favor of Radix-100.

One thing to consider here is that by the time when the TI-99 was developed (followed by the 99/4A), there was a programmable pocket sized calculator that had the best math precision of them all: The TI programmable 59. Since it had a four bit CPU, it used a 13 digit BCD-coded floating point number format. See the similarity?

Perhaps they wanted to spin on that wheel. After all, it was the calculator division that got the little computer under its umbrella.

Going to Radix 100 was a logical step, when you had a 16-bit CPU instead of a 4-bit.

  • Like 2
Link to comment
Share on other sites

The interesting thing about radix 100 is that it allows the system to precisely represent those numbers that are most important for our decimal calculation. The IEEE 754 system cannot, for instance, represent the number 0.1. It is simply impossible because in binary representation, 0.1 becomes a periodic fraction. Likewise, 0.2, 0.3, 0.4, 0.6, 0.8, and 0.9 don't work and are all rounded. Only those numbers which are like 0.5, 0.25, 0.125, 0.0625 ... and all sums of them do not need rounding.

 

In radix 100, 0.1 = 10*100^-1. The choice of this system made calculations very slow, but very precise at the same time - if we consider precision from the moment on when the user-provided number constant is encoded in the system.

Edited by mizapf
  • Like 3
Link to comment
Share on other sites

  • 1 year later...
On 8/28/2019 at 6:14 PM, acadiel said:

You guys should read the TI source code for the console GROMs.. some fun stuff in here.

 

Console GROM Source Code 1-Monitor 1982-08-25

Console GROM Source Code 2-Cassette 1982-08-25

Console GROM Source Code 3-EDIT-HC 1982-08-25

Console GROM Source Code 4-PSCAN 1982-08-25

Console GROM Source Code 5-FLMGR 1982-08-25

Console GROM Source Code 6-EXEC 1982-08-25

Console GROM Source Code-Monitor Page 33

 

 

console source.zip 9.18 MB · 67 downloads

I am looking for that in long time! I now downloaded that.  Thanks.

 

How about text format version that can be assembled by GPL assembler?

Also I am looking for 99/4 console/monitor/basic source codes that contains equation calculator.

I already got 99/8 source codes from Whtech FTP site. We have to find 99/2 source codes as well.

 

I need to find XB source (both old and new) and RXB source as well.

 

Thanks,

Tim

Link to comment
Share on other sites

2 hours ago, FSword7 said:

I am looking for that in long time! I now downloaded that.  Thanks.

 

How about text format version that can be assembled by GPL assembler?

Also I am looking for 99/4 console/monitor/basic source codes that contains equation calculator.

I already got 99/8 source codes from Whtech FTP site. We have to find 99/2 source codes as well.

 

I need to find XB source (both old and new) and RXB source as well.

 

Thanks,

Tim

RXB GPL and ROM source from version 1000 to 2022 is free.

 

 

 

rxb.zip

  • Like 5
Link to comment
Share on other sites

@FarmerPotato That is a nice summary.  I assume 990 BASIC is complied (like BASIC was originally designed to be)?  If so, I suspect it is quite performant compared to the 99/4A's interpreter.  Pretty nice that they exposed direct access to assembly, and the different data types as well.  Thanks for the links.

Link to comment
Share on other sites

@matthew180I haven't seen any documentation that indicates that BASIC programs are compiled. There's some evidence that source is tokenized. I wonder if Herman Schuurman had access to the DX10 BASIC internals. The 99/4A token tables have some holes where a DX10 token would fit in reference manual order. 
 

 

  • Like 1
Link to comment
Share on other sites

1 hour ago, FarmerPotato said:

@matthew180I haven't seen any documentation that indicates that BASIC programs are compiled. There's some evidence that source is tokenized. I wonder if Herman Schuurman had access to the DX10 BASIC internals. The 99/4A token tables have some holes where a DX10 token would fit in reference manual order. 
 

 

If you look at RXB or XB GPL source code it shows some reserved tokens and some future tokens.

Spoiler

***********************************************************
*    BASIC TOKEN TABLE
*      EQU  >80               spare token
ELSEZ  EQU  >81               ELSE
SSEPZ  EQU  >82               ::
TREMZ  EQU  >83               $
IFZ    EQU  >84               IF
GOZ    EQU  >85               GO
GOTOZ  EQU  >86               GOTO
GOSUBZ EQU  >87               GOSUB
RETURZ EQU  >88               RETURN
DEFZ   EQU  >89               DEF
DIMZ   EQU  >8A               DIM
ENDZ   EQU  >8B               END
FORZ   EQU  >8C               FOR
LETZ   EQU  >8D               LET   
BREAKZ EQU  >8E               BREAK
UNBREZ EQU  >8F               UNBREAK
TRACEZ EQU  >90               TRACE
UNTRAZ EQU  >91               UNTRACE
INPUTZ EQU  >92               INPUT
DATAZ  EQU  >93               DATA
RESTOZ EQU  >94               RESTORE
RANDOZ EQU  >95               RANDOMIZE
NEXTZ  EQU  >96               NEXT
READZ  EQU  >97               READ
STOPZ  EQU  >98               STOP
DELETZ EQU  >99               DELETE
REMZ   EQU  >9A               REM
ONZ    EQU  >9B               ON
PRINTZ EQU  >9C               PRINT
CALLZ  EQU  >9D               CALL
OPTIOZ EQU  >9E               OPTION
OPENZ  EQU  >9F               OPEN
CLOSEZ EQU  >A0               CLOSE
SUBZ   EQU  >A1               SUB
DISPLZ EQU  >A2               DISPLAY
IMAGEZ EQU  >A3               IMAGE
ACCEPZ EQU  >A4               ACCEPT
ERRORZ EQU  >A5               ERROR
WARNZ  EQU  >A6               WARNING
SUBXTZ EQU  >A7               SUBEXIT
SUBNDZ EQU  >A8               SUBEND
RUNZ   EQU  >A9               RUN
LINPUZ EQU  >AA               LINPUT
*      EQU  >AB               spare token (LIBRARY)
*      EQU  >AC               spare token (REAL)
*      EQU  >AD               spare token (INTEGER)
*      EQU  >AE               spare token (SCRATCH)
*      EQU  >AF               spare token
THENZ  EQU  >B0               THEN
TOZ    EQU  >B1               TO
STEPZ  EQU  >B2               STEP
COMMAZ EQU  >B3               ,
SEMICZ EQU  >B4               ;
COLONZ EQU  >B5               :
RPARZ  EQU  >B6               )
LPARZ  EQU  >B7               (
CONCZ  EQU  >B8               &          (CONCATENATE)
*      EQU  >B9               spare token
ORZ    EQU  >BA               OR
ANDZ   EQU  >BB               AND
XORZ   EQU  >BC               XOR
NOTZ   EQU  >BD               NOT
EQUALZ EQU  >BE               =
LESSZ  EQU  >BF               <
GREATZ EQU  >C0               >
PLUSZ  EQU  >C1               +
MINUSZ EQU  >C2               -
MULTZ  EQU  >C3               *
DIVIZ  EQU  >C4               /
CIRCUZ EQU  >C5               ^
*      EQU  >C6               spare token
STRINZ EQU  >C7               QUOTED STRING
UNQSTZ EQU  >C8               UNQUOTED STRING
NUMZ   EQU  >C8               ALSO NUMERICAL STRING
NUMCOZ EQU  >C8               ALSO UNQUOTED STRING
LNZ    EQU  >C9               LINE NUMBER CONSTANT
*      EQU  >CA               spare token
ABSZ   EQU  >CB               ABS
ATNZ   EQU  >CC               ATN
COSZ   EQU  >CD               COS
EXPZZ  EQU  >CE               EXP
INTZ   EQU  >CF               INT
LOGZ   EQU  >D0               LOG
SGNZZ  EQU  >D1               SGN
SINZ   EQU  >D2               SIN
SQRZ   EQU  >D3               SQR
TANZ   EQU  >D4               TAN
LENZ   EQU  >D5               LEN
CHRZZ  EQU  >D6               CHR$
RNDZ   EQU  >D7               RND
SEGZZ  EQU  >D8               SEG$
POSZ   EQU  >D9               POS
VAL    EQU  >DA               VAL
STRZZ  EQU  >DB               STR$
ASCZ   EQU  >DC               ASC
PIZ    EQU  >DD               PI
RECZ   EQU  >DE               REC
MAXZ   EQU  >DF               MAX
MINZ   EQU  >E0               MIN
RPTZZ  EQU  >E1               RPT$
*      EQU  >E2               unused
*      EQU  >E2               unused
*      EQU  >E3               unused
*      EQU  >E4               unused
*      EQU  >E5               unused
*      EQU  >E6               unused
*      EQU  >E7               unused
NUMERZ EQU  >E8               NUMERIC
DIGITZ EQU  >E9               DIGIT
UALPHZ EQU  >EA               UALPHA
SIZEZ  EQU  >EB               SIZE
ALLZ   EQU  >EC               ALL
USINGZ EQU  >ED               USING
BEEPZ  EQU  >EE               BEEP
ERASEZ EQU  >EF               ERASE
ATZ    EQU  >F0               AT
BASEZ  EQU  >F1               BASE
*      EQU  >F2               spare token (TEMPORARY)
VARIAZ EQU  >F3               VARIABLE
RELATZ EQU  >F4               RELATIVE
INTERZ EQU  >F5               INTERNAL
SEQUEZ EQU  >F6               SEQUENTIAL
OUTPUZ EQU  >F7               OUTPUT
UPDATZ EQU  >F8               UPDATE
APPENZ EQU  >F9               APPEND
FIXEDZ EQU  >FA               FIXED
PERMAZ EQU  >FB               PERMANENT
TABZ   EQU  >FC               TAB
NUMBEZ EQU  >FD               #
VALIDZ EQU  >FE               VALIDATE
*      EQU  >FF               ILLEGAL VALUE
***********************************************************

 

  • Like 2
Link to comment
Share on other sites

On 8/28/2019 at 6:14 PM, acadiel said:

You guys should read the TI source code for the console GROMs.. some fun stuff in here.

 

Console GROM Source Code 1-Monitor 1982-08-25

Console GROM Source Code 2-Cassette 1982-08-25

Console GROM Source Code 3-EDIT-HC 1982-08-25

Console GROM Source Code 4-PSCAN 1982-08-25

Console GROM Source Code 5-FLMGR 1982-08-25

Console GROM Source Code 6-EXEC 1982-08-25

Console GROM Source Code-Monitor Page 33

 

 

console source.zip 9.18 MB · 77 downloads

Attached are the missing pages

 

GROM 0_Monitor-Page_033.jpg

EXEC GROM pg 29.pdf EXEC GROM pg 30.pdf FLMGR GROM pg 1.pdf

  • Like 8
Link to comment
Share on other sites

5 hours ago, acadiel said:

I'll try and use Abbyy to fix these, and I'll re-upload the archive.  Thanks!

 

Thanks @acadiel!  Actually, we have @Regulus to thank for providing the missing pages.  The copiers BITD tended to double feed and skip a page once in a while but he had the missing "pieces".

  • Like 5
Link to comment
Share on other sites

I'm reading a book with a heart warming story.

 

When Commodore purchased the rights to basic for the VIC-20 - the deal said, they could use it on any machine (or variant) that Commodore produced with a 6502 processor, and then could extend the software any way they wanted under that one license.

 

Commodore went on to use that ONE license for the VIC-20, C64 and Plus/4 lines, with multiple enhancements over time.

 

The book says - Microsoft felt they got cheated on the deal and never did a deal like that again. 😃

  • Like 1
  • Haha 1
Link to comment
Share on other sites

11 hours ago, dhe said:

I'm reading a book with a heart warming story.

 

When Commodore purchased the rights to basic for the VIC-20 - the deal said, they could use it on any machine (or variant) that Commodore produced with a 6502 processor, and then could extend the software any way they wanted under that one license.

 

Commodore went on to use that ONE license for the VIC-20, C64 and Plus/4 lines, with multiple enhancements over time.

 

The book says - Microsoft felt they got cheated on the deal and never did a deal like that again. 😃

Hmm. Microsoft getting cheated outta something..that's a first and a last.

  • Like 1
Link to comment
Share on other sites

23 hours ago, dhe said:

I'm reading a book with a heart warming story.

 

When Commodore purchased the rights to basic for the VIC-20 - the deal said, they could use it on any machine (or variant) that Commodore produced with a 6502 processor, and then could extend the software any way they wanted under that one license.

 

Commodore went on to use that ONE license for the VIC-20, C64 and Plus/4 lines, with multiple enhancements over time.

 

The book says - Microsoft felt they got cheated on the deal and never did a deal like that again. 😃

I would have thought this would have been for the PET initially?  

Link to comment
Share on other sites

It might have... Looking at wikipedia, the situation seems like it might have been complex:

Commodore contacted Microsoft to upgrade BASIC for the new machines; this resulted in the soon-to-be-familiar BASIC 2.0 which removed the 256 element array limitation and had a rearranged zero page. Most bugs were fixed and IEEE-488 support in BASIC was made to be functional. The PEEK function was unblocked for memory locations above 49152. BASIC 2.0 also included an easter egg that Bill Gates personally coded, which would cause "MICROSOFT!" to appear if the user typed WAIT 6502,x (x being the number of times to display the message); this was reportedly due to a dispute with Commodore over ownership of BASIC (years later, when Microsoft developed BASIC for the Amiga, one of their conditions was that Commodore credit the original authors of BASIC, so BASIC 7.0 on the Commodore 128 displayed a Microsoft copyright notice). This feature was present in all 30xx series PETs. Commodore executives were unhappy when they learned about it and it was removed from BASIC on all subsequent Commodore machines. Microsoft also remained sensitive about their copyrighted code and pressured Commodore to not release any BASIC code listings to the public, although user groups eventually made disassemblies of BASIC.

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...
  • Recently Browsing   0 members

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