senior_falcon Posted June 9, 2018 Share Posted June 9, 2018 Did you try: SAVE "CS1",IV254 Remember you have to have a file to save larger than 256 bytes long or will not work. Looks like I have to pull out my TI99/4A from storage and test it. Yes, it always gives you I/O ERROR 3. You never even get to the prompts for the cassette. Also, see my post #49 1 Quote Link to comment Share on other sites More sharing options...
Casey Posted June 9, 2018 Share Posted June 9, 2018 Yes, it always gives you I/O ERROR 3. You never even get to the prompts for the cassette. Also, see my post #49 Yes, this was the same experience I had on my real hardware, even with SAVE "CS1",IV254 - it just displays I/O Error 03. Quote Link to comment Share on other sites More sharing options...
RXB Posted June 9, 2018 Share Posted June 9, 2018 (edited) Yes, this was the same experience I had on my real hardware, even with SAVE "CS1",IV254 - it just displays I/O Error 03. Well this is the problem with GROM 0 of the TI99/4A as it has restrictions built in.... TI INTERN MANUAL GROM 0 Open, Restore 1387 : CZ @>834E Logical record length 1389 : BR GROM@>1391 138B : ST VDP@>FFFA(@>8356),>40 Decimal 64 default value 1391 : ADD VDP@>FFFA(@>8356),>3F 1397 : AND VDP@>FFFA(@>8356),>C0 Round to integer number 64 GROM 0 rounds to a values of 32 or 64, thus 254 will error out for RXB use of SAVE "CS1",IV254 Now RXB 2001 up to 2015 does have: CALL IO(4,number of bytes,VDP-address) There are no prompts as this is direct CRU Cassette control so this does not use any GROM 0 GPL. Thus you would need to write a XB program to run this routine, so would need to be merged with current XB program. And of course is limited to the amount of VDP RAM free. Now for example from COMMAND mode: 1. type in a program to save. (I used AMSTEST as a test program) 2. type: CALL I0(3,8,12,1) :: CALL IO(4,3884,10411) 3.turn on Cassette RECORD 4. press ENTER 5. When you hear no more sound from speaker STOP CASSETTE Line 2 turns ON the Audio CRU line so you can hear the RECORDING. Also in line 2 3884 bytes are written to Cassette from 10411 up to 14295 into VDP RAM Edited June 9, 2018 by RXB Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted June 10, 2018 Share Posted June 10, 2018 (edited) Here is a way to trick XB into saving and loading long programs of over 12K to/from cassette. There is a custom saver/loader program called CASS24K. When you run this a short assembly program is loaded to low memory. There are two assembly language subroutines: CALL LINK("SAVECS") and CALL LINK("OLDCS"). If you save a program that is short enough to be saved normally on cassette, then it will be saved in one segment as usual. It is pretty easy to fool XB into doing this. To save a long program, save the line number table pointers at >8330 and >8332, then change them to point to >D2AC and >D2AF. The program segment from >D2AC to >FFE7 will be saved. Then restore the line number table pointers and set >8384 to >D2AB. The program segment from the line number table to >D2AB is saved. To load the program, load the first part normally. Then set >8384 to >D2AB and load the second segment. Then set >8384 back to >FFE7. You could do all this by hand, but CASS24K automates it. (edit) removed attachment - see post 59 for latest version. Edited June 13, 2018 by senior_falcon 5 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted June 10, 2018 Author Share Posted June 10, 2018 Quote Link to comment Share on other sites More sharing options...
jrhodes Posted June 10, 2018 Share Posted June 10, 2018 Ditto Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted June 10, 2018 Share Posted June 10, 2018 (edited) I made a slight adjustment to the program to further automate the process. It is attached and here's how to use it: OLD DSK1.CASS24K RUN (this puts the assembly routines into low memory) Then edit line 10 by uncommenting CALL LINK("OLDCS") 10 CALL INIT :: CALL LOAD(8192,255,172):: CALL LINK("X")!::CALL LINK("OLDCS") Rewind the cassette tape and SAVE CS1 Then OLD DSK1.APERTURE-X (or another long program) CALL LINK("SAVECS") and follow the prompts. Now the tape is ready to go. NEW or QUIT, then get into XB. (You don't have to turn off the disk system as in my earlier video, I did that just to show there were no tricks) Rewind the tape and RUN "CS1". Press enter until the program is running. To find out if you need to load in 2 parts type SIZE. You need to do this two part loading if there are less than 12904 bytes of program space remaining. (edit) Removed attachment - see post 59 for latest version Edited June 13, 2018 by senior_falcon 2 Quote Link to comment Share on other sites More sharing options...
Opry99er Posted June 11, 2018 Author Share Posted June 11, 2018 Unreal.... thank you so much for this, Harry!!! I am looking forward to exploiting this soon. Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted June 13, 2018 Share Posted June 13, 2018 (edited) CASS24K by Harry Wilhelm – 2018 Normally a TI99/4A with Extended BASIC, 32K memory expansion and a cassette player can only save to or load from cassette an XB program around 12K or 13K long. With the memory expansion you could write much longer programs than this, but unless you had a disk drive there was no way to save it Two programs in this folder give the cassette only user the ability to use the cassette drive for XB programs of up to 24K in length. The programs do the same thing, but in different ways. CASS24K1 will save and load programs using one internal, fixed 192 file CASS24K2 fools XB into saving a long program as two shorter programs. When loading, these two halves are loaded, then recombined back into a single program. APERTURE-X is a compiled program for testing that is about 17K long. The steps are the same to use either one: First, load either CASS24K1 or CASS24K2 from disk. RUN will load the assembly routines to low memory. Modify line 10 by removing the exclamation point after CALL LINK(“X”) SAVE CS1 so the loader is first on the tape. Load the XB program you want to save to tape. (OLD DSK1.program) CALL LINK(“SAVECS”) and follow the prompts. (Don't rewind!) To run the tape you just made: Rewind to the beginning, type RUN “CS1” and follow the prompts. These have been tested with the Win994a simulator. CASS24K1 is much slower on this simulator, but based on the tape counter I believe there will be no significant speed difference on a real TI99. Try them both out and use the one that works best for you. (edit) I have uploaded a new version that fixes a bug in CASS24K2. If using CASS24K2 you must CALL FILES(1) before using it. (edit2) I have uploaded the same program but with more information about the use of CALL FILES(1); "When creating the tape, be sure you entered CALL FILES(1). After the tape is been created, only if the TI is connected to a disk system should you type CALL FILES(1) before RUN “CS1”. With only a cassette drive just type RUN “CS1”. You do not have to SAVE CS1. You can save to disk if that makes it easier to use a WAV conversion program such as cs1er. For example, a program called FRED could be saved as: SAVE DSK1.FREDL (the loader) SAVE DSK1.FRED1 (part 1) SAVE DSK1.FRED2 (part 2)" CASS24K070918.zip Edited July 10, 2018 by senior_falcon 2 Quote Link to comment Share on other sites More sharing options...
ti99iuc Posted June 13, 2018 Share Posted June 13, 2018 (edited) Wow, Really Thanks Harry, it also seems like the one that i hoped to have lately while archiving my cassette tapes for load long programs in Basic or XB that don't loading if a PEB with a disk controller is connected (it stops after the starting whistle and also CALL FILES (1) not solve) I'll do some trials and hope it will work in this case too Edited June 13, 2018 by ti99iuc Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted June 13, 2018 Share Posted June 13, 2018 (edited) Wow, Really Thanks Harry, it also seems like the one that i hoped to have lately while archiving my cassette tapes for load long programs in Basic or XB that don't loading if a PEB with a disk controller is connected (it stops after the starting whistle and also CALL FILES (1) not solve) I'll do some trials and hope it will work in this case too If I understand correctly, the presence of the disk drive keeps you from saving/loading lengthy XB programs to cassette that can be saved when the disk drive is not there. The utilities posted above can handle programs up to 24K long, but there is another possibility to do what you want. No guarantee this will work, but you could try this: OLD DSK1.program to load the XB program from disk CALL INIT CALL LOAD(-31974,63,255,"",-31936,63,255,"",-31888,63,255) This should tell the TI to use VDP ram that is normally reserved for the disk system. SAVE CS1 or OLD CS1 CALL FILES(3) to reactivate the disk system or you may need to restart. (This assumes you have the 32K expansion system) Edited June 13, 2018 by senior_falcon 1 Quote Link to comment Share on other sites More sharing options...
ti99iuc Posted June 13, 2018 Share Posted June 13, 2018 (edited) [...] you could try this: OLD DSK1.program to load the XB program from disk CALL INIT CALL LOAD(-31974,63,255,""-31936,63,255,""-31888,63,255) This should tell the TI to use VDP ram that is normally reserved for the disk system. SAVE CS1 or OLD CS1 CALL FILES(3) to reactivate the disk system or you may need to restart[...] nice code ! starting the TI99 in XB connected to the PEB (and 32K inside of course) i copied the lines but had an error at the CALL LOAD one. So i tried to split that line in three different CALL LOAD and was accepted without errors. so, tried to load the program from CS1 and it worked too. The Program can be executed but i can't save it on the disk. CALL FILES (3) freeze the computer and i can only turn off and on again the TI99. maybe exist another CALL LOAD to ability again the floppy drive and save the program on floppy disk ? it should be so good and help me to save lot of time. Edited June 13, 2018 by ti99iuc Quote Link to comment Share on other sites More sharing options...
jrhodes Posted June 13, 2018 Share Posted June 13, 2018 I have a list of CALL LOADs i keep handy, and according to it, CALL LOAD(-31888,55,215) should turn disk drives back on. call load - call peek.xb goodies.ti994a.txt 1 Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted June 13, 2018 Share Posted June 13, 2018 starting the TI99 in XB connected to the PEB (and 32K inside of course) i copied the lines but had an error at the CALL LOAD one. I left out two commas in that line. It should work now. Quote Link to comment Share on other sites More sharing options...
ti99iuc Posted June 13, 2018 Share Posted June 13, 2018 I have a list of CALL LOADs i keep handy, and according to it, CALL LOAD(-31888,55,215) should turn disk drives back on. call load - call peek.xb goodies.ti994a.txt really thanks for sharing the file and this info. I tried to use this instruction before to save on floppy disk. now the disk controller led power on but sadly the drive not start to save maybe something more still missing. I also tried to digit CALL INIT again and so the CALL LOAD but it not change the problem. Quote Link to comment Share on other sites More sharing options...
ti99iuc Posted June 13, 2018 Share Posted June 13, 2018 (edited) I left out two commas in that line. It should work now. i have this on the real TI99 instead splitting the CALL LOADs it seems to work maybe something change ? it have to work only in single line ? I just looking to understand a way to save it on Cassette tape using your suggested method because it seems to be a good one but i can't understand why the controller do not save it after i reactivate. maybe because the program it is fully loaded in the 32k and not in the main one ? a way to use your Cass24K1 or 2 and this method togheter, could be helpful to solve also my problem? Edited June 13, 2018 by ti99iuc Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted June 13, 2018 Share Posted June 13, 2018 i have this on the real TI99 1.png instead splitting the CALL LOADs it seems to work 2.png maybe something change ? it have to work only in single line ? I just looking to understand a way to save it on Cassette tape using your suggested method because it seems to be a good one but i can't understand why the controller do not save it after i reactivate. maybe because the program it is fully loaded in the 32k and not in the main one ? a way to use your Cass24K1 or 2 and this method togheter, could be helpful to solve also my problem? I just corrected the line. There should be a comma before and a comma after the double quotes. I fixed it before but must have forgotten to post it. It could be that this method does not work. I haven't tested it. The programs I posted, CASS24K1 and CASS24K2 will do the job, with the slight cost of having to load a loader before loading the program. Quote Link to comment Share on other sites More sharing options...
Opry99er Posted June 13, 2018 Author Share Posted June 13, 2018 Yes. I have a 20K XB program with embedded assembly code that I would like to be able to put on cassette for folks with tape only systems (with a sidecar 32k of course). This will get me there!! 1 Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted June 13, 2018 Share Posted June 13, 2018 Yes. I have a 20K XB program with embedded assembly code that I would like to be able to put on cassette for folks with tape only systems (with a sidecar 32k of course). This will get me there!! Compare the two loaders for speed, convenience, etc. and post the results. Quote Link to comment Share on other sites More sharing options...
RXB Posted June 14, 2018 Share Posted June 14, 2018 (edited) i have this on the real TI99 1.png instead splitting the CALL LOADs it seems to work 2.png maybe something change ? it have to work only in single line ? I just looking to understand a way to save it on Cassette tape using your suggested method because it seems to be a good one but i can't understand why the controller do not save it after i reactivate. maybe because the program it is fully loaded in the 32k and not in the main one ? a way to use your Cass24K1 or 2 and this method togheter, could be helpful to solve also my problem? Ok as the author of RXB and I know the XB GPL source code intimately I will explain why you the one line will crash. When you put in a ADDRESS then a list of numbers XB does not know you want to make another ADDRESS then list of numbers. Hence the crash, but if you put the ADDRESS then list it works as designed, after all XB can not read minds. Edited June 14, 2018 by RXB Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted June 14, 2018 Share Posted June 14, 2018 Ok as the author of RXB and I know the XB GPL source code intimately I will explain why you the one line will crash. When you put in a ADDRESS then a list of numbers XB does not know you want to make another ADDRESS then list of numbers. Hence the crash, but if you put the ADDRESS then list it works as designed, after all XB can not read minds. Rich, that is just plain wrong. I could quote my credentials too, but none of that matters. This requires zero expertise; all you have to do is read the XB manual. On page 116 you will read: "The LOAD subprogram can specify one or more files from which to load object data or lists of direct load data, which consists of an address followed by data bytes. The address and data bytes are separated by commas. Direct load data must be separated by file:field, which is a string expression specifying a file from which to load assembly language object code. Flle:field may be a null string when it is used merely to separate direct load data fields." In my post #67 I wrote: "I just corrected the line. There should be a comma before and a comma after the double quotes. I fixed it before but must have forgotten to post it." The line should be: CALL LOAD(-31974,63,255,"",-31936,63,255,"",-31888,63,255) If you look at the photo Ciro posted you will see that two commas are missing from the line, which is how I originally posted it. That is the reason the line crashes. 1 Quote Link to comment Share on other sites More sharing options...
RXB Posted June 14, 2018 Share Posted June 14, 2018 I stand corrected. [0400] *********************************************************** [0401] * ASSEMBLY LANGUAGE SUPPORT FOR 99/4 [0402] * [0403] * LOAD, INIT, PEEK, LINK, CHARPAT JDH 08/21/80 [0404] *********************************************************** [0405] * FORMAT FOR LOAD: [0406] * CALL LOAD open load-directive (comma load-directive) [0407] * close [0408] * load-directive = file-name / address (comma data) [0409] * (null / file-name) [0410] * file-name = string-expression [0411] * address = numeric-expression [0412] * data = numeric-expression [0413] * [0414] * FILE TYPE = FIXED 80, DISPLAY , SEQUENTIAL FILE [0415] * [0416] * FUNCTION: [0417] * LOADS ASSEMBLY LANGUAGE CODE INTO EXPANSION RAM [0418] * ADDRESSES: >2000 - >>3FFF RELOCATING [0419] * RELOCATABLE CODE INTO AVAILABLE MEMORY, ABSOLUTE CODE [0420] * IS LOADED [0421] * INTO ITS ABSOLUTE ADDRESS, ENTRY POINTS ARE DEFINED BY [0422] * 'DEF' STATEMENTS, AND ARE LOADED INTO HIGH END OF ERAM [0423] * [0424] * RELOACATABLE OR ABSOLUTE CODE MAY BE STORED ON A FILE [0425] * 9900 OBJECT CODE FORMAT. [0426] * VALID TAGS = 0, 5, 6, 7, 9, A, B, C, F,: [0427] * TAGS 1, 2, I, M, ARE IGNORED [0428] * THE SYMT OPTION IS NOT SUPPORTED. [0429] * ABSOLUTE CODE MAY BE LOADED DIRECTLY FROM PROGRAM [0430] * BY SPECIFYING AN ADDRESS INSTEAD OF A FILE NAME, [0431] * FOLLOWED BY THE DATA TO BE LOADED (WHICH IS PUT IN THE [0432] * RANGE 0 to 255 [0433] * THE RANGE OF THE ADDRESS OR DATA IS LIMITED TO [0434] * 32767 to -32768 [0435] * MULTIPLE DIRECT LOADS CAN BE IN THE SAME LOAD COMMAND [0436] * PROVIDED THEY ARE SEPARATED BY EITHER A FILENAME OR A [0437] * NULL STRING. [0438] * [0439] * RXB CHANGED MVUP TO GPL MOVE AS MOVING 2 BYTES USING 14 [0440] * BYTES OF GPL TO MOVE RAM TO SCRATCH PAD WAS SLOWER. [0441] * [0442] * MVUP WAS USED TO TRANSFER DATA FROM CPU RAM TO ERAM [0443] * SINCE IT WAS NOT KNOWN AT FIRST THAT THE MOVE [0444] * INSTRUCTION COULD TRANSFER FROM CPU RAM TO ERAM [0445] * (PROVIDED THAT >8300 IS SUBTRACTED FROM THE ADDRESSES) [0446] *********************************************************** [0447] * RXB PATCH CHANGED CALL INIT TO A GPL MOVE ALL 1 CHUNK [0448] * REPLACING ORIGINAL TI MOVING 4 CHUNKS WITH MULTIPLE LOOPS [0449] *********************************************************** Quote Link to comment Share on other sites More sharing options...
senior_falcon Posted June 16, 2018 Share Posted June 16, 2018 CASS24K is meant to save to cassette long XB programs that are too long to be saved normally. The workflow would normally be to read a program from disk and then save the program to cassette. Ciro wants to do just the opposite. He wants to read a program from cassette and save it to disk. The problem is that in the old days long programs were written and saved to cassette. This works fine, but if you add a disk system some of the VDP memory is needed for disk operations. Now those long programs will not load from cassette. If you could load them they could then be saved to disk. I wrote a little utility for him that does what he needs. The program is called DSKONOFF. Download the program and get it over to the TI. Load and run the program. This will copy the assembly routines into low memory. If you CALL LINK("DSKOFF") the disk system is disabled which frees up the vdp ram so you have enough room to load a long cassette program with OLD CS1 Then CALL LINK("DSKON") and the disk system is enabled so you can save the program to disk. DSKONOFF.zip 3 Quote Link to comment Share on other sites More sharing options...
Omega-TI Posted June 16, 2018 Share Posted June 16, 2018 Ciro wants to do just the opposite. He wants to read a program from cassette and save it to disk. The problem is that in the old days long programs were written and saved to cassette. This works fine, but if you add a disk system some of the VDP memory is needed for disk operations. Now those long programs will not load from cassette. If you could load them they could then be saved to disk. I wrote a little utility for him that does what he needs. I just popped in here and have not read this entire thread, but if Ciro has an HDX another method is to simply pull the FDC out of the P-Box. Turn on the system, load the tape and save to the HDX. Once the program is there, the sky is the limit. << Reference >> Quote Link to comment Share on other sites More sharing options...
Opry99er Posted June 16, 2018 Author Share Posted June 16, 2018 CASS24K is meant to save to cassette long XB programs that are too long to be saved normally. The workflow would normally be to read a program from disk and then save the program to cassette. Ciro wants to do just the opposite. He wants to read a program from cassette and save it to disk. The problem is that in the old days long programs were written and saved to cassette. This works fine, but if you add a disk system some of the VDP memory is needed for disk operations. Now those long programs will not load from cassette. If you could load them they could then be saved to disk. I wrote a little utility for him that does what he needs. The program is called DSKONOFF. Download the program and get it over to the TI. Load and run the program. This will copy the assembly routines into low memory. If you CALL LINK("DSKOFF") the disk system is disabled which frees up the vdp ram so you have enough room to load a long cassette program with OLD CS1 Then CALL LINK("DSKON") and the disk system is enabled so you can save the program to disk. Wow!!! I'm curious how you accomplished this!! Quote Link to comment 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.