Jump to content

Recommended Posts

  • 4 weeks later...
On 3/9/2024 at 6:58 PM, RXB said:

RXB 2024C CALL SAMS

 

 

Hey Rich - saw your RXB SAMS video and the concept is great!

 

As part of RXB SAMS would it be possible to include variable length string support with CALL MOVES to populate arrays, etc? It would provide a significant conservation of conventional memory and be very fast. As I am uncertain of the correct terminology I attach a hex-view below:

image.thumb.png.4a2c559446a53e82bee1ae905a3ad80d.png

This file was made with CALL MOVES AND PSAVE. As the strings are variable length I used a "FIXED" length of 16 bytes as the baseline maximum. As can be seen when the string length is less than the defined length the last byte value is the string length (same as on disk files when the VARIABLE length attribute is declared). These are indicated in squares. This does not occur with fixed length strings that are fully occupied, e.g. a CALL MOVES("$R",64,...) to move a 64 digit CHAR CODE. I do not know if it is RXB that provides the string length byte or the TI operating system?

 

To use the strings I had to convert them as follows:

4990 FOR J=1 TO 20
5000 CALL MOVES("R$",16,Y2,V$):: Q=POS(V$,CHR$(0),1):: V$=SEG$(V$,1,Q-2):: Y2=Y2+16

 

This works, but is slow...

 

An RXB conversion routine would be so much quicker! Imagine all the DATA statements, ARRAYS, etc. loaded with PLOAD and stored in SAMS? (But very fast.) A real memory saver. Is it possible that the RXB CALL MOVES could have a "max string length" value vs only a fixed one, find the string length byte and render the variable string?

 

3 hours ago, MikeV said:

Hey Rich - saw your RXB SAMS video and the concept is great!

 

As part of RXB SAMS would it be possible to include variable length string support with CALL MOVES to populate arrays, etc? It would provide a significant conservation of conventional memory and be very fast. As I am uncertain of the correct terminology I attach a hex-view below:

image.thumb.png.4a2c559446a53e82bee1ae905a3ad80d.png

This file was made with CALL MOVES AND PSAVE. As the strings are variable length I used a "FIXED" length of 16 bytes as the baseline maximum. As can be seen when the string length is less than the defined length the last byte value is the string length (same as on disk files when the VARIABLE length attribute is declared). These are indicated in squares. This does not occur with fixed length strings that are fully occupied, e.g. a CALL MOVES("$R",64,...) to move a 64 digit CHAR CODE. I do not know if it is RXB that provides the string length byte or the TI operating system?

 

To use the strings I had to convert them as follows:

4990 FOR J=1 TO 20
5000 CALL MOVES("R$",16,Y2,V$):: Q=POS(V$,CHR$(0),1):: V$=SEG$(V$,1,Q-2):: Y2=Y2+16

 

This works, but is slow...

 

An RXB conversion routine would be so much quicker! Imagine all the DATA statements, ARRAYS, etc. loaded with PLOAD and stored in SAMS? (But very fast.) A real memory saver. Is it possible that the RXB CALL MOVES could have a "max string length" value vs only a fixed one, find the string length byte and render the variable string?

 

CALL MOVES sets the string length of the string when it makes a new string as it calls a XB GPL ROM routine to make the string with that length.

If you want a set length that is not defined by RXB as normally you would have to pad the length yourself in your program.

Example you can pad each string with a space or some other character in front or at end of that string.

I have done this by using CALL MOVES to make a set of padded string before I put stuff in them:

FOR X=1 TO 20 :: Y$=RPT$(".",10) :: CALL MOVES("$$",20,Y$,T$(X)) :: NEXT X

This would make 20 strings 10 characters long with periods in T$(array)

 

By the way currently working on RXB SAMS that only works with RAM and removes most VDP access slower routines.

Down the line all strings and VDP routines not graphics will be in SAMS RAM.

  • Like 2
  • 1 month later...

Did a comparison of most XB versions:

 


