+retroclouds Posted January 8, 2023 Author Share Posted January 8, 2023 Working on Stevie 1.4A, now has the possibility to pick a font. It has 5 fonts built-in. Thinking about the possibility to load a font from disk, e.g. font saved in XB Gem 2.9 @wolhess Guess this is something you requested in 2020. FWIW you can always load the latest BETA binary for FinalGrom from GitHub (stevie.bin for 30rows js99er, stevie24 for 24rows classic99): https://github.com/FilipVanVooren/stevie/tree/master/build/bin 6 1 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5186689 Share on other sites More sharing options...
+retroclouds Posted February 12, 2023 Author Share Posted February 12, 2023 Here's a demo of the new Master Catalog in Stevie 1.4 In Stevie everything is a file. So I took the idea to have the concept of a "Master Catalog". It's basically just a plain DV80 file, but Stevie behaves a bit differently when loading a Master Catalog. - You generate a Master Catalog file on TIPI itself, e.g. via bash script. But you can do the same on the TI-99/4a itself in TI-Basic or (compiled) TI-Extended Basic, that's up to you. - If you jump between files and reopen the Master Catalog, it will jump to its previous position in the Master Catalog. - Stevie scans the current line for a filename. I'm using that functionality in the Master Catalog to open the file the cursor is on. I goof up at the end of the demo, but here it is anyway: Here's the bash script I used on the TIPI to create the Master Catalog #!/usr/bin/env bash # Catalog starts on line 5 line=5 # Clear master catalog rm -f MASTCAT l="------------------------------------------------------------------|-------|-----" h="Path/Filename |Size(b)| Line" # Create catalog files of subdirectories echo "# Created: $(date)" >MASTCAT echo -e "$l\n$h\n$l" >>MASTCAT for fname in $(find SRC -print | sort); do # TIPI file path for accessing file fpath="TIPI.${fname//\//.}" if [ -d "$fname" ]; then # It's a directory, skip echo -n "."; else # Trim filename if [ ${#fpath} -gt 66 ]; then fpath="${fpath:0:64}.." fi # Skip hidden sector files if [[ $fname != *".sectors"* ]]; then # Print catalog entry printf "%-66s|%6d |%4d\n" \ "${fpath}" \ "$(stat -c %s ${fname})" \ $line >>MASTCAT ((line=line+1)) fi fi done echo "$l" >>MASTCAT echo '# End of master catalog' >>MASTCAT echo ' Done!' # List master catalog content cat MASTCAT exit 0 9 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5207912 Share on other sites More sharing options...
+retroclouds Posted March 5, 2023 Author Share Posted March 5, 2023 I've released Stevie 1.4H which -among other things- has the Master Catalog functionality included. Get the binaries in the main thread. 5 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5220499 Share on other sites More sharing options...
+retroclouds Posted March 5, 2023 Author Share Posted March 5, 2023 I'll be taking a break on Stevie development for the next few weeks/months. I've got to focus on work related stuff. There's a lot of "new" tech to master and I have to balance my spare (hobby) time. 5 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5220501 Share on other sites More sharing options...
+Vorticon Posted March 22, 2023 Share Posted March 22, 2023 How does Stevie terminate each line? Is it with a CR? I tried using a Stevie test source file with the RXB CALL USER function which expects a CR at the end of each line, and it's not seeing that. Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5229123 Share on other sites More sharing options...
+retroclouds Posted March 22, 2023 Author Share Posted March 22, 2023 8 hours ago, Vorticon said: How does Stevie terminate each line? Is it with a CR? I tried using a Stevie test source file with the RXB CALL USER function which expects a CR at the end of each line, and it's not seeing that. Stevie currently does not terminate each line with a CR or any other control character. As each line is written as an own DV80 record anyway, why would it be necessary to write an additional control character to terminate a line, be it CR or others ? But I'm open for discussion, if it helps improve compatibility with other software. If I was to change the behaviour, I would make it optional in Stevie. 2 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5229152 Share on other sites More sharing options...
+Vorticon Posted March 22, 2023 Share Posted March 22, 2023 2 hours ago, retroclouds said: Stevie currently does not terminate each line with a CR or any other control character. As each line is written as an own DV80 record anyway, why would it be necessary to write an additional control character to terminate a line, be it CR or others ? But I'm open for discussion, if it helps improve compatibility with other software. If I was to change the behaviour, I would make it optional in Stevie. I'm not necessarily asking for that change. Unfortunately, the RXB CALL USER function which can take a DV80 text file and tokenize it requires that lines be terminated by a CR. Outside of TIW, I'm not even sure what other editor terminates lines with a CR. I'll have to check Preditor and see. Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5229214 Share on other sites More sharing options...
+Vorticon Posted March 22, 2023 Share Posted March 22, 2023 I just checked Preditor and it too generates DV80 files that do not work with the RXB CALL USER, thus likely not terminated with a CR as well... Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5229238 Share on other sites More sharing options...
+retroclouds Posted March 22, 2023 Author Share Posted March 22, 2023 40 minutes ago, Vorticon said: I'm not necessarily asking for that change. Unfortunately, the RXB CALL USER function which can take a DV80 text file and tokenize it requires that lines be terminated by a CR. Outside of TIW, I'm not even sure what other editor terminates lines with a CR. I'll have to check Preditor and see. I think it's more of an issue in RXB then. Either way, I'll explore the option to add line termination character(s). Might come in handy and shouldn't be too much work. Probably add the option to strip them away on file load/insert as well. 3 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5229245 Share on other sites More sharing options...
+Vorticon Posted March 22, 2023 Share Posted March 22, 2023 Sounds like a good plan. As you said this might come in handy for some future application. 1 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5229265 Share on other sites More sharing options...
+Vorticon Posted March 29, 2023 Share Posted March 29, 2023 I noticed that after a save operation, the cursor jumps to the top of the page instead of returning to its original position. Would be better if it did the latter. Any plans on implementing key repeats by any chance? Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5233080 Share on other sites More sharing options...
+retroclouds Posted March 29, 2023 Author Share Posted March 29, 2023 1 hour ago, Vorticon said: I noticed that after a save operation, the cursor jumps to the top of the page instead of returning to its original position. Would be better if it did the latter. Any plans on implementing key repeats by any chance? I’ll look into the cursor jump issue, shouldn’t be too hard to implement. Key repeat got removed when I switched to KSCAN. With KSCAN it is not easy to implement auto-repeat if I recall correctly. I know it feels kinda weird when trying to repeat keys, but have to say it is not high on my priority list. It is quite hard on the TI-99/4a to get a reliable, compatible keyboard scanning routine that works well in emulators as well as on the real deal. As my spare time is very limited, I prefer now focussing on new, interesting features, so this one will have to go to the back burner for a while. 2 1 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5233131 Share on other sites More sharing options...
+retroclouds Posted April 11, 2023 Author Share Posted April 11, 2023 (edited) On 3/22/2023 at 3:12 PM, retroclouds said: I think it's more of an issue in RXB then. Either way, I'll explore the option to add line termination character(s). Might come in handy and shouldn't be too much work. Probably add the option to strip them away on file load/insert as well. Added the possibility to toggle on/off line termination character in Stevie 1.5.2 By default this setting is off. I will add an option to strip line termination characters on file reading as well (but that will have to wait for now). Did the CALL USER test in RXB and works as expected (although I do think @RXB should fix that line termination character issue in RXB). Edited April 11, 2023 by retroclouds 2 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5239027 Share on other sites More sharing options...
RXB Posted April 11, 2023 Share Posted April 11, 2023 On 3/22/2023 at 6:30 AM, Vorticon said: I'm not necessarily asking for that change. Unfortunately, the RXB CALL USER function which can take a DV80 text file and tokenize it requires that lines be terminated by a CR. Outside of TIW, I'm not even sure what other editor terminates lines with a CR. I'll have to check Preditor and see. RXB uses the DV80 file KEY SCAN ROUTINE IN XB to input each line. It works exactly like you typed in the line yourself. That is the reason you need a ENTER (or Carriage Return) as they are both CHR$(13) to tell XB you just entered a line. How I do it is use a PC text editor to make a file, save it to XB as a DV80 file then I wrote a XB program that turns it into a usable USER FILE for RXB. 100 ON ERROR 170 110 OPEN #1:"DSK6.TXT80",INPUT 120 OPEN #2:"DSK6.USER80",OUTPUT 130 LINPUT #1:Z$ 140 IF LEN(Z$)=80 THEN X$=X$&Z$ :: GOTO 130 150 IF LEN(Z$)<80 THEN PRINT #2:X$&Z$&CHR$(13) 160 X$,Z$="" :: GOTO 130 170 CALL CLSALL 180 END This is pretty fast and easy to make PC Text Files into RXB USER files. There is no limit in size of the USER files you can make or is there a limit on what you can do depending on what devices you have installed on the TI99/4A. If you can type it RXB USER can do it. This is why I called USER a batch file system even better then any other DOS utility as you can even run other programs using USER that loads other programs. Something no DOS utility can do. Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5239107 Share on other sites More sharing options...
RXB Posted April 11, 2023 Share Posted April 11, 2023 4 hours ago, retroclouds said: Added the possibility to toggle on/off line termination character in Stevie 1.5.2 By default this setting is off. I will add an option to strip line termination characters on file reading as well (but that will have to wait for now). Did the CALL USER test in RXB and works as expected (although I do think @RXB should fix that line termination character issue in RXB). The problem is you do not what CALL USER is used for in first place. Please see above answer. 1 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5239110 Share on other sites More sharing options...
+retroclouds Posted April 12, 2023 Author Share Posted April 12, 2023 (edited) 6 hours ago, RXB said: RXB uses the DV80 file KEY SCAN ROUTINE IN XB to input each line. It works exactly like you typed in the line yourself. That is the reason you need a ENTER (or Carriage Return) as they are both CHR$(13) to tell XB you just entered a line. How I do it is use a PC text editor to make a file, save it to XB as a DV80 file then I wrote a XB program that turns it into a usable USER FILE for RXB. 100 ON ERROR 170 110 OPEN #1:"DSK6.TXT80",INPUT 120 OPEN #2:"DSK6.USER80",OUTPUT 130 LINPUT #1:Z$ 140 IF LEN(Z$)=80 THEN X$=X$&Z$ :: GOTO 130 150 IF LEN(Z$)<80 THEN PRINT #2:X$&Z$&CHR$(13) 160 X$,Z$="" :: GOTO 130 170 CALL CLSALL 180 END This is pretty fast and easy to make PC Text Files into RXB USER files. There is no limit in size of the USER files you can make or is there a limit on what you can do depending on what devices you have installed on the TI99/4A. If you can type it RXB USER can do it. This is why I called USER a batch file system even better then any other DOS utility as you can even run other programs using USER that loads other programs. Something no DOS utility can do. Got it. Perhaps for the use case where someone is pasting RXB source code only, it might be good to have a switch that automatically adds a line termination character. It’s no biggie for me as Stevie now has the possiblity to do that for you now. But it would increase compatibility with other text editors like PReditor, etc. Perhaps something like CALL USER(“DSK1.MYBATCH”,13) would work, or some other character(s) you might want to add (if you’d like to make it more general). That way the input would need less preparation. Just my 2 cents. Anyway, I think the topic should be further discussed in the RXB thread, if you’d consider following up on this. Edited April 12, 2023 by retroclouds 1 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5239223 Share on other sites More sharing options...
RXB Posted April 12, 2023 Share Posted April 12, 2023 1 minute ago, retroclouds said: Got it. Perhaps for the use case where someone is pasting RXB source code only, it might be good to have a switch that automatically adds a line termination character. It’s no biggie for me as Stevie now has the possiblity to do that for you now. But it would increase compatibility with other text editors like PReditor, etc. Perhaps something like CALL USER(“DSK1.MYBATCH”,13) would work, or some other character(s) you might want to add (if you’d like to make it more general). That way the input would need less preparation. Just my 2 cents. Anyway, I think the topic should be further discussed in the RXB thread, if you’d consider following up on this. Ok how would it know where to put the ENTER (CR)? See this is not a PC that goes line by line as the TI99/4A only accepts a single key at a time. Per you thinking I would need a program to examine ever single line and look for where to put the ENTER (CR)"? Where is the buffer in XB going to be for this magical function? Also this would really slow down RXB to a crawl! Here is the source code in XB that makes USER work at the KEY SCAN ROUTINE IN XB: <0050> 6AA8 C0,B0,61 READZ1 EX @VARV,V*ARG5 By alternating between the 6AAB 01 <0051> * normal character and the <0052> * cursor, we make the cursor <0053> 6AAC 86,79 CLR @TIMER blink <0054> * RXB PATCH CODE FOR USER ***** <0055> * G6AAE SCAN Scan for a character <0056> * RAND 99 Force randomize to be rando <0057> 6AAE 06,7D,2E G6AAE CALL DUSER USER from EDIT mode <0058> 6AB1 6A,CC BS READZ2 Found one!!!! <0059> 6AB3 90,00 G6AB3 INC @VAR0 Increment the auto-repeat cou <0060> 6AB5 D6,75,FF CEQ >FF,@RKEY It is an old key <0061> 6AB8 6A,C5 BS G6AC5 <0062> 6ABA CA,00,FE CHE >FE,@VAR0 Hold old key for a while <0063> 6ABD 4A,C5 BR G6AC5 <0064> 6ABF A6,00,1E SUB 30,@VAR0 Control repeat rate <0065> 6AC2 05,6A,CE B READZ5 <0066> 6AC5 C6,79,10 G6AC5 CH >10,@TIMER Time next character switch <0067> 6AC8 4A,AE BR G6AAE <0068> 6ACA 4A,A8 BR READZ1 Restart character blink cycle * farther down the line... <0062> ********************************* <0063> * RXB USER <0064> * <0065> 7D2E D7,A8,C2 DUSER DCEQ >0900,V@>08C2 PAB there? 7D31 09,00 <0066> 7D33 5D,A0 BR NOUSER No <0067> 7D35 D6,A8,C0 CEQ >02,V@>08C0 READ code? 7D38 02 <0068> 7D39 7D,64 BS RUSER READ file <0069> 7D3B 06,7D,7A CALL UDSR OPEN <0070> 7D3E 00 BYTE >00 <0071> 7D3F 7D,AF BS USEERR <0072> 7D41 BC,56,A8 ST V@>08C1,@>8356 7D44 C1 <0073> 7D45 E6,56,05 SRL 5,@>8356 <0074> 7D48 8E,56 CZ @>8356 <0075> 7D4A 5D,AF BR USEERR <0076> 7D4C BF,20,02 DST NLNADD,@VARW Reset screen address 7D4F E2 <0077> 7D50 87,A9,56 READLP DCLR V@>0956 Clear counter <0078> 7D53 06,7D,7A CALL UDSR READ <0079> 7D56 02 BYTE >02 <0080> 7D57 7D,99 BS CUSER <0081> 7D59 BC,56,A8 ST V@>08C1,@>8356 7D5C C1 <0082> 7D5D E6,56,05 SRL 5,@>8356 <0083> 7D60 8E,56 CZ @>8356 <0084> 7D62 5D,99 BR CUSER <0085> 7D64 BD,76,A9 RUSER DST V@>0956,@>8376 Get counter 7D67 56 <0086> 7D68 D4,A8,C5 CEQ @>8377,V@>08C5 Counter= # bytes 7D6B 77 <0087> 7D6C 7D,50 BS READLP yes <0088> 7D6E 35,00,01 MOVE 1,V@>0900(@>8376),@RKEY 7D71 75,E9,00 7D74 76 <0089> 7D75 91,A9,56 DINC V@>0956 Counter+1 99/4 GPL-ASSEMBLER (Pass 3) correct PAGE 0069 EDIT-359 <0090> 7D78 5D,C1 BR USERTN done <0091> 7D7A 35,00,1E UDSR MOVE 30,@FAC,V@>03C0 Save FAC 7D7D A3,C0,4A <0092> 7D80 88,56 FETCH @>8356 Get opcode <0093> 7D82 BC,A8,C0 ST @>8356,V@>08C0 7D85 56 <0094> 7D86 BE,A8,C1 ST >14,V@>08C1 File type 7D89 14 <0095> 7D8A BF,56,08 DST >08C9,@>8356 7D8D C9 <0096> 7D8E 06,00,10 CALL LINK <0097> 7D91 08 BYTE >08 <0098> 7D92 35,00,1E MOVE 30,V@>03C0,@FAC Restore FAC 7D95 4A,A3,C0 <0099> 7D98 01 RTNC <0100> 7D99 06,7D,7A CUSER CALL UDSR CLOSE <0101> 7D9C 01 BYTE >01 <0102> 7D9D 06,7D,A4 CALL CLRUSR Clear USER PAB <0103> 7DA0 03 NOUSER SCAN <0104> 7DA1 02,63 RAND 99 <0105> 7DA3 01 RTNC <0106> 7DA4 86,A8,C0 CLRUSR CLR V@>08C0 <0107> 7DA7 35,00,50 MOVE 80,V@>08C0,V@>08C1 7DAA A8,C1,A8 7DAD C0 <0108> 7DAE 00 RTN <0109> 7DAF 06,7D,A4 USEERR CALL CLRUSR <0110> 7DB2 31,00,0E MOVE 14,G@ERRUSE,V@>02E2 7DB5 A2,E2,7E 7DB8 06 <0111> 7DB9 0F,83 XML SCROLL <0112> 7DBB BE,75,0D ST >0D,@RKEY <0113> 7DBE 06,00,36 CALL TONE2 <0114> 7DC1 D4,00,00 USERTN CEQ @VAR0,@VAR0 <0115> 7DC4 01 RTNC Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5239226 Share on other sites More sharing options...
+retroclouds Posted April 12, 2023 Author Share Posted April 12, 2023 Not sure how reading a DV80 file in GPL works and how the RXB code is structured. Looking at your code I would expect something like that to be possible in the RUSER routine. Before, I was under the impression that as each line is in it’s own DV80 record anyway, you have a routine that opens the file and loops over these DV80 records,feeding it character by character to the XB key scan routine. In that case, a line termination character could for example be injected when going to the next DV80 record. But again, if that is not the case it is no issue for me, as it was easy enough to add the line termination in Stevie. Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5239235 Share on other sites More sharing options...
RXB Posted April 12, 2023 Share Posted April 12, 2023 2 hours ago, retroclouds said: Not sure how reading a DV80 file in GPL works and how the RXB code is structured. Looking at your code I would expect something like that to be possible in the RUSER routine. Before, I was under the impression that as each line is in it’s own DV80 record anyway, you have a routine that opens the file and loops over these DV80 records,feeding it character by character to the XB key scan routine. In that case, a line termination character could for example be injected when going to the next DV80 record. But again, if that is not the case it is no issue for me, as it was easy enough to add the line termination in Stevie. Yea RXB CALL USER works exactly like you type it in by hand, but instead uses a DV80 files. You can even chain these DV80 files so at the end of a USER DV80 file it chains to another USER DV80 file and another endlessly. The advantage of this is RXB can run hundreds of XB Programs or load hundreds of lower 8K files and use them without a reboot. It can also load SAMS many times even up to 20 times of 1Meg if need be, but of course that would be a huge DV80 file or multiple DV80 files. I have a Youtube of when I showed at Chicago Fair running 14 XB programs and each loaded a different lower 8K support routines. Some of these was STAR, TSHELL, HOTBUG, XBPLOT, XBRAMDISK, TRACKLOAD, REFERENCE, NAMECHANGE, DATAPRESS, COMPRESS and more... CALL USER in RXB was originally created back in 1999 so it was way ahead of it's time. The original Chicago Demo was in 2000 or 2001. In Classic99 or using a Hard Drive this is not an issue, which was the original intent of RXB CALL USER to be almost unlimited. RXB CALL USER is designed to use the REDO buffer (>08C0) as the DV80 VDP buffer for file access moving around VDP pointers will have no effect on it. Can STEVIE do all the things RXB CALL USER can do? Spoiler ! COPY this file to a empty DISK 2 or 3, named "BATCH" then type: ! CALL USER("DSK1.BATCH") ! Print out a copy to follow ! along with the program ! PRESS ANY KEY CALL KEY("",5,K,S) NEW ! As you can see RXB KEY ! has been modified to ! accept empty strings ! PRESS ANY KEY CALL KEY("",5,K,S) NEW CALL QUITON ! To follow along with this ! demo print it out first ! Demo creates XB programs ! PRESS ANY KEY TO CONTINUE ! PRESS QUIT TO EXIT USER CALL KEY("",5,K,S) NEW ! RXB CALL KEY UPDATED ! Normal XB split keyboard CALL KEY(1,A,X) :: CALL KEY(2,B,Y) ! RXB UPDATE split keyboard CALL KEY(1,A,X,2,B,Y) ! See no double Colon needed ! or RXB saves typing ! (HINT: press space bar) CALL KEY(" ",5,K,S) NEW ! RXB ADDS A STRING CHECK ! (HINT: press Y N y n) CALL KEY("YyNn",5,K,S) ! (HINT: press a number) CALL KEY("1234567890",5,K,S) ! (HINT: press ENTER) CALL KEY(CHR$(13),5,K,S) ! (HINT: press a symbol) V$="`~!@#$%^&*()-_=+[]\{}|" CALL KEY(V$,5,K,S) ! Much less XB code in RXB ! than in normal XB to do ! same thing CALL KEY("",5,K,S) NEW 100 ! Normal XB CALL KEY routine vs RXBONKEY 110 CALL CLEAR 120 PRINT "XB CHOOSE A KEY:":"Yes, No, Maybe, End" 130 CALL KEY(3,K,S) 140 IF K=89 THEN PRINT "YES" :: GOTO 130 150 IF K=78 THEN PRINT "NO" :: GOTO 130 160 IF K=77 THEN PRINT "MAYBE" :: GOTO 130 170 IF K=69 THEN PRINT "END" :: GOTO 190 180 GOTO 130 190 ! RXB CALL ONKEY routine 200 ! RXB CALL ONKEY 210 CALL CLEAR 220 PRINT "RXB CHOOSE A KEY:":"Yes, No, Maybe, End" 230 CALL ONKEY("YNME",3,K,S)GOTO 250,260,280,280 240 GOTO 230 250 PRINT "Yes!" :: GOTO 230 260 PRINT "Nn!" :: GOTO 230 270 PRINT "Maybe" :: GOTO 230 280 PRINT "End!" SAVE DSK1.RXBONKEY,IV254 NEW ! RXB can save files in Internal Format on most XB programs but the catch is must be over 288 bytes in size thus converted to IV254 ! XB program are normally Program Image format so can be confused with normally Assembly Language Program files ! RXB fixed this so you can save programs in Internal Variable 254 format CALL KEY("",5,K,S) NEW ! This is done by how you save those programs EXAMPLE: ! SAVE DSK1.PRGMNAME,IV254 ! See the comma and IV254? CALL KEY("",5,K,S) NEW ! RXB can save most files inINTERNAL VARIABLE 254 formatinstead of PROGRAM format ! RXB makes cataloging filesbetter for you to use as PROGRAM format is confused with Assembly Programs often, so RXB fixed this! ! Tack a comma and IV254 to change from XB Program Image to IV254 format ! EXAMPLE: SAVE "DSK1.IV-Format",IV254 CALL KEY("",5,K,S) NEW ! See above comma and IV254 this is an added RXB option ! Now if the XB program is smaller then 2 sectors it will be saved in program image format instead the reason is 254 filler bytes waste space CALL KEY("",5,K,S) NEW 1 ! MERGE TO SHOW ADDRESS AND LINE SIZE OF PROGRAMS 2 CALL CLEAR :: PRINT:"Output to Device? (Y/N)" :: CALL KEY("YN",3,K,S) :: IF K=89 THEN INPUT "DEVICE:":Z$ :: OPEN #1:Z$,OUTPUT :: P=1 3 CALL CLEAR :: CALL PEEK(-31952,A,B,C,D) :: A=A*256+B-65536 :: C=C*256+D-65536 :: PRINT #P:" PROGRAM INFORMATION": :"Line Number Table" :: CALL HEX(A,A$,C,C$) 4 PRINT #P: :"Start Address ";A$:"End Address ";C$: : :"Line Bytes Start":"Number Used Address":"------ ----- -------" 5 FOR I=C-3 TO A STEP-4 :: CALL PEEK(I,B,D,E,F) :: B=B*256+D :: E=E*256+F-65536 :: CALL PEEK(E-1,D) :: D=D+5 :: T=T+D :: CALL HEX(E,E$) 6 PRINT #P,USING "##### ### ######":B,D,E$ :: IF E THEN CALL SCREEN(6) :: GOSUB 8 7 NEXT I :: A=(A-C-1)/-4 :: PRINT #P: : :TAB(8);"Total Bytes =";T:" Number of lines =";A:"Average Bytes/Line =";INT(T/A) :: STOP 8 IF Z$="" THEN CALL KEY("",3,D,E) :: CALL SCREEN(8) :: RETURN ELSE RETURN SAVE "DSK1.LINESHOW",MERGE CALL KEY("",5,K,S) NEW 100 ! CHAR HAS BEEN MODIFIEDIN RXB TO REPEAT AFTER A COMMA 110 CALL CHAR(65,"FF00FFEE00FF8899") :: CALL CHAR(66,"454567656895439")! NORMAL XB 120 ! 130 CALL CHAR(65,"FF00FFEE00FF8899",66,"454567656895439")! RXB CALL CHAR 140 ! 150 CALL CHAR(ALL,"FFEEDDCCBBAA0099")! RXB ADDED ALL SAVE DSK1.CHAR,IV254 NEW 100 ! HCHAR RXB VERSION HAS ADDED A AUTOREPEAT AFTER A COMMA 110 CALL HCHAR(3,4,44,4) :: CALL HCHAR(6,8,47,8) :: CALL HCHAR(11,14,53,9) :: CALL HCHAR(20,8,77,11)! XB VERSION 120 CALL HCHAR(3,4,44,4,6,8,47,8,11,14,53,9,20,8,77,11)! THIS IS RXB VERSION SAVE DSK1.HCHAR,IV254 NEW 100 ! GHCAR RXB VERSION HAS ADDED A AUTOREPEAT AFTER A COMMA 110 CALL GCHAR(3,4,A) :: CALL GCHAR(6,8,B) :: CALL GCHAR(11,14,C) :: CALL GCHAR(20,8,D)! XB VERSION 120 CALL GCHAR(3,4,A,6,8,B,11,14,C,20,8,D)! RXB VERSION SAVE DSK1.GCHAR,IV254 NEW 100 ! HEX IS A RXB DECIMAL TO HEX CONVERTER FOR ADDRESSIN TI 110 ! SEE THE HEXDECBIN PGM 120 FOR D=-32767 TO 32767 130 CALL HEX(D,H$) 140 PRINT D,H$ 150 NEXT D SAVE DSK1.HEX,IV254 NEW 100 ! HPUT IS A RXB PROGRAM THAT TAKES A STRING VARIABLEAND PUTS IT ON THE SCREEN 105 CALL CLEAR 110 CALL HCHAR(9,9,44,3,9,12,45,3,9,15,46,3,9,18,47,3) ! RXB HCHAR 120 X$=",,,---...///" :: CALL HPUT(3,9,X$) ! HPUT PUTS AT 3,9 X$ ON THE SCREEN 130 GOTO 130 SAVE DSK1.HPUT,IV254 NEW 100 ! HGET IS A RXB PROGRAM THAT GETS A STRING OFF THE SCREEN AND PUTS IT INTO A STRING VARIBLE 110 CALL GCHAR(3,9,A,3,10,B,3,11,C,3,12,D)! RXB GCHAR 120 CALL HGET(3,9,4,X$)! HGET 4 CHARACTERS AT 3,9 ANDPUTS THEM INTO X$ SAVE DSK1.HGET,IV254 NEW 100 ! INIT IN RXB DOES NOT HAVE TO BE USED BEFORE LINK OR LOAD 110 CALL INIT! FIXED INIT AS IT LOADED TO MUCH UNUSED DATA IN LOWER 8K 120 ! ALSO THIS WAS NOTED IN THE ORGINAL XB SOURCE CODE I HAVE FROM TI SAVE DSK1.INIT,IV254 NEW 100 ! PEEKG IS A RXB COMMANDFOR PEEKING GRAM/GROM 110 CALL PEEKG(24576,X)! PEEK GRAM/GROM AT >6000 SAVE DSK1.PEEKG,IV254 NEW 100 ! PEEKV IS A RXB COMMANDFOR PEEKING VDP 110 FOR X=16370 TO 16383 120 CALL PEEKV(X,Y)! PEEK VDP AT X AND PUT INTO Y 130 PRINT X,CHR$(Y);Y 140 NEXT X SAVE DSK1.PEEKV,IV254 NEW 100 ! POKEG IS A RXB COMMANDFOR PUTTING VALUES INTO GRAM 120 CALL POKEG(-8,22)! PUT 22 >16 AT ADDRESS -8 >FFF8 IN GRAM SAVE DSK1.POKEG,IV254 NEW 100 ! POKER IS A RXB COMMANDFOR PUTTING VALUES INTO THE VDP REGISTERS 0 TO 7 110 CALL POKER(7,244,1,240)! SET RXB TO TEXT MODE 120 FOR D=0 TO 1E2 :: NEXT D 130 CALL POKER(1,232)! SET RXB TO MULTI COLOR MODE 140 FOR D=0 TO 1E2 :: NEXT D 150 CALL POKER(0,2,1,2)! SET RXB TO BIT MAP MODE 160 FOR D=0 TO 1E2 :: NEXT D 170 CALL POKER(0,224,0,32)! RXB NORMAL MODE SAVE DSK1.POKER,IV254 NEW 100 ! POKEV IS A RXB COMMANDFOR PUTTING VALUES INTO VDP 120 CALL POKEV(512,65+96)! PUT CHARACTER A AT ADDRESS 512 (32*16) ON SCREEN 130 ! A BIAS OF 96 MUST BE ADDED TO CHARACTERS WHEN PUTON SCREEN SAVE DSK1.POKEV,IV254 NEW ! RXB also has a catalog routine CALL CAT(1) or ! CALL CAT("DSK1.") or CALL CAT(49) this would be char 1 in ASCII ! RXB is smarter then most other XB versions to catalogdrives ! RAMDISK can use CALL CAT("DSKA.") or CALL CAT(65) or CALL CAT(A) CALL KEY("",5,K,S) NEW CALL CAT(49) ! That was using CALL CAT(49) character 1 in ASCII ! Notice the LINESHOW 4 sectors long & MERGE format. CALL KEY("",5,K,S) NEW ! RXB CALL JOYST UPDATED ! NORMAL XB CALL JOYST(1,A,B) :: CALL JOYST(2,C,D) ! RXB UPDATE less typing CALL JOYST(1,A,B,2,C,D) CALL KEY("",5,K,S) NEW ! JOYLOCATE and JOYMOTION ! JOYLOCATE is like you combined ! JOYST+LOCATE+IF key THEN LINE NUMBER ! JOYMOTION is like you combined ! JOYST+MOTION+IF key THEN LINE NUMBER ! (way faster then normal XB response times) CALL KEY("",5,K,S) NEW ! RXB CALL COLOR UPDATED ! NORMAL XB FOR L=0 TO 14 :: CALL COLOR(L,2,11) :: NEXT L ! RXB COLOR UPDATE CALL COLOR(ALL,2,11) ! RXB is much faster CALL KEY("",5,K,S) NEW ! RXB CALL GCHAR UPDATED ! NORMAL XB CALL GCHAR(22,3,A) :: CALL GCHAR(22,4,B) :: CALL GCHAR(22,5,C) ! RXB GCHAR UPDATE CALL GCHAR(22,3,A,22,4,B,22,5,C) ! As you can see saves bytesand much faster CALL KEY("",5,K,S) NEW ! RXB has HGET like GCHAR but unlike multiple GCHAR only 1 character at a time ! RXB has a huge advantage for saving program space and making faster programs CALL HGET(23,1,14,X$) CALL VGET(21,3,4,Y$) ! The two lines above would take many lines of GCHAR to do same thing and slower too CALL KEY("",5,K,S) PRINT X$:Y$ ! HGET & VGET are way betterthen GCHAR to use obviously CALL KEY("",5,K,S) NEW ! RXB CALL HCHAR UPDATED ALSO VCHAR UPDATED ! NORMAL XB CALL HCHAR(10,25,33,5) :: CALL HCHAR(11,25,33,6) :: CALL HCHAR(12,25,33,7) ! RXB UPDATE CALL HCHAR(18,25,33,5,19,25,33,6,20,25,33,7) ! NOTICE RXB version must have number of characters to repeat or errors out CALL KEY("",5,K,S) NEW ! RXB has HPUT like HCHAR & VCHAR but like mulitple ones in a row CALL KEY("",5,K,S) NEW CALL HPUT(15,1,"HPUT TEST") CALL VPUT(15,1,"VPUT TEST") ! Better then DISPLAY AT as uses entire screen and does vertical + horizontal CALL KEY("",5,K,S) NEW ! RXB CALL VERSION UPDATED CALL VERSION(A) :: PRINT A CALL KEY("",5,K,S) NEW ! NEW RXB SOUND SUBROUTINES CALL BEEP ! NEW RXB SUBROUTINE CALL HONK CALL KEY("",5,K,S) NEW ! Create a XB program 100 REM Test 110 PRINT "THIS IS A TEST PROGRAM" 120 CALL BEEP 130 END ! SAVE THE PROGRAM SAVE DSK1.TEST CALL KEY("",5,K,S) NEW ! HOW TO EDIT IN USER OLD DSK1.TEST RES 1000,100 NUM 1010,111 ! REMARK HERE ! SHOW IT ! LET THEM KNOW IT ! DONE LIST RES 100,5 CALL KEY("",5,K,S) LIST SAVE DSK1.TEST2 CALL KEY("",5,K,S) NEW ! RUN PROGRAMS BUT GO BACK TO USER CALL KEY("",5,K,S) RUN "DSK1.TEST" RUN "DSK1.TEST2" CALL KEY("",5,K,S) NEW ! MERGE PROGRAMS AND RUN OLD DSK1.TEST2 RES 3333,4 SAVE DSK1.TEST3,MERGE LIST CALL KEY("",5,K,S) NEW OLD DSK1.TEST MERGE DSK1.TEST3 LIST CALL KEY("",5,K,S) SAVE DSK1.MPGM,IV254 LIST CALL KEY("",5,K,S) NEW ! RXB IMPROVED SIZE SIZE CALL KEY("",5,K,S) NEW ! NOW YOU SEE FREE SPACE ANDTHE FIRST FREE ADDRESS LOCATION IN SIZE ALSO NOW ASSEMBLY SIZE AND LOCATIONS OF MEMORY CALL KEY("",5,K,S) 10 CALL INIT :: CALL SIZE 20 CALL KEY("",5,K,S) RUN ! SEE LOWER 8K CHANGED? CALL KEY("",5,K,S) NEW ! New RXB VDPSTACK MANAGER ! Changing VDPSTACK triggersreset VDP & Program space sodoes a NEW after changes ! 10 CALL VDPSTACK(2392) ! >0958 STACK !NORMAL VDP STACK LOCATION CALL KEY("",5,K,S) 10 CALL VDPSTACK(2392) CALL KEY("",5,K,S) RUN SIZE CALL KEY("",5,K,S) ! New RXB VDPSTACK MANAGER ! CALL VDPSTACK(4096) ! >1000 VDP STACK LOCATION CALL KEY("",5,K,S) CALL VDPSTACK(4096) SIZE CALL KEY("",5,K,S) NEW ! New RXB VDPSTACK MANAGER ! CALL VDPSTACK(6176) ! >1820 VDP STACK LOCATION CALL KEY("",5,K,S) CALL VDPSTACK(6176) SIZE CALL KEY("",5,K,S) NEW ! New RXB VDPSTACK MANAGER ! CALL VDPSTACK(2392) ! >0958 STACK !NORMAL STACK LOCATION CALL KEY("",5,K,S) CALL VDPSTACK(2392) SIZE CALL KEY("",5,K,S) NEW ! RXB PROGRAM RAM MANAGER ! CALL PRAM(START-ADDRESS, END-ADDRESS) ! Normal XB START >FFE7 (-25 DECIMAL) ! Normal XB END >A040 (-24512 DECIMAL) ! 24K RAM minus 64 bytes ! CALL PRAM(-25,-24512) (default previous value) CALL KEY("",5,K,S) CALL PRAM(-25,-24512) SIZE CALL KEY("",5,K,S) NEW ! New RXB RAM MANAGER ! How about full 24K RAM ! START >FFFF (24K+DEBUGGER) ! END >A000 (24K+64 BYTES RAM) ! FULL 24K OF RAM FINALLY ! CALL PRAM(-1,-24576) CALL KEY("",5,K,S) CALL PRAM(-1,-24576) SIZE CALL KEY("",5,K,S) NEW ! New RXB RAM MANAGER ! START >F000 (New high address) ! END >B000 (16K RAM) ! CALL PRAM(-4096,-20480) CALL KEY("",5,K,S) CALL PRAM(-4096,-20480) SIZE CALL KEY("",5,K,S) NEW ! New RXB RAM MANAGER ! START >FFE7 (Normal XB address) ! END >E000 (8K-8 BYTES RAM) ! CALL PRAM(-25,-8192) CALL KEY("",5,K,S) CALL PRAM(-25,-8192) SIZE CALL KEY("",5,K,S) NEW ! New RXB RAM MANAGER ! START >D000 (New high address) ! END >C000 (4K RAM) ! CALL PRAM(-12288,-16384) CALL KEY("",5,K,S) CALL PRAM(-12288,-16384) SIZE CALL KEY("",5,K,S) NEW ! New RXB RAM MANAGER ! START >FFFF (TI Debug area) ! END >FFE7 (Normal XB High address) ! (25 BYTES RAM) ! CALL PRAM(-1,-25) CALL KEY("",5,K,S) CALL PRAM(-1,-25) SIZE CALL KEY("",5,K,S) NEW ! New RXB RAM MANAGER ! START >FFE7 (Normal XB High address) ! END >FFE6 (1024 BYTES RAM) ! CALL PRAM(-25,-1048) CALL KEY("",5,K,S) CALL PRAM(-25,-1048) SIZE CALL KEY("",5,K,S) NEW ! New RXB RAM MANAGER ! OR this way too ! START >FFFF (TI Debugger area) ! END >FF00 (256 BYTES RAM) ! CALL PRAM(-1,-256) CALL KEY("",5,K,S) CALL PRAM(-1,-256) SIZE CALL KEY("",5,K,S) NEW ! New RXB RAM MANAGER ! RESET RAM TO NORMAL START ! RESET RAM TO NORMAL END ! CALL PRAM(-25,-24512) CALL KEY("",5,K,S) CALL PRAM(-25,-24512) SIZE CALL KEY("",5,K,S) NEW 10 ! If RXB has not blown your mind watch this! 110 CALL FILES(0) 120 ! You can do CALL FILES from program mode now! 130 ! But notice 0 files? 140 ! RXB can do CALL FILES with a modified 0 files! 150 ! RXB executes a NEW after the CALL FILES so you do not have to do that and in PROGRAM MODE or EDIT MODE for you! CALL KEY("",5,K,S) SAVE "DSK1.CALLFILES",IV254 NEW ! RXB has CALL XB that will return to start title screen or can be used like RUN programs. EXAMPLE: ! CALL XB("DSK1.XBFILE") ! Additonally CALL FILES is also built into CALL XB EXMPLE: ! CALL XB("DSK1.PGM",file#) ! RXB allows 0 to 15 Files CALL KEY("",5,K,S) NEW ! TRACE FROM USER OLD DSK1.TEST TRACE RUN UNTRACE CALL KEY("",5,K,S) NEW ! USER IGNORES ERRORS NUM ! ERRORS IN USER GOTO 1000 RUN ! SAME AS BREAK OR FCTN4 (By the way FCTN4 does not work in USER) CALL KEY("",5,K,S) NEW 100 ! NEW IN RXB IS LIKE IN XB BUT CAN BE CALLED IN A PROGRAM 110 CALL NEW! PROGRAM IS ERASED AND DEFAULTS TO THE COMMAND MODE 120 ! RXB DOCUMENTS SHOW CALL NEW IS FOR THE USER RXB COMMAND RUN THAT DEMO CALL KEY("",5,K,S) SAVE DSK1.NEW,IV254 RUN 100 ! NORMAL XB CLOSE 110 OPEN #1:"DSK1.FILE1" 120 OPEN #2:"DSK1.FILE2" 130 CLOSE #1 140 CLOSE #2 200 ! RXB CLOSE ALL 210 OPEN #1:"DSK1.FILE1" 220 OPEN #2:"DSK1.FILE2" 230 CALL CLSALL CALL KEY("",5,K,S) SAVE DSK1.CLSALL,IV254 NEW 1 ! Use this to convert plain text to RXB USER files 100 ON ERROR 170 110 OPEN #1:"DSK1.USERDEMO",INPUT 120 OPEN #2:"DSK1.BATCH",OUTPUT 130 LINPUT #1:Z$ 140 IF LEN(Z$)=80 THEN X$=X$&Z$ :: GOTO 130 150 IF LEN(Z$)<80 THEN PRINT #2:X$&Z$&CHR$(13) 160 X$,Z$="" :: GOTO 130 170 CALL CLSALL 180 END SAVE DSK1.DV80TOUSER,IV254 NEW ! RXB Binary SAVE routine called BSAVE and BLOAD have been changed to PSAVE and PLOAD ! The previous version 2015 were 8K sized files but 2020versions are 4K in size files ! This change was for SAMS support as any 4K page can be loaded or saved anywhere in RAM now ! To explain 2,3,A,B,C,D,E,Fis the HEX location of RAM boundries thus RXB can load 4K files into RAM for SAMS CALL KEY("",5,K,S) NEW 100 CALL CLEAR 110 CALL MAGNIFY(2) 120 CALL SCREEN(15) 130 CALL COLOR(1,1,15) 140 FOR S=2 TO 8 150 CALL COLOR(S,2,15) 160 NEXT S 170 CALL SPRITE(#1,87,13,84,26) 180 CALL SPRITE(#2,73,13,58,58) 190 CALL SPRITE(#3,78,13,32,90) 200 CALL SPRITE(#4,68,13,58,122) 210 CALL SPRITE(#5,89,13,32,154) 220 CALL SPRITE(#6,88,13,58,186) 230 CALL SPRITE(#7,66,13,84,218) 240 CALL SPRITE(#8,51,12,128,90) 250 CALL SPRITE(#9,46,12,128,122) 260 CALL SPRITE(#10,48,12,128,154) 270 CALL SPRITE(#11,42,5,1,1,0,127) 280 CALL SPRITE(#12,42,5,1,243,127,0) 290 CALL SPRITE(#13,42,5,176,243,0,-127) 300 CALL SPRITE(#14,42,5,176,1,-127,0) 310 CALL SPRITE(#15,42,16,1,128,0,111) 320 CALL SPRITE(#16,42,16,96,243,111,0) 330 CALL SPRITE(#17,42,16,176,128,0,-111) 340 CALL SPRITE(#18,42,16,96,1,-111,0) 350 CALL SPRITE(#19,42,7,1,1,0,99) 360 CALL SPRITE(#20,42,7,1,243,99,0) 370 CALL SPRITE(#21,42,7,176,243,0,-99) 380 CALL SPRITE(#22,42,7,176,1,-99,0) 390 FOR R=3 TO 21 400 CALL HPUT(R,3,RPT$("a",28)) 410 NEXT R 420 CALL CHAR(97,"00FF00FF00FF00FF") 430 ! THIS IS HOW THE TITLE SCREEN WAS CREATED AND WAS SAVED 440 CALL HCHAR(3,3,96,28) 450 CALL VCHAR(3,3,96,20) 460 CALL HCHAR(22,3,96,28) 470 CALL VCHAR(3,30,96,20) 480 CALL HPUT(15,5,"RICHARD LYNN GILBERTSON") 490 CALL HPUT(20,9,"<<<PUSH A KEY>>>") 500 ! LOOP HERE FOR MOVEMENT 510 CALL CHAR(96,"FF818181818181FF") 520 IF RND>.5 THEN CALL COLOR(9,RND*15+1,15) 530 CALL CHAR(96,"00E7E7E7E7E7E700") 540 CALL KEY(0,K,S):: IF S=0 THEN 510 550 ! GET SPRITE MOTION IN N 560 CALL PEEK(-31878,N) 570 ! MOVE VDP TO LOW 8K RAM 580 CALL MOVES("VR",2079,0,8192) 590 ! SAVE RAM TO DISK 600 CALL PSAVE(2,"DSK1.SCREEN") ! SET UP SCREEN AND PSAVE IT CALL KEY("",5,K,S) SAVE DSK1.PSAVESCRN,IV254 RUN 100 ! RELOAD SAVED MEMORY 110 CALL PLOAD(2,"DSK1.SCREEN") 120 ! RESET MAGNIFICATION 130 CALL MAGNIFY(2) :: CALL SCREEN(15) 140 ! MOVE FROM RAM TO VDP 150 CALL MOVES("RV",2079,8192,0) 160 ! RESET SPRITE MOTION 170 CALL LOAD(-31878,22) 180 ! LOOP HERE FOR MOVEMENT. 190 CALL CHAR(96,"FF818181818181FF") :: IF RND>.5 THEN CALL COLOR(9,RND*16,15) 200 CALL CHAR(96,"00E7E7E7E7E7E700") 210 CALL KEY(5,K,S):: IF S=0 THEN 190 CALL KEY("",5,K,S) SAVE DSK1.PLOADSCRN,IV254 RUN NEW ! RXB has built in support for SAMS memory card or sidecar up to 64 Meg SAMS ! PSAVE and PLOAD are used to SAVE and LOAD SAMS pages 4K at a time ! Access to SAMS is using CALL SAMS(boundry,page#) ! boundry = 2,3,A,B,C,D,E,F page# = 0 to 65536 4K pages ! Of course this requires a SAMS memory card CALL KEY("",5,K,S) NEW ! RXB has built in support subprograms so this will show them to you ! This RXB program uses CALL PEEKG that is a peek GROM routine ! This RXB program also finds the address of that subprogram in GROM ! Lastly it shows the link to next subprogram and the actual address in GROM CALL KEY("",5,K,S) NEW 10 ! RXB EXAMPLE RXB SUBPROGRAM FINDER 100 CALL CLEAR :: ADDRESS=-24538 110 RESTORE :: FOR I=1 TO 2 :: READ X$,Y$,Z$ :: PRINT X$;TAB(11);Y$;TAB(22);Z$ :: NEXT I 120 CALL PEEKG(ADDRESS,B1,B2) :: CALL HEX(B1,B1$,B2,B2$) :: ADDRESS$=SEG$(B1$,3,2)&SEG$(B2$,3,2) 130 CALL PEEKG(ADDRESS+2,LENGTH) 140 CALL MOVES("G$",LENGTH,ADDRESS+3,N$) 150 CALL PEEKG(ADDRESS+3+LENGTH,S1,S2) :: CALL HEX(S1,S1$,S2,S2$) :: S$=SEG$(S1$,3,2)&SEG$(S2$,3,2) 160 CALL HEX(ADDRESS,A$) :: PRINT A$;"-";ADDRESS$;" ";TAB(11);N$;" ";TAB(22);S$ :: PRINT 170 DATA HEADER,SUBPROGRAM,START,*******,**********,******* 180 CALL HEX(ADDRESS$,ADDRESS) :: IF ADDRESS THEN 120 SAVE DSK1.SUBPGMFNDR,IV254 RUN CALL KEY("",5,K,S) NEW ! Lets create a USER file while in USER running a USER DV80 file? ! Yea that is right we are going to create a DV80 file from DV80 and run it! CALL KEY("",5,K,S) ! CREATE A USER FILE FROM USER FILE OPEN #1:"DSK1.TEST-USER",OUTPUT PRINT #1:"1 CALL CLEAR ! TEST OF USER"&CHR$(13) PRINT #1:"2 A$="&CHR$(34)&" RXB USER "&CHR$(34)&CHR$(13) PRINT #1:"3 B$="&CHR$(34)&" DEMO "&CHR$(34)&CHR$(13) PRINT #1:"4 C$="&CHR$(34)&" FINISHED "&CHR$(34)&CHR$(13) PRINT #1:"5 CALL HPUT(12,11,A$,14,11,B$,16,11,C$)"&CHR$(13) PRINT #1:"6 PRINT "&CHR$(34)&"PLEASE WAIT!"&CHR$(34)&CHR$(13) PRINT #1:"7 FOR C=1 TO 5000 :: NEXT C"&CHR$(13) PRINT #1:"8 CALL XB("&CHR$(34)&"DSK1.LOADER"&CHR$(34)&")"&CHR$(13) PRINT #1:"RUN"&CHR$(13) CLOSE #1 CALL KEY("",5,K,S) NEW ! Find file named TEST-USER CALL KEY("",5,K,S) CALL CAT("DSK1.") CALL KEY("",5,K,S) NEW ! USER in this demo just created files on DSK1 ! USER CAN CALL USER FILES IF IT IS THE LAST COMMAND ! OK NOW WE ARE GOING TO MAKE A TON OF RXB PROGRAMS ! THIS IS GOING TO TAKE SOMETIME TO MAKE THEM... CALL KEY("",5,K,S) NEW 100 ! Normal XB CALL KEY routine vs RXBONKEY 110 CALL CLEAR 120 PRINT "XB CHOOSE A KEY:":"Yes, No, Maybe, End" 130 CALL KEY(3,K,S) 140 IF K=89 THEN PRINT "YES" :: GOTO 130 150 IF K=78 THEN PRINT "NO" :: GOTO 130 160 IF K=77 THEN PRINT "MAYBE" :: GOTO 130 170 IF K=69 THEN PRINT "END" :: GOTO 190 180 GOTO 130 190 ! RXB CALL ONKEY routine 200 ! RXB CALL ONKEY 210 CALL CLEAR 220 PRINT "RXB CHOOSE A KEY:":"Yes, No, Maybe, End" 230 CALL ONKEY("YNME",3,K,S)GOTO 250,260,280,280 240 GOTO 230 250 PRINT "Yes!" :: GOTO 230 260 PRINT "Nn!" :: GOTO 230 270 PRINT "Maybe" :: GOTO 230 280 PRINT "End!" SAVE DSK1.RXBONKEY,IV254 NEW 100 ! CATALOG ALL DISKS 110 N=49 120 ON ERROR 150 130 N=N+1 140 CALL CAT(N) 150 PRINT D$ 160 IF N<128 THEN 120 ELSE END SAVE DSK1.CATALL,IV254 NEW 100 ! JOYLOCATE JOYST + LOCATE + IF KEY GOTOLINE NUMBER 110 ! As this does all this in asingle command should be used in place of normal XB more compliated version 120 CALL CLEAR 130 CALL CHAR(143,"FFFFFFFFFFFFFFFF") 140 CALL SPRITE(#1,143,2,9,190) 150 CALL JOYLOCATE(1,X,Y,8,8,#1,R,C,K)GOTO 180 160 PRINT X;Y;K;R;C 170 GOTO 150 180 PRINT X;Y;K;R;C;"FIRE" 190 GOTO 150 SAVE DSK1.JLOCATE,IV254 NEW 100 ! RXB CALL JMOTION 110 ! JOYMOTION JOYST + MOTION + IF KEY GOTOLINE NUMBER 120 ! As this does all this in asingle command should be used in place of normal XB more compliated version 130 CALL CLEAR 140 CALL CHAR(143,"FFFFFFFFFFFFFFFF") 150 CALL SPRITE(#1,143,2,9,190,20,0) 160 CALL JOYMOTION(1,X,Y,#1,9,9,K)GOTO 190 170 PRINT X;Y,K 180 GOTO 160 190 PRINT X;Y,K;"FIRE" 200 GOTO 160 SAVE DSK1.JMOTION,IV254 NEW 100 ! RUN FOR ONE HOUR AND COMPARE PRINT X XB VS RXB 110 ! NORMAL XB DISTANCE 120 CALL CLEAR :: X=190 130 CALL SPRITE(#1,65,2,9,X,20,0,#2,66,2,9,X,30,0,#3,67,2,9,X,-20,0) 140 CALL DISTANCE(#1,#2,D) 150 CALL DISTANCE(#1,#3,E) 160 CALL DISTANCE(#2,#3,F) 170 X=X+1 :: PRINT D;E;F 180 GOTO 140! X IS COUNTER 190 ! 200 ! RXB DISTANCE 210 CALL CLEAR :: X=190 220 CALL SPRITE(#1,65,2,9,X,20,0,#2,66,2,9,X,30,0,#3,67,2,9,X,-20,0) 230 CALL DISTANCE(#1,#2,D,#1,#3,E,#2,#3,F) 240 X=X+1 :: PRINT D;E;F 250 GOTO 230! X IS COUNTER 260 ! RUN FOR 1 HOUR TEST OF NORMAL DISTANCE XB VS RXB SAVE DSK1.DISTANCE,IV254 NEW 10 ! RXB EXAMPLE CALL CHAR(ALL,string) 20 FOR L=0 TO 256 :: PRINT CHR$(L);:: NEXT L 30 S$="0123456789ABCDEF" 40 CALL CHAR(ALL,SEG$(S$,INT(RND*15)+1,INT(RND*15)+1)) 50 Z=Z+1 :: IF Z=50 THEN END ELSE 40 SAVE DSK1.CHARALL,IV254 NEW 100 ! NORMAL XB CHARSET 110 CALL HCHAR(1,1,32,768) :: PRINT "NORMAL XB CALL CHARSET": : 120 FOR L=159 TO 30 STEP-1 :: PRINT CHR$(L);" "; :: CALL CHAR(L,"4567") :: NEXT L 130 FOR D=1 TO 600 :: NEXT D 140 CALL CHARSET 150 PRINT "XB CHARSET RESETS 32 TO 95": : : 160 FOR D=1 TO 900 :: NEXT D 170 ! RXB CHARSETALL 180 CALL CHARSETALL 190 PRINT "RXB CHARSETALL 30 TO 159": : 200 PRINT "PRESS ANY KEY" 210 CALL KEY("",5,K,S) SAVE DSK1.CHARSETALL,IV254 NEW 10 ! RXB EXAMPLE CALL SWAPCHAR(char,char) CALL SWAPCHAR(value#,value#) 100 A(0)=-1 :: A(1)=1 :: CALL MOTION(GO) 110 CALL CLEAR :: CALL MAGNIFY(2):: CALL SCREEN(15) 120 FOR S=1 TO 28 130 CALL SPRITE(#S,64+S,INT(RND*16)+1,20+S,50+S,INT(A(RND*1))*INT(RND*20),INT(A(RND*1))*INT(RND*20)) 140 NEXT S 150 CALL SWAPCOLOR(#INT(RND*28)+1,#INT(RND*28)+1):: CALL SWAPCHAR(INT(RND*28)+64,INT(RND*28)+64) 160 Z=Z+1 :: IF Z=50 THEN END ELSE 150 SAVE DSK1.SWAP,IV254 NEW 10 ! RXB EXAMPLE CALL MAGNIFY(factor[,...]) 100 A(0)=-1 :: A(1)=1 :: CALL MOTION(GO) 110 CALL CLEAR :: CALL SCREEN(15) 120 FOR S=1 TO 28 130 CALL SPRITE(#S,64+S,2,20+S,50+S,INT(A(RND*1))*INT(RND*127),INT(A(RND*1))*INT(RND*127)) 140 NEXT S 150 CALL MAGNIFY(1,2,1) :: GOTO 150 160 ! MAGNIFY changed SAVE DSK1.MAGNIFY,IV254 NEW 100 CALL CLEAR 110 T$="HELLO WORLD" 120 B$=" " 130 CALL BIAS(1,T$,1,B$) 140 FOR X=757 TO 0 STEP-1 150 CALL MOVES("$V",11,T$,X,"$V",1,B$,X+10) 170 NEXT X SAVE DSK1.MOVESHELLO,IV254 NEW 100 ! RXB EXAMPLE CALL MOVES(GROM to screen) 110 FOR GA=0 TO 32767 STEP 768 :: CALL MOVES("GV",768,GA,0):: NEXT GA 120 ! RXB EXAMPLE CALL MOVES (RIPPLE EXAMPLE) 130 CALL HCHAR(1,1,32) 140 CALL MOVES("VV",767,0,1) 150 ! RXB EXAMPLE CALL MOVES (SCAN VDP) 160 FOR V=0 TO 16384 STEP 768 :: CALL MOVES("VV",768,V,0):: NEXT V 170 ! RXB EXAMPLE CALL MOVES(RAM to screen) 180 FOR R=0 TO 8192 STEP 768 :: CALL MOVES("RV",768,R,0) :: NEXT R SAVE DSK1.MOVES,IV254 NEW 10 ! RXB EXAMPLE CALL MOVES(type$,bytes,from,to) 20 PRINT "Disk controller EPROM chip" 100 CALL CHAR(31,"F0F0F0F0F0F0F0F0") 110 CALL IO(3,8,2176,255) ! TURN ON EPROM 120 FOR A=16384 TO 24576 STEP 224 130 CALL MOVES("R$",224,A,T$) 140 CALL HEX(A,H$) 150 PRINT " ADDRESSS=";A;"HEX=";H$: :T$: : 160 FOR L=1 TO 400 :: NEXT L 170 NEXT A 180 CALL CHAR(31,"00") 190 CALL IO(3,8,2176,0) ! TURN OFF EPROM SAVE DSK1.MOVESDSR,IV254 NEW 10 ! RXB EXAMPLE CALL BIAS 20 ! MOVES get VDP from screen into a String Variable X$ 30 CALL MOVES("V$",255,511,X$) 40 ! CALL BIAS removes 96 screen bias from all characters in String Variable X$ 50 CALL BIAS(0,X$) 60 ! After screen bias is removed it can be printed on screen 70 PRINT X$ SAVE DSK1.BIAS,IV254 NEW 10 ! RXB EXAMPLE RXB SUBPROGRAM FINDER 100 CALL CLEAR :: ADDRESS=-24538 110 RESTORE :: FOR I=1 TO 2 :: READ X$,Y$,Z$ :: PRINT X$;TAB(11);Y$;TAB(22);Z$ :: NEXT I 120 CALL PEEKG(ADDRESS,B1,B2) :: CALL HEX(B1,B1$,B2,B2$) :: ADDRESS$=SEG$(B1$,3,2)&SEG$(B2$,3,2) 130 CALL PEEKG(ADDRESS+2,LENGTH) 140 CALL MOVES("G$",LENGTH,ADDRESS+3,N$) 150 CALL PEEKG(ADDRESS+3+LENGTH,S1,S2) :: CALL HEX(S1,S1$,S2,S2$) :: S$=SEG$(S1$,3,2)&SEG$(S2$,3,2) 160 CALL HEX(ADDRESS,A$) :: PRINT A$;"-";ADDRESS$;" ";TAB(11);N$;" ";TAB(22);S$ :: PRINT 170 DATA HEADER,SUBPROGRAM,START,*******,**********,******* 180 CALL HEX(ADDRESS$,ADDRESS) :: IF ADDRESS THEN 120 SAVE DSK1.SUBPGMFNDR,IV254 NEW 10 ! RXB EXAMPLE CALL POKER(register,value) 100 CALL CLEAR :: FOR I=0 TO 764 STEP 8 :: CALL POKEV(I,161,162,163,164,165,166,167,168) :: NEXT I 110 CALL CLEAR :: FOR I=0 TO 758 STEP 16 :: CALL POKEV(I,161,162,163,164,165,166,167,168,169,170,172,173,174,175,176) :: NEXT I 120 CALL CLEAR :: FOR I=126 TO 223 :: CALL POKEV(I,I+1,I+2,I+3,I+4,I+5,I+6,I+7) :: NEXT I 130 PRINT: :"SCREEN COLOR CHANGES" :: FOR T=1 TO 5 :: FOR I=0 TO 15 :: CALL POKER(7,1) :: NEXT I :: NEXT T :: CALL SCREEN(8) 140 A$="!@#$%^&*()+1234567890=-:><,.;/~_?'|{}\`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" :: FOR I=1 TO 5 :: PRINT A$ :: NEXT I 150 PRINT: :"CHARACTER COLOR CHANGES" :: FOR I=30 TO 70 :: FOR T=2063 TO 2076 :: CALL POKEV(T,I) :: NEXT T :: NEXT I :: CALL CHARSET :: PRINT 160 PRINT "PRESS A KEY FOR TEXT MODE": : :: CALL BEEP 170 CALL KEY("",0,K,S) :: CALL POKER(7,244) :: CALL POKER(1,240) 180 PRINT " PRESS A KEY FOR MULTI COLOR MODE": : :: CALL BEEP 190 CALL KEY("",0,K,S) :: CALL POKER(1,232) :: GOSUB 230 :: CALL POKER(1,224) 200 PRINT "PRESS A KEY FOR BIT MAP MODE": : :: CALL BEEP 210 CALL KEY("",0,K,S) :: CALL POKER(0,2) :: CALL POKER(1,224) 220 GOSUB 230 :: CALL POKER(0,0) :: END 230 FOR I=1 TO 800 :: NEXT I :: RETURN SAVE DSK1.POKER,IV254 NEW 100 ! RXB EXAMPLE CALL MOTION(STOP,GO) 110 CALL CLEAR :: CALL CHAR(128,RPT$("F",16)) :: CALL MAGNIFY(2) 120 A$="OUT" :: GOSUB 130 :: A$="" :: GOSUB 130 :: CALL QUITON :: END 130 CALL HPUT(1,3,"MOTION WITH"&A$&" RXB") :: IF A$="" THEN CALL MOTION(STOP) 140 FOR A=1 TO 11 :: CALL SPRITE(#A,128,2,A*16-7,1,0,30) :: NEXT A :: IF A$="" THEN CALL MOTION(GO) 150 CALL HPUT(24,4,"PRESS ANY KEY TO CONTINUE.") :: CALL KEY("",0,K,S) :: CALL DELSPRITE(ALL) :: CALL CLEAR :: RETURN SAVE DSK1.MOTIONGO,IV254 NEW 10 ! RXB EXAMPLE CALL MOTION(GO,STOP) 100 A(0)=-1 :: A(1)=1 :: CALL MOTION(GO) 110 CALL CLEAR :: CALL MAGNIFY(2) :: CALL SCREEN(15) 120 FOR S=1 TO 28 130 CALL SPRITE(#S,64+S,2,20+S,50+S,INT(A(RND*1))*INT(RND*127),INT(A(RND*1))*INT(RND*127)) 140 NEXT S 150 N=N+1 :: ON INT(RND*3)+1 GOSUB 160,170,180 :: IF N>50 THEN END ELSE 150 160 CALL MOTION(GO) :: RETURN 170 CALL MOTION(STOP) :: RETURN 180 FOR DELAY=0 TO 200 :: NEXT DELAY :: RETURN SAVE DSK1.MOTIONSTOP,IV254 NEW 10 ! RXB EXAMPLE CALL COLOR(ALL,fore,back) 20 FOR L=0 TO 256 :: PRINT CHR$(L);:: NEXT L 30 CALL COLOR(ALL,RND*15+1,RND*15+1) 40 Z=Z+1 :: IF Z=50 THEN END ELSE 30 SAVE DSK1.COLORALL,IV254 NEW 100 ! COLOR IN RXB HAS ALL ADDED TO CHANGE ALL SETS FROM 0 TO 16 120 FOR X=0 TO 255 :: PRINT CHR$(X); 130 NEXT X 140 CALL COLOR(ALL,1,2)! ALLSETS ALL TO TRANPARENT BLACK 150 FOR X=0 TO 2E2 :: NEXT X 160 CALL COLOR(ALL,1,2,ALL,2,1) :: GOTO 160! CREATES A OPTICAL EFFECT 200 GOTO 200 SAVE DSK1.ALLCOLOR,IV254 NEW 10 ! RXB EXAMPLE CALL MOTION(ALL,x,y) 100 A(0)=-127 :: A(1)=127 :: CALL MOTION(GO) 110 CALL CLEAR :: CALL MAGNIFY(2):: CALL SCREEN(15) 120 FOR S=1 TO 28 130 CALL SPRITE(#S,64+S,2,20+S,50+S,A(RND)*RND,A(RND)*RND) 140 NEXT S 150 CALL MOTION(ALL,A(RND)*RND,A(RND)*RND) 160 C=C+1 :: IF C<70 THEN 150 170 ! pretty cool huh? SAVE DSK1.MOTIONALL,IV254 NEW ! RXB EXAMPLE CALL HEX(number,string) 10 ! Decimal & Hexidecimal 11 FOR D=-32000 TO 30000 STEP 1000 12 CALL HEX(D,H$) 13 PRINT "DEC=";D,"HEX=";H$ 100 ! Hexidecimal to Decimal 120 CALL HEX(H$,D) 130 PRINT "HEX=";H$,"DEC=";D 140 NEXT D SAVE DSK1.HEX~DEC,IV254 NEW 100 ! NUMBERS VS STRINGS 110 DATA 200,124,97,249,140,77,81,173,254,78,93,12,38,65,55,6,0 120 READ N :: B$="BYTES" 130 CALL HEX(N,N$) 140 S$=S$&SEG$(N$,2,2) 150 IF N<>0 THEN 120 160 PRINT "DATA: ";8*16,B$ 170 PRINT "STRING:";LEN(S$)+1,B$ 180 PRINT "SAVED: ";(8*16)-(LEN(S$)+1),B$ 190 ! 8 BYTES PER DATA WHILE STRING IS 2 BYTES SAVE DSK1.HEXSTRING,IV254 NEW 10 ! RXB EXAMPLE CALL SWAPCHAR(char,char) CALL SWAPCHAR(value#,value#) 100 A(0)=-1 :: A(1)=1 :: CALL MOTION(GO) 110 CALL CLEAR :: CALL MAGNIFY(2):: CALL SCREEN(15) 120 FOR S=1 TO 28 130 CALL SPRITE(#S,64+S,INT(RND*16)+1,20+S,50+S,INT(A(RND*1))*INT(RND*20),INT(A(RND*1))*INT(RND*20)) 140 NEXT S 150 CALL SWAPCOLOR(#INT(RND*28)+1,#INT(RND*28)+1):: CALL SWAPCHAR(INT(RND*28)+64,INT(RND*28)+64) 160 Z=Z+1 :: IF Z=50 THEN END ELSE 150 SAVE DSK1.SWAP,IV254 NEW 10 ! RXB EXAMPLE CALL INVERSE(ALL) 100 CALL INVERSE(ALL) 110 A=A+1 :: IF A<8 THEN 100 120 ! Inverts all character definitions SAVE DSK1.INVERSEALL,IV254 NEW 100 ! INVERSE IS A RXB COMMAND THAT INVERTS THE ALLTHE BITS IN A CHARACTER CODE 110 ! INVERSE HAS ANOTHER USE FOR PROGRAMMERS 120 PRINT "CHARACTER # (32 TO 159)": : 130 ACCEPT AT(24,1)VALIDATE(DIGIT)SIZE(3)BEEP:X :: PRINT CHR$(X): 140 CALL CHARPAT(X,X$) :: PRINT X$;" NORMAL" 150 CALL INVERSE(X) 160 CALL CHARPAT(X,X$) :: PRINT X$;" INVERSED": : 170 GOTO 120 SAVE DSK1.INVERSED,IV254 NEW 1 ! RXB has improved a COINC routine run this demo to seethe results! 100 ! RUN FOR 1 HOUR AND AND PRINT X FOR XB VS RXB 110 ! NORMAL XB COINC 120 CALL CLEAR :: X=190 130 CALL SPRITE(#1,65,2,9,X,20,0,#2,66,2,9,X,30,0,#3,67,2,9,X,-20,0) 140 CALL COINC(ALL,A) 150 CALL COINC(#1,#2,12,B) 160 CALL COINC(#1,#3,12,C) 170 CALL COINC(#2,#3,12,D) 180 X=X+1 :: PRINT A;B;C;D 190 GOTO 140 200 ! 210 ! RXB COINC 220 CALL CLEAR :: X=190 230 CALL SPRITE(#1,65,2,9,X,20,0,#2,66,2,9,X,30,0,#3,67,2,9,X,-20,0) 240 CALL COINC(ALL,A,#1,#2,12,B,#1,#3,12,C,#2,#3,12,D) 250 X=X+1 :: PRINT A;B;C;D 260 GOTO 240 SAVE DSK1.COINC,IV254 NEW 10 ! RXB EXAMPLE 100 ! This program gives the illusion of sprites that bank 90% at a time 110 CALL MAGNIFY(2) :: CALL CLEAR :: CALL SCREEN(15) :: CALL MOTION(GO) 120 CALL SPRITE(#1,65,2,100,10,0,35,#2,66,16,10,140,25,0) 130 CALL COINC(ALL,V) 140 IF V THEN CALL SWAPCHAR(65,66) :: CALL RMOTION(#1) :: CALL SWAPCOLOR(#1,#2) :: GOSUB 160 150 GOTO 130 :: FOR L=1 TO 600 :: NEXT L 160 A=A+1 :: IF A<5 THEN RETURN SAVE DSK1.SPRITESWAP,IV254 NEW 10 ! RXB EXAMPLE CALL GMOTION(#sprite,x,y) 100 A(0)=-1 :: A(1)=1 :: CALL CLEAR :: CALL MAGNIFY(2):: CALL SCREEN(15) :: CALL MOTION(GO) 110 FOR S=1 TO 28 120 CALL SPRITE(#S,64+S,INT(RND*16)+1,20+S,50+S,INT(A(RND*1))*INT(RND*127),INT(A(RND*1))*INT(RND*127)) 130 NEXT S 140 S=INT(RND*28)+1 :: CALL GMOTION(#S,X,Y):: CALL HPUT(24,3,"CALL GMOTION(#"&STR$(S)&","&STR$(X)&","&STR$(Y)&") ") :: FOR L=1 TO 1000 :: NEXT L 150 CALL MOTION(#S,Y,X):: Z=Z+1 :: IF Z<8 THEN 140 SAVE DSK1.GMOTION,IV254 NEW 10 ! RXB EXAMPLE CALL GMOTION(#sprite,x,y) 100 A(0)=-1 :: A(1)=1 :: CALL CLEAR :: CALL MAGNIFY(2) :: CALL SCREEN(15) :: CALL MOTION(GO) 110 FOR S=1 TO 28 120 CALL SPRITE(#S,64+S,INT(RND*16)+1,20+S,50+S,INT(A(RND*1))*INT(RND*127),INT(A(RND*1))*INT(RND*127)) 130 NEXT S 140 S=INT(RND*28)+1 :: CALL GMOTION(#S,X,Y) :: CALL HPUT(24,3,"CALL GMOTION(#"&STR$(S)&","&STR$(X)&","&STR$(Y)&") ") :: FOR L=1 TO 1000 :: NEXT L 150 CALL MOTION(#S,Y,X) :: Z=Z+1 :: IF Z<8 THEN 140 160 ! GMOTION gets motion from one sprite and puts into another sprite SAVE DSK1.G~MOTION,IV254 NEW 10 ! RXB EXAMPLE CALL RMOTION(#sprite) CALL RMOTION(ALL) 100 A(0)=-1 :: A(1)=1 :: CALL CLEAR :: CALL MAGNIFY(2) :: CALL SCREEN(15) 110 FOR S=1 TO 28 120 CALL SPRITE(#S,64+S,INT(RND*16)+1,20+S,50+S,INT(A(RND*1))*INT(RND*32),INT(A(RND*1))*INT(RND*32)) 130 NEXT S 140 IF RND>.2 THEN CALL RMOTION(#INT(RND*28)+1)ELSE CALL RMOTION(ALL) 150 Z=Z+1 :: IF Z<200 THEN 140 160 ! As this does all this in a single command should be used in place of normal XB more compliated version SAVE DSK1.RMOTION,IV254 NEW 10 ! RXB EXAMPLE CALL IO (SOUND LIST) 100 A=8191 110 DATA 5,159,191,223,255,227,1 120 DATA 9,142,1,164,2,197,1,144,182,211,6 130 DATA 3,145,183,212,5 140 DATA 3,146,184,213,4 150 DATA 5,167,4,147,176,214,5 160 DATA 3,148,177,215,6 170 DATA 3,149,178,216,7 180 DATA 5,202,2,150,179,208,6 190 DATA 3,151,180,209,5 200 DATA 3,152,181,210,4 210 DATA 5,133,3,144,182,211,5 220 DATA 3,145,183,212,6 230 DATA 3,146,184,213,7 240 DATA 5,164,2,147,176,214,6 250 DATA 3,148,177,215,5 260 DATA 3,149,178,216,4 270 DATA 5,197,1,150,179,208,5 280 DATA 3,151,180,209,6 290 DATA 3,152,181,210,7 300 DATA 3,159,191,223,0 310 A=A+1 :: READ B :: CALL POKEV(A,B) 320 IF B=0 THEN 330 ELSE 310 330 CALL IO(1,8192) SAVE DSK1.IO~CHIMES,IV254 NEW 100 CALL CLEAR! CRASH 110 DATA 2,228,242,5 120 DATA 2,228,240,18 130 DATA 2,228,241,16 140 DATA 2,228,242,14 150 DATA 2,228,243,12 160 DATA 2,228,244,10 170 DATA 2,229,245,9 180 DATA 2,229,246,8 190 DATA 2,229,247,7 200 DATA 2,229,248,6 210 DATA 2,229,249,5 220 DATA 2,230,250,4 230 DATA 2,230,251,3 240 DATA 2,230,252,2 250 DATA 2,230,253,1 260 DATA 2,230,254,1 270 DATA 1,255,0,0 280 FOR AD=4096 TO 4160 STEP 4 290 READ V1,V2,V3,V4 300 CALL POKEV(AD,V1,V2,V3,V4) 310 NEXT AD 320 CALL IO(1,4096) 330 PRINT "CRASH": :"TYPE:":"CALL IO(1,4096)" SAVE DSK1.IO~CRASH,IV254 NEW 100 ! RUN FOR 1 HOUR AND AND PRINT X FOR XB VS RXB 110 ! NORMAL XB COINC 120 CALL CLEAR :: X=190 130 CALL SPRITE(#1,65,2,9,X,20,0,#2,66,2,9,X,30,0,#3,67,2,9,X,-20,0) 140 CALL COINC(ALL,A) 150 CALL COINC(#1,#2,12,B) 160 CALL COINC(#1,#3,12,C) 170 CALL COINC(#2,#3,12,D) 180 X=X+1 :: PRINT A;B;C;D 190 GOTO 140 200 ! 210 ! RXB COINC 220 CALL CLEAR :: X=190 230 CALL SPRITE(#1,65,2,9,X,20,0,#2,66,2,9,X,30,0,#3,67,2,9,X,-20,0) 240 CALL COINC(ALL,A,#1,#2,12,B,#1,#3,12,C,#2,#3,12,D) 250 X=X+1 :: PRINT A;B;C;D 260 GOTO 240 270 ! 1 HOUR TEST XB VS RXB SAVE DSK1.COINC,IV254 NEW 1 ! XBRAMDISK used for saving 8K or less XB programs. 100 !Saved program will stay in memory as long as you do not CALL INIT or turn memory expansion off. 110 !It will even stay in memory when switching cartrides with a WIDGET. 200 CALL CLEAR 220 CALL CHAR(42,"AA55AA55AA55AA55",91,"7E8199A1A199817E") 230 CALL CHAR(45,RPT$("0",8)&"FF"&RPT$("0",10)&"10387CFEFE") 240 CALL CLEAR :: CALL HCHAR(2,4,42,26) 250 CALL VCHAR(3,4,42,5) :: CALL VCHAR(3,29,42,5) 260 DISPLAY AT(5,9)SIZE(12):"RAM-DISKETTE" 270 CALL HCHAR(8,4,42,26) 280 DISPLAY AT(12,4):"[ MARTIN KOTULLA 1985" 290 CALL HCHAR(13,6,45,22) :: DISPLAY AT(17,7):"DATAs CHECK? Y" 296 DISPLAY AT(22,4):"CALL LINK("&CHR$(34)&" LOAD"&CHR$(34)&") retrieve" 300 ACCEPT AT(17,22)BEEPSIZE(-1)VALIDATE("YN"):JN$ 310 IF JN$="N" THEN 360 320 FOR I=8192 TO 8458 STEP 2 :: READ A,B :: SUM=SUM+A+B :: NEXT I 330 DISPLAY AT(20,5):"THE DATA-LINES ARE" 340 IF SUM<>20638 THEN DISPLAY AT(22,10):"INCORRECT!" :: END 350 DISPLAY AT(22,11):"CORRECT!" 360 CALL INIT :: RESTORE 370 FOR I=8192 TO 8458 STEP 2 :: READ A,B :: CALL LOAD(I,A,B) :: NEXT I 380 CALL CLEAR :: STOP 390 DATA 032,068,255,255,000,000,170,085,000,000,041,097,032,056,033,126 400 DATA 032,056,033,226,032,056,035,076,032,056,036,050,032,056,036,110 410 DATA 032,056,036,132,032,056,036,144,247,147,248,118,255,231,247,146 420 DATA 255,255,076,079,065,068,032,032,032,196,083,065,086,069,032,032 430 DATA 032,122,000,000,002,001,032,050,002,129,032,066,027,014,192,001 440 DATA 002,002,131,074,140,176,022,006,140,176,022,004,140,176,022,002 450 DATA 192,048,004,080,002,033,000,008,016,239,002,000,037,000,200,000 460 DATA 131,034,002,224,131,224,004,096,000,206,002,224,032,008,192,032 470 DATA 131,132,096,032,131,048,002,032,033,012,002,128,064,000,026,003 480 DATA 002,000,011,000,016,236,007,032,032,048,192,032,131,048,002,001 490 DATA 033,012,220,112,136,000,131,132,018,252,200,032,131,048,032,040 500 DATA 200,032,131,050,032,042,200,032,131,132,032,044,200,032,131,134 510 DATA 032,046,016,029,002,224,032,008,200,032,032,048,032,048,022,003 520 DATA 002,000,029,000,016,204,192,032,032,040,002,001,033,012,220,049 530 DATA 136,000,032,044,018,252,200,032,032,040,131,048,200,032,032,042 540 DATA 131,050,200,032,032,044,131,132,200,032,032,046,131,134,004,192 550 DATA 216,000,131,124,002,224,131,224,004,096,000,112 560 END NEW 10 CALL CLEAR 20 PRINT "RUN this program to create aload program that loads and runs EA5, EA3, BASIC, and XB programs from DISK or HARD DRIVE." 30 PRINT :"STEP #1: Put in the Path of the DV80 USER file that will create the LOAD program" 40 PRINT :"STEP #2: Put in the path where to catalog a drive andwant the LOAD program to be saved and used" 50 PRINT :"STEP #3: If done then press ENTER, if you want to add more directorys put in path" 60 PRINT :"STEP #4: When done you pressENTER then the LOAD program is created and saved to the disk in path" 70 CALL KEY("",5,K,S) :: CALL CLEAR 150 CALL VERSION(V) :: IF V<2020 THEN PRINT "VERSION TO OLD TO CONTINUE!" :: END 160 DISPLAY AT(1,3)ERASE ALL:"RXB CREATES A LOAD PROGRAM" 170 CALL HPUT(5,3,"EXAMPLE:",7,3,"PATHNAME:DSK1.",9,3,"PATHNAME:DSK.DISKNAME.",11,3,"PATHNAME:WDS1.DIR.") 180 CALL HPUT(13,3,"PATHNAME:WDS1.DIR.SUB-DIR.",15,3,"PATHNAME:WDS.VOL.DIR.") 190 CALL HPUT(17,3,"PATHNAME:WDS.VOL.DIR.SUB-DIR.",19,3,"(Where to save result.)",23,3,"PATHNAME:") 200 ACCEPT AT(23,10)BEEP:M$ :: E$=CHR$(13) :: S$=CHR$(34) :: Q$=RPT$(S$,2) 210 CALL CLEAR :: PRINT "Creating USER file DV80-LOAD" 220 OPEN #1:M$&"DV80-LOAD",VARIABLE 80,DISPLAY,OUTPUT 230 PRINT #1:"NEW"&CHR$(13) 235 PRINT #1:"CALL QUITON"&CHR$(13) 240 PRINT #1:"100 ! RXB LOAD PROGRAM"&E$ 250 PRINT #1:"110 @=1 :: DIM P$(48),Y$(48),T(48)"&E$ 260 PRINT #1:"120 @=1::CALL VERSION(V) :: IF V<2020 THEN PRINT "&S$&"VERSION TO OLD TO CONTINUE!"&S$&" :: END"&E$ 270 PRINT #1:"130 RESTORE"&E$ 280 PRINT #1:"140 DISPLAY AT(1,3)ERASE ALL:"&S$&"RXB LOAD PROGRAM *"&S$&E$ 290 PRINT #1:"150 DISPLAY AT(6,1):"&S$&"ACTIVE KEYS ARE:"&S$&":: DISPLAY AT(7,1):"; 300 PRINT #1:S$&"E = UP CURSOR"&S$&":"&S$&"X = DOWN CURSOR"&S$&":"; 310 PRINT #1:S$&"S = LEFT CURSOR"&S$&":"&S$&"D = RIGHT CURSOR"&S$&E$ 320 PRINT #1:"160 DISPLAY AT(14,1):"&S$&"SPACE BAR = NEXT PAGE"&S$&": :"&S$&"C = DIRECTORY"&S$&": :"&S$&"1-9 = CATALOG DISK"&S$; 330 PRINT #1:" :: CALL HPUT(24,3,"&S$&"PLEASE WAIT..."&S$&")"&E$ 340 PRINT #1:"170 IF @ THEN CALL HPUT(24,3,"&S$&"PRESS ANY KEY TO CONTINUE!"&S$&")::CALL BEEP::CALL KEY("&Q$&",3,K,S)::@=0"&E$ 350 PRINT #1:"180 CALL CLEAR::E$=CHR$(13)::N=1"&E$ 360 PRINT #1:"190 Y=1::Z=3::CALL CHAR(128,"&S$&"080C0EFFFF0E0C08"&S$&",129,"&S$&"103070FFFF703010"&S$&")"&E$ 370 PRINT #1:"200 FOR C=4 TO 16 STEP 12 :: FOR R=1 TO 24"&E$ 380 PRINT #1:"210 READ P$(N),Y$(N),T(N)"&E$ 390 PRINT #1:"220 IF T(N)=0 THEN 260"&E$ 400 PRINT #1:"230 CALL HPUT(R,C,Y$(N))::IF C=4 THEN CALL HPUT(R,1,CHR$(T(N))) ELSE CALL HPUT(R,32,CHR$(T(N)))"&E$ 410 PRINT #1:"240 N=N+1::IF N=49 THEN N=48::GOTO 260"&E$ 420 PRINT #1:"250 NEXT R::NEXT C"&E$ 430 PRINT #1:"260 CALL HCHAR(Y,Z,128,1,Y,Z+11,129)"&E$ 440 PRINT #1:"270 CALL KEY(3,K,S)::IF K=67 THEN CALL CLEAR::INPUT "&S$&"PATH:"&S$&":X$::CALL CAT(X$)::CALL KEY("&Q$&",3,K,S)::GOTO 130"&E$ 450 PRINT #1:"280 CALL HCHAR(Y,Z,32,1,Y,Z+11,32) :: IF K>48 AND K<58 THEN CALL CAT(K) :: CALL KEY("&Q$&",3,K,S)::GOTO 130"&E$ 460 PRINT #1:"290 IF K=69 OR K=11 THEN S=Y::Y=Y-1::GOSUB 390::IF G=32 THEN Y=S"&E$ 470 PRINT #1:"300 IF K=88 OR K=10 THEN S=Y::Y=Y+1::GOSUB 390::IF G=32 THEN Y=S"&E$ 480 PRINT #1:"310 IF K=83 OR K= 8 THEN Z=3"&E$ 490 PRINT #1:"320 IF K=68 OR K=9 THEN Z=15::CALL GCHAR(Y,Z+1,G)::IF G=32 THEN Z=3"&E$ 500 PRINT #1:"330 IF K=32 THEN 340 ELSE 360"&E$ 510 PRINT #1:"340 Y=1::IF POS(P$(N),"&S$&"!........!"&S$&",1) THEN 130"&E$ 520 PRINT #1:"350 GOTO 180"&E$ 530 PRINT #1:"360 IF K=13 THEN 420"&E$ 540 PRINT #1:"370 IF K=43 OR K=61 THEN N,X=0::GOTO 140"&E$ 550 PRINT #1:"380 GOTO 260"&E$ 560 PRINT #1:"390 IF Y<1 THEN Y=24"&E$ 570 PRINT #1:"400 IF Y>24 THEN Y=1"&E$ 580 PRINT #1:"410 CALL GCHAR(Y,Z+1,G)::RETURN"&E$ 590 PRINT #1:"420 IF Z=15 THEN T$=P$(24+Y)&Y$(24+Y)ELSE T$=P$(Y)&Y$(Y)"&E$ 600 PRINT #1:"430 IF Z=3 THEN CALL GCHAR(Y,1,S) ELSE CALL GCHAR(Y,32,S)"&E$ 610 PRINT #1:"440 IF S=1 THEN CALL EALR(T$) ELSE IF S=5 THEN CALL EA(T$) ELSE IF S=4 THEN CALL XB(T$)"&E$ 620 PRINT #1:"450 IF S=9 THEN CALL USER(T$)::END"&E$ 640 CALL CLEAR :: ON ERROR 670 660 DELETE M$&"LOAD" 670 DISPLAY AT(1,1)ERASE ALL:"* INPUT DIRECTORY FOR LIST *" 680 CALL HPUT(5,3,"EXAMPLE:",7,3,"PATHNAME:DSK1.",9,3,"PATHNAME:DSK.DISKNAME.",11,3,"PATHNAME:WDS1.DIR.") 690 CALL HPUT(13,3,"PATHNAME:WDS1.DIR.SUB-DIR.",15,3,"PATHNAME:WDS.VOL.DIR.") 700 CALL HPUT(17,3,"PATHNAME:WDS.VOL.DIR.SUB-DIR.",19,3,"PATHNAME:(ENTER TO EXIT)",23,3,"PATHNAME:") 710 ACCEPT AT(23,10)BEEP:_$ 720 X=0 :: IF LEN(_$)=0 THEN 1120 730 DIM TYPE$(6),F$(128) 740 TYPE$(1)="DIS/FIX" 750 TYPE$(2)="DIS/VAR" 760 TYPE$(3)="INT/FIX" 770 TYPE$(4)="INT/VAR" 780 TYPE$(5)="PROGRAM" 790 TYPE$(6)="DIRECTORY" 800 OPEN #2:_$,INPUT,INTERNAL,FIXED 38 810 INPUT #2:A$,J,J,K 820 CALL CLEAR :: DISPLAY _$;" - DISKNAME= ";A$:"AVAILABLE= ";K;" USED= ";J-K 830 DISPLAY:"FILENAME SIZE TYPE P":"---------- ---- ---------- -"; 840 INPUT #2:A$,I,J,K 850 T=ABS(I) :: IF LEN(A$)=0 THEN GOSUB 1030 :: GOTO 670 860 DISPLAY: :A$;TAB(12);J;TAB(17);TYPE$(ABS(I)); 870 IF ABS(I)=5 THEN 910 880 IF ABS(I)=6 THEN 930 890 B$=" "&STR$(K) 900 DISPLAY SEG$(B$,LEN(B$)-2,3); 910 IF I>0 THEN 930 920 DISPLAY TAB(28);"Y"; 930 IF T=4 AND K=254 THEN 1010 940 IF T=5 THEN 950 ELSE 960 950 PRINT :: DISPLAY AT(24,1)BEEP:"XB or EA program? (X/E/ ) ?" :: GOSUB 1020 :: IF W=88 THEN T=4 :: GOTO 1010 ELSE IF W=69 THEN 1010 ELSE IF W=32 THEN 960 ELSE 950 960 IF T=2 AND K=80 THEN 970 ELSE 990 970 PRINT :: DISPLAY AT(24,1)BEEP:"BATCH ( B/ ) ?" :: GOSUB 1020 :: IF W=66 AND K=80 THEN T=9 :: GOTO 1010 980 IF W=86 AND K=80 THEN 1010 ELSE IF W=32 THEN 840 ELSE 970 990 IF T=1 AND K=80 THEN 1000 ELSE 840 1000 PRINT :: DISPLAY AT(24,1)BEEP:"EA OBJECT FILE? (Y/N) ?" :: GOSUB 1020 :: IF W=89 THEN 1010 ELSE IF W=78 THEN 840 ELSE 1000 1010 X=X+1 :: F$(X)=A$&","&STR$(T) :: GOTO 840 1020 CALL KEY("",3,W,S) :: RETURN 1030 PRINT: :"! Creating program list.": :"PLEASE WAIT..." 1040 IF X=0 THEN 1090 1050 FOR Y=1 TO X 1060 PRINT #1:STR$(1000+@)&" DATA "&_$&","&F$(Y)&E$ 1070 @=@+1 1080 NEXT Y 1090 PRINT #1:E$ 1100 CLOSE #2 1110 RETURN 1120 CALL CLEAR :: PRINT "PLEASE WAIT..." 1130 @=@+1 1140 PRINT #1:STR$(1000+@)&" DATA !........!,"&Q$&",0"&E$ 1150 PRINT #1:"SAVE "&M$&"LOAD,IV254"&E$ 1160 PRINT #1:"! New loader on disk and"&E$ 1170 PRINT #1:"! named LOAD, USER finished."&E$ 1180 PRINT #1:"! Please delete file: "&M$&"DV80-LOAD"&E$ 1190 PRINT #1:"CALL KEY("&CHR$(34)&CHR$(34)&",K,S)"&E$ 1200 PRINT #1:"CALL XB("&CHR$(34)&M$&"LOAD"&CHR$(34)&")"&E$ 1210 CALL CLSALL 1210 CALL USER(M$&"DV80-LOAD") SAVE DSK1.LOADER,IV254 CALL USER("DSK1.TEST-USER") This RXB USER demo will create and save 61 XB programs on disk 1. 1 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5239266 Share on other sites More sharing options...
+Vorticon Posted April 12, 2023 Share Posted April 12, 2023 I see little reason to use PC text files with CALL USER since those can simply be pasted directly into RXB under emulation. The main value of CALL USER is when working with source files within the TI environment, whether emulated or not, because it allows for easy editing using a TI text editor instead of using direct input into RXB. With Stevie now having the option of adding CR termination, the combination of RXB and Stevie becomes a powerful one for coding within the TI environment, particularly with the latter being 80 columns and full-featured and the former particularly suited for low-level hardware access using the CALL IO functionality as well as SAMS access. Very pleased 3 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5239272 Share on other sites More sharing options...
RXB Posted April 12, 2023 Share Posted April 12, 2023 6 hours ago, Vorticon said: I see little reason to use PC text files with CALL USER since those can simply be pasted directly into RXB under emulation. The main value of CALL USER is when working with source files within the TI environment, whether emulated or not, because it allows for easy editing using a TI text editor instead of using direct input into RXB. With Stevie now having the option of adding CR termination, the combination of RXB and Stevie becomes a powerful one for coding within the TI environment, particularly with the latter being 80 columns and full-featured and the former particularly suited for low-level hardware access using the CALL IO functionality as well as SAMS access. Very pleased I write in PC text files today, but originally way back in 1999 when I created CALL USER it was TI Writer Files. I was very delighted when I discovered FunnelWeb Editor Assembly Text Editor mode could add a CR to a line, thus much easier to use. Also RXB CALL CAT(TIPI) can catalog files too. The file catalog counter has been removed to be compatible with Classic99 and TIPI. 1 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5239406 Share on other sites More sharing options...
+retroclouds Posted August 6, 2023 Author Share Posted August 6, 2023 Here's something I started working on. It's in the early stages. What I have in mind is the possibility to have a file directory while typing part of a file path. Nowadays there are many fast devices like TIPI, HDR, IDE, etc. I would add a toggle to turn off the behaviour for "slow" devices like a floppy drive. So far I'm only using level 3 file I/O but do have to admit that on a floppy drive that is very slow. Anyway when this works, the next step is to implement the file-picker functionality. js99er-20230806155746.webm EDIT: also I'll have the possibility to keep showing the contents of the current directory when entering the file menu. 8 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5294992 Share on other sites More sharing options...
+Vorticon Posted August 7, 2023 Share Posted August 7, 2023 Great idea. Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5295258 Share on other sites More sharing options...
+Vorticon Posted September 25, 2023 Share Posted September 25, 2023 Any progress on the file directory feature? I recently found out that it would be super handy to have it instead of needing to exit Stevie and look up a directory Oh and a key repeat feature is also sorely needed. 2 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5323050 Share on other sites More sharing options...
+retroclouds Posted September 25, 2023 Author Share Posted September 25, 2023 6 hours ago, Vorticon said: Any progress on the file directory feature? I recently found out that it would be super handy to have it instead of needing to exit Stevie and look up a directory Oh and a key repeat feature is also sorely needed. Unfortunately progress is slow. I know it’s a lame excuse but work has been a killer this year and is eating most of my spare time and energy. Goal is to have a new Stevie version out the latest by the end of the year though. 3 1 Quote Link to comment https://forums.atariage.com/topic/286304-stevie-development-thread/page/8/#findComment-5323253 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.