Jump to content
IGNORED

Methods for speeding up CALL LINK


Recommended Posts

Right now, I cannot find the thread where we discussed passing long lists of numbers in various ways. I wrote a variation on the theme where I passed an array, which allowed pretty much as long a list as we desired. I think I even avoided NUMASG in the process. That would make CALL LINK faster, no?

 

What about my suggestion in post #9. (Perhaps you were waiting for me to locate the thread—so far an unsuccessful quest.) | :)

 

I remember a discussion about passing arrays but cannot remember about it.

 

I found it. It is in the last two posts of TI MiniMemory programs. I passed a number and an array to an ALC routine and processed the array without using the helper functions NUMASG, NUMREF, etc. I don't know how useful it would be in the present circumstance, but there it is. :)

 

...lee

Link to comment
Share on other sites

As a GPL programmer for XB and I know the CALL PEEK, CALL LOAD and CALL LINK GPL code inside out I can tell you the major problem is passing values.

 

Look you have a number in XB that is in the XB program stored in Upper 24K RAM, but it is pushed into VDP RAM, then pushed onto VDP STACK, then converted from

Floating Point to Integer all in VDP RAM and FAC/ARG Fast RAM. This happens for every single number passed to Assembly using PEEK, LINK or LOAD.

 

I have on numerous occasions posted the code on CALL PEEK, CALL LOAD and CALL LINK that all share same code and procedures to pass values to or from Assembly.

 

When I wrote and released my game IN THE DARK I saw that the big issue was CALL LOAD was the major slow down, not RXB routine CALL EXECUTE(address)

 

I can see a new version of CALL PEEK and CALL LOAD is needed, and that would open up a better version of CALL LINK, CALL LOAD and CALL PEEK.

 

I guess IPEEK (Integer PEEK), ILOAD(Integer LOAD), and ILINK(Integer LINK) would benefit XB as they would like RXB CALL EXECUTE all be integer only.

Link to comment
Share on other sites

 

I guess IPEEK (Integer PEEK), ILOAD(Integer LOAD), and ILINK(Integer LINK) would benefit XB as they would like RXB CALL EXECUTE all be integer only.

 

Your integer call idea rouses my curiosity regarding Advanced BASIC - I wonder if floating point is still used or if those calls were converted to integer only. I will have to take a look. How would you implement integers since the variables and numeric constants are stored as floats?

Link to comment
Share on other sites

 

Your integer call idea rouses my curiosity regarding Advanced BASIC - I wonder if floating point is still used or if those calls were converted to integer only. I will have to take a look. How would you implement integers since the variables and numeric constants are stored as floats?

Every single number is stored in Floating Point in Basic and XB, a major sticking point to both is TI used nothing but Floating point.

 

I have pointed out the stupidity of this many times as you only need a random number for screen like 24 or 32 for row and column at max, or even sprites 265 or 192 for row and column.

 

XB should only use Integers unless Floating Point is needed, but instead everything is Floating Point and thus slows all actions using numbers to a crawl.

 

A better approach is using only Integers words hex >8000 = -32768 to hex >7FFF = 32767

 

This would speed up XB or Basic considerably as a word beats the hell out of conversion of a Floating Point 8 bytes to represent ONE (1) i.e. >0001 vs >10000000 (16 bits)

Link to comment
Share on other sites

Every single number is stored in Floating Point in Basic and XB, a major sticking point to both is TI used nothing but Floating point.

 

I have pointed out the stupidity of this many times as you only need a random number for screen like 24 or 32 for row and column at max, or even sprites 265 or 192 for row and column.

 

XB should only use Integers unless Floating Point is needed, but instead everything is Floating Point and thus slows all actions using numbers to a crawl.

 

A better approach is using only Integers words hex >8000 = -32768 to hex >7FFF = 32767

 

This would speed up XB or Basic considerably as a word beats the hell out of conversion of a Floating Point 8 bytes to represent ONE (1) i.e. >0001 vs >10000000 (16 bits)

Yep, I think most would agree floating point sucks for all the integer operations. What I was getting at is in post #31 you mentioned IPEEK, ILOAD, etc. and I thought you were adding those new calls to RXB, I guess I misread that? If you are adding these new calls, then my question is how would you add integer support to make this happen?

Link to comment
Share on other sites