90 ! ROUTINE SET UP SPRITES TEST SO NOT PART OF TIMING ROUTINE
100 CALL CLEAR
110 OPEN #1:"CLOCK"
120 INPUT #1:A$,B$,C$
130 FOR C=1 TO 10000
140 ! ROUTINE INSERTED HERE TO TEST
150 NEXT C
160 INPUT #1:D$,E$,F$
170 PRINT A$,D$:B$,E$,C$,F$
180 END 
*********************************************************************************************
                                        SAMS
   XB       XB3.0   XB3.1      XBGEM   MyarcXB2   RXB   command
---------------------------------------------------------------------------------------------
  11:5      9:10     9:10      3:11      5:6     3:21   CALL CHAR(65,"FFFFFFFF")
2:57:15    34:18     8:36      5:33      6:19    4:42   CALL CHAR(Z$,65) ! LENGTH 64
  11:32     7:19     7:19      4:1       5:14    4:5    CALL CHARPAT(65,Z$)
  32:44    33:6     33:4       1:11:47   5:1     4:8    CALL CHARSET
   3:49     3:29     3:31      3:43      8:48    3:41   CALL CLEAR
   6:25     6:25     4:20      6:24      7:22    6:19   CALL COINC(#1,20,20,8,Z)
   3:0      3:0      2:6       3:0       4:3     3:4    CALL COINC(ALL,Z)
   4:33     4:15     3:7       4:15      5:4     4:24   CALL COLOR(1,2,8)
   3:9      3:9      2:12      3:9       4:6     2:36   CALL DELSPRITE(#1)
   6:22     6:23     5:12      6:22      4:18    5:33   CALL DELSPRITE(ALL)  
   6:5      6:6      4:11      6:6       6:0     6:1    CALL DISTANCE(#1,20,20,Z)
   6:6      3:7      3:6       4:10      5:9     4:2    CALL GCHAR(1,1,Z)
   4:11     3:1      3:0       4:5       5:5     4:17   CALL HCHAR(1,1,65)
4:37:35  4:39:17    21:2       9:31     14:12    7:33   CALL HCHAR(1,1,65,768)
   5:0      3:2      3:3       5:6       6:43    5:7    CALL JOYST(1,X,Y)
   4:37     3:25     2:11      4:38      5:16    5:2    CALL KEY(1,K,S)
   4:4      4:4      3:9       4:4       5:13    4:17   CALL LOCATE(#1,20,20)
   2:17     2:11     2:8       2:14      3:45    2:14   CALL MAGNIFY(1)
   4:44     4:44     3:24      4:44      6:42    4:41   CALL MOTION(#1,20,20)  
   3:8      3:17     2:24      3:17      5:27    3:4    CALL PATTERN(#1,66)
   5:22     5:22     3:14      5:31      5:25    5:9    CALL POSITION(#1,X,Y)
   3:44     2:11     2:12      2:6       4:3     2:17   CALL SCREEN(5)
   5:9      5:8      4:7       5:9       6:30    5:7    CALL SPRITE(#1,65,2,10,10)
   3:55     3.0      3:1       4:5       5:5     4:17   CALL VCHAR(1,1,65)
4:30:22  4:30:41  3:30:27     18:29     18:11   21:3    CALL VCHAR(1,1,65,768)
  10:2      8:13     8:11     10:1       6:18   10:3    DISPLAY AT(9,9):C
  21:10    13:41    12:18     11:49     11:29   12:13   DISPLAY AT(9,9):RND
   8:22     6:43     6:38      8:22      6:17    8:21   DISPLAY AT(9,9):"TEST"
  22:6      6:23     6:24     19:27      3:3    15:15   CALL INIT 
   1:48     2:30     2:30     12:12      3:40    2:9    A=LEN("TEST")
  12:12     5:3      5:3       3:8       7:16    3:9    A=RND
   1:26     1:14     2:46      1:26      3:26    2:34   A=ABS(C)
   5:36     2:36     3:23      5:25      6:12    5:37   A=ATN(1)  
   3:5      2.0      2:2       3:25      5:30    3:7    A$=CHR$(65) 
  13:8     12:11    11:49     13:8      10:2    13:9    A=COS(.5)
  14:27    11:14    10:46     14:27     14:36   14:28   A=EXP(1)
  20:42    16:14    16:11     41:13     20:6    19:12   A=LOG(3.4)
   2:37     2:10     2:8       2:11      4:9     2:42   A=MAX(C,99)
   3:16     2:4      2:2       3:15      4:12    3:11   A=MIN(C,99)
   2:36     1:13     1:2       1:24      3:14    1:23   A=PI
   5:5      4:14     4:16      4:31      6:10    5:1    A=POS("PAN","A",1)
2:17:15     7:13     7:14     17:5      40:31 2:17:9    A$=RPT$("A",255)
   5:27     3:6      3:25     55:25      7:13    5:30   A$=SEG$("TEST",2,3)
   1:27     1:14     1:14      1:26      3:26    1:26   A=SGN(C)
  12:4     11:50     11:3     11:56     15:3    12:4    A=SIN(30)
  11:3      9:34     10:26    11:2      17:28   11:1    A=SQR(C)
   4:19     3:7       2:51     3:41     11:8     4:16   A$=STR$(5)
  44:19    23:13     23:14    25:16     29:16   35:15   A=TAN(.78)
   4:19     3:0       3:1      4:19      4:7     4:12   A=VAL("5")
   1:14     1:22      1:22     1:15      3:15    1:15   DATA 1
   1:14     1:15      1:16     1:8       3:26    1:8    DEF A=C*C
    :51      :44      1:16     1.8       3:26    1:8    DIM A(100)
  14:36    10:52      9:47    13:10     10:7    13:8    PRINT
  13:14     9:23     10:37    14:46     11:9    15:19   DISPLAY
  11:25    12:6      12:4     16:36     12:13   16:35   PRINT C 
  17:9     12:38     13:22    17:10     12:10   17:7    DISPLAY C
  15:2     10:35     10:33    15:2      12:52   15:4    PRINT "TEST"
  15:44    12:51     11:5     16:27     11:11   16:28   DISPLAY "TEST"
   1:12     1:19      1:19     1:12      2:22    1:11   OPTION BASE 1
   4:35     3:24      3:26     3:25      4:24    4:24   CALL PEEK(8192,A)
   5:37     4:3       4:1      2:29      3:21    2:29   RANDOMIZE C  
   8:21     9:43      9:45     9:39      6:5     8:21   CALL SOUND(1,110,30)         
*********************************************************************************************
* RXB NEW COMMANDS TO EXTENDED BASIC
 PRINT    PRINT    PRINT     PRINT    PRINT      7:14   CALL SCROLLUP           {PRINT}
 PRINT C  PRINT C  PRINT C   PRINT C  PRINT C   11:23   CALL SCROLLUP(1,C)      {DISPLAY C}
 DISPLAY  DISPLAY  DISPLAY   DISPLAY  DISPLAY   10:33   CALL SCROLLUP(1,"TEST") {DISPLAY} 
 DISPLAY  DISPLAY  DISPLAY   DISPLAY  DISPLAY    5:6    CALL HPUT(11,11,C)      {DISPLAY AT}
 DISPLAY  DISPLAY  DISPPLAY  DISPLAY  DISPLAY    7:12   CALL HPUT(11,11,RND)    {DISPLAY AT}
 DISPLAY  DISPLAY  DISPPLAY  DISPLAY  DISPLAY    4:29   CALL HPUT(11,11,"TEST") {DISPLAY AT}
  14:17    10:10    10:11     15:42     16:16   11:50   CALL JOYLOCATE(1,X,Y,8,8,#1,RW,CL,K) GOTO 
  15:53    10:20    10:8      15:3      16:1    10:2    CALL JOYMOTION(1,X,Y,#1,9,9,K) GOTO
   7:7      5:11     5:11      7:7      11:3     9:33   CALL ONKEY("ABC",1,K,S) GOTO 1,2,3
   N/A      N/A      N/A       N/A       N/A     7:26   CALL COLLIDE(#1,20,20,8,X,Y)
   N/A      N/A      N/A      10:31      N/A    11:39   CALL MOVES("RR",1024,8192,12288) 
*********************************************************************************************
80 ! JOYLOCATE FOR OTHERS   
90 CALL SPRITE(#1,65,2,20,20) :: XL,YL=20
100 CALL CLEAR
110 OPEN #1:"CLOCK"
120 INPUT #1:A$,B$,C$
130 FOR C=1 TO 10000
140 CALL JOYST(1,X,Y) :: CALL LOCATE(#1,X+XL,Y+YL) :: CALL KEY(1,K,S) 
:: IF K=18 THEN 150
150 NEXT C
160 INPUT #1:D$,E$,F$
170 PRINT A$,D$:B$,E$,C$,F$
180 END
*****************************************************************************
80 ! JOYMOTION FOR OTHERS
90 CALL SPRITE(#1,65,2,20,20) :: XL,YL=20
100 CALL CLEAR
110 OPEN #1:"CLOCK"
120 INPUT #1:A$,B$,C$
130 FOR C=1 TO 10000
140 CALL JOYST(1,X,Y) :: CALL MOTION(#1,X*9,Y*9) :: CALL KEY(1,K,S) 
:: IF K=18 THEN 150
150 NEXT C
160 INPUT #1:D$,E$,F$
170 PRINT A$,D$:B$,E$,C$,F$
180 END
****************************************************************************
80 ! ONKEY FOR OTHERS
90 CALL SPRITE(#1,65,2,20,20) :: XL,YL=20
100 CALL CLEAR
110 OPEN #1:"CLOCK"
120 INPUT #1:A$,B$,C$
130 FOR C=1 TO 10000
140 CALL KEY(1,K,S) :: IF K=65 THEN 150 ELSE IF K=66 THEN 150 ELSE IF 
K=67 THEN 150 ELSE 150
150 NEXT C
160 INPUT #1:D$,E$,F$
170 PRINT A$,D$:B$,E$,C$,F$
180 END
****************************************************************************

 

  • Like 2

There are a couple or a few here that I would raise question to ... Now, not that I've tested this but the timings seem to be extraordinarily longer for some functions ....

A=LEN("TEST") ... Xb at 1:48 and XB2.9GEM at 12:12 
A$=RPT$("A$",255) Xb at 2:17:15 and XB2.9GEM at 17:5
A$=SEG$("TEST",2,3) Xb at 5:27 and XB2.9GEM at 55:25

You gotta admit that's a little odd?

Posted (edited)
19 hours ago, Retrospect said:

There are a couple or a few here that I would raise question to ... Now, not that I've tested this but the timings seem to be extraordinarily longer for some functions ....

A=LEN("TEST") ... Xb at 1:48 and XB2.9GEM at 12:12 
A$=RPT$("A$",255) Xb at 2:17:15 and XB2.9GEM at 17:5
A$=SEG$("TEST",2,3) Xb at 5:27 and XB2.9GEM at 55:25

You gotta admit that's a little odd?

Yeah, I thought that was a little odd too. When I tested them they took the same time in XB 2.9 G.E.M. and standard XB.

 

I think what happened is a simple arithmetic error. Line 170 prints the starting time and ending time in hours, minutes, seconds. If you do the math wrong then the elapsed time would be wrong. With all the testing that was done, it is easy to see how that might happen.

 

You could replace line 170 with these lines:


170 H=VAL(SEG$(F$,1,2))-VAL(SEG$(C$,1,2))
180 M=VAL(SEG$(F$,4,2))-VAL(SEG$(C$,4,2))
190 S=VAL(SEG$(F$,7,2))-VAL(SEG$(C$,7,2))
200 IF S<0 THEN S=S+60 :: M=M-1
210 IF M<0 THEN M=M+60 :: H=H-1
220 IF H<0 THEN H=H+24
230 PRINT STR$(H)&"h "&STR$(M)&"m "&STR$(S)&"s"

 

It's more complicated, but now all the arithmetic is done for you, and you can be confident that the elapsed time is correct.

 

(Edit) A$=SEG$("TEST",2,3) Xb at 5:27 and XB2.9GEM at 55:25

I think the error here was not bad arithmetic, but just a transcription error. Probably the 5 was pressed twice and it wasn't noticed.

A$=RPT$("A$",255) Xb at 2:17:15 and XB2.9GEM at 17:5

Here I think that the 2 was not pressed and it wasn't noticed.

Edited by senior_falcon
  • Like 4

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...