RXB Posted March 6 Share Posted March 6 RXB 2024 B CALL HEX DOCUMENTS 2 Quote Link to comment https://forums.atariage.com/topic/163627-rxb-rich-extended-basic/page/65/#findComment-5424106 Share on other sites More sharing options...
RXB Posted March 9 Share Posted March 9 RXB 2024C CALL SAMS 1 Quote Link to comment https://forums.atariage.com/topic/163627-rxb-rich-extended-basic/page/65/#findComment-5426324 Share on other sites More sharing options...
MikeV Posted April 2 Share Posted April 2 A copy of the RXB 2024 Reference Guide with navigation links (clickable) for quick referencing. RXB2024.pdf 4 2 Quote Link to comment https://forums.atariage.com/topic/163627-rxb-rich-extended-basic/page/65/#findComment-5441763 Share on other sites More sharing options...
MikeV Posted April 3 Share Posted April 3 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: 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? Quote Link to comment https://forums.atariage.com/topic/163627-rxb-rich-extended-basic/page/65/#findComment-5442409 Share on other sites More sharing options...
RXB Posted April 3 Share Posted April 3 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: 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. 2 Quote Link to comment https://forums.atariage.com/topic/163627-rxb-rich-extended-basic/page/65/#findComment-5442550 Share on other sites More sharing options...
MikeV Posted April 4 Share Posted April 4 18 hours ago, RXB said: 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. That will be great! 2 Quote Link to comment https://forums.atariage.com/topic/163627-rxb-rich-extended-basic/page/65/#findComment-5442956 Share on other sites More sharing options...
RXB Posted May 4 Share Posted May 4 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 **************************************************************************** 2 Quote Link to comment https://forums.atariage.com/topic/163627-rxb-rich-extended-basic/page/65/#findComment-5460437 Share on other sites More sharing options...
Retrospect Posted May 6 Share Posted May 6 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? Quote Link to comment https://forums.atariage.com/topic/163627-rxb-rich-extended-basic/page/65/#findComment-5461706 Share on other sites More sharing options...
senior_falcon Posted May 6 Share Posted May 6 (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 May 7 by senior_falcon 4 Quote Link to comment https://forums.atariage.com/topic/163627-rxb-rich-extended-basic/page/65/#findComment-5461711 Share on other sites More sharing options...
Recommended Posts
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.