Yep, I think most would agree floating point sucks for all the integer operations. What I was getting at is in post #31 you mentioned IPEEK, ILOAD, etc. and I thought you were adding those new calls to RXB, I guess I misread that? If you are adding these new calls, then my question is how would you add integer support to make this happen?

Sorry I was not clear.

Yes I can add these to RXB but this requires a major rewrite of XB to pull it off.

I mean every single number is stored in Floating Point so I would have to add Assembly in ROMs along with GPL changes to repair this issue.

 

See IPEEK, ILOAD and ILINK would be slightly faster but that is not the problem, all numbers are Floating Point and

that is a huge issue in all XB programs not just those using PEEK, LOAD and LINK.

 

So in summary I need to rewrite RXB from scratch including the XB ROMs, and asking for assistance at Fest West got me no offers at all.

I am getting a real attitude of screw it as no one seems to care.

Link to comment
Share on other sites

@ Rich: Do subs such as HCHAR(1,1,42,768) take the numbers 1,1,42,768 and convert them to floating point, then to integer? If so, this seems like a place where some speed could be gained simply by going directly to integer.

Well here is the XB GPL code from RXB 2001 the least modified code I have presently to show for HCHAR and VCHAR:

<0252>               ***********************************************************
<0253>               *                SUBPROGRAM FOR 'HCHAR'                    
<0254>               ***********************************************************
<0255> AB03 06,AC,D6 HCHAR  CALL HVCHR             Get X, Y values character, # 
<0256> AB06 8F,4A           DCZ  @FAC              If 0 characters
<0257> AB08 6B,12           BS   HCHAR2
<0258> AB0A 08,E0,00 HCHAR1 BYTE >08,>E0,>00,>FB  * FMT '@VAR0'   Display horizo
       AB0D FB
<0259> AB0E 93,4A           DDEC @FAC              Done yet?
<0260> AB10 4B,0A           BR   HCHAR1            No, finish it
<0261>               * RXB PATCH CODE
<0262> AB12 D6,42,B3 HCHAR2 CEQ  COMMAZ,@CHAT
<0263> AB15 6B,03           BS   HCHAR
<0264> AB17 BC,7F,02 XPTRTN ST   @MNUM,@XPT        Restore X-pointer

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0036 
EQUATES EXEC-359
<0265> AB1A 0F,7E    LNKRTN XML  SPEED             Must be at
<0266> AB1C 00              BYTE SYNCHK        *     a right
<0267> AB1D B6              BYTE RPARZ         *      parenthesis
<0268> AB1E 06,6A,78 LNKRT2 CALL CHKEND            Check end of statement
<0269> AB21 4D,BA           BR   ERRSYN            If not end-of-stmt , error
<0270> AB23 06,00,12        CALL RETURN            Return to caller
<0271>               ***********************************************************
<0272>               *                SUBPROGRAM FOR 'VCHAR'                    
<0273>               ***********************************************************
<0274> AB26 06,AC,D6 VCHAR  CALL HVCHR             Get X, Y values character, # 
<0275> AB29 8F,4A           DCZ  @FAC              If 0 characters
<0276> AB2B 6B,3F           BS   VCHAR2
<0277> AB2D 08,E0,00 VCHAR1 BYTE >08,>E0,>00,>9E,>FB * FMT '@VAR0',>31 Display v
       AB30 9E,FB
<0278> AB32 93,4A           DDEC @FAC              Done yet?
<0279> AB34 6B,3F           BS   VCHAR2            Yes, return
<0280> AB36 8E,7E           CZ   @YPT              If not at start of colunm
<0281> AB38 4B,2D           BR   VCHAR1
<0282> AB3A 90,7F           INC  @XPT              Move X-ptr to right one colun
<0283> AB3C 05,AB,2D        B    VCHAR1
<0284>               * RXB PATCH CODE
<0285> AB3F D6,42,B3 VCHAR2 CEQ  COMMAZ,@CHAT
<0286> AB42 6B,26           BS   VCHAR
<0287> AB44 4B,17           BR   XPTRTN
<0288>               ***********************************************************

Now to include some of the subprograms it calls:

<0120> ACD6 06,AC,A9 HVCHR  CALL GPHV              Get X, Y VALUES
<0121> ACD9 0F,74           XML  PARSE
<0122> ACDB B6              BYTE RPARZ
<0123> ACDC 06,A9,95        CALL INTARG
<0124> ACDF A2,4B,60        ADD  OFFSET,@FAC1
<0125> ACE2 BC,00,4B        ST   @FAC1,@VAR0       SAVE THE CHARACTER
<0126> ACE5 BF,4A,00        DST  1,@FAC            ASSUME 1 CHARACTER
       ACE8 01
<0127> ACE9 D6,42,B6        CEQ  RPARZ,@CHAT       If not right parenthesis
<0128> ACEC 6C,F8           BS   GAC95
<0129> ACEE 0F,7E           XML  SPEED             Must be
<0130> ACF0 00              BYTE SYNCHK          *   at a
<0131> ACF1 B3              BYTE COMMAZ          *    comma
<0132> ACF2 0F,74           XML  PARSE             # OF CHARACTERS
<0133> ACF4 B6              BYTE RPARZ
<0134> ACF5 06,A9,95        CALL INTARG            FLOATING TO INTEGER
<0135> ACF8 00       GAC95  RTN
Edited by RXB
Link to comment
Share on other sites

And more subroutines:

<0090>               ***********************************************************
<0091>               * SUBROUTINE TO GET ROW, COLUMN VALUES                     
<0092>               ***********************************************************
<0093>               * RXB PATCH CODE
<0094> ACA9 06,AC,89 GPHV   CALL LPAR              Insure '(', parse, insure ','
<0095>               * RXB PATCH CODE
<0096> ACAC 0F,7E    GPHVRC XML  SPEED             Insure in range
<0097> ACAE 02              BYTE RANGE           *  of 1 - 24
<0098> ACAF 01              BYTE 1
<0099> ACB0 00,18           DATA 24
<0100> ACB2 92,4B           DEC  @FAC1             Adjust to internal range
<0101> ACB4 BC,02,7F        ST   @XPT,@MNUM
<0102> ACB7 BC,7E,4B        ST   @FAC1,@YPT        Set row pointer
<0103> ACBA 0F,7E           XML  SPEED             Get column value
<0104> ACBC 01              BYTE PARCOM          *  and insure a comma
<0105> ACBD 0F,7E           XML  SPEED             Insure in range
<0106> ACBF 02              BYTE RANGE           *  of 1 to 32
<0107> ACC0 01              BYTE 1
<0108> ACC1 00,20           DATA 32
<0109> ACC3 92,4B           DEC  @FAC1             Internal range: 0 - 31
<0110> ACC5 BC,7F,4B        ST   @FAC1,@XPT        Set column pointer
<0111> ACC8 00              RTN

And it goes on:

<0058>               ***********************************************************
<0059>               *                 EXTENDED STRING PACKAGE                  
<0060>               * THE ROUTINES ARE:                                        
<0061>               *  LITS05 - Move a string literal from the program to the  
<0062>               *            string space                                  
<0063>               *  INTARG - Checks that an argument is a numeric and       

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0019 
EQUATES EXEC-359
<0064>               *            converts it from floating point to an integer 
<0065>               *  PUSSTR - Checks that an argument is a string and pushes 
<0066>               *            it on the stack                               
<0067>               *  CONCAT - Concatenates 2 strings together                
<0068>               *  SEG$   - Segments a string                              
<0069>               *  LEN    - Puts the length of a string in the FAC         
<0070>               *  CHR$   - Converts an integer into its ASCII character   
<0071>               *  STR$   - Converts a number into its string equivalent   
<0072>               *  VAL    - Converts a string into its numeric equivalent  
<0073>               *  POS    - Gives the position of one string within another
<0074>               *  RPT$   - Generates a single string with multiple copies 
<0075>               *            of the original string                        
<0076>               *                                                          
<0077>               *      AN ENTRY IN THE FAC LOOKS LIKE:                     
<0078>               * +------------+-----+----+-------------+-----------------+
<0079>               * |addr of ptr | >65 | xx | addr of str | length of str   |
<0080>               * +------------+-----+----+-------------+-----------------+
<0081>               *     FAC       FAC2  FAC3   FAC4           FAC6           
<0082>               ***********************************************************

And on:

<0060>               ***********************************************************
<0061>               * INTARG - Insures that the value in FAC is a numeric,     
<0062>               *          converts it to integer, issues error message if 
<0063>               *          necessary or returns.                           
<0064>               ***********************************************************
<0065> A995 C6,4C,63 INTARG CH   >63,@FAC2         If string - error
<0066> A998 6D,BE           BS   ERRSNM
<0067> A99A 86,54           CLR  @FAC10            ASSUME NO ERROR OR WARNING
<0068> A99C 87,6C           DCLR @FPERAD
<0069> A99E 0F,12           XML  FLTINT
<0070> A9A0 8E,54           CZ   @FAC10            If error
<0071> A9A2 4D,EE           BR   ERRBV
<0072> A9A4 D2,4A,00        CGE  0,@FAC            Can't be < zero
<0073> A9A7 4D,EE           BR   ERRBV
<0074> A9A9 00              RTN

And yea XB used Floating Point even when it started with a simple number like 12 and 29...insane huh?

Edited by RXB
Link to comment
Share on other sites

 

I found it. It is in the last two posts of TI MiniMemory programs. I passed a number and an array to an ALC routine and processed the array without using the helper functions NUMASG, NUMREF, etc. I don't know how useful it would be in the present circumstance, but there it is. :)

 

So far I have been unable to understand what is happening in your program. I will study some more...

 

One interesting thing that I have found is this:

NUMREF and CFI don't take that much time in the grand scheme of things:

A loop with CALL LINK("HCHAR",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) that does nothing but return to XB takes .1376 seconds per loop. Subtracting the time for one loop and CALL LINK and then dividing by 16 gives .0072 seconds per number for CALL LINK to set it up ready for reading but not to actually read it. It takes .0086 seconds to read the number with NUMREF and then do a CFI. So the actual NUMREF and CFI only takes about .0014 seconds per number. I found this out when I tried bypassing NUMREF by having the assembly program directly read the numbers following HCHAR. When I found the speed increase to be very small, I wondered why and then hit upon the idea of reading them from a following REM statement.

  • Like 1
Link to comment
Share on other sites

That's one of many reasons for why I used Pascal almost always, instead of Extended BASIC.

Texas Instruments is a CALCULATOR manufacture company and this 100% explains the goofy reason why Floating Point is used for everything despite it being horrid for integer only applications.

Link to comment
Share on other sites

So far I have been unable to understand what is happening in your program. I will study some more...

 

One interesting thing that I have found is this:

NUMREF and CFI don't take that much time in the grand scheme of things:

A loop with CALL LINK("HCHAR",1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) that does nothing but return to XB takes .1376 seconds per loop. Subtracting the time for one loop and CALL LINK and then dividing by 16 gives .0072 seconds per number for CALL LINK to set it up ready for reading but not to actually read it. It takes .0086 seconds to read the number with NUMREF and then do a CFI. So the actual NUMREF and CFI only takes about .0014 seconds per number. I found this out when I tried bypassing NUMREF by having the assembly program directly read the numbers following HCHAR. When I found the speed increase to be very small, I wondered why and then hit upon the idea of reading them from a following REM statement.

Yea good idea as why the hell convert to FP when the number is in integer in the REM statement.

 

The solution may be in RXB to just scan for . (Period) or Exponent or size limits in the Editor when program is entered.

IF number has period THEN FP

IF number has Exponent THEN FP

IF number is larger then 32767 OR LESS THAN -32768 THAN FP

 

The solution is the TOKEN flag for all numbers:

<0296>               ***********************************************************
<0297>               *    BASIC TOKEN TABLE
<0298>               *      EQU  >80               spare token
<0299> 0081          ELSEZ  EQU  >81               ELSE
<0300> 0082          SSEPZ  EQU  >82               ::
<0301> 0083          TREMZ  EQU  >83               $
<0302> 0084          IFZ    EQU  >84               IF
<0303> 0085          GOZ    EQU  >85               GO
<0304> 0086          GOTOZ  EQU  >86               GOTO
<0305> 0087          GOSUBZ EQU  >87               GOSUB
<0306> 0088          RETURZ EQU  >88               RETURN
<0307> 0089          DEFZ   EQU  >89               DEF
<0308> 008A          DIMZ   EQU  >8A               DIM
<0309> 008B          ENDZ   EQU  >8B               END
<0310> 008C          FORZ   EQU  >8C               FOR
<0311> 008D          LETZ   EQU  >8D               LET
<0312> 008E          BREAKZ EQU  >8E               BREAK
<0313> 008F          UNBREZ EQU  >8F               UNBREAK
<0314> 0090          TRACEZ EQU  >90               TRACE
<0315> 0091          UNTRAZ EQU  >91               UNTRACE
<0316> 0092          INPUTZ EQU  >92               INPUT
<0317> 0093          DATAZ  EQU  >93               DATA
<0318> 0094          RESTOZ EQU  >94               RESTORE

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0006 
EQUATES EDIT-359
<0319> 0095          RANDOZ EQU  >95               RANDOMIZE
<0320> 0096          NEXTZ  EQU  >96               NEXT
<0321> 0097          READZ  EQU  >97               READ
<0322> 0098          STOPZ  EQU  >98               STOP
<0323> 0099          DELETZ EQU  >99               DELETE
<0324> 009A          REMZ   EQU  >9A               REM
<0325> 009B          ONZ    EQU  >9B               ON
<0326> 009C          PRINTZ EQU  >9C               PRINT
<0327> 009D          CALLZ  EQU  >9D               CALL
<0328> 009E          OPTIOZ EQU  >9E               OPTION
<0329> 009F          OPENZ  EQU  >9F               OPEN
<0330> 00A0          CLOSEZ EQU  >A0               CLOSE
<0331> 00A1          SUBZ   EQU  >A1               SUB
<0332> 00A2          DISPLZ EQU  >A2               DISPLAY
<0333> 00A3          IMAGEZ EQU  >A3               IMAGE
<0334> 00A4          ACCEPZ EQU  >A4               ACCEPT
<0335> 00A5          ERRORZ EQU  >A5               ERROR
<0336> 00A6          WARNZ  EQU  >A6               WARNING
<0337> 00A7          SUBXTZ EQU  >A7               SUBEXIT
<0338> 00A8          SUBNDZ EQU  >A8               SUBEND
<0339> 00A9          RUNZ   EQU  >A9               RUN
<0340> 00AA          LINPUZ EQU  >AA               LINPUT
<0341>               *      EQU  >AB               Zpare token (LIBRARY)
<0342>               *      EQU  >AC               Zpare token (REAL)
<0343>               *      EQU  >AD               Zpare token (INTEGER)
<0344>               *      EQU  >AE               Zpare token (SCRATCH)
<0345>               *      EQU  >AF               Zpare token
<0346> 00B0          THENZ  EQU  >B0               THEN
<0347> 00B1          TOZ    EQU  >B1               TO
<0348> 00B2          STEPZ  EQU  >B2               STEP
<0349> 00B3          COMMAZ EQU  >B3               ,
<0350> 00B4          SEMICZ EQU  >B4               ;
<0351> 00B5          COLONZ EQU  >B5               :
<0352> 00B6          RPARZ  EQU  >B6               )
<0353> 00B7          LPARZ  EQU  >B7               (
<0354> 00B8          CONCZ  EQU  >B8               &          (CONCATENATE)
<0355>               *      EQU  >B9               spare token
<0356> 00BA          ORZ    EQU  >BA               OR
<0357> 00BB          ANDZ   EQU  >BB               AND
<0358> 00BC          XORZ   EQU  >BC               XOR
<0359> 00BD          NOTZ   EQU  >BD               NOT
<0360> 00BE          EQUALZ EQU  >BE               =
<0361> 00BF          LESSZ  EQU  >BF               <
<0362> 00C0          GREATZ EQU  >C0               >
<0363> 00C1          PLUSZ  EQU  >C1               +
<0364> 00C2          MINUSZ EQU  >C2               -
<0365> 00C3          MULTZ  EQU  >C3               *
<0366> 00C4          DIVIZ  EQU  >C4               /
<0367> 00C5          CIRCUZ EQU  >C5               ^
<0368>               *      EQU  >C6               spare token
<0369> 00C7          STRINZ EQU  >C7               QUOTED STRING
<0370> 00C8          UNQSTZ EQU  >C8               UNQUOTED STRING
<0371> 00C8          NUMZ   EQU  >C8               ALSO NUMERICAL STRING
<0372> 00C8          NUMCOZ EQU  >C8               ALSO UNQUOTED STRING
<0373> 00C9          LNZ    EQU  >C9               LINE NUMBER CONSTANT
<0374>               *      EQU  >CA               spare token
<0375> 00CB          ABSZ   EQU  >CB               ABS
<0376> 00CC          ATNZ   EQU  >CC               ATN
<0377> 00CD          COSZ   EQU  >CD               COS
<0378> 00CE          EXPZZ  EQU  >CE               EXP
<0379> 00CF          INTZ   EQU  >CF               INT
<0380> 00D0          LOGZ   EQU  >D0               LOG
<0381> 00D1          SGNZZ  EQU  >D1               SGN
<0382> 00D2          SINZ   EQU  >D2               SIN

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0007 
EQUATES EDIT-359
<0383> 00D3          SQRZ   EQU  >D3               SQR
<0384> 00D4          TANZ   EQU  >D4               TAN
<0385> 00D5          LENZ   EQU  >D5               LEN
<0386> 00D6          CHRZZ  EQU  >D6               CHR$
<0387> 00D7          RNDZ   EQU  >D7               RND
<0388> 00D8          SEGZZ  EQU  >D8               SEG$
<0389> 00D9          POSZ   EQU  >D9               POS
<0390> 00DA          VAL    EQU  >DA               VAL
<0391> 00DB          STRZZ  EQU  >DB               STR$
<0392> 00DC          ASCZ   EQU  >DC               ASC
<0393> 00DD          PIZ    EQU  >DD               PI
<0394> 00DE          RECZ   EQU  >DE               REC
<0395> 00DF          MAXZ   EQU  >DF               MAX
<0396> 00E0          MINZ   EQU  >E0               MIN
<0397> 00E1          RPTZZ  EQU  >E1               RPT$
<0398>                
<0399>               *      EQU  >E2  to >E7
<0400>                
<0401> 00E8          NUMERZ EQU  >E8               NUMERIC
<0402> 00E9          DIGITZ EQU  >E9               DIGIT
<0403> 00EA          UALPHZ EQU  >EA               UALPHA
<0404> 00EB          SIZEZ  EQU  >EB               SIZE
<0405> 00EC          ALLZ   EQU  >EC               ALL
<0406> 00ED          USINGZ EQU  >ED               USING
<0407> 00EE          BEEPZ  EQU  >EE               BEEP
<0408> 00EF          ERASEZ EQU  >EF               ERASE
<0409> 00F0          ATZ    EQU  >F0               AT
<0410> 00F1          BASEZ  EQU  >F1               BASE
<0411>               *      EQU  >F2               spare token (TEMPORARY)
<0412>               *      EQU  >F3               spare token (VARIABLE)
<0413>               *      EQU  >F4               spare token (RELATIVE)
<0414>               *      EQU  >F5               spare token (INTERNAL)
<0415> 00F6          SEQUEZ EQU  >F6               SEQUENTIAL
<0416> 00F7          OUTPUZ EQU  >F7               OUTPUT
<0417> 00F8          UPDATZ EQU  >F8               UPDATE
<0418> 00F9          APPENZ EQU  >F9               APPEND
<0419> 00FA          FIXEDZ EQU  >FA               FIXED
<0420> 00FB          PERMAZ EQU  >FB               PERMANENT
<0421> 00FC          TABZ   EQU  >FC               TAB
<0422> 00FD          NUMBEZ EQU  >FD               #
<0423> 00FE          VALIDZ EQU  >FE               VALIDATE
<0424>               *      EQU  >FF               ILLEGAL VALUE
[0004]               ***********************************************************

TOKEN LNZ >C9 is for LINE NUMBER CONSTANT values range from 1 to 32767

 

RXB could modify a unused TOKEN >CA and be called TOKEN INTEGEZ

 

See XB uses >C8 for UNQUOTED STRING and >C8 for NUMERIC STRING (Floating Point) thus easy to see why strings and floating point are the same thing.

 

>CA INTEGEZ as a token could be defined as -32768 to 32767 and would fit PEEK, POKE, LOAD and LINK perfectly, but also speed up all of XB.

 

 

 

P.S. Just for context >C8 in XB also always has a LENGTH BYTE so if string or floating point thus again slowing XB down.

A INTEGEZ token is just a word >0000 to >FFFF thus much quicker to work with.

Edited by RXB
Link to comment
Share on other sites

Texas Instruments is a CALCULATOR manufacture company and this 100% explains the goofy reason why Floating Point is used for everything despite it being horrid for integer only applications.

Well, it's not really a calculator company only, but the fact that the calculator division got the responsibility for the 99/4 and 99/4A gives the same result. And we have to admit that the calculation accuracy and capability of the TI 99/4A, using floating point, is significantly better than almost every other competing design.

But why they didn't also provide integers, when they have a 16-bit CPU handling 16-bit values naturally, that's a mystery. But looking at the whole VDP RAM only, GPL powered thing, it's obvious that speed wasn't the first thing they were thinking about.

  • Like 2
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...